diff --git a/.beads/.gitignore b/.beads/.gitignore deleted file mode 100644 index f438450fc..000000000 --- a/.beads/.gitignore +++ /dev/null @@ -1,29 +0,0 @@ -# SQLite databases -*.db -*.db?* -*.db-journal -*.db-wal -*.db-shm - -# Daemon runtime files -daemon.lock -daemon.log -daemon.pid -bd.sock - -# Legacy database files -db.sqlite -bd.db - -# Merge artifacts (temporary files from 3-way merge) -beads.base.jsonl -beads.base.meta.json -beads.left.jsonl -beads.left.meta.json -beads.right.jsonl -beads.right.meta.json - -# Keep JSONL exports and config (source of truth for git) -!issues.jsonl -!metadata.json -!config.json diff --git a/.beads/.local_version b/.beads/.local_version deleted file mode 100644 index 76d0ef9d1..000000000 --- a/.beads/.local_version +++ /dev/null @@ -1 +0,0 @@ -0.49.6 diff --git a/.beads/README.md b/.beads/README.md deleted file mode 100644 index 50f281f03..000000000 --- a/.beads/README.md +++ /dev/null @@ -1,81 +0,0 @@ -# Beads - AI-Native Issue Tracking - -Welcome to Beads! This repository uses **Beads** for issue tracking - a modern, AI-native tool designed to live directly in your codebase alongside your code. - -## What is Beads? - -Beads is issue tracking that lives in your repo, making it perfect for AI coding agents and developers who want their issues close to their code. No web UI required - everything works through the CLI and integrates seamlessly with git. - -**Learn more:** [github.com/steveyegge/beads](https://github.com/steveyegge/beads) - -## Quick Start - -### Essential Commands - -```bash -# Create new issues -bd create "Add user authentication" - -# View all issues -bd list - -# View issue details -bd show - -# Update issue status -bd update --status in_progress -bd update --status done - -# Sync with git remote -bd sync -``` - -### Working with Issues - -Issues in Beads are: -- **Git-native**: Stored in `.beads/issues.jsonl` and synced like code -- **AI-friendly**: CLI-first design works perfectly with AI coding agents -- **Branch-aware**: Issues can follow your branch workflow -- **Always in sync**: Auto-syncs with your commits - -## Why Beads? - -✨ **AI-Native Design** -- Built specifically for AI-assisted development workflows -- CLI-first interface works seamlessly with AI coding agents -- No context switching to web UIs - -🚀 **Developer Focused** -- Issues live in your repo, right next to your code -- Works offline, syncs when you push -- Fast, lightweight, and stays out of your way - -🔧 **Git Integration** -- Automatic sync with git commits -- Branch-aware issue tracking -- Intelligent JSONL merge resolution - -## Get Started with Beads - -Try Beads in your own projects: - -```bash -# Install Beads -curl -sSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash - -# Initialize in your repo -bd init - -# Create your first issue -bd create "Try out Beads" -``` - -## Learn More - -- **Documentation**: [github.com/steveyegge/beads/docs](https://github.com/steveyegge/beads/tree/main/docs) -- **Quick Start Guide**: Run `bd quickstart` -- **Examples**: [github.com/steveyegge/beads/examples](https://github.com/steveyegge/beads/tree/main/examples) - ---- - -*Beads: Issue tracking that moves at the speed of thought* ⚡ diff --git a/.beads/backup/backup_state.jsonl b/.beads/backup/backup_state.jsonl new file mode 100644 index 000000000..18b6118e0 --- /dev/null +++ b/.beads/backup/backup_state.jsonl @@ -0,0 +1 @@ +{"last_dolt_commit":"2llfvsmt49qbbnijmqsobepq93q83mtt","last_event_id":0,"timestamp":"2026-03-03T09:48:16.450356Z","counts":{"issues":0,"events":0,"comments":0,"dependencies":0,"labels":0,"config":12}} diff --git a/.beads/backup/comments.jsonl b/.beads/backup/comments.jsonl new file mode 100644 index 000000000..e69de29bb diff --git a/.beads/backup/config.jsonl b/.beads/backup/config.jsonl new file mode 100644 index 000000000..d09b29cee --- /dev/null +++ b/.beads/backup/config.jsonl @@ -0,0 +1,12 @@ +{"key":"auto_compact_enabled","value":"false"} +{"key":"compact_batch_size","value":"50"} +{"key":"compact_model","value":"claude-haiku-4-5-20251001"} +{"key":"compact_parallel_workers","value":"5"} +{"key":"compact_tier1_days","value":"30"} +{"key":"compact_tier1_dep_levels","value":"2"} +{"key":"compact_tier2_commits","value":"100"} +{"key":"compact_tier2_days","value":"90"} +{"key":"compact_tier2_dep_levels","value":"5"} +{"key":"compaction_enabled","value":"false"} +{"key":"schema_version","value":"6"} +{"key":"types.custom","value":"molecule,gate,convoy,merge-request,slot,agent,role,rig,message"} diff --git a/.beads/backup/dependencies.jsonl b/.beads/backup/dependencies.jsonl new file mode 100644 index 000000000..e69de29bb diff --git a/.beads/backup/events.jsonl b/.beads/backup/events.jsonl new file mode 100644 index 000000000..e69de29bb diff --git a/.beads/backup/issues.jsonl b/.beads/backup/issues.jsonl new file mode 100644 index 000000000..e69de29bb diff --git a/.beads/backup/labels.jsonl b/.beads/backup/labels.jsonl new file mode 100644 index 000000000..e69de29bb diff --git a/.beads/config.yaml b/.beads/config.yaml deleted file mode 100644 index 4445507fb..000000000 --- a/.beads/config.yaml +++ /dev/null @@ -1,62 +0,0 @@ -# Beads Configuration File -# This file configures default behavior for all bd commands in this repository -# All settings can also be set via environment variables (BD_* prefix) -# or overridden with command-line flags -sync-branch: beads-sync -# Issue prefix for this repository (used by bd init) -# If not set, bd init will auto-detect from directory name -# Example: issue-prefix: "myproject" creates issues like "myproject-1", "myproject-2", etc. -# issue-prefix: "" - -# Use no-db mode: load from JSONL, no SQLite, write back after each command -# When true, bd will use .beads/issues.jsonl as the source of truth -# instead of SQLite database -# no-db: false - -# Disable daemon for RPC communication (forces direct database access) -# no-daemon: false - -# Disable auto-flush of database to JSONL after mutations -# no-auto-flush: false - -# Disable auto-import from JSONL when it's newer than database -# no-auto-import: false - -# Enable JSON output by default -# json: false - -# Default actor for audit trails (overridden by BD_ACTOR or --actor) -# actor: "" - -# Path to database (overridden by BEADS_DB or --db) -# db: "" - -# Auto-start daemon if not running (can also use BEADS_AUTO_START_DAEMON) -# auto-start-daemon: true - -# Debounce interval for auto-flush (can also use BEADS_FLUSH_DEBOUNCE) -# flush-debounce: "5s" - -# Git branch for beads commits (bd sync will commit to this branch) -# IMPORTANT: Set this for team projects so all clones use the same sync branch. -# This setting persists across clones (unlike database config which is gitignored). -# Can also use BEADS_SYNC_BRANCH env var for local override. -# If not set, bd sync will require you to run 'bd config set sync.branch '. -# sync-branch: "beads-sync" - -# Multi-repo configuration (experimental - bd-307) -# Allows hydrating from multiple repositories and routing writes to the correct JSONL -# repos: -# primary: "." # Primary repo (where this database lives) -# additional: # Additional repos to hydrate from (read-only) -# - ~/beads-planning # Personal planning repo -# - ~/work-planning # Work planning repo - -# Integration settings (access with 'bd config get/set') -# These are stored in the database, not in this file: -# - jira.url -# - jira.project -# - linear.url -# - linear.api-key -# - github.org -# - github.repo diff --git a/.beads/deletions.jsonl b/.beads/deletions.jsonl deleted file mode 100644 index 0b690e7ae..000000000 --- a/.beads/deletions.jsonl +++ /dev/null @@ -1,29 +0,0 @@ -{"id":"node-67f","ts":"2025-12-06T09:42:23.171680064+01:00","by":"bd-doctor-hydrate","reason":"Hydrated from git history"} -{"id":"node-d82","ts":"2025-12-06T09:42:23.171680064+01:00","by":"bd-doctor-hydrate","reason":"Hydrated from git history"} -{"id":"node-w8x","ts":"2025-12-06T09:42:23.171680064+01:00","by":"bd-doctor-hydrate","reason":"Hydrated from git history"} -{"id":"node-bh1","ts":"2025-12-06T09:42:23.171680064+01:00","by":"bd-doctor-hydrate","reason":"Hydrated from git history"} -{"id":"node-aqw","ts":"2025-12-06T09:42:23.171680064+01:00","by":"bd-doctor-hydrate","reason":"Hydrated from git history"} -{"id":"node-cty","ts":"2025-12-06T09:42:23.171680064+01:00","by":"bd-doctor-hydrate","reason":"Hydrated from git history"} -{"id":"node-j7r","ts":"2025-12-06T09:42:23.171680064+01:00","by":"bd-doctor-hydrate","reason":"Hydrated from git history"} -{"id":"node-oa5","ts":"2025-12-06T09:42:23.171680064+01:00","by":"bd-doctor-hydrate","reason":"Hydrated from git history"} -{"id":"node-99g.5","ts":"2025-12-06T09:42:23.171680064+01:00","by":"bd-doctor-hydrate","reason":"Hydrated from git history"} -{"id":"node-99g.6","ts":"2025-12-06T09:42:23.171680064+01:00","by":"bd-doctor-hydrate","reason":"Hydrated from git history"} -{"id":"node-99g.7","ts":"2025-12-06T09:42:23.171680064+01:00","by":"bd-doctor-hydrate","reason":"Hydrated from git history"} -{"id":"node-s48","ts":"2025-12-06T09:42:23.171680064+01:00","by":"bd-doctor-hydrate","reason":"Hydrated from git history"} -{"id":"node-wrd","ts":"2025-12-06T09:42:23.171680064+01:00","by":"bd-doctor-hydrate","reason":"Hydrated from git history"} -{"id":"node-b7d","ts":"2025-12-06T09:42:23.171680064+01:00","by":"bd-doctor-hydrate","reason":"Hydrated from git history"} -{"id":"node-k28","ts":"2025-12-06T09:42:23.171680064+01:00","by":"bd-doctor-hydrate","reason":"Hydrated from git history"} -{"id":"node-636","ts":"2025-12-06T09:42:23.171680064+01:00","by":"bd-doctor-hydrate","reason":"Hydrated from git history"} -{"id":"node-99g","ts":"2025-12-06T09:42:23.171680064+01:00","by":"bd-doctor-hydrate","reason":"Hydrated from git history"} -{"id":"node-99g.1","ts":"2025-12-06T09:42:23.171680064+01:00","by":"bd-doctor-hydrate","reason":"Hydrated from git history"} -{"id":"node-99g.3","ts":"2025-12-06T09:42:23.171680064+01:00","by":"bd-doctor-hydrate","reason":"Hydrated from git history"} -{"id":"node-9gr","ts":"2025-12-06T09:42:23.171680064+01:00","by":"bd-doctor-hydrate","reason":"Hydrated from git history"} -{"id":"node-9ms","ts":"2025-12-06T09:42:23.171680064+01:00","by":"bd-doctor-hydrate","reason":"Hydrated from git history"} -{"id":"node-ecu","ts":"2025-12-06T09:42:23.171680064+01:00","by":"bd-doctor-hydrate","reason":"Hydrated from git history"} -{"id":"node-egh","ts":"2025-12-06T09:42:23.171680064+01:00","by":"bd-doctor-hydrate","reason":"Hydrated from git history"} -{"id":"node-99g.2","ts":"2025-12-06T09:42:23.171680064+01:00","by":"bd-doctor-hydrate","reason":"Hydrated from git history"} -{"id":"node-99g.4","ts":"2025-12-06T09:42:23.171680064+01:00","by":"bd-doctor-hydrate","reason":"Hydrated from git history"} -{"id":"node-99g.8","ts":"2025-12-06T09:42:23.171680064+01:00","by":"bd-doctor-hydrate","reason":"Hydrated from git history"} -{"id":"node-1q8","ts":"2025-12-06T09:42:23.171680064+01:00","by":"bd-doctor-hydrate","reason":"Hydrated from git history"} -{"id":"node-66u","ts":"2025-12-06T09:42:23.171680064+01:00","by":"bd-doctor-hydrate","reason":"Hydrated from git history"} -{"id":"node-hxv","ts":"2025-12-06T09:21:58.542706946Z","by":"tcsenpai","reason":"manual delete"} diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index 09f3fc835..da8b3674e 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -1,6 +1,82 @@ -{"id":"node-8ka","title":"ZK Identity System - Phase 6-8: Node Integration","description":"ProofVerifier, GCR transaction types (zk_commitment_add, zk_attestation_add), RPC endpoints (/zk/merkle-root, /zk/merkle/proof, /zk/nullifier)","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-06T09:43:09.277685498+01:00","updated_at":"2025-12-06T09:43:25.850988068+01:00","closed_at":"2025-12-06T09:43:25.850988068+01:00","labels":["gcr","node","zk"],"dependencies":[{"issue_id":"node-8ka","depends_on_id":"node-94a","type":"blocks","created_at":"2025-12-06T09:43:16.947262666+01:00","created_by":"daemon"}]} -{"id":"node-94a","title":"ZK Identity System - Phase 1-5: Core Cryptography","description":"Core ZK-SNARK cryptographic foundation using Groth16/Poseidon. Includes circuits, Merkle tree, database entities.","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-06T09:43:09.180321179+01:00","updated_at":"2025-12-06T09:43:25.782519636+01:00","closed_at":"2025-12-06T09:43:25.782519636+01:00","labels":["cryptography","groth16","zk"]} -{"id":"node-9q4","title":"ZK Identity System - Phase 9: SDK Integration","description":"SDK CommitmentService (poseidon-lite), ProofGenerator (snarkjs), ZKIdentity class. Located in ../sdks/src/encryption/zK/","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-06T09:43:09.360890667+01:00","updated_at":"2025-12-06T09:43:25.896325192+01:00","closed_at":"2025-12-06T09:43:25.896325192+01:00","labels":["sdk","zk"],"dependencies":[{"issue_id":"node-9q4","depends_on_id":"node-8ka","type":"blocks","created_at":"2025-12-06T09:43:16.997274204+01:00","created_by":"daemon"}]} -{"id":"node-a95","title":"ZK Identity System - Future: Verify-and-Delete Flow","description":"zk_verified_commitment: OAuth verify + create ZK commitment + skip public record (privacy preservation). See serena memory: zk_verify_and_delete_plan","status":"open","priority":2,"issue_type":"feature","created_at":"2025-12-06T09:43:09.576634316+01:00","updated_at":"2025-12-06T09:43:09.576634316+01:00","labels":["future","privacy","zk"],"dependencies":[{"issue_id":"node-a95","depends_on_id":"node-dj4","type":"blocks","created_at":"2025-12-06T09:43:17.134669302+01:00","created_by":"daemon"}]} -{"id":"node-bj2","title":"ZK Identity System - Phase 10: Trusted Setup Ceremony","description":"Multi-party ceremony with 40+ nodes. Script: src/features/zk/scripts/ceremony.ts. Generates final proving/verification keys.","notes":"Currently running ceremony with 40+ nodes on separate repo. Script ready at src/features/zk/scripts/ceremony.ts","status":"in_progress","priority":1,"issue_type":"epic","created_at":"2025-12-06T09:43:09.430249817+01:00","updated_at":"2025-12-06T09:43:25.957018289+01:00","labels":["ceremony","security","zk"],"dependencies":[{"issue_id":"node-bj2","depends_on_id":"node-9q4","type":"blocks","created_at":"2025-12-06T09:43:17.036700285+01:00","created_by":"daemon"}]} -{"id":"node-dj4","title":"ZK Identity System - Phase 11: CDN Deployment","description":"Upload WASM, proving keys to CDN. Update SDK ProofGenerator with CDN URLs. See serena memory: zk_technical_architecture","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-06T09:43:09.507162284+01:00","updated_at":"2025-12-06T09:43:09.507162284+01:00","labels":["cdn","deployment","zk"],"dependencies":[{"issue_id":"node-dj4","depends_on_id":"node-bj2","type":"blocks","created_at":"2025-12-06T09:43:17.091861452+01:00","created_by":"daemon"}]} +{"id":"bd-1bm","title":"Remove nonce validation bypass","status":"closed","priority":0,"issue_type":"bug","created_at":"2026-03-04T15:17:54.412634883Z","created_by":"tcsenpai","updated_at":"2026-03-04T15:40:40.747575886Z","closed_at":"2026-03-04T15:40:40.747353948Z","close_reason":"Removed nonce validation bypass in assignNonce","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-1bm","depends_on_id":"bd-3j1","type":"discovered-from","created_at":"2026-03-04T15:17:54.412634883Z","created_by":"tcsenpai"}]} +{"id":"bd-1dz","title":"Fix: custom token script methods missing scriptCode","status":"closed","priority":1,"issue_type":"bug","created_at":"2026-03-04T08:38:03.164412541Z","created_by":"tcsenpai","updated_at":"2026-03-04T08:38:49.031724610Z","closed_at":"2026-03-04T08:38:49.031408024Z","close_reason":"Pass token.script.code into scriptExecutor.executeMethod; update ScriptMethodRequest and token docs","source_repo":".","compaction_level":0,"original_size":0} +{"id":"bd-1ha","title":"(Investigate) token hook timestamps: ensure no Date.now fallback","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-04T15:17:58.498042377Z","created_by":"tcsenpai","updated_at":"2026-03-04T15:27:55.909050215Z","closed_at":"2026-03-04T15:27:55.908809852Z","close_reason":"No remaining Date.now fallbacks in token routines","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-1ha","depends_on_id":"bd-uf3","type":"discovered-from","created_at":"2026-03-04T15:17:58.498042377Z","created_by":"tcsenpai"}]} +{"id":"bd-1kf","title":"PR685: address new Qodo review round","status":"closed","priority":1,"issue_type":"epic","created_at":"2026-03-04T16:39:04.051316720Z","created_by":"tcsenpai","updated_at":"2026-03-04T16:45:17.165274342Z","closed_at":"2026-03-04T16:45:17.165020755Z","close_reason":"All new PR685 review items addressed","source_repo":".","compaction_level":0,"original_size":0} +{"id":"bd-1pq","title":"Harden token script VM sandbox + bound compile cache","status":"closed","priority":1,"issue_type":"task","created_at":"2026-03-04T15:17:54.196251592Z","created_by":"tcsenpai","updated_at":"2026-03-04T15:19:28.348249941Z","closed_at":"2026-03-04T15:19:28.348100370Z","close_reason":"Implemented determinism hardening + bounded compiled cache","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-1pq","depends_on_id":"bd-3j1","type":"discovered-from","created_at":"2026-03-04T15:17:54.196251592Z","created_by":"tcsenpai"}]} +{"id":"bd-1qv","title":"Fix simulate rollback to never persist DB","status":"closed","priority":1,"issue_type":"task","created_at":"2026-03-04T15:17:54.312246687Z","created_by":"tcsenpai","updated_at":"2026-03-04T15:29:42.043518176Z","closed_at":"2026-03-04T15:29:42.043361872Z","close_reason":"Propagate simulate flag into rollback so validation cannot persist","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-1qv","depends_on_id":"bd-3j1","type":"discovered-from","created_at":"2026-03-04T15:17:54.312246687Z","created_by":"tcsenpai"}]} +{"id":"bd-24y","title":"Implement securityModule rate limiting","status":"closed","priority":1,"issue_type":"task","created_at":"2026-03-04T15:17:54.463476164Z","created_by":"tcsenpai","updated_at":"2026-03-04T15:40:40.885850087Z","closed_at":"2026-03-04T15:40:40.885703912Z","close_reason":"Implemented configurable in-process rate limiting via securityModule","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-24y","depends_on_id":"bd-3j1","type":"discovered-from","created_at":"2026-03-04T15:17:54.463476164Z","created_by":"tcsenpai"}]} +{"id":"bd-2gc","title":"Fix sync ordering so token scripts see correct prevBlockHash","status":"closed","priority":1,"issue_type":"bug","created_at":"2026-03-04T16:39:12.059555326Z","created_by":"tcsenpai","updated_at":"2026-03-04T16:43:33.327671027Z","closed_at":"2026-03-04T16:43:33.327376152Z","close_reason":"Apply GCR/token edits before insertBlock during sync to keep prevBlockHash stable","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2gc","depends_on_id":"bd-1kf","type":"discovered-from","created_at":"2026-03-04T16:39:12.059555326Z","created_by":"tcsenpai"}]} +{"id":"bd-2lj","title":"Make consensus finalizeBlock atomic w/ token edits","status":"closed","priority":1,"issue_type":"task","created_at":"2026-03-04T15:17:54.362525449Z","created_by":"tcsenpai","updated_at":"2026-03-04T15:37:12.882032261Z","closed_at":"2026-03-04T15:37:12.881801557Z","close_reason":"Apply token edits and insert block inside one DB transaction","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2lj","depends_on_id":"bd-3j1","type":"discovered-from","created_at":"2026-03-04T15:17:54.362525449Z","created_by":"tcsenpai"}]} +{"id":"bd-2ra","title":"Docs: token test runs + results","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T16:28:08.346728971Z","created_by":"tcsenpai","updated_at":"2026-03-03T16:28:56.029960497Z","closed_at":"2026-03-03T16:28:56.029615607Z","close_reason":"Added documentation/tokens/TEST_RESULTS.md summarizing verified better_testing token RUN_IDs","source_repo":".","compaction_level":0,"original_size":0} +{"id":"bd-2vy","title":"Scene washington-heat: better_testing: perf harness","description":"Track perf/loadgen harness work in better_testing/. Token-related scenarios live under the Token testing epic.","status":"open","priority":1,"issue_type":"epic","created_at":"2026-03-03T10:02:00.089149801Z","created_by":"tcsenpai","updated_at":"2026-03-03T10:02:00.089149801Z","external_ref":"node-y3g","source_repo":".","compaction_level":0,"original_size":0} +{"id":"bd-2vy.1","title":"Token testing (better_testing)","description":"Track token system validation via better_testing/ harness (no formal test framework yet). Focus: correctness + reliability under consensus + perf baselines. Deliverables: scenarios for ACL matrix, edge cases, consensus consistency checks, and read/query coverage; plus runbooks and reproducible artifacts.","status":"closed","priority":1,"issue_type":"epic","created_at":"2026-03-03T10:03:24.734908089Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:02:59.830456368Z","closed_at":"2026-03-03T11:02:59.830236164Z","close_reason":"All children completed","external_ref":"node-y3g.9","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1","depends_on_id":"bd-2vy","type":"parent-child","created_at":"2026-03-03T10:03:24.734908089Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.1","title":"Scene adams-vertigo: Token: future features (not yet implemented)","description":"Track token features present in schema/types but not implemented yet (e.g., approvals/allowances/transferFrom), plus tests to add once implemented.","status":"closed","priority":1,"issue_type":"epic","created_at":"2026-03-03T10:03:24.885932493Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:02:51.637826299Z","closed_at":"2026-03-03T11:02:51.637666518Z","close_reason":"All children completed","external_ref":"node-y3g.9.18","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.1","depends_on_id":"bd-2vy.1","type":"parent-child","created_at":"2026-03-03T10:03:24.885932493Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.1.1","title":"Token: holder enumeration/export for global invariants","description":"Bounded holder export primitive (from state.balances) to enable global invariants.","notes":"PASS: token_holders_export RUN_ID=token_holders_export-20260303-092715 (bounded to state.balances; 0-balance entries may be pruned). Commit: 64faf1f8.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T10:04:13.220925267Z","created_by":"tcsenpai","updated_at":"2026-03-03T10:04:13.284453422Z","closed_at":"2026-03-03T10:04:13.220925267Z","external_ref":"node-y3g.9.18.1","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.1.1","depends_on_id":"bd-2vy.1.1","type":"parent-child","created_at":"2026-03-03T10:04:13.220925267Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.1.2","title":"Token: allowances/approvals not implemented (future)","description":"Confirmed allowances/approvals/transferFrom are not implemented as native ops; track as future feature + future tests.","notes":"Closed during token testing sweep; implement feature before adding ACL tests for allowances.","status":"closed","priority":1,"issue_type":"task","created_at":"2026-03-03T10:04:13.355746325Z","created_by":"tcsenpai","updated_at":"2026-03-03T10:04:13.422964287Z","closed_at":"2026-03-03T10:04:13.355746325Z","external_ref":"node-y3g.9.17","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.1.2","depends_on_id":"bd-2vy.1.1","type":"parent-child","created_at":"2026-03-03T10:04:13.355746325Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.2","title":"Token: invariants over known holders (totalSupply == sum(balances))","description":"Strict verifier asserting totalSupply == sum(balances) over known holder set; optional 'known-only' constraint.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2026-03-03T10:03:25.073557355Z","created_by":"tcsenpai","updated_at":"2026-03-03T10:04:53.217210985Z","closed_at":"2026-03-03T10:03:25.073557355Z","external_ref":"node-y3g.9.15:deleted","source_repo":".","deleted_at":"2026-03-03T10:04:53.217192460Z","deleted_by":"tcsenpai","delete_reason":"duplicate external_ref node-y3g.9.15","original_type":"task","compaction_level":0,"original_size":0} +{"id":"bd-2vy.1.3","title":"Token: invariants over known holders (totalSupply == sum(balances))","description":"Strict post-run verifier asserting totalSupply == sum(balances) over a known holder set; optional known-holder constraint.","notes":"PASS: token_invariants_known_holders RUN_ID=token_invariants_known_holders-20260302-142533 (READ_MODE=live). Commit: b98c46d8.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T10:04:12.939520286Z","created_by":"tcsenpai","updated_at":"2026-03-03T10:04:13.011041799Z","closed_at":"2026-03-03T10:04:12.939520286Z","external_ref":"node-y3g.9.15","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.3","depends_on_id":"bd-2vy.1","type":"parent-child","created_at":"2026-03-03T10:04:12.939520286Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.4","title":"Token: pause/unpause semantics under load","description":"Scenario pauses mid-run, asserts transfer/mint/burn reject while paused, unpauses, then verifies committed cross-node convergence.","notes":"PASS: token_pause_under_load RUN_ID=token_pause_under_load-20260302-152120. Commits: 33535811 (fix inGcrApply watchdog), 561bd65d (scenario).","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T10:04:13.091318988Z","created_by":"tcsenpai","updated_at":"2026-03-03T10:04:13.156851596Z","closed_at":"2026-03-03T10:04:13.091318988Z","external_ref":"node-y3g.9.16","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.4","depends_on_id":"bd-2vy.1","type":"parent-child","created_at":"2026-03-03T10:04:13.091318988Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.5","title":"Token: committed-read probe (redundant)","description":"Duplicate of committed-read probe work; closed as redundant.","notes":"Closed as duplicate of later committed-read investigation/probe.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T10:04:13.501025583Z","created_by":"tcsenpai","updated_at":"2026-03-03T10:04:13.576261990Z","closed_at":"2026-03-03T10:04:13.501025583Z","external_ref":"node-y3g.9.12","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.5","depends_on_id":"bd-2vy.1","type":"parent-child","created_at":"2026-03-03T10:04:13.501025583Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.6","title":"Token: core correctness sweep (no scripts)","description":"Run and record RUN_IDs for core non-script token scenarios (smoke + edge cases + query coverage + consensus consistency + settle check).","status":"closed","priority":1,"issue_type":"epic","created_at":"2026-03-03T10:51:13.772041999Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:02:51.644394996Z","closed_at":"2026-03-03T11:02:51.644249823Z","close_reason":"All children completed","external_ref":"token-core-sweep","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.6","depends_on_id":"bd-2vy.1","type":"parent-child","created_at":"2026-03-03T10:51:13.772041999Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.6.1","title":"Run token_smoke","description":"Run better_testing scenario token_smoke; capture *.summary.json and note RUN_ID.","notes":"Already covered by existing artifacts. Example RUN_ID=token-smoke-20260301-095500. See better_testing/runs/token-smoke-20260301-095500/token_smoke.summary.json","status":"closed","priority":1,"issue_type":"task","created_at":"2026-03-03T10:52:29.740332866Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:01:22.489455652Z","closed_at":"2026-03-03T11:01:22.489227262Z","close_reason":"Already covered (existing better_testing run)","external_ref":"scenario:token_smoke","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.6.1","depends_on_id":"bd-2vy.1.6","type":"parent-child","created_at":"2026-03-03T10:52:29.740332866Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.6.2","title":"Run token_consensus_consistency","description":"Run consensus consistency scenario; ensure all nodes converge; note RUN_ID.","notes":"Already covered by existing artifacts. Example RUN_ID=token-consensus-20260301-095620. See better_testing/runs/token-consensus-20260301-095620/token_consensus_consistency.summary.json","status":"closed","priority":1,"issue_type":"task","created_at":"2026-03-03T10:52:29.845713195Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:01:22.014855972Z","closed_at":"2026-03-03T11:01:22.014516312Z","close_reason":"Already covered (existing better_testing run)","external_ref":"scenario:token_consensus_consistency","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.6.2","depends_on_id":"bd-2vy.1.6","type":"parent-child","created_at":"2026-03-03T10:52:29.845713195Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.6.3","title":"Run token_query_coverage","description":"Run query coverage scenario; confirm committed-read behavior and missing-token responses; note RUN_ID.","notes":"Already covered by existing artifacts. Example RUN_ID=token-query-20260301-095650. See better_testing/runs/token-query-20260301-095650/token_query_coverage.summary.json","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T10:52:29.947645533Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:01:31.062980526Z","closed_at":"2026-03-03T11:01:31.062797070Z","close_reason":"Already covered (existing better_testing run)","external_ref":"scenario:token_query_coverage","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.6.3","depends_on_id":"bd-2vy.1.6","type":"parent-child","created_at":"2026-03-03T10:52:29.947645533Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.6.4","title":"Run token_edge_cases","description":"Run edge cases; ensure self-transfer no-op invariant + negative cases; note RUN_ID.","notes":"Already covered by existing artifacts. Example RUN_ID=token-edge-cases-20260227-150320. See better_testing/runs/token-edge-cases-20260227-150320/token_edge_cases.summary.json","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T10:52:30.075244865Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:01:30.704703817Z","closed_at":"2026-03-03T11:01:30.704584542Z","close_reason":"Already covered (existing better_testing run)","external_ref":"scenario:token_edge_cases","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.6.4","depends_on_id":"bd-2vy.1.6","type":"parent-child","created_at":"2026-03-03T10:52:30.075244865Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.6.5","title":"Run token_settle_check (post-run verifier)","description":"Run settle check against a token produced by loadgens; ensure convergence gates are effective; note RUN_ID.","notes":"Already covered by existing artifacts. Example RUN_ID=token_settle_check-20260301-171026. See better_testing/runs/token_settle_check-20260301-171026/token_settle_check.summary.json","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T10:52:30.180151753Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:01:30.305516763Z","closed_at":"2026-03-03T11:01:30.305075291Z","close_reason":"Already covered (existing better_testing run)","external_ref":"scenario:token_settle_check","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.6.5","depends_on_id":"bd-2vy.1.6","type":"parent-child","created_at":"2026-03-03T10:52:30.180151753Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.6.6","title":"Run token_holders_export (refresh)","description":"Re-run holder export scenario on current devnet image; note RUN_ID and confirm output format stable.","notes":"Already covered by existing artifacts. Example RUN_ID=token_holders_export-20260303-092715. See better_testing/runs/token_holders_export-20260303-092715/token_holders_export.summary.json","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T10:52:30.293544007Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:01:29.840275702Z","closed_at":"2026-03-03T11:01:29.840076267Z","close_reason":"Already covered (existing better_testing run)","external_ref":"scenario:token_holders_export","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.6.6","depends_on_id":"bd-2vy.1.6","type":"parent-child","created_at":"2026-03-03T10:52:30.293544007Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.6.7","title":"Run token_invariants_known_holders (committed preferred)","description":"Run invariant verifier using committed reads (when available); note RUN_ID.","notes":"Already covered by existing artifacts. Example RUN_ID=token_invariants_known_holders-20260302-142533. See better_testing/runs/token_invariants_known_holders-20260302-142533/token_invariants_known_holders.summary.json","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T10:52:30.413623130Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:01:29.394958294Z","closed_at":"2026-03-03T11:01:29.394775120Z","close_reason":"Already covered (existing better_testing run)","external_ref":"scenario:token_invariants_known_holders","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.6.7","depends_on_id":"bd-2vy.1.6","type":"parent-child","created_at":"2026-03-03T10:52:30.413623130Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.6.8","title":"Run token_pause_under_load (refresh)","description":"Re-run pause-under-load scenario on current devnet; note RUN_ID.","notes":"Already covered by existing artifacts. Example RUN_ID=token_pause_under_load-20260302-152120. See better_testing/runs/token_pause_under_load-20260302-152120/token_pause_under_load.summary.json","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T10:52:30.554231303Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:01:28.937229408Z","closed_at":"2026-03-03T11:01:28.936999726Z","close_reason":"Already covered (existing better_testing run)","external_ref":"scenario:token_pause_under_load","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.6.8","depends_on_id":"bd-2vy.1.6","type":"parent-child","created_at":"2026-03-03T10:52:30.554231303Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.7","title":"Token: ACL sweep","description":"Run and record RUN_IDs for token ACL scenarios (smoke + matrices).","status":"closed","priority":1,"issue_type":"epic","created_at":"2026-03-03T10:52:29.339588524Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:02:51.647233581Z","closed_at":"2026-03-03T11:02:51.647021962Z","close_reason":"All children completed","external_ref":"token-acl-sweep","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.7","depends_on_id":"bd-2vy.1","type":"parent-child","created_at":"2026-03-03T10:52:29.339588524Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.7.1","title":"Run token_acl_smoke","description":"Run ACL smoke (owner-only checks). Capture RUN_ID.","notes":"Already covered by existing artifacts. Example RUN_ID=token-acl-smoke-20260301-100120. See better_testing/runs/token-acl-smoke-20260301-100120/token_acl_smoke.summary.json","status":"closed","priority":1,"issue_type":"task","created_at":"2026-03-03T10:52:30.695371378Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:01:21.556614741Z","closed_at":"2026-03-03T11:01:21.556443368Z","close_reason":"Already covered (existing better_testing run)","external_ref":"scenario:token_acl_smoke","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.7.1","depends_on_id":"bd-2vy.1.7","type":"parent-child","created_at":"2026-03-03T10:52:30.695371378Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.7.2","title":"Run token_acl_matrix","description":"Run single-permission grant/revoke matrix. Capture RUN_ID.","notes":"Already covered by existing artifacts. Example RUN_ID=token-acl-matrix-20260227-145423. See better_testing/runs/token-acl-matrix-20260227-145423/token_acl_matrix.summary.json","status":"closed","priority":1,"issue_type":"task","created_at":"2026-03-03T10:52:30.842436678Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:01:21.151276856Z","closed_at":"2026-03-03T11:01:21.151117286Z","close_reason":"Already covered (existing better_testing run)","external_ref":"scenario:token_acl_matrix","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.7.2","depends_on_id":"bd-2vy.1.7","type":"parent-child","created_at":"2026-03-03T10:52:30.842436678Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.7.3","title":"Run token_acl_multi_permission_matrix","description":"Run multi-permission matrix. Capture RUN_ID.","notes":"Already covered by existing artifacts. Example RUN_ID=token-acl-multi-perm-20260227-173525. See better_testing/runs/token-acl-multi-perm-20260227-173525/token_acl_multi_permission_matrix.summary.json","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T10:52:30.964831882Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:01:28.527669434Z","closed_at":"2026-03-03T11:01:28.527512629Z","close_reason":"Already covered (existing better_testing run)","external_ref":"scenario:token_acl_multi_permission_matrix","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.7.3","depends_on_id":"bd-2vy.1.7","type":"parent-child","created_at":"2026-03-03T10:52:30.964831882Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.7.4","title":"Run token_acl_burn_matrix","description":"Run burn permission matrix. Capture RUN_ID.","notes":"Already covered by existing artifacts. Example RUN_ID=token-acl-burn-matrix2-20260227-153457. See better_testing/runs/token-acl-burn-matrix2-20260227-153457/token_acl_burn_matrix.summary.json","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T10:52:31.106776210Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:01:28.162222636Z","closed_at":"2026-03-03T11:01:28.161983545Z","close_reason":"Already covered (existing better_testing run)","external_ref":"scenario:token_acl_burn_matrix","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.7.4","depends_on_id":"bd-2vy.1.7","type":"parent-child","created_at":"2026-03-03T10:52:31.106776210Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.7.5","title":"Run token_acl_pause_matrix","description":"Run pause permission matrix. Capture RUN_ID.","notes":"Already covered by existing artifacts. Example RUN_ID=token-acl-pause-matrix-20260227-160049. See better_testing/runs/token-acl-pause-matrix-20260227-160049/token_acl_pause_matrix.summary.json","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T10:52:31.251211058Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:01:27.739037598Z","closed_at":"2026-03-03T11:01:27.738617968Z","close_reason":"Already covered (existing better_testing run)","external_ref":"scenario:token_acl_pause_matrix","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.7.5","depends_on_id":"bd-2vy.1.7","type":"parent-child","created_at":"2026-03-03T10:52:31.251211058Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.7.6","title":"Run token_acl_transfer_ownership_matrix","description":"Run ownership transfer matrix. Capture RUN_ID.","notes":"Already covered by existing artifacts. Example RUN_ID=token-acl-transfer-ownership-20260227-160704. See better_testing/runs/token-acl-transfer-ownership-20260227-160704/token_acl_transfer_ownership_matrix.summary.json","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T10:52:31.382063564Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:01:27.256717843Z","closed_at":"2026-03-03T11:01:27.256527394Z","close_reason":"Already covered (existing better_testing run)","external_ref":"scenario:token_acl_transfer_ownership_matrix","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.7.6","depends_on_id":"bd-2vy.1.7","type":"parent-child","created_at":"2026-03-03T10:52:31.382063564Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.7.7","title":"Run token_acl_updateacl_compat","description":"Run updateACL compatibility checks. Capture RUN_ID.","notes":"Already covered by existing artifacts. Example RUN_ID=token-acl-updateacl-compat-20260227-174121. See better_testing/runs/token-acl-updateacl-compat-20260227-174121/token_acl_updateacl_compat.summary.json","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T10:52:31.515467123Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:01:26.863361767Z","closed_at":"2026-03-03T11:01:26.863186377Z","close_reason":"Already covered (existing better_testing run)","external_ref":"scenario:token_acl_updateacl_compat","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.7.7","depends_on_id":"bd-2vy.1.7","type":"parent-child","created_at":"2026-03-03T10:52:31.515467123Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.8","title":"Token: perf baselines (no scripts)","description":"Run token perf baselines and ramps (transfer/mint/burn) and capture throughput/latency artifacts.","status":"closed","priority":2,"issue_type":"epic","created_at":"2026-03-03T10:52:29.427489094Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:02:51.650026659Z","closed_at":"2026-03-03T11:02:51.649895002Z","close_reason":"All children completed","external_ref":"token-perf-baselines","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.8","depends_on_id":"bd-2vy.1","type":"parent-child","created_at":"2026-03-03T10:52:29.427489094Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.8.1","title":"Run token_transfer loadgen","description":"Run token_transfer for baseline TPS/latency. Capture RUN_ID.","notes":"Already covered by existing artifacts. Example RUN_ID=token_transfer_ramp-20260227-151432. See better_testing/runs/token_transfer_ramp-20260227-151432/token_transfer.summary.json","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T10:52:31.651163910Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:01:26.460683690Z","closed_at":"2026-03-03T11:01:26.460570988Z","close_reason":"Already covered (existing better_testing run)","external_ref":"scenario:token_transfer","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.8.1","depends_on_id":"bd-2vy.1.8","type":"parent-child","created_at":"2026-03-03T10:52:31.651163910Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.8.2","title":"Run token_transfer_ramp","description":"Run transfer ramp; record step-wise TPS. Capture RUN_ID.","notes":"Already covered by existing artifacts. Example RUN_ID=token_transfer_ramp-20260227-151432. See better_testing/runs/token_transfer_ramp-20260227-151432/token_transfer_ramp.summary.json","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T10:52:31.810303222Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:01:26.003237987Z","closed_at":"2026-03-03T11:01:26.002946889Z","close_reason":"Already covered (existing better_testing run)","external_ref":"scenario:token_transfer_ramp","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.8.2","depends_on_id":"bd-2vy.1.8","type":"parent-child","created_at":"2026-03-03T10:52:31.810303222Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.8.3","title":"Run token_mint_smoke","description":"Run mint smoke; verify supply/balance deltas. Capture RUN_ID.","notes":"Already covered by existing artifacts. Example RUN_ID=token-mint-smoke-20260301-095420. See better_testing/runs/token-mint-smoke-20260301-095420/token_mint_smoke.summary.json","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T10:52:31.977176093Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:01:25.576168927Z","closed_at":"2026-03-03T11:01:25.575997123Z","close_reason":"Already covered (existing better_testing run)","external_ref":"scenario:token_mint_smoke","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.8.3","depends_on_id":"bd-2vy.1.8","type":"parent-child","created_at":"2026-03-03T10:52:31.977176093Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.8.4","title":"Run token_burn_smoke","description":"Run burn smoke; verify supply/balance deltas. Capture RUN_ID.","notes":"Already covered by existing artifacts. Example RUN_ID=token-burn-smoke-20260301-095445. See better_testing/runs/token-burn-smoke-20260301-095445/token_burn_smoke.summary.json","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T10:52:32.150848236Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:01:25.128409360Z","closed_at":"2026-03-03T11:01:25.128238419Z","close_reason":"Already covered (existing better_testing run)","external_ref":"scenario:token_burn_smoke","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.8.4","depends_on_id":"bd-2vy.1.8","type":"parent-child","created_at":"2026-03-03T10:52:32.150848236Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.8.5","title":"Run token_mint loadgen","description":"Run mint loadgen; capture RUN_ID.","notes":"Already covered by existing artifacts. Example RUN_ID=token_mint_ramp-20260227-151543. See better_testing/runs/token_mint_ramp-20260227-151543/token_mint.summary.json","status":"closed","priority":3,"issue_type":"task","created_at":"2026-03-03T10:52:32.328035697Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:01:33.049836503Z","closed_at":"2026-03-03T11:01:33.049604756Z","close_reason":"Already covered (existing better_testing run)","external_ref":"scenario:token_mint","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.8.5","depends_on_id":"bd-2vy.1.8","type":"parent-child","created_at":"2026-03-03T10:52:32.328035697Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.8.6","title":"Run token_burn loadgen","description":"Run burn loadgen; capture RUN_ID.","notes":"Already covered by existing artifacts. Example RUN_ID=token_burn_ramp-20260227-151827. See better_testing/runs/token_burn_ramp-20260227-151827/token_burn.summary.json","status":"closed","priority":3,"issue_type":"task","created_at":"2026-03-03T10:52:32.476157386Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:01:32.657459310Z","closed_at":"2026-03-03T11:01:32.657270104Z","close_reason":"Already covered (existing better_testing run)","external_ref":"scenario:token_burn","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.8.6","depends_on_id":"bd-2vy.1.8","type":"parent-child","created_at":"2026-03-03T10:52:32.476157386Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.8.7","title":"Run token_mint_ramp","description":"Run mint ramp. Capture RUN_ID.","notes":"Already covered by existing artifacts. Example RUN_ID=token_mint_ramp-20260227-151543. See better_testing/runs/token_mint_ramp-20260227-151543/token_mint_ramp.summary.json","status":"closed","priority":3,"issue_type":"task","created_at":"2026-03-03T10:52:32.628782003Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:01:32.252221353Z","closed_at":"2026-03-03T11:01:32.252045241Z","close_reason":"Already covered (existing better_testing run)","external_ref":"scenario:token_mint_ramp","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.8.7","depends_on_id":"bd-2vy.1.8","type":"parent-child","created_at":"2026-03-03T10:52:32.628782003Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.8.8","title":"Run token_burn_ramp","description":"Run burn ramp. Capture RUN_ID.","notes":"Already covered by existing artifacts. Example RUN_ID=token_burn_ramp-20260227-151827. See better_testing/runs/token_burn_ramp-20260227-151827/token_burn_ramp.summary.json","status":"closed","priority":3,"issue_type":"task","created_at":"2026-03-03T10:52:32.794843136Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:01:31.824400507Z","closed_at":"2026-03-03T11:01:31.824056069Z","close_reason":"Already covered (existing better_testing run)","external_ref":"scenario:token_burn_ramp","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.8.8","depends_on_id":"bd-2vy.1.8","type":"parent-child","created_at":"2026-03-03T10:52:32.794843136Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.9","title":"Token: observe/probe investigations","description":"Run committed-read probes (token_observe) and under-load wrappers to catch intermittent divergence.","status":"closed","priority":2,"issue_type":"epic","created_at":"2026-03-03T10:52:29.527457114Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:02:51.652618419Z","closed_at":"2026-03-03T11:02:51.652475470Z","close_reason":"All children completed","external_ref":"token-observe","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.9","depends_on_id":"bd-2vy.1","type":"parent-child","created_at":"2026-03-03T10:52:29.527457114Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.9.1","title":"Run token_observe (post-run)","description":"Run token_observe against a token after load; collect timeseries JSONL. Capture RUN_ID.","notes":"Already covered by existing artifacts. Example RUN_ID=token-observe-under-load-scripted-20260302-132018. See better_testing/runs/token-observe-under-load-scripted-20260302-132018/token_observe.summary.json","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T10:52:32.949974252Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:01:24.696932261Z","closed_at":"2026-03-03T11:01:24.696708951Z","close_reason":"Already covered (existing better_testing run)","external_ref":"scenario:token_observe","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.9.1","depends_on_id":"bd-2vy.1.9","type":"parent-child","created_at":"2026-03-03T10:52:32.949974252Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.9.2","title":"Run observe-under-load wrapper (plain)","description":"Run better_testing/scripts/run-token-observe-under-load.sh --plain; capture RUN_ID.","notes":"Already run. Example RUN_ID=token-observe-under-load-plain-20260302-130537 (see better_testing/runs/).","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T10:52:33.114747120Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:01:33.471743273Z","closed_at":"2026-03-03T11:01:33.471381703Z","close_reason":"Already covered (existing better_testing run)","external_ref":"wrapper:run-token-observe-under-load:plain","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.9.2","depends_on_id":"bd-2vy.1.9","type":"parent-child","created_at":"2026-03-03T10:52:33.114747120Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.1.9.3","title":"Run observe-under-load wrapper (scripted)","description":"Run better_testing/scripts/run-token-observe-under-load.sh --scripted; capture RUN_ID.","notes":"Already run. Example RUN_ID=token-observe-under-load-scripted-20260302-132018 (see better_testing/runs/).","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T10:52:33.315850588Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:01:33.904562560Z","closed_at":"2026-03-03T11:01:33.904439609Z","close_reason":"Already covered (existing better_testing run)","external_ref":"wrapper:run-token-observe-under-load:scripted","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.1.9.3","depends_on_id":"bd-2vy.1.9","type":"parent-child","created_at":"2026-03-03T10:52:33.315850588Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.2","title":"Token scripting tests (correctness + perf)","description":"Validate token scripting end-to-end via better_testing/: upgradeScript deployment, token.callView outputs, before/after hooks on transfer/mint/burn, deterministic rejects, cross-node convergence, and perf/ramp scenarios.","status":"closed","priority":2,"issue_type":"epic","created_at":"2026-03-03T10:03:24.787325726Z","created_by":"tcsenpai","updated_at":"2026-03-03T12:39:15.661001510Z","closed_at":"2026-03-03T12:39:15.660701955Z","close_reason":"All children completed","external_ref":"node-y3g.6","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.2","depends_on_id":"bd-2vy","type":"parent-child","created_at":"2026-03-03T10:03:24.787325726Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.2.1","title":"Token scripting: upgrade script mid-load + convergence","description":"Add a scenario that upgrades token script while transfers are ongoing (or between ramp steps). Acceptance: after settle, all nodes agree on hasScript/script behavior + customState evolution; no permanent divergence.","notes":"RUN_ID=token_script_upgrade_mid_load-20260303-104321\\n\\nAdded scenario token_script_upgrade_mid_load: installs script A, runs transfer load, upgrades to script B mid-run, then asserts ping tag convergence + hook-count customState convergence across nodes + cross-node balance consistency.\\n\\nArtifacts: better_testing/runs//token_script_upgrade_mid_load.summary.json (+ .timeseries.jsonl).","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T10:03:24.940011598Z","created_by":"tcsenpai","updated_at":"2026-03-03T10:45:11.458339044Z","closed_at":"2026-03-03T10:45:11.458218527Z","close_reason":"Done","external_ref":"node-y3g.6.5","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.2.1","depends_on_id":"bd-2vy.2","type":"parent-child","created_at":"2026-03-03T10:03:24.940011598Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.2.2","title":"Token scripting: deterministic rejects across nodes","description":"Extend/validate token_script_rejects: intentionally invalid scripted tx is rejected consistently across nodes (same error class), and state unchanged; include a valid tx before/after. Acceptance: settle + script view agree across nodes.","notes":"RUN_ID=token_script_rejects-20260303-102100\\n\\nUpdated token_script_rejects to: embed threshold in default script + robust BigInt parsing; assert token.callView(getThreshold) equals expected on every node; broadcast invalid oversized transfer to every node and assert identical amount-too-large signature + no state change; valid transfers before/after.\\n\\nDocs: better_testing/README.md updated.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T10:03:25.003332141Z","created_by":"tcsenpai","updated_at":"2026-03-03T10:23:36.886411165Z","closed_at":"2026-03-03T10:23:36.886289496Z","close_reason":"Done","external_ref":"node-y3g.6.6","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.2.2","depends_on_id":"bd-2vy.2","type":"parent-child","created_at":"2026-03-03T10:03:25.003332141Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.2.3","title":"Token scripting: perf/ramp sweep","description":"Run scripted transfer/mint/burn perf + ramps and hook correctness scenarios; record RUN_IDs.","status":"closed","priority":2,"issue_type":"epic","created_at":"2026-03-03T10:52:29.629782522Z","created_by":"tcsenpai","updated_at":"2026-03-03T12:39:06.127330224Z","closed_at":"2026-03-03T12:39:06.127151177Z","close_reason":"All children completed","external_ref":"token-script-perf","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.2.3","depends_on_id":"bd-2vy.2","type":"parent-child","created_at":"2026-03-03T10:52:29.629782522Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.2.3.1","title":"Run token_script_smoke","description":"Run token_script_smoke. Capture RUN_ID.","notes":"Already covered by existing artifacts. Example RUN_ID=token-script-smoke-20260301-095740. See better_testing/runs/token-script-smoke-20260301-095740/token_script_smoke.summary.json","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T10:52:33.523866650Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:01:24.231725075Z","closed_at":"2026-03-03T11:01:24.231477048Z","close_reason":"Already covered (existing better_testing run)","external_ref":"scenario:token_script_smoke","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.2.3.1","depends_on_id":"bd-2vy.2.3","type":"parent-child","created_at":"2026-03-03T10:52:33.523866650Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.2.3.2","title":"Run token_script_hooks_correctness","description":"Run hook correctness for transfer/mint/burn. Capture RUN_ID.","notes":"Already covered by existing artifacts. Example RUN_ID=token-script-hooks-postchange-20260301-103400. See better_testing/runs/token-script-hooks-postchange-20260301-103400/token_script_hooks_correctness.summary.json","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T10:52:33.724293153Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:01:23.843716117Z","closed_at":"2026-03-03T11:01:23.843594157Z","close_reason":"Already covered (existing better_testing run)","external_ref":"scenario:token_script_hooks_correctness","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.2.3.2","depends_on_id":"bd-2vy.2.3","type":"parent-child","created_at":"2026-03-03T10:52:33.724293153Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.2.3.3","title":"Run token_script_transfer loadgen","description":"Run scripted transfer loadgen. Capture RUN_ID.","notes":"Already covered by existing artifacts. Example RUN_ID=token-script-transfer-chaos-20260301-171812. See better_testing/runs/token-script-transfer-chaos-20260301-171812/token_script_transfer.summary.json","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T10:52:33.924783947Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:01:23.394545364Z","closed_at":"2026-03-03T11:01:23.394145731Z","close_reason":"Already covered (existing better_testing run)","external_ref":"scenario:token_script_transfer","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.2.3.3","depends_on_id":"bd-2vy.2.3","type":"parent-child","created_at":"2026-03-03T10:52:33.924783947Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.2.3.4","title":"Run token_script_transfer_ramp","description":"Run scripted transfer ramp. Capture RUN_ID.","notes":"Already covered by existing artifacts. Example RUN_ID=token-script-transfer-ramp-20260301-114100. See better_testing/runs/token-script-transfer-ramp-20260301-114100/token_script_transfer_ramp.summary.json","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T10:52:34.125340956Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:01:22.914203582Z","closed_at":"2026-03-03T11:01:22.913975593Z","close_reason":"Already covered (existing better_testing run)","external_ref":"scenario:token_script_transfer_ramp","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.2.3.4","depends_on_id":"bd-2vy.2.3","type":"parent-child","created_at":"2026-03-03T10:52:34.125340956Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.2.3.5","title":"Run token_script_mint loadgen","description":"Run scripted mint loadgen. Capture RUN_ID.","notes":"Already covered by existing artifacts. Example RUN_ID=token-script-mint-smoke-20260301-101630. See better_testing/runs/token-script-mint-smoke-20260301-101630/token_script_mint.summary.json","status":"closed","priority":3,"issue_type":"task","created_at":"2026-03-03T10:52:34.334404100Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:01:31.446862674Z","closed_at":"2026-03-03T11:01:31.446715497Z","close_reason":"Already covered (existing better_testing run)","external_ref":"scenario:token_script_mint","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.2.3.5","depends_on_id":"bd-2vy.2.3","type":"parent-child","created_at":"2026-03-03T10:52:34.334404100Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.2.3.6","title":"Run token_script_mint_ramp","description":"Run scripted mint ramp. Capture RUN_ID.","notes":"RUN_ID=token_script_mint_ramp-20260303-112435; best_ok_tps=50.60 @ conc=8 inflight=1; script storage writes enabled (SCRIPT_SET_STORAGE=true). Artifacts: better_testing/runs/token_script_mint_ramp-20260303-112435/token_script_mint_ramp.summary.json","status":"closed","priority":3,"issue_type":"task","assignee":"tcsenpai","created_at":"2026-03-03T10:52:34.535926877Z","created_by":"tcsenpai","updated_at":"2026-03-03T11:28:47.964272886Z","closed_at":"2026-03-03T11:28:47.964078831Z","close_reason":"Done","external_ref":"scenario:token_script_mint_ramp","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.2.3.6","depends_on_id":"bd-2vy.2.3","type":"parent-child","created_at":"2026-03-03T10:52:34.535926877Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.2.3.7","title":"Run token_script_burn loadgen","description":"Run scripted burn loadgen. Capture RUN_ID.","notes":"RUN_ID=token_script_burn-20260303-123048; ok=1395 error=0; okTps=45.44; p50=949ms p95=2069ms p99=2517ms; conc=50 inflight=1; SCRIPT_SET_STORAGE=true. Artifacts: better_testing/runs/token_script_burn-20260303-123048/token_script_burn.summary.json","status":"closed","priority":3,"issue_type":"task","assignee":"tcsenpai","created_at":"2026-03-03T10:52:34.734680270Z","created_by":"tcsenpai","updated_at":"2026-03-03T12:32:45.590579748Z","closed_at":"2026-03-03T12:32:45.590341710Z","close_reason":"Done","external_ref":"scenario:token_script_burn","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.2.3.7","depends_on_id":"bd-2vy.2.3","type":"parent-child","created_at":"2026-03-03T10:52:34.734680270Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.2.3.8","title":"Run token_script_burn_ramp","description":"Run scripted burn ramp. Capture RUN_ID.","notes":"RUN_ID=token_script_burn_ramp-20260303-123438; best_ok_tps=44.76 @ conc=8 inflight=1; SCRIPT_SET_STORAGE=true. Artifacts: better_testing/runs/token_script_burn_ramp-20260303-123438/token_script_burn_ramp.summary.json","status":"closed","priority":3,"issue_type":"task","assignee":"tcsenpai","created_at":"2026-03-03T10:52:34.919434688Z","created_by":"tcsenpai","updated_at":"2026-03-03T12:38:43.468249624Z","closed_at":"2026-03-03T12:38:43.468071990Z","close_reason":"Done","external_ref":"scenario:token_script_burn_ramp","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.2.3.8","depends_on_id":"bd-2vy.2.3","type":"parent-child","created_at":"2026-03-03T10:52:34.919434688Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.3","title":"Dashboard/metrics direction","description":"Define stable ingest format (JSONL) and draft minimal run comparison report; prep for future Grafana.","status":"open","priority":3,"issue_type":"task","created_at":"2026-03-03T10:03:24.835954179Z","created_by":"tcsenpai","updated_at":"2026-03-03T10:03:24.835954179Z","external_ref":"node-y3g.8","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.3","depends_on_id":"bd-2vy","type":"parent-child","created_at":"2026-03-03T10:03:24.835954179Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.4","title":"Token scripting: complex logic validation","description":"Add a complex-policy token script (branchy conditionals + customState maps) and validate determinism + cross-node convergence + perf baselines via better_testing/.","status":"closed","priority":2,"issue_type":"epic","created_at":"2026-03-03T12:43:09.783941062Z","created_by":"tcsenpai","updated_at":"2026-03-03T15:58:45.740070584Z","closed_at":"2026-03-03T15:58:45.739921773Z","close_reason":"All subtasks complete (smoke/ramp/dynamic updates/vesting/escrow) and documented in better_testing/README.md","external_ref":"token-script-complex","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.4","depends_on_id":"bd-2vy","type":"parent-child","created_at":"2026-03-03T12:43:09.783941062Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.4.1","title":"Implement complex-policy token script + scenario","description":"Implement a complex token script with conditionals (allowlist/denylist, tiered fees, per-sender limits) + customState map writes; add scenario wiring in better_testing/loadgen.","status":"closed","priority":2,"issue_type":"task","assignee":"tcsenpai","created_at":"2026-03-03T12:43:31.071061683Z","created_by":"tcsenpai","updated_at":"2026-03-03T13:12:16.115043121Z","closed_at":"2026-03-03T13:12:16.114855056Z","close_reason":"Implemented complex-policy script generator + smoke/ramp scenarios","external_ref":"impl:token_script_complex_policy","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.4.1","depends_on_id":"bd-2vy.4","type":"parent-child","created_at":"2026-03-03T12:43:31.071061683Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.4.2","title":"Run token_script_complex_policy_ramp","description":"Run complex-policy scripted token ramp (and post-run settle check). Capture RUN_ID.","status":"closed","priority":3,"issue_type":"task","created_at":"2026-03-03T12:43:31.391291224Z","created_by":"tcsenpai","updated_at":"2026-03-03T13:12:16.543997587Z","closed_at":"2026-03-03T13:12:16.543729943Z","close_reason":"Completed: token_script_complex_policy_ramp-20260303-130724 (better_testing/runs/...)","external_ref":"scenario:token_script_complex_policy_ramp","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.4.2","depends_on_id":"bd-2vy.4","type":"parent-child","created_at":"2026-03-03T12:43:31.391291224Z","created_by":"tcsenpai","metadata":"{}","thread_id":""},{"issue_id":"bd-2vy.4.2","depends_on_id":"bd-2vy.4.1","type":"blocks","created_at":"2026-03-03T12:45:12.972751698Z","created_by":"tcsenpai"}]} +{"id":"bd-2vy.4.3","title":"Add complex-policy invariants + analysis","description":"Add/verify invariants: fee sink accounting, totalSupply == sum(balances) (minus burned), and customState map counters identical across nodes.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T12:44:45.227210413Z","created_by":"tcsenpai","updated_at":"2026-03-03T13:24:21.841314200Z","closed_at":"2026-03-03T13:24:21.841163426Z","close_reason":"Implemented invariants in token_script_complex_policy_smoke and verified run token_script_complex_policy_smoke-20260303-132251","external_ref":"inv:token_script_complex_policy","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.4.3","depends_on_id":"bd-2vy.4","type":"parent-child","created_at":"2026-03-03T12:44:45.227210413Z","created_by":"tcsenpai"},{"issue_id":"bd-2vy.4.3","depends_on_id":"bd-2vy.4.1","type":"blocks","created_at":"2026-03-03T12:45:13.239589112Z","created_by":"tcsenpai"}]} +{"id":"bd-2vy.4.4","title":"Run token_script_complex_policy_smoke","description":"Run complex-policy scripted token smoke: exercise multiple branches (pass/fail) and verify per-node state + customState convergence. Capture RUN_ID.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T12:45:01.756346795Z","created_by":"tcsenpai","updated_at":"2026-03-03T13:12:16.322062680Z","closed_at":"2026-03-03T13:12:16.321852614Z","close_reason":"Completed: token_script_complex_policy_smoke-20260303-130602 (better_testing/runs/...)","external_ref":"scenario:token_script_complex_policy_smoke","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.4.4","depends_on_id":"bd-2vy.4","type":"parent-child","created_at":"2026-03-03T12:45:01.756346795Z","created_by":"tcsenpai"},{"issue_id":"bd-2vy.4.4","depends_on_id":"bd-2vy.4.1","type":"blocks","created_at":"2026-03-03T12:45:13.494204970Z","created_by":"tcsenpai"}]} +{"id":"bd-2vy.4.5","title":"Docs: document complex policy scenario","description":"Update better_testing/README.md with complex-policy scenarios, env knobs, and example RUN_IDs once runs exist.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T12:45:06.030476848Z","created_by":"tcsenpai","updated_at":"2026-03-03T13:12:16.824733709Z","closed_at":"2026-03-03T13:12:16.824415940Z","close_reason":"Documented scenarios + example RUN_IDs in better_testing/README.md","external_ref":"docs:better_testing:complex-policy","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.4.5","depends_on_id":"bd-2vy.4","type":"parent-child","created_at":"2026-03-03T12:45:06.030476848Z","created_by":"tcsenpai"},{"issue_id":"bd-2vy.4.5","depends_on_id":"bd-2vy.4.1","type":"blocks","created_at":"2026-03-03T12:45:13.768695145Z","created_by":"tcsenpai"}]} +{"id":"bd-2vy.4.6","title":"Complex script: dynamic policy updates","description":"Add a scripted token scenario where the owner updates allow/deny/quota/fee params stored in customState, then verify (a) deterministic rejects/accepts across nodes and (b) views reflect the new policy.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T13:12:28.107492519Z","created_by":"tcsenpai","updated_at":"2026-03-03T13:51:27.888754255Z","closed_at":"2026-03-03T13:51:27.888629200Z","close_reason":"Implemented dynamic policy updates scenario + verified run token_script_complex_policy_dynamic_updates-20260303-134836","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.4.6","depends_on_id":"bd-2vy.4","type":"parent-child","created_at":"2026-03-03T13:12:28.107492519Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.4.7","title":"Complex script: vesting/lockup transfer gates","description":"Add a scripted token scenario that enforces vesting/lockup rules (time/block-height based) with multiple branches (locked, partially unlocked, fully unlocked) and verify cross-node convergence.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T13:12:39.563239044Z","created_by":"tcsenpai","updated_at":"2026-03-03T15:14:03.313305150Z","closed_at":"2026-03-03T15:14:03.313097549Z","close_reason":"Implemented vesting/lockup gates via admin-controlled releases (hook ctx lacks time/nonce/block) + verified run token_script_complex_policy_vesting_lockup-20260303-151227","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.4.7","depends_on_id":"bd-2vy.4","type":"parent-child","created_at":"2026-03-03T13:12:39.563239044Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-2vy.4.8","title":"Complex script: escrow/state-machine flows","description":"Add a scripted token scenario with an escrow-like state machine (deposit -> pending -> claim/revert), tracking per-deposit state in customState, and verify deterministic behavior + convergence.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T13:12:44.428539770Z","created_by":"tcsenpai","updated_at":"2026-03-03T15:41:36.712625119Z","closed_at":"2026-03-03T15:41:36.712432746Z","close_reason":"Implemented escrow/state-machine token script scenario; verified run token_script_complex_policy_escrow_state_machine-20260303-153800","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2vy.4.8","depends_on_id":"bd-2vy.4","type":"parent-child","created_at":"2026-03-03T13:12:44.428539770Z","created_by":"tcsenpai","metadata":"{}","thread_id":""}]} +{"id":"bd-32s","title":"Fix: time-bound token script hook/view execution","status":"closed","priority":1,"issue_type":"bug","created_at":"2026-03-04T08:42:07.942213080Z","created_by":"tcsenpai","updated_at":"2026-03-04T08:44:58.602822591Z","closed_at":"2026-03-04T08:44:58.602590003Z","close_reason":"Execute token script views/hooks/methods via vm.Script.runInContext with timeouts; add best-effort async timeout and document env knobs","source_repo":".","compaction_level":0,"original_size":0} +{"id":"bd-38t","title":"pr-bug-2","description":"The issue below was found during a code review. Follow the provided context and guidance below and implement a solution\n\n## Issue description\n`applyMutations` can create negative balances/totalSupply because it applies bigint arithmetic without invariant checks.\n\n## Issue Context\nScripts can emit arbitrary mutations via hooks, so this is reachable in normal execution.\n\n## Fix Focus Areas\n- src/libs/scripting/index.ts[38-64]\n- src/libs/scripting/index.ts[271-309]","status":"closed","priority":0,"issue_type":"task","created_at":"2026-03-04T08:47:34.949525753Z","created_by":"tcsenpai","updated_at":"2026-03-04T08:59:35.825648811Z","closed_at":"2026-03-04T08:59:35.825405954Z","close_reason":"Add invariant checks to applyMutations (no negative balances/totalSupply, no non-positive amounts)","source_repo":".","compaction_level":0,"original_size":0} +{"id":"bd-3ga","title":"Remove markdown phase checklist from .serena memory doc","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-04T16:39:11.871472188Z","created_by":"tcsenpai","updated_at":"2026-03-04T16:42:35.049210156Z","closed_at":"2026-03-04T16:42:35.048958623Z","close_reason":"Removed phase/progress checklist; make doc informational (tracking in beads)","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-3ga","depends_on_id":"bd-1kf","type":"discovered-from","created_at":"2026-03-04T16:39:11.871472188Z","created_by":"tcsenpai"}]} +{"id":"bd-3j1","title":"PR685: resolve remaining review blockers","status":"open","priority":1,"issue_type":"epic","created_at":"2026-03-04T15:17:46.664028694Z","created_by":"tcsenpai","updated_at":"2026-03-04T15:17:46.664028694Z","source_repo":".","compaction_level":0,"original_size":0} +{"id":"bd-3rf","title":"Docs: token system overview + diagrams","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-03T16:06:43.508657312Z","created_by":"tcsenpai","updated_at":"2026-03-03T16:09:19.569601828Z","closed_at":"2026-03-03T16:09:19.569410437Z","close_reason":"Added documentation/tokens/README.md with Mermaid diagrams + token RPC/ACL/script execution details","source_repo":".","compaction_level":0,"original_size":0} +{"id":"bd-8ac","title":"Disable TypeORM synchronize in prod","status":"closed","priority":1,"issue_type":"task","created_at":"2026-03-04T15:17:54.514287650Z","created_by":"tcsenpai","updated_at":"2026-03-04T15:40:40.994490032Z","closed_at":"2026-03-04T15:40:40.994159870Z","close_reason":"Disable TypeORM synchronize by default in production","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-8ac","depends_on_id":"bd-3j1","type":"discovered-from","created_at":"2026-03-04T15:17:54.514287650Z","created_by":"tcsenpai"}]} +{"id":"bd-b2m","title":"Fix manageNodeCall token reads to use initialized Datasource","status":"closed","priority":1,"issue_type":"bug","created_at":"2026-03-04T16:39:11.996769919Z","created_by":"tcsenpai","updated_at":"2026-03-04T16:41:50.454540531Z","closed_at":"2026-03-04T16:41:50.454293125Z","close_reason":"Use Datasource.getInstance() for token nodeCalls so repositories are initialized","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-b2m","depends_on_id":"bd-1kf","type":"discovered-from","created_at":"2026-03-04T16:39:11.996769919Z","created_by":"tcsenpai"}]} +{"id":"bd-dlt","title":"pr-bug-1","description":"The issue below was found during a code review. Follow the provided context and guidance below and implement a solution\n\n## Issue description\nHolder-pointer maintenance only updates pointers for the primary operation participants, but scripts can emit additional mutations affecting other addresses.\n\n## Issue Context\nThis breaks `GCRMain.extended.tokens` as an index of token holders.\n\n## Fix Focus Areas\n- src/libs/scripting/index.ts[271-309]\n- src/libs/blockchain/gcr/gcr_routines/GCRTokenRoutines.ts[492-514]","status":"closed","priority":0,"issue_type":"task","created_at":"2026-03-04T08:45:59.443534211Z","created_by":"tcsenpai","updated_at":"2026-03-04T09:03:15.166337423Z","closed_at":"2026-03-04T09:03:15.166106708Z","close_reason":"Update holder pointers for all addresses affected by script-emitted mutations (not just from/to)","source_repo":".","compaction_level":0,"original_size":0} +{"id":"bd-gym","title":"Fix token caller spoofing (edit.account must match tx signer)","status":"closed","priority":0,"issue_type":"bug","created_at":"2026-03-04T16:39:11.930509952Z","created_by":"tcsenpai","updated_at":"2026-03-04T16:39:56.071067802Z","closed_at":"2026-03-04T16:39:56.070901499Z","close_reason":"Reject token edits when edit.account != tx.content.from","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-gym","depends_on_id":"bd-1kf","type":"discovered-from","created_at":"2026-03-04T16:39:11.930509952Z","created_by":"tcsenpai"}]} +{"id":"bd-oa8","title":"pr-bug-3","description":"The issue below was found during a code review. Follow the provided context and guidance below and implement a solution\n\n## Issue description\n`batchDownloadBlocks` inserts blocks with `persistTransactions` effectively enabled (default), which can cause `HandleGCR.applyToTx()` to skip edits for txs that were in the local mempool.\n\n## Issue Context\nThe PR already documents and fixes this exact failure mode in `syncBlock`, but the batch sync path still uses the older call form.\n\n## Fix Focus Areas\n- src/libs/blockchain/routines/Sync.ts[531-551]\n- src/libs/blockchain/chain.ts[342-406]\n- src/libs/blockchain/gcr/handleGCR.ts[330-342]","status":"closed","priority":0,"issue_type":"task","created_at":"2026-03-04T08:47:59.499641986Z","created_by":"tcsenpai","updated_at":"2026-03-04T09:04:17.956956138Z","closed_at":"2026-03-04T09:04:17.956806496Z","close_reason":"Batch sync path now inserts blocks with persistTransactions=false (avoid skipping GCR apply for txs seen in mempool)","source_repo":".","compaction_level":0,"original_size":0} +{"id":"bd-uf3","title":"Make token hook context deterministic (timestamps + prevBlockHash)","status":"closed","priority":1,"issue_type":"task","created_at":"2026-03-04T15:17:54.255825899Z","created_by":"tcsenpai","updated_at":"2026-03-04T15:27:55.847042024Z","closed_at":"2026-03-04T15:27:55.846795260Z","close_reason":"Removed Date.now/empty prevBlockHash from hook contexts; made ACL+upgrade timestamps deterministic","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-uf3","depends_on_id":"bd-3j1","type":"discovered-from","created_at":"2026-03-04T15:17:54.255825899Z","created_by":"tcsenpai"}]} diff --git a/.beads/metadata.json b/.beads/metadata.json deleted file mode 100644 index c787975e1..000000000 --- a/.beads/metadata.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "database": "beads.db", - "jsonl_export": "issues.jsonl" -} \ No newline at end of file diff --git a/.beadspace/.version b/.beadspace/.version new file mode 100644 index 000000000..626799f0f --- /dev/null +++ b/.beadspace/.version @@ -0,0 +1 @@ +v1 diff --git a/.beadspace/index.html b/.beadspace/index.html new file mode 100644 index 000000000..a63644d42 --- /dev/null +++ b/.beadspace/index.html @@ -0,0 +1,1108 @@ + + + + + +Beadspace + + + + + + + +
+
+ + +
+ +
+
+ +
+
+
+
Loading issues...
+
+
+ + + + + + + diff --git a/.beadspace/issues.json b/.beadspace/issues.json new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/.beadspace/issues.json @@ -0,0 +1 @@ +[] diff --git a/.dockerignore b/.dockerignore index c4bee56f7..0f5897606 100644 --- a/.dockerignore +++ b/.dockerignore @@ -10,6 +10,14 @@ devnet/.env devnet/demos_peerlist.json devnet/postgres-data +# Exclude local runtime state (may contain root-owned files / huge volumes) +ipfs/data_*/ +ipfs_*/ +docker_data/ +logs/ +postgres/ +postgres_*/ + # Exclude unnecessary files *.log .DS_Store diff --git a/.github/workflows/beadspace.yml b/.github/workflows/beadspace.yml new file mode 100644 index 000000000..a0f4f6f28 --- /dev/null +++ b/.github/workflows/beadspace.yml @@ -0,0 +1,62 @@ +# Beadspace Dashboard — Auto-deploy on beads changes +# +# Copy this file to .github/workflows/beadspace.yml in your repo. +# Prerequisite: index.html must exist at .beadspace/index.html +# Enable: Settings > Pages > Source: "GitHub Actions" +# +# Security: No untrusted inputs used. Data source is .beads/issues.jsonl +# (checked into the repo). The deploy step output URL is from a trusted action. + +name: Deploy Beadspace + +on: + push: + branches: [main] + paths: + - '.beads/**' + - '.beadspace/**' + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: pages + cancel-in-progress: false + +jobs: + deploy: + runs-on: ubuntu-latest + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - uses: actions/checkout@v4 + + - name: Generate issues.json + run: | + if [ ! -f .beads/issues.jsonl ]; then + echo "No .beads/issues.jsonl found" + exit 1 + fi + # Convert JSONL to JSON array — reads only from checked-in repo files + python3 -c " + import json + issues = [json.loads(l) for l in open('.beads/issues.jsonl') if l.strip()] + json.dump(issues, open('.beadspace/issues.json', 'w')) + print(f'{len(issues)} issues exported') + " + + - name: Setup Pages + uses: actions/configure-pages@v5 + + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: .beadspace + + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.gitignore b/.gitignore index b57d072ac..5b44efdb0 100644 --- a/.gitignore +++ b/.gitignore @@ -264,6 +264,8 @@ src/features/tlsnotary/SDK_INTEGRATION.md ipfs/data_53550/ipfs nohup.out *.db +/.beads/ +/.beads_bak/ /.beads/.jsonl.lock /.beads/daemon-2026-02-15T16-27-46.352.log.gz /.beads/daemon-2026-02-16T14-05-14.370.log.gz @@ -275,3 +277,10 @@ nohup.out /.beads/last-touched /.taskmaster /internal-docs + +# better_testing run outputs (generated) +better_testing/runs/* +!better_testing/runs/.gitkeep +/documentation/internal-docs/src/.deps/npm/@openzeppelin/contracts +/documentation/internal-docs/src/lib +/documentation/internal-docs diff --git a/.planning/codebase/ARCHITECTURE.md b/.planning/codebase/ARCHITECTURE.md index a04e5c69e..19b6d2840 100644 --- a/.planning/codebase/ARCHITECTURE.md +++ b/.planning/codebase/ARCHITECTURE.md @@ -1,277 +1,84 @@ # Architecture -**Analysis Date:** 2026-01-28 +**Analysis Date:** 2026-02-22 ## Pattern Overview -**Overall:** Monolithic node application with event-loop-driven consensus - -**Key Characteristics:** -- Single-process blockchain node (RPC + consensus + networking in one binary) -- Singleton-based shared state pattern for cross-module communication -- Layered architecture: Network (RPC) -> Blockchain (Chain/GCR) -> Consensus (PoRBFT) -> Storage (TypeORM/Postgres) -- Feature modules bolted onto the core node as optional services (MCP, TLSNotary, Metrics, OmniProtocol) -- Background main loop drives consensus timing and peer management - -## Layers - -**Entry / Bootstrap Layer:** -- Purpose: Initialize the node, configure services, start the main loop -- Location: `src/index.ts` -- Contains: Warmup sequence, argument parsing, port allocation, service startup -- Depends on: All other layers -- Used by: Nothing (top-level entry point) - -**Network / RPC Layer:** -- Purpose: Handle inbound RPC requests from clients and peers -- Location: `src/libs/network/` -- Contains: Bun HTTP server (`bunServer.ts`), RPC router (`server_rpc.ts`), endpoint handlers (`endpointHandlers.ts`), method-specific managers (`manageConsensusRoutines.ts`, `manageGCRRoutines.ts`, `manageNodeCall.ts`, `manageHelloPeer.ts`, `manageExecution.ts`, `manageBridge.ts`, `manageNativeBridge.ts`, `manageAuth.ts`, `manageLogin.ts`) -- Depends on: Blockchain layer, Consensus layer, SharedState -- Used by: External clients, peer nodes - -**Blockchain Layer:** -- Purpose: Chain state management, block/transaction/GCR CRUD operations -- Location: `src/libs/blockchain/` -- Contains: `chain.ts` (static Chain class for DB queries), `block.ts`, `transaction.ts`, `mempool_v2.ts`, GCR subsystem (`gcr/`), sync routines (`routines/Sync.ts`) -- Depends on: Model/Storage layer, Crypto layer -- Used by: Network layer, Consensus layer - -**GCR (Global Change Registry) Subsystem:** -- Purpose: Mutable account state derived from immutable blockchain transactions -- Location: `src/libs/blockchain/gcr/` -- Contains: `gcr.ts` (main GCR operations), `handleGCR.ts`, routines in `gcr_routines/` (balance, identity, nonce, TLSNotary, incentive management, signature detection, cross-chain assignment) -- Depends on: Model layer (GCR entities), Crypto layer -- Used by: Blockchain layer, Consensus layer - -**Consensus Layer:** -- Purpose: PoRBFT (Proof of Reliability BFT) consensus algorithm -- Location: `src/libs/consensus/v2/` -- Contains: `PoRBFT.ts` (main consensus routine), routines for block creation, mempool merging, peer list merging, shard computation, block hash broadcasting, validator seed generation -- Depends on: Blockchain layer, Peer layer, Communications layer, SharedState -- Used by: Main loop (`src/utilities/mainLoop.ts`) -- Key concept: Secretary-based semaphore system where the first node in a shard coordinates consensus progression - -**Peer Layer:** -- Purpose: Peer discovery, management, and health checking -- Location: `src/libs/peer/` -- Contains: `Peer.ts` (peer data model), `PeerManager.ts` (singleton peer registry), routines for bootstrap, gossip, offline detection, broadcasting -- Depends on: Network layer (for hello_peer), SharedState -- Used by: Consensus layer, Main loop, Network layer - -**Communications Layer:** -- Purpose: Broadcast messages to peers (block hashes, consensus signals) -- Location: `src/libs/communications/` -- Contains: `broadcastManager.ts`, `transmission.ts` -- Depends on: Peer layer, Network layer -- Used by: Consensus layer - -**OmniProtocol Layer:** -- Purpose: Binary TCP protocol for efficient peer-to-peer communication (alternative to HTTP RPC) -- Location: `src/libs/omniprotocol/` -- Contains: TCP server, TLS support, message framing, serialization, protocol handlers (consensus, control, GCR, sync, transaction), rate limiting, connection pooling -- Depends on: Peer layer, Blockchain layer -- Used by: Peer communication (replaces HTTP when enabled) - -**Crypto Layer:** -- Purpose: Cryptographic primitives (hashing, signing, key management) -- Location: `src/libs/crypto/` -- Contains: `cryptography.ts`, `hashing.ts`, `forgeUtils.ts`, `rsa.ts` -- Depends on: `@kynesyslabs/demosdk/encryption`, `node-forge`, `tweetnacl` -- Used by: All layers requiring signing/verification - -**Identity Layer:** -- Purpose: Node identity management (keypair loading, public IP detection, social identity linking) -- Location: `src/libs/identity/` -- Contains: `identity.ts`, providers for Nomis/Discord/Twitter identity linking -- Depends on: Crypto layer, SharedState -- Used by: Bootstrap, GCR operations - -**Model / Storage Layer:** -- Purpose: Database schema and access via TypeORM -- Location: `src/model/` -- Contains: `datasource.ts` (singleton DataSource to PostgreSQL), entities for Blocks, Transactions, Mempool, Consensus, Validators, GCR (v1 and v2), PgpKeyServer -- Depends on: PostgreSQL database, TypeORM -- Used by: Blockchain layer, GCR subsystem - -**Utilities Layer:** -- Purpose: Cross-cutting concerns (logging, shared state, diagnostics, TUI) -- Location: `src/utilities/` -- Contains: `sharedState.ts` (global singleton), `logger.ts`, `mainLoop.ts`, `waiter.ts`, `Diagnostic.ts`, `tui/` (terminal UI), `backupAndRestore.ts` -- Depends on: Nothing (foundational) -- Used by: All layers - -**Features Layer:** -- Purpose: Optional/pluggable features extending the core node -- Location: `src/features/` -- Contains: See Feature Modules section below -- Depends on: Core layers (Blockchain, Network, SharedState) -- Used by: `src/index.ts` (dynamically imported at startup) +**Overall** +- Single-process “node” application (RPC + consensus + storage + optional features in one runtime) +- Event-loop-driven main loop that periodically syncs, checks consensus time, and runs consensus +- Heavy use of shared singleton/global state for cross-module coordination + +**Primary entry point** +- `src/index.ts` + +**Primary loop** +- `src/utilities/mainLoop.ts` + +## Core Subsystems (by directory) + +**Networking / RPC** +- RPC server setup and request routing: + - `src/libs/network/server_rpc.ts` + - `src/libs/network/bunServer.ts` +- Endpoint handlers and per-method routines live under `src/libs/network/` (e.g. `manage*` modules) +- Rate limiting middleware exists: `src/libs/network/middleware/rateLimiter` (review for actual enforcement) + +**Blockchain primitives** +- Chain/block/tx/mempool + routines: + - `src/libs/blockchain/` + - Validation routines (high impact): `src/libs/blockchain/routines/validateTransaction.ts` + +**GCR (Global Change Registry)** +- Account/state mutation subsystem: + - Legacy-ish: `src/libs/blockchain/gcr/gcr.ts` + - v2 entities and helpers: `src/model/entities/GCRv2/`, `src/libs/blockchain/gcr/` (plus ZK-related integrations) + +**Consensus** +- PoRBFT v2 implementation: + - `src/libs/consensus/v2/PoRBFT.ts` + - Supporting routines: `src/libs/consensus/v2/routines/` +- Triggered from `src/utilities/mainLoop.ts` via `consensusRoutine()` + +**Peers** +- Peer model/manager + discovery/gossip: + - `src/libs/peer/` + - Common routines: `src/libs/peer/routines/` + +**OmniProtocol (TCP)** +- Alternative peer messaging transport / protocol stack: + - `src/libs/omniprotocol/` + - Startup integration: `src/libs/omniprotocol/integration/startup` + +**Storage layer** +- TypeORM entities + migrations: + - Entities: `src/model/entities/` + - DataSource: `src/model/datasource.ts` + - Migrations: `src/migrations/` ## Feature Modules -**MCP Server** (`src/features/mcp/`): -- Exposes node functionality via Model Context Protocol (SSE transport) -- Tools defined in `tools/demosTools.ts` -- Started optionally via `MCP_ENABLED` env var - -**TLSNotary** (`src/features/tlsnotary/`): -- HTTPS attestation service using TLSNotary proofs -- Includes proxy manager, port allocator, token-based access, FFI bridge -- Started optionally via `TLSNOTARY_ENABLED` env var - -**Metrics** (`src/features/metrics/`): -- Prometheus-compatible metrics endpoint -- `MetricsServer.ts` (HTTP server on `/metrics`), `MetricsCollector.ts` (data gathering), `MetricsService.ts` -- Started optionally via `METRICS_ENABLED` env var - -**Multichain / XM** (`src/features/multichain/`): -- Cross-chain transaction dispatching (`XMDispatcher.ts`) -- Chain-specific adapters: EVM (`evmwares/`), Aptos (`aptoswares/`) -- Transaction executors for balance queries, contract reads/writes, payments - -**Web2 Proxy** (`src/features/web2/`): -- HTTP proxy for web2 API requests routed through the node -- DAHR (Decentralized API HTTP Router) and Proxy factories -- Request sanitization and validation - -**Bridges** (`src/features/bridges/`): -- Cross-chain bridge support via Rubic SDK integration - -**Instant Messaging Protocol** (`src/features/InstantMessagingProtocol/`): -- WebSocket-based signaling server for peer-to-peer messaging -- Socket.io signaling server on separate port - -**ActivityPub / Fediverse** (`src/features/activitypub/`): -- Fediverse integration with SQLite-based storage - -**FHE (Fully Homomorphic Encryption)** (`src/features/fhe/`): -- Experimental FHE operations using `node-seal` - -**ZK (Zero Knowledge)** (`src/features/zk/`): -- Zero-knowledge proof integration (iZKP) - -**Incentive** (`src/features/incentive/`): -- Point system and referral tracking - -## Data Flow - -**Transaction Submission Flow:** -1. Client sends signed RPC request to `server_rpc.ts` (Bun HTTP server) -2. Headers validated (signature + identity) in `validateHeaders()` -3. Request routed by `method` field to appropriate handler in `endpointHandlers.ts` -4. Transaction validated in `src/libs/blockchain/routines/validateTransaction.ts` -5. Valid transaction added to mempool (`mempool_v2.ts`) -6. Transaction broadcast to peers via `broadcastManager.ts` - -**Consensus Flow (PoRBFTv2):** -1. `mainLoop.ts` checks `consensusTime.checkConsensusTime()` each cycle (~1s) -2. When consensus time reached and node is synced, calls `consensusRoutine()` in `PoRBFT.ts` -3. Shard computed from validator seed (`getCommonValidatorSeed.ts`, `getShard.ts`) -4. If node is in shard: merge mempools, merge peerlists, order transactions, create block -5. Secretary node (first in shard) coordinates progression via semaphore system -6. Block hash broadcast to network, GCR operations applied -7. Block written to chain via `Chain` class - -**Sync Flow:** -1. On startup, `fastSync()` called from `src/index.ts` -2. Node compares its chain height with peers -3. Missing blocks fetched from peers via `nodeCall` RPC method -4. Blocks validated and applied to local chain + GCR - -**State Management:** -- `SharedState` singleton (`src/utilities/sharedState.ts`) holds all runtime state: sync status, consensus flags, keypair, shard info, peer manager reference, connection strings, configuration -- Accessed globally via `getSharedState` export -- Mutable properties with side effects (e.g., `syncStatus` setter updates peer data) - -## Key Abstractions - -**Chain (Static Class):** -- Purpose: All blockchain database operations (get blocks, transactions, GCR data) -- Location: `src/libs/blockchain/chain.ts` -- Pattern: Static methods with TypeORM repositories, initialized via `Chain.setup()` - -**PeerManager (Singleton):** -- Purpose: Registry of known peers, online/offline tracking, peer list file I/O -- Location: `src/libs/peer/PeerManager.ts` -- Pattern: Singleton with in-memory peer records, loaded from `demos_peerlist.json` - -**SharedState (Singleton):** -- Purpose: Global mutable state shared across all modules -- Location: `src/utilities/sharedState.ts` -- Pattern: Singleton class with public properties, getters/setters with side effects - -**Datasource (Singleton):** -- Purpose: TypeORM DataSource wrapper for PostgreSQL connection -- Location: `src/model/datasource.ts` -- Pattern: Singleton with lazy initialization - -**BroadcastManager:** -- Purpose: Send messages to all peers or specific subsets -- Location: `src/libs/communications/broadcastManager.ts` -- Pattern: Used by consensus for block hash broadcasting - -## Entry Points - -**Main Entry (`src/index.ts`):** -- Location: `src/index.ts` -- Triggers: `bun run start:bun` or `tsx src/index.ts` -- Responsibilities: Full node lifecycle - setup DB, warmup, calibrate time, start RPC server, bootstrap peers, find genesis, start OmniProtocol, start optional services (MCP, TLSNotary, Metrics), run main loop, handle graceful shutdown - -**RPC Server (`src/libs/network/server_rpc.ts`):** -- Location: `src/libs/network/server_rpc.ts` -- Triggers: Called from `warmup()` in `index.ts` via `serverRpcBun()` -- Responsibilities: HTTP server handling all inbound RPC requests, auth validation, method routing - -**Main Loop (`src/utilities/mainLoop.ts`):** -- Location: `src/utilities/mainLoop.ts` -- Triggers: Called from `main()` in `index.ts` (runs async in background) -- Responsibilities: Periodic consensus time checking, peer routine execution, consensus triggering - -**Key Generator (`src/libs/utils/keyMaker.ts`):** -- Location: `src/libs/utils/keyMaker.ts` -- Triggers: `bun run keygen` -- Responsibilities: Generate node identity keypair - -## Error Handling - -**Strategy:** Try-catch with logging, failsafe continuation for optional services - -**Patterns:** -- Optional services (MCP, TLSNotary, Metrics, OmniProtocol) wrapped in try-catch with fallback to continue without the service -- Custom exception types in `src/exceptions/index.ts`: `TimeoutError`, `AbortError`, `BlockInvalidError`, `ForgingEndedError`, `NotInShardError` -- `Waiter` utility (`src/utilities/waiter.ts`) for timeout/abort-aware async waiting -- Graceful shutdown handlers for SIGINT/SIGTERM that stop all services in sequence -- RPC layer validates headers and returns structured `RPCResponse` with error info - -## Cross-Cutting Concerns +Feature modules live under `src/features/` and are enabled/configured via env vars or code paths in `src/index.ts`. -**Logging:** -- Custom `CategorizedLogger` singleton with tag-based categorization (`src/utilities/logger.ts`) -- TUI mode available via `TUIManager` (`src/utilities/tui/TUIManager.ts`) using `terminal-kit` -- Log levels: debug, info, warning, error, critical -- Per-port log directories, custom log files for specific subsystems +Notable features: +- MCP server: `src/features/mcp/` +- Metrics: `src/features/metrics/` +- TLSNotary: `src/features/tlsnotary/` +- Multichain: `src/features/multichain/` +- ZK identity/proofs: `src/features/zk/` +- Instant Messaging signaling: `src/features/InstantMessagingProtocol/` +- FHE: `src/features/fhe/FHE.ts` -**Validation:** -- RPC request validation: signature + identity headers required for authenticated endpoints -- Transaction validation in `src/libs/blockchain/routines/validateTransaction.ts` -- Rate limiting via `src/libs/network/middleware/rateLimiter.ts` -- OmniProtocol rate limiting in `src/libs/omniprotocol/ratelimit/` +## Cross-cutting Concerns -**Authentication:** -- Ed25519 signature-based authentication (also supports Falcon, ML-DSA post-quantum algorithms) -- Identity header contains public key (with optional algorithm prefix like `ed25519:0xABC...`) -- Signature header contains signed identity string -- Some endpoints marked as protected requiring admin auth -- `noAuthMethods` list for unauthenticated public endpoints (e.g., `nodeCall`) +**Configuration** +- Loaded via `dotenv` in `src/index.ts` +- Example env files: `.env.example`, `env.example` -**Configuration:** -- Environment variables via `.env` file (loaded with `dotenv`) -- Key env vars: `SERVER_PORT`/`RPC_PORT`, `PG_HOST`/`PG_PORT`/`PG_USER`/`PG_PASSWORD`, `EXPOSED_URL`, `PROD`, `OMNI_ENABLED`, `MCP_ENABLED`, `TLSNOTARY_ENABLED`, `METRICS_ENABLED`, `SHARD_SIZE`, `MAIN_LOOP_SLEEP_TIME` -- Peer list from `demos_peerlist.json` -- Genesis configuration from `data/` directory -- ORM config in `ormconfig.json` -- Path aliases: `@/*` maps to `src/*` (tsconfig), `src/*` also used directly +**Logging / TUI** +- Central logger and TUI manager: `src/utilities/logger`, `src/utilities/tui/` ---- +**Shared state** +- Global state container: `src/utilities/sharedState` +- Used broadly for run flags, ports, consensus timing, etc. -*Architecture analysis: 2026-01-28* diff --git a/.planning/codebase/CONCERNS.md b/.planning/codebase/CONCERNS.md index 8acd9cb7c..c7ec9a6a0 100644 --- a/.planning/codebase/CONCERNS.md +++ b/.planning/codebase/CONCERNS.md @@ -1,262 +1,59 @@ # Codebase Concerns -**Analysis Date:** 2026-01-28 +**Analysis Date:** 2026-02-22 -## Tech Debt +## Quick Metrics (from `src/`) -### Massive TODO/FIXME Backlog (200+ comments) -- Issue: Over 200 TODO/FIXME/REVIEW comments scattered across the codebase, many indicating incomplete or placeholder implementations. Core blockchain logic has unfinished features behind TODOs. -- Files: Concentrated in: - - `src/libs/blockchain/routines/validateTransaction.ts` (nonce validation hardcoded to `true` at line 233) - - `src/libs/blockchain/routines/validatorsManagement.ts` (3 missing checks: blacklist, kick history, duplicate staking at lines 20-22) - - `src/libs/blockchain/routines/subOperations.ts` (5 empty TODO blocks at lines 108, 133, 157, 165, 170) - - `src/libs/blockchain/routines/calculateCurrentGas.ts` (missing gas limit and dApp fee logic) - - `src/libs/network/securityModule.ts` (entire file is a stub - rate limiting not implemented) - - `src/libs/network/routines/gasDeal.ts` (6 unimplemented TODO functions for gas conversion) - - `src/features/bridges/bridges.ts` (bridge operations entirely unimplemented, lines 86-108) - - `src/libs/assets/FungibleToken.ts` (token transfer, deploy, balance check all TODO) - - `src/features/multichain/assetWrapping.ts` (asset wrapping not implemented) - - `src/libs/blockchain/gcr/gcr_routines/ensureGCRForUser.ts` (GCR user creation not implemented) - - `src/libs/blockchain/gcr/gcr_routines/applyGCROperation.ts` (GCR operation application not implemented) -- Impact: **Critical** - Core blockchain operations (nonce validation, gas calculation, validator management, security module) are incomplete. This means transactions can bypass nonce checks, gas is not properly calculated, and rate limiting does not exist. -- Fix approach: Prioritize security-critical TODOs first: nonce validation, security module, validator checks. Track remaining TODOs as beads issues by subsystem. +- TODO/FIXME/REVIEW markers: **629** occurrences +- `as any` casts: **54** occurrences +- `: any` annotations: **281** occurrences +- `eslint-disable` directives: **39** occurrences +- `@deprecated` tags: **6** occurrences +- Unique `process.env.*` references: **102** variables (approx; grep-derived) -### Deprecated Code Not Removed -- Issue: The `src/libs/blockchain/gcr/gcr.ts` (1435 lines) is explicitly marked for deprecation in favor of GCREdit system (line 1 and 75) but remains the largest file in the codebase. Multiple deprecated methods in DTR manager remain. -- Files: - - `src/libs/blockchain/gcr/gcr.ts:1` - "This should be deprecated" - - `src/libs/blockchain/gcr/gcr.ts:75` - "This class should be deprecated" - - `src/libs/network/dtr/dtrmanager.ts:82,103,127` - Three `@deprecated` methods - - `src/libs/utils/demostdlib/deriveMempoolOperation.ts:55,111` - Deprecated code blocks - - `src/libs/blockchain/routines/validateTransaction.ts:257,263` - Deprecated operations -- Impact: **High** - 1435 lines of deprecated GCR code creates confusion about which code path is canonical. New contributors may reference wrong implementation. -- Fix approach: Audit all callers of deprecated `gcr.ts` methods. If GCRv2 (handleGCR.ts) covers all use cases, remove the old file and update imports. +These numbers are useful for trend tracking and prioritization; they are not a substitute for threat modeling. -### Old/Legacy Code Directories -- Issue: `src/features/InstantMessagingProtocol/old/` directory contains legacy types and implementations alongside the current signaling server. -- Files: `src/features/InstantMessagingProtocol/old/types/IMStorage.ts`, `src/features/InstantMessagingProtocol/old/types/IMSession.ts` -- Impact: **Medium** - Confusion about which IMP implementation is current. Legacy types still referenced. -- Fix approach: Migrate any still-needed types from `old/` into the active implementation, then remove `old/` directory. +## High-Risk Correctness / Security -### Excessive `as any` Type Casts (40 occurrences) -- Issue: 40 `as any` type casts across 18 files, bypassing TypeScript's type safety. Particularly concerning in blockchain operation and identity routines. -- Files: Highest counts in: - - `src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts` (9 occurrences) - - `src/features/multichain/routines/executors/pay.ts` (2 occurrences) - - `src/libs/blockchain/gcr/gcr.ts` (2 occurrences) - - `src/libs/network/endpointHandlers.ts` (3 occurrences) -- Impact: **High** - Runtime type errors in identity and transaction processing can cause silent data corruption or consensus failures. -- Fix approach: Define proper interfaces for GCREdit operations, identity operations, and endpoint handler payloads. Replace `as any` with typed alternatives. +### Transaction nonce validation bypassed +- Risk: Transaction nonce checks are effectively disabled. +- Code: `src/libs/blockchain/routines/validateTransaction.ts` + - `assignNonce()` currently returns `true` via `const validNonce = true // TODO Override for testing` +- Impact: Replay / ordering guarantees can be broken; can destabilize mempool/consensus assumptions. -### `: any` Type Annotations (74 occurrences across 30 files) -- Issue: 74 uses of `: any` type annotation, concentrated in identity routines, blockchain operations, and utility code. -- Files: Highest counts in: - - `src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts` (14 occurrences) - - `src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts` (3 occurrences) - - `src/utilities/waiter.ts` (6 occurrences) - - `src/utilities/tui/LegacyLoggerAdapter.ts` (8 occurrences) -- Impact: **Medium** - Reduces ability to catch type errors at compile time. -- Fix approach: Gradually replace with proper types, starting with GCRIdentityRoutines which has the most occurrences and handles critical identity logic. +### Security module stubbed +- Risk: Rate limiting / security reporting appears unimplemented. +- Code: `src/libs/network/securityModule.ts` is explicitly marked “TODO Implement this”. +- Impact: DoS resistance and request validation may rely on incomplete components. -### ESLint Disable Comments (35+ occurrences) -- Issue: 35+ eslint-disable comments throughout the codebase, including file-level disables for `no-unused-vars` in critical files. -- Files: - - `src/index.ts:1` - `eslint-disable no-unused-vars` (file-level) - - `src/libs/blockchain/chain.ts:1` - `eslint-disable no-unused-vars` (file-level) - - `src/libs/blockchain/routines/Sync.ts:1` - `eslint-disable no-unused-vars` (file-level) - - `src/libs/network/endpointHandlers.ts:1` - `eslint-disable no-unused-vars` (file-level) - - `src/features/tlsnotary/ffi.ts` - 10 eslint-disable comments for `no-explicit-any` -- Impact: **Medium** - Unused imports bloat the codebase and mask real issues. File-level disables hide problems. -- Fix approach: Run `bun run lint:fix` and remove unused imports. Replace file-level disables with line-level where genuinely needed. +### Database auto-sync in production risk +- Risk: TypeORM `synchronize: true` can cause unintended schema changes at runtime. +- Code: `src/model/datasource.ts` sets `synchronize: true`. +- Impact: Production data loss / migration drift if used outside controlled environments. -## Known Bugs +## Maintainability / Tech Debt -### Nonce Validation Bypassed -- Symptoms: Transaction nonce is hardcoded to `true` - all transactions pass nonce check regardless of actual nonce. -- Files: `src/libs/blockchain/routines/validateTransaction.ts:233` -- Trigger: Any transaction submission. -- Workaround: None - this is an active bypass. +### Large TODO backlog in core subsystems +- Concentrated in blockchain/network/bridge routines; triage needed by impact area. +- Starting points: + - `src/libs/blockchain/routines/validateTransaction.ts` + - `src/libs/network/` (method managers + middleware) + - `src/features/bridges/` -### parseInt Without Radix and NaN Risk -- Symptoms: Several `parseInt(process.env.*)` calls without radix parameter or NaN handling. If env var is undefined, `parseInt(undefined)` returns `NaN`. -- Files: - - `src/utilities/sharedState.ts:159` - `parseInt(process.env.RPC_FEE_PERCENT)` - no fallback, will be `NaN` - - `src/utilities/sharedState.ts:172` - `parseInt(process.env.MAX_MESSAGE_SIZE)` - no fallback, will be `NaN` - - `src/model/datasource.ts:30` - `parseInt(process.env.PG_PORT)` - missing radix parameter -- Trigger: Running without setting `RPC_FEE_PERCENT` or `MAX_MESSAGE_SIZE` environment variables. -- Workaround: Always set these env vars. +### Type safety erosion +- `any` usage is permitted by ESLint (`@typescript-eslint/no-explicit-any: off`) and is common. +- Impact: runtime failures can hide until consensus-critical paths execute. -### Signature Serialization Concern -- Symptoms: Transaction signatures are serialized via `JSON.stringify()` for storage, which is explicitly called out as problematic in the code itself. -- Files: `src/libs/blockchain/transaction.ts:441` - Comment: "REVIEW This is a horrible thing, if it even works" -- Trigger: Transaction persistence to database. -- Workaround: None documented. +## Operational / Secret Handling -## Security Considerations +### Sensitive local identity files exist in repo root (do not commit/share) +- `.demos_identity`, `.demos_identity.key` exist in the working tree (ensure they’re ignored and handled carefully). +- Recommendation: treat as secrets; restrict permissions and avoid copying into docs/logs. -### Security Module Not Implemented -- Risk: The security module (`src/libs/network/securityModule.ts`) is entirely a stub. Rate limiting function `checkRateLimits` returns an empty report. No actual rate limiting or abuse prevention exists at the application level. -- Files: `src/libs/network/securityModule.ts` (entire file, 30 lines) -- Current mitigation: OmniProtocol has its own rate limiter (`src/libs/network/middleware/rateLimiter.ts`), but the core RPC security module is empty. -- Recommendations: Implement rate limiting for RPC endpoints, add IP-based throttling, implement request validation. +## Suggested next steps (actionable) -### Missing Authentication in ActivityPub Handlers -- Risk: ActivityPub fediverse handlers have TODO comments for authentication on both inbox and outbox endpoints. -- Files: `src/features/activitypub/fediverse.ts:31,52` - Both marked `// TODO Authentication` -- Current mitigation: None - these endpoints are unprotected. -- Recommendations: Implement HTTP Signature verification per ActivityPub spec before exposing these endpoints. +1. Turn `assignNonce()` into a real nonce check (and add tests). +2. Audit/implement `src/libs/network/securityModule.ts` + verify `RateLimiter` usage in request pipeline. +3. Decide on DB strategy (Postgres vs sqlite) and remove/clarify legacy configs (`ormconfig.json`) to reduce confusion. +4. Track TODO clusters as beads issues by subsystem (consensus, network, GCR, bridges). -### Hardcoded Database Credentials -- Risk: Default database credentials are hardcoded in the datasource configuration. -- Files: `src/model/datasource.ts:31-33` - `demosuser`/`demospassword`/`demos` -- Current mitigation: Environment variables can override, but defaults are visible in source. Per CLAUDE.md, TypeORM synchronize:true is intentional. -- Recommendations: Ensure production deployments always set PG_PASSWORD via environment. Consider removing default password. - -### Missing Signature Verification in P2P -- Risk: P2P message handling has a TODO for signature verification that is not implemented. -- Files: `src/libs/network/manageP2P.ts:67` - `// ! TODO Signature verification` -- Current mitigation: None documented. -- Recommendations: Implement signature verification before processing any P2P messages. - -### Missing Signature in Native Bridge Operations -- Risk: Native bridge operations are sent unsigned. -- Files: `src/libs/network/manageNativeBridge.ts:26` - "FIXME: Signature generation not yet implemented - operation is unsigned" -- Current mitigation: Bridge feature appears to be in development. -- Recommendations: Block bridge operations until signature generation is implemented. - -### Validator Entrance Checks Incomplete -- Risk: Validator entrance only checks staking amount. Missing checks for: already staking, blacklist membership, kick history. -- Files: `src/libs/blockchain/routines/validatorsManagement.ts:20-22` -- Current mitigation: None - any address with sufficient stake can become a validator regardless of history. -- Recommendations: Implement all three missing checks before mainnet. - -## Performance Bottlenecks - -### Large God Files -- Problem: Several files exceed 700+ lines with multiple responsibilities, making them hard to maintain and test. -- Files: - - `src/libs/blockchain/UDTypes/uns_sol.ts` (2403 lines) - - `src/features/incentive/PointSystem.ts` (1560 lines) - - `src/utilities/tui/TUIManager.ts` (1492 lines) - - `src/libs/blockchain/gcr/gcr.ts` (1435 lines - also deprecated) - - `src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts` (1125 lines) - - `src/libs/consensus/v2/types/secretaryManager.ts` (1004 lines) - - `src/index.ts` (924 lines) -- Cause: Organic growth without refactoring. `index.ts` handles initialization, configuration, server startup, and shutdown in one file. -- Improvement path: Extract configuration into a dedicated module. Split GCRIdentityRoutines by operation type. Break PointSystem into calculation and storage layers. - -### SharedState Singleton Complexity -- Problem: `src/utilities/sharedState.ts` is a mutable singleton holding ~50+ fields including runtime configuration, peer state, consensus state, and timing data. Any module can mutate any field. -- Files: `src/utilities/sharedState.ts` -- Cause: Started simple, grew to hold all shared state without boundaries. -- Improvement path: Split into domain-specific state managers (ConsensusState, NetworkState, ConfigState) with controlled mutation interfaces. - -### Console.log Usage (226 occurrences across 30 files) -- Problem: 226 console.log/error/warn/debug calls across the codebase. While a `CategorizedLogger` exists (`src/utilities/tui/CategorizedLogger.ts`), many files still use console directly. -- Files: Highest counts in `src/features/zk/iZKP/test.ts` (24), `src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts` (9), `src/index.ts` (18) -- Cause: Incremental development without consistent logging adoption. -- Improvement path: Replace all console.log with the CategorizedLogger. Add log levels and structured output. - -## Fragile Areas - -### Consensus Module (PoRBFTv2) -- Files: `src/libs/consensus/v2/PoRBFT.ts`, `src/libs/consensus/v2/types/secretaryManager.ts` -- Why fragile: Secretary manager (1004 lines) manages complex state transitions for block creation, validation, and voting. Multiple REVIEW comments about timeout handling and edge cases. Uses mutable shared state extensively. -- Safe modification: Always test consensus changes with multi-node setup. Secretary election and timeout logic are tightly coupled. -- Test coverage: No automated tests found for consensus module. - -### Endpoint Handlers -- Files: `src/libs/network/endpointHandlers.ts` (754 lines) -- Why fragile: Single file handling all transaction types (native, crosschain, GCR, L2PS) with many REVIEW/TODO comments. Type safety is weak with `as any` casts. -- Safe modification: Changes to one handler can affect others due to shared state mutation. Test each transaction type independently. -- Test coverage: Only `src/tests/` contains chain-level tests, not unit tests for individual handlers. - -### Block Sync -- Files: `src/libs/blockchain/routines/Sync.ts` (791 lines) -- Why fragile: File-level eslint-disable for unused-vars. Complex peer selection, block downloading, and GCR state reconciliation. Many REVIEW comments about conflict handling. -- Safe modification: Sync changes can cause chain forks if block validation is altered. Test with peers at different block heights. -- Test coverage: No automated sync tests found. - -## Scaling Limits - -### Mempool In-Memory Storage -- Current capacity: Mempool appears to be stored in-memory with database backing (`src/libs/blockchain/mempool_v2.ts`). -- Limit: Memory-bound; large transaction volumes could exhaust node memory. -- Scaling path: Implement mempool size limits, transaction eviction policies, and priority queuing. - -### Single-File Configuration -- Current capacity: All configuration via environment variables parsed at startup in `src/index.ts` and `src/utilities/sharedState.ts`. -- Limit: No configuration validation, no hot-reload capability, NaN risks for missing numeric vars. -- Scaling path: Use zod (already a dependency) for env validation. Create a typed config module. - -## Dependencies at Risk - -### Outdated ESLint Ecosystem -- Risk: Using `@typescript-eslint/eslint-plugin` v5.x and `eslint` v8.x. ESLint 9 with flat config is current. TypeScript-ESLint v8 is current. -- Impact: Missing newer linting rules, potential compatibility issues with TypeScript 5.9. -- Migration plan: Upgrade to ESLint 9 flat config with `@typescript-eslint` v8. - -### Heavy Dependency Footprint -- Risk: 60+ production dependencies including multiple blockchain SDKs (ethers, web3, @solana/web3.js, @aptos-labs/ts-sdk, @coral-xyz/anchor), rubic-sdk, and node-seal (FHE). -- Impact: Large attack surface, slow installs, potential version conflicts between blockchain SDKs. -- Migration plan: Audit which blockchain SDKs are actively used. Consider lazy-loading optional features (FHE, Rubic). - -### node-forge Cryptography -- Risk: `node-forge` is used for core cryptographic operations (ed25519 signing, RSA, certificate generation). It is a pure JavaScript implementation, slower than native alternatives. -- Impact: Performance bottleneck for signature verification during consensus. Multiple REVIEW comments about Buffer/Uint8Array compatibility issues with Bun runtime. -- Migration plan: Consider migrating to `@noble/ed25519` (already a dependency) for ed25519 operations. `node-forge` is already partially supplemented by noble libraries. - -### Dual HTTP Framework (Express + Fastify) -- Risk: Both Express and Fastify are dependencies. The main RPC uses Fastify, but Express types are also included. -- Impact: Confusion about which HTTP framework to use for new endpoints. Unnecessary dependency bloat. -- Migration plan: Audit Express usage. If only types remain, remove the Express dependency. - -## Missing Critical Features - -### No Automated Test Suite for Core Logic -- Problem: No unit tests exist for consensus, block validation, GCR operations, or sync routines. Only `src/tests/` contains integration-level chain tests and a transaction tester. -- Blocks: Cannot safely refactor any core logic. Regressions go undetected. - -### No Environment Validation -- Problem: Environment variables are parsed with `parseInt()` without validation. Missing vars produce `NaN` values that propagate silently through the system. -- Blocks: Misconfigured nodes can exhibit subtle, hard-to-diagnose failures. - -### No Migration Strategy -- Problem: TypeORM `synchronize: true` is used (intentionally per CLAUDE.md), but no production migration workflow exists. Schema changes auto-apply on startup. -- Blocks: Cannot safely deploy schema changes in production without risk of data loss. - -## Test Coverage Gaps - -### Consensus (Zero Coverage) -- What's not tested: Block creation, secretary election, validator phase transitions, block hash broadcasting, mempool merging. -- Files: `src/libs/consensus/v2/PoRBFT.ts`, `src/libs/consensus/v2/types/secretaryManager.ts` -- Risk: Consensus bugs can cause chain forks or halts. -- Priority: **Critical** - -### Transaction Validation (Zero Coverage) -- What's not tested: Signature verification, nonce checking (already bypassed), gas calculation, GCR operation derivation. -- Files: `src/libs/blockchain/routines/validateTransaction.ts`, `src/libs/blockchain/routines/calculateCurrentGas.ts` -- Risk: Invalid transactions can be accepted into blocks. -- Priority: **Critical** - -### Sync Routines (Zero Coverage) -- What's not tested: Block download, peer selection, conflict resolution, GCR state reconciliation. -- Files: `src/libs/blockchain/routines/Sync.ts` -- Risk: Sync failures can leave nodes in inconsistent state. -- Priority: **High** - -### Network/RPC Layer (Zero Coverage) -- What's not tested: Endpoint handler logic, authentication, peer management, broadcast manager. -- Files: `src/libs/network/endpointHandlers.ts`, `src/libs/network/server_rpc.ts`, `src/libs/network/manageAuth.ts` -- Risk: API regressions, authentication bypasses. -- Priority: **High** - -### Identity Routines (Zero Coverage) -- What's not tested: GCR identity creation, UD identity resolution, crosschain identity verification. -- Files: `src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts`, `src/libs/blockchain/gcr/gcr_routines/udIdentityManager.ts` -- Risk: Identity spoofing, incorrect crosschain address mapping. -- Priority: **High** - ---- - -*Concerns audit: 2026-01-28* diff --git a/.planning/codebase/CONVENTIONS.md b/.planning/codebase/CONVENTIONS.md index ede63eb88..96c758682 100644 --- a/.planning/codebase/CONVENTIONS.md +++ b/.planning/codebase/CONVENTIONS.md @@ -1,222 +1,59 @@ # Coding Conventions -**Analysis Date:** 2026-01-28 - -## Naming Patterns - -**Files:** -- Source files: `camelCase.ts` for modules (e.g., `sharedState.ts`, `mainLoop.ts`, `calibrateTime.ts`) -- Class files: `PascalCase.ts` matching the class name (e.g., `PeerConnection.ts`, `TLSServer.ts`, `RateLimiter.ts`) -- Entity files: `PascalCase.ts` matching the entity name (e.g., `Blocks.ts`, `Transactions.ts`) -- Adapter files: `camelCase.ts` with descriptive suffix (e.g., `consensusAdapter.ts`, `peerAdapter.ts`, `BaseAdapter.ts`) -- Test files: `*.test.ts` in separate `tests/` directory (e.g., `handlers.test.ts`, `dispatcher.test.ts`) -- Mock files: `demosdk-*.ts` prefix pattern in `tests/mocks/` (e.g., `demosdk-encryption.ts`, `demosdk-types.ts`) - -**Functions:** -- Use `camelCase` for all functions: `dispatchOmniMessage()`, `getSharedState()`, `encodeJsonRequest()` -- Prefix boolean-returning functions with verbs: `decodeTransaction()`, `verifySignature()` -- ESLint enforces `camelCase` for functions via `@typescript-eslint/naming-convention` - -**Variables:** -- Use `camelCase` for variables: `peerManager`, `mockedGetPeerlist`, `baseContext` -- Use `UPPER_CASE` for constants: `OVERRIDE_PORT`, `SERVER_PORT`, `MCP_ENABLED` -- Leading underscores allowed for unused parameters: `_unused` -- ESLint enforces `camelCase` or `UPPER_CASE` for variables - -**Types/Interfaces/Classes:** -- Use `PascalCase` for all type-like constructs: `HandlerContext`, `ParsedOmniMessage`, `ReceiveContext` -- Do NOT prefix interfaces with `I` (ESLint rule rejects `^I[A-Z]` pattern). Exception: some legacy types like `IPeer` exist in SDK mock types -- Classes use `PascalCase`: `Chain`, `PeerManager`, `OmniProtocolServer` -- Enums use `PascalCase`: `OmniOpcode` -- Type aliases use `PascalCase`: `DispatchOptions`, `ProposeBlockHashRequestPayload` - -## Code Style - -**Formatting:** -- Prettier with config at `.prettierrc` -- 4-space indentation (tabs: false) -- Double quotes (singleQuote: false) -- No semicolons (semi: false) -- Trailing commas in multiline (trailingComma: "always-multiline") -- Arrow parens: avoid (`x => x` not `(x) => x`) -- Bracket spacing: true -- Print width: 80 -- Line endings: LF - -**Linting:** -- ESLint v8 with `@typescript-eslint` plugin -- Config: `.eslintrc.cjs` (CommonJS format) +**Analysis Date:** 2026-02-22 + +## Formatting + +**Prettier** +- Config: `.prettierrc` +- Key settings: + - `tabWidth: 4` + - `semi: false` + - `singleQuote: false` + - `printWidth: 80` + - `trailingComma: "all"` + +## Linting + +**ESLint** +- Config: `.eslintrc.cjs` +- Parser: `@typescript-eslint/parser` - Extends: `eslint:recommended`, `plugin:@typescript-eslint/recommended` -- Key enforced rules: - - `quotes: ["error", "double"]` - Double quotes required - - `semi: ["error", "never"]` - No semicolons - - `comma-dangle: ["error", "always-multiline"]` - Trailing commas - - `no-console: ["warn"]` - Warn on console.log in src/ (except allowed files) - - `@typescript-eslint/naming-convention` - Enforced naming patterns -- Key disabled rules (permissive): - - `@typescript-eslint/no-explicit-any: off` - `any` is freely used - - `@typescript-eslint/no-unused-vars: off` - Unused vars allowed - - `@typescript-eslint/no-empty-function: off` - - `@typescript-eslint/ban-types: off` -- Run lint: `bun run lint` or `bun run lint:fix` - -## Import Organization - -**Order (observed pattern):** -1. Node.js built-ins (`fs`, `net`, `path`) -2. Third-party packages (`typeorm`, `dotenv`, `ethers`) -3. SDK imports (`@kynesyslabs/demosdk/*`) -4. Internal imports using `@/` alias or relative paths - -**Path Aliases:** -- `@/*` maps to `src/*` (configured in `tsconfig.json` `paths`) -- Use `@/` for cross-module imports: `import log from "@/utilities/logger"` -- Use relative imports for same-module siblings: `import { getHandler } from "./registry"` -- Both patterns coexist; `@/` preferred for deeper imports - -**Import style examples from codebase:** -```typescript -// Node built-ins -import net from "net" -import * as fs from "fs" - -// Third-party -import { Repository } from "typeorm" -import * as dotenv from "dotenv" - -// SDK -import { uint8ArrayToHex } from "@kynesyslabs/demosdk/encryption" -import type { TransactionContent } from "@kynesyslabs/demosdk/types" - -// Internal with alias -import log from "src/utilities/logger" -import Datasource from "src/model/datasource" - -// Internal relative -import { OmniOpcode } from "./opcodes" -import { getHandler } from "./registry" -``` - -**Note:** Some files use `src/` path directly instead of `@/` (e.g., `import log from "src/utilities/logger"`). Both `src/` and `@/` resolve to the same location. The `@/` alias is the preferred convention. - -## Error Handling - -**Patterns:** -- Custom error classes extend `Error`, set `this.name` in constructor -- Error hierarchy: `OmniProtocolError` (base with error code) -> specific errors like `UnknownOpcodeError`, `ConnectionError` -- Domain errors in `src/exceptions/index.ts`: `TimeoutError`, `AbortError`, `BlockNotFoundError`, etc. -- Protocol errors in `src/libs/omniprotocol/types/errors.ts` with numeric error codes (hex format: `0xf000`, `0xf001`) -- Try/catch with `log.error()` for DB operations (see `src/libs/blockchain/chain.ts`) -- Errors are typically thrown, not returned - -**Error class template:** -```typescript -export class CustomError extends Error { - constructor(message: string) { - super(message) - this.name = "CustomError" - } -} -``` +- Notable rules: + - Double quotes required: `quotes: ["error", "double"]` + - No semicolons: `semi: ["error", "never"]` + - `no-console` is `warn` globally, but overridden to `off` for many CLI/test/TUI paths and `src/index.ts` + - `@typescript-eslint/no-explicit-any` is `off` (so `any` is common) + - `no-unused-vars` is `off` + +## Naming + +**ESLint naming convention** +- Variables: `camelCase` or `UPPER_CASE`, underscores allowed +- Types/classes/interfaces: `PascalCase` +- Interfaces must NOT start with `I` (rule rejects `^I[A-Z]`) + +**Observed patterns** +- Files are typically `camelCase.ts` for modules and `PascalCase.ts` for entity/class-like files under `src/model/entities/` + +## Imports & Paths + +**TS path alias** +- `@/*` → `src/*` (`tsconfig.json`) +- Code uses both `@/` and `src/...` absolute-ish imports (e.g. `import log from "@/utilities/logger"` and `import log from "src/utilities/logger"`) + +**Module system** +- ESM repo (`package.json` `"type": "module"`) +- TS uses `"moduleResolution": "bundler"`; prefer explicit file extensions when needed in runtime JS (`.js` in some entity imports) ## Logging -**Framework:** Custom `CategorizedLogger` system at `src/utilities/tui/` - -**Legacy adapter:** `src/utilities/logger.ts` re-exports `LegacyLoggerAdapter` as default - -**Patterns:** -- Import: `import log from "src/utilities/logger"` or `import log from "@/utilities/logger"` -- Usage: `log.error("[TAG] message")` with bracketed tags like `[ChainDB]`, `[MAIN]`, `[PEER]` -- For new code, prefer `CategorizedLogger`: - ```typescript - import { CategorizedLogger } from "@/utilities/tui" - const logger = CategorizedLogger.getInstance() - logger.info("CORE", "Starting the node") - ``` -- ESLint warns on `console.log` in source files; use the logger instead -- `console.log` is allowed in CLI tools, tests, and `src/index.ts` (via ESLint overrides) - -## Comments - -**When to Comment:** -- `// REVIEW:` comments mark newly added features or significant code blocks for review -- `// NOTE` for important behavioral notes -- `// SECTION` for major code sections (e.g., `// SECTION Preparation methods`) -- `// TODO:` for known incomplete work (though they exist, prefer beads-mcp for tracking) -- `// FIXME` for known issues requiring attention -- `/* eslint-disable ... */` at file top to suppress specific rules - -**JSDoc/TSDoc:** -- Used on exported classes and utility wrappers (see `src/utilities/logger.ts`, `src/exceptions/index.ts`) -- Not consistently applied across all files -- When present, follows standard JSDoc format: - ```typescript - /** - * Thrown when a Waiter event times out - */ - export class TimeoutError extends Error { ... } - ``` - -## Module Design - -**Exports:** -- Default exports for singleton classes: `export default class Chain { ... }` -- Named exports for functions and types: `export async function dispatchOmniMessage(...)` -- Re-export barrel files: `src/utilities/logger.ts` re-exports from `./tui/LegacyLoggerAdapter` -- Mixed default + named exports in barrel files - -**Static classes:** -- Singletons use static methods on classes: `Chain.setup()`, `Chain.read()`, `Datasource.getInstance()` -- This is a prevalent pattern throughout the codebase - -**Barrel files:** -- `index.ts` files used for directory-level re-exports (e.g., `src/libs/omniprotocol/index.ts`) - -## TypeScript Strictness - -**Config highlights from `tsconfig.json`:** -- `strict: true` BUT with overrides: - - `strictNullChecks: false` - Null checks are NOT enforced - - `noImplicitAny: false` - Implicit any is allowed - - `strictBindCallApply: false` -- `target: ESNext`, `module: ESNext` -- `moduleResolution: bundler` -- Decorators enabled: `emitDecoratorMetadata: true`, `experimentalDecorators: true` (for TypeORM entities) -- `skipLibCheck: true` -- Type checking: `bun run type-check` (uses bun build --no-emit) or `bun run type-check-ts` (uses tsc --noEmit) - -## Entity Design (TypeORM) - -**Pattern for database entities (see `src/model/entities/Blocks.ts`):** -```typescript -@Entity("table_name") -@Index("idx_name", ["column"]) -export class EntityName { - @PrimaryGeneratedColumn({ type: "integer", name: "id" }) - id: number - - @Column("varchar", { name: "column_name" }) - columnName: string -} -``` -- Entity classes use `PascalCase` -- Table names use `snake_case` lowercase -- Column names in DB use `snake_case`, property names use `camelCase` or `snake_case` (inconsistent) - -## Git Conventions - -**Commit messages (observed from recent history):** -- Lowercase, imperative mood: `enable tlsnotary and monitoring`, `clean up`, `more logs` -- Sometimes prefixed with type: `fix: hang while waiting for next block`, `feat: block batch sync` -- Short, informal style - no strict conventional commits enforcement -- Merge commits: `merge #NNN - description` - -**Branch strategy:** -- `testnet` is the default/working branch -- `main` is the stable branch -- Feature branches merge to `testnet` - ---- - -*Convention analysis: 2026-01-28* +- Prefer categorized logger over raw `console.*` in core code: + - `src/utilities/logger` + - TUI components under `src/utilities/tui/` may still use console (ESLint override) + +## Configuration + +- Env loading: `dotenv.config()` in `src/index.ts` +- Example env files: `.env.example`, `env.example` + diff --git a/.planning/codebase/INTEGRATIONS.md b/.planning/codebase/INTEGRATIONS.md index da3b6608a..aca5f9970 100644 --- a/.planning/codebase/INTEGRATIONS.md +++ b/.planning/codebase/INTEGRATIONS.md @@ -1,295 +1,93 @@ # External Integrations -**Analysis Date:** 2026-01-28 +**Analysis Date:** 2026-02-22 -## APIs & External Services +## Environment-Configured Integrations (high signal) -**Web2 Identity Verification:** -- Twitter/X - Social identity verification - - SDK/Client: `axios` + custom implementation - - Auth: `TWITTER_USERNAME`, `TWITTER_PASSWORD`, `TWITTER_EMAIL` - - Files: `src/libs/identity/tools/twitter.ts`, `src/libs/abstraction/web2/twitter.ts` +**Social / Web2 identity** +- Twitter/X + - Env: `TWITTER_USERNAME`, `TWITTER_PASSWORD`, `TWITTER_EMAIL` (`.env.example`) + - Code: `src/libs/identity/tools/twitter.ts`, `src/libs/abstraction/web2/twitter.ts` +- Discord + - Env: `DISCORD_API_URL`, `DISCORD_BOT_TOKEN` (`.env.example`) + - Code: `src/libs/identity/tools/discord.ts`, `src/libs/abstraction/web2/discord.ts` +- GitHub + - Env: `GITHUB_TOKEN`, `GITHUB_CLIENT_ID`, `GITHUB_CLIENT_SECRET` (`.env.example`, `env.example`) + - SDK: `@octokit/core` (present in deps) + - Code: `src/libs/identity/tools/github.ts`, `src/libs/abstraction/web2/github.ts` -- Discord - Social identity verification - - SDK/Client: `axios` + custom implementation - - Auth: `DISCORD_API_URL`, `DISCORD_BOT_TOKEN` - - Files: `src/libs/identity/tools/discord.ts`, `src/libs/abstraction/web2/discord.ts` +**Bridge aggregation / cross-chain** +- Rubic + - Env: `RUBIC_API_REFERRER_ADDRESS`, `RUBIC_API_INTEGRATOR_ADDRESS` (`env.example`) + - Code: `src/features/bridges/rubic.ts`, `src/features/bridges/bridgeUtils.ts`, `src/libs/network/manageBridge.ts` -- GitHub - Social identity verification & attestation - - SDK/Client: `@octokit/core` (Octokit) - - Auth: `GITHUB_TOKEN`, `GITHUB_CLIENT_ID`, `GITHUB_CLIENT_SECRET` - - Files: `src/libs/identity/tools/github.ts` (axios), `src/libs/abstraction/web2/github.ts` (Octokit) +**Third-party API providers** +- RapidAPI + - Env: `RAPID_API_KEY`, `RAPID_API_HOST` (`env.example`) + - Code: search under `src/libs/identity/tools/` and `src/libs/abstraction/web2/` for consumers -- Nomis - Cross-chain reputation scoring - - SDK/Client: `axios` - - Files: `src/libs/identity/tools/nomis.ts` +**Chain data providers** +- Etherscan + - Env: `ETHERSCAN_API_KEY` (`env.example`) +- Helius (Solana RPC / API) + - Env: `HELIUS_API_KEY` (`env.example`) -**Domain Name Resolution:** -- Unstoppable Domains - Web3 domain resolution - - SDK/Client: `@unstoppabledomains/resolution` (listed in deps), `ethers` (ENS-style resolution) - - Files: `src/libs/blockchain/gcr/gcr_routines/udIdentityManager.ts`, `src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts` +## Datastores -**Cross-Chain Bridge Aggregation:** -- Rubic SDK - DEX/bridge aggregation - - SDK/Client: `rubic-sdk` ^5.57.4 - - Files: `src/features/bridges/rubic.ts`, `src/features/bridges/bridgeUtils.ts`, `src/libs/network/manageBridge.ts` +**PostgreSQL (primary)** +- TypeORM DataSource: `src/model/datasource.ts` +- Env (read at runtime): `PG_HOST`, `PG_PORT`, `PG_USER`, `PG_PASSWORD`, `PG_DATABASE` +- Local bootstrap scripts/dirs: `postgres/`, `start_db`, `postgres_5332/` (if present for local runs) -## Blockchain Networks +**SQLite (secondary / tooling)** +- `ormconfig.json` points at `./data/chain.db` -**EVM Chains:** -- Ethereum / EVM-compatible chains - - SDK/Client: `ethers` v6 (^6.16.0) - - Usage: ENS/UD resolution, identity management, bridge operations - - Files: `src/libs/blockchain/gcr/gcr_routines/udIdentityManager.ts`, `src/features/multichain/chainwares/evmwares/` +## Node-to-Node / Protocol Integrations -- Web3.js integration for Rubic bridge - - SDK/Client: `web3` ^4.16.0 - - Files: `src/features/bridges/rubic.ts` +**HTTP RPC** +- Bun-based RPC server: `src/libs/network/server_rpc.ts` + `src/libs/network/bunServer.ts` -**Solana:** -- Solana blockchain - - SDK/Client: `@solana/web3.js` ^1.98.4 - - Anchor: `@coral-xyz/anchor` ^0.32.1 (for program interactions) - - Metaplex: `@metaplex-foundation/js` ^0.20.1 (NFT operations) - - Usage: UD resolution, bridge operations, cross-chain execution - - Files: `src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts`, `src/features/bridges/rubic.ts` +**OmniProtocol** +- TCP peer protocol and server lifecycle: `src/libs/omniprotocol/` +- Env: `OMNI_ENABLED`, `OMNI_PORT`, TLS options (`.env.example`) -**Aptos:** -- Aptos blockchain - - SDK/Client: `@aptos-labs/ts-sdk` ^5.2.0 - - Usage: Cross-chain payments, contract read/write, balance queries - - Files: `src/features/multichain/chainwares/aptoswares/`, `src/features/multichain/routines/executors/aptos_*.ts` +**Instant Messaging / Signaling** +- Signaling server: `src/features/InstantMessagingProtocol/signalingServer/` +- Env: `SIGNALING_SERVER_PORT` (`env.example`) -## Demos Network SDK (@kynesyslabs/demosdk) +## MCP (Model Context Protocol) -**Package:** `@kynesyslabs/demosdk` ^2.8.16 +**Feature** +- MCP server implementation: `src/features/mcp/MCPServer.ts` +- Entry: `src/features/mcp/index.ts` -**Submodule Imports Used:** -- `@kynesyslabs/demosdk/types` - Core type definitions (`RPCRequest`, `RPCResponse`, `Transaction`, `Bundle`, `BrowserRequest`, `SigningAlgorithm`, `ValidityData`, `Tweet`, `Web2GCRData`, etc.) -- `@kynesyslabs/demosdk/encryption` - Cryptographic utilities (`ucrypto`, `hexToUint8Array`, `uint8ArrayToHex`) -- `@kynesyslabs/demosdk/abstraction` - Web2 abstraction layer types (`Web2CoreTargetIdentityPayload`) -- `@kynesyslabs/demosdk` - Bridge module (`bridge`) +**Enablement** +- Env: `MCP_ENABLED`, `MCP_SERVER_PORT` (`env.example`) -**Usage Scope:** -- Pervasive across the entire codebase (30+ import sites) -- Types used in: entities, network handlers, communications, blockchain operations -- Encryption used in: peer communication, identity, consensus -- SDK source available at `../sdks/` for reference when behavior is unclear +## Metrics / Monitoring -## Communication Protocols +**Node metrics endpoint** +- Env: `METRICS_ENABLED`, `METRICS_PORT`, `METRICS_HOST` (`.env.example`) +- Code: `src/features/metrics/` -**HTTP/REST RPC:** -- Custom `BunServer` class provides the primary RPC interface - - Files: `src/libs/network/bunServer.ts`, `src/libs/network/server_rpc.ts` - - Default port: 53550 (env: `SERVER_PORT` or `RPC_PORT`) - - Handles all RPC methods: nodeCall, auth, consensus, GCR, bridges, execution - - Rate limiting middleware: `src/libs/network/middleware/rateLimiter.ts` - - Security module: `src/libs/network/securityModule.ts` - - OpenAPI spec: `src/libs/network/openApiSpec.ts`, `src/libs/network/openapi-spec.json` +**Monitoring stack** +- Docker Compose: `monitoring/` -**WebSocket:** -- Socket.IO for P2P peer communication - - Server: `socket.io` ^4.7.1 - - Client: `socket.io-client` ^4.7.2 - - Files: `src/client/libs/client_class.ts`, `src/client/libs/network.ts`, `src/libs/peer/` - - Used for peer discovery, message routing, real-time communication +## TLSNotary -- WebSocket Signaling Server (Instant Messaging Protocol) - - Files: `src/features/InstantMessagingProtocol/signalingServer/signalingServer.ts` - - Default port: 3005 (env: `SIGNALING_SERVER_PORT`) - - Features: peer registration, discovery, direct message routing, public key exchange +**Enablement** +- Env: `TLSNOTARY_ENABLED`, `TLSNOTARY_PORT`, `TLSNOTARY_SIGNING_KEY`, proxy limits (`.env.example`) +- Code: `src/features/tlsnotary/` and `tlsnotary/` (external tooling) -**OmniProtocol (Custom TCP Protocol):** -- Binary TCP protocol for high-performance node communication - - Files: `src/libs/omniprotocol/` (auth, config, integration, protocol, ratelimit, serialization, server, tls, transport, types) - - Default port: SERVER_PORT + 1 (env: `OMNI_PORT`) - - Modes: `HTTP_ONLY`, `OMNI_PREFERRED`, `OMNI_ONLY` - - TLS support: configurable via `OMNI_TLS_ENABLED`, supports self-signed and CA certs - - Rate limiting built-in per IP and per identity - - Integration bridge: `src/libs/omniprotocol/integration/peerAdapter.ts` +## Time / Networking Utilities -**MCP (Model Context Protocol):** -- AI agent integration server - - Files: `src/features/mcp/MCPServer.ts`, `src/features/mcp/tools/` - - SDK: `@modelcontextprotocol/sdk` ^1.13.3 - - Transports: stdio and SSE (Express-based SSE server) - - Default port: 3001 (env: `MCP_SERVER_PORT`) - - Toggleable: `MCP_ENABLED` env var +- NTP client: `ntp-client` used by `src/libs/utils/calibrateTime.ts` -## Data Storage +## Core SDK dependency (@kynesyslabs/demosdk) -**Databases:** -- PostgreSQL (primary persistent storage) - - Connection: `PG_HOST`, `PG_PORT` (default 5332), `PG_USER` (default "demosuser"), `PG_PASSWORD`, `PG_DATABASE` (default "demos") - - Client: TypeORM ^0.3.17 with `pg` ^8.12.0 driver - - Config: `src/model/datasource.ts` (Singleton pattern) - - Synchronize: `true` (auto-schema sync, intentional per project conventions) - - Migrations: `src/migrations/` (TypeORM migrations via `typeorm-ts-node-esm`) - - Entities: - - `src/model/entities/Blocks.ts` - Block storage - - `src/model/entities/Transactions.ts` - Transaction records - - `src/model/entities/Mempool.ts` - Mempool transactions - - `src/model/entities/Consensus.ts` - Consensus state - - `src/model/entities/Validators.ts` - Validator registry - - `src/model/entities/PgpKeyServer.ts` - PGP key storage - - `src/model/entities/GCR/GlobalChangeRegistry.ts` - GCR v1 - - `src/model/entities/GCR/GCRTracker.ts` - GCR tracking - - `src/model/entities/GCRv2/GCRHashes.ts` - GCR v2 hashes - - `src/model/entities/GCRv2/GCRSubnetsTxs.ts` - GCR v2 subnet transactions - - `src/model/entities/GCRv2/GCR_Main.ts` - GCR v2 main table - - `src/model/entities/GCRv2/GCR_TLSNotary.ts` - GCR v2 TLS notary attestations +- Version: `^2.10.2` (from `package.json`) +- Used throughout for types and crypto helpers: + - `@kynesyslabs/demosdk/types` + - `@kynesyslabs/demosdk/encryption` + - `@kynesyslabs/demosdk` (bridge-related types/helpers) -- SQLite (secondary, ActivityPub federation) - - Files: `src/features/activitypub/fedistore.ts` - - Package: `sqlite3` ^5.1.6 - - DB file: `src/features/activitypub/db.sqlite3` - -**File Storage:** -- Local filesystem for identity files (`.demos_identity`) -- Local filesystem for peer lists (`demos_peerlist.json`) -- Local `data/` directory for chain data (`data/chain.db`) - -**Caching:** -- None (no Redis/Memcached detected) -- In-memory state via `SharedState` singleton (`src/utilities/sharedState.ts`) - -## Authentication & Identity - -**Node Identity:** -- Ed25519 key pairs stored in `.demos_identity` file -- Key generation: `src/libs/utils/keyMaker.ts` -- Identity management: `src/libs/identity/identity.ts` -- Signing algorithms: Ed25519 (primary), with post-quantum Dilithium available (`superdilithium`) -- RSA support via `node-forge` (`src/libs/crypto/rsa.ts`) - -**Peer Authentication:** -- Custom auth handshake between peers (`src/libs/network/manageAuth.ts`, `src/libs/network/manageHelloPeer.ts`) -- Public key exchange during peer discovery -- Signed object verification for RPC requests - -**Web2 Identity Abstraction:** -- Twitter, Discord, GitHub verification - - Files: `src/libs/abstraction/web2/` (twitter.ts, discord.ts, github.ts, parsers.ts) - - Web2 proxy request handling: `src/libs/network/routines/transactions/handleWeb2ProxyRequest.ts` - -**Browser Login:** -- Browser-based login flow: `src/libs/network/manageLogin.ts` - -## Monitoring & Observability - -**Prometheus Metrics:** -- Package: `prom-client` ^15.1.3 -- Server: `src/features/metrics/MetricsServer.ts` (Bun HTTP server) -- Service: `src/features/metrics/MetricsService.ts` -- Collector: `src/features/metrics/MetricsCollector.ts` -- Custom collectors: `src/features/metrics/collectors/` -- Endpoint: `http://localhost:9090/metrics` (configurable via `METRICS_PORT`) -- Toggle: `METRICS_ENABLED` env var (default: true) - -**TLSNotary HTTPS Attestation:** -- MPC-TLS attestation for verifiable HTTPS proofs -- Service: `src/features/tlsnotary/TLSNotaryService.ts` -- Proxy management: `src/features/tlsnotary/proxyManager.ts` -- Port allocation: `src/features/tlsnotary/portAllocator.ts` -- Token management: `src/features/tlsnotary/tokenManager.ts` -- Routes: `src/features/tlsnotary/routes.ts` -- Default port: 7047 (env: `TLSNOTARY_PORT`) -- Toggle: `TLSNOTARY_ENABLED` env var (default: false) - -**Logging:** -- Custom TUI-integrated categorized logging system - - Files: `src/utilities/logger.ts` (re-export), `src/utilities/tui/` (implementation) - - Legacy adapter: `src/utilities/tui/LegacyLoggerAdapter.ts` - - Categories: CORE, PEER, MAIN, etc. (auto-detected from tags) - - File logging and TUI display - -**Diagnostics:** -- System diagnostics: `src/utilities/Diagnostic.ts` -- Checks: CPU, RAM, disk space, network speed -- Configurable thresholds via env vars (`MIN_CPU_SPEED`, `MIN_RAM`, `MIN_DISK_SPACE`, etc.) - -**NTP Time Synchronization:** -- Package: `ntp-client` ^0.5.3 -- Files: `src/libs/utils/calibrateTime.ts` -- Used for network-wide timestamp consistency - -## CI/CD & Deployment - -**Hosting:** -- Self-hosted node software (not a SaaS deployment) - -**CI Pipeline:** -- Not detected in repository (no `.github/workflows/` or similar CI configs visible) - -**Scripts:** -- Start: `bun run start` (tsx) or `bun run start:bun` (native bun) -- Lint: `bun run lint` / `bun run lint:fix` -- Type check: `bun run type-check` -- Migrations: `bun run migration:run` / `bun run migration:revert` - -## Environment Configuration - -**Required env vars (for basic operation):** -- PostgreSQL: `PG_HOST`, `PG_PORT`, `PG_USER`, `PG_PASSWORD`, `PG_DATABASE` (all have defaults) -- Network: `SERVER_PORT` or `RPC_PORT` (default 53550) - -**Optional feature env vars:** -- `EXPOSED_URL` - Public-facing URL -- `MCP_ENABLED` / `MCP_SERVER_PORT` - AI agent MCP server -- `OMNI_ENABLED` / `OMNI_PORT` / `OMNI_MODE` - OmniProtocol TCP -- `OMNI_TLS_ENABLED` / `OMNI_CERT_PATH` / `OMNI_KEY_PATH` - TLS for OmniProtocol -- `METRICS_ENABLED` / `METRICS_PORT` - Prometheus metrics -- `TLSNOTARY_ENABLED` / `TLSNOTARY_PORT` / `TLSNOTARY_SIGNING_KEY` - TLS notary -- `SIGNALING_SERVER_PORT` - WebSocket signaling -- `PROD` - Production mode flag -- `SHARD_SIZE`, `MAIN_LOOP_SLEEP_TIME`, `CONSENSUS_TIME` - Tuning -- `SUDO_PUBKEY` - Admin public key -- `WHITELISTED_IPS` - Comma-separated IP whitelist - -**Secrets/credentials:** -- `TWITTER_USERNAME`, `TWITTER_PASSWORD`, `TWITTER_EMAIL` -- `GITHUB_TOKEN`, `GITHUB_CLIENT_ID`, `GITHUB_CLIENT_SECRET` -- `DISCORD_BOT_TOKEN`, `DISCORD_API_URL` -- `TLSNOTARY_SIGNING_KEY` (secp256k1 private key) - -**Secrets location:** -- `.env` file (local, gitignored) -- `.env.example` provides template - -## Webhooks & Callbacks - -**Incoming:** -- RPC endpoint handles all inbound requests (`src/libs/network/server_rpc.ts`) -- Protected endpoints: `rate-limit/unblock`, `getCampaignData`, `awardPoints` - -**Outgoing:** -- Peer-to-peer broadcasts via `src/libs/communications/broadcastManager.ts` -- HTTP/Socket.IO/OmniProtocol to peers -- Axios calls to external identity APIs (Twitter, Discord, GitHub, Nomis) -- Blockchain RPC calls to EVM, Solana, Aptos nodes - -## Special Features - -**Fully Homomorphic Encryption (FHE):** -- Library: `node-seal` ^5.1.3 (Microsoft SEAL) -- Files: `src/features/fhe/FHE.ts` - -**Zero-Knowledge Proofs:** -- Directory: `src/features/zk/iZKP/` - -**ActivityPub Federation:** -- Files: `src/features/activitypub/` (fediverse.ts, fedistore.ts, feditypes.ts) -- Local SQLite database for federation state - -**Incentive/Points System:** -- Files: `src/features/incentive/PointSystem.ts`, `src/features/incentive/referrals.ts` - -**Web2 Proxy:** -- Files: `src/features/web2/` (proxy/, dahr/, handleWeb2.ts, sanitizeWeb2Request.ts, validator.ts) - -**Logic Execution:** -- Files: `src/features/logicexecution/` (planned/stub, contains TODO.md) - ---- - -*Integration audit: 2026-01-28* diff --git a/.planning/codebase/STACK.md b/.planning/codebase/STACK.md index 3a578229f..f14708f75 100644 --- a/.planning/codebase/STACK.md +++ b/.planning/codebase/STACK.md @@ -1,148 +1,105 @@ # Technology Stack -**Analysis Date:** 2026-01-28 +**Analysis Date:** 2026-02-22 ## Languages -**Primary:** -- TypeScript ^5.9.3 - All source code (`src/`) - -**Secondary:** -- None detected - Pure TypeScript codebase - -## Runtime - -**Environment:** -- Bun (primary runtime, used for server via `Bun.serve()`) -- Node.js (fallback via `tsx` for `start` scripts) -- ESM modules (`"type": "module"` in `package.json`) - -**Package Manager:** -- Bun (preferred per project conventions) -- Lockfile: `bun.lockb` expected (Bun binary lockfile) - -## Frameworks - -**Core:** -- Custom `BunServer` class (`src/libs/network/bunServer.ts`) - Primary HTTP server built on Bun's native `Server` -- Express ^4.19.2 - Used for MCP server SSE transport (`src/features/mcp/MCPServer.ts`) -- Fastify ^4.28.1 - Available but secondary (with `@fastify/cors`, `@fastify/swagger`, `@fastify/swagger-ui`) -- Socket.IO ^4.7.1 / socket.io-client ^4.7.2 - P2P peer communication (`src/client/libs/`, `src/libs/peer/`) - -**Testing:** -- Jest ^29.7.0 - Test runner -- ts-jest ^29.3.2 - TypeScript Jest transformer -- Test command: `bun run test:chains` (matches `tests/**/*.ts`) - -**Build/Dev:** -- tsx ^3.12.8 - TypeScript execution (start scripts) -- ts-node ^10.9.1 / ts-node-dev ^2.0.0 - Dev mode -- tsconfig-paths ^4.2.0 - Path alias resolution at runtime -- ESLint ^8.57.1 + @typescript-eslint - Linting -- Prettier ^2.8.0 - Formatting -- Knip ^5.74.0 - Dead code detection - -## Key Dependencies - -**Critical:** -- `@kynesyslabs/demosdk` ^2.8.16 - Demos Network SDK (types, encryption, bridge, abstraction modules). Used pervasively across the codebase for types (`RPCRequest`, `RPCResponse`, `Transaction`, `Bundle`), encryption (`ucrypto`, `hexToUint8Array`, `uint8ArrayToHex`), and bridge functionality. -- TypeORM ^0.3.17 - Database ORM for PostgreSQL (`src/model/datasource.ts`) -- `pg` ^8.12.0 - PostgreSQL driver - -**Blockchain Integrations:** -- `ethers` ^6.16.0 - EVM chain interactions, ENS resolution (`src/libs/blockchain/gcr/gcr_routines/udIdentityManager.ts`) -- `web3` ^4.16.0 - Used in bridge/Rubic integration (`src/features/bridges/rubic.ts`) -- `@solana/web3.js` ^1.98.4 - Solana interactions (`src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts`, `src/features/bridges/rubic.ts`) -- `@coral-xyz/anchor` ^0.32.1 - Solana Anchor framework for program interactions -- `@aptos-labs/ts-sdk` ^5.2.0 - Aptos chain interactions (`src/features/multichain/chainwares/aptoswares/`, `src/features/multichain/routines/executors/`) -- `rubic-sdk` ^5.57.4 - Cross-chain bridge aggregation (`src/features/bridges/`) - -**Cryptography:** -- `node-forge` ^1.3.3 - RSA, PKI operations, TLS (`src/libs/crypto/`, `src/libs/communications/`) -- `@noble/ed25519` ^3.0.0 - Ed25519 signatures -- `@noble/hashes` ^2.0.1 - Hashing primitives -- `tweetnacl` ^1.0.3 - NaCl cryptography -- `superdilithium` ^2.0.6 - Post-quantum signatures (listed as dependency) -- `rijndael-js` ^2.0.0 - AES encryption -- `@scure/bip39` ^2.0.1 / `bip39` ^3.1.0 - Mnemonic phrase generation -- `bs58` ^6.0.0 - Base58 encoding -- `@cosmjs/encoding` ^0.33.1 - Cosmos-compatible encoding - -**Privacy/Advanced Crypto:** -- `node-seal` ^5.1.3 - Fully Homomorphic Encryption (SEAL library) (`src/features/fhe/FHE.ts`) - -**Infrastructure:** -- `@modelcontextprotocol/sdk` ^1.13.3 - MCP server for AI agent integration (`src/features/mcp/`) -- `prom-client` ^15.1.3 - Prometheus metrics client (`src/features/metrics/`) -- `axios` ^1.6.5 - HTTP client (used in 9+ files for external API calls) -- `dotenv` ^16.4.5 - Environment configuration -- `ntp-client` ^0.5.3 - Network time synchronization (`src/libs/utils/calibrateTime.ts`) -- `helmet` ^8.1.0 - HTTP security headers (MCP server) -- `http-proxy` ^1.18.1 - HTTP proxying -- `zod` ^3.25.67 - Schema validation (MCP tool input schemas) - -**Utility:** -- `lodash` ^4.17.21 - General utilities -- `terminal-kit` ^3.1.1 - TUI (Terminal UI) rendering -- `cli-progress` ^3.12.0 - CLI progress bars -- `crc` ^4.3.2 - CRC checksums -- `seedrandom` ^3.0.5 / `alea` ^1.0.1 - Deterministic random number generation -- `object-sizeof` ^2.6.3 - Object size calculation -- `node-disk-info` ^1.3.0 - Disk diagnostics -- `big-integer` ^1.6.52 - Arbitrary precision integers -- `reflect-metadata` ^0.1.13 - TypeORM decorator support - -**Identity/Web3:** -- `@unstoppabledomains/resolution` ^9.3.3 - Unstoppable Domains resolution -- `@octokit/core` ^6.1.5 - GitHub API client (`src/libs/abstraction/web2/github.ts`) -- `@metaplex-foundation/js` ^0.20.1 - Solana NFT/Metaplex - -## Configuration - -**Environment:** -- `.env` file loaded via `dotenv` at startup (`src/index.ts`) -- `.env.example` provides template with all available vars -- Key env categories: - - **Database**: `PG_HOST`, `PG_PORT`, `PG_USER`, `PG_PASSWORD`, `PG_DATABASE` - - **Network**: `RPC_PORT`, `SERVER_PORT`, `EXPOSED_URL`, `SIGNALING_SERVER_PORT` - - **Features**: `OMNI_ENABLED`, `MCP_ENABLED`, `METRICS_ENABLED`, `TLSNOTARY_ENABLED` - - **Identity**: `TWITTER_USERNAME/PASSWORD/EMAIL`, `GITHUB_TOKEN`, `DISCORD_BOT_TOKEN` - - **Tuning**: `SHARD_SIZE`, `MAIN_LOOP_SLEEP_TIME`, `CONSENSUS_TIME`, `MAX_MESSAGE_SIZE` - -**TypeScript:** -- Config: `tsconfig.json` -- Target: ESNext -- Module: ESNext with bundler resolution -- Path alias: `@/*` maps to `src/*` -- Decorators enabled (for TypeORM entities) -- `strictNullChecks: false`, `noImplicitAny: false` (relaxed strict mode) - -**Build:** -- No separate build step for production; runs directly via `tsx` or `bun` -- Type checking: `bun run type-check` (uses `bun build --no-emit`) or `bun run type-check-ts` (uses `tsc --noEmit`) - -**Linting:** -- `.eslintrc.cjs` - ESLint config with TypeScript plugin -- Double quotes, no semicolons -- Naming conventions enforced: camelCase for variables/functions, PascalCase for types/classes -- `no-console: warn` in src/ (exceptions for CLI tools, tests, entry point) - -**Formatting:** -- `.prettierrc` - 4-space indent, double quotes, no semicolons, trailing commas, LF line endings, 80-char width - -## Platform Requirements - -**Development:** -- Bun runtime (cross-platform: Linux, macOS, Windows/WSL2) -- PostgreSQL database (default port 5332, configurable) -- Node.js types available for compatibility - -**Production:** -- Bun runtime -- PostgreSQL instance -- Network ports: RPC (default 53550), Signaling (3005), MCP (3001), Metrics (9090), OmniProtocol (RPC+1), TLSNotary (7047) -- Optional TLS certificates for OmniProtocol - ---- - -*Stack analysis: 2026-01-28* +**Primary** +- TypeScript (`devDependencies.typescript`: `^5.9.3`) — most code under `src/` + +**Other** +- Shell scripts: `run`, `start_db`, `reset-node`, `install-deps.sh` +- Docker Compose/YAML: `devnet/`, `monitoring/` + +## Runtime & Packaging + +**Runtime** +- Bun (first-class): `src/libs/network/bunServer.ts` uses `Bun.serve()` +- Node.js is still used for some workflows/scripts (e.g. `tsx`, `ts-node-dev`) + +**Module system** +- ESM: `package.json` has `"type": "module"` +- TS module resolution: `tsconfig.json` sets `"moduleResolution": "bundler"` +- Path alias: `tsconfig.json` maps `@/*` → `src/*` + +**Package manager** +- Bun is the expected package manager (`bun install`) +- Lockfile present: `bun.lock` + +## Web / Networking Frameworks + +**HTTP RPC** +- Custom Bun HTTP server/router: `src/libs/network/bunServer.ts` +- RPC request processing: `src/libs/network/server_rpc.ts` + +**Fastify (auxiliary)** +- Used for OpenAPI + method listing types/handlers: + - `src/libs/network/openApiSpec.ts` (`@fastify/swagger`, `@fastify/swagger-ui`) + - `src/libs/network/methodListing.ts` + +**Express (feature module)** +- Used by MCP server implementation: `src/features/mcp/MCPServer.ts` + +**Real-time / P2P** +- Socket.IO present (`socket.io`, `socket.io-client`) and used under `src/libs/peer/` and related networking libs (search for usage when modifying peer comms) +- Custom TCP protocol: OmniProtocol under `src/libs/omniprotocol/` + +## Data / Storage + +**ORM** +- TypeORM (`typeorm`: `^0.3.17`) + +**Primary DB** +- PostgreSQL driver: `pg` (`^8.12.0`) +- DataSource config: `src/model/datasource.ts` (reads `PG_HOST`, `PG_PORT`, `PG_USER`, `PG_PASSWORD`, `PG_DATABASE`) + +**Secondary / legacy / tooling** +- SQLite config exists: `ormconfig.json` points at `./data/chain.db` +- `sqlite3` dependency present (`^5.1.6`) + +## Blockchain / Multichain + +**Core SDK** +- `@kynesyslabs/demosdk` (`^2.10.2`) — types + crypto helpers used broadly: + - Types: `@kynesyslabs/demosdk/types` (e.g. `RPCRequest`, `RPCResponse`) + - Crypto helpers: `@kynesyslabs/demosdk/encryption` (e.g. `uint8ArrayToHex`) + +**EVM** +- `ethers` (`^6.16.0`) (assume v6 semantics) — EVM interactions / resolution routines +- `web3` (`^4.16.0`) — used in bridge integrations + +**Solana** +- `@solana/web3.js` (present in deps) — Solana interactions +- `@coral-xyz/anchor` (present in deps) — Anchor program interaction + +**Aptos** +- `@aptos-labs/ts-sdk` (present in deps) — Aptos interactions + +## Cryptography + +**General** +- `node-forge`, `tweetnacl`, `@noble/*`, `bs58`, mnemonic libs (`bip39`, `@scure/bip39`) + +**Advanced** +- `node-seal` (FHE): `src/features/fhe/FHE.ts` + +## Observability & Ops + +**Metrics** +- Prometheus client: `prom-client` (feature: `src/features/metrics/`) +- Monitoring stack configs: `monitoring/` (Grafana + Prometheus) + +**Logging / TUI** +- Custom categorized logger + TUI: `src/utilities/logger`, `src/utilities/tui/` + +## Tooling / Quality + +**Lint / format** +- ESLint: `.eslintrc.cjs` (`eslint`: `^8.57.1`) +- Prettier: `.prettierrc` (`prettier`: `^2.8.0`) +- Dead code: `knip.json` (`knip` script in `package.json`) + +**Testing** +- Jest: `jest.config.ts` + `bun run test:chains` +- TypeScript transform: `ts-jest` + diff --git a/.planning/codebase/STRUCTURE.md b/.planning/codebase/STRUCTURE.md index b05e87a76..fe9dc627c 100644 --- a/.planning/codebase/STRUCTURE.md +++ b/.planning/codebase/STRUCTURE.md @@ -1,388 +1,55 @@ # Codebase Structure -**Analysis Date:** 2026-01-28 +**Analysis Date:** 2026-02-22 -## Directory Layout +## Top-level Layout (high signal) ``` -node/ -├── src/ # All application source code -│ ├── index.ts # Main entry point (node bootstrap + lifecycle) -│ ├── benchmark.ts # Performance benchmarking utility -│ ├── client/ # SDK client utilities -│ ├── exceptions/ # Custom error types -│ ├── features/ # Optional/pluggable feature modules -│ ├── libs/ # Core library modules (blockchain, consensus, networking) -│ ├── migrations/ # TypeORM database migrations -│ ├── model/ # Database entities and datasource config -│ ├── ssl/ # SSL certificate utilities -│ ├── tests/ # Unit tests (inside src) -│ ├── types/ # Type declarations and augmentations -│ └── utilities/ # Cross-cutting utilities (logger, shared state, TUI) -├── tests/ # Integration/chain tests -├── devnet/ # Docker-based local devnet setup -├── data/ # Runtime data (genesis config, chain DB) -├── fixtures/ # Test fixtures and sample data -├── monitoring/ # Monitoring configuration (Grafana, Prometheus) -├── scripts/ # Shell scripts (ceremony contribution) -├── architecture/ # Architecture documentation and diagrams -├── documentation/ # Project documentation -├── local_tests/ # Local testing scripts (46 files) -├── res/ # Resources (genesis files, configs) -├── specs/ # Protocol specifications -├── libs/ # External/vendored libraries -├── tlsnotary/ # TLSNotary external tooling -├── .env # Environment configuration (not committed) -├── .env.example # Environment template -├── package.json # Dependencies and scripts -├── tsconfig.json # TypeScript configuration -├── jest.config.ts # Jest test configuration -├── ormconfig.json # TypeORM database connection config -├── run # Main run script (bash, 34KB) -├── start_db # Database startup script (bash) -├── reset-node # Node reset script (bash) -├── node-doctor # Diagnostic/health check script (bash) -├── install-deps.sh # Dependency installation script -└── demos_peerlist.json # Known peers configuration +. +├── src/ # Node implementation (TypeScript) +├── tests/ # Jest tests (integration-ish) +├── fixtures/ # JSON fixtures used by tests +├── devnet/ # Local multi-node devnet (Docker) +├── monitoring/ # Prometheus + Grafana stack +├── docs/ # Project documentation +├── documentation/ # Additional docs (legacy / generated) +├── specs/ # Protocol specs +├── architecture/ # Architecture docs/diagrams +├── data/ # Runtime data (may include chain dbs) +├── postgres/ # DB assets/scripts (local) +├── tlsnotary/ # TLSNotary tooling (external) +├── .planning/ # GSD planning + codebase maps +│ └── codebase/ # Codebase mapping docs (this folder) +├── package.json # Dependencies + scripts (bun) +├── bun.lock # Bun lockfile +├── tsconfig.json # TypeScript config + path aliases +├── jest.config.ts # Jest config (ts-jest) +├── ormconfig.json # TypeORM config (sqlite; legacy/tooling) +└── run # Main launcher script (bash) ``` -## Directory Purposes +## `src/` (primary code) -**`src/`:** -- Purpose: All application source code -- Contains: TypeScript files organized by domain -- Key files: `index.ts` (entry point, ~925 lines) - -**`src/libs/`:** -- Purpose: Core domain libraries forming the backbone of the node -- Contains: 12 subdirectories, each a domain module -- Key subdirectories: - - `blockchain/` - Chain, Block, Transaction, Mempool, GCR, sync routines - - `consensus/v2/` - PoRBFTv2 consensus algorithm and routines - - `network/` - RPC server, endpoint handlers, method managers, DTR, middleware - - `peer/` - Peer model, PeerManager singleton, peer routines - - `omniprotocol/` - Binary TCP protocol (server, transport, serialization, TLS, auth, rate limiting) - - `communications/` - Broadcast manager for peer messaging - - `crypto/` - Hashing, signing, encryption utilities - - `identity/` - Node identity and social identity providers - - `l2ps/` - Layer 2 parallel subnet support - - `utils/` - Time calibration, key generation, stdlib helpers - - `assets/` - FungibleToken.ts, NonFungibleToken.ts - - `abstraction/` - Web2 platform abstractions (Discord, GitHub, Twitter) - -**`src/features/`:** -- Purpose: Optional feature modules that extend the core node -- Contains: 13 feature directories, each self-contained -- Key features: - - `mcp/` - Model Context Protocol server with tools - - `tlsnotary/` - TLS attestation service (proxy, tokens, FFI) - - `metrics/` - Prometheus metrics server and collectors - - `multichain/` - Cross-chain dispatching (EVM, Aptos) - - `web2/` - HTTP proxy/DAHR for web2 APIs - - `bridges/` - Cross-chain bridge (Rubic SDK) - - `InstantMessagingProtocol/` - WebSocket signaling server - - `activitypub/` - Fediverse integration - - `fhe/` - Fully Homomorphic Encryption - - `zk/` - Zero-knowledge proofs (iZKP) - - `incentive/` - Point system and referrals - - `contracts/` - Smart contract support (phases doc only) - - `logicexecution/` - Logic execution (TODO only) - -**`src/model/`:** -- Purpose: Database schema (TypeORM entities) and datasource configuration -- Contains: `datasource.ts` (singleton PostgreSQL connection), `entities/` subdirectory -- Key entities: - - `entities/Blocks.ts` - Block storage - - `entities/Transactions.ts` - Transaction storage - - `entities/Mempool.ts` - Pending transaction pool - - `entities/Consensus.ts` - Consensus state - - `entities/Validators.ts` - Validator registry - - `entities/GCR/GlobalChangeRegistry.ts` - GCR v1 - - `entities/GCR/GCRTracker.ts` - GCR change tracking - - `entities/GCRv2/GCR_Main.ts` - GCR v2 main table - - `entities/GCRv2/GCRHashes.ts` - GCR hash tracking - - `entities/GCRv2/GCRSubnetsTxs.ts` - Subnet transactions - - `entities/GCRv2/GCR_TLSNotary.ts` - TLSNotary attestations - - `entities/PgpKeyServer.ts` - PGP key storage - -**`src/utilities/`:** -- Purpose: Cross-cutting utilities used by all layers -- Contains: Singleton services, helper functions, CLI tools -- Key files: - - `sharedState.ts` - Global singleton state (most important file for understanding data flow) - - `logger.ts` - Logging system - - `mainLoop.ts` - Background consensus/peer management loop - - `waiter.ts` - Timeout/abort-aware async waiting - - `Diagnostic.ts` - System diagnostics (CPU, RAM, disk, network) - - `tui/TUIManager.ts` - Terminal UI using terminal-kit - - `tui/CategorizedLogger.ts` - Tag-based log categorization - - `backupAndRestore.ts` - Chain backup/restore - - `commandLine.ts` - CLI mode handler - - `selfCheckPort.ts` - Port availability checking - - `generateUniqueId.ts` - ID generation - - `getPublicIP.ts` - Public IP detection - - `evmInfo.ts` - EVM chain information - -**`src/libs/network/`:** -- Purpose: All HTTP RPC server logic and request handling -- Contains: Server setup, auth, method routing, endpoint handlers -- Key files: - - `server_rpc.ts` - Main RPC server (Bun HTTP, ~17KB) - - `bunServer.ts` - Bun server wrapper with CORS and JSON helpers - - `endpointHandlers.ts` - RPC method dispatch (~29KB, largest handler file) - - `manageNodeCall.ts` - Public node query methods (~28KB) - - `manageConsensusRoutines.ts` - Consensus-related RPC handlers (~17KB) - - `manageGCRRoutines.ts` - GCR query/mutation handlers - - `manageHelloPeer.ts` - Peer discovery handshake - - `manageExecution.ts` - Transaction execution - - `manageAuth.ts` - Authentication - - `manageLogin.ts` - Login flow - - `manageBridge.ts` - Bridge operations - - `manageNativeBridge.ts` - Native bridge operations - - `middleware/rateLimiter.ts` - Rate limiting middleware - - `dtr/dtrmanager.ts` - Distributed Transaction Routing - - `routines/` - Subroutines for specific operations - - `nodecalls/` - Individual nodeCall handlers (getBlockByHash, getBlocks, getPeerlist, etc.) - - `transactions/` - Transaction processing (identity, L2PS, native bridge, web2 proxy, demosWork) - -**`src/libs/consensus/v2/`:** -- Purpose: PoRBFTv2 consensus implementation -- Key files: - - `PoRBFT.ts` - Main consensus routine with secretary semaphore system - - `interfaces.ts` - Consensus interfaces - - `routines/createBlock.ts` - Block creation - - `routines/mergeMempools.ts` - Mempool merging across shard - - `routines/mergePeerlist.ts` - Peer list merging - - `routines/getShard.ts` - Shard computation - - `routines/isValidator.ts` - Validator eligibility check - - `routines/getCommonValidatorSeed.ts` - Deterministic validator seed - - `routines/broadcastBlockHash.ts` - Block hash dissemination - - `routines/orderTransactions.ts` - Transaction ordering - - `types/secretaryManager.ts` - Secretary coordination - - `types/shardTypes.ts` - Shard type definitions - -**`src/libs/blockchain/gcr/`:** -- Purpose: Global Change Registry - mutable account state -- Key files: - - `gcr.ts` - Main GCR class (potentially deprecated, see GCRv2) - - `handleGCR.ts` - GCR operation handling - - `gcr_routines/applyGCROperation.ts` - Apply operations to GCR - - `gcr_routines/txToGCROperation.ts` - Derive operations from transactions - - `gcr_routines/GCRBalanceRoutines.ts` - Balance queries - - `gcr_routines/GCRIdentityRoutines.ts` - Identity operations - - `gcr_routines/GCRNonceRoutines.ts` - Nonce management - - `gcr_routines/GCRTLSNotaryRoutines.ts` - TLSNotary attestation storage - - `gcr_routines/IncentiveManager.ts` - Incentive/points logic - - `gcr_routines/identityManager.ts` - Identity management - - `gcr_routines/signatureDetector.ts` - Signature algorithm detection - - `gcr_routines/assignXM.ts` - Cross-chain address assignment - - `gcr_routines/assignWeb2.ts` - Web2 identity assignment - -**`src/client/`:** -- Purpose: Client-side utilities for connecting to the node -- Key files: - - `client.ts` - Client entry - - `libs/client_class.ts` - Client class - - `libs/network.ts` - Network utilities - -**`src/exceptions/`:** -- Purpose: Custom exception types -- Key files: `index.ts` (exports TimeoutError, AbortError, BlockInvalidError, ForgingEndedError, NotInShardError) - -**`devnet/`:** -- Purpose: Local development network setup -- Contains: Docker compose, peer lists, identity files, init scripts, run scripts -- Key files: - - `docker-compose.yml` - Multi-node devnet - - `Dockerfile` - Node container image - - `run-devnet` - Devnet launcher script - - `identities/` - Pre-generated node identities - - `postgres-init/` - Database initialization - -**`tests/`:** -- Purpose: Integration tests (chain-level) -- Contains: `mocks/`, `omniprotocol/` - -**`monitoring/`:** -- Purpose: Monitoring stack configuration -- Contains: Grafana dashboards, Prometheus config - -**`data/`:** -- Purpose: Runtime data directory -- Contains: Genesis configuration, chain database files - -**`fixtures/`:** -- Purpose: Test fixtures and sample payloads - -## Key File Locations - -**Entry Points:** -- `src/index.ts`: Main node entry point (bootstrap, services, main loop) -- `src/libs/utils/keyMaker.ts`: Key generation CLI tool -- `src/libs/utils/showPubkey.ts`: Public key display tool -- `src/utilities/backupAndRestore.ts`: Backup/restore tool - -**Configuration:** -- `.env` / `.env.example`: Environment variables -- `package.json`: Dependencies and scripts -- `tsconfig.json`: TypeScript config (paths: `@/*` -> `src/*`) -- `ormconfig.json`: TypeORM database config -- `.eslintrc.cjs`: ESLint rules -- `.prettierrc`: Prettier formatting -- `jest.config.ts`: Jest test config -- `demos_peerlist.json`: Known peer list -- `knip.json`: Dead code detection config - -**Core Logic:** -- `src/utilities/sharedState.ts`: Global state singleton (~200 lines, critical) -- `src/libs/blockchain/chain.ts`: Chain operations (static class) -- `src/libs/consensus/v2/PoRBFT.ts`: Consensus algorithm -- `src/utilities/mainLoop.ts`: Background loop -- `src/libs/network/server_rpc.ts`: RPC server -- `src/libs/network/endpointHandlers.ts`: RPC method routing (~29KB) -- `src/libs/network/manageNodeCall.ts`: Public query handlers (~28KB) -- `src/model/datasource.ts`: Database connection - -**Testing:** -- `tests/`: Integration tests -- `src/tests/`: Unit tests within source -- `local_tests/`: Local testing scripts (46 files) -- `fixtures/`: Test fixtures - -**Scripts:** -- `run`: Main node run script (bash, 34KB - handles setup, DB, startup) -- `start_db`: PostgreSQL startup script -- `reset-node`: Node state reset script -- `node-doctor`: Node health diagnostics script -- `install-deps.sh`: Dependency installation -- `scripts/ceremony_contribute.sh`: ZK ceremony contribution - -## Naming Conventions - -**Files:** -- PascalCase for classes/components: `PeerManager.ts`, `TUIManager.ts`, `MetricsCollector.ts` -- camelCase for utilities/routines: `mainLoop.ts`, `sharedState.ts`, `calibrateTime.ts` -- camelCase for routine files: `peerBootstrap.ts`, `checkOfflinePeers.ts`, `mergeMempools.ts` -- `manage*.ts` prefix for RPC method handler groups: `manageAuth.ts`, `manageNodeCall.ts` -- `handle*.ts` prefix for specific request handlers: `handleGCR.ts`, `handleWeb2ProxyRequest.ts` - -**Directories:** -- lowercase for feature modules: `multichain/`, `tlsnotary/`, `metrics/` -- PascalCase for protocol names: `InstantMessagingProtocol/` -- lowercase for library domains: `blockchain/`, `consensus/`, `peer/`, `crypto/` -- `routines/` subdirectory pattern for related operations within a domain - -## Import Path Conventions - -**Path Aliases:** -- `@/*` maps to `src/*` (defined in tsconfig.json) -- `src/*` also used as absolute imports (both styles coexist in codebase) -- SDK imports: `@kynesyslabs/demosdk/encryption`, `@kynesyslabs/demosdk/types`, `@kynesyslabs/demosdk` - -**Import Examples:** -```typescript -// Path alias style (preferred for new code) -import log from "@/utilities/logger" -import { Waiter } from "@/utilities/waiter" - -// Absolute src style (common in existing code) -import Chain from "src/libs/blockchain/chain" -import { getSharedState } from "src/utilities/sharedState" - -// SDK imports -import { uint8ArrayToHex } from "@kynesyslabs/demosdk/encryption" -import { Operation } from "@kynesyslabs/demosdk/types" +``` +src/ +├── index.ts # Main entrypoint (bootstrap, flags, services) +├── utilities/ # Cross-cutting utilities (logger, shared state, TUI, CLI) +├── libs/ # Core subsystems (network, blockchain, consensus, peer, crypto, omniprotocol, ...) +├── model/ # TypeORM entities + datasource config +├── migrations/ # TypeORM migrations +├── features/ # Optional feature modules (MCP, metrics, tlsnotary, multichain, zk, ...) +├── client/ # Client utilities +├── exceptions/ # Custom errors +├── types/ # Shared types / augmentations +└── tests/ # Some tests co-located under src (not the main test suite) ``` -## Where to Add New Code - -**New Feature Module:** -- Create directory: `src/features//` -- Add `index.ts` barrel export -- Dynamically import from `src/index.ts` with try-catch failsafe pattern -- Add env var toggle (e.g., `FEATURE_ENABLED`) -- Follow pattern from `src/features/metrics/` or `src/features/mcp/` - -**New RPC Endpoint:** -- Add handler in `src/libs/network/endpointHandlers.ts` or create `manage.ts` -- Import and wire in `server_rpc.ts` -- Add to `noAuthMethods` if public, or `PROTECTED_ENDPOINTS` if admin-only - -**New NodeCall Method:** -- Add handler file in `src/libs/network/routines/nodecalls/` -- Register in `src/libs/network/manageNodeCall.ts` - -**New Transaction Type:** -- Add handler in `src/libs/network/routines/transactions/` -- Register in `src/libs/network/manageExecution.ts` - -**New Database Entity:** -- Create entity in `src/model/entities/` -- Register in `src/model/datasource.ts` entities array -- TypeORM `synchronize: true` auto-creates tables - -**New Consensus Routine:** -- Add to `src/libs/consensus/v2/routines/` -- Wire into `src/libs/consensus/v2/PoRBFT.ts` - -**New GCR Operation:** -- Add routine in `src/libs/blockchain/gcr/gcr_routines/` -- Register in `src/libs/blockchain/gcr/gcr_routines/applyGCROperation.ts` - -**New Peer Routine:** -- Add to `src/libs/peer/routines/` - -**New Utility:** -- Add to `src/utilities/` for cross-cutting concerns -- Add to `src/libs/utils/` for domain-specific helpers - -**Tests:** -- Chain/integration tests: `tests/` -- Unit tests: `src/tests/` -- Follow Jest patterns with `*.test.ts` naming - -## Special Directories - -**`data/`:** -- Purpose: Runtime chain data and genesis configuration -- Generated: Partially (chain.db created at runtime) -- Committed: Only genesis config files - -**`devnet/`:** -- Purpose: Local multi-node development environment -- Generated: No (manually configured) -- Committed: Yes - -**`dist/`:** -- Purpose: Compiled output -- Generated: Yes (by build) -- Committed: No - -**`node_modules/`:** -- Purpose: Dependencies -- Generated: Yes -- Committed: No - -**`logs/` and `logs_*_demos_identity/`:** -- Purpose: Runtime log output -- Generated: Yes (at runtime) -- Committed: No - -**`.planning/`:** -- Purpose: GSD planning documents -- Generated: By AI tooling -- Committed: Optional - -**`.beads/`:** -- Purpose: Issue tracking (beads system) -- Generated: By beads CLI -- Committed: Yes (`issues.jsonl`) - -**`.serena/`:** -- Purpose: Serena MCP project memory -- Generated: By Serena -- Committed: Partially +## Key “start here” files ---- +- Bootstrap / lifecycle: `src/index.ts` +- Main loop: `src/utilities/mainLoop.ts` +- Shared state: `src/utilities/sharedState` +- RPC server: `src/libs/network/server_rpc.ts` +- Consensus: `src/libs/consensus/v2/PoRBFT.ts` +- DB: `src/model/datasource.ts`, `src/model/entities/` -*Structure analysis: 2026-01-28* diff --git a/.planning/codebase/TESTING.md b/.planning/codebase/TESTING.md index 994eed5c5..4d69a2552 100644 --- a/.planning/codebase/TESTING.md +++ b/.planning/codebase/TESTING.md @@ -1,310 +1,36 @@ # Testing Patterns -**Analysis Date:** 2026-01-28 +**Analysis Date:** 2026-02-22 -## Test Framework +## Framework -**Runner:** -- Jest v29.7.0 +- Jest (`devDependencies.jest`: `^29.7.0`) +- TypeScript transform via `ts-jest` (`^29.3.2`) - Config: `jest.config.ts` -- ts-jest preset for TypeScript transformation -**Assertion Library:** -- Jest built-in `expect` API -- Imports from `@jest/globals` (v30.2.0 in devDependencies) +## How to run -**Run Commands:** ```bash -bun run test:chains # Run all tests matching tests/**/*.ts +bun run test:chains ``` -The `test:chains` script runs: -```bash -jest --testMatch '**/tests/**/*.ts' --testPathIgnorePatterns src/* tests/utils/* tests/**/_template* --verbose -``` - -No general `test` script exists. Tests are specifically scoped to `tests/` directory. - -## Test File Organization - -**Location:** -- Separate `tests/` directory at project root (NOT co-located with source) -- Test subdirectories mirror feature areas: `tests/omniprotocol/` -- Mock files in `tests/mocks/` -- Fixture JSON files in `fixtures/` at project root -- Consensus fixtures in `fixtures/consensus/` - -**Naming:** -- Test files: `*.test.ts` (e.g., `handlers.test.ts`, `dispatcher.test.ts`, `consensus.test.ts`) -- Mock files: `demosdk-*.ts` pattern (e.g., `demosdk-encryption.ts`, `demosdk-types.ts`) - -**Structure:** -``` -tests/ -├── mocks/ -│ ├── demosdk-abstraction.ts -│ ├── demosdk-build.ts -│ ├── demosdk-encryption.ts -│ ├── demosdk-types.ts -│ ├── demosdk-websdk.ts -│ └── demosdk-xm-localsdk.ts -└── omniprotocol/ - ├── consensus.test.ts - ├── dispatcher.test.ts - ├── fixtures.test.ts - ├── gcr.test.ts - ├── handlers.test.ts - ├── peerOmniAdapter.test.ts - └── transaction.test.ts - -fixtures/ -├── address_info.json -├── block_header.json -├── consensus/ -│ └── *.json (per-method fixtures) -├── last_block_number.json -├── mempool.json -├── peerlist.json -└── peerlist_hash.json -``` - -## Test Structure - -**Suite Organization:** -```typescript -import { beforeAll, describe, expect, it, jest, beforeEach } from "@jest/globals" - -// 1. SDK mocks FIRST (before any imports that use them) -jest.mock("@kynesyslabs/demosdk/encryption", () => ({ ... })) -jest.mock("@kynesyslabs/demosdk/build/multichain/core", () => ({ ... })) - -// 2. Internal module mocks -jest.mock("src/libs/blockchain/chain", () => ({ ... })) -jest.mock("src/utilities/sharedState", () => ({ ... })) - -// 3. Type-only imports (safe before dynamic imports) -import type { HandlerContext } from "src/libs/omniprotocol/types/message" - -// 4. Dynamic imports in beforeAll (to respect mock hoisting) -let dispatchOmniMessage: typeof import("...")["dispatchOmniMessage"] - -beforeAll(async () => { - ({ dispatchOmniMessage } = await import("src/libs/omniprotocol/protocol/dispatcher")) -}) - -// 5. Test suites -describe("Feature Name", () => { - beforeEach(() => { - jest.clearAllMocks() - }) - - it("description of behavior", async () => { - // Arrange → Act → Assert - }) -}) -``` - -**Key Patterns:** -- `jest.mock()` calls placed at the TOP of file, before any imports -- Dynamic `import()` in `beforeAll` to ensure mocks are registered before module loads -- `beforeEach` with `jest.clearAllMocks()` for test isolation -- Descriptive `it()` strings: `"encodes nodeCall response"`, `"handles proto_disconnect without response"` - -## Mocking - -**Framework:** Jest built-in `jest.mock()` and `jest.fn()` - -**SDK Mock Pattern (critical - used in every test file):** -```typescript -// SDK encryption mock - required because SDK has native dependencies -jest.mock("@kynesyslabs/demosdk/encryption", () => ({ - __esModule: true, - ucrypto: { - getIdentity: jest.fn(async () => ({ - publicKey: new Uint8Array(32), - algorithm: "ed25519", - })), - sign: jest.fn(async () => ({ - signature: new Uint8Array([1, 2, 3, 4]), - })), - verify: jest.fn(async () => true), - }, - uint8ArrayToHex: jest.fn((input: Uint8Array) => - Buffer.from(input).toString("hex"), - ), - hexToUint8Array: jest.fn((hex: string) => { - const normalized = hex.startsWith("0x") ? hex.slice(2) : hex - return new Uint8Array(Buffer.from(normalized, "hex")) - }), -})) -``` - -**Module mock pattern (internal modules):** -```typescript -jest.mock("src/libs/blockchain/chain", () => ({ - __esModule: true, - default: { - getBlocks: jest.fn(), - getBlockByHash: jest.fn(), - getTxByHash: jest.fn(), - }, -})) -``` - -**Mock retrieval after dynamic import:** -```typescript -let mockedChain: { getBlocks: jest.Mock; getBlockByHash: jest.Mock } - -beforeAll(async () => { - mockedChain = (await import("src/libs/blockchain/chain")) - .default as { getBlocks: jest.Mock; getBlockByHash: jest.Mock } -}) -``` - -**What to Mock:** -- `@kynesyslabs/demosdk/*` modules (encryption, types, multichain) - always mocked -- Blockchain data layer (`chain`, `mempool_v2`) -- Network routines (`getPeerlist`, `getBlockByNumber`) -- Shared state (`sharedState`) -- Any module with side effects or external dependencies - -**What NOT to Mock:** -- Serialization/deserialization functions (tested directly for round-trip correctness) -- Protocol opcodes and enums -- Pure utility functions - -**Jest Config Module Mapping (`jest.config.ts`):** -```typescript -moduleNameMapper: { - "^@kynesyslabs/demosdk/encryption$": "/tests/mocks/demosdk-encryption.ts", - "^@kynesyslabs/demosdk/types$": "/tests/mocks/demosdk-types.ts", - "^@kynesyslabs/demosdk/websdk$": "/tests/mocks/demosdk-websdk.ts", - "^@kynesyslabs/demosdk/xm-localsdk$": "/tests/mocks/demosdk-xm-localsdk.ts", - "^@kynesyslabs/demosdk/abstraction$": "/tests/mocks/demosdk-abstraction.ts", - "^@kynesyslabs/demosdk/build/.*$": "/tests/mocks/demosdk-build.ts", -} -``` - -## Fixtures and Factories - -**Test Data - JSON Fixtures:** -```typescript -// Helper function pattern used across test files -const fixture = (name: string): T => { - const file = path.resolve(__dirname, "../../fixtures", `${name}.json`) - return JSON.parse(readFileSync(file, "utf8")) as T -} - -// Usage -const peerlistFixture = fixture<{ result: number; response: unknown }>("peerlist") -``` - -**Location:** -- `fixtures/` directory at project root -- `fixtures/consensus/` subdirectory for consensus-specific fixtures -- Each fixture is a JSON file representing captured HTTP responses from the real network - -**Factory helpers (inline):** -```typescript -const makeMessage = (opcode: number) => ({ - header: { version: 1, opcode, sequence: 42, payloadLength: 0 }, - payload: null, - checksum: 0, -}) - -const makeContext = () => ({ - peerIdentity: "peer", - connectionId: "conn", - receivedAt: Date.now(), - requiresAuth: false, -}) -``` - -## Coverage - -**Requirements:** No coverage thresholds enforced -**Coverage tool:** Not configured in jest.config.ts (no `collectCoverage`, no `coverageThreshold`) - -## Test Types - -**Unit Tests:** -- Serialization round-trip tests (encode -> decode -> compare) -- Handler dispatch tests with mocked dependencies -- Protocol message construction and parsing - -**Integration Tests:** -- Handler integration tests that test dispatch through the handler registry -- Fixture-based tests that validate against captured real network data - -**E2E Tests:** -- Not present. Per project guidelines: "NEVER start the node directly during development or testing" -- ESLint validation (`bun run lint:fix`) is the primary code correctness check - -## Common Patterns - -**Async Testing:** -```typescript -it("encodes nodeCall response", async () => { - mockedManageNodeCall.mockResolvedValue(response) - - const buffer = await dispatchOmniMessage({ ... }) - - expect(mockedManageNodeCall).toHaveBeenCalledWith({ ... }) - const decoded = decodeNodeCallResponse(buffer) - expect(decoded.status).toBe(200) -}) -``` - -**Round-Trip Encoding Tests:** -```typescript -it("should encode and decode without data loss", () => { - const original = { ... } - const encoded = encodeJsonRequest(original) - expect(encoded).toBeInstanceOf(Buffer) - - const decoded = decodeJsonRequest(encoded) - expect(decoded).toEqual(original) -}) -``` - -**Fixture-Driven Tests:** -```typescript -fixtures.forEach(fixtureFile => { - it(`should decode and encode ${fixtureFile} correctly`, () => { - const fixture = loadConsensusFixture(fixtureFile) - // encode -> decode -> compare against fixture - }) -}) -``` - -**Error Testing:** -```typescript -it("throws UnknownOpcodeError for unregistered opcode", async () => { - await expect( - dispatchOmniMessage({ message: makeMessage(0xffff), ... }) - ).rejects.toThrow(UnknownOpcodeError) -}) -``` +Script (from `package.json`): +- `jest --testMatch '**/tests/**/*.ts' --testPathIgnorePatterns src/* tests/utils/* tests/**/_template* --verbose` -## Test Configuration Notes +## Test layout -- `testTimeout: 20_000` (20 seconds) - tests involving ledger lookups need this -- `isolatedModules: true` in ts-jest transform options -- Tests excluded from TypeScript compilation in `tsconfig.json` (`"exclude": ["tests", "src/tests"]`) -- `src/tests/` directory exists but contains a manual `transactionTester.ts` utility (not Jest tests) +**Primary test folder** +- `tests/` (repo root) -## Adding New Tests +**Fixtures** +- JSON fixtures under `fixtures/` (used by tests) -**New test file:** -- Place in `tests//.test.ts` -- Copy the SDK mock boilerplate from an existing test file -- Use `beforeAll` with dynamic imports for modules that depend on mocked dependencies -- Add JSON fixtures to `fixtures/` if testing against real data shapes +**Mocks** +- SDK mocks under `tests/mocks/` (notably `@kynesyslabs/demosdk/*` remaps) +- Jest moduleNameMapper entries in `jest.config.ts` point to these mock files -**New mock file:** -- Place in `tests/mocks/demosdk-.ts` -- Register in `jest.config.ts` `moduleNameMapper` if it replaces an SDK module +## Common patterns ---- +- Tests often mock Demos SDK modules before importing code that depends on them (see `tests/mocks/` and `jest.config.ts`) +- Long-running tests: Jest timeout is increased (`testTimeout: 20_000` in `jest.config.ts`) -*Testing analysis: 2026-01-28* diff --git a/.serena/memories/arch_hook_system.md b/.serena/memories/arch_hook_system.md new file mode 100644 index 000000000..caa4b39ad --- /dev/null +++ b/.serena/memories/arch_hook_system.md @@ -0,0 +1,194 @@ +# Hook System Architecture + +## Summary +The hook system allows token scripts to extend native operations (transfer, mint, burn, approve) with custom logic. Hooks can validate, modify, or reject operations and add additional mutations. + +## Hook Types +All 8 hook types are supported: +- `beforeTransfer` / `afterTransfer` +- `beforeMint` / `afterMint` +- `beforeBurn` / `afterBurn` +- `beforeApprove` / `afterApprove` + +## Key Components + +### HookExecutor (`HookExecutor.ts`) +High-level orchestrator for hook execution during native operations. + +**Main Method**: `executeWithHooks(request: ExecuteWithHooksRequest): Promise` + +**Execution Flow**: +``` +ExecuteWithHooksRequest + │ + ▼ +1. Execute beforeHook + ├── If rejected → Return failure with HookRejection + └── If proceed → Apply beforeHook mutations to state + │ + ▼ +2. Apply native operation mutations + │ + ▼ +3. Execute afterHook + ├── If rejected → Return failure, revert all changes + └── If proceed → Apply afterHook mutations + │ + ▼ +4. Return HookExecutionResult + ├── success: boolean + ├── finalState: GCRTokenData + ├── allMutations: StateMutation[] + ├── events: AppliedEvent[] + └── metadata: HookExecutionMetadata +``` + +### Hook Result Structure +```typescript +interface HookResult { + proceed: boolean // Whether to continue operation + mutations: StateMutation[] // Additional mutations + modifiedData?: Record // Modified operation data + cancelReason?: string // Reason if proceed=false +} +``` + +### Hook Rejection +```typescript +interface HookRejection { + hookType: HookType // Which hook rejected + reason: string // Why rejected + phase: "before" | "after" +} +``` + +## Utility Functions + +### Native Operation Mutations +- `createTransferMutations(from, to, amount)` → [subBalance, addBalance] +- `createMintMutations(to, amount)` → [addBalance] +- `createBurnMutations(from, amount)` → [subBalance] +- `createApproveMutations(owner, spender, amount)` → [setAllowance] + +### Validation Helpers +- `validateSufficientBalance(tokenData, address, amount)` +- `validateSufficientAllowance(tokenData, owner, spender, amount)` + +### Merging +- `mergeHookResults(results: HookResult[])` → Single HookResult + +## Usage Example +```typescript +const executor = new HookExecutor(scriptExecutor) + +const result = await executor.executeWithHooks({ + operation: "transfer", + operationData: { from: "0x1", to: "0x2", amount: 100n }, + tokenAddress: "0xToken", + tokenData: currentState, + scriptCode: tokenScript, + txContext: { caller, txHash, timestamp, blockHeight, prevBlockHash }, + nativeOperationMutations: createTransferMutations("0x1", "0x2", 100n), +}) + +if (result.success) { + // Apply result.finalState to storage +} else { + // Handle rejection: result.rejection.reason +} +``` + +## Integration with ScriptExecutor +HookExecutor uses `ScriptExecutor.executeHook()` internally, which delegates to `TokenSandbox.executeHook()` for secure SES-based execution. + +## Error Handling +- Hook errors automatically cancel operation (safety first) +- afterHook rejections revert all changes including native mutations +- Detailed metadata tracks which hooks executed and how many mutations each produced + +## Consensus Integration (Phase 5.1) + +### GCRTokenRoutines Integration +The hook system is now integrated into the consensus flow through `GCRTokenRoutines`: + +**Files Modified**: +- `src/libs/blockchain/gcr/handleGCR.ts` - Passes Transaction to GCRTokenRoutines.apply +- `src/libs/blockchain/gcr/gcr_routines/GCRTokenRoutines.ts` - Contains hook integration + +**Key Changes**: + +1. **GCRTokenRoutines.apply signature updated**: + ```typescript + static async apply( + editOperation: GCREditToken, + gcrTokenRepository: Repository, + simulate: boolean, + tx?: Transaction, // New: Transaction context for hook execution + ): Promise + ``` + +2. **Helper Methods Added**: + - `getHookExecutor()` - Singleton HookExecutor instance + - `tokenToGCRTokenData(token)` - Converts GCRToken entity to GCRTokenData interface + - `applyGCRTokenDataToEntity(token, data)` - Applies mutations back to entity + +3. **Handler Integration Pattern**: + Each handler (transfer, mint, burn) now checks for scripts: + ```typescript + if (token.hasScript && token.script?.code && tx && !edit.isRollback) { + // Use HookExecutor.executeWithHooks() + // Handle rejection via result.rejection + // Apply finalState via applyGCRTokenDataToEntity() + } else { + // Native operation without hooks + } + ``` + +### Consensus Flow + +``` +Transaction submitted + │ + ▼ +PoRBFTv2 Consensus + │ + ▼ +applyGCREditsFromMergedMempool + │ + ▼ +HandleGCR.apply(edit, tx) ← Now passes tx + │ + ▼ +GCRTokenRoutines.apply(edit, repo, simulate, tx) + │ + ▼ +handleTransferToken / handleMintToken / handleBurnToken + │ + ├── Token has script? ──Yes──▶ HookExecutor.executeWithHooks() + │ │ + │ ┌─────┴─────┐ + │ │ │ + │ Proceed Rejection + │ │ │ + │ Apply finalState │ + │ │ │ + │ ▼ ▼ + │ Save entity Return failure + │ + └── No script ───────▶ Native operation + │ + ▼ + Save entity +``` + +### Determinism Notes +- Scripts execute in SES sandbox with seeded randomness +- `prevBlockHash` currently empty string (will be injected by consensus in Phase 5.2) +- `blockHeight` uses `tx.blockNumber` (may be null during mempool processing) +- `timestamp` from transaction content, fallback to Date.now() + +### Rollback Handling +Script hooks are NOT executed during rollbacks. Rollback operations reverse the native operation directly, preserving the original state before the script was executed. + +## Last Updated +2026-02-23 - Phase 5.1 consensus integration complete diff --git a/.serena/memories/arch_scripting_module_structure.md b/.serena/memories/arch_scripting_module_structure.md new file mode 100644 index 000000000..4d5c9a8c5 --- /dev/null +++ b/.serena/memories/arch_scripting_module_structure.md @@ -0,0 +1,87 @@ +# Scripting Module Architecture + +## Summary +The `src/libs/scripting/` module provides secure, deterministic script execution for token operations using SES (Secure EcmaScript) sandbox technology. + +## Key Components + +### TokenSandbox (`TokenSandbox.ts`) +Low-level SES compartment management: +- `initialize()` - Locks down JS primordials via SES +- `execute(code, context, config)` - Runs script in isolated compartment +- `executeHook(hookCode, hookType, context, config)` - Runs hooks for native operations +- `validateMutations()` - Structural validation of mutations +- Deterministic PRNG via `createSeededRandom()` using prevBlockHash + txHash + +### ScriptExecutor (`ScriptExecutor.ts`) +High-level orchestration service: +- `executeMethod(request)` - Main entry point for consensus layer +- `executeHook(request)` - Hook execution for native operations +- `validateMutationsAgainstToken()` - Business rule validation +- Builds ScriptContext from ExecuteMethodRequest +- Merges config with defaults + +Key types: +- `BlockContext` - height, prevBlockHash, timestamp +- `ExecuteMethodRequest` - tokenAddress, method, args, caller, blockContext, txHash, tokenData +- `ExecuteHookRequest` - hookCode, hookType, hookContext, tokenData + +### MutationApplier (`MutationApplier.ts`) +Pure functions for applying mutations: +- `applyMutations(tokenData, mutations)` - Main apply function +- Returns `MutationApplicationResult` with newState, events, mutationsApplied +- Immutable - creates deep copy before modifications +- Utility functions: `isEmitMutation()`, `getStateMutations()`, `getEventMutations()` + +### TokenStateAccessorBuilder (`TokenStateAccessorBuilder.ts`) +Builds read-only state accessors: +- `buildTokenStateAccessor(data)` - Full accessor for scripts +- `buildMinimalAccessor()` - Minimal accessor for testing + +### Types (`types.ts`) +Core type definitions: +- `ScriptContext` - caller, method, args, timestamp, blockHeight, prevBlockHash, txHash, token +- `StateMutation` - Union of SetBalance, AddBalance, SubBalance, SetAllowance, SetStorage, Emit +- `ScriptResult` - ScriptSuccess | ScriptError +- `HookContext`, `HookResult` - Hook-specific types + +## Execution Flow + +``` +ExecuteMethodRequest + │ + ▼ +ScriptExecutor.executeMethod() + │ + ├─▶ buildTokenStateAccessor(tokenData) + │ + ├─▶ Build ScriptContext + │ + ├─▶ tokenSandbox.execute(code, context, config) + │ │ + │ └─▶ SES Compartment execution + │ Returns StateMutation[] + │ + ├─▶ validateMutationsAgainstToken() + │ (Business rule validation) + │ + └─▶ Return ScriptResult + │ + ▼ + applyMutations(tokenData, result.mutations) + │ + └─▶ MutationApplicationResult + (newState, events, mutationsApplied) +``` + +### HookExecutor (`HookExecutor.ts`) +Native operation hook orchestrator: +- `executeWithHooks(request)` - Main entry for consensus layer +- Execution flow: beforeHook → native mutations → afterHook +- Rejection handling with rollback on afterHook failure +- Utility functions: `createTransferMutations()`, `createMintMutations()`, etc. + +See `arch_hook_system` memory for detailed hook architecture. + +## Last Updated +2026-02-22 - Phase 2.4 completion (added HookExecutor) diff --git a/.serena/memories/feature_scripting_custom_methods.md b/.serena/memories/feature_scripting_custom_methods.md new file mode 100644 index 000000000..b243f8f44 --- /dev/null +++ b/.serena/memories/feature_scripting_custom_methods.md @@ -0,0 +1,186 @@ +# Token Scripting System - Phase 5.2: Custom Script Methods + +## Summary + +Phase 5.2 implements custom script methods, allowing token scripts to define arbitrary callable functions beyond native operations (like `stake()`, `claimRewards()`, `vote()`). + +## Components Implemented + +### 1. GCREditTokenCustom Type +**File**: `src/libs/blockchain/gcr/types/token/GCREditToken.ts` + +```typescript +export interface GCREditTokenCustom extends GCREditTokenBase { + operation: "custom" + data: { + method: string // Custom method name + params: unknown[] // Method arguments + } +} +``` + +### 2. handleCustomMethod in GCRTokenRoutines +**File**: `src/libs/blockchain/gcr/gcr_routines/GCRTokenRoutines.ts` + +Handles the "custom" operation case in `applyTokenEdit()`: +- Validates method exists in token script +- Verifies method is a write operation (`mutates: true`) +- Builds execution context with BlockContext +- Executes via `scriptExecutor.executeMethod()` +- Applies returned mutations via `applyMutations()` +- Handles discriminated union `ScriptResult` with explicit type extraction + +Key patterns used: +```typescript +// Method validation +const methodDef = script.methods.find(m => m.name === method) +if (!methodDef.mutates) { /* reject view-only methods */ } + +// SharedState access (getter, not function) +const sharedState = getSharedState + +// BlockContext construction +const blockContext = { + height: sharedState.lastBlockNumber ?? 0, + prevBlockHash: sharedState.lastBlockHash ?? "0".repeat(64), + timestamp: tx?.content?.timestamp ?? Date.now(), +} + +// Discriminated union handling +if (!result.success) { + const errorResult = result as Extract + // Use errorResult.error +} +``` + +### 3. token.callView RPC Handler +**File**: `src/libs/network/manageNodeCall.ts` + +Implements the `token.callView` nodeCall for executing view (read-only) methods: +- Validates token exists and has a script +- Builds `tokenData` from token entity +- Calls `scriptExecutor.executeView()` +- Returns `ViewResult` with value or error + +### 4. Documentation Updates +**File**: `src/libs/scripting/README.md` + +Added: +- Custom Script Methods section with examples +- View function RPC examples +- Custom method execution flow diagram +- Method types table (write vs view) + +## Type Definitions + +### TokenScriptMethod +```typescript +interface TokenScriptMethod { + name: string + params: string[] + returns?: string + mutates: boolean // true = write method, false = view method +} +``` + +### ExecuteMethodRequest +```typescript +interface ExecuteMethodRequest { + tokenAddress: string + method: string + args: unknown[] + caller: string + blockContext: BlockContext + txHash: string + tokenData: GCRTokenData + config?: Partial +} +``` + +### ScriptResult (Discriminated Union) +```typescript +type ScriptResult = ScriptSuccess | ScriptError + +interface ScriptSuccess { + success: true + mutations: StateMutation[] + returnValue?: unknown + executionTimeMs: number + gasUsed: number +} + +interface ScriptError { + success: false + error: string + stack?: string + executionTimeMs: number + gasUsed: number +} +``` + +### ViewResult (Discriminated Union) +```typescript +type ViewResult = ViewSuccess | ViewError + +interface ViewSuccess { + success: true + value: unknown + executionTimeMs: number + gasUsed: number +} + +interface ViewError { + success: false + error: string + errorType: "method_not_found" | "execution_error" | "mutation_rejected" | "timeout" + stack?: string + executionTimeMs: number + gasUsed: number +} +``` + +## Execution Flows + +### Write Method (via Transaction) +``` +SDK: demos.tokens.custom({ method: "stake", params: [...] }) + │ + ▼ +Transaction: type="tokenExecution", operation="custom" + │ + ▼ +GCRTokenRoutines.applyTokenEdit(case: "custom") + │ + ├── Validate method exists and mutates=true + ├── Build BlockContext from sharedState + ├── scriptExecutor.executeMethod() + ├── applyMutations() to get newState + └── Save token entity +``` + +### View Method (via RPC) +``` +SDK: rpc.nodeCall("token.callView", { method: "getStakingInfo", ... }) + │ + ▼ +manageNodeCall(case: "token.callView") + │ + ├── Validate token has script + ├── Build tokenData from entity + ├── scriptExecutor.executeView() + └── Return { value, executionTimeMs, gasUsed } +``` + +## Files Modified + +- `src/libs/blockchain/gcr/types/token/GCREditToken.ts` - Added GCREditTokenCustom +- `src/libs/blockchain/gcr/gcr_routines/GCRTokenRoutines.ts` - Added handleCustomMethod +- `src/libs/network/manageNodeCall.ts` - Implemented token.callView +- `src/libs/scripting/README.md` - Documentation updates + +## Related Memories + +- `feature_scripting_system_overview` - Phase 1 overview +- `feature_scripting_system_phase2` - Phase 2 sandbox/executor +- `feature_scripting_validation_rules` - Validation rules +- `feature_scripting_view_functions` - View function details diff --git a/.serena/memories/feature_scripting_system_complete.md b/.serena/memories/feature_scripting_system_complete.md new file mode 100644 index 000000000..5e0d4d7ac --- /dev/null +++ b/.serena/memories/feature_scripting_system_complete.md @@ -0,0 +1,54 @@ +# Token Scripting System - Implementation Complete + +## Overview + +This document is informational. Work planning and progress tracking must live in `bd/br` (beads), +not as in-repo phase checklists. + +## Key Files + +### Scripting Module +- `src/libs/scripting/TokenSandbox.ts` - SES sandbox execution +- `src/libs/scripting/ScriptExecutor.ts` - executeMethod, executeView, executeValidation +- `src/libs/scripting/HookExecutor.ts` - beforeHook/afterHook orchestration +- `src/libs/scripting/MutationApplier.ts` - State mutation application +- `src/libs/scripting/types.ts` - All scripting types +- `src/libs/scripting/README.md` - System overview +- `src/libs/scripting/VALIDATION_RULES.md` - Validation rules documentation +- `src/libs/scripting/EXAMPLE_SCRIPTS.md` - Complete script examples + +### Token Types +- `src/libs/blockchain/gcr/types/token/GCREditToken.ts` - Token edit types +- `src/libs/blockchain/gcr/types/token/TokenPermissions.ts` - ACL permissions +- `src/libs/blockchain/gcr/types/token/ACL_GUIDE.md` - ACL documentation + +### Handlers +- `src/libs/blockchain/gcr/gcr_routines/GCRTokenRoutines.ts` - Token operation handlers +- `src/libs/network/manageNodeCall.ts` - token.callView nodeCall handler + +## Documentation Created + +### EXAMPLE_SCRIPTS.md +Complete cookbook with 7 example token scripts: +1. Basic Token with Fee Collection +2. Staking Token +3. Vesting Token +4. Whitelist-Gated Token +5. Reward Distribution Token +6. Governance Token +7. Anti-Whale Token + +Each example demonstrates: +- View functions (getStakingInfo, getVestingInfo, etc.) +- Validation rules (canTransfer, canMint, canBurn) +- Hooks (beforeTransfer, afterTransfer) +- Custom write methods (stake, unstake, claimRewards, etc.) +- Best practices and patterns + +## Next Steps + +To implement Phase 6 (Script Debugging Tools): +1. Add `token.dryRun` nodeCall endpoint +2. Implement gas profiler with per-operation breakdown +3. Add static script validator for common errors +4. Create debug console capture mode diff --git a/.serena/memories/feature_scripting_system_overview.md b/.serena/memories/feature_scripting_system_overview.md new file mode 100644 index 000000000..b4ed0bb86 --- /dev/null +++ b/.serena/memories/feature_scripting_system_overview.md @@ -0,0 +1,351 @@ +# Token Scripting System - Complete Overview + +## Summary +Complete TypeScript scripting system for Demos Network GCRv2 tokens, enabling custom logic execution during consensus with sandboxed security, hooks system, view functions, and validation rules. + +## System Architecture + +``` +┌─────────────────────────────────────────────────────────────┐ +│ Token Operation Request │ +│ (transfer, mint, burn, approve, view) │ +└─────────────────────────────────────────────────────────────┘ + │ + ▼ +┌─────────────────────────────────────────────────────────────┐ +│ Script Execution Flow │ +│ │ +│ Phase 0: Validation Rule (if native operation) │ +│ ├─ canTransfer/canMint/canBurn/canApprove │ +│ └─ Returns: true (allow) | false (deny) │ +│ │ +│ Phase 1: beforeHook (if native operation) │ +│ ├─ beforeTransfer/beforeMint/beforeBurn/beforeApprove │ +│ └─ Returns: { proceed, mutations, modifiedData } │ +│ │ +│ Phase 2: Native Operation / View Function │ +│ ├─ Native: Apply balance/supply changes │ +│ └─ View: Execute read-only computation │ +│ │ +│ Phase 3: afterHook (if native operation) │ +│ ├─ afterTransfer/afterMint/afterBurn/afterApprove │ +│ └─ Returns: { proceed, mutations, modifiedData } │ +└─────────────────────────────────────────────────────────────┘ + │ + ▼ + Final State + Events +``` + +## Core Components + +### 1. Token Sandbox (`TokenSandbox.ts`) +**Purpose**: Low-level SES (Secure ECMAScript) compartment execution + +**Key Methods**: +- `executeHook()`: Execute before/after hooks with full endowments +- `executeView()`: Execute view functions with read-only endowments +- `executeValidation()`: Execute validation rules with boolean return enforcement + +**Security Features**: +- Isolated SES compartments with hardened endowments +- Deterministic PRNG with operation-specific seeds +- Timeout protection (default: 1000ms) +- Gas/resource tracking +- Mutation detection for view functions + +### 2. Script Executor (`ScriptExecutor.ts`) +**Purpose**: High-level orchestration for script execution + +**Key Methods**: +- `executeHook()`: Orchestrates hook execution with context building +- `executeView()`: Orchestrates view function execution +- `executeValidation()`: Orchestrates validation rule execution +- `getScriptCode()`: Extracts script code from token data + +**Responsibilities**: +- Build token state accessors from GCR data +- Construct script contexts with deterministic data +- Coordinate with TokenSandbox for execution +- Handle script code extraction and validation + +### 3. Hook Executor (`HookExecutor.ts`) +**Purpose**: Native operation orchestration with hooks and validation + +**Execution Flow**: +1. **Phase 0**: Execute validation rule (canTransfer/canMint/canBurn/canApprove) + - If validation fails → Reject operation immediately + - If no validation rule or execution error → Allow by default +2. **Phase 1**: Execute beforeHook + - Can add mutations or reject operation +3. **Phase 2**: Apply native operation mutations + - Core balance/supply/allowance changes +4. **Phase 3**: Execute afterHook + - Can add mutations or reject operation (rare) + +**Key Features**: +- Wave-based mutation application +- Proper rejection handling with metadata +- Gas/time tracking across all phases +- Event aggregation from all phases + +### 4. Mutation Applier (`MutationApplier.ts`) +**Purpose**: Apply state mutations and generate events + +**Mutation Types**: +- `addBalance`: Increase token balance +- `subBalance`: Decrease token balance +- `setAllowance`: Set approval amount +- `setStorage`: Update custom storage +- `emit`: Emit custom events + +**Features**: +- Atomic mutation application +- Event generation from mutations +- Balance validation (no negative balances) +- Storage key/value management + +## Script Capabilities + +### Hook Functions +**Purpose**: Extend native operations with custom logic + +**Hook Types**: +- `beforeTransfer(from, to, amount)`: Execute before transfer +- `afterTransfer(from, to, amount)`: Execute after transfer +- `beforeMint(to, amount)`: Execute before mint +- `afterMint(to, amount)`: Execute after mint +- `beforeBurn(from, amount)`: Execute before burn +- `afterBurn(from, amount)`: Execute after burn +- `beforeApprove(owner, spender, amount)`: Execute before approve +- `afterApprove(owner, spender, amount)`: Execute after approve + +**Capabilities**: +- Read token state via `context.token.*` methods +- Emit mutations to modify state (balances, storage, events) +- Reject operations by returning `{ proceed: false }` +- Access deterministic context (caller, timestamp, blockHeight) + +### View Functions +**Purpose**: Read-only script methods callable via nodeCall (no consensus) + +**Characteristics**: +- Pure read-only (mutations rejected) +- Return arbitrary computed values +- Same read-only endowments as validation rules +- Execute via `nodeCall` without consensus + +**Example Use Cases**: +- `getCustomData()`: Retrieve computed storage data +- `computeReward(address)`: Calculate rewards for address +- `checkEligibility(address)`: Check custom conditions + +### Validation Rules +**Purpose**: Pre-operation boolean gates for native operations + +**Rule Types**: +- `canTransfer(from, to, amount)`: Allow/deny transfers +- `canMint(to, amount)`: Allow/deny minting +- `canBurn(from, amount)`: Allow/deny burning +- `canApprove(owner, spender, amount)`: Allow/deny approvals + +**Characteristics**: +- Must return boolean (true = allow, false = deny) +- Read-only (same endowments as view functions) +- Execute BEFORE hooks and native operations +- Missing rules default to "allow" + +**Example Use Cases**: +- Whitelist-based transfers +- Time-locked operations +- Transfer limits +- Permission-based minting + +## Script Context + +### Available to Hooks (Full Endowments) +```typescript +context = { + token: { + // Read methods + getBalance(address: string): bigint + getTotalSupply(): bigint + getAllHolders(): string[] + getMetadata(): TokenMetadata + isPaused(): boolean + getAllowance(owner: string, spender: string): bigint + getStorage(key: string): unknown + }, + + // Transaction context + caller: string // Address initiating operation + method: string // Operation name (transfer, mint, etc) + args: unknown[] // Operation arguments + timestamp: number // Block timestamp + blockHeight: number // Current block height + prevBlockHash: string // Previous block hash + txHash: string // Transaction hash + + // Mutation system + emit: { + addBalance(address: string, amount: bigint): void + subBalance(address: string, amount: bigint): void + setAllowance(owner: string, spender: string, amount: bigint): void + setStorage(key: string, value: unknown): void + event(name: string, data: Record): void + }, + + // Utilities + Math: { ...Math, random: deterministicRandom } + JSON: JSON + console: console (if debug enabled) + BigInt: BigInt +} +``` + +### Available to View Functions and Validation Rules (Read-Only Endowments) +```typescript +context = { + token: { + // Read-only methods (same as hooks) + getBalance(address: string): bigint + getTotalSupply(): bigint + getAllHolders(): string[] + getMetadata(): TokenMetadata + isPaused(): boolean + getAllowance(owner: string, spender: string): bigint + getStorage(key: string): unknown + }, + + // Utilities (no emit methods) + Math: { ...Math, random: deterministicRandom } + JSON: JSON + console: console (if debug enabled) + BigInt: BigInt +} +``` + +## Security & Determinism + +### SES Compartment Isolation +- Hardened JavaScript execution environment +- No access to host APIs or globals +- Only provided endowments available +- Prevents prototype pollution and escape + +### Deterministic PRNG +- Operation-specific seeds for Math.random() +- Hook seed: `0x686f6f6b` ("hook") +- View seed: `0x76696577` ("view") +- Validation seed: `0x76616c69` ("vali") +- Ensures consistent execution across nodes + +### Resource Limits +- Timeout protection: 1000ms default (configurable) +- Gas tracking: ~10 gas per millisecond +- Memory limits via compartment constraints +- Execution context isolation + +### Mutation Validation +- View functions: Mutations rejected with error +- Validation rules: Boolean return type enforced +- Hooks: Mutations validated before application +- Balance constraints: No negative balances allowed + +## Integration Points + +### With GCRv2 Token System +- Token data extracted via `getTokenDetails()` +- Script code stored in `details.content.token.script.code` +- Mutations applied to token state after validation +- Events emitted and logged during consensus + +### With Network Layer +- Hooks execute during transaction processing (consensus) +- View functions execute via nodeCall (no consensus) +- Validation rules execute during operation validation (consensus) +- Results affect transaction outcome and state changes + +### With SDK (`@kynesyslabs/demosdk`) +- `demos.tokens.transfer()`: Triggers beforeTransfer/afterTransfer hooks + canTransfer validation +- `demos.tokens.mint()`: Triggers beforeMint/afterMint hooks + canMint validation +- `demos.tokens.burn()`: Triggers beforeBurn/afterBurn hooks + canBurn validation +- `demos.tokens.approve()`: Triggers beforeApprove/afterApprove hooks + canApprove validation +- `demos.tokens.view()`: Executes view functions via nodeCall (planned) + +## Documentation Files + +- `HOOKS.md`: Complete hooks system documentation +- `VALIDATION_RULES.md`: Validation rules documentation +- Memory: `feature_scripting_view_functions.md`: View functions documentation +- Memory: `arch_scripting_module_structure.md`: Module architecture +- Memory: `pattern_scripting_types_sdk_vs_node.md`: Type patterns + +## Implementation Status + +### Completed Features ✅ +- ✅ Phase 0: Foundation (Types, Endowments, Token Accessor) +- ✅ Phase 1: SES Sandbox (Compartment execution, PRNG, Timeout) +- ✅ Phase 2: Hook System (Before/After hooks, Mutation system) +- ✅ Phase 3.1: View Functions (Read-only execution, Mutation rejection) +- ✅ Phase 3.2: Validation Rules (Pre-operation gates, Boolean enforcement) +- ✅ Phase 3.3: token.callView nodeCall handler (SDK integration) +- ✅ Phase 4.1: Script Upgrade Mechanism (handleUpgradeTokenScript, version tracking) +- ✅ Phase 4.2: ACL Management (grantPermission, revokePermission, TokenPermissions) +- ✅ Phase 5.1: Script Execution in Consensus (HookExecutor integration) +- ✅ Phase 5.2: Custom Script Methods (handleCustomMethod, executeMethod) + +### All Core Scripting Phases Complete! 🎉 + +### Phase 6: Script Debugging Tools ⏳ +- ⏳ Phase 6.1: Script Dry-Run Endpoint (execute without state changes) +- ⏳ Phase 6.2: Gas Profiler (detailed gas breakdown by operation) +- ⏳ Phase 6.3: Script Validator (static analysis for common errors) +- ⏳ Phase 6.4: Debug Console Integration (captured console.log in dev mode) + +### Optional/Future Enhancements ⏳ +- ⏳ Phase 3.4: Example view functions and validation rules (documentation/samples) +- ⏳ Advanced gas metering and resource limits + +## Example Token Script + +```typescript +// Token with fees, rewards, and validation +function beforeTransfer(from: string, to: string, amount: bigint) { + // 1% fee on transfers + const fee = amount / 100n; + const netAmount = amount - fee; + + context.emit.subBalance(from, fee); + context.emit.addBalance("0xFeeCollector", fee); + context.emit.event("TransferFee", { from, amount: fee }); + + return { proceed: true, mutations: [], modifiedData: { netAmount } }; +} + +function afterTransfer(from: string, to: string, amount: bigint) { + // Reward recipient with bonus tokens + const bonus = amount / 20n; // 5% bonus + context.emit.addBalance(to, bonus); + context.emit.event("TransferBonus", { to, amount: bonus }); + + return { proceed: true, mutations: [] }; +} + +function canTransfer(from: string, to: string, amount: bigint): boolean { + // Whitelist validation + const whitelist = context.token.getStorage("whitelist") as string[] || []; + return whitelist.includes(from) && whitelist.includes(to); +} + +function getReward(address: string): bigint { + // View function: compute reward without state changes + const balance = context.token.getBalance(address); + const totalSupply = context.token.getTotalSupply(); + const rewardPool = context.token.getStorage("rewardPool") as bigint || 0n; + + return (balance * rewardPool) / totalSupply; +} +``` + +## Last Updated +2026-02-23 - Updated with Phase 3.3 token.callView nodeCall handler implementation diff --git a/.serena/memories/feature_scripting_system_phase2.md b/.serena/memories/feature_scripting_system_phase2.md new file mode 100644 index 000000000..bc0981930 --- /dev/null +++ b/.serena/memories/feature_scripting_system_phase2.md @@ -0,0 +1,82 @@ +# Token Scripting System - Phase 2 Complete + +## Components Implemented + +### Phase 2.1: Sandbox Runtime (TokenSandbox) +- SES (Secure EcmaScript) compartment isolation +- Deterministic execution with seeded PRNG +- Resource limits (timeout, gas tracking) +- Hardened endowments (Math, Date, context, token accessor) +- Hook execution support + +### Phase 2.2: Type Definitions (types.ts) +- `ScriptContext`: Execution context (caller, method, args, timestamp, etc.) +- `ScriptResult`: Discriminated union (ScriptSuccess | ScriptError) +- `StateMutation`: Discriminated union of 6 mutation types: + - `setBalance`, `addBalance`, `subBalance` + - `setAllowance`, `setStorage`, `emit` +- `HookContext`, `HookResult`, `HookType` for native operation hooks +- `SandboxConfig`, `TokenStateAccessor`, `TokenMetadata` + +### Phase 2.3: Script Executor Service +- **ScriptExecutor** (`ScriptExecutor.ts`): + - `executeMethod()`: Orchestrates script execution + - `executeHook()`: Runs hooks for native operations + - `validateMutationsAgainstToken()`: Business rule validation + - Builds context, delegates to TokenSandbox, validates mutations + +- **MutationApplier** (`MutationApplier.ts`): + - `applyMutations()`: Immutable state transformation + - Handles all 6 mutation types + - Collects emitted events + - Helper utilities: `isEmitMutation()`, `getStateMutations()`, `getEventMutations()` + +### Phase 2.4: Token State Accessor Builder +- `buildTokenStateAccessor()`: Builds read-only accessor from GCRTokenData +- `buildMinimalAccessor()`: Lightweight accessor for simple operations + +## Architecture Flow + +``` +Token Transaction + │ + ▼ +ScriptExecutor.executeMethod() + │ + ├─► buildTokenStateAccessor(tokenData) + │ + ├─► tokenSandbox.execute(scriptCode, context) + │ │ + │ ├─► SES Compartment + │ │ • Deterministic Math.random + │ │ • Fixed Date.now() + │ │ • Read-only token accessor + │ │ + │ └─► Returns StateMutation[] + │ + ├─► validateMutationsAgainstToken(mutations) + │ + └─► Return ScriptResult + │ + ▼ + applyMutations(tokenData, mutations) + │ + └─► MutationApplicationResult { newState, events } +``` + +## Key Design Decisions + +1. **Immutability**: MutationApplier creates deep copies; original state unmodified +2. **Discriminated Unions**: StateMutation uses type field for exhaustive switch/case +3. **Validation Layers**: TokenSandbox validates structure; ScriptExecutor validates business rules +4. **GCRTokenData**: Single source of truth in TokenStateAccessorBuilder +5. **Event Collection**: EmitMutation doesn't modify state, just collects events + +## Files Created/Modified + +- `src/libs/scripting/ScriptExecutor.ts` - High-level executor service +- `src/libs/scripting/MutationApplier.ts` - Mutation application +- `src/libs/scripting/index.ts` - Module exports +- `src/libs/scripting/types.ts` - Type definitions +- `src/libs/scripting/TokenSandbox.ts` - SES sandbox +- `src/libs/scripting/TokenStateAccessorBuilder.ts` - Accessor builder diff --git a/.serena/memories/feature_scripting_validation_rules.md b/.serena/memories/feature_scripting_validation_rules.md new file mode 100644 index 000000000..dabfdd2b7 --- /dev/null +++ b/.serena/memories/feature_scripting_validation_rules.md @@ -0,0 +1,98 @@ +# Token Script Validation Rules - Phase 3.2 + +## Summary +Phase 3.2 implemented custom validation rules support for token scripts, allowing pre-operation validation of native operations (transfer, mint, burn, approve) with boolean allow/deny logic. + +## Implementation Details + +### Core Components Added + +1. **Validation Types** (`src/libs/scripting/types.ts`) + - `ValidationRuleType`: `"canTransfer" | "canMint" | "canBurn" | "canApprove"` + - `ExecuteValidationRequest`: Request structure with tokenAddress, ruleType, args, tokenData + - `ValidationSuccess`/`ValidationError`: Result types with execution metadata + - Error types: `rule_not_found`, `execution_error`, `invalid_return`, `timeout` + +2. **TokenSandbox Integration** (`src/libs/scripting/TokenSandbox.ts:456-520`) + - `executeValidation()`: SES compartment execution for validation rules + - Boolean return type validation (rejects non-boolean returns) + - Deterministic PRNG seed: `0x76616c69` ("vali" in hex) + - Same read-only endowments as view functions via `createValidationEndowments()` + +3. **ScriptExecutor Integration** (`src/libs/scripting/ScriptExecutor.ts:456-492`) + - `executeValidation()`: High-level orchestration for validation execution + - Default-allow behavior when no script exists (operations allowed by default) + - Token accessor building from GCR data + - Config merging with sandbox defaults + +4. **HookExecutor Integration** (`src/libs/scripting/HookExecutor.ts:37-44, 230-275, 406-431`) + - **Phase 0: Validation Rule** execution added before all hooks + - `OPERATION_HOOKS` extended with `validationRule` mapping + - `buildValidationArgs()`: Converts operation data to validation function arguments + - Metadata tracking: `validationExecuted` field in `HookExecutionMetadata` + - Graceful handling: Missing rules allow operation, execution errors log warning but allow + +### Execution Flow + +``` +Native Operation Request + ↓ +Phase 0: Validation Rule Execution + ├─ canTransfer/canMint/canBurn/canApprove(args) + ├─ Returns: true (allow) | false (deny) + ├─ No script → Allow by default + └─ Execution error → Log warning, allow by default + ↓ + ├─ true → Continue to Phase 1 + └─ false → REJECT (return HookExecutionResult with rejection) + ↓ +Phase 1: beforeHook +Phase 2: Native Operation +Phase 3: afterHook +``` + +### Validation Rule Signatures + +- `canTransfer(from: string, to: string, amount: bigint): boolean` +- `canMint(to: string, amount: bigint): boolean` +- `canBurn(from: string, amount: bigint): boolean` +- `canApprove(owner: string, spender: string, amount: bigint): boolean` + +### Error Handling + +- **rule_not_found**: Validation rule doesn't exist → Operation allowed by default +- **execution_error**: Runtime error during validation → Log warning, allow by default +- **invalid_return**: Validation returned non-boolean → Validation fails +- **timeout**: Execution exceeded timeout limit → Validation fails + +### Key Design Decisions + +1. **Default Allow**: Missing validation rules don't break operations (optional enhancement) +2. **Read-Only**: Validation rules use same endowments as view functions (no state mutations) +3. **Boolean Only**: Must return true/false, enforced with explicit type checking +4. **Pre-Execution**: Run before hooks to provide earliest rejection point +5. **Error Tolerance**: Execution failures allow operation by default (configurable in future) + +## Documentation + +Comprehensive `VALIDATION_RULES.md` created with: +- System architecture and execution flow diagrams +- All validation rule types and signatures +- 6 example validation rules (whitelist, time-lock, limits, permission-based) +- Usage examples via nodeCall and HookExecutor +- Comparison: Validation Rules vs Hooks +- Error handling for all error types +- Best practices and security considerations +- Future enhancement roadmap + +## Related Files + +- `src/libs/scripting/types.ts`: Validation type definitions +- `src/libs/scripting/TokenSandbox.ts`: Low-level SES execution +- `src/libs/scripting/ScriptExecutor.ts`: High-level orchestration +- `src/libs/scripting/HookExecutor.ts`: Integration with native operations +- `src/libs/scripting/index.ts`: Public API exports +- `src/libs/scripting/VALIDATION_RULES.md`: Complete documentation + +## Last Updated +2026-02-23 - Phase 3.2 completed: Custom validation rules support fully implemented and documented diff --git a/.serena/memories/feature_scripting_view_functions.md b/.serena/memories/feature_scripting_view_functions.md new file mode 100644 index 000000000..09efbfff1 --- /dev/null +++ b/.serena/memories/feature_scripting_view_functions.md @@ -0,0 +1,157 @@ +# Token Scripting - View Functions + +## Summary +View functions are read-only script methods that allow querying token state without producing mutations. They are called via nodeCall (no consensus needed) and return computed values directly. + +## Architecture + +### ScriptExecutor.executeView() +High-level orchestration for view function execution: +- Builds token accessor from GCR data +- Gets script code from token data +- Delegates to TokenSandbox.executeView() +- Returns ViewResult with value or error + +### TokenSandbox.executeView() +Low-level SES execution for view functions: +- Creates read-only endowments (token, Math, JSON, console, BigInt) +- Evaluates script code in SES compartment +- Calls specified method with provided arguments +- Validates result does NOT contain mutations +- Returns computed value or rejects with error + +### Mutation Rejection +View functions MUST NOT return mutations: +- containsMutations() recursively checks result +- isMutationLike() detects mutation objects +- If mutations found: returns ViewError with errorType="mutation_rejected" + +## Types + +### ViewResult +```typescript +type ViewResult = ViewSuccess | ViewError + +interface ViewSuccess { + success: true + value: unknown + executionTimeMs: number + gasUsed: number +} + +interface ViewError { + success: false + error: string + errorType: "method_not_found" | "execution_error" | "mutation_rejected" | "timeout" + stack?: string + executionTimeMs: number + gasUsed: number +} +``` + +### ExecuteViewRequest +```typescript +interface ExecuteViewRequest { + tokenAddress: string + method: string + args: unknown[] + tokenData: GCRTokenData + config?: Partial +} +``` + +## Usage + +### From ScriptExecutor +```typescript +const result = await scriptExecutor.executeView({ + tokenAddress: "0x...", + method: "getCustomData", + args: ["some-key"], + tokenData: gcrTokenData +}) + +if (result.success) { + console.log(result.value) // Computed value +} else { + console.error(result.error, result.errorType) +} +``` + +### Example View Functions +```javascript +// In token script: + +// Read custom storage +function getCustomData(key) { + return token.storage[key] +} + +// Compute reward based on balance +function computeReward(address) { + const balance = token.balanceOf(address) + return balance * 0.05 // 5% annual reward +} + +// Check if user can perform action +function canTransfer(from, amount) { + return token.balanceOf(from) >= amount && !token.paused +} +``` + +## Key Differences from executeMethod() + +| Aspect | executeMethod() | executeView() | +|--------|----------------|---------------| +| Consensus | Required | Not required | +| Mutations | Allowed | Rejected | +| Call path | Transaction → Consensus | nodeCall → Direct | +| Randomness | Deterministic (block+tx) | Simple seed | +| Endowments | Full (context, token, Math, Date) | Minimal (token, Math, JSON, console, BigInt) | + +## Security + +### Read-Only Guarantee +View functions cannot: +- Modify token state +- Return mutations +- Access transaction context (no caller, txHash, blockHeight) + +### Determinism Not Required +Since view functions don't participate in consensus: +- Simple random seed (not blockchain-derived) +- No need for deterministic timestamps +- Can be called at any time without coordination + +## Integration Points + +### Phase 3.2: nodeCall Handler +```typescript +// In manageNodeCall.ts: +case "tokenViewCall": + const { tokenAddress, method, args } = params + const tokenData = await getTokenFromGCR(tokenAddress) + const result = await scriptExecutor.executeView({ + tokenAddress, + method, + args, + tokenData + }) + return result +``` + +### Phase 3.3: SDK Wrapper +```typescript +// In SDK: +demos.tokens.view(tokenAddress, method, args) +// → nodeCall("tokenViewCall", { tokenAddress, method, args }) +``` + +## Related +- ScriptExecutor: High-level orchestration +- TokenSandbox: Low-level execution +- types.ts: Type definitions +- Phase 3.1 acceptance criteria + +## Last Updated +2026-02-23 - Initial implementation of view function system diff --git a/.serena/memories/pattern_scripting_types_sdk_vs_node.md b/.serena/memories/pattern_scripting_types_sdk_vs_node.md new file mode 100644 index 000000000..f4961e742 --- /dev/null +++ b/.serena/memories/pattern_scripting_types_sdk_vs_node.md @@ -0,0 +1,169 @@ +# Scripting Types: SDK vs Node Differences + +## Overview + +The token scripting system has two parallel type definitions: +- **SDK types** (`sdks/src/types/token/TokenTypes.ts`): For external consumers and API contracts +- **Node types** (`node/src/libs/scripting/types.ts`): For internal implementation + +## Key Differences + +### StateMutation + +**SDK Version** (unified type with discriminator): +```typescript +export interface StateMutation { + type: "setBalance" | "addBalance" | "subBalance" | "setCustomState" | "setAllowance" + address?: string // Target address for balance operations + spender?: string // Spender address for allowance operations + value: string | number | Record + key?: string // Key for custom state operations +} +``` + +**Node Version** (discriminated union with separate interfaces): +```typescript +export type StateMutation = + | SetBalanceMutation + | AddBalanceMutation + | SubBalanceMutation + | SetAllowanceMutation + | SetStorageMutation + | EmitMutation + +export interface SetBalanceMutation { + type: "setBalance" + address: string + value: bigint +} +// ... each type has its own interface with specific required fields +``` + +**Rationale**: Node uses discriminated unions for type safety during internal processing. SDK uses a looser type for API flexibility. + +### ScriptContext + +**SDK Version**: +```typescript +export interface ScriptContext { + caller: string + method: string + args: unknown[] + tokenState: Readonly // Full state snapshot + tokenMetadata: Readonly // Full metadata + txTimestamp: number + prevBlockHash: string + blockHeight: number +} +``` + +**Node Version**: +```typescript +export interface ScriptContext { + caller: string + method: string + args: unknown[] + timestamp: number // Named differently (txTimestamp in SDK) + blockHeight: number + prevBlockHash: string + txHash: string // Additional field for PRNG seeding + token: TokenStateAccessor // Accessor interface, not full state +} +``` + +**Key Differences**: +- Node has `txHash` (used for deterministic PRNG seeding) +- Node uses `TokenStateAccessor` interface instead of raw state objects +- Field naming: `timestamp` vs `txTimestamp` + +### ScriptResult / ScriptExecutionResult + +**SDK Version**: +```typescript +export interface ScriptExecutionResult { + success: boolean + mutations: StateMutation[] + returnValue?: unknown + error?: string + complexity: number // Gas/complexity metrics +} +``` + +**Node Version**: +```typescript +export type ScriptResult = ScriptSuccess | ScriptError + +export interface ScriptSuccess { + success: true + mutations: StateMutation[] + returnValue?: unknown + gasUsed: number + executionTimeMs: number +} + +export interface ScriptError { + success: false + error: string + errorType: "timeout" | "gas_limit" | "runtime" | "validation" | "security" + gasUsed: number + executionTimeMs: number +} +``` + +**Key Differences**: +- Node uses discriminated union for success/error +- Node has `errorType` enum for categorized errors +- Node tracks `executionTimeMs` separately +- SDK uses `complexity`, Node uses `gasUsed` + +### Additional Node-Only Types + +```typescript +// Hook system (Node only) +export type HookType = "beforeTransfer" | "afterTransfer" | "beforeMint" | "afterMint" | "beforeBurn" | "afterBurn" + +export interface HookContext { + hookType: HookType + caller: string + timestamp: number + blockHeight: number + prevBlockHash: string + txHash: string + operation: TransferOperation | MintOperation | BurnOperation + token: TokenStateAccessor +} + +export interface HookResult { + allow: boolean + reason?: string + additionalMutations?: StateMutation[] + gasUsed: number + executionTimeMs: number +} + +// Sandbox configuration (Node only) +export interface SandboxConfig { + timeoutMs: number + maxGas: number + maxStackDepth: number + debug: boolean + enableConsole: boolean +} +``` + +## Conversion Guidelines + +When converting between SDK and Node types: + +### SDK → Node (receiving from external): +1. Parse `StateMutation.value` to appropriate Node type (bigint for balances) +2. Add `txHash` to context if not present +3. Build `TokenStateAccessor` from raw state objects + +### Node → SDK (sending to external): +1. Convert `bigint` values to `string` for JSON serialization +2. Flatten `errorType` into `error` message if needed +3. Map `gasUsed` to `complexity` + +## Last Updated +2026-02-22 - Initial documentation during Phase 2 implementation diff --git a/.serena/project.yml b/.serena/project.yml index 93009accd..6c0e528ab 100644 --- a/.serena/project.yml +++ b/.serena/project.yml @@ -1,9 +1,3 @@ -# language of the project (csharp, python, rust, java, typescript, go, cpp, or ruby) -# * For C, use cpp -# * For JavaScript, use typescript -# Special requirements: -# * csharp: Requires the presence of a .sln file in the project folder. -language: typescript # whether to use the project's gitignore file to ignore files # Added on 2025-04-07 @@ -12,7 +6,10 @@ ignore_all_files_in_gitignore: false # same syntax as gitignore, so you can use * and ** # Was previously called `ignored_dirs`, please update your config if you are using that. # Added (renamed) on 2025-04-07 -ignored_paths: [node_modules, __pycache__, target] +ignored_paths: +- node_modules +- __pycache__ +- target # whether the project is in read-only mode # If set to true, all editing tools will be disabled and attempts to use them will result in an error @@ -63,5 +60,62 @@ excluded_tools: [] # initial prompt for the project. It will always be given to the LLM upon activating the project # (contrary to the memories, which are loaded on demand). initial_prompt: "" - +# the name by which the project can be referenced within Serena project_name: "node" + +# list of tools to include that would otherwise be disabled (particularly optional tools that are disabled by default) +included_optional_tools: [] + +# fixed set of tools to use as the base tool set (if non-empty), replacing Serena's default set of tools. +# This cannot be combined with non-empty excluded_tools or included_optional_tools. +fixed_tools: [] + +# list of mode names to that are always to be included in the set of active modes +# The full set of modes to be activated is base_modes + default_modes. +# If the setting is undefined, the base_modes from the global configuration (serena_config.yml) apply. +# Otherwise, this setting overrides the global configuration. +# Set this to [] to disable base modes for this project. +# Set this to a list of mode names to always include the respective modes for this project. +base_modes: + +# list of mode names that are to be activated by default. +# The full set of modes to be activated is base_modes + default_modes. +# If the setting is undefined, the default_modes from the global configuration (serena_config.yml) apply. +# Otherwise, this overrides the setting from the global configuration (serena_config.yml). +# This setting can, in turn, be overridden by CLI parameters (--mode). +default_modes: + +# override of the corresponding setting in serena_config.yml, see the documentation there. +# If null or missing, the value from the global config is used. +symbol_info_budget: + +# the encoding used by text files in the project +# For a list of possible encodings, see https://docs.python.org/3.11/library/codecs.html#standard-encodings +encoding: utf-8 + + +# list of languages for which language servers are started; choose from: +# al bash clojure cpp csharp +# csharp_omnisharp dart elixir elm erlang +# fortran fsharp go groovy haskell +# java julia kotlin lua markdown +# matlab nix pascal perl php +# php_phpactor powershell python python_jedi r +# rego ruby ruby_solargraph rust scala +# swift terraform toml typescript typescript_vts +# vue yaml zig +# (This list may be outdated. For the current list, see values of Language enum here: +# https://github.com/oraios/serena/blob/main/src/solidlsp/ls_config.py +# For some languages, there are alternative language servers, e.g. csharp_omnisharp, ruby_solargraph.) +# Note: +# - For C, use cpp +# - For JavaScript, use typescript +# - For Free Pascal/Lazarus, use pascal +# Special requirements: +# Some languages require additional setup/installations. +# See here for details: https://oraios.github.io/serena/01-about/020_programming-languages.html#language-servers +# When using multiple languages, the first language server that supports a given file will be used for that file. +# The first language is the default language and the respective language server will be used as a fallback. +# Note that when using the JetBrains backend, language servers are not used and this list is correspondingly ignored. +languages: +- typescript diff --git a/AGENTS.md b/AGENTS.md index c06265633..4801a7127 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,5 +1,12 @@ # AI Agent Instructions for Demos Network +Semantic map: see `repository-semantic-map/`. + +## Checks (no tests) + +- Use `bun run check` as the canonical “magic” check (authoritative `tsc` via `tsconfig.check.json` + a Bun bundling sanity check). +- Use `bun run check:full` when you need to type-check the full repository. + ## Issue Tracking with bd (beads) **IMPORTANT**: This project uses **bd (beads)** for ALL issue tracking. Do NOT use markdown TODOs, task lists, or other tracking methods. diff --git a/CONSOLE_LOG_AUDIT.md b/CONSOLE_LOG_AUDIT.md deleted file mode 100644 index 2cdf8a5c0..000000000 --- a/CONSOLE_LOG_AUDIT.md +++ /dev/null @@ -1,167 +0,0 @@ -# Console.log Audit Report - -Generated: 2024-12-16 - -## Summary - -Found **500+** rogue `console.log/warn/error` calls outside of `CategorizedLogger.ts`. -These bypass the async buffering optimization and can block the event loop. - ---- - -## 🔴 HIGH PRIORITY - Hot Paths (Frequently Executed) - -These run during normal node operation and should be converted to CategorizedLogger: - -### Consensus Module (`src/libs/consensus/`) -| File | Lines | Category | -|------|-------|----------| -| `v2/PoRBFT.ts` | 245, 332-333, 527, 533 | CONSENSUS | -| `v2/types/secretaryManager.ts` | 900 | CONSENSUS | -| `v2/routines/getShard.ts` | 18 | CONSENSUS | -| `routines/proofOfConsensus.ts` | 15-57 (many) | CONSENSUS | - -### Network Module (`src/libs/network/`) -| File | Lines | Category | -|------|-------|----------| -| `endpointHandlers.ts` | 112-642 (many) | NETWORK | -| `server_rpc.ts` | 431-432 | NETWORK | -| `manageExecution.ts` | 19-117 (many) | NETWORK | -| `manageNodeCall.ts` | 47-466 (many) | NETWORK | -| `manageHelloPeer.ts` | 36 | NETWORK | -| `manageConsensusRoutines.ts` | 194-333 | CONSENSUS | -| `routines/timeSync.ts` | 30-84 (many) | NETWORK | -| `routines/nodecalls/*.ts` | Multiple files | NETWORK | - -### Peer Module (`src/libs/peer/`) -| File | Lines | Category | -|------|-------|----------| -| `Peer.ts` | 113, 125 | PEER | -| `PeerManager.ts` | 52-371 (many) | PEER | -| `routines/checkOfflinePeers.ts` | 9-27 | PEER | -| `routines/peerBootstrap.ts` | 31-100 (many) | PEER | -| `routines/peerGossip.ts` | 228 | PEER | -| `routines/getPeerConnectionString.ts` | 35-39 | PEER | -| `routines/getPeerIdentity.ts` | 32-76 (many) | PEER | - -### Blockchain Module (`src/libs/blockchain/`) -| File | Lines | Category | -|------|-------|----------| -| `transaction.ts` | 115-490 (many) | CHAIN | -| `chain.ts` | 57-666 (many) | CHAIN | -| `routines/Sync.ts` | 283, 368 | SYNC | -| `routines/validateTransaction.ts` | 38-288 (many) | CHAIN | -| `routines/executeOperations.ts` | 51-98 | CHAIN | -| `gcr/gcr.ts` | 212-1052 (many) | CHAIN | -| `gcr/handleGCR.ts` | 280-399 (many) | CHAIN | - -### OmniProtocol Module (`src/libs/omniprotocol/`) -| File | Lines | Category | -|------|-------|----------| -| `transport/PeerConnection.ts` | 407, 464 | NETWORK | -| `transport/ConnectionPool.ts` | 409 | NETWORK | -| `transport/TLSConnection.ts` | 104-189 (many) | NETWORK | -| `server/OmniProtocolServer.ts` | 76-181 (many) | NETWORK | -| `server/InboundConnection.ts` | 55-227 (many) | NETWORK | -| `server/TLSServer.ts` | 110-289 (many) | NETWORK | -| `protocol/handlers/*.ts` | Multiple files | NETWORK | -| `integration/*.ts` | Multiple files | NETWORK | - ---- - -## 🟡 MEDIUM PRIORITY - Occasional Execution - -These run less frequently but still during operation: - -### Identity Module (`src/libs/identity/`) -| File | Lines | Category | -|------|-------|----------| -| `tools/twitter.ts` | 456, 572 | IDENTITY | -| `tools/discord.ts` | 106 | IDENTITY | - -### Abstraction Module (`src/libs/abstraction/`) -| File | Lines | Category | -|------|-------|----------| -| `index.ts` | 253 | IDENTITY | -| `web2/github.ts` | 25 | IDENTITY | -| `web2/parsers.ts` | 53 | IDENTITY | - -### Crypto Module (`src/libs/crypto/`) -| File | Lines | Category | -|------|-------|----------| -| `cryptography.ts` | 28-271 (many) | CORE | -| `forgeUtils.ts` | 8-45 | CORE | -| `pqc/enigma.ts` | 47 | CORE | - ---- - -## 🟢 LOW PRIORITY - Cold Paths - -### Startup/Shutdown (`src/index.ts`) -- Lines: 387, 477-565 (shutdown handlers, startup logs) -- These run once, acceptable as console for visibility - -### Feature Modules (Occasional Use) -- `src/features/multichain/*.ts` - XM operations -- `src/features/fhe/*.ts` - FHE operations -- `src/features/bridges/*.ts` - Bridge operations -- `src/features/web2/*.ts` - Web2 proxy -- `src/features/InstantMessagingProtocol/*.ts` - IM server -- `src/features/activitypub/*.ts` - ActivityPub -- `src/features/pgp/*.ts` - PGP operations - ---- - -## ⚪ ACCEPTABLE - Standalone Tools - -These are CLI utilities where console.log is appropriate: - -- `src/benchmark.ts` - System benchmark tool -- `src/utilities/keyMaker.ts` - Key generation tool -- `src/utilities/showPubkey.ts` - Public key display -- `src/utilities/backupAndRestore.ts` - Backup utility -- `src/utilities/commandLine.ts` - CLI interface -- `src/tests/*.ts` - Test files -- `src/client/*.ts` - Client CLI - ---- - -## Recommendations - -### Immediate Actions (P0) -1. Convert consensus hot path logs to `log.debug()` -2. Convert peer/network hot path logs to `log.debug()` -3. Convert blockchain validation logs to `log.debug()` - -### Short Term (P1) -4. Convert OmniProtocol logs to CategorizedLogger -5. Convert GCR operation logs to CategorizedLogger -6. Add `OMNI` or similar category for OmniProtocol - -### Medium Term (P2) -7. Audit feature modules and convert where needed -8. Consider adding more log categories for better filtering - ---- - -## Conversion Pattern - -```typescript -// Before (blocking): -console.log("[PEER] Connected to:", peer) - -// After (async buffered): -import { getLogger } from "@/utilities/tui/CategorizedLogger" -const log = getLogger() -log.debug("PEER", `Connected to: ${peer}`) -``` - ---- - -## Statistics - -- Total rogue console calls: ~500+ -- Hot path calls (HIGH): ~200 -- Medium priority: ~50 -- Low priority (features): ~150 -- Acceptable (tools): ~100 diff --git a/L2PS_TESTING.md b/L2PS_TESTING.md deleted file mode 100644 index 608df0735..000000000 --- a/L2PS_TESTING.md +++ /dev/null @@ -1,496 +0,0 @@ -# L2PS Testing & Validation Guide - -**Purpose**: Checklist for validating L2PS implementation when node can be safely started -**Status**: Implementation complete, awaiting runtime validation -**Date Created**: 2025-01-31 - ---- - -## Pre-Start Validation - -### 1. Database Schema Check -**Goal**: Verify l2ps_hashes table exists - -```bash -# Check if TypeORM created the table -sqlite3 data/chain.db ".schema l2ps_hashes" -# OR -psql -d demos_node -c "\d l2ps_hashes" -``` - -**Expected Output**: -```sql -CREATE TABLE l2ps_hashes ( - l2ps_uid TEXT PRIMARY KEY, - hash TEXT NOT NULL, - transaction_count INTEGER NOT NULL, - block_number BIGINT DEFAULT 0, - timestamp BIGINT NOT NULL -); -``` - -**If Missing**: -- TypeORM auto-create may need explicit migration -- Check datasource.ts synchronize settings -- Consider manual migration generation - ---- - -## Node Startup Validation - -### 2. L2PSHashes Initialization Check -**Goal**: Verify L2PSHashes auto-initializes on startup - -**What to Look For in Logs**: -``` -[L2PS Hashes] Initialized successfully -``` - -**If Missing**: -- Check if endpointHandlers.ts is loaded (imports L2PSHashes) -- Verify import statement exists: `import L2PSHashes from "@/libs/blockchain/l2ps_hashes"` -- Check for initialization errors in startup logs - -**Validation Command** (when node running): -```bash -# Check logs for L2PS Hashes initialization -grep "L2PS Hashes" logs/node.log -``` - ---- - -## Phase 3b Testing: Validator Hash Storage - -### 3. Hash Storage Test -**Goal**: Verify validators can store L2PS hash mappings - -**Prerequisites**: -- Node must be a validator -- At least one L2PS network with hash updates - -**Test Steps**: -1. Trigger hash update (L2PSHashService runs every 5 seconds) -2. Verify validator receives hash update transaction -3. Check handleL2PSHashUpdate processes it -4. Verify hash stored in database - -**Validation Queries**: -```bash -# Check stored hashes -sqlite3 data/chain.db "SELECT * FROM l2ps_hashes;" - -# Expected: Rows with l2ps_uid, hash, transaction_count, block_number, timestamp -``` - -**What to Look For in Logs**: -``` -[L2PS Hash Update] Stored hash for L2PS : ... ( txs) -``` - -**Expected Behavior**: -- Hash mappings update every 5 seconds (if L2PS has transactions) -- Validators never see transaction content (only hashes) -- Updates don't break if validator isn't in network - ---- - -## Phase 3c-1 Testing: NodeCall Endpoints - -### 4. getL2PSMempoolInfo Test -**Goal**: Verify mempool info endpoint works - -**Test Method** (from another node or script): -```typescript -const response = await peer.call({ - message: "getL2PSMempoolInfo", - data: { l2psUid: "test_network_1" }, - muid: "test_mempool_info" -}) -``` - -**Expected Response**: -```json -{ - "result": 200, - "response": { - "l2psUid": "test_network_1", - "transactionCount": 42, - "lastTimestamp": 1706745600000, - "oldestTimestamp": 1706700000000 - } -} -``` - -**Error Cases to Test**: -- Missing l2psUid → 400 response -- Non-existent L2PS UID → 200 with transactionCount: 0 -- Database errors → 500 response - ---- - -### 5. getL2PSTransactions Test -**Goal**: Verify transaction sync endpoint works - -**Test Method**: -```typescript -// Full sync -const response1 = await peer.call({ - message: "getL2PSTransactions", - data: { l2psUid: "test_network_1" }, - muid: "test_full_sync" -}) - -// Incremental sync -const response2 = await peer.call({ - message: "getL2PSTransactions", - data: { - l2psUid: "test_network_1", - since_timestamp: 1706700000000 - }, - muid: "test_incremental_sync" -}) -``` - -**Expected Response**: -```json -{ - "result": 200, - "response": { - "l2psUid": "test_network_1", - "transactions": [ - { - "hash": "0xabc...", - "l2ps_uid": "test_network_1", - "original_hash": "0xdef...", - "encrypted_tx": { "ciphertext": "..." }, - "timestamp": 1706700000000, - "block_number": 12345 - } - ], - "count": 1 - } -} -``` - -**What to Verify**: -- Only encrypted data returned (validators can't decrypt) -- Incremental sync filters by timestamp correctly -- Duplicate transactions handled gracefully - ---- - -## Phase 3c-2 Testing: Concurrent Sync Service - -### 6. Peer Discovery Test -**Goal**: Verify L2PS participant discovery works - -**Test Scenario**: Start multiple nodes participating in same L2PS network - -**What to Look For in Logs**: -``` -[L2PS Sync] Discovered participants for L2PS -[L2PS Sync] Discovery complete: total participants across networks -``` - -**Manual Test**: -```typescript -import { discoverL2PSParticipants } from "@/libs/l2ps/L2PSConcurrentSync" - -const peers = PeerManager.getInstance().getPeers() -const l2psUids = ["test_network_1", "test_network_2"] -const participantMap = await discoverL2PSParticipants(peers, l2psUids) - -console.log(`Network 1: ${participantMap.get("test_network_1")?.length} participants`) -``` - -**Expected Behavior**: -- Parallel queries to all peers -- Graceful failure handling (some peers may be unreachable) -- Returns map of L2PS UID → participating peers - ---- - -### 7. Mempool Sync Test -**Goal**: Verify incremental mempool sync works - -**Test Scenario**: -1. Node A has 50 L2PS transactions -2. Node B has 30 L2PS transactions (older subset) -3. Sync B with A - -**What to Look For in Logs**: -``` -[L2PS Sync] Starting sync with peer for L2PS -[L2PS Sync] Local: 30 txs, Peer: 50 txs for -[L2PS Sync] Received 20 transactions from peer -[L2PS Sync] Sync complete for : 20 new, 0 duplicates -``` - -**Manual Test**: -```typescript -import { syncL2PSWithPeer } from "@/libs/l2ps/L2PSConcurrentSync" - -const peer = PeerManager.getInstance().getPeerByMuid("") -await syncL2PSWithPeer(peer, "test_network_1") -``` - -**Expected Behavior**: -- Only fetches missing transactions (since_timestamp filter) -- Handles duplicates gracefully (no errors) -- Doesn't break on peer failures - ---- - -### 8. Participation Exchange Test -**Goal**: Verify participation broadcast works - -**Test Scenario**: Node joins new L2PS network, informs peers - -**What to Look For in Logs**: -``` -[L2PS Sync] Broadcasting participation in L2PS networks to peers -[L2PS Sync] Exchanged participation info with peer -[L2PS Sync] Participation exchange complete for networks -``` - -**Manual Test**: -```typescript -import { exchangeL2PSParticipation } from "@/libs/l2ps/L2PSConcurrentSync" - -const peers = PeerManager.getInstance().getPeers() -const myNetworks = ["test_network_1", "test_network_2"] -await exchangeL2PSParticipation(peers, myNetworks) -``` - -**Expected Behavior**: -- Fire-and-forget (doesn't block) -- Parallel execution to all peers -- Graceful failure handling - ---- - -## Phase 3c-3 Testing: Blockchain Sync Integration - -### 9. mergePeerlist Integration Test -**Goal**: Verify L2PS participation exchange on peer discovery - -**Test Scenario**: New peer joins network - -**What to Look For in Logs**: -``` -[Sync] Exchanging L2PS participation with new peers -``` - -**Expected Behavior**: -- Only triggers if node participates in L2PS networks -- Runs in background (doesn't block blockchain sync) -- Errors don't break peer merging - ---- - -### 10. Participant Discovery Integration Test -**Goal**: Verify L2PS discovery runs during block sync - -**Test Scenario**: Node starts syncing blockchain - -**What to Look For in Logs**: -``` -[Sync] Discovered L2PS participants: networks, total peers -``` - -**Expected Behavior**: -- Runs concurrently with block discovery (non-blocking) -- Only triggers if node participates in L2PS networks -- Errors don't break blockchain sync - ---- - -### 11. Mempool Sync Integration Test -**Goal**: Verify L2PS mempool sync during blockchain sync - -**Test Scenario**: Node syncing blocks from peer - -**What to Look For in Logs**: -``` -[Sync] L2PS mempool synced: -``` - -**Expected Behavior**: -- Syncs each L2PS network the node participates in -- Runs in background (doesn't block blockchain sync) -- Errors logged but don't break blockchain sync - -**Critical Test**: Introduce L2PS sync failure, verify blockchain sync continues - ---- - -## Privacy Validation - -### 12. Validator Content-Blindness Test -**Goal**: Verify validators never see transaction content - -**What to Verify**: -- Validators ONLY receive hash mappings (via handleL2PSHashUpdate) -- Validators CANNOT call getL2PSTransactions (only participants can) -- L2PSHashes table contains ONLY hashes, no encrypted_tx field -- Logs never show decrypted transaction content - -**Test**: As validator, attempt to access L2PS transactions -```typescript -// This should fail or return empty (validators don't store encrypted_tx) -const txs = await L2PSMempool.getByUID("test_network_1", "processed") -console.log(txs.length) // Should be 0 for validators -``` - ---- - -## Performance Testing - -### 13. Concurrent Sync Performance -**Goal**: Measure sync performance with multiple peers/networks - -**Test Scenarios**: -1. **Single Network, Multiple Peers**: 5 peers, 1 L2PS network -2. **Multiple Networks, Single Peer**: 1 peer, 5 L2PS networks -3. **Multiple Networks, Multiple Peers**: 5 peers, 5 L2PS networks - -**Metrics to Measure**: -- Time to discover all participants -- Time to sync 100 transactions -- Memory usage during sync -- CPU usage during sync -- Network bandwidth usage - -**Validation**: -- All operations should complete without blocking blockchain sync -- No memory leaks (check after 1000+ transactions) -- Error rate should be <5% (graceful peer failures expected) - ---- - -## Error Recovery Testing - -### 14. Peer Failure Scenarios -**Goal**: Verify graceful error handling - -**Test Cases**: -1. Peer disconnects during sync → Should continue with other peers -2. Peer returns invalid data → Should log error and continue -3. Peer returns 500 error → Should try next peer -4. All peers unreachable → Should log and retry later - -**What to Look For**: Errors logged but blockchain sync never breaks - ---- - -### 15. Database Failure Scenarios -**Goal**: Verify database error handling - -**Test Cases**: -1. l2ps_hashes table doesn't exist → Should log clear error -2. Database full → Should log error and gracefully degrade -3. Concurrent writes → Should handle with transactions - ---- - -## Edge Cases - -### 16. Empty Network Test -**Goal**: Verify behavior with no L2PS transactions - -**Test**: Node participates in L2PS network but no transactions yet - -**Expected Behavior**: -- No errors logged -- Hash generation skips empty networks -- Sync operations return empty results -- Endpoints return transactionCount: 0 - ---- - -### 17. Large Mempool Test -**Goal**: Verify performance with large transaction counts - -**Test**: L2PS network with 10,000+ transactions - -**What to Monitor**: -- Memory usage during sync -- Query performance for getL2PSTransactions -- Hash generation time -- Database query performance - -**Validation**: Operations should remain responsive (<2s per operation) - ---- - -## Completion Checklist - -Use this checklist when validating L2PS implementation: - -### Database -- [ ] l2ps_hashes table exists with correct schema -- [ ] L2PSHashes auto-initializes on startup -- [ ] Hash storage works correctly -- [ ] Statistics queries work - -### Phase 3b -- [ ] Validators receive and store hash updates -- [ ] Validators never see transaction content -- [ ] Hash mappings update every 5 seconds -- [ ] getStats() returns correct statistics - -### Phase 3c-1 -- [ ] getL2PSMempoolInfo returns correct data -- [ ] getL2PSTransactions returns encrypted transactions -- [ ] Incremental sync with since_timestamp works -- [ ] Error cases handled correctly (400, 500) - -### Phase 3c-2 -- [ ] discoverL2PSParticipants finds all peers -- [ ] syncL2PSWithPeer fetches missing transactions -- [ ] exchangeL2PSParticipation broadcasts to peers -- [ ] All functions handle errors gracefully - -### Phase 3c-3 -- [ ] mergePeerlist exchanges participation -- [ ] getHigestBlockPeerData discovers participants -- [ ] requestBlocks syncs mempools -- [ ] L2PS operations never block blockchain sync -- [ ] L2PS errors don't break blockchain operations - -### Privacy -- [ ] Validators content-blind verified -- [ ] Only encrypted data transmitted -- [ ] No transaction content in validator logs -- [ ] L2PSHashes stores ONLY hashes - -### Performance -- [ ] Concurrent operations don't block -- [ ] No memory leaks detected -- [ ] Query performance acceptable -- [ ] Error rate <5% - ---- - -## Known Issues to Watch For - -1. **Database Schema**: If l2ps_hashes table doesn't auto-create, need manual migration -2. **Initialization Order**: L2PSHashes must initialize before handleL2PSHashUpdate is called -3. **Shared State**: Ensure l2psJoinedUids is populated before L2PS operations -4. **Peer Discovery**: First discovery may be slow (cold start, no cached participants) -5. **Error Cascades**: Watch for repeated errors causing log spam - ---- - -## Success Criteria - -L2PS implementation is validated when: -✅ All database tables exist and initialized -✅ All 17 test scenarios pass -✅ Zero errors during normal operation -✅ Blockchain sync unaffected by L2PS operations -✅ Privacy guarantees maintained -✅ Performance within acceptable bounds -✅ All edge cases handled gracefully - -**When Complete**: Update l2ps_implementation_status memory with testing results diff --git a/OMNIPROTOCOL_SETUP.md b/OMNIPROTOCOL_SETUP.md deleted file mode 100644 index b74a3646d..000000000 --- a/OMNIPROTOCOL_SETUP.md +++ /dev/null @@ -1,294 +0,0 @@ -# OmniProtocol Server Setup Guide - -## Quick Start - -The OmniProtocol TCP server is now integrated into the node startup. To enable it, simply set the environment variable: - -```bash -export OMNI_ENABLED=true -``` - -Then start your node normally: - -```bash -npm start -``` - -## Environment Variables - -### Required - -- **OMNI_ENABLED** - Enable/disable OmniProtocol server - - Values: `true` or `false` - - Default: `false` (disabled) - - Example: `OMNI_ENABLED=true` - -### Optional - -- **OMNI_PORT** - TCP port for OmniProtocol server - - Default: `HTTP_PORT + 1` (e.g., if HTTP is 3000, OMNI will be 3001) - - Example: `OMNI_PORT=3001` - -## Configuration Examples - -### .env file - -Add to your `.env` file: - -```bash -# OmniProtocol TCP Server -OMNI_ENABLED=true -OMNI_PORT=3001 -``` - -### Command line - -```bash -OMNI_ENABLED=true OMNI_PORT=3001 npm start -``` - -### Docker - -```dockerfile -ENV OMNI_ENABLED=true -ENV OMNI_PORT=3001 -``` - -## Startup Output - -When enabled, you'll see: - -``` -[MAIN] ✅ OmniProtocol server started on port 3001 -``` - -When disabled: - -``` -[MAIN] OmniProtocol server disabled (set OMNI_ENABLED=true to enable) -``` - -## Verification - -### Check if server is listening - -```bash -# Check if port is open -netstat -an | grep 3001 - -# Or use lsof -lsof -i :3001 -``` - -### Test connection - -```bash -# Simple TCP connection test -nc -zv localhost 3001 -``` - -### View logs - -The OmniProtocol server logs to console with prefix `[OmniProtocol]`: - -``` -[OmniProtocol] ✅ Server listening on port 3001 -[OmniProtocol] 📥 Connection accepted from 192.168.1.100:54321 -[OmniProtocol] ❌ Connection rejected from 192.168.1.200:12345: capacity -``` - -## Graceful Shutdown - -The server automatically shuts down gracefully when you stop the node: - -```bash -# Press Ctrl+C or send SIGTERM -kill -TERM -``` - -Output: -``` -[SHUTDOWN] Received SIGINT, shutting down gracefully... -[SHUTDOWN] Stopping OmniProtocol server... -[OmniProtocol] Stopping server... -[OmniProtocol] Closing 5 connections... -[OmniProtocol] Server stopped -[SHUTDOWN] Cleanup complete, exiting... -``` - -## Troubleshooting - -### Server fails to start - -**Error**: `Error: listen EADDRINUSE: address already in use :::3001` - -**Solution**: Port is already in use. Either: -1. Change OMNI_PORT to a different port -2. Stop the process using port 3001 - -**Check what's using the port**: -```bash -lsof -i :3001 -``` - -### No connections accepted - -**Check firewall**: -```bash -# Ubuntu/Debian -sudo ufw allow 3001/tcp - -# CentOS/RHEL -sudo firewall-cmd --add-port=3001/tcp --permanent -sudo firewall-cmd --reload -``` - -### Authentication failures - -If you see authentication errors in logs: - -``` -[OmniProtocol] Authentication failed for opcode execute: Signature verification failed -``` - -**Possible causes**: -- Client using wrong private key -- Timestamp skew >5 minutes (check system time) -- Corrupted message in transit - -**Fix**: -1. Verify client keys match peer identity -2. Sync system time with NTP -3. Check network for packet corruption - -## Performance Tuning - -### Connection Limits - -Default: 1000 concurrent connections - -To increase, modify in `src/index.ts`: - -```typescript -const omniServer = await startOmniProtocolServer({ - enabled: true, - port: indexState.OMNI_PORT, - maxConnections: 5000, // Increase limit -}) -``` - -### Timeouts - -Default settings: -- Auth timeout: 5 seconds -- Idle timeout: 10 minutes (600,000ms) - -To adjust: - -```typescript -const omniServer = await startOmniProtocolServer({ - enabled: true, - port: indexState.OMNI_PORT, - authTimeout: 10000, // 10 seconds - connectionTimeout: 300000, // 5 minutes -}) -``` - -### System Limits - -For high connection counts (>1000), increase system limits: - -```bash -# Increase file descriptor limit -ulimit -n 65536 - -# Make permanent in /etc/security/limits.conf -* soft nofile 65536 -* hard nofile 65536 - -# TCP tuning for Linux -sudo sysctl -w net.core.somaxconn=4096 -sudo sysctl -w net.ipv4.tcp_max_syn_backlog=8192 -``` - -## Migration Strategy - -### Phase 1: HTTP Only (Default) - -Node runs with HTTP only, OmniProtocol disabled: - -```bash -OMNI_ENABLED=false npm start -``` - -### Phase 2: Dual Protocol (Testing) - -Node runs both HTTP and OmniProtocol: - -```bash -OMNI_ENABLED=true npm start -``` - -- HTTP continues to work normally -- OmniProtocol available for testing -- Automatic fallback to HTTP if OmniProtocol fails - -### Phase 3: OmniProtocol Preferred (Production) - -Configure PeerOmniAdapter to prefer OmniProtocol: - -```typescript -// In your code -import { PeerOmniAdapter } from "./libs/omniprotocol/integration/peerAdapter" - -const adapter = new PeerOmniAdapter({ - config: { - migration: { - mode: "OMNI_PREFERRED", // Use OmniProtocol when available - omniPeers: new Set(["peer-identity-1", "peer-identity-2"]) - } - } -}) -``` - -## Security Considerations - -### Current Status - -✅ Ed25519 authentication -✅ Timestamp replay protection (±5 minutes) -✅ Connection limits -✅ Per-handler auth requirements - -⚠️ **Missing** (not production-ready yet): -- ❌ Rate limiting (DoS vulnerable) -- ❌ TLS/SSL (plain TCP) -- ❌ Per-IP connection limits - -### Recommendations - -**For testing/development**: -- Enable on localhost only -- Use behind firewall/VPN -- Monitor connection counts - -**For production** (once rate limiting is added): -- Enable rate limiting -- Use behind reverse proxy -- Monitor for abuse patterns -- Consider TLS/SSL for public networks - -## Next Steps - -1. **Enable the server**: Set `OMNI_ENABLED=true` -2. **Start the node**: `npm start` -3. **Verify startup**: Check logs for "OmniProtocol server started" -4. **Test locally**: Connect from another node on same network -5. **Monitor**: Watch logs for connections and errors - -## Support - -For issues or questions: -- Check implementation status: `src/libs/omniprotocol/IMPLEMENTATION_STATUS.md` -- View specifications: `OmniProtocol/08_TCP_SERVER_IMPLEMENTATION.md` -- Authentication details: `OmniProtocol/09_AUTHENTICATION_IMPLEMENTATION.md` diff --git a/OMNIPROTOCOL_TLS_GUIDE.md b/OMNIPROTOCOL_TLS_GUIDE.md deleted file mode 100644 index 11cdc02ce..000000000 --- a/OMNIPROTOCOL_TLS_GUIDE.md +++ /dev/null @@ -1,455 +0,0 @@ -# OmniProtocol TLS/SSL Guide - -Complete guide to enabling and using TLS encryption for OmniProtocol. - -## Quick Start - -### 1. Enable TLS in Environment - -Add to your `.env` file: - -```bash -# Enable OmniProtocol server -OMNI_ENABLED=true -OMNI_PORT=3001 - -# Enable TLS encryption -OMNI_TLS_ENABLED=true -OMNI_TLS_MODE=self-signed -OMNI_TLS_MIN_VERSION=TLSv1.3 -``` - -### 2. Start Node - -```bash -npm start -``` - -The node will automatically: -- Generate a self-signed certificate (first time) -- Store it in `./certs/node-cert.pem` and `./certs/node-key.pem` -- Start TLS server on port 3001 - -### 3. Verify TLS - -Check logs for: -``` -[TLS] Generating self-signed certificate... -[TLS] Certificate generated successfully -[TLSServer] 🔒 Listening on 0.0.0.0:3001 (TLS TLSv1.3) -``` - -## Environment Variables - -### Required - -- **OMNI_TLS_ENABLED** - Enable TLS encryption - - Values: `true` or `false` - - Default: `false` - -### Optional - -- **OMNI_TLS_MODE** - Certificate mode - - Values: `self-signed` or `ca` - - Default: `self-signed` - -- **OMNI_CERT_PATH** - Path to certificate file - - Default: `./certs/node-cert.pem` - - Auto-generated if doesn't exist - -- **OMNI_KEY_PATH** - Path to private key file - - Default: `./certs/node-key.pem` - - Auto-generated if doesn't exist - -- **OMNI_CA_PATH** - Path to CA certificate (for CA mode) - - Default: none - - Required only for `ca` mode - -- **OMNI_TLS_MIN_VERSION** - Minimum TLS version - - Values: `TLSv1.2` or `TLSv1.3` - - Default: `TLSv1.3` - - Recommendation: Use TLSv1.3 for better security - -## Certificate Modes - -### Self-Signed Mode (Default) - -Each node generates its own certificate. Security relies on certificate pinning. - -**Pros:** -- No CA infrastructure needed -- Quick setup -- Perfect for closed networks - -**Cons:** -- Manual certificate management -- Need to exchange fingerprints -- Not suitable for public networks - -**Setup:** -```bash -OMNI_TLS_MODE=self-signed -``` - -Certificates are auto-generated on first start. - -### CA Mode (Production) - -Use a Certificate Authority to sign certificates. - -**Pros:** -- Standard PKI infrastructure -- Automatic trust chain -- Suitable for public networks - -**Cons:** -- Requires CA setup -- More complex configuration - -**Setup:** -```bash -OMNI_TLS_MODE=ca -OMNI_CERT_PATH=./certs/node-cert.pem -OMNI_KEY_PATH=./certs/node-key.pem -OMNI_CA_PATH=./certs/ca.pem -``` - -## Certificate Management - -### Manual Certificate Generation - -To generate certificates manually: - -```bash -# Create certs directory -mkdir -p certs - -# Generate private key -openssl genrsa -out certs/node-key.pem 2048 - -# Generate self-signed certificate (valid for 1 year) -openssl req -new -x509 \ - -key certs/node-key.pem \ - -out certs/node-cert.pem \ - -days 365 \ - -subj "/CN=omni-node/O=DemosNetwork/C=US" - -# Set proper permissions -chmod 600 certs/node-key.pem -chmod 644 certs/node-cert.pem -``` - -### Certificate Fingerprinting - -Get certificate fingerprint for pinning: - -```bash -openssl x509 -in certs/node-cert.pem -noout -fingerprint -sha256 -``` - -Output: -``` -SHA256 Fingerprint=AB:CD:EF:01:23:45:67:89:... -``` - -### Certificate Expiry - -Check when certificate expires: - -```bash -openssl x509 -in certs/node-cert.pem -noout -enddate -``` - -The node logs warnings when certificate expires in <30 days: -``` -[TLS] ⚠️ Certificate expires in 25 days - consider renewal -``` - -### Certificate Renewal - -To renew an expiring certificate: - -```bash -# Backup old certificate -mv certs/node-cert.pem certs/node-cert.pem.bak -mv certs/node-key.pem certs/node-key.pem.bak - -# Generate new certificate -# (use same command as manual generation above) - -# Restart node -npm restart -``` - -## Connection Strings - -### Plain TCP -``` -tcp://host:3001 -``` - -### TLS Encrypted -``` -tls://host:3001 -``` -or -``` -tcps://host:3001 -``` - -Both formats work identically. - -## Security - -### Current Security Features - -✅ TLS 1.2/1.3 encryption -✅ Self-signed certificate support -✅ Certificate fingerprint pinning -✅ Strong cipher suites -✅ Client certificate authentication - -### Cipher Suites (Default) - -Only strong, modern ciphers are allowed: -- `ECDHE-ECDSA-AES256-GCM-SHA384` -- `ECDHE-RSA-AES256-GCM-SHA384` -- `ECDHE-ECDSA-CHACHA20-POLY1305` -- `ECDHE-RSA-CHACHA20-POLY1305` -- `ECDHE-ECDSA-AES128-GCM-SHA256` -- `ECDHE-RSA-AES128-GCM-SHA256` - -### Certificate Pinning - -In self-signed mode, pin peer certificates by fingerprint: - -```typescript -// In your code -import { TLSServer } from "./libs/omniprotocol/server/TLSServer" - -const server = new TLSServer({ /* config */ }) -await server.start() - -// Add trusted peer fingerprints -server.addTrustedFingerprint( - "peer-identity-1", - "SHA256:AB:CD:EF:01:23:45:67:89:..." -) -``` - -### Security Recommendations - -**For Development:** -- Use self-signed mode -- Test on localhost only -- Don't expose to public network - -**For Production:** -- Use CA mode with valid certificates -- Enable certificate pinning -- Monitor certificate expiry -- Use TLSv1.3 only -- Place behind firewall/VPN - -## Troubleshooting - -### Certificate Not Found - -**Error:** -``` -Certificate not found: ./certs/node-cert.pem -``` - -**Solution:** -Let the node auto-generate, or create manually (see Certificate Generation above). - -### Certificate Verification Failed - -**Error:** -``` -[TLSConnection] Certificate fingerprint mismatch -``` - -**Cause:** Peer's certificate fingerprint doesn't match expected value. - -**Solution:** -1. Get peer's actual fingerprint from logs -2. Update trusted fingerprints list -3. Verify you're connecting to the correct peer - -### TLS Handshake Failed - -**Error:** -``` -[TLSConnection] Connection error: SSL routines::tlsv1 alert protocol version -``` - -**Cause:** TLS version mismatch. - -**Solution:** -Ensure both nodes use compatible TLS versions: -```bash -OMNI_TLS_MIN_VERSION=TLSv1.2 # More compatible -``` - -### Connection Timeout - -**Error:** -``` -TLS connection timeout after 5000ms -``` - -**Possible causes:** -1. Port blocked by firewall -2. Wrong host/port -3. Server not running -4. Network issues - -**Solution:** -```bash -# Check if port is open -nc -zv host 3001 - -# Check firewall -sudo ufw status -sudo ufw allow 3001/tcp - -# Verify server is listening -netstat -an | grep 3001 -``` - -## Performance - -### TLS Overhead - -- **Handshake:** +20-50ms per connection -- **Encryption:** +5-10% CPU overhead -- **Memory:** +1-2KB per connection - -### Optimization Tips - -1. **Connection Reuse:** Keep connections alive to avoid repeated handshakes -2. **Hardware Acceleration:** Use CPU with AES-NI instructions -3. **TLS Session Resumption:** Reduce handshake cost (automatic) - -## Migration Path - -### Phase 1: Plain TCP (Current) -```bash -OMNI_ENABLED=true -OMNI_TLS_ENABLED=false -``` - -All connections use plain TCP. - -### Phase 2: Optional TLS -```bash -OMNI_ENABLED=true -OMNI_TLS_ENABLED=true -``` - -Server accepts both TCP and TLS connections. Clients choose based on connection string. - -### Phase 3: TLS Only -```bash -OMNI_ENABLED=true -OMNI_TLS_ENABLED=true -OMNI_REJECT_PLAIN_TCP=true # Future feature -``` - -Only TLS connections allowed. - -## Examples - -### Basic Setup (Self-Signed) - -```bash -# .env -OMNI_ENABLED=true -OMNI_TLS_ENABLED=true -OMNI_TLS_MODE=self-signed -``` - -```bash -# Start node -npm start -``` - -### Production Setup (CA Certificates) - -```bash -# .env -OMNI_ENABLED=true -OMNI_TLS_ENABLED=true -OMNI_TLS_MODE=ca -OMNI_CERT_PATH=/etc/ssl/certs/node.pem -OMNI_KEY_PATH=/etc/ssl/private/node.key -OMNI_CA_PATH=/etc/ssl/certs/ca.pem -OMNI_TLS_MIN_VERSION=TLSv1.3 -``` - -### Docker Setup - -```dockerfile -FROM node:18 - -# Copy certificates -COPY certs/ /app/certs/ - -# Set environment -ENV OMNI_ENABLED=true -ENV OMNI_TLS_ENABLED=true -ENV OMNI_CERT_PATH=/app/certs/node-cert.pem -ENV OMNI_KEY_PATH=/app/certs/node-key.pem - -# Expose TLS port -EXPOSE 3001 - -CMD ["npm", "start"] -``` - -## Monitoring - -### Check TLS Status - -```bash -# View certificate info -openssl s_client -connect localhost:3001 -showcerts - -# Test TLS connection -openssl s_client -connect localhost:3001 \ - -cert certs/node-cert.pem \ - -key certs/node-key.pem -``` - -### Logs to Monitor - -``` -[TLS] Certificate valid for 335 more days -[TLSServer] 🔒 Listening on 0.0.0.0:3001 (TLS TLSv1.3) -[TLSServer] New TLS connection from 192.168.1.100:54321 -[TLSServer] TLS TLSv1.3 with TLS_AES_256_GCM_SHA384 -[TLSServer] Verified trusted certificate: SHA256:ABCD... -``` - -### Metrics - -Track these metrics: -- TLS handshake time -- Cipher suite usage -- Certificate expiry days -- Failed handshakes -- Untrusted certificate attempts - -## Support - -For issues: -- Implementation plan: `OmniProtocol/10_TLS_IMPLEMENTATION_PLAN.md` -- Server implementation: `src/libs/omniprotocol/server/TLSServer.ts` -- Client implementation: `src/libs/omniprotocol/transport/TLSConnection.ts` -- Certificate utilities: `src/libs/omniprotocol/tls/certificates.ts` - ---- - -**Status:** Production-ready for closed networks with self-signed certificates -**Recommendation:** Use behind firewall/VPN until rate limiting is implemented diff --git a/README.md.bak b/README.md.bak deleted file mode 100644 index b3a330906..000000000 --- a/README.md.bak +++ /dev/null @@ -1,319 +0,0 @@ -# Demos Network RPC Software - -**_Extremely Important Note:_** Before opening any issues, please ensure you have read this README.md file and have followed all the instructions. Focus especially on the [Usage](#usage) section. - -**_Disclaimer:_** This software is currently in an early development stage and is not yet ready for production use. The software is not stable and is missing many features that are essential for a production-ready node. Use at your own risk. - -# Table of Contents - -- [Demos Network RPC Software](#demos-network-rpc-software) -- [Table of Contents](#table-of-contents) - - [Description](#description) - - [Hardware and software requirements](#hardware-and-software-requirements) - - [Hardware](#hardware) - - [Minimum](#minimum) - - [Recommended](#recommended) - - [Software and System](#software-and-system) - - [Installation](#installation) - - [Required Software Versions](#required-software-versions) - - [Verification](#verification) - - [Ubuntu/Debian Installation](#ubuntudebian-installation) - - [Arch Linux Installation](#arch-linux-installation) - - [macOS Installation](#macos-installation) - - [First-Time Setup](#first-time-setup) - - [Usage](#usage) - - [Configuration](#configuration) - - [The .env file](#the-env-file) - - [The demos_peerlist.json file](#the-demos_peerlistjson-file) - - [Running](#running) - - [Troubleshooting](#troubleshooting) - - [Common Issues](#common-issues) - - [Node software not starting](#node-software-not-starting) - - [Network Connectivity Issues](#network-connectivity-issues) - - [Database Issues](#database-issues) - - [Cleaning the database](#cleaning-the-database) - - [Clearing and reinstalling dependencies](#clearing-and-reinstalling-dependencies) - - [License](#license) - -## Description - -This repository contains the official implementation of the Demos Network RPC software. -The included software follows the Demos Network specifications and can be used as a node for the Demos Network. - -> **Note:** -> For development and testing purposes, the Rubic bridge integration uses mock private keys in the codebase. -> **Do not use real or production keys in development environments.** -> Replace mock keys with secure, real keys only in production and after removing all test data. - -## Hardware and software requirements - -### Hardware - -#### Minimum - -- 4GB RAM -- 4 modern CPU cores (min 2ghz, physical cores or vcpu) -- A modern SSD -- 200mbit/s down/up internet connection - -#### Recommended - -- 8gb RAM -- 6 modern CPU cores (min 2ghz, physical cores) -- A modern SSD -- 1gbit/s down/up internet connection - -### Software and System - -- Linux, MacOS or WSL2 on Windows (Ubuntu LTS > 22.04 recommended) -- Node.js 20.x or later (might work on other versions, but this is the only one that is guaranteed to work) -- Bun (required for package management and running the node) -- Docker and docker compose -- Port 5332 (PostgreSQL) and 53550 (Node) must be available - -### Installation - -#### Required Software Versions -- Node.js: 20.x or later -- Docker: Latest stable version -- Docker Compose: Latest stable version -- Bun: Latest stable version - -#### Verification -After installation, verify your setup with: -```bash -node --version # Should show v20.x.x -docker --version # Should show latest Docker version -docker compose version # Should show latest Docker Compose version -bun --version # Should show latest Bun version -``` - -#### Ubuntu/Debian Installation -```bash -# Install Node.js 20.x -curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - -sudo apt-get install -y nodejs - -# Install Docker -sudo apt-get update -sudo apt-get install -y ca-certificates curl -sudo install -m 0755 -d /etc/apt/keyrings -sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc -sudo chmod a+r /etc/apt/keyrings/docker.asc -echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null -sudo apt-get update -sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin - -# Add user to Docker group -sudo groupadd docker || true -sudo usermod -aG docker $USER -# Note: You'll need to log out and back in for the Docker group changes to take effect - -# Install Bun -curl -fsSL https://bun.sh/install | bash -# Add Bun to your shell (you may need to restart your terminal or run 'source ~/.bashrc') -``` - -#### Arch Linux Installation -```bash -# Install Node.js 20.x -sudo pacman -S nodejs - -# Install Docker -sudo pacman -S docker docker-compose - -# Start and enable Docker service -sudo systemctl start docker -sudo systemctl enable docker - -# Add user to Docker group -sudo groupadd docker || true -sudo usermod -aG docker $USER -# Note: You'll need to log out and back in for the Docker group changes to take effect - -# Install Bun -curl -fsSL https://bun.sh/install | bash -# Add Bun to your shell (you may need to restart your terminal or run 'source ~/.bashrc') -``` - -#### macOS Installation -```bash -# Using Homebrew -brew install node@20 -brew install docker docker-compose -brew install oven-sh/bun/bun -# Add Bun to your shell (you may need to restart your terminal or run 'source ~/.zshrc') -``` - -### First-Time Setup - -1. Clone this repository -2. Install dependencies: -```bash -bun install -``` -3. Generate a new identity (if it doesn't exist): -```bash -bun run keygen -``` -This will create: -- `public.key`: Contains your public key -- `.demos_identity`: Contains your private key (keep this secure!) - -4. Configure your environment: -```bash -cp env.example .env -cp demos_peerlist.json.example demos_peerlist.json -``` - -5. Edit the configuration files as described in the [Configuration](#configuration) section below. - -## Usage - -### Configuration - -#### The .env file - -This file contains the environment variables for the node software. You can probably leave most of them as they are, but you will need to change the following: - -- `EXPOSED_URL`: This is the URL that the node software will be exposed to the network. This should be a public URL that points to the machine running the node software. If you are running the node software on the same machine as the client, you can use `http://localhost:53550`. If you are running the node software on a different machine, you can use the public IP address of that machine (for example `http://1.2.3.4:53550`). If you are running the node behind a reverse proxy, you can use the public URL of the proxy server (as in `https://demos.example.com`). _IMPORTANT NOTE: The URL must start with `http://` or `https://` and the port must be included if needed. Setting this value incorrectly will make the node software unable to connect to the network._ - -#### The demos_peerlist.json file - -This file contains the list of peers that the node software will try to connect to. If you want to test the node locally (connecting to yourself), you can start the node software and, upon the first run, replace the **_identity_** key in the file with the public key of your node (found in `publickey_yourkey`). Else, you should add the peers you know to the file and, once the node software is started, it will automatically connect to the peers (format: `"publickey": "connectionstring"`). - -Example: - -```json -{ - "6f1df0905c986d41bcb01c8b542c0af8263c03ba52a3dd3af9123d99fc8e1067": "http://127.0.0.1:53550" -} -``` - -### Running - -Before starting, ensure: -1. Docker service is running: -```bash -# Check Docker status -docker info -# If not running, start it: -# Ubuntu/Debian: -sudo systemctl start docker -# macOS: -open -a Docker -``` - -2. Required ports are available: -```bash -# Check if ports are in use -sudo lsof -i :5332 -sudo lsof -i :53550 -``` - -Run the node: -```bash -bun install # To install the dependencies -./run # To both start the database and the node software -``` - -You must ensure that the port for the node software and the postgres database are free. -By default, the node software will run on port 53550 and the postgres database will run on port 5332. -By following the instructions below, you can run multiple nodes on the same machine for testing purposes too. -You can change the port for the node software and the postgres database by using the following arguments: - -`./run [-p -d -i -c -n]` - -- `-p `: The port for the node software -- `-d `: The port for the postgres database -- `-i `: The identity file to use -- `-c`: Cleans the database -- `-n`: Does not perform a git pull, useful if you want to use a custom branch or want to avoid pulling the latest changes from the repository - -**_NOTE:_** Without arguments, the default port (and folder) for the postgres database is 5332. -**_NOTE:_** Without arguments, the default port for the node software is 53550. -**_NOTE:_** Without arguments, the default identity file is `.demos_identity`. If the file does not exist, it will be created. -**_NOTE:_** Without the `-n` flag, the repository will be updated to the latest changes every time the script is run (recommended behavior) - -While the script should be able to manage both the database and the node software, in case of any issue you might want to stop the database manually once the node software is terminated: - -```bash -cd postgres_(the port you chose) -./stop.sh -``` - -## Troubleshooting - -### Common Issues - -#### Node software not starting -If the node software is not starting, try these steps in order: - -1. Check Docker status: -```bash -docker info -``` - -2. Check if ports are available: -```bash -sudo lsof -i :5332 -sudo lsof -i :53550 -``` - -3. Check the logs: -```bash -# Node logs -tail -f logs/node.log - -# Database logs -cd postgres_(the port you chose) -tail -f postgres.log -``` - -4. Try restarting the database: -```bash -cd postgres_(the port you chose) -./start.sh -cd .. -bun start -``` - -#### Network Connectivity Issues -If you're having trouble connecting to peers: - -1. Check your firewall settings: -```bash -# Ubuntu/Debian -sudo ufw status -# If needed, allow the ports: -sudo ufw allow 53550/tcp -``` - -2. Verify your EXPOSED_URL in .env is correct and accessible - -3. Check peer connectivity: -```bash -# Test connection to a peer -curl -v http://:53550/health -``` - -#### Database Issues -If you're having trouble with the database: - -1. Check the logs: -```bash -cd postgres_(the port you chose) -tail -f postgres.log -``` - -2. Try restarting the database: -```bash -cd postgres_(the port you chose) -./start.sh -``` - -### Cleaning the database - -If you want to clean the database, you can run the following command: - -``` \ No newline at end of file diff --git a/REPO_ANALYSIS/Onboarding_Documentation.md b/REPO_ANALYSIS/Onboarding_Documentation.md deleted file mode 100644 index df4237141..000000000 --- a/REPO_ANALYSIS/Onboarding_Documentation.md +++ /dev/null @@ -1,354 +0,0 @@ -# Demos Network Node - Onboarding Documentation - -## Project Overview - -The Demos Network is a comprehensive blockchain network implementation that provides: - -- **Blockchain Network Infrastructure**: A complete blockchain node implementation with custom consensus mechanisms, transaction processing, and state management -- **Cross-Chain Bridge Platform**: Multi-chain interoperability supporting various blockchain networks through bridges and asset wrapping -- **Decentralized Communication System**: Peer-to-peer messaging, instant messaging protocol, and signaling server capabilities -- **Smart Contract Platform**: EVM-compatible smart contract execution with multichain support -- **Developer Tools & APIs**: RPC endpoints, MCP (Model Context Protocol) server, and comprehensive SDK integration - -The project solves the problem of blockchain interoperability, scalability, and developer accessibility by providing a unified platform that connects different blockchain networks while maintaining security and decentralization. - -## Core Architecture - -### Main Architectural Pattern -The system follows a **hybrid microservices-monolith architecture** with: -- **Modular Core**: Single node application with feature-based modular organization -- **Event-Driven Communication**: Asynchronous message passing between components -- **Plugin Architecture**: Extensible feature system for bridges, consensus mechanisms, and protocols -- **Database Layer**: PostgreSQL for persistent storage with TypeORM abstraction - -### Component Interactions -The main components interact through: -- **Shared State Management**: Global state accessible across all modules -- **Event Broadcasting**: Consensus events, peer discovery, and transaction propagation -- **RPC Communication**: RESTful API endpoints for external communication -- **WebSocket Connections**: Real-time peer-to-peer communication -- **Database Transactions**: Atomic operations for blockchain state updates - -### Architecture Diagram - -```mermaid -graph TB - subgraph "External Layer" - SDK[Demos SDK] - CLI[Command Line Interface] - Web[Web Applications] - MCP[MCP Clients] - end - - subgraph "Network Layer" - RPC[RPC Server] - WS[WebSocket Server] - P2P[P2P Network] - Signal[Signaling Server] - MCPS[MCP Server] - end - - subgraph "Core Blockchain" - Consensus[PoRBFT Consensus] - Chain[Blockchain Engine] - Mempool[Transaction Pool] - GCR[Global Change Registry] - Validator[Validator System] - end - - subgraph "Features" - Bridges[Cross-Chain Bridges] - Crypto[Cryptography] - Identity[Identity System] - Messaging[Instant Messaging] - Smart[Smart Contracts] - FHE[Fully Homomorphic Encryption] - end - - subgraph "Data Layer" - PostgreSQL[(PostgreSQL Database)] - Storage[Node Storage] - Logs[Logging System] - end - - SDK --> RPC - CLI --> RPC - Web --> RPC - MCP --> MCPS - - RPC --> Chain - WS --> P2P - P2P --> Consensus - Signal --> Messaging - MCPS --> Chain - - Consensus --> GCR - Chain --> Mempool - Chain --> Validator - GCR --> PostgreSQL - - Bridges --> Chain - Crypto --> Identity - Identity --> Chain - Messaging --> Signal - Smart --> Chain - FHE --> Crypto - - Chain --> PostgreSQL - Mempool --> PostgreSQL - Storage --> PostgreSQL -``` - -## Key Components & Their Responsibilities - -### Core Blockchain Components - -#### `/src/libs/blockchain/` -- **`chain.ts`**: Main blockchain engine managing blocks, transactions, and state -- **`block.ts`**: Block structure and validation logic -- **`transaction.ts`**: Transaction processing and validation -- **`mempool_v2.ts`**: Transaction pool management and ordering -- **`gcr/`**: Global Change Registry for tracking state changes - -#### `/src/libs/consensus/v2/` -- **`PoRBFT.ts`**: Proof of Random Byzantine Fault Tolerance consensus implementation -- **`secretaryManager.ts`**: Coordinator node management for consensus rounds -- **`shardManager.ts`**: Shard-based consensus coordination - -### Network & Communication - -#### `/src/libs/network/` -- **`server_rpc.ts`**: Main RPC server handling HTTP/WebSocket requests -- **`bunServer.ts`**: Fast HTTP server implementation using Bun runtime -- **`endpointHandlers.ts`**: Request routing and response handling -- **`manageP2P.ts`**: Peer-to-peer network management - -#### `/src/libs/peer/` -- **`PeerManager.ts`**: Peer discovery, connection management, and authentication -- **`Peer.ts`**: Individual peer connection handling and communication - -### Cross-Chain Features - -#### `/src/features/bridges/` -- **`rubic.ts`**: Integration with Rubic SDK for cross-chain swaps -- **`bridges.ts`**: Bridge orchestration and management -- **`bridgeUtils.ts`**: Common bridge utilities and token mappings - -#### `/src/features/multichain/` -- **`XMDispatcher.ts`**: Cross-chain message dispatching -- **`assetWrapping.ts`**: Token wrapping and unwrapping logic -- **`routines/executors/`**: Transaction execution on different chains - -### Advanced Features - -#### `/src/features/InstantMessagingProtocol/` -- **`signalingServer.ts`**: WebSocket signaling server for peer discovery -- **`ImPeers.ts`**: Instant messaging peer management - -#### `/src/features/mcp/` -- **`MCPServer.ts`**: Model Context Protocol server for AI integration -- **`demosTools.ts`**: MCP tools for blockchain operations - -#### `/src/features/postQuantumCryptography/` -- **`PoC.ts`**: Post-quantum cryptography implementation -- **`enigma_lite.ts`**: Lightweight encryption utilities - -### Data & Storage - -#### `/src/model/entities/` -- **`Blocks.ts`**: Block entity definition -- **`Transactions.ts`**: Transaction entity definition -- **`GCRv2/`**: Global Change Registry v2 entities -- **`Validators.ts`**: Validator information storage - -#### `/src/utilities/` -- **`logger.ts`**: Comprehensive logging system -- **`sharedState.ts`**: Global state management -- **`mainLoop.ts`**: Main application event loop - -## Getting Started - -### Prerequisites -- **Node.js**: 20.x or later -- **Bun**: Latest stable version -- **Docker**: Latest stable version with Docker Compose -- **PostgreSQL**: Managed via Docker - -### Installation - -1. **Clone the repository** - ```bash - git clone - cd node - ``` - -2. **Install dependencies** - ```bash - bun install - ``` - -3. **Generate identity (if needed)** - ```bash - bun run keygen - ``` - -4. **Configure environment** - ```bash - cp env.example .env - cp demos_peerlist.json.example demos_peerlist.json - ``` - -5. **Edit configuration files** - - Update `.env` with your `EXPOSED_URL` and other settings - - Configure `demos_peerlist.json` with known peers - -### Running the Application - -#### Development Mode -```bash -# Start database and node -./run - -# Or with custom ports -./run -p 53551 -d 5333 - -# Clean database and start -./run -c -``` - -#### Production Mode -```bash -# Start with production configuration -bun run start - -# Start with automatic updates -bun run start:up -``` - -### Running Tests -```bash -# Run blockchain tests -bun run test:chains - -# Run specific test file -bun test src/tests/transactionTester.ts -``` - -### Additional Commands -```bash -# Update SDK to latest version -bun run upgrade_sdk - -# Run database migrations -bun run migration:run - -# Check node balance -bun run dump_balance - -# Format code -bun run format - -# Lint code -bun run lint -``` - -## Data Flow - -### Transaction Processing Flow - -1. **Transaction Submission** - - Client submits transaction via RPC endpoint - - Transaction validated for format and signature - - Added to mempool for processing - -2. **Consensus Processing** - - PoRBFT consensus algorithm selects validator shard - - Transactions ordered and bundled into blocks - - Secretary node coordinates consensus rounds - -3. **Block Creation & Validation** - - Block created with ordered transactions - - Block validated by shard validators - - Consensus reached on block validity - -4. **State Updates** - - Successful transactions applied to Global Change Registry (GCR) - - Database updated with new block and state changes - - Failed transactions rolled back - -5. **Network Propagation** - - New block broadcasted to all network peers - - Peer synchronization ensures network consistency - -### Cross-Chain Bridge Flow - -1. **Bridge Request** - - User initiates cross-chain transaction - - Rubic SDK provides quote and swap data - - Transaction submitted to source chain - -2. **Asset Locking** - - Source chain assets locked in bridge contract - - Bridge event recorded in GCR - - Cross-chain message created - -3. **Message Relay** - - XMDispatcher handles cross-chain messaging - - Target chain receives and validates message - - Asset minting/unlocking on target chain - -4. **Confirmation** - - Target chain transaction confirmed - - Bridge completion recorded in GCR - - User receives assets on target chain - -### Key Data Structures - -#### Transaction Structure -```typescript -interface Transaction { - hash: string - from: string - to: string - amount: string - fee: string - nonce: number - signature: Uint8Array - timestamp: number - data?: any -} -``` - -#### Block Structure -```typescript -interface Block { - number: number - hash: string - previousHash: string - timestamp: number - transactions: Transaction[] - validator: string - signature: Uint8Array -} -``` - -#### Global Change Registry (GCR) -The GCR tracks all state changes with cryptographic references to source transactions: -- Account balances -- Token holdings -- Smart contract state -- Bridge operations -- Identity registrations - -### Database Schema - -The system uses PostgreSQL with TypeORM for data persistence: - -- **`blocks`**: Blockchain blocks with transaction references -- **`transactions`**: Individual transaction records -- **`gcr_main`**: Global Change Registry entries -- **`gcr_hashes`**: GCR state hashes for verification -- **`validators`**: Network validator information -- **`mempool`**: Pending transaction pool - -All data flows are designed to maintain blockchain immutability while enabling efficient querying and state management through the GCR system. \ No newline at end of file diff --git a/TG_IDENTITY_PLAN.md b/TG_IDENTITY_PLAN.md deleted file mode 100644 index ab48d7a91..000000000 --- a/TG_IDENTITY_PLAN.md +++ /dev/null @@ -1,162 +0,0 @@ -# Telegram Identity Implementation Plan - -## Overview -This document outlines the implementation for adding Telegram identity support to the Demos Network using a transaction-based approach similar to Twitter identities. - -**Architecture**: Transaction-based identity system where the Telegram bot submits Demos transactions directly (no API endpoints needed). - -## Authentication Flow - -### Complete Transaction-Based Flow: -1. **USER** clicks "Link Telegram" on Demos dApp -2. **DAPP** generates challenge and prompts user to sign with wallet -3. **DAPP** shows signed message: "Send this to @DemosBot: ``" -4. **USER** sends signed challenge to Telegram bot -5. **BOT** ([separate repository](https://github.com/kynesyslabs/tg_verification_bot)) receives message, verifies user signature -6. **BOT** creates attestation with dual signatures (user + bot) -7. **BOT** submits Demos transaction with telegram identity data -8. **NODE** processes transaction through GCR system → validates → stores identity - -## Repository Changes Required - -### 🔧 **../sdks Repository Changes** -**Goal**: Create extensible identity transaction subtype supporting multiple platforms - -**Files to Create/Edit**: -1. **New transaction subtype**: `web2_identity` or similar - ```typescript - // Transaction structure - { - type: "identity", - subtype: "web2_platform", - data: { - platform: "telegram" | "twitter" | "github" | "discord", // extensible - payload: { - // Platform-specific data (varies by platform) - userId: string, - username: string, - proof: string, // User signature + bot attestation for telegram - timestamp: number, - // ... additional platform-specific fields - } - } - } - ``` - -### 🏗️ **Node Repository Changes (This Repo)** -**Goal**: Process telegram identity transactions through existing GCR system - -**Files to Edit**: -1. **`/src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts`** - - Add `context: "telegram"` case to `applyWeb2IdentityAdd()` - - Implement telegram-specific validation (dual signature verification) - - Bot authorization via genesis block addresses - -2. **`/src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts`** - - Add `telegramLinked()` and `telegramUnlinked()` methods - -3. **`/src/libs/blockchain/gcr/gcr_routines/identityManager.ts`** - - Update `filterConnections()` to allow telegram as alternative to twitter - -## Implementation Phases - -### 📦 **Phase 1: SDK Transaction Types** (../sdks repo) -**Goal**: Create extensible transaction subtype for social identity platforms -**Time**: 1 hour -**Status**: ❌ **NOT STARTED** - -**Tasks**: -- Design `web2_platform` transaction subtype -- Support multiple platforms: `telegram`, `twitter`, `github`, `discord` -- Platform-specific payload validation schemas - -### 🔧 **Phase 2: Node Transaction Processing** (This repo) -**Goal**: Process telegram transactions through GCR system -**Time**: 2-3 hours -**Status**: ❌ **NOT STARTED** - -**Tasks**: -- Add telegram validation to `GCRIdentityRoutines.applyWeb2IdentityAdd()` -- Implement dual signature verification (user + bot) -- Bot authorization via genesis block -- Telegram incentive integration - -### 🤖 **Bot Repository** ([tg_verification_bot](https://github.com/kynesyslabs/tg_verification_bot)) -**Status**: ✅ **COMPLETED** - Fully functional verification bot - -**Bot Architecture**: -- Complete challenge verification system using DemosSDK -- Dual signature creation (user + bot signatures) -- Rate limiting and security features -- SQLite challenge storage with 15-minute expiration -- Ready to submit Demos transactions (needs transaction type from ../sdks) - -**Bot Integration**: -- Bot will use new `web2_platform` transaction subtype from ../sdks -- Bot creates transaction with `{ platform: "telegram", payload: {...} }` -- Bot submits transaction directly to node (no API endpoints needed) - -## Security Features - -1. **Challenge Expiration**: 15-minute TTL (implemented in bot) -2. **Dual Signature Verification**: User signature + Bot signature required -3. **Bot Authorization**: Only genesis addresses can create valid bot signatures -4. **Transaction-Based Security**: Uses Demos blockchain native validation -5. **Rate Limiting**: Implemented in bot (max attempts per user) -6. **Timestamp Validation**: Recent attestations only (< 15 minutes) - -## Success Criteria - -### ✅ **Completed (Bot)**: -- [x] Bot handles challenge verification with dual signatures -- [x] Challenge expiration and cleanup (15-minute TTL) -- [x] Rate limiting and security validations -- [x] DemosSDK integration for signature verification - -### ❌ **To Do (../sdks repo)**: -- [ ] Create extensible `web2_platform` transaction subtype -- [ ] Support `platform: "telegram"` with validation schemas - -### ❌ **To Do (Node repo)**: -- [ ] Process telegram transactions through GCR system -- [ ] Add telegram validation to `GCRIdentityRoutines.applyWeb2IdentityAdd()` -- [ ] Implement bot authorization via genesis block addresses -- [ ] Add telegram incentive integration (`IncentiveManager`) -- [ ] Update identity manager to allow telegram as twitter alternative - -## Time Estimate - -**Total: 3-4 hours across both repos** -- **../sdks repo**: 1 hour (transaction subtype design) -- **Node repo**: 2-3 hours (GCR integration + validation) - -## Architecture Overview - -``` -┌─────────────────────────────────────────────────────────────────────────────┐ -│ TRANSACTION-BASED FLOW │ -└─────────────────────────────────────────────────────────────────────────────┘ - -📱 DAPP 🤖 BOT REPO 🏗️ NODE REPO -┌─────────────┐ ┌─────────────┐ ┌─────────────┐ -│ │ │ │ │ │ -│ Generate │──────────▶│ Receive │ │ │ -│ Challenge │ │ Signed │ │ │ -│ │ │ Challenge │ │ │ -│ User Signs │ │ │ │ │ -│ with Wallet │ │ Create │──────────────▶│ Process │ -│ │ │ Attestation │ │ Transaction │ -│ │ │ │ │ │ -│ │ │ Submit │ │ Validate: │ -│ │ │ Transaction │ │ • User sig │ -│ │ │ │ │ • Bot sig │ -│ │ │ │ │ • Bot auth │ -│ │ │ │ │ │ -│ │ │ │ │ Store │ -│ │ │ │ │ Identity │ -└─────────────┘ └─────────────┘ └─────────────┘ - -``` - -**Transaction Flow**: Bot creates transaction → Node validates through GCR → Identity stored -**Security**: Dual signatures (user + bot) + Bot authorization via genesis addresses \ No newline at end of file diff --git a/TO_FIX.md b/TO_FIX.md deleted file mode 100644 index 688f3765f..000000000 --- a/TO_FIX.md +++ /dev/null @@ -1,190 +0,0 @@ -# PR Review Fixes Required - -**Review Source**: `PR_COMMENTS/review-3222019024-comments/` -**PR**: #468 (tg_identities_v2 branch) -**Review Date**: 2025-09-14 -**Total Comments**: 17 actionable - -## 🔴 CRITICAL Issues (Must Fix Before Merge) - -### 1. Import Path Security Issue -**File**: `src/libs/abstraction/index.ts` -**Comment**: `comment_2347276943_src_libs_abstraction_index_ts_Lunknown_coderabbitaibot.md` -**Problem**: Importing from `node_modules/@kynesyslabs/demosdk/build/types/abstraction` -**Risk**: Brittle imports that break on package updates -**Fix**: Change to `@kynesyslabs/demosdk/abstraction` -```diff --import { -- TelegramAttestationPayload, -- TelegramSignedAttestation, --} from "node_modules/@kynesyslabs/demosdk/build/types/abstraction" -+import { -+ TelegramAttestationPayload, -+ TelegramSignedAttestation, -+} from "@kynesyslabs/demosdk/abstraction" -``` - -### 2. ❌ INVALID: Bot Signature Verification (CodeRabbit Error) -**File**: `src/libs/abstraction/index.ts` (lines 117-123) -**Comment**: Main review notes -**Problem**: CodeRabbit incorrectly assumed `botAddress` is not a public key -**Analysis**: ✅ **FALSE POSITIVE** - In Demos Network, addresses ARE public keys (Ed25519) -**Evidence**: All transaction verification uses `hexToUint8Array(address)` as `publicKey` -**Status**: ✅ **NO FIX NEEDED** - Current implementation is CORRECT -```typescript -// Current code is actually CORRECT for Demos architecture: -publicKey: hexToUint8Array(botAddress), // ✅ CORRECT: Address = Public Key in Demos -``` - -### 3. ❌ INVALID: JSON Canonicalization (Premature Optimization) -**File**: `src/libs/abstraction/index.ts` -**Comment**: `comment_2347276950_src_libs_abstraction_index_ts_Lunknown_coderabbitaibot.md` -**Problem**: CodeRabbit flagged `JSON.stringify()` as non-deterministic -**Analysis**: ✅ **FALSE POSITIVE** - Would break existing signatures if implemented unilaterally -**Evidence**: Simple flat object, no reports of actual verification failures -**Status**: ✅ **NO FIX NEEDED** - Current implementation works reliably - -### 4. ✅ COMPLETED: Point System Null Pointer Bug -**File**: `src/features/incentive/PointSystem.ts` -**Comment**: `comment_2347276938_src_features_incentive_PointSystem_ts_Lunknown_coderabbitaibot.md` -**Problem**: `undefined <= 0` evaluates to `false`, allowing negative points -**Status**: ✅ **FIXED** - Comprehensive data structure initialization implemented - -**Root Cause**: Partial `socialAccounts` objects causing undefined property access -**Solution Implemented**: -1. **Data initialization**: Property-level null coalescing in `getUserPointsInternal` -2. **Structure guards**: Complete breakdown initialization in `addPointsToGCR` -3. **Defensive checks**: Null-safe comparisons in all deduction methods - -```typescript -// Fixed with comprehensive approach: -const currentTelegram = userPointsWithIdentities.breakdown.socialAccounts?.telegram ?? 0 -if (currentTelegram <= 0) { /* safe logic */ } -``` - -## 🟡 HIGH Priority Issues (Should Fix) - -### 5. ❌ SECURITY RISK: Genesis Block Caching (DISMISSED) -**File**: `src/libs/abstraction/index.ts` -**Comment**: `comment_2347276947_src_libs_abstraction_index_ts_Lunknown_coderabbitaibot.md` -**Problem**: Genesis block queried on every bot authorization check -**Analysis**: ✅ **SECURITY CONCERN** - Caching genesis data creates attack vector -**Risk**: Cached data could be compromised, bypassing authorization security -**Status**: ✅ **NO FIX NEEDED** - Current per-query validation is secure by design -```typescript -// Current implementation is SECURE - validates against live genesis every time -// Caching would create security vulnerability -``` - -### 6. ✅ COMPLETED: Data Structure Robustness -**File**: `src/features/incentive/PointSystem.ts` (lines 193-198) -**Comment**: Main review outside diff comments -**Problem**: Missing socialAccounts structure initialization -**Status**: ✅ **FIXED** - Already implemented during Point System fixes -**Implementation**: Structure initialization guard added in `addPointsToGCR` -```typescript -// REVIEW: Ensure breakdown structure is properly initialized before assignment -account.points.breakdown = account.points.breakdown || { - web3Wallets: {}, - socialAccounts: { twitter: 0, github: 0, telegram: 0, discord: 0 }, - referrals: 0, - demosFollow: 0, -} -``` - -## 🟢 MEDIUM Priority Issues (Good to Fix) - -### 7. Type Safety: Reduce Any Casting -**File**: `src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts` -**Comment**: `comment_2347276956_src_libs_blockchain_gcr_gcr_routines_GCRIdentityRoutines_ts_Lunknown_coderabbitaibot.md` -**Problem**: Multiple identity handlers use `any` casting -**Impact**: Loss of type safety -**Fix**: Implement discriminated unions for edit operations - -### 8. ✅ COMPLETED: Input Validation Improvements -**File**: `src/libs/abstraction/index.ts` (lines 86-123) -**Comment**: Main review nitpick comments -**Problem**: Strict equality checks may cause false negatives -**Status**: ✅ **FIXED** - Enhanced type safety and normalization implemented -**Implementation**: Type validation first, then safe normalization -```typescript -// Type validation first (security) -if (typeof telegramAttestation.payload.telegram_id !== 'number' && - typeof telegramAttestation.payload.telegram_id !== 'string') { - return { success: false, message: "Invalid telegram_id type in bot attestation" } -} - -// Safe normalization after type validation -const attestationId = telegramAttestation.payload.telegram_id.toString() -const attestationUsername = telegramAttestation.payload.username.toLowerCase().trim() -``` - -### 9. Database Query Robustness -**File**: `src/libs/blockchain/gcr/gcr.ts` -**Comment**: Main review nitpick comments -**Problem**: JSONB query can error when telegram field missing -**Fix**: Use COALESCE in query -```sql -COALESCE(gcr.identities->'web2'->'telegram','[]'::jsonb) -``` - -## 🔵 LOW Priority Issues (Nice to Have) - -### 10. Documentation Consistency -**Files**: Various markdown files -**Problem**: Markdown linting issues, terminology misalignment -**Fix**: -- Add language specs to fenced code blocks -- Remove trailing colons from headings -- Align "dual signature" terminology with actual implementation - -### 11. GitHub Actions Improvements -**Files**: `.github/workflows/*` -**Problem**: Various workflow robustness improvements -**Impact**: CI/CD reliability - -### 12. Code Style Improvements -**Files**: Various -**Problem**: Minor naming and consistency issues -**Impact**: Code maintainability - -## 📋 Implementation Plan - -### Phase 1: Critical Security (URGENT) -1. ✅ Fix SDK import paths (COMPLETED - SDK v2.4.9 published with exports) -2. ❌ ~~Fix bot signature verification~~ (FALSE POSITIVE - No fix needed) -3. ❌ ~~JSON canonicalization~~ (FALSE POSITIVE - Would break existing signatures) -4. ✅ Fix null pointer bugs in point system (COMPLETED - Comprehensive data structure fixes) - -### Phase 2: Performance & Stability -1. ❌ ~~Implement genesis caching~~ (SECURITY RISK - Dismissed) -2. ✅ Add structure initialization guards (COMPLETED) -3. ✅ Enhance input validation (COMPLETED) - -### Phase 3: Code Quality -1. ⏳ Fix type safety issues -2. ⏳ Update documentation -3. ⏳ Address remaining improvements - -## 🎯 Success Criteria - -- [x] Fix import path security issue (COMPLETED) -- [x] Validate bot signature verification (CONFIRMED CORRECT) -- [x] Assess JSON canonicalization (CONFIRMED UNNECESSARY) -- [x] Fix null pointer bug in point system (COMPLETED) -- [x] Address HIGH priority performance issues (COMPLETED - All issues resolved) -- [ ] Security verification passes -- [ ] All tests pass with linting -- [ ] Type checking passes with `bun tsc --noEmit` - -## 📚 Reference Files - -All detailed comments and code suggestions available in: -`PR_COMMENTS/review-3222019024-comments/` - -**Key Comment Files**: -- `comment_2347276943_*` - Import path issue -- `comment_2347276947_*` - Genesis caching -- `comment_2347276950_*` - JSON canonicalization -- `comment_2347276938_*` - Point deduction bug -- `review_main_coderabbitai[bot]_2025-09-14.md` - Full review summary \ No newline at end of file diff --git a/better_testing/README.md b/better_testing/README.md new file mode 100644 index 000000000..3b534924f --- /dev/null +++ b/better_testing/README.md @@ -0,0 +1,197 @@ +# better_testing + +This folder contains the **devnet test/load harness** used to validate correctness (cross-node convergence) and measure performance (TPS/latency). It’s designed to be runnable without changing node code, but it will often *surface* node bugs that we then fix upstream. + +For deeper investigation notes and past runs, see `better_testing/research.md`. + +## Quick start + +1) Start devnet (4 nodes + postgres): +```bash +cd devnet +docker compose up -d +``` + +2) Run a scenario (recommended wrapper): +```bash +better_testing/scripts/run-scenario.sh token_smoke +better_testing/scripts/run-scenario.sh token_script_transfer_ramp --env SCRIPT_SET_STORAGE=true --env RAMP_INFLIGHT_PER_WALLET=1,2,4,8 +``` + +Chaos/resync run (restart a follower mid-load, then verify convergence): +```bash +better_testing/scripts/run-chaos-token-script-transfer.sh --reset --build --duration-sec 30 --delay-sec 8 --env SCRIPT_SET_STORAGE=true +``` +Notes: +- `--reset` starts from a clean devnet state (`docker compose down -v` + `up -d`). +- The chaos wrapper disables `token_settle_check`’s mempool-drain gate and uses longer settle timeouts by default, because the network may take a while to apply committed state after a follower restart under load. + +Committed-read probe under load (task `node-y3g.9.13`): +```bash +better_testing/scripts/run-token-observe-under-load.sh --reset --plain --load-sec 30 --concurrency 4 --observe-sec 120 --settle-sec 180 --tail 10 +better_testing/scripts/run-token-observe-under-load.sh --reset --scripted --load-sec 60 --concurrency 8 --observe-sec 170 --settle-sec 180 --tail 10 +``` +This produces `token_observe.timeseries.jsonl` and runs a local analysis pass (`better_testing/scripts/analyze-token-observe.ts`) to assert “no divergence on non-null hashes” + tail convergence. +Verified example RUN_IDs: +- `token-observe-under-load-plain-20260302-130537` +- `token-observe-under-load-scripted-20260302-132018` + +3) Inspect artifacts: +- `better_testing/runs//*.summary.json` +- `better_testing/runs//*.timeseries.jsonl` (when enabled; good input for future Grafana/Prometheus) + +Notes: +- In loadgens, `ok` only counts transactions accepted (`result===200`); rejected txs are counted in `error` with `errorSamples`. +- Token read probes prefer committed-only endpoints (`token.getCommitted`, `token.getBalanceCommitted`, `token.callViewCommitted`). During sync/consensus the node may respond with `result===409` (`STATE_IN_FLUX`); scenarios treat those samples as transient and retry/skip as appropriate. + +## When to rebuild + +The `loadgen` runs **inside Docker** using the same image as devnet (`demos-devnet-node`). + +- If you changed `better_testing/loadgen/src/**`, run the scenario with `--build` to rebuild the image: + - `better_testing/scripts/run-scenario.sh token_edge_cases --build` + +## Scenario catalog (what they do) + +The scenario is selected via `SCENARIO=...` (the wrapper script sets it for you). + +**RPC / baseline** +- `rpc`: generic RPC call loop (configurable method/path). +- `rpc_ramp`: ramp RPC load over multiple steps. + +**Native transfers** +- `transfer`: native transfer loadgen. +- `transfer_ramp`: ramp native transfer load. + +**Tokens (no scripts)** +- `token_smoke`: deploy/bootstrap + one transfer + cross-node consistency + holder-pointer check. +- `token_transfer`: token transfer loadgen. +- `token_transfer_ramp`: ramp token transfers. +- `token_mint_smoke`: owner mints; asserts supply/balance deltas + cross-node checks. +- `token_burn_smoke`: owner burns; asserts supply/balance deltas + cross-node checks. +- `token_mint`: mint loadgen. +- `token_burn`: burn loadgen. +- `token_mint_ramp`: ramp mint load. +- `token_burn_ramp`: ramp burn load. +- `token_consensus_consistency`: small sequence (transfer + mint + burn) then waits for consensus and asserts identical state on all nodes. +- `token_query_coverage`: exercises read APIs (`token.get`, `token.getBalance`, `token.getHolderPointers`, missing-token behavior). +- `token_edge_cases`: negative cases (0 amounts, insufficient balance, missing token) + explicit **self-transfer no-op** invariant. +- `token_invariants_known_holders`: strict invariant verifier: `totalSupply == sum(balances)` and (optionally) “no unknown holders” in the balances map (useful when the harness controls the full holder set). +- `token_pause_under_load`: runs transfer load, pauses mid-run, asserts transfer/mint/burn reject while paused, unpauses, then verifies committed convergence across nodes. +- `token_holders_export`: exports token holders from `state.balances` (committed preferred; live fallback). Useful for global invariants. + +**Token ACL** +- `token_acl_smoke`: minimal grant + action + negative “attacker cannot mint/burn” checks, with cross-node settle + holder pointers. +- `token_acl_matrix`: permission grant/revoke matrix for a single permission. +- `token_acl_burn_matrix`, `token_acl_pause_matrix`, `token_acl_transfer_ownership_matrix`, `token_acl_multi_permission_matrix`, `token_acl_updateacl_compat`: broader ACL matrices. + +**Token scripting** +- `token_script_smoke`: install/upgrade script and verify `token.callView` works across nodes. +- `token_script_hooks_correctness`: verifies before/after hooks for transfer/mint/burn and script `customState` counters converge across nodes. +- `token_script_rejects`: script-enforced reject (same `amount-too-large:*` reject signature on every node; state unchanged) with a valid transfer before/after. +- `token_script_upgrade_mid_load`: runs scripted transfer load, upgrades the script mid-run, then asserts all nodes converge on the new script tag + hook-count `customState`. +- `token_script_complex_policy_smoke`: installs a “complex policy” script (denylist/allowlist + fee bookkeeping + quota) then exercises multiple branches and verifies cross-node determinism + invariants. +- Verified example RUN_IDs: + - `token_script_complex_policy_smoke-20260303-130602` + - `token_script_complex_policy_smoke-20260303-132251` + - `token_script_complex_policy_smoke-20260303-150133` +- `token_script_complex_policy_ramp`: ramps scripted transfer load while using the complex policy script (configured to allow all devnet wallets to avoid rejects). +- Verified example RUN_IDs: + - `token_script_complex_policy_ramp-20260303-130724` +- `token_script_complex_policy_dynamic_updates`: exercises a “complex policy” script with **in-band admin updates** (owner self-transfer commands updating `customState.policyOverride`), then verifies deterministic rejects/accepts + cross-node state convergence. +- Verified example RUN_IDs: + - `token_script_complex_policy_dynamic_updates-20260303-134836` +- `token_script_complex_policy_vesting_lockup`: exercises **vesting/lockup transfer gates** using **admin-controlled releases** (the current script hook context does not expose timestamp/nonce/block height), and verifies deterministic rejects + cross-node convergence. +- Verified example RUN_IDs: + - `token_script_complex_policy_vesting_lockup-20260303-151227` +- `token_script_complex_policy_escrow_state_machine`: exercises a **stateful escrow-like flow** inside a complex token script (deposit -> pending -> approve release/refund -> claimed/refunded), using `customState` to track per-deposit entries and asserting cross-node determinism (including deterministic `escrow_no_entry` rejects). +- Verified example RUN_IDs: + - `token_script_complex_policy_escrow_state_machine-20260303-153800` +- `token_script_transfer`: scripted transfer loadgen (hooks on every transfer). +- `token_script_transfer_ramp`: ramp scripted transfer load across steps. +- `token_script_mint`: scripted mint loadgen (owner mints; hooks execute on mint). +- `token_script_mint_ramp`: ramp scripted mint load. +- Verified example RUN_IDs: + - `token_script_mint_ramp-20260303-112435` +- `token_script_burn`: scripted burn loadgen (owner burns; hooks execute on burn). +- Verified example RUN_IDs: + - `token_script_burn-20260303-123048` +- `token_script_burn_ramp`: ramp scripted burn load. +- Verified example RUN_IDs: + - `token_script_burn_ramp-20260303-123438` +- Complex/branchy scripts (allowlists/fees/quotas/customState maps) are tracked in `br` epic `bd-2vy.4` (add new tasks there to avoid spreading token-script work across multiple epics). +- `token_settle_check`: reusable post-run verifier (cross-node convergence for balances + optional script counters) for an existing `TOKEN_ADDRESS`. +- `token_observe`: time-series probe for an existing `TOKEN_ADDRESS` (per-node: last block number/hash, mempool size, balances, and stable state hashes). Useful to debug “nodes agree on last block but disagree on token state”. +- `token_invariants_known_holders`: invariant verifier for committed token state (works for both scripted and non-scripted tokens; optional known-holder constraint). + +**IM / messaging** +- `im_online`: IM “online” workload (when enabled). +- `im_online_ramp`: ramp IM workload. + +## Common env knobs + +You can pass env vars via the wrapper: `--env KEY=VALUE`. + +**Harness / run control** +- `RUN_ID`: output folder name under `better_testing/runs/` (auto-generated if omitted). +- `TARGETS`: comma-separated internal RPC URLs (defaults to node-1..4). +- `QUIET`: `true|false` (quiet reduces stdout noise). + +**Load shape** +- `DURATION_SEC`, `CONCURRENCY` +- Ramp: `RAMP_CONCURRENCY=1,2,4,8`, `RAMP_INFLIGHT_PER_WALLET=1,2,4`, `STEP_DURATION_SEC`, `COOLDOWN_SEC` + +**Token bootstrap** +- `TOKEN_ADDRESS` (reuse an existing token) +- `TOKEN_BOOTSTRAP=true|false`, `TOKEN_DISTRIBUTE=true|false` +- `TOKEN_INITIAL_SUPPLY`, `TOKEN_DISTRIBUTE_AMOUNT`, `TOKEN_TRANSFER_AMOUNT`, `TOKEN_MINT_AMOUNT`, `TOKEN_BURN_AMOUNT` + +**Token scripting perf** +- `SCRIPT_WORK_ITERS` (CPU loop inside hooks) +- `SCRIPT_SET_STORAGE=true|false` (whether hooks write to `customState`) + +**Invariant verifier** +- `KNOWN_ONLY=true|false` (default `true`): require that every key in `state.balances` is in the “known holders” set derived from `INVARIANT_WALLETS` + `ADDRESSES`. +- `INVARIANT_WALLETS` (default `4`): number of devnet wallets to derive as “known holders”. +- `INVARIANT_TIMEOUT_SEC`, `INVARIANT_POLL_MS` + +## Post-run consistency checks (recommended) + +Most load scenarios will create/reuse a token and then emit a `*.summary.json`. For performance runs, it’s often useful to run an explicit post-run verifier against the resulting `TOKEN_ADDRESS`. + +Example (verify balances + holder pointers + script counters across all nodes): +```bash +better_testing/scripts/run-scenario.sh token_settle_check \ + --env TOKEN_ADDRESS=0x... \ + --env EXPECT_SCRIPT=true \ + --env SETTLE_WALLETS=4 +``` + +Example (observe over time after a load run): +```bash +better_testing/scripts/run-scenario.sh token_observe \ + --env TOKEN_ADDRESS=0x... \ + --env OBSERVE_SEC=180 \ + --env OBSERVE_POLL_MS=1000 \ + --env OBSERVE_WALLETS=4 +``` + +**token_settle_check knobs** +- `ADDRESSES`: comma-separated list of addresses to check balances for (in addition to derived wallets). +- `SETTLE_WALLETS`: derive first N wallets from `WALLETS_MNEMONICS` (default `4`). +- Optional preflight (helps avoid “pending tx” skew): + - `BLOCK_SYNC_ENABLE=1` with `BLOCK_SYNC_TIMEOUT_SEC`, `BLOCK_SYNC_POLL_MS`, `BLOCK_MAX_SKEW`, `BLOCK_STABLE_POLLS` + - `MEMPOOL_DRAIN_ENABLE=1` with `MEMPOOL_DRAIN_TIMEOUT_SEC`, `MEMPOOL_DRAIN_POLL_MS`, `MEMPOOL_DRAIN_STABLE_POLLS` + - `REQUIRE_MEMPOOL_DRAIN=true|false` (default `true`): fail fast if mempool doesn’t drain, since `token.*` reads may include pending tx effects. +- `CROSS_NODE_TIMEOUT_SEC`, `CROSS_NODE_POLL_MS`: balance/totalSupply cross-node convergence. +- `HOLDER_POINTER_CHECK=true|false`, `HOLDER_POINTER_TIMEOUT_SEC`, `HOLDER_POINTER_POLL_MS` +- Script convergence (when `EXPECT_SCRIPT=true`): + - `SCRIPT_HOOKCOUNTS_VIEW` (default `getHookCounts`) + - `SCRIPT_SETTLE_TIMEOUT_SEC`, `SCRIPT_SETTLE_POLL_MS` + - `SCRIPT_STABLE_POLLS` (default `3`): require N consecutive identical reads across nodes before passing. + +**token_observe knobs** +- `OBSERVE_SEC`, `OBSERVE_POLL_MS` +- `OBSERVE_WALLETS` (default `4`) or `ADDRESSES=0x...,0x...` +- `INCLUDE_MEMPOOL=true|false`, `INCLUDE_TOKEN_GET=true|false`, `INCLUDE_SCRIPT_STATE=true|false` +- `INCLUDE_RAW=true|false` (can get large; keep off unless needed) diff --git a/better_testing/docker-compose.perf.yml b/better_testing/docker-compose.perf.yml new file mode 100644 index 000000000..161aed5ed --- /dev/null +++ b/better_testing/docker-compose.perf.yml @@ -0,0 +1,72 @@ +services: + loadgen: + image: demos-devnet-node + entrypoint: ["bun"] + user: "${LOADGEN_UID:-1000}:${LOADGEN_GID:-1000}" + depends_on: + - node-1 + - node-2 + - node-3 + - node-4 + environment: + # Comma-separated list of node RPC base URLs (inside the docker network). + - TARGETS=${TARGETS:-http://node-1:53551,http://node-2:53552,http://node-3:53553,http://node-4:53554} + # Scenario: rpc | transfer + - SCENARIO=${SCENARIO:-rpc} + - DURATION_SEC=${DURATION_SEC:-30} + - CONCURRENCY=${CONCURRENCY:-50} + - RPC_METHOD=${RPC_METHOD:-ping} + - RPC_PATH=${RPC_PATH:-/} + - RATE_LIMIT_RPS=${RATE_LIMIT_RPS:-0} + - SAMPLE_LIMIT=${SAMPLE_LIMIT:-200000} + - WAIT_FOR_RPC_SEC=${WAIT_FOR_RPC_SEC:-120} + - WAIT_FOR_TX_SEC=${WAIT_FOR_TX_SEC:-120} + - FETCH_TIMEOUT_MS=${FETCH_TIMEOUT_MS:-} + - QUIET=${QUIET:-true} + - AVOID_SELF_RECIPIENT=${AVOID_SELF_RECIPIENT:-true} + - INFLIGHT_PER_WALLET=${INFLIGHT_PER_WALLET:-1} + - EMIT_TIMESERIES=${EMIT_TIMESERIES:-true} + - RUNS_DIR=${RUNS_DIR:-/runs} + - RUN_ID=${RUN_ID:-} + # Ramp scenario config + - RAMP_CONCURRENCY=${RAMP_CONCURRENCY:-1,2,4,8} + - RAMP_INFLIGHT_PER_WALLET=${RAMP_INFLIGHT_PER_WALLET:-} + - STEP_DURATION_SEC=${STEP_DURATION_SEC:-15} + - COOLDOWN_SEC=${COOLDOWN_SEC:-3} + # Transfer scenario config (native send) + # RECIPIENTS is required when SCENARIO=transfer + - RECIPIENTS=${RECIPIENTS:-0x8db33f19486774dea73efbfed1175fb25fcf5a2682e1f55271207dc01670bb19,0x7bee59666b7ef18f648df18c4ed3677a79b30aaa6cf66dc6ab2818fd4be2dcfb,0xd98eabad3b7e6384355d313130314263278d5a7a7f5ab665881c54711159e760,0x71b0c2af6fed129df6c25dbf2b7a0d3c6b414df64980f513997be86200ef5e0e} + - AMOUNT=${AMOUNT:-1} + - MNEMONICS_DIR=${MNEMONICS_DIR:-/wallets} + - WALLET_FILES=${WALLET_FILES:-node1.identity,node2.identity,node3.identity,node4.identity} + # Token scenario config + - TOKEN_ADDRESS=${TOKEN_ADDRESS:-} + - TOKEN_BOOTSTRAP=${TOKEN_BOOTSTRAP:-true} + - TOKEN_DISTRIBUTE=${TOKEN_DISTRIBUTE:-true} + - TOKEN_NAME=${TOKEN_NAME:-Perf Token} + - TOKEN_TICKER=${TOKEN_TICKER:-PERF} + - TOKEN_DECIMALS=${TOKEN_DECIMALS:-18} + - TOKEN_INITIAL_SUPPLY=${TOKEN_INITIAL_SUPPLY:-1000000000000000000000000} + - TOKEN_DISTRIBUTE_AMOUNT=${TOKEN_DISTRIBUTE_AMOUNT:-100000000000000000000000} + - TOKEN_TRANSFER_AMOUNT=${TOKEN_TRANSFER_AMOUNT:-1} + - TOKEN_MINT_AMOUNT=${TOKEN_MINT_AMOUNT:-1} + - TOKEN_BURN_AMOUNT=${TOKEN_BURN_AMOUNT:-1} + - TOKEN_WAIT_EXISTS_SEC=${TOKEN_WAIT_EXISTS_SEC:-120} + - TOKEN_WAIT_DISTRIBUTION_SEC=${TOKEN_WAIT_DISTRIBUTION_SEC:-120} + - TOKEN_WAIT_DISTRIBUTION=${TOKEN_WAIT_DISTRIBUTION:-true} + networks: + - demos-network + volumes: + # Mount devnet mnemonics so loadgen can reuse funded devnet accounts without baking secrets into images. + # Path is relative to the `devnet/` directory (where we run docker compose from). + - ./identities:/wallets:ro + # Persist run outputs on the host for dashboarding and comparisons. + - ../better_testing/runs:/runs + command: + [ + "better_testing/loadgen/src/main.ts" + ] + +networks: + demos-network: + external: false diff --git a/better_testing/loadgen/README.md b/better_testing/loadgen/README.md new file mode 100644 index 000000000..dc8ff2fb7 --- /dev/null +++ b/better_testing/loadgen/README.md @@ -0,0 +1,311 @@ +# better_testing/loadgen + +Local perf harness scripts intended to run **inside the devnet docker network**. + +## RPC baseline loadgen (Phase 1) + +Runs a high-throughput RPC client against one or more nodes and reports: +- total requests +- ok/error counts +- RPS (overall) +- latency p50/p95/p99 (based on sampled requests) + +### Run inside devnet network (recommended) + +```bash +cd devnet +docker compose up -d --build + +# Phase 1: run loadgen service (overlay compose) +docker compose -f docker-compose.yml -f ../better_testing/docker-compose.perf.yml up --abort-on-container-exit loadgen +``` + +Tip: for repeated runs without touching the node containers, prefer: + +```bash +cd devnet +docker compose up -d --build +docker compose -f docker-compose.yml -f ../better_testing/docker-compose.perf.yml run --rm --no-deps --build loadgen +``` + +Note: `loadgen` runs inside the `demos-devnet-node` image. If you change `better_testing/loadgen/*`, rebuild the image first: +```bash +cd devnet +docker compose build node-1 +``` + +## RPC ramp (Phase 1.1) + +Quickly sweeps concurrency to find the HTTP/RPC knee point: + +```bash +cd devnet +docker compose up -d --build + +RUN_ID=rpc-ramp-$(date +%Y%m%d-%H%M%S) \ +SCENARIO=rpc_ramp \ +RAMP_CONCURRENCY=10,50,100,200 \ +STEP_DURATION_SEC=10 \ +COOLDOWN_SEC=2 \ +RPC_METHOD=ping \ +docker compose -f docker-compose.yml -f ../better_testing/docker-compose.perf.yml up --abort-on-container-exit --build loadgen +``` + +## Transfer loadgen (Phase 2) + +Benchmarks native token transfer TPS using the same public RPC surface as clients: +- builds a `native` transaction with `nativeOperation: "send"` +- `confirmTx` (gas + validity) +- `broadcastTx` (execution) + +Run (inside devnet network): +```bash +cd devnet +docker compose up -d --build + +SCENARIO=transfer docker compose -f docker-compose.yml -f ../better_testing/docker-compose.perf.yml up --abort-on-container-exit loadgen +``` + +Required env when `SCENARIO=transfer`: +- `RECIPIENTS`: comma-separated `0x...` addresses to send to + +Optional env (recommended): +- `WAIT_FOR_RPC_SEC`: wait up to N seconds for each target RPC to become reachable (default 120) +- `WAIT_FOR_TX_SEC`: wait up to N seconds for the tx pipeline to be ready (via `nodeCall` `crypto.getIdentity`) (default 120) +- `QUIET`: silence noisy dependency logs (default true) +- `AVOID_SELF_RECIPIENT`: avoid sending to self if the sender address appears in `RECIPIENTS` (default true) +- `INFLIGHT_PER_WALLET`: number of concurrent in-flight txs per wallet (default 1) +- `EMIT_TIMESERIES`: append per-second JSONL points to the run folder (default true) +- `RUN_ID`: optional run identifier (default: ISO timestamp) + +Wallet sourcing (defaults to devnet identities): +- `MNEMONICS_DIR=/wallets` (set by `better_testing/docker-compose.perf.yml`) +- `WALLET_FILES=node1.identity,node2.identity,node3.identity,node4.identity` + +## Run artifacts + +When running via the overlay compose, the loadgen container writes artifacts to the host: +- `better_testing/runs//rpc.summary.json` +- `better_testing/runs//rpc.timeseries.jsonl` +- `better_testing/runs//transfer.summary.json` +- `better_testing/runs//transfer.timeseries.jsonl` +- `better_testing/runs//token_smoke.summary.json` +- `better_testing/runs//token_transfer.summary.json` +- `better_testing/runs//token_transfer.timeseries.jsonl` +- `better_testing/runs//token_transfer_ramp.summary.json` +- `better_testing/runs//token_mint.summary.json` +- `better_testing/runs//token_mint.timeseries.jsonl` +- `better_testing/runs//token_mint_ramp.summary.json` +- `better_testing/runs//token_burn.summary.json` +- `better_testing/runs//token_burn.timeseries.jsonl` +- `better_testing/runs//token_burn_ramp.summary.json` + +Note: `loadgen` runs as a non-root user by default (`LOADGEN_UID=1000`, `LOADGEN_GID=1000`) so run outputs are host-writable. + +## Transfer ramp (Phase 2.1) + +Runs a small step ramp to find the knee point quickly (prints a `transfer_ramp_summary` JSON): + +```bash +cd devnet +docker compose up -d --build + +SCENARIO=transfer_ramp \ +RAMP_CONCURRENCY=1,2,4 \ +STEP_DURATION_SEC=15 \ +COOLDOWN_SEC=3 \ +INFLIGHT_PER_WALLET=1 \ +docker compose -f docker-compose.yml -f ../better_testing/docker-compose.perf.yml up --abort-on-container-exit loadgen +``` + +## Token smoke (Phase 3) + +Creates a token (unless `TOKEN_ADDRESS` is provided), optionally distributes balances to the first 2 wallets, then performs a single token transfer and checks balances. + +```bash +cd devnet +docker compose up -d --build + +RUN_ID=token-smoke-$(date +%Y%m%d-%H%M%S) \ +SCENARIO=token_smoke \ +docker compose -f docker-compose.yml -f ../better_testing/docker-compose.perf.yml up --abort-on-container-exit --build loadgen +``` + +Notes: +- Token creation/distribution are consensus-applied, so on fresh devnet starts you may need higher waits: + - `TOKEN_WAIT_EXISTS_SEC` (default 120) + - `TOKEN_WAIT_DISTRIBUTION_SEC` (default 120) +- Token transactions are sent with `tx.content.type="native"` (not `demoswork`) to avoid the demosWork script engine trying to interpret token payloads as `DemoScript` (which caused occasional `script.operationOrder` errors in responses). +- Smoke scenarios also run an optional **cross-node consistency gate** (default enabled) after the tx is applied on the primary target: + - `CROSS_NODE_CHECK` (default true) + - `CROSS_NODE_TIMEOUT_SEC` (default 120) + - `CROSS_NODE_POLL_MS` (default 500) +- Smoke scenarios also run an optional **holder-pointer gate** (default enabled) to ensure holder token pointers match balances: + - `HOLDER_POINTER_CHECK` (default true) + - `HOLDER_POINTER_TIMEOUT_SEC` (default 120) + - `HOLDER_POINTER_POLL_MS` (default 500) + - Requires nodeCall `token.getHolderPointers` (ensure your devnet image is rebuilt). + +## Token mint/burn smoke (Phase 3.3) + +Owner-only mint (deployer mints to wallet-2) and burn (wallet-1 burns own balance): + +```bash +cd devnet +docker compose up -d --build + +RUN_ID=token-mint-smoke-$(date +%Y%m%d-%H%M%S) \ +SCENARIO=token_mint_smoke \ +TOKEN_MINT_AMOUNT=1 \ +docker compose -f docker-compose.yml -f ../better_testing/docker-compose.perf.yml run --rm --no-deps --build loadgen +``` + +```bash +cd devnet +docker compose up -d --build + +RUN_ID=token-burn-smoke-$(date +%Y%m%d-%H%M%S) \ +SCENARIO=token_burn_smoke \ +TOKEN_BURN_AMOUNT=1 \ +docker compose -f docker-compose.yml -f ../better_testing/docker-compose.perf.yml run --rm --no-deps --build loadgen +``` + +## Token transfer loadgen (Phase 3.1) + +Benchmarks token `transfer` transactions through the same public RPC surface as clients. + +```bash +cd devnet +docker compose up -d --build + +RUN_ID=token-transfer-$(date +%Y%m%d-%H%M%S) \ +SCENARIO=token_transfer \ +CONCURRENCY=4 \ +INFLIGHT_PER_WALLET=2 \ +TOKEN_TRANSFER_AMOUNT=1 \ +docker compose -f docker-compose.yml -f ../better_testing/docker-compose.perf.yml up --abort-on-container-exit --build loadgen +``` + +Post-run convergence checks (recommended to keep on, strict mode optional): +- `POST_RUN_SETTLE_CHECK` (default true) +- `POST_RUN_SETTLE_STRICT` (default false) +- `POST_RUN_SETTLE_TIMEOUT_SEC` (default 120) +- `POST_RUN_SETTLE_POLL_MS` (default 500) +- `POST_RUN_SETTLE_SAMPLE_ADDRESSES` (default 8) +- `POST_RUN_HOLDER_POINTER_CHECK` (default true) +- `POST_RUN_HOLDER_POINTER_STRICT` (default false) +- `POST_RUN_HOLDER_POINTER_TIMEOUT_SEC` (default 120) +- `POST_RUN_HOLDER_POINTER_POLL_MS` (default 500) + +Optional networking hygiene: +- `FETCH_TIMEOUT_MS` (default unset/disabled): if set, wraps `fetch()` with an AbortController timeout to avoid hung RPC calls stalling a loadgen step. + +## Token transfer ramp (Phase 3.2) + +```bash +cd devnet +docker compose up -d --build + +RUN_ID=token-transfer-ramp-$(date +%Y%m%d-%H%M%S) \ +SCENARIO=token_transfer_ramp \ +RAMP_CONCURRENCY=1,2,4 \ +STEP_DURATION_SEC=15 \ +COOLDOWN_SEC=3 \ +INFLIGHT_PER_WALLET=2 \ +TOKEN_TRANSFER_AMOUNT=1 \ +docker compose -f docker-compose.yml -f ../better_testing/docker-compose.perf.yml up --abort-on-container-exit --build loadgen +``` + +Inflight ramp (keeps `CONCURRENCY` fixed and sweeps `INFLIGHT_PER_WALLET`): + +```bash +cd devnet +docker compose up -d --build + +RUN_ID=token-transfer-inflight-ramp-$(date +%Y%m%d-%H%M%S) \ +SCENARIO=token_transfer_ramp \ +CONCURRENCY=4 \ +RAMP_INFLIGHT_PER_WALLET=1,2,4,6,8 \ +STEP_DURATION_SEC=20 \ +COOLDOWN_SEC=5 \ +TOKEN_TRANSFER_AMOUNT=1 \ +docker compose -f docker-compose.yml -f ../better_testing/docker-compose.perf.yml up --abort-on-container-exit --build loadgen +``` + +Note: `token_transfer_ramp` bootstraps/distributes a token once, then reuses the same `TOKEN_ADDRESS` for the remaining steps for more stable results. + +## Token mint loadgen (Phase 3.4) + +Owner-only mint throughput. Uses **wallet-1 (deployer/owner)** for all txs, mints to `RECIPIENTS` (defaults to all loaded wallets). + +```bash +cd devnet +docker compose up -d --build + +RUN_ID=token-mint-$(date +%Y%m%d-%H%M%S) \ +SCENARIO=token_mint \ +CONCURRENCY=4 \ +INFLIGHT_PER_WALLET=4 \ +TOKEN_MINT_AMOUNT=1 \ +docker compose -f docker-compose.yml -f ../better_testing/docker-compose.perf.yml up --abort-on-container-exit --build loadgen +``` + +Note: because this is owner-only, increasing throughput mostly comes from `INFLIGHT_PER_WALLET` (single-account nonce stream), not adding more wallets. + +The same post-run convergence checks as `token_transfer` apply. + +## Token mint ramp (Phase 3.5) + +```bash +cd devnet +docker compose up -d --build + +RUN_ID=token-mint-ramp-$(date +%Y%m%d-%H%M%S) \ +SCENARIO=token_mint_ramp \ +RAMP_CONCURRENCY=1,2,4,8 \ +STEP_DURATION_SEC=15 \ +COOLDOWN_SEC=3 \ +INFLIGHT_PER_WALLET=4 \ +TOKEN_MINT_AMOUNT=1 \ +docker compose -f docker-compose.yml -f ../better_testing/docker-compose.perf.yml up --abort-on-container-exit --build loadgen +``` + +## Token burn loadgen (Phase 3.6) + +Owner-only burn throughput. Uses **wallet-1 (owner)** and burns from its own balance. + +```bash +cd devnet +docker compose up -d --build + +RUN_ID=token-burn-$(date +%Y%m%d-%H%M%S) \ +SCENARIO=token_burn \ +CONCURRENCY=4 \ +INFLIGHT_PER_WALLET=4 \ +TOKEN_BURN_AMOUNT=1 \ +docker compose -f docker-compose.yml -f ../better_testing/docker-compose.perf.yml up --abort-on-container-exit --build loadgen +``` + +The same post-run convergence checks as `token_transfer` apply. + +## Token burn ramp (Phase 3.7) + +```bash +cd devnet +docker compose up -d --build + +RUN_ID=token-burn-ramp-$(date +%Y%m%d-%H%M%S) \ +SCENARIO=token_burn_ramp \ +RAMP_CONCURRENCY=1,2,4,8 \ +STEP_DURATION_SEC=15 \ +COOLDOWN_SEC=3 \ +INFLIGHT_PER_WALLET=4 \ +TOKEN_BURN_AMOUNT=1 \ +docker compose -f docker-compose.yml -f ../better_testing/docker-compose.perf.yml up --abort-on-container-exit --build loadgen +``` + +### Run from host (less stable due to host<->docker NAT) + +```bash +TARGETS=http://localhost:53551 DURATION_SEC=15 CONCURRENCY=50 bun better_testing/loadgen/src/rpc_loadgen.ts +``` diff --git a/better_testing/loadgen/src/im_online_loadgen.ts b/better_testing/loadgen/src/im_online_loadgen.ts new file mode 100644 index 000000000..860a9239a --- /dev/null +++ b/better_testing/loadgen/src/im_online_loadgen.ts @@ -0,0 +1,387 @@ +import { appendJsonl, getRunConfig, writeJson } from "./run_io" +import { + ReservoirSampler, + decodePerfPayload, + encodePerfPayload, + generateClientId, + getImTargets, + maybeSilenceConsole, + nowMs, + percentile, + registerClient, +} from "./im_shared" + +type Config = { + wsTargets: string[] + durationSec: number + pairs: number + inflightPerSender: number + sampleLimit: number + messageBytes: number + emitTimeseries: boolean + rateLimitRps: number +} + +type Counters = { + startedAtMs: number + endedAtMs: number + total: number + ok: number + error: number + timeout: number +} + +type TimeseriesPoint = { + tSec: number + ok: number + total: number + error: number + timeout: number + tpsOk: number + latencyMs: { sampleCount: number; p50: number; p95: number; p99: number } + timestamp: string +} + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function envBool(name: string, fallback: boolean): boolean { + const raw = process.env[name] + if (!raw) return fallback + switch (raw.trim().toLowerCase()) { + case "1": + case "true": + case "yes": + case "y": + case "on": + return true + case "0": + case "false": + case "no": + case "n": + case "off": + return false + default: + return fallback + } +} + +function pickTarget(targets: string[], idx: number): string { + if (targets.length === 0) throw new Error("No IM_TARGETS configured") + return targets[Math.abs(idx) % targets.length]! +} + +function busyWaitJitter(minMs: number, maxMs: number): Promise { + const span = Math.max(0, maxMs - minMs) + const extra = span > 0 ? Math.floor(Math.random() * (span + 1)) : 0 + return sleep(Math.max(0, minMs + extra)) +} + +function getConfig(): Config { + const wsTargets = getImTargets() + return { + wsTargets, + durationSec: envInt("DURATION_SEC", 20), + pairs: Math.max(1, envInt("IM_PAIRS", 2)), + inflightPerSender: Math.max(1, envInt("INFLIGHT_PER_SENDER", envInt("INFLIGHT_PER_WALLET", 1))), + sampleLimit: envInt("SAMPLE_LIMIT", 200_000), + messageBytes: Math.max(0, envInt("IM_MESSAGE_BYTES", 128)), + emitTimeseries: envBool("EMIT_TIMESERIES", true), + rateLimitRps: Math.max(0, envInt("RATE_LIMIT_RPS", 0)), + } +} + +function randomId(): string { + return crypto.randomUUID?.() ?? `${nowMs()}-${Math.floor(Math.random() * 1e9)}` +} + +function buildPayload(role: "ping" | "pong", id: string, sentAtMs: number, sizeBytes: number) { + const pad = sizeBytes > 0 ? "0".repeat(sizeBytes) : undefined + return encodePerfPayload({ kind: "im_perf", role, id, sentAtMs, sizeBytes, pad }) +} + +export async function runImOnlineLoadgen() { + maybeSilenceConsole() + const cfg = getConfig() + const logEvents = envBool("IM_LOG_EVENTS", false) + + const run = getRunConfig() + const artifactBase = `${run.runDir}/im_online` + const artifacts = { + runId: run.runId, + runDir: run.runDir, + summaryPath: `${artifactBase}.summary.json`, + timeseriesPath: `${artifactBase}.timeseries.jsonl`, + logPath: `${artifactBase}.log.jsonl`, + } + + const startedAtMs = nowMs() + const stopAtMs = startedAtMs + cfg.durationSec * 1000 + + const counters: Counters = { + startedAtMs, + endedAtMs: 0, + total: 0, + ok: 0, + error: 0, + timeout: 0, + } + + const sampler = new ReservoirSampler(cfg.sampleLimit) + const timeseriesSampler = new ReservoirSampler(50_000) + + let lastPointAtMs = startedAtMs + let lastOk = 0 + let lastTotal = 0 + let lastError = 0 + let lastTimeout = 0 + + async function timeseriesLoop() { + if (!cfg.emitTimeseries) return + while (nowMs() < stopAtMs) { + await sleep(1000) + const now = nowMs() + const elapsedSinceLast = Math.max(0.001, (now - lastPointAtMs) / 1000) + lastPointAtMs = now + + const okDelta = counters.ok - lastOk + const totalDelta = counters.total - lastTotal + const errorDelta = counters.error - lastError + const timeoutDelta = counters.timeout - lastTimeout + + lastOk = counters.ok + lastTotal = counters.total + lastError = counters.error + lastTimeout = counters.timeout + + const samples = timeseriesSampler.snapshotSorted() + const point: TimeseriesPoint = { + tSec: (now - startedAtMs) / 1000, + ok: okDelta, + total: totalDelta, + error: errorDelta, + timeout: timeoutDelta, + tpsOk: okDelta / elapsedSinceLast, + latencyMs: { + sampleCount: timeseriesSampler.size(), + p50: percentile(samples, 50), + p95: percentile(samples, 95), + p99: percentile(samples, 99), + }, + timestamp: new Date().toISOString(), + } + + appendJsonl(artifacts.timeseriesPath, point) + } + } + + const pairs: Array<{ + senderId: string + receiverId: string + sender: Awaited> + receiver: Awaited> + }> = [] + + function logEvent(event: any) { + if (!logEvents) return + appendJsonl(artifacts.logPath, { t: new Date().toISOString(), ...event }) + } + + // Register clients (2 per pair). Stagger slightly to avoid thundering herd. + for (let i = 0; i < cfg.pairs; i++) { + const wsUrl = pickTarget(cfg.wsTargets, i) + const senderId = generateClientId() + const receiverId = generateClientId() + const sender = await registerClient({ wsUrl, clientId: senderId, instanceId: `im:${senderId}` }) + await busyWaitJitter(10, 50) + const receiver = await registerClient({ wsUrl, clientId: receiverId, instanceId: `im:${receiverId}` }) + await busyWaitJitter(10, 50) + pairs.push({ senderId, receiverId, sender, receiver }) + } + + appendJsonl(artifacts.logPath, { + t: new Date().toISOString(), + phase: "registered", + wsTargets: cfg.wsTargets, + pairs: pairs.map(p => ({ wsUrl: p.sender.wsUrl, senderId: p.senderId, receiverId: p.receiverId })), + }) + + // Receiver behavior: echo pings back as pongs + for (const pair of pairs) { + pair.receiver.ws.onmessage = (evt: MessageEvent) => { + try { + const raw = typeof evt.data === "string" ? evt.data : new TextDecoder().decode(evt.data as any) + const msg = JSON.parse(raw) + if (msg?.type === "error") { + logEvent({ phase: "receiverError", receiverId: pair.receiverId, msg }) + return + } + if (msg?.type !== "message") return + const fromId = msg?.payload?.fromId + const payload = decodePerfPayload(msg?.payload?.message) + if (!fromId || !payload) return + if (payload.role !== "ping") return + + logEvent({ phase: "recvPing", receiverId: pair.receiverId, fromId, id: payload.id }) + + // Build pong with same id and sentAtMs (sender will measure RTT). + const pong = buildPayload("pong", payload.id, payload.sentAtMs, payload.sizeBytes) + pair.receiver.sendRaw({ type: "message", payload: { targetId: fromId, message: pong } }) + } catch { + // ignore + } + } + } + + // Sender behavior: measure pong RTT + const pending = new Map() + for (const pair of pairs) { + pair.sender.ws.onmessage = (evt: MessageEvent) => { + try { + const raw = typeof evt.data === "string" ? evt.data : new TextDecoder().decode(evt.data as any) + const msg = JSON.parse(raw) + if (msg?.type === "error") { + logEvent({ phase: "senderError", senderId: pair.senderId, msg }) + counters.error++ + return + } + if (msg?.type !== "message") return + const payload = decodePerfPayload(msg?.payload?.message) + if (!payload) return + if (payload.role !== "pong") return + const started = pending.get(payload.id) + if (started === undefined) return + pending.delete(payload.id) + + const elapsed = performance.now() - started + sampler.add(elapsed) + timeseriesSampler.add(elapsed) + counters.ok++ + logEvent({ phase: "recvPong", senderId: pair.senderId, id: payload.id, rttMs: elapsed }) + } catch { + // ignore + } + } + } + + const rateLimitRps = cfg.rateLimitRps + const perSenderIntervalMs = rateLimitRps > 0 ? Math.max(1, Math.floor(1000 / rateLimitRps)) : 0 + const perSenderLastSendAt: number[] = pairs.map(() => 0) + + async function sendLoop(pairIndex: number) { + const pair = pairs[pairIndex]! + const inflight = cfg.inflightPerSender + const active = new Set>() + + async function sendOne() { + counters.total++ + const id = randomId() + const started = performance.now() + pending.set(id, started) + + try { + const sentAtMs = nowMs() + const ping = buildPayload("ping", id, sentAtMs, cfg.messageBytes) + pair.sender.sendRaw({ type: "message", payload: { targetId: pair.receiverId, message: ping } }) + logEvent({ phase: "sendPing", senderId: pair.senderId, receiverId: pair.receiverId, id }) + } catch { + pending.delete(id) + counters.error++ + return + } + + // Timeout handling: if no pong returns, count as timeout and drop. + const timeoutMs = Math.max(250, envInt("IM_PONG_TIMEOUT_MS", 5000)) + await Promise.race([ + sleep(timeoutMs).then(() => "timeout"), + (async () => { + // Poll pending map (cheap) for completion. + const deadline = performance.now() + timeoutMs + while (performance.now() < deadline) { + if (!pending.has(id)) return "ok" + await sleep(10) + } + return "timeout" + })(), + ]).then(result => { + if (result === "timeout" && pending.has(id)) { + pending.delete(id) + counters.timeout++ + } + }) + } + + function launchOne() { + const p = (async () => { + if (perSenderIntervalMs > 0) { + const now = nowMs() + const last = perSenderLastSendAt[pairIndex] ?? 0 + const waitMs = Math.max(0, last + perSenderIntervalMs - now) + if (waitMs > 0) await sleep(waitMs) + perSenderLastSendAt[pairIndex] = nowMs() + } + await sendOne() + })().finally(() => active.delete(p)) + active.add(p) + } + + while (nowMs() < stopAtMs) { + while (active.size < inflight && nowMs() < stopAtMs) { + launchOne() + } + if (active.size === 0) break + await Promise.race(Array.from(active)) + } + + await Promise.allSettled(Array.from(active)) + } + + await Promise.all([timeseriesLoop(), ...pairs.map((_, idx) => sendLoop(idx))]) + + counters.endedAtMs = nowMs() + + // Clean shutdown + for (const pair of pairs) { + try { pair.sender.close() } catch {} + try { pair.receiver.close() } catch {} + } + + const durationSec = (counters.endedAtMs - counters.startedAtMs) / 1000 + const samples = sampler.snapshotSorted() + + const summary = { + scenario: "im_online", + ok: counters.ok, + total: counters.total, + error: counters.error, + timeout: counters.timeout, + durationSec, + okTps: counters.ok / Math.max(0.001, durationSec), + latencyMs: { + sampleCount: sampler.size(), + p50: percentile(samples, 50), + p95: percentile(samples, 95), + p99: percentile(samples, 99), + }, + config: { + wsTargets: cfg.wsTargets, + pairs: cfg.pairs, + inflightPerSender: cfg.inflightPerSender, + messageBytes: cfg.messageBytes, + rateLimitRps: cfg.rateLimitRps, + }, + artifacts, + timestamp: new Date().toISOString(), + } + + writeJson(artifacts.summaryPath, summary) + console.log(JSON.stringify({ im_online_summary: summary }, null, 2)) +} diff --git a/better_testing/loadgen/src/im_online_ramp.ts b/better_testing/loadgen/src/im_online_ramp.ts new file mode 100644 index 000000000..ab146cc46 --- /dev/null +++ b/better_testing/loadgen/src/im_online_ramp.ts @@ -0,0 +1,113 @@ +import { runImOnlineLoadgen } from "./im_online_loadgen" +import { getRunConfig, writeJson } from "./run_io" + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function splitCsv(value: string | undefined): string[] { + return (value ?? "") + .split(",") + .map(s => s.trim()) + .filter(Boolean) +} + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +export async function runImOnlineRamp() { + const rampPairs = splitCsv(process.env.RAMP_PAIRS ?? "1,2,4,8,16") + .map(s => Number.parseInt(s, 10)) + .filter(n => Number.isFinite(n) && n > 0) + const stepDurationSec = envInt("STEP_DURATION_SEC", 15) + const cooldownSec = envInt("COOLDOWN_SEC", 3) + + if (rampPairs.length === 0) throw new Error("RAMP_PAIRS must be a comma-separated list of positive ints") + + const run = getRunConfig() + const artifactBase = `${run.runDir}/im_online_ramp` + const artifacts = { + runId: run.runId, + runDir: run.runDir, + summaryPath: `${artifactBase}.summary.json`, + } + + const results: any[] = [] + + for (const pairs of rampPairs) { + process.env.SCENARIO = "im_online" + process.env.DURATION_SEC = String(stepDurationSec) + process.env.IM_PAIRS = String(pairs) + + let stepSummary: any = null + let stepError: any = null + + const originalLog = console.log + const capture: any[] = [] + console.log = (...args: any[]) => { + capture.push(args) + originalLog(...args) + } + + try { + await runImOnlineLoadgen() + for (const row of capture) { + const payload = row?.[0] + if (payload && typeof payload === "string") { + try { + const parsed = JSON.parse(payload) + if (parsed?.im_online_summary) stepSummary = parsed.im_online_summary + } catch { + // ignore + } + } else if (payload?.im_online_summary) { + stepSummary = payload.im_online_summary + } + } + } catch (err: any) { + stepError = { message: err?.message ?? String(err) } + } finally { + console.log = originalLog + } + + results.push({ + pairs, + stepDurationSec, + cooldownSec, + summary: stepSummary, + error: stepError, + }) + + if (cooldownSec > 0) await sleep(cooldownSec * 1000) + } + + const okSteps = results + .map(r => ({ pairs: r.pairs, okTps: r.summary?.okTps, p95: r.summary?.latencyMs?.p95 })) + .filter(r => typeof r.okTps === "number") + + const best = okSteps.sort((a, b) => (b.okTps ?? 0) - (a.okTps ?? 0))[0] ?? null + + const rampSummary = { + scenario: "im_online_ramp", + bestByOkTps: best, + steps: results, + config: { + rampPairs, + stepDurationSec, + cooldownSec, + inflightPerSender: envInt("INFLIGHT_PER_SENDER", envInt("INFLIGHT_PER_WALLET", 1)), + messageBytes: envInt("IM_MESSAGE_BYTES", 128), + rateLimitRps: envInt("RATE_LIMIT_RPS", 0), + }, + artifacts, + timestamp: new Date().toISOString(), + } + + writeJson(artifacts.summaryPath, rampSummary) + console.log(JSON.stringify({ im_online_ramp_summary: rampSummary }, null, 2)) +} + diff --git a/better_testing/loadgen/src/im_shared.ts b/better_testing/loadgen/src/im_shared.ts new file mode 100644 index 000000000..583af2294 --- /dev/null +++ b/better_testing/loadgen/src/im_shared.ts @@ -0,0 +1,287 @@ +import { deserializeUint8Array, serializeUint8Array } from "@kynesyslabs/demosdk/utils" +import { ucrypto } from "@kynesyslabs/demosdk/encryption" + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function envBool(name: string, fallback: boolean): boolean { + const raw = process.env[name] + if (!raw) return fallback + switch (raw.trim().toLowerCase()) { + case "1": + case "true": + case "yes": + case "y": + case "on": + return true + case "0": + case "false": + case "no": + case "n": + case "off": + return false + default: + return fallback + } +} + +function splitCsv(value: string | undefined): string[] { + return (value ?? "") + .split(",") + .map(s => s.trim()) + .filter(Boolean) +} + +export function nowMs(): number { + return Date.now() +} + +export function normalizeWsUrl(url: string): string { + const trimmed = (url ?? "").trim() + if (!trimmed) return trimmed + return trimmed.replace(/\/+$/, "") +} + +export function getImTargets(): string[] { + const explicit = splitCsv(process.env.IM_TARGETS) + if (explicit.length > 0) return explicit.map(normalizeWsUrl) + + const fromRpc = splitCsv(process.env.TARGETS) + if (fromRpc.length > 0) { + return fromRpc.map(u => { + const normalized = u.trim().replace(/\/+$/, "") + // http://node-1:53551 -> ws://node-1:3005 + const noProto = normalized.replace(/^https?:\/\//, "") + const host = noProto.replace(/:\d+$/, "") + return `ws://${host}:3005` + }) + } + + return ["ws://node-1:3005"] +} + +export type RegisterClientParams = { + wsUrl: string + clientId: string + instanceId: string + timeoutSec?: number +} + +export type RegisteredClient = { + wsUrl: string + clientId: string + ws: WebSocket + close: () => void + sendRaw: (data: any) => void +} + +export type ImPerfPayload = { + kind: "im_perf" + role: "ping" | "pong" + id: string + sentAtMs: number + sizeBytes: number + pad?: string +} + +export function encodePerfPayload(payload: ImPerfPayload): { algorithm: "rsa"; serializedEncryptedData: string } { + const json = JSON.stringify(payload) + const bytes = new TextEncoder().encode(json) + return { algorithm: "rsa", serializedEncryptedData: serializeUint8Array(bytes) } +} + +export function decodePerfPayload(message: any): ImPerfPayload | null { + const raw = message?.serializedEncryptedData + if (typeof raw !== "string" || raw.length === 0) return null + try { + const bytes = deserializeUint8Array(raw) + const text = new TextDecoder().decode(bytes) + const parsed = JSON.parse(text) + if (parsed?.kind !== "im_perf") return null + if (parsed?.role !== "ping" && parsed?.role !== "pong") return null + if (typeof parsed?.id !== "string") return null + if (typeof parsed?.sentAtMs !== "number") return null + if (typeof parsed?.sizeBytes !== "number") return null + return parsed as ImPerfPayload + } catch { + return null + } +} + +function randomHex(bytes: number): string { + const u8 = new Uint8Array(bytes) + crypto.getRandomValues(u8) + return Array.from(u8).map(b => b.toString(16).padStart(2, "0")).join("") +} + +export function generateClientId(): string { + // 32 bytes -> 64 hex chars + return "0x" + randomHex(32) +} + +async function buildRegistrationProof(instanceId: string): Promise<{ + publicKeyBytes: Uint8Array + verification: { algorithm: "ed25519"; serializedSignedData: string; serializedPublicKey: string; serializedMessage: string } +}> { + const uc = ucrypto.getInstance(instanceId) + await uc.generateIdentity("ed25519") + const message = new TextEncoder().encode("im_perf_register:" + randomHex(16)) + const signed = await uc.sign("ed25519", message) + const publicKeyBytes = new Uint8Array(signed.publicKey as any) + const signatureBytes = new Uint8Array(signed.signature as any) + + return { + publicKeyBytes, + verification: { + algorithm: "ed25519", + serializedSignedData: serializeUint8Array(signatureBytes), + serializedPublicKey: serializeUint8Array(publicKeyBytes), + serializedMessage: serializeUint8Array(message), + }, + } +} + +export async function registerClient(params: RegisterClientParams): Promise { + const timeoutSec = Math.max(1, Math.floor(params.timeoutSec ?? envInt("IM_REGISTER_TIMEOUT_SEC", 30))) + const wsUrl = normalizeWsUrl(params.wsUrl) + + const { publicKeyBytes, verification } = await buildRegistrationProof(params.instanceId) + + const ws = new WebSocket(wsUrl) + ws.binaryType = "arraybuffer" + + let openResolve: (() => void) | null = null + let openReject: ((err: any) => void) | null = null + const openPromise = new Promise((resolve, reject) => { + openResolve = resolve + openReject = reject + }) + + let registerResolve: (() => void) | null = null + let registerReject: ((err: any) => void) | null = null + const registerPromise = new Promise((resolve, reject) => { + registerResolve = resolve + registerReject = reject + }) + + ws.onopen = () => openResolve?.() + ws.onerror = (e: any) => { + openReject?.(e) + registerReject?.(e) + } + ws.onmessage = (evt: MessageEvent) => { + try { + const raw = typeof evt.data === "string" ? evt.data : new TextDecoder().decode(evt.data as any) + const msg = JSON.parse(raw) + if (msg?.type === "register" && msg?.payload?.success === true && msg?.payload?.clientId === params.clientId) { + registerResolve?.() + } + if (msg?.type === "error") { + // If registration fails, surface early. + const details = msg?.payload?.details ?? JSON.stringify(msg?.payload ?? msg) + registerReject?.(new Error(`IM error: ${details}`)) + } + } catch { + // ignore + } + } + + await Promise.race([ + openPromise, + sleep(timeoutSec * 1000).then(() => { + throw new Error(`WebSocket open timeout after ${timeoutSec}s: ${wsUrl}`) + }), + ]) + + // Send register + ws.send(JSON.stringify({ + type: "register", + payload: { + clientId: params.clientId, + publicKey: Array.from(publicKeyBytes), + verification, + }, + })) + + await Promise.race([ + registerPromise, + sleep(timeoutSec * 1000).then(() => { + throw new Error(`Register timeout after ${timeoutSec}s for ${params.clientId} at ${wsUrl}`) + }), + ]) + + return { + wsUrl, + clientId: params.clientId, + ws, + close: () => { + try { ws.close() } catch {} + }, + sendRaw: (data: any) => ws.send(typeof data === "string" ? data : JSON.stringify(data)), + } +} + +export function maybeSilenceConsole() { + if (!envBool("QUIET", true)) return + const allowedPrefixes = ["{", "["] + const originalLog = console.log.bind(console) + const originalWarn = console.warn.bind(console) + const filter = (...args: any[]) => { + if (args.length === 0) return + const first = args[0] + if (typeof first === "string") { + const trimmed = first.trim() + for (const p of allowedPrefixes) { + if (trimmed.startsWith(p)) return originalLog(...args) + } + return + } + return originalLog(...args) + } + console.log = filter as any + console.warn = (...args: any[]) => originalWarn(...args) +} + +export class ReservoirSampler { + private seen = 0 + private readonly max: number + private readonly samples: number[] = [] + + constructor(maxSamples: number) { + this.max = Math.max(1, Math.floor(maxSamples)) + } + + add(value: number) { + this.seen++ + if (this.samples.length < this.max) { + this.samples.push(value) + return + } + const j = Math.floor(Math.random() * this.seen) + if (j < this.max) this.samples[j] = value + } + + snapshotSorted(): number[] { + const copy = this.samples.slice() + copy.sort((a, b) => a - b) + return copy + } + + size(): number { + return this.samples.length + } +} + +export function percentile(sorted: number[], p: number): number { + if (sorted.length === 0) return NaN + const idx = Math.min(sorted.length - 1, Math.max(0, Math.floor((p / 100) * (sorted.length - 1)))) + return sorted[idx]! +} diff --git a/better_testing/loadgen/src/main.ts b/better_testing/loadgen/src/main.ts new file mode 100644 index 000000000..46280d7af --- /dev/null +++ b/better_testing/loadgen/src/main.ts @@ -0,0 +1,211 @@ +import { runRpcLoadgen } from "./rpc_loadgen" +import { runTransferLoadgen } from "./transfer_loadgen" +import { runTransferRamp } from "./transfer_ramp" +import { runRpcRamp } from "./rpc_ramp" +import { runTokenSmoke } from "./token_smoke" +import { runTokenTransferLoadgen } from "./token_transfer_loadgen" +import { runTokenTransferRamp } from "./token_transfer_ramp" +import { runTokenMintSmoke } from "./token_mint_smoke" +import { runTokenBurnSmoke } from "./token_burn_smoke" +import { runTokenMintLoadgen } from "./token_mint_loadgen" +import { runTokenBurnLoadgen } from "./token_burn_loadgen" +import { runTokenMintRamp } from "./token_mint_ramp" +import { runTokenBurnRamp } from "./token_burn_ramp" +import { runTokenAclSmoke } from "./token_acl_smoke" +import { runTokenConsensusConsistency } from "./token_consensus_consistency" +import { runTokenQueryCoverage } from "./token_query_coverage" +import { runTokenAclMatrix } from "./token_acl_matrix" +import { runTokenEdgeCases } from "./token_edge_cases" +import { runTokenAclBurnMatrix } from "./token_acl_burn_matrix" +import { runTokenAclPauseMatrix } from "./token_acl_pause_matrix" +import { runTokenAclTransferOwnershipMatrix } from "./token_acl_transfer_ownership_matrix" +import { runTokenAclMultiPermissionMatrix } from "./token_acl_multi_permission_matrix" +import { runTokenAclUpdateAclCompat } from "./token_acl_updateacl_compat" +import { runTokenScriptSmoke } from "./token_script_smoke" +import { runTokenScriptHooksCorrectness } from "./token_script_hooks_correctness" +import { runTokenScriptRejects } from "./token_script_rejects" +import { runTokenScriptTransferLoadgen } from "./token_script_transfer_loadgen" +import { runTokenScriptTransferRamp } from "./token_script_transfer_ramp" +import { runTokenScriptMintLoadgen } from "./token_script_mint_loadgen" +import { runTokenScriptMintRamp } from "./token_script_mint_ramp" +import { runTokenScriptBurnLoadgen } from "./token_script_burn_loadgen" +import { runTokenScriptBurnRamp } from "./token_script_burn_ramp" +import { runTokenScriptUpgradeMidLoad } from "./token_script_upgrade_mid_load" +import { runTokenScriptComplexPolicySmoke } from "./token_script_complex_policy_smoke" +import { runTokenScriptComplexPolicyRamp } from "./token_script_complex_policy_ramp" +import { runTokenScriptComplexPolicyDynamicUpdates } from "./token_script_complex_policy_dynamic_updates" +import { runTokenScriptComplexPolicyVestingLockup } from "./token_script_complex_policy_vesting_lockup" +import { runTokenScriptComplexPolicyEscrowStateMachine } from "./token_script_complex_policy_escrow_state_machine" +import { runTokenSettleCheck } from "./token_settle_check" +import { runTokenObserve } from "./token_observe" +import { runTokenInvariantsKnownHolders } from "./token_invariants_known_holders" +import { runTokenPauseUnderLoad } from "./token_pause_under_load" +import { runTokenHoldersExport } from "./token_holders_export" +import { runImOnlineLoadgen } from "./im_online_loadgen" +import { runImOnlineRamp } from "./im_online_ramp" + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +const fetchTimeoutMs = Math.max(0, envInt("FETCH_TIMEOUT_MS", 0)) +if (fetchTimeoutMs > 0) { + const originalFetch = globalThis.fetch.bind(globalThis) + globalThis.fetch = async (input: any, init: any = {}) => { + if (init?.signal) return originalFetch(input, init) + const controller = new AbortController() + const timeout: ReturnType = setTimeout(() => controller.abort(), fetchTimeoutMs) + try { + return await originalFetch(input, { ...init, signal: controller.signal }) + } finally { + clearTimeout(timeout) + } + } +} + +const scenario = (process.env.SCENARIO ?? "rpc").toLowerCase() + +switch (scenario) { + case "rpc": + await runRpcLoadgen() + break + case "rpc_ramp": + await runRpcRamp() + break + case "transfer": + await runTransferLoadgen() + break + case "transfer_ramp": + await runTransferRamp() + break + case "token_smoke": + await runTokenSmoke() + break + case "token_transfer": + await runTokenTransferLoadgen() + break + case "token_transfer_ramp": + await runTokenTransferRamp() + break + case "token_mint_smoke": + await runTokenMintSmoke() + break + case "token_burn_smoke": + await runTokenBurnSmoke() + break + case "token_mint": + await runTokenMintLoadgen() + break + case "token_burn": + await runTokenBurnLoadgen() + break + case "token_mint_ramp": + await runTokenMintRamp() + break + case "token_burn_ramp": + await runTokenBurnRamp() + break + case "token_acl_smoke": + await runTokenAclSmoke() + break + case "token_acl_matrix": + await runTokenAclMatrix() + break + case "token_consensus_consistency": + await runTokenConsensusConsistency() + break + case "token_query_coverage": + await runTokenQueryCoverage() + break + case "token_edge_cases": + await runTokenEdgeCases() + break + case "token_acl_burn_matrix": + await runTokenAclBurnMatrix() + break + case "token_acl_pause_matrix": + await runTokenAclPauseMatrix() + break + case "token_acl_transfer_ownership_matrix": + await runTokenAclTransferOwnershipMatrix() + break + case "token_acl_multi_permission_matrix": + await runTokenAclMultiPermissionMatrix() + break + case "token_acl_updateacl_compat": + await runTokenAclUpdateAclCompat() + break + case "token_script_smoke": + await runTokenScriptSmoke() + break + case "token_script_hooks_correctness": + await runTokenScriptHooksCorrectness() + break + case "token_script_rejects": + await runTokenScriptRejects() + break + case "token_script_upgrade_mid_load": + await runTokenScriptUpgradeMidLoad() + break + case "token_script_transfer": + await runTokenScriptTransferLoadgen() + break + case "token_script_transfer_ramp": + await runTokenScriptTransferRamp() + break + case "token_script_mint": + await runTokenScriptMintLoadgen() + break + case "token_script_mint_ramp": + await runTokenScriptMintRamp() + break + case "token_script_burn": + await runTokenScriptBurnLoadgen() + break + case "token_script_burn_ramp": + await runTokenScriptBurnRamp() + break + case "token_script_complex_policy_smoke": + await runTokenScriptComplexPolicySmoke() + break + case "token_script_complex_policy_ramp": + await runTokenScriptComplexPolicyRamp() + break + case "token_script_complex_policy_dynamic_updates": + await runTokenScriptComplexPolicyDynamicUpdates() + break + case "token_script_complex_policy_vesting_lockup": + await runTokenScriptComplexPolicyVestingLockup() + break + case "token_script_complex_policy_escrow_state_machine": + await runTokenScriptComplexPolicyEscrowStateMachine() + break + case "token_settle_check": + await runTokenSettleCheck() + break + case "token_observe": + await runTokenObserve() + break + case "token_invariants_known_holders": + await runTokenInvariantsKnownHolders() + break + case "token_pause_under_load": + await runTokenPauseUnderLoad() + break + case "token_holders_export": + await runTokenHoldersExport() + break + case "im_online": + await runImOnlineLoadgen() + break + case "im_online_ramp": + await runImOnlineRamp() + break + default: + throw new Error( + `Unknown SCENARIO: ${scenario}. Valid: rpc, rpc_ramp, transfer, transfer_ramp, token_smoke, token_transfer, token_transfer_ramp, token_mint_smoke, token_burn_smoke, token_mint, token_burn, token_mint_ramp, token_burn_ramp, token_acl_smoke, token_acl_matrix, token_acl_burn_matrix, token_acl_pause_matrix, token_acl_transfer_ownership_matrix, token_acl_multi_permission_matrix, token_acl_updateacl_compat, token_pause_under_load, token_holders_export, token_script_smoke, token_script_hooks_correctness, token_script_rejects, token_script_upgrade_mid_load, token_script_transfer, token_script_transfer_ramp, token_script_mint, token_script_mint_ramp, token_script_burn, token_script_burn_ramp, token_script_complex_policy_smoke, token_script_complex_policy_ramp, token_script_complex_policy_dynamic_updates, token_script_complex_policy_vesting_lockup, token_script_complex_policy_escrow_state_machine, token_settle_check, token_observe, token_invariants_known_holders, token_consensus_consistency, token_query_coverage, token_edge_cases, im_online, im_online_ramp`, + ) +} diff --git a/better_testing/loadgen/src/rpc_loadgen.ts b/better_testing/loadgen/src/rpc_loadgen.ts new file mode 100644 index 000000000..afd5cb7e1 --- /dev/null +++ b/better_testing/loadgen/src/rpc_loadgen.ts @@ -0,0 +1,366 @@ +type LoadgenConfig = { + targets: string[] + rpcPath: string + rpcMethod: string + durationSec: number + concurrency: number + rateLimitRps: number + sampleLimit: number + emitTimeseries: boolean + waitForRpcSec: number +} + +type Counters = { + startedAtMs: number + endedAtMs: number + total: number + ok: number + httpError: number + rpcError: number + networkError: number +} + +type TimeseriesPoint = { + tSec: number + ok: number + total: number + httpError: number + rpcError: number + networkError: number + rps: number + okRps: number + latencyMs: { sampleCount: number; p50: number; p95: number; p99: number } + timestamp: string +} + +function envBool(name: string, fallback: boolean): boolean { + const raw = process.env[name] + if (!raw) return fallback + switch (raw.trim().toLowerCase()) { + case "1": + case "true": + case "yes": + case "y": + case "on": + return true + case "0": + case "false": + case "no": + case "n": + case "off": + return false + default: + return fallback + } +} + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function envFloat(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseFloat(raw) + return Number.isFinite(value) ? value : fallback +} + +function getConfig(): LoadgenConfig { + const targets = (process.env.TARGETS ?? "http://localhost:53551") + .split(",") + .map(s => s.trim()) + .filter(Boolean) + + return { + targets, + rpcPath: process.env.RPC_PATH ?? "/", + rpcMethod: process.env.RPC_METHOD ?? "ping", + durationSec: envInt("DURATION_SEC", 15), + concurrency: envInt("CONCURRENCY", 20), + rateLimitRps: envFloat("RATE_LIMIT_RPS", 0), + sampleLimit: envInt("SAMPLE_LIMIT", 200_000), + emitTimeseries: envBool("EMIT_TIMESERIES", true), + waitForRpcSec: envInt("WAIT_FOR_RPC_SEC", 60), + } +} + +function nowMs(): number { + return Date.now() +} + +function percentile(sorted: number[], p: number): number { + if (sorted.length === 0) return NaN + const idx = Math.min( + sorted.length - 1, + Math.max(0, Math.floor((p / 100) * (sorted.length - 1))), + ) + return sorted[idx]! +} + +class ReservoirSampler { + private seen = 0 + private readonly max: number + private readonly samples: number[] = [] + + constructor(maxSamples: number) { + this.max = Math.max(1, Math.floor(maxSamples)) + } + + add(value: number) { + this.seen++ + if (this.samples.length < this.max) { + this.samples.push(value) + return + } + const j = Math.floor(Math.random() * this.seen) + if (j < this.max) this.samples[j] = value + } + + snapshotSorted(): number[] { + const copy = this.samples.slice() + copy.sort((a, b) => a - b) + return copy + } + + size(): number { + return this.samples.length + } +} + +async function sleep(ms: number): Promise { + await new Promise(resolve => setTimeout(resolve, ms)) +} + +async function isRpcReady(baseUrl: string, rpcPath: string): Promise { + const url = baseUrl.replace(/\/+$/, "") + rpcPath + try { + const res = await fetch(url, { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify({ method: "ping", params: [] }), + }) + if (!res.ok) return false + const data = (await res.json().catch(() => null)) as any + return typeof data?.result === "number" && data.result >= 200 && data.result < 300 + } catch { + return false + } +} + +async function waitForRpcReady(baseUrl: string, rpcPath: string, timeoutSec: number) { + const deadlineMs = nowMs() + Math.max(1, timeoutSec) * 1000 + let attempt = 0 + while (nowMs() < deadlineMs) { + if (await isRpcReady(baseUrl, rpcPath)) return + attempt++ + await sleep(Math.min(2000, 100 + attempt * 100)) + } + throw new Error(`RPC not ready at ${baseUrl}${rpcPath} after ${timeoutSec}s`) +} + +async function rpcCall(baseUrl: string, rpcPath: string, method: string) { + const url = baseUrl.replace(/\/+$/, "") + rpcPath + const body = JSON.stringify({ method, params: [] }) + + const res = await fetch(url, { + method: "POST", + headers: { "content-type": "application/json" }, + body, + }) + + if (!res.ok) { + return { ok: false as const, kind: "http" as const, status: res.status } + } + + const data = (await res.json()) as any + // Expected: { result: number, response: any, ... } + if (typeof data?.result === "number" && data.result >= 200 && data.result < 300) { + return { ok: true as const } + } + + return { ok: false as const, kind: "rpc" as const } +} + +function createRateLimiter(rateLimitRps: number) { + if (!rateLimitRps || rateLimitRps <= 0) { + return async () => {} + } + + const intervalMs = 1000 / rateLimitRps + let nextAllowed = nowMs() + + return async () => { + const current = nowMs() + if (current < nextAllowed) { + await new Promise(r => setTimeout(r, nextAllowed - current)) + } + nextAllowed = Math.max(nextAllowed + intervalMs, nowMs()) + } +} + +async function worker( + config: LoadgenConfig, + counters: Counters, + sampler: ReservoirSampler, + timeseriesSampler: ReservoirSampler, + stopAtMs: number, + workerId: number, +) { + const waitForSlot = createRateLimiter(config.rateLimitRps) + let i = 0 + + while (nowMs() < stopAtMs) { + await waitForSlot() + const target = config.targets[(workerId + i) % config.targets.length]! + i++ + + const start = performance.now() + counters.total++ + try { + const result = await rpcCall(target, config.rpcPath, config.rpcMethod) + const elapsed = performance.now() - start + sampler.add(elapsed) + timeseriesSampler.add(elapsed) + + if (result.ok) { + counters.ok++ + } else if (result.kind === "http") { + counters.httpError++ + } else { + counters.rpcError++ + } + } catch { + const elapsed = performance.now() - start + sampler.add(elapsed) + timeseriesSampler.add(elapsed) + counters.networkError++ + } + } +} + +async function main() { + const config = getConfig() + const startedAtMs = nowMs() + const stopAtMs = startedAtMs + config.durationSec * 1000 + + const counters: Counters = { + startedAtMs, + endedAtMs: 0, + total: 0, + ok: 0, + httpError: 0, + rpcError: 0, + networkError: 0, + } + + const sampler = new ReservoirSampler(config.sampleLimit) + const timeseriesSampler = new ReservoirSampler(50_000) + + // Avoid ramp skew from early-start transient errors. + await Promise.all( + config.targets.map(t => waitForRpcReady(t, config.rpcPath, config.waitForRpcSec)), + ) + + const { getRunConfig, appendJsonl, writeJson } = await import("./run_io") + const run = getRunConfig() + const artifactBase = `${run.runDir}/rpc` + const artifacts = { + runId: run.runId, + runDir: run.runDir, + summaryPath: `${artifactBase}.summary.json`, + timeseriesPath: `${artifactBase}.timeseries.jsonl`, + } + + let lastPointAtMs = startedAtMs + let lastOk = 0 + let lastTotal = 0 + let lastHttp = 0 + let lastRpc = 0 + let lastNet = 0 + + async function timeseriesLoop() { + if (!config.emitTimeseries) return + while (nowMs() < stopAtMs) { + await sleep(1000) + const now = nowMs() + const elapsedSinceLast = Math.max(0.001, (now - lastPointAtMs) / 1000) + lastPointAtMs = now + + const okDelta = counters.ok - lastOk + const totalDelta = counters.total - lastTotal + const httpDelta = counters.httpError - lastHttp + const rpcDelta = counters.rpcError - lastRpc + const netDelta = counters.networkError - lastNet + + lastOk = counters.ok + lastTotal = counters.total + lastHttp = counters.httpError + lastRpc = counters.rpcError + lastNet = counters.networkError + + const samples = timeseriesSampler.snapshotSorted() + const point: TimeseriesPoint = { + tSec: (now - startedAtMs) / 1000, + ok: okDelta, + total: totalDelta, + httpError: httpDelta, + rpcError: rpcDelta, + networkError: netDelta, + rps: totalDelta / elapsedSinceLast, + okRps: okDelta / elapsedSinceLast, + latencyMs: { + sampleCount: timeseriesSampler.size(), + p50: percentile(samples, 50), + p95: percentile(samples, 95), + p99: percentile(samples, 99), + }, + timestamp: new Date().toISOString(), + } + appendJsonl(artifacts.timeseriesPath, point) + } + } + + const workers = Array.from({ length: config.concurrency }, (_, idx) => + worker(config, counters, sampler, timeseriesSampler, stopAtMs, idx), + ) + + await Promise.all([...workers, timeseriesLoop()]) + counters.endedAtMs = nowMs() + + const elapsedSec = Math.max(0.001, (counters.endedAtMs - counters.startedAtMs) / 1000) + const rps = counters.total / elapsedSec + const okRps = counters.ok / elapsedSec + + const samples = sampler.snapshotSorted() + const report = { + kind: "rpc_loadgen_summary", + config, + elapsedSec, + totals: counters, + rps, + okRps, + latencyMs: { + sampleCount: sampler.size(), + p50: percentile(samples, 50), + p95: percentile(samples, 95), + p99: percentile(samples, 99), + }, + timestamp: new Date().toISOString(), + artifacts, + } + + console.log(JSON.stringify(report, null, 2)) + writeJson(artifacts.summaryPath, report) + return report +} + +export async function runRpcLoadgen() { + return await main() +} + +if (import.meta.main) { + await runRpcLoadgen() +} diff --git a/better_testing/loadgen/src/rpc_ramp.ts b/better_testing/loadgen/src/rpc_ramp.ts new file mode 100644 index 000000000..221e89c0a --- /dev/null +++ b/better_testing/loadgen/src/rpc_ramp.ts @@ -0,0 +1,103 @@ +import { runRpcLoadgen } from "./rpc_loadgen" + +type RampStepResult = { + concurrency: number + durationSec: number + report?: any + error?: { message: string } +} + +function splitCsv(value: string | undefined): string[] { + return (value ?? "") + .split(",") + .map(s => s.trim()) + .filter(Boolean) +} + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +async function sleep(ms: number): Promise { + await new Promise(resolve => setTimeout(resolve, ms)) +} + +function parseRampSteps(): number[] { + const raw = process.env.RAMP_CONCURRENCY ?? "10,50,100" + return splitCsv(raw) + .map(n => Number.parseInt(n, 10)) + .filter(n => Number.isFinite(n) && n > 0) +} + +export async function runRpcRamp() { + const steps = parseRampSteps() + const durationSec = envInt("STEP_DURATION_SEC", envInt("DURATION_SEC", 15)) + const cooldownSec = envInt("COOLDOWN_SEC", 2) + + const results: RampStepResult[] = [] + + for (const concurrency of steps) { + process.env.CONCURRENCY = String(concurrency) + process.env.DURATION_SEC = String(durationSec) + + try { + const report = await runRpcLoadgen() + results.push({ concurrency, durationSec, report }) + } catch (err: any) { + results.push({ + concurrency, + durationSec, + error: { message: String(err?.message ?? err) }, + }) + } + + if (cooldownSec > 0) { + await sleep(cooldownSec * 1000) + } + } + + const best = results + .slice() + .filter(r => !r.error) + .sort((a, b) => (b.report?.okRps ?? 0) - (a.report?.okRps ?? 0))[0] + + const rampReport = { + kind: "rpc_ramp_summary", + config: { + rampConcurrency: steps, + stepDurationSec: durationSec, + cooldownSec, + rpcMethod: process.env.RPC_METHOD ?? "ping", + rpcPath: process.env.RPC_PATH ?? "/", + rateLimitRps: Number(process.env.RATE_LIMIT_RPS ?? "0") || 0, + }, + best: best + ? { + concurrency: best.concurrency, + okRps: best.report?.okRps ?? null, + latencyMs: best.report?.latencyMs ?? null, + } + : null, + steps: results.map(r => ({ + concurrency: r.concurrency, + durationSec: r.durationSec, + error: r.error ?? null, + rps: r.report?.rps ?? null, + okRps: r.report?.okRps ?? null, + latencyMs: r.report?.latencyMs ?? null, + totals: r.report?.totals ?? null, + timestamp: r.report?.timestamp ?? null, + artifacts: r.report?.artifacts ?? null, + })), + timestamp: new Date().toISOString(), + } + + console.log(JSON.stringify(rampReport, null, 2)) +} + +if (import.meta.main) { + await runRpcRamp() +} diff --git a/better_testing/loadgen/src/run_io.ts b/better_testing/loadgen/src/run_io.ts new file mode 100644 index 000000000..bcff9deb2 --- /dev/null +++ b/better_testing/loadgen/src/run_io.ts @@ -0,0 +1,33 @@ +import fs from "fs" +import path from "path" + +function safeName(name: string): string { + return name.replace(/[^a-zA-Z0-9._-]+/g, "_") +} + +export function getRunConfig() { + const runsDir = process.env.RUNS_DIR ?? "/runs" + const runIdEnv = process.env.RUN_ID + const runId = safeName(runIdEnv && runIdEnv.trim().length > 0 ? runIdEnv : new Date().toISOString()) + const runDir = path.join(runsDir, runId) + return { runsDir, runId, runDir } +} + +export function ensureDir(dir: string) { + fs.mkdirSync(dir, { recursive: true }) +} + +function stringifyJson(value: unknown, pretty: boolean) { + const replacer = (_key: string, v: any) => (typeof v === "bigint" ? v.toString() : v) + return pretty ? JSON.stringify(value, replacer, 2) : JSON.stringify(value, replacer) +} + +export function writeJson(filePath: string, data: unknown) { + ensureDir(path.dirname(filePath)) + fs.writeFileSync(filePath, stringifyJson(data, true) + "\n", "utf8") +} + +export function appendJsonl(filePath: string, obj: unknown) { + ensureDir(path.dirname(filePath)) + fs.appendFileSync(filePath, stringifyJson(obj, false) + "\n", "utf8") +} diff --git a/better_testing/loadgen/src/token_acl_burn_matrix.ts b/better_testing/loadgen/src/token_acl_burn_matrix.ts new file mode 100644 index 000000000..1d9c66a16 --- /dev/null +++ b/better_testing/loadgen/src/token_acl_burn_matrix.ts @@ -0,0 +1,443 @@ +import { + ensureTokenAndBalances, + getTokenTargets, + getWalletAddresses, + maybeSilenceConsole, + nodeCall, + readWalletMnemonics, + sendTokenBurnTxWithDemos, + sendTokenGrantPermissionTxWithDemos, + sendTokenRevokePermissionTxWithDemos, + waitForCrossNodeTokenConsistency, + withDemosWallet, +} from "./token_shared" +import { getRunConfig, writeJson } from "./run_io" + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function normalizeRpcUrl(url: string): string { + return url.replace(/\/+$/, "") + "/" +} + +function normalizeHexAddress(address: string): string { + const trimmed = (address ?? "").trim() + if (!trimmed) return trimmed + return trimmed.startsWith("0x") ? trimmed.toLowerCase() : ("0x" + trimmed).toLowerCase() +} + +function parseBigintOrZero(value: any): bigint { + try { + if (typeof value === "bigint") return value + if (typeof value === "number" && Number.isFinite(value)) return BigInt(value) + if (typeof value === "string") return BigInt(value) + } catch { + // ignore + } + return 0n +} + +function assertRejected(res: any, expectedMessageSubstring: string) { + if (res?.result === 200) { + throw new Error(`Expected rejection but got result=200: ${JSON.stringify(res)}`) + } + + const pieces: string[] = [] + if (typeof res?.extra?.error === "string") pieces.push(res.extra.error) + if (typeof res?.response === "string") pieces.push(res.response) + if (res?.response === false) pieces.push("false") + if (typeof res?.message === "string") pieces.push(res.message) + const haystack = pieces.join(" ").toLowerCase() + + if (!haystack.includes(expectedMessageSubstring.toLowerCase())) { + throw new Error(`Expected error to include "${expectedMessageSubstring}" but got: ${JSON.stringify(res)}`) + } +} + +async function getLastBlockNumber(rpcUrl: string, muid: string): Promise { + const res = await nodeCall(rpcUrl, "getLastBlockNumber", {}, muid) + const n = res?.response + if (typeof n === "number" && Number.isFinite(n)) return n + if (typeof n === "string") { + const parsed = Number.parseInt(n, 10) + return Number.isFinite(parsed) ? parsed : null + } + return null +} + +async function waitForConsensusRounds(params: { + rpcUrls: string[] + rounds: number + timeoutSec: number + pollMs: number +}) { + const deadlineMs = Date.now() + Math.max(1, params.timeoutSec) * 1000 + const start: Record = {} + for (const rpcUrl of params.rpcUrls) { + start[rpcUrl] = await getLastBlockNumber(rpcUrl, `getLastBlockNumber:start:${rpcUrl}`) + } + + while (Date.now() < deadlineMs) { + let allOk = true + for (const rpcUrl of params.rpcUrls) { + const base = start[rpcUrl] + const current = await getLastBlockNumber(rpcUrl, `getLastBlockNumber:poll:${rpcUrl}`) + const ok = typeof base === "number" && typeof current === "number" && current >= base + params.rounds + if (!ok) allOk = false + } + if (allOk) return { ok: true, start } + await sleep(Math.max(100, Math.floor(params.pollMs))) + } + + return { ok: false, start } +} + +async function snapshot(rpcUrl: string, tokenAddress: string, addresses: string[]) { + const token = await nodeCall(rpcUrl, "token.get", { tokenAddress }, `token.get:${tokenAddress}`) + if (token?.result !== 200) throw new Error(`token.get failed: ${JSON.stringify(token)}`) + + const supply = parseBigintOrZero(token?.response?.state?.totalSupply) + const balances: Record = {} + for (const a of addresses) { + const bal = await nodeCall(rpcUrl, "token.getBalance", { tokenAddress, address: a }, `token.getBalance:${a}`) + if (bal?.result !== 200) throw new Error(`token.getBalance failed: ${JSON.stringify(bal)}`) + balances[a] = parseBigintOrZero(bal?.response?.balance) + } + const aclEntries = Array.isArray(token?.response?.accessControl?.entries) ? token.response.accessControl.entries : [] + return { supply, balances, aclEntries } +} + +function hasAclPermission(aclEntries: any[], address: string, permission: string): boolean { + const addr = normalizeHexAddress(address) + for (const entry of aclEntries ?? []) { + const entryAddr = normalizeHexAddress(entry?.address ?? "") + if (entryAddr !== addr) continue + const perms = Array.isArray(entry?.permissions) ? entry.permissions : [] + return perms.includes(permission) + } + return false +} + +async function waitForCondition(params: { + rpcUrl: string + tokenAddress: string + addresses: string[] + timeoutSec: number + pollMs: number + condition: (s: Awaited>) => boolean + label: string +}) { + const deadlineMs = Date.now() + Math.max(1, params.timeoutSec) * 1000 + let attempt = 0 + while (Date.now() < deadlineMs) { + const s = await snapshot(params.rpcUrl, params.tokenAddress, params.addresses) + if (params.condition(s)) return { ok: true, attempt, snapshot: s } + attempt++ + await sleep(Math.max(100, Math.floor(params.pollMs))) + } + const last = await snapshot(params.rpcUrl, params.tokenAddress, params.addresses) + return { ok: false, attempt, snapshot: last, error: `Timeout waiting for condition: ${params.label}` } +} + +export async function runTokenAclBurnMatrix() { + maybeSilenceConsole() + + const targets = getTokenTargets().map(normalizeRpcUrl) + const rpcUrl = targets[0]! + + const wallets = await readWalletMnemonics() + if (wallets.length < 3) throw new Error("token_acl_burn_matrix requires at least 3 wallets (owner, grantee, outsider)") + + const ownerMnemonic = wallets[0]! + const granteeMnemonic = wallets[1]! + const outsiderMnemonic = wallets[2]! + + const walletAddresses = (await getWalletAddresses(rpcUrl, [ownerMnemonic, granteeMnemonic, outsiderMnemonic])).map(normalizeHexAddress) + const owner = walletAddresses[0]! + const grantee = walletAddresses[1]! + const outsider = walletAddresses[2]! + + const { tokenAddress } = await ensureTokenAndBalances(rpcUrl, ownerMnemonic, walletAddresses) + + const burnAmount = parseBigintOrZero(process.env.TOKEN_BURN_AMOUNT ?? "1") + const permission = "canBurn" + const applyTimeoutSec = envInt("TOKEN_WAIT_APPLY_SEC", 120) + + const before = await snapshot(rpcUrl, tokenAddress, [owner, grantee, outsider]) + + // 1) Self-burn should be allowed without canBurn permission. + const selfBurn = await withDemosWallet({ + rpcUrl, + mnemonic: granteeMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== grantee) throw new Error(`grantee identity mismatch: ${fromHex} !== ${grantee}`) + const nonce = Number(await demos.getAddressNonce(grantee)) + 1 + return await sendTokenBurnTxWithDemos({ demos, tokenAddress, from: grantee, amount: burnAmount, nonce }) + }, + }) + + const waitSelfBurn = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitSelfBurn.ok) throw new Error("Consensus wait failed after self burn") + + const appliedSelfBurn = await waitForCondition({ + rpcUrl, + tokenAddress, + addresses: [owner, grantee, outsider], + timeoutSec: applyTimeoutSec, + pollMs: envInt("TOKEN_APPLY_POLL_MS", 500), + label: "selfBurn applied (supply+grantee balance)", + condition: s => + s.supply === before.supply - burnAmount && + s.balances[grantee] === before.balances[grantee] - burnAmount, + }) + if (!appliedSelfBurn.ok) throw new Error(`Self-burn not applied in time: ${JSON.stringify(appliedSelfBurn)}`) + const afterSelfBurn = appliedSelfBurn.snapshot + const selfBurnApplied = selfBurn?.res?.result === 200 + + // 2) Burn-from-other should be rejected without canBurn. + const burnOtherNoPerm = await withDemosWallet({ + rpcUrl, + mnemonic: granteeMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== grantee) throw new Error(`grantee identity mismatch: ${fromHex} !== ${grantee}`) + const nonce = Number(await demos.getAddressNonce(grantee)) + 1 + return await sendTokenBurnTxWithDemos({ demos, tokenAddress, from: owner, amount: burnAmount, nonce }) + }, + }) + assertRejected(burnOtherNoPerm?.res, "No burn permission") + + const waitNoPerm = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitNoPerm.ok) throw new Error("Consensus wait failed after burn-from-other without permission") + + const afterNoPerm = await snapshot(rpcUrl, tokenAddress, [owner, grantee, outsider]) + const unauthorizedBlocked = + afterNoPerm.supply === afterSelfBurn.supply && + afterNoPerm.balances[owner] === afterSelfBurn.balances[owner] && + afterNoPerm.balances[grantee] === afterSelfBurn.balances[grantee] + + // 3) Owner grants canBurn to grantee. + const grant = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== owner) throw new Error(`owner identity mismatch: ${fromHex} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenGrantPermissionTxWithDemos({ demos, tokenAddress, grantee, permissions: [permission], nonce }) + }, + }) + + const waitGrant = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitGrant.ok) throw new Error("Consensus wait failed after grantPermission") + + const afterGrantCondition = await waitForCondition({ + rpcUrl, + tokenAddress, + addresses: [owner, grantee, outsider], + timeoutSec: applyTimeoutSec, + pollMs: envInt("TOKEN_APPLY_POLL_MS", 500), + label: "grant visible (ACL canBurn present)", + condition: s => hasAclPermission(s.aclEntries, grantee, permission), + }) + if (!afterGrantCondition.ok) throw new Error(`Grant not visible in time: ${JSON.stringify(afterGrantCondition)}`) + const afterGrant = afterGrantCondition.snapshot + const grantAccepted = grant?.res?.result === 200 + const grantVisible = hasAclPermission(afterGrant.aclEntries, grantee, permission) + + // 4) Burn-from-owner should now succeed. + const burnWithPerm = await withDemosWallet({ + rpcUrl, + mnemonic: granteeMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== grantee) throw new Error(`grantee identity mismatch: ${fromHex} !== ${grantee}`) + const nonce = Number(await demos.getAddressNonce(grantee)) + 1 + return await sendTokenBurnTxWithDemos({ demos, tokenAddress, from: owner, amount: burnAmount, nonce }) + }, + }) + + const waitBurnWithPerm = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitBurnWithPerm.ok) throw new Error("Consensus wait failed after burn-from-other with permission") + + const appliedBurnWithPerm = await waitForCondition({ + rpcUrl, + tokenAddress, + addresses: [owner, grantee, outsider], + timeoutSec: applyTimeoutSec, + pollMs: envInt("TOKEN_APPLY_POLL_MS", 500), + label: "burnWithPerm applied (supply+owner balance)", + condition: s => + s.supply === afterGrant.supply - burnAmount && + s.balances[owner] === afterGrant.balances[owner] - burnAmount, + }) + if (!appliedBurnWithPerm.ok) throw new Error(`Burn-with-perm not applied in time: ${JSON.stringify(appliedBurnWithPerm)}`) + const afterWithPerm = appliedBurnWithPerm.snapshot + const burnWithPermAccepted = burnWithPerm?.res?.result === 200 + const burnWithPermApplied = + burnWithPermAccepted && + afterWithPerm.supply === afterGrant.supply - burnAmount && + afterWithPerm.balances[owner] === afterGrant.balances[owner] - burnAmount + + // 5) Owner revokes canBurn. + const revoke = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== owner) throw new Error(`owner identity mismatch: ${fromHex} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenRevokePermissionTxWithDemos({ demos, tokenAddress, grantee, permissions: [permission], nonce }) + }, + }) + + const waitRevoke = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitRevoke.ok) throw new Error("Consensus wait failed after revokePermission") + + const afterRevokeCondition = await waitForCondition({ + rpcUrl, + tokenAddress, + addresses: [owner, grantee, outsider], + timeoutSec: applyTimeoutSec, + pollMs: envInt("TOKEN_APPLY_POLL_MS", 500), + label: "revoke visible (ACL canBurn removed)", + condition: s => !hasAclPermission(s.aclEntries, grantee, permission), + }) + if (!afterRevokeCondition.ok) throw new Error(`Revoke not visible in time: ${JSON.stringify(afterRevokeCondition)}`) + const afterRevoke = afterRevokeCondition.snapshot + const revokeAccepted = revoke?.res?.result === 200 + const revokeVisible = !hasAclPermission(afterRevoke.aclEntries, grantee, permission) + + // 6) Burn-from-owner should be rejected again. + const burnAfterRevoke = await withDemosWallet({ + rpcUrl, + mnemonic: granteeMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== grantee) throw new Error(`grantee identity mismatch: ${fromHex} !== ${grantee}`) + const nonce = Number(await demos.getAddressNonce(grantee)) + 1 + return await sendTokenBurnTxWithDemos({ demos, tokenAddress, from: owner, amount: burnAmount, nonce }) + }, + }) + assertRejected(burnAfterRevoke?.res, "No burn permission") + + const waitAfterRevoke = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitAfterRevoke.ok) throw new Error("Consensus wait failed after burn-from-owner after revoke") + + const afterRevokeAttempt = await snapshot(rpcUrl, tokenAddress, [owner, grantee, outsider]) + const burnAfterRevokeRejected = + afterRevokeAttempt.supply === afterRevoke.supply && afterRevokeAttempt.balances[owner] === afterRevoke.balances[owner] + + // 7) Outsider grant attempt should be rejected. + const outsiderGrant = await withDemosWallet({ + rpcUrl, + mnemonic: outsiderMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== outsider) throw new Error(`outsider identity mismatch: ${fromHex} !== ${outsider}`) + const nonce = Number(await demos.getAddressNonce(outsider)) + 1 + return await sendTokenGrantPermissionTxWithDemos({ demos, tokenAddress, grantee, permissions: [permission], nonce }) + }, + }) + assertRejected(outsiderGrant?.res, "No ACL modification permission") + + const crossNode = await waitForCrossNodeTokenConsistency({ + rpcUrls: targets, + tokenAddress, + addresses: [owner, grantee, outsider], + timeoutSec: envInt("CROSS_NODE_TIMEOUT_SEC", 120), + pollMs: envInt("CROSS_NODE_POLL_MS", 500), + }) + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_acl_burn_matrix` + const summary = { + runId: run.runId, + scenario: "token_acl_burn_matrix", + tokenAddress, + rpcUrls: targets, + permission, + burnAmount: burnAmount.toString(), + addresses: { owner, grantee, outsider }, + txs: { + selfBurn, + burnOtherNoPerm, + grant, + burnWithPerm, + revoke, + burnAfterRevoke, + outsiderGrant, + }, + snapshots: { + before: { supply: before.supply.toString(), balances: Object.fromEntries(Object.entries(before.balances).map(([k, v]) => [k, v.toString()])), aclEntries: before.aclEntries }, + afterSelfBurn: { supply: afterSelfBurn.supply.toString(), balances: Object.fromEntries(Object.entries(afterSelfBurn.balances).map(([k, v]) => [k, v.toString()])), aclEntries: afterSelfBurn.aclEntries }, + afterNoPerm: { supply: afterNoPerm.supply.toString(), balances: Object.fromEntries(Object.entries(afterNoPerm.balances).map(([k, v]) => [k, v.toString()])), aclEntries: afterNoPerm.aclEntries }, + afterGrant: { supply: afterGrant.supply.toString(), balances: Object.fromEntries(Object.entries(afterGrant.balances).map(([k, v]) => [k, v.toString()])), aclEntries: afterGrant.aclEntries }, + afterWithPerm: { supply: afterWithPerm.supply.toString(), balances: Object.fromEntries(Object.entries(afterWithPerm.balances).map(([k, v]) => [k, v.toString()])), aclEntries: afterWithPerm.aclEntries }, + afterRevoke: { supply: afterRevoke.supply.toString(), balances: Object.fromEntries(Object.entries(afterRevoke.balances).map(([k, v]) => [k, v.toString()])), aclEntries: afterRevoke.aclEntries }, + afterRevokeAttempt: { supply: afterRevokeAttempt.supply.toString(), balances: Object.fromEntries(Object.entries(afterRevokeAttempt.balances).map(([k, v]) => [k, v.toString()])), aclEntries: afterRevokeAttempt.aclEntries }, + }, + assertions: { + selfBurnApplied, + unauthorizedBlocked, + grantAccepted, + grantVisible, + burnWithPermAccepted, + burnWithPermApplied, + revokeAccepted, + revokeVisible, + burnAfterRevokeRejected, + }, + crossNode, + ok: + selfBurnApplied && + unauthorizedBlocked && + grantAccepted && + grantVisible && + burnWithPermAccepted && + burnWithPermApplied && + revokeAccepted && + revokeVisible && + burnAfterRevokeRejected && + outsiderGrant?.res?.result !== 200 && + crossNode.ok, + timestamp: new Date().toISOString(), + } + + writeJson(`${artifactBase}.summary.json`, summary) + console.log(JSON.stringify({ token_acl_burn_matrix_summary: summary }, null, 2)) + + if (!summary.ok) throw new Error("token_acl_burn_matrix failed assertions") +} diff --git a/better_testing/loadgen/src/token_acl_matrix.ts b/better_testing/loadgen/src/token_acl_matrix.ts new file mode 100644 index 000000000..531bc4588 --- /dev/null +++ b/better_testing/loadgen/src/token_acl_matrix.ts @@ -0,0 +1,394 @@ +import { Demos } from "@kynesyslabs/demosdk/websdk" +import { uint8ArrayToHex } from "@kynesyslabs/demosdk/encryption" +import { + ensureTokenAndBalances, + getTokenTargets, + getWalletAddresses, + maybeSilenceConsole, + nodeCall, + readWalletMnemonics, + sendTokenGrantPermissionTxWithDemos, + sendTokenMintTxWithDemos, + sendTokenRevokePermissionTxWithDemos, + waitForCrossNodeTokenConsistency, + waitForRpcReady, + waitForTxReady, +} from "./token_shared" +import { getRunConfig, writeJson } from "./run_io" + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +function normalizeRpcUrl(url: string): string { + return url.replace(/\/+$/, "") + "/" +} + +function normalizeHexAddress(address: string): string { + const trimmed = (address ?? "").trim() + if (!trimmed) return trimmed + return trimmed.startsWith("0x") ? trimmed.toLowerCase() : ("0x" + trimmed).toLowerCase() +} + +function parseBigintOrZero(value: any): bigint { + try { + if (typeof value === "bigint") return value + if (typeof value === "number" && Number.isFinite(value)) return BigInt(value) + if (typeof value === "string") return BigInt(value) + } catch { + // ignore + } + return 0n +} + +async function getLastBlockNumber(rpcUrl: string, muid: string): Promise { + const res = await nodeCall(rpcUrl, "getLastBlockNumber", {}, muid) + const n = res?.response + if (typeof n === "number" && Number.isFinite(n)) return n + if (typeof n === "string") { + const parsed = Number.parseInt(n, 10) + return Number.isFinite(parsed) ? parsed : null + } + return null +} + +async function waitForConsensusRounds(params: { + rpcUrls: string[] + rounds: number + timeoutSec: number + pollMs: number +}) { + const deadlineMs = Date.now() + Math.max(1, params.timeoutSec) * 1000 + const start: Record = {} + for (const rpcUrl of params.rpcUrls) { + start[rpcUrl] = await getLastBlockNumber(rpcUrl, `getLastBlockNumber:start:${rpcUrl}`) + } + + while (Date.now() < deadlineMs) { + let allOk = true + for (const rpcUrl of params.rpcUrls) { + const base = start[rpcUrl] + const current = await getLastBlockNumber(rpcUrl, `getLastBlockNumber:poll:${rpcUrl}`) + const ok = typeof base === "number" && typeof current === "number" && current >= base + params.rounds + if (!ok) allOk = false + } + if (allOk) return { ok: true, start } + await sleep(Math.max(100, Math.floor(params.pollMs))) + } + + return { ok: false, start } +} + +async function snapshot(rpcUrl: string, tokenAddress: string, addresses: string[]) { + const token = await nodeCall(rpcUrl, "token.get", { tokenAddress }, `token.get:${tokenAddress}`) + if (token?.result !== 200) throw new Error(`token.get failed: ${JSON.stringify(token)}`) + const supply = parseBigintOrZero(token?.response?.state?.totalSupply) + + const balances: Record = {} + for (const a of addresses) { + const bal = await nodeCall(rpcUrl, "token.getBalance", { tokenAddress, address: a }, `token.getBalance:${a}`) + if (bal?.result !== 200) throw new Error(`token.getBalance failed: ${JSON.stringify(bal)}`) + balances[a] = parseBigintOrZero(bal?.response?.balance) + } + + const aclEntries = Array.isArray(token?.response?.accessControl?.entries) ? token.response.accessControl.entries : [] + + return { supply, balances, aclEntries } +} + +async function withWallet(rpcUrl: string, mnemonic: string, fn: (demos: Demos, addressHex: string) => Promise): Promise { + const demos = new Demos() + await demos.connect(rpcUrl) + await demos.connectWallet(mnemonic, { algorithm: "ed25519" }) + const identity = await demos.crypto.getIdentity("ed25519") + const addressHex = normalizeHexAddress(uint8ArrayToHex(identity.publicKey)) + return await fn(demos, addressHex) +} + +export async function runTokenAclMatrix() { + maybeSilenceConsole() + + const targets = getTokenTargets().map(normalizeRpcUrl) + const rpcUrl = targets[0]! + + const wallets = await readWalletMnemonics() + if (wallets.length < 3) throw new Error("token_acl_matrix requires at least 3 wallets (owner, grantee, outsider)") + + await waitForRpcReady(rpcUrl, envInt("WAIT_FOR_RPC_SEC", 120)) + await waitForTxReady(rpcUrl, envInt("WAIT_FOR_TX_SEC", 120)) + + const ownerMnemonic = wallets[0]! + const granteeMnemonic = wallets[1]! + const outsiderMnemonic = wallets[2]! + + const walletAddresses = (await getWalletAddresses(rpcUrl, [ownerMnemonic, granteeMnemonic, outsiderMnemonic])).map(normalizeHexAddress) + const owner = walletAddresses[0]! + const grantee = walletAddresses[1]! + const outsider = walletAddresses[2]! + + const { tokenAddress } = await ensureTokenAndBalances(rpcUrl, ownerMnemonic, walletAddresses) + + const mintAmount = parseBigintOrZero(process.env.TOKEN_MINT_AMOUNT ?? "1") + const permission = String(process.env.ACL_PERMISSION ?? "canMint") + + const tokenGet = await nodeCall(rpcUrl, "token.get", { tokenAddress }, "preflight:token.get") + if (tokenGet?.result !== 200) throw new Error(`preflight token.get failed: ${JSON.stringify(tokenGet)}`) + const tokenOwner = normalizeHexAddress(tokenGet?.response?.accessControl?.owner ?? "") + + if (tokenOwner !== owner) { + throw new Error( + `Token owner mismatch. token.get owner=${tokenOwner} expected owner=${owner}`, + ) + } + + const before = await snapshot(rpcUrl, tokenAddress, [owner, grantee, outsider]) + + // 1) Unauthorized mint by grantee (no permission yet) => should not change state after consensus. + const attemptMintNoPerm = await withWallet(rpcUrl, granteeMnemonic, async (demos, fromHex) => { + if (fromHex !== grantee) throw new Error(`grantee identity mismatch: ${fromHex} !== ${grantee}`) + const nonce = Number(await demos.getAddressNonce(grantee)) + 1 + return await sendTokenMintTxWithDemos({ + demos, + tokenAddress, + to: grantee, + amount: mintAmount, + nonce, + }) + }) + + const wait1 = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!wait1.ok) throw new Error("Consensus wait failed after unauthorized mint attempt") + + const afterNoPerm = await snapshot(rpcUrl, tokenAddress, [owner, grantee, outsider]) + + const unauthorizedBlocked = + afterNoPerm.supply === before.supply && + afterNoPerm.balances[grantee] === before.balances[grantee] + + // 2) Owner grants permission, then grantee mint => should change. + const grant = await withWallet(rpcUrl, ownerMnemonic, async (demos, fromHex) => { + if (fromHex !== owner) throw new Error(`owner identity mismatch: ${fromHex} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenGrantPermissionTxWithDemos({ + demos, + tokenAddress, + grantee, + permissions: [permission], + nonce, + }) + }) + + const grantAccepted = grant?.res?.result === 200 + + const waitGrant = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitGrant.ok) throw new Error("Consensus wait failed after grantPermission") + + const afterGrant = await snapshot(rpcUrl, tokenAddress, [owner, grantee, outsider]) + + const mintWithPerm = await withWallet(rpcUrl, granteeMnemonic, async (demos, fromHex) => { + if (fromHex !== grantee) throw new Error(`grantee identity mismatch: ${fromHex} !== ${grantee}`) + const nonce = Number(await demos.getAddressNonce(grantee)) + 1 + return await sendTokenMintTxWithDemos({ + demos, + tokenAddress, + to: grantee, + amount: mintAmount, + nonce, + }) + }) + + const mintWithPermAccepted = mintWithPerm?.res?.result === 200 + + const waitMint = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitMint.ok) throw new Error("Consensus wait failed after mintWithPerm") + + const afterWithPerm = await snapshot(rpcUrl, tokenAddress, [owner, grantee, outsider]) + const mintApplied = + afterWithPerm.supply === before.supply + mintAmount && + afterWithPerm.balances[grantee] === before.balances[grantee] + mintAmount + + // 3) Owner revokes permission, then grantee mint => should not change (beyond already applied mint). + const revoke = await withWallet(rpcUrl, ownerMnemonic, async (demos, fromHex) => { + if (fromHex !== owner) throw new Error(`owner identity mismatch: ${fromHex} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenRevokePermissionTxWithDemos({ + demos, + tokenAddress, + grantee, + permissions: [permission], + nonce, + }) + }) + + const revokeAccepted = revoke?.res?.result === 200 + + const waitRevoke = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitRevoke.ok) throw new Error("Consensus wait failed after revokePermission") + + const afterRevoke = await snapshot(rpcUrl, tokenAddress, [owner, grantee, outsider]) + const revokeBlocked = + afterRevoke.supply === afterWithPerm.supply && + afterRevoke.balances[grantee] === afterWithPerm.balances[grantee] + + const mintAfterRevoke = await withWallet(rpcUrl, granteeMnemonic, async (demos, fromHex) => { + if (fromHex !== grantee) throw new Error(`grantee identity mismatch: ${fromHex} !== ${grantee}`) + const nonce = Number(await demos.getAddressNonce(grantee)) + 1 + return await sendTokenMintTxWithDemos({ + demos, + tokenAddress, + to: grantee, + amount: mintAmount, + nonce, + }) + }) + + const mintAfterRevokeRejected = mintAfterRevoke?.res?.result !== 200 + + // 4) Outsider attempts grantPermission => should not change ACL entries. + const outsiderGrant = await withWallet(rpcUrl, outsiderMnemonic, async (demos, fromHex) => { + if (fromHex !== outsider) throw new Error(`outsider identity mismatch: ${fromHex} !== ${outsider}`) + const nonce = Number(await demos.getAddressNonce(outsider)) + 1 + return await sendTokenGrantPermissionTxWithDemos({ + demos, + tokenAddress, + grantee: outsider, + permissions: [permission], + nonce, + }) + }) + + const outsiderGrantRejected = outsiderGrant?.res?.result !== 200 + + const wait4 = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!wait4.ok) throw new Error("Consensus wait failed after outsider grant attempt") + + const afterOutsider = await snapshot(rpcUrl, tokenAddress, [owner, grantee, outsider]) + const outsiderAclBlocked = JSON.stringify(afterOutsider.aclEntries) === JSON.stringify(afterRevoke.aclEntries) + + const crossNode = await waitForCrossNodeTokenConsistency({ + rpcUrls: targets, + tokenAddress, + addresses: [owner, grantee, outsider], + timeoutSec: envInt("CROSS_NODE_TIMEOUT_SEC", 180), + pollMs: envInt("CROSS_NODE_POLL_MS", 500), + }) + + const ok = + unauthorizedBlocked && + grantAccepted && + mintWithPermAccepted && + mintApplied && + revokeAccepted && + mintAfterRevokeRejected && + revokeBlocked && + outsiderGrantRejected && + outsiderAclBlocked && + crossNode.ok + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_acl_matrix` + const summary = { + runId: run.runId, + scenario: "token_acl_matrix", + tokenAddress, + rpcUrls: targets, + permission, + mintAmount: mintAmount.toString(), + addresses: { owner, grantee, outsider }, + identities: { tokenOwner }, + txs: { + attemptMintNoPerm: attemptMintNoPerm?.res ?? null, + grant: grant?.res ?? null, + waitGrant, + mintWithPerm: mintWithPerm?.res ?? null, + waitMint, + revoke: revoke?.res ?? null, + waitRevoke, + mintAfterRevoke: mintAfterRevoke?.res ?? null, + outsiderGrant: outsiderGrant?.res ?? null, + }, + snapshots: { + before: { + supply: before.supply.toString(), + balances: Object.fromEntries(Object.entries(before.balances).map(([k, v]) => [k, v.toString()])), + aclEntries: before.aclEntries, + }, + afterNoPerm: { + supply: afterNoPerm.supply.toString(), + balances: Object.fromEntries(Object.entries(afterNoPerm.balances).map(([k, v]) => [k, v.toString()])), + aclEntries: afterNoPerm.aclEntries, + }, + afterGrant: { + supply: afterGrant.supply.toString(), + balances: Object.fromEntries(Object.entries(afterGrant.balances).map(([k, v]) => [k, v.toString()])), + aclEntries: afterGrant.aclEntries, + }, + afterWithPerm: { + supply: afterWithPerm.supply.toString(), + balances: Object.fromEntries(Object.entries(afterWithPerm.balances).map(([k, v]) => [k, v.toString()])), + aclEntries: afterWithPerm.aclEntries, + }, + afterRevoke: { + supply: afterRevoke.supply.toString(), + balances: Object.fromEntries(Object.entries(afterRevoke.balances).map(([k, v]) => [k, v.toString()])), + aclEntries: afterRevoke.aclEntries, + }, + afterOutsider: { + supply: afterOutsider.supply.toString(), + balances: Object.fromEntries(Object.entries(afterOutsider.balances).map(([k, v]) => [k, v.toString()])), + aclEntries: afterOutsider.aclEntries, + }, + }, + assertions: { + unauthorizedBlocked, + grantAccepted, + mintWithPermAccepted, + mintApplied, + revokeAccepted, + mintAfterRevokeRejected, + revokeBlocked, + outsiderGrantRejected, + outsiderAclBlocked, + }, + crossNode, + ok, + timestamp: new Date().toISOString(), + } + + writeJson(`${artifactBase}.summary.json`, summary) + console.log(JSON.stringify({ token_acl_matrix_summary: summary }, null, 2)) + + if (!ok) throw new Error("token_acl_matrix failed (one or more assertions failed)") +} diff --git a/better_testing/loadgen/src/token_acl_multi_permission_matrix.ts b/better_testing/loadgen/src/token_acl_multi_permission_matrix.ts new file mode 100644 index 000000000..e549d1ae2 --- /dev/null +++ b/better_testing/loadgen/src/token_acl_multi_permission_matrix.ts @@ -0,0 +1,570 @@ +import { + ensureTokenAndBalances, + getTokenTargets, + getWalletAddresses, + maybeSilenceConsole, + nodeCall, + readWalletMnemonics, + sendTokenBurnTxWithDemos, + sendTokenGrantPermissionTxWithDemos, + sendTokenMintTxWithDemos, + sendTokenPauseTxWithDemos, + sendTokenRevokePermissionTxWithDemos, + sendTokenTransferOwnershipTxWithDemos, + sendTokenUnpauseTxWithDemos, + waitForCrossNodeTokenGetConsistency, + waitForCrossNodeTokenConsistency, + withDemosWallet, +} from "./token_shared" +import { getRunConfig, writeJson } from "./run_io" + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function normalizeRpcUrl(url: string): string { + return url.replace(/\/+$/, "") + "/" +} + +function normalizeHexAddress(address: string): string { + const trimmed = (address ?? "").trim() + if (!trimmed) return trimmed + return trimmed.startsWith("0x") ? trimmed.toLowerCase() : ("0x" + trimmed).toLowerCase() +} + +function parseBigintOrZero(value: any): bigint { + try { + if (typeof value === "bigint") return value + if (typeof value === "number" && Number.isFinite(value)) return BigInt(value) + if (typeof value === "string") return BigInt(value) + } catch { + // ignore + } + return 0n +} + +function stringifyJson(value: unknown) { + return JSON.stringify(value, (_key, v) => (typeof v === "bigint" ? v.toString() : v), 2) +} + +function assertRejected(res: any, expectedMessageSubstring: string) { + if (res?.result === 200) { + throw new Error(`Expected rejection but got result=200: ${JSON.stringify(res)}`) + } + const pieces: string[] = [] + if (typeof res?.extra?.error === "string") pieces.push(res.extra.error) + if (typeof res?.response === "string") pieces.push(res.response) + if (res?.response === false) pieces.push("false") + if (typeof res?.message === "string") pieces.push(res.message) + const haystack = pieces.join(" ").toLowerCase() + if (!haystack.includes(expectedMessageSubstring.toLowerCase())) { + throw new Error(`Expected error to include "${expectedMessageSubstring}" but got: ${JSON.stringify(res)}`) + } +} + +async function getLastBlockNumber(rpcUrl: string, muid: string): Promise { + const res = await nodeCall(rpcUrl, "getLastBlockNumber", {}, muid) + const n = res?.response + if (typeof n === "number" && Number.isFinite(n)) return n + if (typeof n === "string") { + const parsed = Number.parseInt(n, 10) + return Number.isFinite(parsed) ? parsed : null + } + return null +} + +async function waitForConsensusRounds(params: { + rpcUrls: string[] + rounds: number + timeoutSec: number + pollMs: number +}) { + const deadlineMs = Date.now() + Math.max(1, params.timeoutSec) * 1000 + const start: Record = {} + for (const rpcUrl of params.rpcUrls) { + start[rpcUrl] = await getLastBlockNumber(rpcUrl, `getLastBlockNumber:start:${rpcUrl}`) + } + + while (Date.now() < deadlineMs) { + let allOk = true + for (const rpcUrl of params.rpcUrls) { + const base = start[rpcUrl] + const current = await getLastBlockNumber(rpcUrl, `getLastBlockNumber:poll:${rpcUrl}`) + const ok = typeof base === "number" && typeof current === "number" && current >= base + params.rounds + if (!ok) allOk = false + } + if (allOk) return { ok: true, start } + await sleep(Math.max(100, Math.floor(params.pollMs))) + } + + return { ok: false, start } +} + +async function snapshot(rpcUrl: string, tokenAddress: string, addresses: string[]) { + const token = await nodeCall(rpcUrl, "token.get", { tokenAddress }, `token.get:${tokenAddress}`) + if (token?.result !== 200) throw new Error(`token.get failed: ${JSON.stringify(token)}`) + const owner = normalizeHexAddress(token?.response?.accessControl?.owner ?? "") + const paused = !!token?.response?.accessControl?.paused + const aclEntries = Array.isArray(token?.response?.accessControl?.entries) ? token.response.accessControl.entries : [] + + const supply = parseBigintOrZero(token?.response?.state?.totalSupply) + const balances: Record = {} + for (const a of addresses) { + const bal = await nodeCall(rpcUrl, "token.getBalance", { tokenAddress, address: a }, `token.getBalance:${a}`) + if (bal?.result !== 200) throw new Error(`token.getBalance failed: ${JSON.stringify(bal)}`) + balances[a] = parseBigintOrZero(bal?.response?.balance) + } + + return { owner, paused, aclEntries, supply, balances } +} + +function getEntryPerms(aclEntries: any[], address: string): string[] { + const addr = normalizeHexAddress(address) + for (const entry of aclEntries ?? []) { + if (normalizeHexAddress(entry?.address ?? "") !== addr) continue + return Array.isArray(entry?.permissions) ? entry.permissions : [] + } + return [] +} + +async function waitForSnapshotUntil(params: { + rpcUrl: string + tokenAddress: string + addresses: string[] + timeoutSec: number + pollMs: number + predicate: (s: Awaited>) => boolean +}) { + const deadline = Date.now() + Math.max(1, params.timeoutSec) * 1000 + let attempts = 0 + let last = await snapshot(params.rpcUrl, params.tokenAddress, params.addresses) + while (Date.now() < deadline) { + attempts++ + last = await snapshot(params.rpcUrl, params.tokenAddress, params.addresses) + if (params.predicate(last)) return { ok: true, attempts, snapshot: last } + await sleep(Math.max(50, Math.floor(params.pollMs))) + } + return { ok: false, attempts, snapshot: last } +} + +export async function runTokenAclMultiPermissionMatrix() { + maybeSilenceConsole() + + const targets = getTokenTargets().map(normalizeRpcUrl) + const rpcUrl = targets[0]! + + const wallets = await readWalletMnemonics() + if (wallets.length < 4) throw new Error("token_acl_multi_permission_matrix requires at least 4 wallets (owner, grantee, outsider, target)") + + const ownerMnemonic = wallets[0]! + const granteeMnemonic = wallets[1]! + const outsiderMnemonic = wallets[2]! + const targetMnemonic = wallets[3]! + + const walletAddresses = (await getWalletAddresses(rpcUrl, [ownerMnemonic, granteeMnemonic, outsiderMnemonic, targetMnemonic])).map(normalizeHexAddress) + const owner = walletAddresses[0]! + const grantee = walletAddresses[1]! + const outsider = walletAddresses[2]! + const target = walletAddresses[3]! + + const { tokenAddress } = await ensureTokenAndBalances(rpcUrl, ownerMnemonic, walletAddresses) + + const mintAmount = parseBigintOrZero(process.env.TOKEN_MINT_AMOUNT ?? "1") + const burnAmount = parseBigintOrZero(process.env.TOKEN_BURN_AMOUNT ?? "1") + const applyTimeoutSec = envInt("TOKEN_WAIT_APPLY_SEC", 120) + + const before = await snapshot(rpcUrl, tokenAddress, [owner, grantee, outsider, target]) + if (before.owner !== owner) throw new Error(`Token owner mismatch: ${before.owner} !== ${owner}`) + + // A) Without permissions: grantee cannot mint-to-self, burn-from-owner, pause, modify ACL, or transfer ownership. + const preMint = await withDemosWallet({ + rpcUrl, + mnemonic: granteeMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== grantee) throw new Error(`grantee identity mismatch: ${fromHex} !== ${grantee}`) + const nonce = Number(await demos.getAddressNonce(grantee)) + 1 + return await sendTokenMintTxWithDemos({ demos, tokenAddress, to: grantee, amount: mintAmount, nonce }) + }, + }) + assertRejected(preMint?.res, "No mint permission") + + const preBurnOther = await withDemosWallet({ + rpcUrl, + mnemonic: granteeMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== grantee) throw new Error(`grantee identity mismatch: ${fromHex} !== ${grantee}`) + const nonce = Number(await demos.getAddressNonce(grantee)) + 1 + return await sendTokenBurnTxWithDemos({ demos, tokenAddress, from: owner, amount: burnAmount, nonce }) + }, + }) + assertRejected(preBurnOther?.res, "No burn permission") + + const prePause = await withDemosWallet({ + rpcUrl, + mnemonic: granteeMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== grantee) throw new Error(`grantee identity mismatch: ${fromHex} !== ${grantee}`) + const nonce = Number(await demos.getAddressNonce(grantee)) + 1 + return await sendTokenPauseTxWithDemos({ demos, tokenAddress, nonce }) + }, + }) + assertRejected(prePause?.res, "No pause permission") + + const preModifyAcl = await withDemosWallet({ + rpcUrl, + mnemonic: granteeMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== grantee) throw new Error(`grantee identity mismatch: ${fromHex} !== ${grantee}`) + const nonce = Number(await demos.getAddressNonce(grantee)) + 1 + return await sendTokenGrantPermissionTxWithDemos({ + demos, + tokenAddress, + grantee: outsider, + permissions: ["canMint"], + nonce, + }) + }, + }) + assertRejected(preModifyAcl?.res, "No ACL modification permission") + + const preTransferOwnership = await withDemosWallet({ + rpcUrl, + mnemonic: granteeMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== grantee) throw new Error(`grantee identity mismatch: ${fromHex} !== ${grantee}`) + const nonce = Number(await demos.getAddressNonce(grantee)) + 1 + return await sendTokenTransferOwnershipTxWithDemos({ demos, tokenAddress, newOwner: target, nonce }) + }, + }) + assertRejected(preTransferOwnership?.res, "No ownership transfer permission") + + const waitPre = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitPre.ok) throw new Error("Consensus wait failed after pre-permission attempts") + + const afterPre = await snapshot(rpcUrl, tokenAddress, [owner, grantee, outsider, target]) + const preStateUnchanged = + afterPre.owner === before.owner && + afterPre.paused === before.paused && + afterPre.supply === before.supply && + afterPre.balances[grantee] === before.balances[grantee] && + afterPre.balances[owner] === before.balances[owner] + + // B) Owner grants multiple perms to grantee. + const allPerms = ["canMint", "canBurn", "canPause", "canModifyACL", "canTransferOwnership"] + const grantAll = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== owner) throw new Error(`owner identity mismatch: ${fromHex} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenGrantPermissionTxWithDemos({ demos, tokenAddress, grantee, permissions: allPerms, nonce }) + }, + }) + + const waitGrant = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitGrant.ok) throw new Error("Consensus wait failed after grantAll") + + // C) Grantee can mint, burn-from-owner, pause/unpause, modify ACL, and transfer ownership. + const afterGrantVisible = await waitForSnapshotUntil({ + rpcUrl, + tokenAddress, + addresses: [owner, grantee, outsider, target], + timeoutSec: applyTimeoutSec, + pollMs: 500, + predicate: s => { + const granteePerms = getEntryPerms(s.aclEntries, grantee) + return allPerms.every(p => granteePerms.includes(p)) + }, + }) + const afterGrant = afterGrantVisible.snapshot + const grantVisible = afterGrantVisible.ok + + const mintOk = await withDemosWallet({ + rpcUrl, + mnemonic: granteeMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== grantee) throw new Error(`grantee identity mismatch: ${fromHex} !== ${grantee}`) + const nonce = Number(await demos.getAddressNonce(grantee)) + 1 + return await sendTokenMintTxWithDemos({ demos, tokenAddress, to: grantee, amount: mintAmount, nonce }) + }, + }) + + const burnOk = await withDemosWallet({ + rpcUrl, + mnemonic: granteeMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== grantee) throw new Error(`grantee identity mismatch: ${fromHex} !== ${grantee}`) + const nonce = Number(await demos.getAddressNonce(grantee)) + 1 + return await sendTokenBurnTxWithDemos({ demos, tokenAddress, from: owner, amount: burnAmount, nonce }) + }, + }) + + const pauseOk = await withDemosWallet({ + rpcUrl, + mnemonic: granteeMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== grantee) throw new Error(`grantee identity mismatch: ${fromHex} !== ${grantee}`) + const nonce = Number(await demos.getAddressNonce(grantee)) + 1 + return await sendTokenPauseTxWithDemos({ demos, tokenAddress, nonce }) + }, + }) + + const waitPause = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitPause.ok) throw new Error("Consensus wait failed after pause") + + const pausedVisible = await waitForSnapshotUntil({ + rpcUrl, + tokenAddress, + addresses: [owner, grantee, outsider, target], + timeoutSec: applyTimeoutSec, + pollMs: 500, + predicate: s => s.paused, + }) + if (!pausedVisible.ok) throw new Error("Pause not visible in time") + + const unpauseOk = await withDemosWallet({ + rpcUrl, + mnemonic: granteeMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== grantee) throw new Error(`grantee identity mismatch: ${fromHex} !== ${grantee}`) + const nonce = Number(await demos.getAddressNonce(grantee)) + 1 + return await sendTokenUnpauseTxWithDemos({ demos, tokenAddress, nonce }) + }, + }) + + const waitUnpause = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitUnpause.ok) throw new Error("Consensus wait failed after unpause") + + const unpausedVisible = await waitForSnapshotUntil({ + rpcUrl, + tokenAddress, + addresses: [owner, grantee, outsider, target], + timeoutSec: applyTimeoutSec, + pollMs: 500, + predicate: s => !s.paused, + }) + if (!unpausedVisible.ok) throw new Error("Unpause not visible in time") + + const modifyAclOk = await withDemosWallet({ + rpcUrl, + mnemonic: granteeMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== grantee) throw new Error(`grantee identity mismatch: ${fromHex} !== ${grantee}`) + const nonce = Number(await demos.getAddressNonce(grantee)) + 1 + return await sendTokenGrantPermissionTxWithDemos({ + demos, + tokenAddress, + grantee: outsider, + permissions: ["canMint"], + nonce, + }) + }, + }) + + const transferOwnershipOk = await withDemosWallet({ + rpcUrl, + mnemonic: granteeMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== grantee) throw new Error(`grantee identity mismatch: ${fromHex} !== ${grantee}`) + const nonce = Number(await demos.getAddressNonce(grantee)) + 1 + return await sendTokenTransferOwnershipTxWithDemos({ demos, tokenAddress, newOwner: target, nonce }) + }, + }) + + const waitPost = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 2), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 240), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitPost.ok) throw new Error("Consensus wait failed after post-grant operations") + + const afterOpsApplied = await waitForSnapshotUntil({ + rpcUrl, + tokenAddress, + addresses: [owner, grantee, outsider, target], + timeoutSec: applyTimeoutSec, + pollMs: 500, + predicate: s => + s.owner === target && + s.balances[grantee] === afterGrant.balances[grantee] + mintAmount && + s.balances[owner] === afterGrant.balances[owner] - burnAmount && + !s.paused, + }) + + const afterOps = afterOpsApplied.snapshot + const mintApplied = afterOpsApplied.ok && afterOps.balances[grantee] === afterGrant.balances[grantee] + mintAmount + const burnApplied = afterOpsApplied.ok && afterOps.balances[owner] === afterGrant.balances[owner] - burnAmount + const ownershipApplied = afterOpsApplied.ok && afterOps.owner === target + + // D) New owner revokes some permissions from the grantee (remove canModifyACL + canPause). + const revokeSome = await withDemosWallet({ + rpcUrl, + mnemonic: targetMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== target) throw new Error(`target identity mismatch: ${fromHex} !== ${target}`) + const nonce = Number(await demos.getAddressNonce(target)) + 1 + return await sendTokenRevokePermissionTxWithDemos({ + demos, + tokenAddress, + grantee, + permissions: ["canModifyACL", "canPause"], + nonce, + }) + }, + }) + + const waitRevoke = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitRevoke.ok) throw new Error("Consensus wait failed after revokeSome") + + const afterRevokeVisible = await waitForSnapshotUntil({ + rpcUrl, + tokenAddress, + addresses: [owner, grantee, outsider, target], + timeoutSec: applyTimeoutSec, + pollMs: 500, + predicate: s => { + const permsAfterRevoke = getEntryPerms(s.aclEntries, grantee) + return !permsAfterRevoke.includes("canModifyACL") && !permsAfterRevoke.includes("canPause") + }, + }) + const afterRevoke = afterRevokeVisible.snapshot + const revokeVisible = afterRevokeVisible.ok + + const pauseAfterRevoke = await withDemosWallet({ + rpcUrl, + mnemonic: granteeMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== grantee) throw new Error(`grantee identity mismatch: ${fromHex} !== ${grantee}`) + const nonce = Number(await demos.getAddressNonce(grantee)) + 1 + return await sendTokenPauseTxWithDemos({ demos, tokenAddress, nonce }) + }, + }) + assertRejected(pauseAfterRevoke?.res, "No pause permission") + + const modifyAfterRevoke = await withDemosWallet({ + rpcUrl, + mnemonic: granteeMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== grantee) throw new Error(`grantee identity mismatch: ${fromHex} !== ${grantee}`) + const nonce = Number(await demos.getAddressNonce(grantee)) + 1 + return await sendTokenGrantPermissionTxWithDemos({ + demos, + tokenAddress, + grantee: outsider, + permissions: ["canBurn"], + nonce, + }) + }, + }) + assertRejected(modifyAfterRevoke?.res, "No ACL modification permission") + + const crossNodeTokenGet = await waitForCrossNodeTokenGetConsistency({ + rpcUrls: targets, + tokenAddress, + timeoutSec: envInt("CROSS_NODE_TIMEOUT_SEC", 180), + pollMs: envInt("CROSS_NODE_POLL_MS", 500), + }) + + const crossNodeBalances = await waitForCrossNodeTokenConsistency({ + rpcUrls: targets, + tokenAddress, + addresses: [owner, grantee, outsider, target], + timeoutSec: envInt("CROSS_NODE_TIMEOUT_SEC", 180), + pollMs: envInt("CROSS_NODE_POLL_MS", 500), + }) + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_acl_multi_permission_matrix` + const summary = { + runId: run.runId, + scenario: "token_acl_multi_permission_matrix", + tokenAddress, + rpcUrls: targets, + addresses: { owner, grantee, outsider, target }, + permsGranted: allPerms, + txs: { + preMint, + preBurnOther, + prePause, + preModifyAcl, + preTransferOwnership, + grantAll, + mintOk, + burnOk, + pauseOk, + unpauseOk, + modifyAclOk, + transferOwnershipOk, + revokeSome, + pauseAfterRevoke, + modifyAfterRevoke, + }, + snapshots: { + before, + afterPre, + afterGrant, + afterOps, + afterRevoke, + }, + assertions: { + preStateUnchanged, + grantVisible, + mintApplied, + burnApplied, + ownershipApplied, + revokeVisible, + crossNodeTokenGetOk: crossNodeTokenGet.ok, + crossNodeBalancesOk: crossNodeBalances.ok, + }, + crossNodeTokenGet, + crossNodeBalances, + ok: + preStateUnchanged && + grantVisible && + mintApplied && + burnApplied && + ownershipApplied && + revokeVisible && + crossNodeTokenGet.ok && + crossNodeBalances.ok, + timestamp: new Date().toISOString(), + } + + writeJson(`${artifactBase}.summary.json`, summary) + console.log(stringifyJson({ token_acl_multi_permission_matrix_summary: summary })) + + if (!summary.ok) throw new Error("token_acl_multi_permission_matrix failed assertions") +} diff --git a/better_testing/loadgen/src/token_acl_pause_matrix.ts b/better_testing/loadgen/src/token_acl_pause_matrix.ts new file mode 100644 index 000000000..df56f6c70 --- /dev/null +++ b/better_testing/loadgen/src/token_acl_pause_matrix.ts @@ -0,0 +1,425 @@ +import { + ensureTokenAndBalances, + getTokenTargets, + getWalletAddresses, + maybeSilenceConsole, + nodeCall, + readWalletMnemonics, + sendTokenBurnTxWithDemos, + sendTokenMintTxWithDemos, + sendTokenPauseTxWithDemos, + sendTokenTransferTxWithDemos, + sendTokenUnpauseTxWithDemos, + waitForCrossNodeTokenConsistency, + withDemosWallet, +} from "./token_shared" +import { getRunConfig, writeJson } from "./run_io" + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function normalizeRpcUrl(url: string): string { + return url.replace(/\/+$/, "") + "/" +} + +function normalizeHexAddress(address: string): string { + const trimmed = (address ?? "").trim() + if (!trimmed) return trimmed + return trimmed.startsWith("0x") ? trimmed.toLowerCase() : ("0x" + trimmed).toLowerCase() +} + +function parseBigintOrZero(value: any): bigint { + try { + if (typeof value === "bigint") return value + if (typeof value === "number" && Number.isFinite(value)) return BigInt(value) + if (typeof value === "string") return BigInt(value) + } catch { + // ignore + } + return 0n +} + +function assertRejected(res: any, expectedMessageSubstring: string) { + if (res?.result === 200) { + throw new Error(`Expected rejection but got result=200: ${JSON.stringify(res)}`) + } + + const pieces: string[] = [] + if (typeof res?.extra?.error === "string") pieces.push(res.extra.error) + if (typeof res?.response === "string") pieces.push(res.response) + if (res?.response === false) pieces.push("false") + if (typeof res?.message === "string") pieces.push(res.message) + const haystack = pieces.join(" ").toLowerCase() + + if (!haystack.includes(expectedMessageSubstring.toLowerCase())) { + throw new Error(`Expected error to include "${expectedMessageSubstring}" but got: ${JSON.stringify(res)}`) + } +} + +async function getLastBlockNumber(rpcUrl: string, muid: string): Promise { + const res = await nodeCall(rpcUrl, "getLastBlockNumber", {}, muid) + const n = res?.response + if (typeof n === "number" && Number.isFinite(n)) return n + if (typeof n === "string") { + const parsed = Number.parseInt(n, 10) + return Number.isFinite(parsed) ? parsed : null + } + return null +} + +async function waitForConsensusRounds(params: { + rpcUrls: string[] + rounds: number + timeoutSec: number + pollMs: number +}) { + const deadlineMs = Date.now() + Math.max(1, params.timeoutSec) * 1000 + const start: Record = {} + for (const rpcUrl of params.rpcUrls) { + start[rpcUrl] = await getLastBlockNumber(rpcUrl, `getLastBlockNumber:start:${rpcUrl}`) + } + + while (Date.now() < deadlineMs) { + let allOk = true + for (const rpcUrl of params.rpcUrls) { + const base = start[rpcUrl] + const current = await getLastBlockNumber(rpcUrl, `getLastBlockNumber:poll:${rpcUrl}`) + const ok = typeof base === "number" && typeof current === "number" && current >= base + params.rounds + if (!ok) allOk = false + } + if (allOk) return { ok: true, start } + await sleep(Math.max(100, Math.floor(params.pollMs))) + } + + return { ok: false, start } +} + +async function snapshot(rpcUrl: string, tokenAddress: string, addresses: string[]) { + const token = await nodeCall(rpcUrl, "token.get", { tokenAddress }, `token.get:${tokenAddress}`) + if (token?.result !== 200) throw new Error(`token.get failed: ${JSON.stringify(token)}`) + + const supply = parseBigintOrZero(token?.response?.state?.totalSupply) + const paused = !!token?.response?.accessControl?.paused + + const balances: Record = {} + for (const a of addresses) { + const bal = await nodeCall(rpcUrl, "token.getBalance", { tokenAddress, address: a }, `token.getBalance:${a}`) + if (bal?.result !== 200) throw new Error(`token.getBalance failed: ${JSON.stringify(bal)}`) + balances[a] = parseBigintOrZero(bal?.response?.balance) + } + + return { supply, paused, balances } +} + +async function waitForCondition(params: { + rpcUrl: string + tokenAddress: string + addresses: string[] + timeoutSec: number + pollMs: number + condition: (s: Awaited>) => boolean + label: string +}) { + const deadlineMs = Date.now() + Math.max(1, params.timeoutSec) * 1000 + let attempt = 0 + while (Date.now() < deadlineMs) { + const s = await snapshot(params.rpcUrl, params.tokenAddress, params.addresses) + if (params.condition(s)) return { ok: true, attempt, snapshot: s } + attempt++ + await sleep(Math.max(100, Math.floor(params.pollMs))) + } + const last = await snapshot(params.rpcUrl, params.tokenAddress, params.addresses) + return { ok: false, attempt, snapshot: last, error: `Timeout waiting for condition: ${params.label}` } +} + +export async function runTokenAclPauseMatrix() { + maybeSilenceConsole() + + const targets = getTokenTargets().map(normalizeRpcUrl) + const rpcUrl = targets[0]! + + const wallets = await readWalletMnemonics() + if (wallets.length < 3) throw new Error("token_acl_pause_matrix requires at least 3 wallets (owner, grantee, outsider)") + + const ownerMnemonic = wallets[0]! + const granteeMnemonic = wallets[1]! + const outsiderMnemonic = wallets[2]! + + const walletAddresses = (await getWalletAddresses(rpcUrl, [ownerMnemonic, granteeMnemonic, outsiderMnemonic])).map(normalizeHexAddress) + const owner = walletAddresses[0]! + const grantee = walletAddresses[1]! + const outsider = walletAddresses[2]! + + const { tokenAddress } = await ensureTokenAndBalances(rpcUrl, ownerMnemonic, walletAddresses) + + const tokenGet = await nodeCall(rpcUrl, "token.get", { tokenAddress }, "preflight:token.get") + if (tokenGet?.result !== 200) throw new Error(`preflight token.get failed: ${JSON.stringify(tokenGet)}`) + const tokenOwner = normalizeHexAddress(tokenGet?.response?.accessControl?.owner ?? "") + if (tokenOwner !== owner) throw new Error(`Token owner mismatch. token.get owner=${tokenOwner} expected owner=${owner}`) + + const amount = parseBigintOrZero(process.env.TOKEN_TRANSFER_AMOUNT ?? "1") + const mintAmount = parseBigintOrZero(process.env.TOKEN_MINT_AMOUNT ?? "1") + const burnAmount = parseBigintOrZero(process.env.TOKEN_BURN_AMOUNT ?? "1") + const applyTimeoutSec = envInt("TOKEN_WAIT_APPLY_SEC", 120) + const pollMs = envInt("TOKEN_APPLY_POLL_MS", 500) + + const before = await snapshot(rpcUrl, tokenAddress, [owner, grantee, outsider]) + if (before.paused) throw new Error("Token unexpectedly starts paused") + + // 1) Non-owner pause attempt should fail. + const granteePause = await withDemosWallet({ + rpcUrl, + mnemonic: granteeMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== grantee) throw new Error(`grantee identity mismatch: ${fromHex} !== ${grantee}`) + const nonce = Number(await demos.getAddressNonce(grantee)) + 1 + return await sendTokenPauseTxWithDemos({ demos, tokenAddress, nonce }) + }, + }) + assertRejected(granteePause?.res, "No pause permission") + + const waitNoPerm = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitNoPerm.ok) throw new Error("Consensus wait failed after unauthorized pause attempt") + + const afterNoPerm = await snapshot(rpcUrl, tokenAddress, [owner, grantee, outsider]) + const unauthorizedBlocked = + afterNoPerm.paused === false && + afterNoPerm.supply === before.supply && + afterNoPerm.balances[owner] === before.balances[owner] && + afterNoPerm.balances[grantee] === before.balances[grantee] + + // 2) Owner pauses token. + const pause = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== owner) throw new Error(`owner identity mismatch: ${fromHex} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenPauseTxWithDemos({ demos, tokenAddress, nonce }) + }, + }) + + const waitPause = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitPause.ok) throw new Error("Consensus wait failed after pause") + + const pausedCondition = await waitForCondition({ + rpcUrl, + tokenAddress, + addresses: [owner, grantee, outsider], + timeoutSec: applyTimeoutSec, + pollMs, + label: "paused == true", + condition: s => s.paused === true, + }) + if (!pausedCondition.ok) throw new Error(`Pause not visible in time: ${JSON.stringify(pausedCondition)}`) + const afterPause = pausedCondition.snapshot + + const pauseAccepted = pause?.res?.result === 200 + + // 3) While paused, transfers/mint/burn should be rejected. + const pausedTransfer = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== owner) throw new Error(`owner identity mismatch: ${fromHex} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenTransferTxWithDemos({ demos, tokenAddress, to: grantee, amount, nonce }) + }, + }) + assertRejected(pausedTransfer?.res, "Token is paused") + + const pausedMint = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== owner) throw new Error(`owner identity mismatch: ${fromHex} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenMintTxWithDemos({ demos, tokenAddress, to: grantee, amount: mintAmount, nonce }) + }, + }) + assertRejected(pausedMint?.res, "Token is paused") + + const pausedBurn = await withDemosWallet({ + rpcUrl, + mnemonic: granteeMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== grantee) throw new Error(`grantee identity mismatch: ${fromHex} !== ${grantee}`) + const nonce = Number(await demos.getAddressNonce(grantee)) + 1 + return await sendTokenBurnTxWithDemos({ demos, tokenAddress, from: grantee, amount: burnAmount, nonce }) + }, + }) + assertRejected(pausedBurn?.res, "Token is paused") + + const waitPausedAttempts = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitPausedAttempts.ok) throw new Error("Consensus wait failed after paused tx attempts") + + const afterPausedAttempts = await snapshot(rpcUrl, tokenAddress, [owner, grantee, outsider]) + const pausedBlocksWrites = + afterPausedAttempts.paused === true && + afterPausedAttempts.supply === afterPause.supply && + afterPausedAttempts.balances[owner] === afterPause.balances[owner] && + afterPausedAttempts.balances[grantee] === afterPause.balances[grantee] + + // 4) Non-owner unpause attempt should fail. + const outsiderUnpause = await withDemosWallet({ + rpcUrl, + mnemonic: outsiderMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== outsider) throw new Error(`outsider identity mismatch: ${fromHex} !== ${outsider}`) + const nonce = Number(await demos.getAddressNonce(outsider)) + 1 + return await sendTokenUnpauseTxWithDemos({ demos, tokenAddress, nonce }) + }, + }) + assertRejected(outsiderUnpause?.res, "No pause permission") + + // 5) Owner unpauses. + const unpause = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== owner) throw new Error(`owner identity mismatch: ${fromHex} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenUnpauseTxWithDemos({ demos, tokenAddress, nonce }) + }, + }) + + const waitUnpause = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitUnpause.ok) throw new Error("Consensus wait failed after unpause") + + const unpausedCondition = await waitForCondition({ + rpcUrl, + tokenAddress, + addresses: [owner, grantee, outsider], + timeoutSec: applyTimeoutSec, + pollMs, + label: "paused == false", + condition: s => s.paused === false, + }) + if (!unpausedCondition.ok) throw new Error(`Unpause not visible in time: ${JSON.stringify(unpausedCondition)}`) + const afterUnpause = unpausedCondition.snapshot + + const unpauseAccepted = unpause?.res?.result === 200 + + // 6) After unpause, a transfer should apply. + const transfer = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== owner) throw new Error(`owner identity mismatch: ${fromHex} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenTransferTxWithDemos({ demos, tokenAddress, to: grantee, amount, nonce }) + }, + }) + + const waitTransfer = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitTransfer.ok) throw new Error("Consensus wait failed after post-unpause transfer") + + const transferApplied = await waitForCondition({ + rpcUrl, + tokenAddress, + addresses: [owner, grantee, outsider], + timeoutSec: applyTimeoutSec, + pollMs, + label: "post-unpause transfer applied", + condition: s => + s.paused === false && + s.supply === afterUnpause.supply && + s.balances[owner] === afterUnpause.balances[owner] - amount && + s.balances[grantee] === afterUnpause.balances[grantee] + amount, + }) + if (!transferApplied.ok) throw new Error(`Post-unpause transfer not applied in time: ${JSON.stringify(transferApplied)}`) + const afterTransfer = transferApplied.snapshot + + const crossNode = await waitForCrossNodeTokenConsistency({ + rpcUrls: targets, + tokenAddress, + addresses: [owner, grantee, outsider], + timeoutSec: envInt("CROSS_NODE_TIMEOUT_SEC", 120), + pollMs: envInt("CROSS_NODE_POLL_MS", 500), + }) + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_acl_pause_matrix` + const summary = { + runId: run.runId, + scenario: "token_acl_pause_matrix", + tokenAddress, + rpcUrls: targets, + addresses: { owner, grantee, outsider }, + amounts: { transfer: amount.toString(), mint: mintAmount.toString(), burn: burnAmount.toString() }, + txs: { + granteePause, + pause, + pausedTransfer, + pausedMint, + pausedBurn, + outsiderUnpause, + unpause, + transfer, + }, + snapshots: { + before: { paused: before.paused, supply: before.supply.toString(), balances: Object.fromEntries(Object.entries(before.balances).map(([k, v]) => [k, v.toString()])) }, + afterNoPerm: { paused: afterNoPerm.paused, supply: afterNoPerm.supply.toString(), balances: Object.fromEntries(Object.entries(afterNoPerm.balances).map(([k, v]) => [k, v.toString()])) }, + afterPause: { paused: afterPause.paused, supply: afterPause.supply.toString(), balances: Object.fromEntries(Object.entries(afterPause.balances).map(([k, v]) => [k, v.toString()])) }, + afterPausedAttempts: { paused: afterPausedAttempts.paused, supply: afterPausedAttempts.supply.toString(), balances: Object.fromEntries(Object.entries(afterPausedAttempts.balances).map(([k, v]) => [k, v.toString()])) }, + afterUnpause: { paused: afterUnpause.paused, supply: afterUnpause.supply.toString(), balances: Object.fromEntries(Object.entries(afterUnpause.balances).map(([k, v]) => [k, v.toString()])) }, + afterTransfer: { paused: afterTransfer.paused, supply: afterTransfer.supply.toString(), balances: Object.fromEntries(Object.entries(afterTransfer.balances).map(([k, v]) => [k, v.toString()])) }, + }, + assertions: { + unauthorizedBlocked, + pauseAccepted, + pausedBlocksWrites, + unpauseAccepted, + postUnpauseTransferAccepted: transfer?.res?.result === 200, + crossNodeOk: crossNode.ok, + }, + crossNode, + ok: + unauthorizedBlocked && + pauseAccepted && + pausedBlocksWrites && + unpauseAccepted && + transfer?.res?.result === 200 && + crossNode.ok, + timestamp: new Date().toISOString(), + } + + writeJson(`${artifactBase}.summary.json`, summary) + console.log(JSON.stringify({ token_acl_pause_matrix_summary: summary }, null, 2)) + + if (!summary.ok) throw new Error("token_acl_pause_matrix failed assertions") +} + diff --git a/better_testing/loadgen/src/token_acl_smoke.ts b/better_testing/loadgen/src/token_acl_smoke.ts new file mode 100644 index 000000000..54ab639c5 --- /dev/null +++ b/better_testing/loadgen/src/token_acl_smoke.ts @@ -0,0 +1,378 @@ +import { Demos } from "@kynesyslabs/demosdk/websdk" +import { appendJsonl, getRunConfig, writeJson } from "./run_io" +import { + ensureTokenAndBalances, + getTokenTargets, + getWalletAddresses, + maybeSilenceConsole, + nodeCall, + readWalletMnemonics, + sendTokenBurnTxWithDemos, + sendTokenGrantPermissionTxWithDemos, + sendTokenMintTxWithDemos, + waitForCrossNodeHolderPointersMatchBalances, + waitForCrossNodeTokenConsistency, + withDemosWallet, +} from "./token_shared" + +type Config = { + targets: string[] + granteeIndex: number + attackerIndex: number + mintAmount: bigint + burnAmount: bigint + settleTimeoutSec: number + holderPointerTimeoutSec: number + pollMs: number + logDetails: boolean +} + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function envBool(name: string, fallback: boolean): boolean { + const raw = process.env[name] + if (!raw) return fallback + switch (raw.trim().toLowerCase()) { + case "1": + case "true": + case "yes": + case "y": + case "on": + return true + case "0": + case "false": + case "no": + case "n": + case "off": + return false + default: + return fallback + } +} + +function normalizeHexAddress(address: string): string { + const trimmed = (address ?? "").trim() + if (!trimmed) return trimmed + return trimmed.startsWith("0x") ? trimmed.toLowerCase() : ("0x" + trimmed).toLowerCase() +} + +function stableBalances(addresses: string[], balances: Record): Record { + const out: Record = {} + for (const a of addresses.map(normalizeHexAddress).sort()) out[a] = balances[a] ?? null + return out +} + +async function fetchTokenSnapshot(rpcUrl: string, tokenAddress: string, addresses: string[]) { + const addrNorm = addresses.map(normalizeHexAddress) + + const tokenRes = await nodeCall(rpcUrl, "token.get", { tokenAddress }, `token.get:${tokenAddress}`) + if (tokenRes?.result !== 200) return { ok: false, snapshot: null, error: tokenRes } + + const balances: Record = {} + for (const a of addrNorm) { + const balRes = await nodeCall(rpcUrl, "token.getBalance", { tokenAddress, address: a }, `token.getBalance:${a}`) + if (balRes?.result === 200) balances[a] = balRes?.response?.balance ?? null + else balances[a] = null + } + + const snapshot = { + tokenAddress, + state: { totalSupply: tokenRes?.response?.state?.totalSupply ?? null }, + balances: stableBalances(addrNorm, balances), + } + + return { ok: true, snapshot, error: null } +} + +function snapshotsEqual(a: any, b: any): boolean { + return JSON.stringify(a) === JSON.stringify(b) +} + +function getConfig(): Config { + return { + targets: getTokenTargets(), + granteeIndex: Math.max(1, envInt("ACL_GRANTEE_INDEX", 1)), + attackerIndex: Math.max(2, envInt("ACL_ATTACKER_INDEX", 2)), + mintAmount: BigInt(process.env.ACL_MINT_AMOUNT ?? "10"), + burnAmount: BigInt(process.env.ACL_BURN_AMOUNT ?? "1"), + settleTimeoutSec: envInt("POST_RUN_SETTLE_TIMEOUT_SEC", 120), + holderPointerTimeoutSec: envInt("POST_RUN_HOLDER_POINTER_TIMEOUT_SEC", 120), + pollMs: envInt("POST_RUN_SETTLE_POLL_MS", 500), + logDetails: envBool("ACL_LOG_DETAILS", false), + } +} + +function pickTarget(targets: string[], idx: number): string { + if (targets.length === 0) throw new Error("No TARGETS configured") + return targets[Math.abs(idx) % targets.length]! +} + +async function connectWallet(rpcUrl: string, mnemonic: string): Promise { + const demos = new Demos() + await demos.connect(rpcUrl) + await demos.connectWallet(mnemonic, { algorithm: "ed25519" }) + return demos +} + +async function nextNonce(demos: Demos, addressHex: string): Promise { + const current = await demos.getAddressNonce(addressHex) + return Number(current) + 1 +} + +export async function runTokenAclSmoke() { + maybeSilenceConsole() + const cfg = getConfig() + + const wallets = await readWalletMnemonics() + if (wallets.length < 3) throw new Error("Need at least 3 wallets for ACL smoke. Configure WALLET_FILES/WALLETS.") + + const bootstrapRpc = pickTarget(cfg.targets, 0) + const walletAddresses = await getWalletAddresses(bootstrapRpc, wallets) + + const ownerMnemonic = wallets[0]! + const ownerAddress = normalizeHexAddress(walletAddresses[0]!) + + if (cfg.granteeIndex >= wallets.length) throw new Error(`ACL_GRANTEE_INDEX=${cfg.granteeIndex} out of range`) + if (cfg.attackerIndex >= wallets.length) throw new Error(`ACL_ATTACKER_INDEX=${cfg.attackerIndex} out of range`) + + const granteeMnemonic = wallets[cfg.granteeIndex]! + const granteeAddress = normalizeHexAddress(walletAddresses[cfg.granteeIndex]!) + const attackerMnemonic = wallets[cfg.attackerIndex]! + const attackerAddress = normalizeHexAddress(walletAddresses[cfg.attackerIndex]!) + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_acl_smoke` + const artifacts = { + runId: run.runId, + runDir: run.runDir, + summaryPath: `${artifactBase}.summary.json`, + logPath: `${artifactBase}.log.jsonl`, + } + + function logEvent(event: any) { + appendJsonl(artifacts.logPath, { t: new Date().toISOString(), ...event }) + } + + const { tokenAddress } = await ensureTokenAndBalances(bootstrapRpc, ownerMnemonic, [ + ownerAddress, + granteeAddress, + attackerAddress, + ]) + + logEvent({ + phase: "bootstrap", + tokenAddress, + ownerAddress, + granteeAddress, + attackerAddress, + targets: cfg.targets, + }) + + // 1) Grant canMint+canBurn to grantee + const grantRes = await withDemosWallet({ + rpcUrl: pickTarget(cfg.targets, 0), + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + const grantNonce = Number(await demos.getAddressNonce(fromHex)) + 1 + const grant = await sendTokenGrantPermissionTxWithDemos({ + demos, + tokenAddress, + grantee: granteeAddress, + permissions: ["canMint", "canBurn"], + nonce: grantNonce, + }) + return { grantNonce, grant } + }, + }) + + logEvent({ + phase: "grantPermission", + nonce: grantRes.grantNonce, + result: grantRes.grant.res?.result, + response: cfg.logDetails ? grantRes.grant.res : undefined, + }) + + // 2) Grantee mints to owner (permissioned) + const mintRes = await withDemosWallet({ + rpcUrl: pickTarget(cfg.targets, 1), + mnemonic: granteeMnemonic, + fn: async (demos, fromHex) => { + const nonce = Number(await demos.getAddressNonce(fromHex)) + 1 + const mint = await sendTokenMintTxWithDemos({ + demos, + tokenAddress, + to: ownerAddress, + amount: cfg.mintAmount, + nonce, + }) + return { nonce, mint } + }, + }) + logEvent({ + phase: "granteeMint", + nonce: mintRes.nonce, + result: mintRes.mint.res?.result, + response: cfg.logDetails ? mintRes.mint.res : undefined, + }) + + // 3) Grantee burns from owner (permissioned; burn-from-any requires canBurn) + const burnRes = await withDemosWallet({ + rpcUrl: pickTarget(cfg.targets, 1), + mnemonic: granteeMnemonic, + fn: async (demos, fromHex) => { + const nonce = Number(await demos.getAddressNonce(fromHex)) + 1 + const burn = await sendTokenBurnTxWithDemos({ + demos, + tokenAddress, + from: ownerAddress, + amount: cfg.burnAmount, + nonce, + }) + return { nonce, burn } + }, + }) + logEvent({ + phase: "granteeBurnFromOwner", + nonce: burnRes.nonce, + result: burnRes.burn.res?.result, + response: cfg.logDetails ? burnRes.burn.res : undefined, + }) + + // 4) Settle: cross-node state consistency + holder pointers + const settleAddresses = [ownerAddress, granteeAddress, attackerAddress] + const settle = await waitForCrossNodeTokenConsistency({ + rpcUrls: cfg.targets, + tokenAddress, + addresses: settleAddresses, + timeoutSec: cfg.settleTimeoutSec, + pollMs: cfg.pollMs, + }) + + const expectedPresent: Record = {} + if (settle.ok && settle.perNode?.[0]?.snapshot?.balances) { + for (const [addr, balRaw] of Object.entries(settle.perNode[0].snapshot.balances)) { + try { + expectedPresent[addr] = BigInt(balRaw ?? "0") > 0n + } catch { + expectedPresent[addr] = false + } + } + } + + const holderPointers = + settle.ok && Object.keys(expectedPresent).length > 0 + ? await waitForCrossNodeHolderPointersMatchBalances({ + rpcUrls: cfg.targets, + tokenAddress, + expectedPresent, + timeoutSec: cfg.holderPointerTimeoutSec, + pollMs: cfg.pollMs, + }) + : null + + // 5) Negative: attacker mint/burn should not change state + const baseline = await fetchTokenSnapshot(bootstrapRpc, tokenAddress, [ownerAddress, attackerAddress]) + if (!baseline.ok || !baseline.snapshot) throw new Error(`Failed to read baseline snapshot: ${JSON.stringify(baseline.error)}`) + + const attackerDemos = await connectWallet(pickTarget(cfg.targets, 2), attackerMnemonic) + let attackerNextNonce = await nextNonce(attackerDemos, attackerAddress) + + const attackerMintAttempt = await sendTokenMintTxWithDemos({ + demos: attackerDemos, + tokenAddress, + to: attackerAddress, + amount: 1n, + nonce: attackerNextNonce++, + }).catch((err: any) => ({ res: { result: -1, error: String(err) } })) + logEvent({ phase: "attackerMintAttempt", result: (attackerMintAttempt as any)?.res?.result, error: (attackerMintAttempt as any)?.res?.error }) + + const afterMint = await waitForCrossNodeTokenConsistency({ + rpcUrls: cfg.targets, + tokenAddress, + addresses: [ownerAddress, attackerAddress], + timeoutSec: cfg.settleTimeoutSec, + pollMs: cfg.pollMs, + }) + const afterMintSnapshot = afterMint?.perNode?.[0]?.snapshot + const baselineLike = { + tokenAddress, + metadata: { name: null, ticker: null, decimals: null }, + state: { totalSupply: baseline.snapshot.state.totalSupply }, + balances: baseline.snapshot.balances, + } + const afterMintLike = afterMintSnapshot + ? { + tokenAddress, + metadata: { name: null, ticker: null, decimals: null }, + state: { totalSupply: afterMintSnapshot.state.totalSupply }, + balances: stableBalances(Object.keys(baseline.snapshot.balances), afterMintSnapshot.balances), + } + : null + + const attackerMintOk = !!afterMintLike && snapshotsEqual(baselineLike, afterMintLike) + + const attackerBurnAttempt = await sendTokenBurnTxWithDemos({ + demos: attackerDemos, + tokenAddress, + from: ownerAddress, + amount: 1n, + nonce: attackerNextNonce++, + }).catch((err: any) => ({ res: { result: -1, error: String(err) } })) + logEvent({ phase: "attackerBurnAttempt", result: (attackerBurnAttempt as any)?.res?.result, error: (attackerBurnAttempt as any)?.res?.error }) + + const afterBurn = await waitForCrossNodeTokenConsistency({ + rpcUrls: cfg.targets, + tokenAddress, + addresses: [ownerAddress, attackerAddress], + timeoutSec: cfg.settleTimeoutSec, + pollMs: cfg.pollMs, + }) + const afterBurnSnapshot = afterBurn?.perNode?.[0]?.snapshot + const afterBurnLike = afterBurnSnapshot + ? { + tokenAddress, + metadata: { name: null, ticker: null, decimals: null }, + state: { totalSupply: afterBurnSnapshot.state.totalSupply }, + balances: stableBalances(Object.keys(baseline.snapshot.balances), afterBurnSnapshot.balances), + } + : null + + const attackerBurnOk = !!afterBurnLike && snapshotsEqual(baselineLike, afterBurnLike) + + const summary = { + scenario: "token_acl_smoke", + tokenAddress, + ownerAddress, + granteeAddress, + attackerAddress, + config: { + targets: cfg.targets, + mintAmount: cfg.mintAmount.toString(), + burnAmount: cfg.burnAmount.toString(), + granteeIndex: cfg.granteeIndex, + attackerIndex: cfg.attackerIndex, + settleTimeoutSec: cfg.settleTimeoutSec, + holderPointerTimeoutSec: cfg.holderPointerTimeoutSec, + }, + postRun: { + settle, + holderPointers, + negative: { + baseline: baseline.snapshot, + attackerMintNoStateChange: attackerMintOk, + attackerBurnNoStateChange: attackerBurnOk, + }, + }, + ok: settle.ok && (holderPointers?.ok ?? true) && attackerMintOk && attackerBurnOk, + artifacts, + timestamp: new Date().toISOString(), + } + + writeJson(artifacts.summaryPath, summary) + console.log(JSON.stringify({ token_acl_smoke_summary: summary }, null, 2)) +} diff --git a/better_testing/loadgen/src/token_acl_transfer_ownership_matrix.ts b/better_testing/loadgen/src/token_acl_transfer_ownership_matrix.ts new file mode 100644 index 000000000..c989a8546 --- /dev/null +++ b/better_testing/loadgen/src/token_acl_transfer_ownership_matrix.ts @@ -0,0 +1,396 @@ +import { + ensureTokenAndBalances, + getTokenTargets, + getWalletAddresses, + maybeSilenceConsole, + nodeCall, + readWalletMnemonics, + sendTokenGrantPermissionTxWithDemos, + sendTokenPauseTxWithDemos, + sendTokenTransferOwnershipTxWithDemos, + sendTokenUnpauseTxWithDemos, + withDemosWallet, +} from "./token_shared" +import { getRunConfig, writeJson } from "./run_io" + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function normalizeRpcUrl(url: string): string { + return url.replace(/\/+$/, "") + "/" +} + +function normalizeHexAddress(address: string): string { + const trimmed = (address ?? "").trim() + if (!trimmed) return trimmed + return trimmed.startsWith("0x") ? trimmed.toLowerCase() : ("0x" + trimmed).toLowerCase() +} + +function assertRejected(res: any, expectedMessageSubstring: string) { + if (res?.result === 200) { + throw new Error(`Expected rejection but got result=200: ${JSON.stringify(res)}`) + } + + const pieces: string[] = [] + if (typeof res?.extra?.error === "string") pieces.push(res.extra.error) + if (typeof res?.response === "string") pieces.push(res.response) + if (res?.response === false) pieces.push("false") + if (typeof res?.message === "string") pieces.push(res.message) + const haystack = pieces.join(" ").toLowerCase() + + if (!haystack.includes(expectedMessageSubstring.toLowerCase())) { + throw new Error(`Expected error to include "${expectedMessageSubstring}" but got: ${JSON.stringify(res)}`) + } +} + +async function getLastBlockNumber(rpcUrl: string, muid: string): Promise { + const res = await nodeCall(rpcUrl, "getLastBlockNumber", {}, muid) + const n = res?.response + if (typeof n === "number" && Number.isFinite(n)) return n + if (typeof n === "string") { + const parsed = Number.parseInt(n, 10) + return Number.isFinite(parsed) ? parsed : null + } + return null +} + +async function waitForConsensusRounds(params: { + rpcUrls: string[] + rounds: number + timeoutSec: number + pollMs: number +}) { + const deadlineMs = Date.now() + Math.max(1, params.timeoutSec) * 1000 + const start: Record = {} + for (const rpcUrl of params.rpcUrls) { + start[rpcUrl] = await getLastBlockNumber(rpcUrl, `getLastBlockNumber:start:${rpcUrl}`) + } + + while (Date.now() < deadlineMs) { + let allOk = true + for (const rpcUrl of params.rpcUrls) { + const base = start[rpcUrl] + const current = await getLastBlockNumber(rpcUrl, `getLastBlockNumber:poll:${rpcUrl}`) + const ok = typeof base === "number" && typeof current === "number" && current >= base + params.rounds + if (!ok) allOk = false + } + if (allOk) return { ok: true, start } + await sleep(Math.max(100, Math.floor(params.pollMs))) + } + + return { ok: false, start } +} + +async function snapshotOwnerPaused(rpcUrl: string, tokenAddress: string) { + const token = await nodeCall(rpcUrl, "token.get", { tokenAddress }, `token.get:${tokenAddress}`) + if (token?.result !== 200) throw new Error(`token.get failed: ${JSON.stringify(token)}`) + return { + owner: normalizeHexAddress(token?.response?.accessControl?.owner ?? ""), + paused: !!token?.response?.accessControl?.paused, + } +} + +async function waitForOwnerPaused(params: { + rpcUrl: string + tokenAddress: string + owner: string + paused: boolean + timeoutSec: number + pollMs: number + label: string +}) { + const deadlineMs = Date.now() + Math.max(1, params.timeoutSec) * 1000 + let attempt = 0 + while (Date.now() < deadlineMs) { + const snap = await snapshotOwnerPaused(params.rpcUrl, params.tokenAddress) + if (snap.owner === normalizeHexAddress(params.owner) && snap.paused === params.paused) { + return { ok: true, attempt, snapshot: snap } + } + attempt++ + await sleep(Math.max(100, Math.floor(params.pollMs))) + } + const last = await snapshotOwnerPaused(params.rpcUrl, params.tokenAddress) + return { ok: false, attempt, snapshot: last, error: `Timeout waiting for ${params.label}` } +} + +async function waitForCrossNodeOwnerPaused(params: { + rpcUrls: string[] + tokenAddress: string + owner: string + paused: boolean + timeoutSec: number + pollMs: number +}) { + const deadlineMs = Date.now() + Math.max(1, params.timeoutSec) * 1000 + let attempts = 0 + const owner = normalizeHexAddress(params.owner) + const rpcUrls = (params.rpcUrls ?? []).map(normalizeRpcUrl) + + while (Date.now() < deadlineMs) { + attempts++ + const perNode: any[] = [] + let allOk = true + for (const rpcUrl of rpcUrls) { + try { + const snap = await snapshotOwnerPaused(rpcUrl, params.tokenAddress) + const ok = snap.owner === owner && snap.paused === params.paused + perNode.push({ rpcUrl, ok, snapshot: snap }) + if (!ok) allOk = false + } catch (error: any) { + perNode.push({ rpcUrl, ok: false, snapshot: null, error: String(error?.message ?? error) }) + allOk = false + } + } + if (allOk) return { ok: true, attempts, perNode } + await sleep(Math.max(100, Math.floor(params.pollMs))) + } + + const perNode: any[] = [] + for (const rpcUrl of rpcUrls) { + try { + const snap = await snapshotOwnerPaused(rpcUrl, params.tokenAddress) + perNode.push({ rpcUrl, ok: snap.owner === owner && snap.paused === params.paused, snapshot: snap }) + } catch (error: any) { + perNode.push({ rpcUrl, ok: false, snapshot: null, error: String(error?.message ?? error) }) + } + } + return { ok: false, attempts, perNode } +} + +export async function runTokenAclTransferOwnershipMatrix() { + maybeSilenceConsole() + + const targets = getTokenTargets().map(normalizeRpcUrl) + const rpcUrl = targets[0]! + + const wallets = await readWalletMnemonics() + if (wallets.length < 3) throw new Error("token_acl_transfer_ownership_matrix requires at least 3 wallets (owner, newOwner, outsider)") + + const ownerMnemonic = wallets[0]! + const newOwnerMnemonic = wallets[1]! + const outsiderMnemonic = wallets[2]! + + const walletAddresses = (await getWalletAddresses(rpcUrl, [ownerMnemonic, newOwnerMnemonic, outsiderMnemonic])).map(normalizeHexAddress) + const owner = walletAddresses[0]! + const newOwner = walletAddresses[1]! + const outsider = walletAddresses[2]! + + const { tokenAddress } = await ensureTokenAndBalances(rpcUrl, ownerMnemonic, walletAddresses) + + const applyTimeoutSec = envInt("TOKEN_WAIT_APPLY_SEC", 120) + const pollMs = envInt("TOKEN_APPLY_POLL_MS", 500) + + const before = await snapshotOwnerPaused(rpcUrl, tokenAddress) + if (before.owner !== owner) throw new Error(`Token owner mismatch: ${before.owner} !== ${owner}`) + + // 1) Non-owner transferOwnership attempt should fail. + const outsiderTransfer = await withDemosWallet({ + rpcUrl, + mnemonic: outsiderMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== outsider) throw new Error(`outsider identity mismatch: ${fromHex} !== ${outsider}`) + const nonce = Number(await demos.getAddressNonce(outsider)) + 1 + return await sendTokenTransferOwnershipTxWithDemos({ demos, tokenAddress, newOwner, nonce }) + }, + }) + assertRejected(outsiderTransfer?.res, "No ownership transfer permission") + + const waitOutsider = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitOutsider.ok) throw new Error("Consensus wait failed after outsider transferOwnership attempt") + + const afterOutsider = await snapshotOwnerPaused(rpcUrl, tokenAddress) + const outsiderBlocked = afterOutsider.owner === owner + + // 2) Owner transfers ownership to newOwner. + const transfer = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== owner) throw new Error(`owner identity mismatch: ${fromHex} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenTransferOwnershipTxWithDemos({ demos, tokenAddress, newOwner, nonce }) + }, + }) + + const waitTransfer = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitTransfer.ok) throw new Error("Consensus wait failed after owner transferOwnership") + + const newOwnerVisible = await waitForOwnerPaused({ + rpcUrl, + tokenAddress, + owner: newOwner, + paused: false, + timeoutSec: applyTimeoutSec, + pollMs, + label: "new owner visible (paused=false)", + }) + if (!newOwnerVisible.ok) throw new Error(`New owner not visible in time: ${JSON.stringify(newOwnerVisible)}`) + + const afterTransferOwner = newOwnerVisible.snapshot + const transferAccepted = transfer?.res?.result === 200 + + // 3) Old owner should lose implicit permissions: pause + ACL modification should fail. + const oldOwnerPause = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== owner) throw new Error(`owner identity mismatch: ${fromHex} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenPauseTxWithDemos({ demos, tokenAddress, nonce }) + }, + }) + assertRejected(oldOwnerPause?.res, "No pause permission") + + const oldOwnerGrant = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== owner) throw new Error(`owner identity mismatch: ${fromHex} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenGrantPermissionTxWithDemos({ + demos, + tokenAddress, + grantee: outsider, + permissions: ["canMint"], + nonce, + }) + }, + }) + assertRejected(oldOwnerGrant?.res, "No ACL modification permission") + + // 4) New owner can pause/unpause (implicit canPause). + const newOwnerPause = await withDemosWallet({ + rpcUrl, + mnemonic: newOwnerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== newOwner) throw new Error(`newOwner identity mismatch: ${fromHex} !== ${newOwner}`) + const nonce = Number(await demos.getAddressNonce(newOwner)) + 1 + return await sendTokenPauseTxWithDemos({ demos, tokenAddress, nonce }) + }, + }) + + const waitPause = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitPause.ok) throw new Error("Consensus wait failed after newOwner pause") + + const pausedVisible = await waitForOwnerPaused({ + rpcUrl, + tokenAddress, + owner: newOwner, + paused: true, + timeoutSec: applyTimeoutSec, + pollMs, + label: "paused visible", + }) + if (!pausedVisible.ok) throw new Error(`Pause not visible in time: ${JSON.stringify(pausedVisible)}`) + + const newOwnerUnpause = await withDemosWallet({ + rpcUrl, + mnemonic: newOwnerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== newOwner) throw new Error(`newOwner identity mismatch: ${fromHex} !== ${newOwner}`) + const nonce = Number(await demos.getAddressNonce(newOwner)) + 1 + return await sendTokenUnpauseTxWithDemos({ demos, tokenAddress, nonce }) + }, + }) + + const waitUnpause = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitUnpause.ok) throw new Error("Consensus wait failed after newOwner unpause") + + const unpausedVisible = await waitForOwnerPaused({ + rpcUrl, + tokenAddress, + owner: newOwner, + paused: false, + timeoutSec: applyTimeoutSec, + pollMs, + label: "unpaused visible", + }) + if (!unpausedVisible.ok) throw new Error(`Unpause not visible in time: ${JSON.stringify(unpausedVisible)}`) + + const crossNode = await waitForCrossNodeOwnerPaused({ + rpcUrls: targets, + tokenAddress, + owner: newOwner, + paused: false, + timeoutSec: envInt("CROSS_NODE_TIMEOUT_SEC", 120), + pollMs: envInt("CROSS_NODE_POLL_MS", 500), + }) + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_acl_transfer_ownership_matrix` + const summary = { + runId: run.runId, + scenario: "token_acl_transfer_ownership_matrix", + tokenAddress, + rpcUrls: targets, + addresses: { owner, newOwner, outsider }, + txs: { + outsiderTransfer, + transfer, + oldOwnerPause, + oldOwnerGrant, + newOwnerPause, + newOwnerUnpause, + }, + snapshots: { + before, + afterOutsider, + afterTransferOwner, + pausedVisible: pausedVisible.snapshot, + unpausedVisible: unpausedVisible.snapshot, + }, + assertions: { + outsiderBlocked, + transferAccepted, + oldOwnerPauseRejected: oldOwnerPause?.res?.result !== 200, + oldOwnerGrantRejected: oldOwnerGrant?.res?.result !== 200, + newOwnerPauseAccepted: newOwnerPause?.res?.result === 200, + newOwnerUnpauseAccepted: newOwnerUnpause?.res?.result === 200, + crossNodeOk: crossNode.ok, + }, + crossNode, + ok: + outsiderBlocked && + transferAccepted && + oldOwnerPause?.res?.result !== 200 && + oldOwnerGrant?.res?.result !== 200 && + newOwnerPause?.res?.result === 200 && + newOwnerUnpause?.res?.result === 200 && + crossNode.ok, + timestamp: new Date().toISOString(), + } + + writeJson(`${artifactBase}.summary.json`, summary) + console.log(JSON.stringify({ token_acl_transfer_ownership_matrix_summary: summary }, null, 2)) + + if (!summary.ok) throw new Error("token_acl_transfer_ownership_matrix failed assertions") +} + diff --git a/better_testing/loadgen/src/token_acl_updateacl_compat.ts b/better_testing/loadgen/src/token_acl_updateacl_compat.ts new file mode 100644 index 000000000..2a4d4b6e3 --- /dev/null +++ b/better_testing/loadgen/src/token_acl_updateacl_compat.ts @@ -0,0 +1,365 @@ +import { + ensureTokenAndBalances, + getTokenTargets, + getWalletAddresses, + maybeSilenceConsole, + nodeCall, + readWalletMnemonics, + sendTokenMintTxWithDemos, + sendTokenUpdateAclTxWithDemos, + waitForCrossNodeTokenGetConsistency, + waitForCrossNodeTokenConsistency, + withDemosWallet, +} from "./token_shared" +import { getRunConfig, writeJson } from "./run_io" + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function normalizeRpcUrl(url: string): string { + return url.replace(/\/+$/, "") + "/" +} + +function normalizeHexAddress(address: string): string { + const trimmed = (address ?? "").trim() + if (!trimmed) return trimmed + return trimmed.startsWith("0x") ? trimmed.toLowerCase() : ("0x" + trimmed).toLowerCase() +} + +function assertRejected(res: any, expectedMessageSubstring: string) { + if (res?.result === 200) { + throw new Error(`Expected rejection but got result=200: ${JSON.stringify(res)}`) + } + const pieces: string[] = [] + if (typeof res?.extra?.error === "string") pieces.push(res.extra.error) + if (typeof res?.response === "string") pieces.push(res.response) + if (res?.response === false) pieces.push("false") + if (typeof res?.message === "string") pieces.push(res.message) + const haystack = pieces.join(" ").toLowerCase() + if (!haystack.includes(expectedMessageSubstring.toLowerCase())) { + throw new Error(`Expected error to include "${expectedMessageSubstring}" but got: ${JSON.stringify(res)}`) + } +} + +function stringifyJson(value: unknown) { + return JSON.stringify(value, (_key, v) => (typeof v === "bigint" ? v.toString() : v), 2) +} + +async function getLastBlockNumber(rpcUrl: string, muid: string): Promise { + const res = await nodeCall(rpcUrl, "getLastBlockNumber", {}, muid) + const n = res?.response + if (typeof n === "number" && Number.isFinite(n)) return n + if (typeof n === "string") { + const parsed = Number.parseInt(n, 10) + return Number.isFinite(parsed) ? parsed : null + } + return null +} + +async function waitForConsensusRounds(params: { + rpcUrls: string[] + rounds: number + timeoutSec: number + pollMs: number +}) { + const deadlineMs = Date.now() + Math.max(1, params.timeoutSec) * 1000 + const start: Record = {} + for (const rpcUrl of params.rpcUrls) { + start[rpcUrl] = await getLastBlockNumber(rpcUrl, `getLastBlockNumber:start:${rpcUrl}`) + } + + while (Date.now() < deadlineMs) { + let allOk = true + for (const rpcUrl of params.rpcUrls) { + const base = start[rpcUrl] + const current = await getLastBlockNumber(rpcUrl, `getLastBlockNumber:poll:${rpcUrl}`) + const ok = typeof base === "number" && typeof current === "number" && current >= base + params.rounds + if (!ok) allOk = false + } + if (allOk) return { ok: true, start } + await sleep(Math.max(100, Math.floor(params.pollMs))) + } + + return { ok: false, start } +} + +async function snapshot(rpcUrl: string, tokenAddress: string, addresses: string[]) { + const token = await nodeCall(rpcUrl, "token.get", { tokenAddress }, `token.get:${tokenAddress}`) + if (token?.result !== 200) throw new Error(`token.get failed: ${JSON.stringify(token)}`) + const owner = normalizeHexAddress(token?.response?.accessControl?.owner ?? "") + const paused = !!token?.response?.accessControl?.paused + const aclEntries = Array.isArray(token?.response?.accessControl?.entries) ? token.response.accessControl.entries : [] + + const balances: Record = {} + for (const a of addresses) { + const bal = await nodeCall(rpcUrl, "token.getBalance", { tokenAddress, address: a }, `token.getBalance:${a}`) + if (bal?.result !== 200) throw new Error(`token.getBalance failed: ${JSON.stringify(bal)}`) + balances[a] = String(bal?.response?.balance ?? "0") + } + + return { owner, paused, aclEntries, balances } +} + +function getEntryPerms(aclEntries: any[], address: string): string[] { + const addr = normalizeHexAddress(address) + for (const entry of aclEntries ?? []) { + if (normalizeHexAddress(entry?.address ?? "") !== addr) continue + return Array.isArray(entry?.permissions) ? entry.permissions : [] + } + return [] +} + +async function waitForSnapshotUntil(params: { + rpcUrl: string + tokenAddress: string + addresses: string[] + timeoutSec: number + pollMs: number + predicate: (s: Awaited>) => boolean +}) { + const deadline = Date.now() + Math.max(1, params.timeoutSec) * 1000 + let attempts = 0 + let last = await snapshot(params.rpcUrl, params.tokenAddress, params.addresses) + while (Date.now() < deadline) { + attempts++ + last = await snapshot(params.rpcUrl, params.tokenAddress, params.addresses) + if (params.predicate(last)) return { ok: true, attempts, snapshot: last } + await sleep(Math.max(50, Math.floor(params.pollMs))) + } + return { ok: false, attempts, snapshot: last } +} + +export async function runTokenAclUpdateAclCompat() { + maybeSilenceConsole() + + const targets = getTokenTargets().map(normalizeRpcUrl) + const rpcUrl = targets[0]! + + const wallets = await readWalletMnemonics() + if (wallets.length < 3) throw new Error("token_acl_updateacl_compat requires at least 3 wallets (owner, grantee, outsider)") + + const ownerMnemonic = wallets[0]! + const granteeMnemonic = wallets[1]! + const outsiderMnemonic = wallets[2]! + + const walletAddresses = (await getWalletAddresses(rpcUrl, [ownerMnemonic, granteeMnemonic, outsiderMnemonic])).map(normalizeHexAddress) + const owner = walletAddresses[0]! + const grantee = walletAddresses[1]! + const outsider = walletAddresses[2]! + + const { tokenAddress } = await ensureTokenAndBalances(rpcUrl, ownerMnemonic, walletAddresses) + + const mintAmount = BigInt(process.env.TOKEN_MINT_AMOUNT ?? "1") + const applyTimeoutSec = envInt("TOKEN_WAIT_APPLY_SEC", 120) + + const before = await snapshot(rpcUrl, tokenAddress, [owner, grantee, outsider]) + if (before.owner !== owner) throw new Error(`Token owner mismatch: ${before.owner} !== ${owner}`) + + const preMint = await withDemosWallet({ + rpcUrl, + mnemonic: granteeMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== grantee) throw new Error(`grantee identity mismatch: ${fromHex} !== ${grantee}`) + const nonce = Number(await demos.getAddressNonce(grantee)) + 1 + return await sendTokenMintTxWithDemos({ demos, tokenAddress, to: grantee, amount: mintAmount, nonce }) + }, + }) + assertRejected(preMint?.res, "No mint permission") + + const preUpdateAcl = await withDemosWallet({ + rpcUrl, + mnemonic: outsiderMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== outsider) throw new Error(`outsider identity mismatch: ${fromHex} !== ${outsider}`) + const nonce = Number(await demos.getAddressNonce(outsider)) + 1 + return await sendTokenUpdateAclTxWithDemos({ + demos, + tokenAddress, + action: "grant", + targetAddress: outsider, + permissions: ["canMint"], + nonce, + }) + }, + }) + assertRejected(preUpdateAcl?.res, "No ACL modification permission") + + const grantViaUpdateAcl = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== owner) throw new Error(`owner identity mismatch: ${fromHex} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenUpdateAclTxWithDemos({ + demos, + tokenAddress, + action: "grant", + targetAddress: grantee, + permissions: ["canMint"], + nonce, + }) + }, + }) + + const waitGrant = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitGrant.ok) throw new Error("Consensus wait failed after updateACL grant") + + const afterGrantVisible = await waitForSnapshotUntil({ + rpcUrl, + tokenAddress, + addresses: [owner, grantee, outsider], + timeoutSec: applyTimeoutSec, + pollMs: 500, + predicate: s => getEntryPerms(s.aclEntries, grantee).includes("canMint"), + }) + const afterGrant = afterGrantVisible.snapshot + const grantVisible = afterGrantVisible.ok + + const mintOk = await withDemosWallet({ + rpcUrl, + mnemonic: granteeMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== grantee) throw new Error(`grantee identity mismatch: ${fromHex} !== ${grantee}`) + const nonce = Number(await demos.getAddressNonce(grantee)) + 1 + return await sendTokenMintTxWithDemos({ demos, tokenAddress, to: grantee, amount: mintAmount, nonce }) + }, + }) + + const waitMint = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitMint.ok) throw new Error("Consensus wait failed after mint") + + const afterMintApplied = await waitForSnapshotUntil({ + rpcUrl, + tokenAddress, + addresses: [owner, grantee, outsider], + timeoutSec: applyTimeoutSec, + pollMs: 500, + predicate: s => { + const beforeBal = BigInt(afterGrant.balances[grantee] ?? "0") + const afterBal = BigInt(s.balances[grantee] ?? "0") + return afterBal === beforeBal + mintAmount + }, + }) + const afterMint = afterMintApplied.snapshot + const mintApplied = afterMintApplied.ok + + const revokeViaUpdateAcl = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== owner) throw new Error(`owner identity mismatch: ${fromHex} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenUpdateAclTxWithDemos({ + demos, + tokenAddress, + action: "revoke", + targetAddress: grantee, + permissions: ["canMint"], + nonce, + }) + }, + }) + + const waitRevoke = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitRevoke.ok) throw new Error("Consensus wait failed after updateACL revoke") + + const afterRevokeVisible = await waitForSnapshotUntil({ + rpcUrl, + tokenAddress, + addresses: [owner, grantee, outsider], + timeoutSec: applyTimeoutSec, + pollMs: 500, + predicate: s => !getEntryPerms(s.aclEntries, grantee).includes("canMint"), + }) + const afterRevoke = afterRevokeVisible.snapshot + const revokeVisible = afterRevokeVisible.ok + + const postMint = await withDemosWallet({ + rpcUrl, + mnemonic: granteeMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== grantee) throw new Error(`grantee identity mismatch: ${fromHex} !== ${grantee}`) + const nonce = Number(await demos.getAddressNonce(grantee)) + 1 + return await sendTokenMintTxWithDemos({ demos, tokenAddress, to: grantee, amount: mintAmount, nonce }) + }, + }) + assertRejected(postMint?.res, "No mint permission") + + const crossNodeTokenGet = await waitForCrossNodeTokenGetConsistency({ + rpcUrls: targets, + tokenAddress, + timeoutSec: envInt("CROSS_NODE_TIMEOUT_SEC", 180), + pollMs: envInt("CROSS_NODE_POLL_MS", 500), + }) + + const crossNodeBalances = await waitForCrossNodeTokenConsistency({ + rpcUrls: targets, + tokenAddress, + addresses: [owner, grantee, outsider], + timeoutSec: envInt("CROSS_NODE_TIMEOUT_SEC", 180), + pollMs: envInt("CROSS_NODE_POLL_MS", 500), + }) + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_acl_updateacl_compat` + const summary = { + runId: run.runId, + scenario: "token_acl_updateacl_compat", + tokenAddress, + rpcUrls: targets, + addresses: { owner, grantee, outsider }, + txs: { + preMint, + preUpdateAcl, + grantViaUpdateAcl, + mintOk, + revokeViaUpdateAcl, + postMint, + }, + snapshots: { + before, + afterGrant, + afterMint, + afterRevoke, + }, + assertions: { + grantVisible, + mintApplied, + revokeVisible, + crossNodeTokenGetOk: crossNodeTokenGet.ok, + crossNodeBalancesOk: crossNodeBalances.ok, + }, + crossNodeTokenGet, + crossNodeBalances, + ok: grantVisible && mintApplied && revokeVisible && crossNodeTokenGet.ok && crossNodeBalances.ok, + timestamp: new Date().toISOString(), + } + + writeJson(`${artifactBase}.summary.json`, summary) + console.log(stringifyJson({ token_acl_updateacl_compat_summary: summary })) + if (!summary.ok) throw new Error("token_acl_updateacl_compat failed assertions") +} + diff --git a/better_testing/loadgen/src/token_burn_loadgen.ts b/better_testing/loadgen/src/token_burn_loadgen.ts new file mode 100644 index 000000000..5f07e92f9 --- /dev/null +++ b/better_testing/loadgen/src/token_burn_loadgen.ts @@ -0,0 +1,402 @@ +import { Demos } from "@kynesyslabs/demosdk/websdk" +import { uint8ArrayToHex } from "@kynesyslabs/demosdk/encryption" +import { appendJsonl, getRunConfig, writeJson } from "./run_io" +import { + ensureTokenAndBalances, + getTokenTargets, + getWalletAddresses, + maybeSilenceConsole, + readWalletMnemonics, + sendTokenBurnTxWithDemos, + waitForCrossNodeHolderPointersMatchBalances, + waitForCrossNodeTokenConsistency, + waitForRpcReady, + waitForTxReady, +} from "./token_shared" + +type LoadgenConfig = { + targets: string[] + durationSec: number + concurrency: number + amount: bigint + sampleLimit: number + inflightPerWallet: number + emitTimeseries: boolean +} + +type Counters = { + startedAtMs: number + endedAtMs: number + total: number + ok: number + error: number + errorSamples: Record +} + +type TimeseriesPoint = { + tSec: number + ok: number + total: number + error: number + tpsOk: number + latencyMs: { sampleCount: number; p50: number; p95: number; p99: number } + timestamp: string +} + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function envBool(name: string, fallback: boolean): boolean { + const raw = process.env[name] + if (!raw) return fallback + switch (raw.trim().toLowerCase()) { + case "1": + case "true": + case "yes": + case "y": + case "on": + return true + case "0": + case "false": + case "no": + case "n": + case "off": + return false + default: + return fallback + } +} + +function nowMs(): number { + return Date.now() +} + +function unique(values: string[]): string[] { + return Array.from(new Set(values)) +} + +function percentile(sorted: number[], p: number): number { + if (sorted.length === 0) return NaN + const idx = Math.min( + sorted.length - 1, + Math.max(0, Math.floor((p / 100) * (sorted.length - 1))), + ) + return sorted[idx]! +} + +class ReservoirSampler { + private seen = 0 + private readonly max: number + private readonly samples: number[] = [] + + constructor(maxSamples: number) { + this.max = Math.max(1, Math.floor(maxSamples)) + } + + add(value: number) { + this.seen++ + if (this.samples.length < this.max) { + this.samples.push(value) + return + } + const j = Math.floor(Math.random() * this.seen) + if (j < this.max) this.samples[j] = value + } + + snapshotSorted(): number[] { + const copy = this.samples.slice() + copy.sort((a, b) => a - b) + return copy + } + + size(): number { + return this.samples.length + } +} + +function getConfig(): LoadgenConfig { + const targets = getTokenTargets() + return { + targets, + durationSec: envInt("DURATION_SEC", 30), + concurrency: envInt("CONCURRENCY", Math.max(1, targets.length)), + amount: BigInt(process.env.TOKEN_BURN_AMOUNT ?? process.env.AMOUNT ?? "1"), + sampleLimit: envInt("SAMPLE_LIMIT", 200_000), + inflightPerWallet: Math.max(1, envInt("INFLIGHT_PER_WALLET", 1)), + emitTimeseries: envBool("EMIT_TIMESERIES", true), + } +} + +async function worker(params: { + cfg: LoadgenConfig + counters: Counters + sampler: ReservoirSampler + timeseriesSampler: ReservoirSampler + stopAtMs: number + ownerMnemonic: string + workerId: number + tokenAddress: string + fromAddress: string + allocateNonce: () => number +}) { + const { cfg } = params + const rpcUrl = cfg.targets[params.workerId % cfg.targets.length]! + const demos = new Demos() + await waitForRpcReady(rpcUrl, envInt("WAIT_FOR_RPC_SEC", 120)) + await waitForTxReady(rpcUrl, envInt("WAIT_FOR_TX_SEC", 120)) + await demos.connect(rpcUrl) + await demos.connectWallet(params.ownerMnemonic, { algorithm: "ed25519" }) + + async function sendOne() { + const start = performance.now() + params.counters.total++ + try { + const nonce = params.allocateNonce() + const { res } = await sendTokenBurnTxWithDemos({ + demos, + tokenAddress: params.tokenAddress, + from: params.fromAddress, + amount: cfg.amount, + nonce, + }) + if (res?.result !== 200) { + throw new Error(`tx rejected: ${JSON.stringify(res)}`) + } + const elapsed = performance.now() - start + params.sampler.add(elapsed) + params.timeseriesSampler.add(elapsed) + params.counters.ok++ + } catch (err: any) { + const elapsed = performance.now() - start + params.sampler.add(elapsed) + params.timeseriesSampler.add(elapsed) + params.counters.error++ + const key = String(err?.message ?? err ?? "unknown").slice(0, 400) + params.counters.errorSamples[key] = (params.counters.errorSamples[key] ?? 0) + 1 + } + } + + const inflight = Math.max(1, cfg.inflightPerWallet) + const active = new Set>() + + function launchOne() { + const p = sendOne().finally(() => { + active.delete(p) + }) + active.add(p) + } + + while (nowMs() < params.stopAtMs) { + while (active.size < inflight && nowMs() < params.stopAtMs) { + launchOne() + } + if (active.size === 0) break + await Promise.race(Array.from(active)) + } + + await Promise.allSettled(Array.from(active)) +} + +export async function runTokenBurnLoadgen() { + maybeSilenceConsole() + const wallets = await readWalletMnemonics() + if (wallets.length === 0) throw new Error("No wallets found. Set WALLETS or MNEMONICS_DIR/WALLET_FILES.") + + const ownerMnemonic = wallets[0]! + const cfg = getConfig() + + const bootstrapRpc = cfg.targets[0]! + const allWalletAddresses = await getWalletAddresses(bootstrapRpc, wallets) + const { tokenAddress } = await ensureTokenAndBalances(bootstrapRpc, ownerMnemonic, allWalletAddresses) + + const nonceDemos = new Demos() + await waitForRpcReady(bootstrapRpc, envInt("WAIT_FOR_RPC_SEC", 120)) + await waitForTxReady(bootstrapRpc, envInt("WAIT_FOR_TX_SEC", 120)) + await nonceDemos.connect(bootstrapRpc) + await nonceDemos.connectWallet(ownerMnemonic, { algorithm: "ed25519" }) + const sender = (await nonceDemos.crypto.getIdentity("ed25519")).publicKey + const ownerAddress = uint8ArrayToHex(sender) + const currentNonce = await nonceDemos.getAddressNonce(ownerAddress) + let nextNonce = Number(currentNonce) + 1 + const allocateNonce = () => nextNonce++ + + const startedAtMs = nowMs() + const stopAtMs = startedAtMs + cfg.durationSec * 1000 + + const counters: Counters = { + startedAtMs, + endedAtMs: 0, + total: 0, + ok: 0, + error: 0, + errorSamples: {}, + } + + const sampler = new ReservoirSampler(cfg.sampleLimit) + const timeseriesSampler = new ReservoirSampler(50_000) + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_burn` + const artifacts = { + runId: run.runId, + runDir: run.runDir, + summaryPath: `${artifactBase}.summary.json`, + timeseriesPath: `${artifactBase}.timeseries.jsonl`, + } + + let lastPointAtMs = startedAtMs + let lastOk = 0 + let lastTotal = 0 + let lastError = 0 + + async function timeseriesLoop() { + if (!cfg.emitTimeseries) return + while (nowMs() < stopAtMs) { + await sleep(1000) + const now = nowMs() + const elapsedSinceLast = Math.max(0.001, (now - lastPointAtMs) / 1000) + lastPointAtMs = now + + const okDelta = counters.ok - lastOk + const totalDelta = counters.total - lastTotal + const errorDelta = counters.error - lastError + + lastOk = counters.ok + lastTotal = counters.total + lastError = counters.error + + const samples = timeseriesSampler.snapshotSorted() + const point: TimeseriesPoint = { + tSec: (now - startedAtMs) / 1000, + ok: okDelta, + total: totalDelta, + error: errorDelta, + tpsOk: okDelta / elapsedSinceLast, + latencyMs: { + sampleCount: timeseriesSampler.size(), + p50: percentile(samples, 50), + p95: percentile(samples, 95), + p99: percentile(samples, 99), + }, + timestamp: new Date().toISOString(), + } + + appendJsonl(artifacts.timeseriesPath, point) + } + } + + const effectiveConc = Math.max(1, cfg.concurrency) + + await Promise.all( + [ + ...Array.from({ length: effectiveConc }).map((_, idx) => + worker({ + cfg, + counters, + sampler, + timeseriesSampler, + stopAtMs, + ownerMnemonic, + workerId: idx, + tokenAddress, + fromAddress: ownerAddress, + allocateNonce, + }), + ), + timeseriesLoop(), + ], + ) + + counters.endedAtMs = nowMs() + + const postRunSettleCheck = envBool("POST_RUN_SETTLE_CHECK", true) + const settleSample = unique([ownerAddress]).slice(0, envInt("POST_RUN_SETTLE_SAMPLE_ADDRESSES", 8)) + + const postRunSettle = postRunSettleCheck + ? await waitForCrossNodeTokenConsistency({ + rpcUrls: cfg.targets, + tokenAddress, + addresses: settleSample, + timeoutSec: envInt("POST_RUN_SETTLE_TIMEOUT_SEC", 120), + pollMs: envInt("POST_RUN_SETTLE_POLL_MS", 500), + }) + : null + + const holderPointerSettleCheck = envBool("POST_RUN_HOLDER_POINTER_CHECK", true) + const expectedPresent: Record = {} + if (postRunSettle?.ok && postRunSettle.perNode?.[0]?.snapshot?.balances) { + for (const [addr, balRaw] of Object.entries(postRunSettle.perNode[0].snapshot.balances)) { + try { + expectedPresent[addr] = BigInt(balRaw ?? "0") > 0n + } catch { + expectedPresent[addr] = false + } + } + } + + const holderPointerSettle = + holderPointerSettleCheck && Object.keys(expectedPresent).length > 0 + ? await waitForCrossNodeHolderPointersMatchBalances({ + rpcUrls: cfg.targets, + tokenAddress, + expectedPresent, + timeoutSec: envInt("POST_RUN_HOLDER_POINTER_TIMEOUT_SEC", 120), + pollMs: envInt("POST_RUN_HOLDER_POINTER_POLL_MS", 500), + }) + : null + + const durationSec = (counters.endedAtMs - counters.startedAtMs) / 1000 + const samples = sampler.snapshotSorted() + const summary = { + scenario: "token_burn", + tokenAddress, + ok: counters.ok, + total: counters.total, + error: counters.error, + errorSamples: counters.errorSamples, + durationSec, + okTps: counters.ok / Math.max(0.001, durationSec), + latencyMs: { + sampleCount: sampler.size(), + p50: percentile(samples, 50), + p95: percentile(samples, 95), + p99: percentile(samples, 99), + }, + config: { + targets: cfg.targets, + concurrency: effectiveConc, + inflightPerWallet: cfg.inflightPerWallet, + amount: cfg.amount.toString(), + waitForRpcSec: envInt("WAIT_FOR_RPC_SEC", 120), + tokenBootstrap: envBool("TOKEN_BOOTSTRAP", true), + tokenDistribute: envBool("TOKEN_DISTRIBUTE", true), + }, + postRun: { + settleSample, + settle: postRunSettle, + holderPointers: holderPointerSettle, + }, + artifacts, + timestamp: new Date().toISOString(), + } + + writeJson(artifacts.summaryPath, summary) + console.log(JSON.stringify({ token_burn_summary: summary }, null, 2)) + + const strict = envBool("POST_RUN_SETTLE_STRICT", false) + if (strict && postRunSettleCheck && postRunSettle && !postRunSettle.ok) { + throw new Error("Post-run settle check failed (token_burn)") + } + const strictPointers = envBool("POST_RUN_HOLDER_POINTER_STRICT", false) + if (strictPointers && holderPointerSettleCheck && holderPointerSettle && !holderPointerSettle.ok) { + throw new Error("Post-run holder-pointer check failed (token_burn)") + } +} diff --git a/better_testing/loadgen/src/token_burn_ramp.ts b/better_testing/loadgen/src/token_burn_ramp.ts new file mode 100644 index 000000000..226cd0b6f --- /dev/null +++ b/better_testing/loadgen/src/token_burn_ramp.ts @@ -0,0 +1,112 @@ +import { runTokenBurnLoadgen } from "./token_burn_loadgen" +import { getRunConfig, writeJson } from "./run_io" + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function splitCsv(value: string | undefined): string[] { + return (value ?? "") + .split(",") + .map(s => s.trim()) + .filter(Boolean) +} + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +export async function runTokenBurnRamp() { + const ramp = splitCsv(process.env.RAMP_CONCURRENCY) + .map(s => Number.parseInt(s, 10)) + .filter(n => Number.isFinite(n) && n > 0) + const stepDurationSec = envInt("STEP_DURATION_SEC", 15) + const cooldownSec = envInt("COOLDOWN_SEC", 3) + + if (ramp.length === 0) throw new Error("RAMP_CONCURRENCY must be a comma-separated list of positive ints") + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_burn_ramp` + const artifacts = { + runId: run.runId, + runDir: run.runDir, + summaryPath: `${artifactBase}.summary.json`, + } + + const results: any[] = [] + + for (const conc of ramp) { + process.env.SCENARIO = "token_burn" + process.env.DURATION_SEC = String(stepDurationSec) + process.env.CONCURRENCY = String(conc) + + let stepSummary: any = null + let stepError: any = null + + const originalLog = console.log + const capture: any[] = [] + console.log = (...args: any[]) => { + capture.push(args) + originalLog(...args) + } + + try { + await runTokenBurnLoadgen() + for (const row of capture) { + const payload = row?.[0] + if (payload && typeof payload === "string") { + try { + const parsed = JSON.parse(payload) + if (parsed?.token_burn_summary) stepSummary = parsed.token_burn_summary + } catch { + // ignore + } + } else if (payload?.token_burn_summary) { + stepSummary = payload.token_burn_summary + } + } + } catch (err: any) { + stepError = { message: err?.message ?? String(err) } + } finally { + console.log = originalLog + } + + results.push({ + concurrency: conc, + stepDurationSec, + cooldownSec, + summary: stepSummary, + error: stepError, + }) + + if (cooldownSec > 0) await sleep(cooldownSec * 1000) + } + + const okSteps = results + .map(r => ({ concurrency: r.concurrency, okTps: r.summary?.okTps })) + .filter(r => typeof r.okTps === "number") + + const best = okSteps.sort((a, b) => (b.okTps ?? 0) - (a.okTps ?? 0))[0] ?? null + + const rampSummary = { + scenario: "token_burn_ramp", + bestByOkTps: best, + steps: results, + config: { + rampConcurrency: ramp, + stepDurationSec, + cooldownSec, + inflightPerWallet: envInt("INFLIGHT_PER_WALLET", 1), + tokenBurnAmount: process.env.TOKEN_BURN_AMOUNT ?? process.env.AMOUNT ?? "1", + }, + artifacts, + timestamp: new Date().toISOString(), + } + + writeJson(artifacts.summaryPath, rampSummary) + console.log(JSON.stringify({ token_burn_ramp_summary: rampSummary }, null, 2)) +} + diff --git a/better_testing/loadgen/src/token_burn_smoke.ts b/better_testing/loadgen/src/token_burn_smoke.ts new file mode 100644 index 000000000..a8da173ad --- /dev/null +++ b/better_testing/loadgen/src/token_burn_smoke.ts @@ -0,0 +1,187 @@ +import { Demos } from "@kynesyslabs/demosdk/websdk" +import { + getTokenTargets, + maybeSilenceConsole, + nodeCall, + readWalletMnemonics, + ensureTokenAndBalances, + getWalletAddresses, + sendTokenBurnTxWithDemos, + waitForCrossNodeTokenConsistency, + waitForCrossNodeHolderPointersMatchBalances, + waitForRpcReady, + waitForTxReady, +} from "./token_shared" +import { getRunConfig, writeJson } from "./run_io" + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function envBool(name: string, fallback: boolean): boolean { + const raw = process.env[name] + if (!raw) return fallback + switch (raw.trim().toLowerCase()) { + case "1": + case "true": + case "yes": + case "y": + case "on": + return true + case "0": + case "false": + case "no": + case "n": + case "off": + return false + default: + return fallback + } +} + +function expectPresentFromBalance(balance: string | null): boolean { + try { + return BigInt(balance ?? "0") > 0n + } catch { + return false + } +} + +async function waitForTotalSupplyDecrease(params: { + rpcUrl: string + tokenAddress: string + before: bigint + delta: bigint + timeoutSec: number +}) { + const deadline = Date.now() + Math.max(1, params.timeoutSec) * 1000 + let attempt = 0 + while (Date.now() < deadline) { + const token = await nodeCall(params.rpcUrl, "token.get", { tokenAddress: params.tokenAddress }, `token.get:${attempt}`) + const totalRaw = token?.response?.state?.totalSupply + if (typeof totalRaw === "string") { + try { + const total = BigInt(totalRaw) + if (total <= params.before - params.delta) return total + } catch { + // ignore + } + } + attempt++ + await new Promise(r => setTimeout(r, Math.min(2000, 100 + attempt * 100))) + } + return null +} + +export async function runTokenBurnSmoke() { + maybeSilenceConsole() + const targets = getTokenTargets() + const rpcUrl = targets[0]! + const wallets = await readWalletMnemonics() + if (wallets.length < 1) throw new Error("token_burn_smoke requires at least 1 wallet") + + const addrs = await getWalletAddresses(rpcUrl, wallets.slice(0, 1)) + const burner = addrs[0]! + + const { tokenAddress } = await ensureTokenAndBalances(rpcUrl, wallets[0]!, addrs) + const amount = BigInt(process.env.TOKEN_BURN_AMOUNT ?? "1") + + const demos = new Demos() + await waitForRpcReady(rpcUrl, envInt("WAIT_FOR_RPC_SEC", 120)) + await waitForTxReady(rpcUrl, envInt("WAIT_FOR_TX_SEC", 120)) + await demos.connect(rpcUrl) + await demos.connectWallet(wallets[0]!, { algorithm: "ed25519" }) + + const beforeFrom = await nodeCall(rpcUrl, "token.getBalance", { tokenAddress, address: burner }, "beforeFrom") + const beforeToken = await nodeCall(rpcUrl, "token.get", { tokenAddress }, "beforeToken") + const beforeSupply = BigInt(beforeToken?.response?.state?.totalSupply ?? "0") + + const currentNonce = await demos.getAddressNonce(burner) + const nonce = Number(currentNonce) + 1 + + const { res } = await sendTokenBurnTxWithDemos({ + demos, + tokenAddress, + from: burner, + amount, + nonce, + }) + + const supplyReached = await waitForTotalSupplyDecrease({ + rpcUrl, + tokenAddress, + before: beforeSupply, + delta: amount, + timeoutSec: envInt("TOKEN_WAIT_APPLY_SEC", 30), + }) + + const afterFrom = await nodeCall(rpcUrl, "token.getBalance", { tokenAddress, address: burner }, "afterFrom") + const afterToken = await nodeCall(rpcUrl, "token.get", { tokenAddress }, "afterToken") + + const crossNodeCheck = envBool("CROSS_NODE_CHECK", true) + const crossNode = crossNodeCheck + ? await waitForCrossNodeTokenConsistency({ + rpcUrls: targets, + tokenAddress, + addresses: [burner], + timeoutSec: envInt("CROSS_NODE_TIMEOUT_SEC", 120), + pollMs: envInt("CROSS_NODE_POLL_MS", 500), + }) + : null + + const holderPointerCheck = envBool("HOLDER_POINTER_CHECK", true) + const expectedPresent = + crossNode?.ok && crossNode.perNode?.[0]?.snapshot?.balances + ? { + [burner]: expectPresentFromBalance(crossNode.perNode[0].snapshot.balances[burner] ?? null), + } + : { + [burner]: BigInt(afterFrom?.response?.balance ?? "0") > 0n, + } + + const holderPointers = holderPointerCheck + ? await waitForCrossNodeHolderPointersMatchBalances({ + rpcUrls: targets, + tokenAddress, + expectedPresent, + timeoutSec: envInt("HOLDER_POINTER_TIMEOUT_SEC", 120), + pollMs: envInt("HOLDER_POINTER_POLL_MS", 500), + }) + : null + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_burn_smoke` + const summary = { + runId: run.runId, + tokenAddress, + rpcUrl, + burner, + amount: amount.toString(), + burnResult: res ?? null, + balances: { + before: beforeFrom?.response?.balance ?? null, + after: afterFrom?.response?.balance ?? null, + }, + totalSupply: { + before: beforeToken?.response?.state?.totalSupply ?? null, + after: afterToken?.response?.state?.totalSupply ?? null, + reached: supplyReached?.toString?.() ?? null, + }, + crossNode, + holderPointers, + timestamp: new Date().toISOString(), + } + + writeJson(`${artifactBase}.summary.json`, summary) + console.log(JSON.stringify({ token_burn_smoke_summary: summary }, null, 2)) + + if (crossNodeCheck && crossNode && !crossNode.ok) { + throw new Error("Cross-node token consistency check failed (token_burn_smoke)") + } + if (holderPointerCheck && holderPointers && !holderPointers.ok) { + throw new Error("Holder-pointer check failed (token_burn_smoke)") + } +} diff --git a/better_testing/loadgen/src/token_consensus_consistency.ts b/better_testing/loadgen/src/token_consensus_consistency.ts new file mode 100644 index 000000000..eb6eb70ef --- /dev/null +++ b/better_testing/loadgen/src/token_consensus_consistency.ts @@ -0,0 +1,266 @@ +import { Demos } from "@kynesyslabs/demosdk/websdk" +import { + ensureTokenAndBalances, + getTokenTargets, + getWalletAddresses, + maybeSilenceConsole, + nodeCall, + readWalletMnemonics, + sendTokenBurnTxWithDemos, + sendTokenMintTxWithDemos, + sendTokenTransferTxWithDemos, + waitForCrossNodeTokenConsistency, + waitForRpcReady, + waitForTxReady, +} from "./token_shared" +import { getRunConfig, writeJson } from "./run_io" + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +type ConsensusWaitReport = { + ok: boolean + rounds: number + timeoutSec: number + pollMs: number + durationMs: number + startedAt: string + endedAt: string + start: Record + end: Record + perNodeOk: Record +} + +async function getLastBlockNumber(rpcUrl: string, muid: string): Promise { + const res = await nodeCall(rpcUrl, "getLastBlockNumber", {}, muid) + const n = res?.response + if (typeof n === "number" && Number.isFinite(n)) return n + if (typeof n === "string") { + const parsed = Number.parseInt(n, 10) + return Number.isFinite(parsed) ? parsed : null + } + return null +} + +async function waitForConsensusRounds(params: { + rpcUrls: string[] + rounds: number + timeoutSec: number + pollMs: number +}): Promise { + const startedAt = new Date() + const deadlineMs = Date.now() + Math.max(1, params.timeoutSec) * 1000 + const pollMs = Math.max(100, Math.floor(params.pollMs)) + + const start: Record = {} + for (const rpcUrl of params.rpcUrls) { + start[rpcUrl] = await getLastBlockNumber(rpcUrl, `getLastBlockNumber:start:${rpcUrl}`) + } + + const perNodeOk: Record = {} + const end: Record = {} + + while (Date.now() < deadlineMs) { + let allOk = true + for (const rpcUrl of params.rpcUrls) { + const current = await getLastBlockNumber(rpcUrl, `getLastBlockNumber:poll:${rpcUrl}`) + end[rpcUrl] = current + const base = start[rpcUrl] + const ok = typeof base === "number" && typeof current === "number" && current >= base + params.rounds + perNodeOk[rpcUrl] = ok + if (!ok) allOk = false + } + + if (allOk) { + const endedAt = new Date() + return { + ok: true, + rounds: params.rounds, + timeoutSec: params.timeoutSec, + pollMs, + durationMs: endedAt.getTime() - startedAt.getTime(), + startedAt: startedAt.toISOString(), + endedAt: endedAt.toISOString(), + start, + end, + perNodeOk, + } + } + + await sleep(pollMs) + } + + const endedAt = new Date() + for (const rpcUrl of params.rpcUrls) { + if (rpcUrl in end) continue + end[rpcUrl] = await getLastBlockNumber(rpcUrl, `getLastBlockNumber:end:${rpcUrl}`) + const base = start[rpcUrl] + const current = end[rpcUrl] + perNodeOk[rpcUrl] = typeof base === "number" && typeof current === "number" && current >= base + params.rounds + } + + return { + ok: false, + rounds: params.rounds, + timeoutSec: params.timeoutSec, + pollMs, + durationMs: endedAt.getTime() - startedAt.getTime(), + startedAt: startedAt.toISOString(), + endedAt: endedAt.toISOString(), + start, + end, + perNodeOk, + } +} + +function parseBigintOrZero(value: any): bigint { + try { + if (typeof value === "bigint") return value + if (typeof value === "number" && Number.isFinite(value)) return BigInt(value) + if (typeof value === "string") return BigInt(value) + } catch { + // ignore + } + return 0n +} + +export async function runTokenConsensusConsistency() { + maybeSilenceConsole() + const targets = getTokenTargets() + const rpcUrl = targets[0]! + const wallets = await readWalletMnemonics() + if (wallets.length < 2) throw new Error("token_consensus_consistency requires at least 2 wallets") + + await waitForRpcReady(rpcUrl, envInt("WAIT_FOR_RPC_SEC", 120)) + await waitForTxReady(rpcUrl, envInt("WAIT_FOR_TX_SEC", 120)) + + const walletAddresses = await getWalletAddresses(rpcUrl, wallets.slice(0, 2)) + const owner = walletAddresses[0]! + const other = walletAddresses[1]! + + const { tokenAddress } = await ensureTokenAndBalances(rpcUrl, wallets[0]!, walletAddresses) + + const baselineToken = await nodeCall(rpcUrl, "token.get", { tokenAddress }, "baseline:token.get") + const baselineSupply = parseBigintOrZero(baselineToken?.response?.state?.totalSupply) + const baselineOwnerBal = parseBigintOrZero((await nodeCall(rpcUrl, "token.getBalance", { tokenAddress, address: owner }, "baseline:ownerBal"))?.response?.balance) + const baselineOtherBal = parseBigintOrZero((await nodeCall(rpcUrl, "token.getBalance", { tokenAddress, address: other }, "baseline:otherBal"))?.response?.balance) + + const transferAmount = parseBigintOrZero(process.env.TOKEN_TRANSFER_AMOUNT ?? "1") + const mintAmount = parseBigintOrZero(process.env.TOKEN_MINT_AMOUNT ?? "1") + const burnAmount = parseBigintOrZero(process.env.TOKEN_BURN_AMOUNT ?? "1") + + const demos = new Demos() + await demos.connect(rpcUrl) + await demos.connectWallet(wallets[0]!, { algorithm: "ed25519" }) + + const currentNonce = await demos.getAddressNonce(owner) + let nextNonce = Number(currentNonce) + 1 + + const transferRes = await sendTokenTransferTxWithDemos({ + demos, + tokenAddress, + to: other, + amount: transferAmount, + nonce: nextNonce++, + }) + + const mintRes = await sendTokenMintTxWithDemos({ + demos, + tokenAddress, + to: other, + amount: mintAmount, + nonce: nextNonce++, + }) + + const burnRes = await sendTokenBurnTxWithDemos({ + demos, + tokenAddress, + from: owner, + amount: burnAmount, + nonce: nextNonce++, + }) + + const consensusRounds = envInt("CONSENSUS_ROUNDS", 1) + const consensusWait = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: consensusRounds, + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 120), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + + const crossNode = await waitForCrossNodeTokenConsistency({ + rpcUrls: targets, + tokenAddress, + addresses: [owner, other], + timeoutSec: envInt("CROSS_NODE_TIMEOUT_SEC", 180), + pollMs: envInt("CROSS_NODE_POLL_MS", 500), + }) + + const expected = { + totalSupply: (baselineSupply + mintAmount - burnAmount).toString(), + balances: { + [owner]: (baselineOwnerBal - transferAmount - burnAmount).toString(), + [other]: (baselineOtherBal + transferAmount + mintAmount).toString(), + }, + } + + const observed = crossNode?.perNode?.[0]?.snapshot + ? { + totalSupply: crossNode.perNode[0].snapshot.state.totalSupply, + balances: crossNode.perNode[0].snapshot.balances, + } + : null + + const expectedOk = + !!observed && + observed.totalSupply === expected.totalSupply && + observed.balances?.[owner]?.toString?.() === expected.balances[owner] && + observed.balances?.[other]?.toString?.() === expected.balances[other] + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_consensus_consistency` + const summary = { + runId: run.runId, + scenario: "token_consensus_consistency", + tokenAddress, + rpcUrls: targets, + addresses: { owner, other }, + baseline: { + totalSupply: baselineSupply.toString(), + balances: { [owner]: baselineOwnerBal.toString(), [other]: baselineOtherBal.toString() }, + }, + actions: { + transfer: { amount: transferAmount.toString(), res: transferRes?.res ?? null }, + mint: { amount: mintAmount.toString(), res: mintRes?.res ?? null }, + burn: { amount: burnAmount.toString(), res: burnRes?.res ?? null }, + }, + consensusWait, + crossNode, + expected, + observed, + expectedOk, + timestamp: new Date().toISOString(), + } + + writeJson(`${artifactBase}.summary.json`, summary) + console.log(JSON.stringify({ token_consensus_consistency_summary: summary }, null, 2)) + + if (!consensusWait.ok) { + throw new Error("Consensus wait did not reach required rounds on all nodes") + } + if (!crossNode.ok) { + throw new Error("Cross-node token consistency check failed (token_consensus_consistency)") + } + if (!expectedOk) { + throw new Error("Observed token snapshot does not match expected deltas (token_consensus_consistency)") + } +} + diff --git a/better_testing/loadgen/src/token_edge_cases.ts b/better_testing/loadgen/src/token_edge_cases.ts new file mode 100644 index 000000000..3c4205298 --- /dev/null +++ b/better_testing/loadgen/src/token_edge_cases.ts @@ -0,0 +1,272 @@ +import { + ensureTokenAndBalances, + getTokenTargets, + getWalletAddresses, + maybeSilenceConsole, + nodeCall, + readWalletMnemonics, + sendTokenBurnTxWithDemos, + sendTokenMintTxWithDemos, + sendTokenTransferTxWithDemos, + withDemosWallet, +} from "./token_shared" +import { getRunConfig, writeJson } from "./run_io" + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function assertRejected(res: any, expectedMessageSubstring: string) { + if (res?.result === 200) { + throw new Error(`Expected rejection but got result=200: ${JSON.stringify(res)}`) + } + + const pieces: string[] = [] + if (typeof res?.extra?.error === "string") pieces.push(res.extra.error) + if (typeof res?.response === "string") pieces.push(res.response) + if (res?.response === false) pieces.push("false") + if (typeof res?.message === "string") pieces.push(res.message) + const haystack = pieces.join(" ").toLowerCase() + + if (!haystack.includes(expectedMessageSubstring.toLowerCase())) { + throw new Error(`Expected error to include "${expectedMessageSubstring}" but got: ${JSON.stringify(res)}`) + } +} + +async function fetchSnapshot(rpcUrl: string, tokenAddress: string, addresses: string[]) { + const tokenRes = await nodeCall(rpcUrl, "token.get", { tokenAddress }, "snapshot:token.get") + if (tokenRes?.result !== 200) return { ok: false, error: tokenRes, snapshot: null as any } + + const balances: Record = {} + for (const a of addresses) { + const balRes = await nodeCall(rpcUrl, "token.getBalance", { tokenAddress, address: a }, `snapshot:bal:${a}`) + balances[a] = balRes?.result === 200 ? (balRes?.response?.balance ?? null) : null + } + + return { + ok: true, + error: null, + snapshot: { + totalSupply: tokenRes?.response?.state?.totalSupply ?? null, + balances, + }, + } +} + +function snapshotsEqual(a: any, b: any): boolean { + return JSON.stringify(a) === JSON.stringify(b) +} + +async function waitForBlockAdvance(params: { rpcUrl: string; before: number; timeoutSec: number }) { + const deadline = Date.now() + Math.max(1, params.timeoutSec) * 1000 + let attempt = 0 + while (Date.now() < deadline) { + const res = await nodeCall(params.rpcUrl, "getLastBlockNumber", {}, `edge:lastBlock:${attempt}`) + const raw = res?.response + const parsed = typeof raw === "string" ? Number.parseInt(raw, 10) : typeof raw === "number" ? raw : NaN + if (Number.isFinite(parsed) && parsed > params.before) return parsed + attempt++ + await new Promise(r => setTimeout(r, Math.min(2000, 100 + attempt * 100))) + } + return null +} + +export async function runTokenEdgeCases() { + maybeSilenceConsole() + const targets = getTokenTargets() + const rpcUrl = targets[0]! + + const wallets = await readWalletMnemonics() + if (wallets.length < 2) throw new Error("token_edge_cases requires at least 2 wallets") + + const walletAddresses = await getWalletAddresses(rpcUrl, wallets.slice(0, 2)) + const ownerMnemonic = wallets[0]! + const attackerMnemonic = wallets[1]! + + const owner = walletAddresses[0]! + const attacker = walletAddresses[1]! + + const { tokenAddress } = await ensureTokenAndBalances(rpcUrl, ownerMnemonic, [owner, attacker]) + + const before = await fetchSnapshot(rpcUrl, tokenAddress, [owner, attacker]) + if (!before.ok) throw new Error(`Failed to fetch token snapshot before edge cases: ${JSON.stringify(before.error)}`) + + const cases: Array<{ name: string; expected: string; res: any }> = [] + + // transfer amount 0 + { + const res = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + const nonce = Number(await demos.getAddressNonce(fromHex)) + 1 + return (await sendTokenTransferTxWithDemos({ demos, tokenAddress, to: attacker, amount: 0n, nonce })).res + }, + }) + assertRejected(res, "Transfer amount must be positive") + cases.push({ name: "transfer_amount_0", expected: "Transfer amount must be positive", res }) + } + + // mint amount 0 (even owner should be rejected) + { + const res = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + const nonce = Number(await demos.getAddressNonce(fromHex)) + 1 + return (await sendTokenMintTxWithDemos({ demos, tokenAddress, to: owner, amount: 0n, nonce })).res + }, + }) + assertRejected(res, "Mint amount must be positive") + cases.push({ name: "mint_amount_0", expected: "Mint amount must be positive", res }) + } + + // burn amount 0 (self burn) + { + const res = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + const nonce = Number(await demos.getAddressNonce(fromHex)) + 1 + return (await sendTokenBurnTxWithDemos({ demos, tokenAddress, from: owner, amount: 0n, nonce })).res + }, + }) + assertRejected(res, "Burn amount must be positive") + cases.push({ name: "burn_amount_0", expected: "Burn amount must be positive", res }) + } + + // transfer > balance (attacker) + { + const balRes = await nodeCall(rpcUrl, "token.getBalance", { tokenAddress, address: attacker }, "edge:bal") + const bal = BigInt(balRes?.response?.balance ?? "0") + const tooMuch = bal + 1n + + const res = await withDemosWallet({ + rpcUrl, + mnemonic: attackerMnemonic, + fn: async (demos, fromHex) => { + const nonce = Number(await demos.getAddressNonce(fromHex)) + 1 + return (await sendTokenTransferTxWithDemos({ demos, tokenAddress, to: owner, amount: tooMuch, nonce })).res + }, + }) + assertRejected(res, "Insufficient balance") + cases.push({ name: "transfer_insufficient_balance", expected: "Insufficient balance", res }) + } + + // burn > balance (attacker self-burn) + { + const balRes = await nodeCall(rpcUrl, "token.getBalance", { tokenAddress, address: attacker }, "edge:bal2") + const bal = BigInt(balRes?.response?.balance ?? "0") + const tooMuch = bal + 1n + + const res = await withDemosWallet({ + rpcUrl, + mnemonic: attackerMnemonic, + fn: async (demos, fromHex) => { + const nonce = Number(await demos.getAddressNonce(fromHex)) + 1 + return (await sendTokenBurnTxWithDemos({ demos, tokenAddress, from: attacker, amount: tooMuch, nonce })).res + }, + }) + assertRejected(res, "Insufficient balance to burn") + cases.push({ name: "burn_insufficient_balance", expected: "Insufficient balance to burn", res }) + } + + // burn from someone else without canBurn permission + { + const res = await withDemosWallet({ + rpcUrl, + mnemonic: attackerMnemonic, + fn: async (demos, fromHex) => { + const nonce = Number(await demos.getAddressNonce(fromHex)) + 1 + return (await sendTokenBurnTxWithDemos({ demos, tokenAddress, from: owner, amount: 1n, nonce })).res + }, + }) + assertRejected(res, "No burn permission") + cases.push({ name: "burn_other_no_permission", expected: "No burn permission", res }) + } + + // mint without canMint permission + { + const res = await withDemosWallet({ + rpcUrl, + mnemonic: attackerMnemonic, + fn: async (demos, fromHex) => { + const nonce = Number(await demos.getAddressNonce(fromHex)) + 1 + return (await sendTokenMintTxWithDemos({ demos, tokenAddress, to: attacker, amount: 1n, nonce })).res + }, + }) + assertRejected(res, "No mint permission") + cases.push({ name: "mint_no_permission", expected: "No mint permission", res }) + } + + // self-transfer should not mint or otherwise mutate token state + { + const lastBlockRes = await nodeCall(rpcUrl, "getLastBlockNumber", {}, "edge:lastBlock:beforeSelfTransfer") + const lastBlockRaw = lastBlockRes?.response + const lastBlockBefore = + typeof lastBlockRaw === "string" ? Number.parseInt(lastBlockRaw, 10) : typeof lastBlockRaw === "number" ? lastBlockRaw : 0 + + const amount = BigInt(process.env.SELF_TRANSFER_AMOUNT ?? "1") + const res = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + const nonce = Number(await demos.getAddressNonce(fromHex)) + 1 + return (await sendTokenTransferTxWithDemos({ demos, tokenAddress, to: owner, amount, nonce })).res + }, + }) + + const appliedBlock = + res?.result === 200 + ? await waitForBlockAdvance({ rpcUrl, before: Number.isFinite(lastBlockBefore) ? lastBlockBefore : 0, timeoutSec: envInt("WAIT_FOR_TX_SEC", 120) }) + : null + + cases.push({ + name: "self_transfer_noop", + expected: "no token state mutation (totalSupply + balances unchanged)", + res: { ...res, appliedBlock: appliedBlock ?? null }, + }) + } + + // non-existent token address read (expects non-200) + const missingTokenAddress = + process.env.MISSING_TOKEN_ADDRESS ?? + "0x0000000000000000000000000000000000000000000000000000000000000000" + const missingGet = await nodeCall(rpcUrl, "token.get", { tokenAddress: missingTokenAddress }, "edge:missing:get") + + const after = await fetchSnapshot(rpcUrl, tokenAddress, [owner, attacker]) + if (!after.ok) throw new Error(`Failed to fetch token snapshot after edge cases: ${JSON.stringify(after.error)}`) + + const stateUnchanged = snapshotsEqual(before.snapshot, after.snapshot) + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_edge_cases` + const summary = { + runId: run.runId, + scenario: "token_edge_cases", + rpcUrl, + tokenAddress, + owner, + attacker, + missingTokenAddress, + missingGet, + before: before.snapshot, + after: after.snapshot, + cases, + stateUnchanged, + waitForRpcSec: envInt("WAIT_FOR_RPC_SEC", 120), + waitForTxSec: envInt("WAIT_FOR_TX_SEC", 120), + timestamp: new Date().toISOString(), + ok: stateUnchanged, + } + + writeJson(`${artifactBase}.summary.json`, summary) + console.log(JSON.stringify({ token_edge_cases_summary: summary }, null, 2)) + + if (!stateUnchanged) { + throw new Error("Edge cases mutated token state unexpectedly") + } +} diff --git a/better_testing/loadgen/src/token_holders_export.ts b/better_testing/loadgen/src/token_holders_export.ts new file mode 100644 index 000000000..5d9d47d27 --- /dev/null +++ b/better_testing/loadgen/src/token_holders_export.ts @@ -0,0 +1,228 @@ +import { getRunConfig, writeJson } from "./run_io" +import { + ensureTokenAndBalances, + getTokenTargets, + getWalletAddresses, + maybeSilenceConsole, + nodeCall, + readWalletMnemonics, +} from "./token_shared" + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function envBool(name: string, fallback: boolean): boolean { + const raw = process.env[name] + if (!raw) return fallback + switch (raw.trim().toLowerCase()) { + case "1": + case "true": + case "yes": + case "y": + case "on": + return true + case "0": + case "false": + case "no": + case "n": + case "off": + return false + default: + return fallback + } +} + +function normalizeRpcUrl(url: string): string { + return url.replace(/\/+$/, "") + "/" +} + +function normalizeHexAddress(address: string): string { + const trimmed = (address ?? "").trim() + if (!trimmed) return trimmed + return trimmed.startsWith("0x") ? trimmed.toLowerCase() : ("0x" + trimmed).toLowerCase() +} + +function stableSortedUnique(values: string[]): string[] { + const seen = new Set() + const out: string[] = [] + for (const v of values) { + const key = normalizeHexAddress(v) + if (!key) continue + if (seen.has(key)) continue + seen.add(key) + out.push(key) + } + out.sort() + return out +} + +function parseBigintOrZero(value: any): bigint { + try { + if (typeof value === "bigint") return value + if (typeof value === "number" && Number.isFinite(value)) return BigInt(value) + if (typeof value === "string") return BigInt(value) + } catch { + // ignore + } + return 0n +} + +function sumBalances(balances: Record, includeZero: boolean): bigint { + let sum = 0n + for (const [addr, raw] of Object.entries(balances ?? {})) { + const a = normalizeHexAddress(addr) + if (!a) continue + const bal = parseBigintOrZero(raw) + if (!includeZero && bal === 0n) continue + sum += bal + } + return sum +} + +async function fetchTokenWithRetry(params: { + rpcUrl: string + tokenAddress: string + timeoutSec: number + pollMs: number +}) { + const deadlineMs = Date.now() + Math.max(1, params.timeoutSec) * 1000 + let attempt = 0 + let last: any = null + while (Date.now() < deadlineMs) { + // Committed preferred, but allow live fallback if committed is unavailable/in-flux. + const committed = await nodeCall( + params.rpcUrl, + "token.getCommitted", + { tokenAddress: params.tokenAddress }, + `token.getCommitted:holders:${attempt}`, + ) + last = committed + if (committed?.result === 200) return { ok: true, mode: "committed", raw: committed } + const inFlux = committed?.result === 409 && committed?.response?.error === "STATE_IN_FLUX" + if (inFlux) { + const live = await nodeCall( + params.rpcUrl, + "token.get", + { tokenAddress: params.tokenAddress }, + `token.get:holdersLive:${attempt}`, + ) + last = live + if (live?.result === 200) return { ok: true, mode: "live", raw: live } + } + attempt++ + await sleep(Math.max(100, Math.floor(params.pollMs))) + } + return { ok: false, mode: "unknown", raw: last } +} + +export async function runTokenHoldersExport() { + maybeSilenceConsole() + + const targets = getTokenTargets().map(normalizeRpcUrl) + const wallets = await readWalletMnemonics() + if (wallets.length < 2) throw new Error("token_holders_export requires at least 2 wallets") + + const ownerMnemonic = wallets[0]! + const ownerRpc = targets[0]! + const walletAddresses = (await getWalletAddresses(ownerRpc, wallets)).map(normalizeHexAddress) + + const { tokenAddress } = await ensureTokenAndBalances(ownerRpc, ownerMnemonic, walletAddresses) + + const includeZero = envBool("INCLUDE_ZERO_BALANCES", false) + const fetchTimeoutSec = envInt("HOLDERS_FETCH_TIMEOUT_SEC", 120) + const fetchPollMs = envInt("HOLDERS_FETCH_POLL_MS", 500) + + const perNode: Array<{ + rpcUrl: string + ok: boolean + readMode: "committed" | "live" | "unknown" + holderCount: number | null + holders: string[] + totalSupply: string | null + sumBalances: string | null + error: any + }> = [] + + for (const rpcUrl of targets) { + const res = await fetchTokenWithRetry({ + rpcUrl, + tokenAddress, + timeoutSec: fetchTimeoutSec, + pollMs: fetchPollMs, + }) + + if (!res.ok) { + perNode.push({ + rpcUrl, + ok: false, + readMode: "unknown", + holderCount: null, + holders: [], + totalSupply: null, + sumBalances: null, + error: res.raw, + }) + continue + } + + const token = res.raw?.response + const balances = token?.state?.balances ?? {} + const holders = stableSortedUnique(Object.keys(balances)) + const supply = parseBigintOrZero(token?.state?.totalSupply) + const sum = sumBalances(balances, includeZero) + + perNode.push({ + rpcUrl, + ok: true, + readMode: res.mode as any, + holderCount: holders.length, + holders, + totalSupply: supply.toString(), + sumBalances: sum.toString(), + error: null, + }) + } + + const okNodes = perNode.filter(n => n.ok) + const base = okNodes.length > 0 ? okNodes[0]!.holders.join(",") : "" + const holderSetsEqual = okNodes.length === perNode.length && okNodes.every(n => n.holders.join(",") === base) + const supplyInvariantOk = + okNodes.length === perNode.length && + okNodes.every(n => typeof n.totalSupply === "string" && typeof n.sumBalances === "string" && n.totalSupply === n.sumBalances) + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_holders_export` + const summary = { + runId: run.runId, + scenario: "token_holders_export", + tokenAddress, + rpcUrls: targets, + includeZeroBalances: includeZero, + notes: + "Holder enumeration is derived from token.getCommitted/state.balances (fallback token.get). If the implementation prunes 0-balance entries or omits some holders, this list is explicitly bounded to whatever balances are present.", + perNode, + assertions: { + holderSetsEqual, + supplyInvariantOk, + }, + ok: holderSetsEqual && supplyInvariantOk, + timestamp: new Date().toISOString(), + } + + writeJson(`${artifactBase}.summary.json`, summary) + writeJson(`${artifactBase}.holders.json`, { tokenAddress, holders: okNodes.length > 0 ? okNodes[0]!.holders : [] }) + console.log(JSON.stringify({ token_holders_export_summary: summary }, null, 2)) + + if (!summary.ok) { + throw new Error(`token_holders_export failed (see summary): ${artifactBase}.summary.json`) + } +} + diff --git a/better_testing/loadgen/src/token_invariants_known_holders.ts b/better_testing/loadgen/src/token_invariants_known_holders.ts new file mode 100644 index 000000000..1b3691495 --- /dev/null +++ b/better_testing/loadgen/src/token_invariants_known_holders.ts @@ -0,0 +1,310 @@ +import { createHash } from "crypto" +import { getRunConfig, writeJson } from "./run_io" +import { + ensureTokenAndBalances, + getTokenTargets, + getWalletAddresses, + maybeSilenceConsole, + readWalletMnemonics, + waitForRpcReady, + waitForTxReady, +} from "./token_shared" + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function envBool(name: string, fallback: boolean): boolean { + const raw = process.env[name] + if (!raw) return fallback + switch (raw.trim().toLowerCase()) { + case "1": + case "true": + case "yes": + case "y": + case "on": + return true + case "0": + case "false": + case "no": + case "n": + case "off": + return false + default: + return fallback + } +} + +function splitCsv(value: string | undefined): string[] { + return (value ?? "") + .split(",") + .map(s => s.trim()) + .filter(Boolean) +} + +function normalizeHexAddress(address: string): string { + const trimmed = (address ?? "").trim() + if (!trimmed) return trimmed + return trimmed.startsWith("0x") ? trimmed.toLowerCase() : ("0x" + trimmed).toLowerCase() +} + +function normalizeRpcUrl(url: string): string { + return url.replace(/\/+$/, "") + "/" +} + +function sortObjectDeep(value: any): any { + if (Array.isArray(value)) return value.map(sortObjectDeep) + if (!value || typeof value !== "object") return value + const out: Record = {} + for (const key of Object.keys(value).sort()) out[key] = sortObjectDeep((value as any)[key]) + return out +} + +function stableJson(value: any): string { + return JSON.stringify(sortObjectDeep(value)) +} + +function sha256Hex(input: string): string { + return createHash("sha256").update(input).digest("hex") +} + +async function rpcPost(rpcUrl: string, body: unknown): Promise { + const url = normalizeRpcUrl(rpcUrl) + const timeoutMs = envInt("NODECALL_FETCH_TIMEOUT_MS", 8000) + const controller = timeoutMs > 0 ? new AbortController() : null + const timer = controller ? setTimeout(() => controller.abort(), timeoutMs) : null + try { + const res = await fetch(url, { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify(body), + ...(controller ? { signal: controller.signal } : {}), + }) + const json = await res.json().catch(() => null) + return json + } finally { + if (timer) clearTimeout(timer) + } +} + +async function nodeCallExact(rpcUrl: string, message: string, data: any, muid: string): Promise { + return await rpcPost(rpcUrl, { method: "nodeCall", params: [{ message, data, muid }] }) +} + +async function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +type PerNodeInvariant = { + rpcUrl: string + ok: boolean + inFlux: boolean + tokenGet?: any + details?: { + totalSupply?: string | null + sumBalances?: string | null + stateHash?: string | null + unknownHolders?: string[] + } + error?: string | null +} + +function safeBigInt(value: any): bigint | null { + if (typeof value !== "string") return null + try { + return BigInt(value) + } catch { + return null + } +} + +function computeBalanceSum(balances: Record): { sum: bigint; invalid: string[] } { + let sum = 0n + const invalid: string[] = [] + for (const [addr, raw] of Object.entries(balances ?? {})) { + const b = safeBigInt(raw) + if (b === null || b < 0n) { + invalid.push(addr) + continue + } + sum += b + } + return { sum, invalid } +} + +export async function runTokenInvariantsKnownHolders() { + maybeSilenceConsole() + + const targets = getTokenTargets().map(normalizeRpcUrl) + if (targets.length === 0) throw new Error("No TARGETS configured") + + const readMode = (process.env.READ_MODE ?? "live").trim().toLowerCase() + const fallbackOnInFlux = envBool("FALLBACK_TO_LIVE_ON_IN_FLUX", true) + const getMsgPrimary = readMode === "committed" ? "token.getCommitted" : "token.get" + const balMsgPrimary = readMode === "committed" ? "token.getBalanceCommitted" : "token.getBalance" + + const bootstrapRpc = targets[0]! + await waitForRpcReady(bootstrapRpc, envInt("WAIT_FOR_RPC_SEC", 120)) + await waitForTxReady(bootstrapRpc, envInt("WAIT_FOR_TX_SEC", 120)) + + const wallets = await readWalletMnemonics() + if (wallets.length === 0) throw new Error("No wallets configured (WALLETS or devnet/identities/*)") + + const walletCount = Math.max(2, envInt("INVARIANT_WALLETS", 4)) + const walletAddresses = await getWalletAddresses(bootstrapRpc, wallets.slice(0, walletCount)) + + const deployerMnemonic = wallets[0]! + const bootstrap = await ensureTokenAndBalances(bootstrapRpc, deployerMnemonic, walletAddresses) + const tokenAddress = normalizeHexAddress(bootstrap.tokenAddress) + + const knownOnly = envBool("KNOWN_ONLY", true) + const extraKnown = splitCsv(process.env.ADDRESSES).map(normalizeHexAddress).filter(Boolean) + const knownHolders = Array.from(new Set([...walletAddresses.map(normalizeHexAddress), ...extraKnown])) + const knownSet = new Set(knownHolders) + + const timeoutSec = envInt("INVARIANT_TIMEOUT_SEC", 480) + const pollMs = Math.max(100, envInt("INVARIANT_POLL_MS", 1000)) + const deadlineMs = Date.now() + Math.max(1, timeoutSec) * 1000 + + const perNode: PerNodeInvariant[] = [] + let ok = false + let attempts = 0 + + while (Date.now() < deadlineMs) { + attempts++ + perNode.length = 0 + + for (const rpcUrlRaw of targets) { + const rpcUrl = normalizeRpcUrl(rpcUrlRaw) + let res = await nodeCallExact( + rpcUrl, + getMsgPrimary, + { tokenAddress }, + `${getMsgPrimary}:invariants:${attempts}:${rpcUrl}`, + ) + + if (res?.result === 409 && readMode === "committed" && fallbackOnInFlux) { + res = await nodeCallExact( + rpcUrl, + "token.get", + { tokenAddress }, + `token.get:fallback:invariants:${attempts}:${rpcUrl}`, + ) + } + + if (res?.result === 409) { + perNode.push({ rpcUrl, ok: false, inFlux: true, tokenGet: res, error: "STATE_IN_FLUX" }) + continue + } + + if (res?.result !== 200) { + perNode.push({ rpcUrl, ok: false, inFlux: false, tokenGet: res, error: `token.getCommitted result=${res?.result}` }) + continue + } + + const state = res?.response?.state ?? {} + const totalSupplyRaw = state?.totalSupply ?? null + const totalSupply = safeBigInt(totalSupplyRaw) + const balances = (state?.balances ?? {}) as Record + const allowances = (state?.allowances ?? {}) as Record + const customState = state?.customState ?? null + + const { sum, invalid } = computeBalanceSum(balances) + const unknownHolders = knownOnly + ? Object.keys(balances).map(normalizeHexAddress).filter(a => a && !knownSet.has(a)) + : [] + + const stateForHash = { + tokenAddress, + totalSupply: typeof totalSupplyRaw === "string" ? totalSupplyRaw : null, + balances, + allowances, + customState, + } + + const stateHash = sha256Hex(stableJson(stateForHash)) + + const supplyOk = totalSupply !== null && totalSupply === sum + const balancesOk = invalid.length === 0 + const knownOk = !knownOnly || unknownHolders.length === 0 + + perNode.push({ + rpcUrl, + ok: supplyOk && balancesOk && knownOk, + inFlux: false, + tokenGet: res, + details: { + totalSupply: typeof totalSupplyRaw === "string" ? totalSupplyRaw : null, + sumBalances: sum.toString(), + stateHash, + unknownHolders, + }, + error: supplyOk && balancesOk && knownOk + ? null + : [ + !supplyOk ? "SUPPLY_MISMATCH" : null, + !balancesOk ? `INVALID_BALANCES(${invalid.length})` : null, + !knownOk ? `UNKNOWN_HOLDERS(${unknownHolders.length})` : null, + ].filter(Boolean).join("; "), + }) + } + + const allOk = perNode.length === targets.length && perNode.every(n => n.ok) + const allStateHashesEqual = (() => { + const hashes = perNode.map(n => n.details?.stateHash).filter(Boolean) as string[] + if (hashes.length !== perNode.length) return false + return hashes.every(h => h === hashes[0]) + })() + + if (allOk && allStateHashesEqual) { + ok = true + break + } + + await sleep(pollMs) + } + + const run = getRunConfig() + const artifacts = { + runId: run.runId, + runDir: run.runDir, + summaryPath: `${run.runDir}/token_invariants_known_holders.summary.json`, + } + + const summary = { + runId: run.runId, + scenario: "token_invariants_known_holders", + ok, + tokenAddress, + rpcUrls: targets, + readMode, + fallbackOnInFlux, + knownOnly, + knownHolders, + config: { + invariantWallets: walletCount, + timeoutSec, + pollMs, + }, + attempts, + perNode: perNode.map(n => ({ + rpcUrl: n.rpcUrl, + ok: n.ok, + inFlux: n.inFlux, + details: n.details ?? null, + error: n.error ?? null, + })), + artifacts, + timestamp: new Date().toISOString(), + } + + writeJson(artifacts.summaryPath, summary) + console.log(JSON.stringify({ token_invariants_known_holders_summary: summary }, null, 2)) + + if (!ok) { + throw new Error("Invariant check failed (see summary artifacts)") + } +} diff --git a/better_testing/loadgen/src/token_mint_loadgen.ts b/better_testing/loadgen/src/token_mint_loadgen.ts new file mode 100644 index 000000000..cc85d56f6 --- /dev/null +++ b/better_testing/loadgen/src/token_mint_loadgen.ts @@ -0,0 +1,420 @@ +import { Demos } from "@kynesyslabs/demosdk/websdk" +import { uint8ArrayToHex } from "@kynesyslabs/demosdk/encryption" +import { appendJsonl, getRunConfig, writeJson } from "./run_io" +import { + ensureTokenAndBalances, + getTokenTargets, + getWalletAddresses, + maybeSilenceConsole, + pickRecipient, + readWalletMnemonics, + sendTokenMintTxWithDemos, + waitForCrossNodeHolderPointersMatchBalances, + waitForCrossNodeTokenConsistency, + waitForRpcReady, + waitForTxReady, +} from "./token_shared" + +type LoadgenConfig = { + targets: string[] + durationSec: number + concurrency: number + amount: bigint + sampleLimit: number + inflightPerWallet: number + avoidSelfRecipient: boolean + emitTimeseries: boolean +} + +type Counters = { + startedAtMs: number + endedAtMs: number + total: number + ok: number + error: number + errorSamples: Record +} + +type TimeseriesPoint = { + tSec: number + ok: number + total: number + error: number + tpsOk: number + latencyMs: { sampleCount: number; p50: number; p95: number; p99: number } + timestamp: string +} + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function envBool(name: string, fallback: boolean): boolean { + const raw = process.env[name] + if (!raw) return fallback + switch (raw.trim().toLowerCase()) { + case "1": + case "true": + case "yes": + case "y": + case "on": + return true + case "0": + case "false": + case "no": + case "n": + case "off": + return false + default: + return fallback + } +} + +function splitCsv(value: string | undefined): string[] { + return (value ?? "") + .split(",") + .map(s => s.trim()) + .filter(Boolean) +} + +function nowMs(): number { + return Date.now() +} + +function unique(values: string[]): string[] { + return Array.from(new Set(values)) +} + +function percentile(sorted: number[], p: number): number { + if (sorted.length === 0) return NaN + const idx = Math.min( + sorted.length - 1, + Math.max(0, Math.floor((p / 100) * (sorted.length - 1))), + ) + return sorted[idx]! +} + +class ReservoirSampler { + private seen = 0 + private readonly max: number + private readonly samples: number[] = [] + + constructor(maxSamples: number) { + this.max = Math.max(1, Math.floor(maxSamples)) + } + + add(value: number) { + this.seen++ + if (this.samples.length < this.max) { + this.samples.push(value) + return + } + const j = Math.floor(Math.random() * this.seen) + if (j < this.max) this.samples[j] = value + } + + snapshotSorted(): number[] { + const copy = this.samples.slice() + copy.sort((a, b) => a - b) + return copy + } + + size(): number { + return this.samples.length + } +} + +function getConfig(): LoadgenConfig { + const targets = getTokenTargets() + return { + targets, + durationSec: envInt("DURATION_SEC", 30), + concurrency: envInt("CONCURRENCY", Math.max(1, targets.length)), + amount: BigInt(process.env.TOKEN_MINT_AMOUNT ?? process.env.AMOUNT ?? "1"), + sampleLimit: envInt("SAMPLE_LIMIT", 200_000), + inflightPerWallet: Math.max(1, envInt("INFLIGHT_PER_WALLET", 1)), + avoidSelfRecipient: envBool("AVOID_SELF_RECIPIENT", true), + emitTimeseries: envBool("EMIT_TIMESERIES", true), + } +} + +async function worker(params: { + cfg: LoadgenConfig + counters: Counters + sampler: ReservoirSampler + timeseriesSampler: ReservoirSampler + stopAtMs: number + ownerMnemonic: string + workerId: number + tokenAddress: string + recipientAddresses: string[] + allocateNonce: () => number +}) { + const { cfg } = params + const rpcUrl = cfg.targets[params.workerId % cfg.targets.length]! + const demos = new Demos() + await waitForRpcReady(rpcUrl, envInt("WAIT_FOR_RPC_SEC", 120)) + await waitForTxReady(rpcUrl, envInt("WAIT_FOR_TX_SEC", 120)) + await demos.connect(rpcUrl) + await demos.connectWallet(params.ownerMnemonic, { algorithm: "ed25519" }) + + const sender = (await demos.crypto.getIdentity("ed25519")).publicKey + const senderHex = uint8ArrayToHex(sender) + const to = pickRecipient(params.recipientAddresses, senderHex, params.workerId, cfg.avoidSelfRecipient) + + async function sendOne() { + const start = performance.now() + params.counters.total++ + try { + const nonce = params.allocateNonce() + const { res } = await sendTokenMintTxWithDemos({ + demos, + tokenAddress: params.tokenAddress, + to, + amount: cfg.amount, + nonce, + }) + if (res?.result !== 200) { + throw new Error(`tx rejected: ${JSON.stringify(res)}`) + } + const elapsed = performance.now() - start + params.sampler.add(elapsed) + params.timeseriesSampler.add(elapsed) + params.counters.ok++ + } catch (err: any) { + const elapsed = performance.now() - start + params.sampler.add(elapsed) + params.timeseriesSampler.add(elapsed) + params.counters.error++ + const key = String(err?.message ?? err ?? "unknown").slice(0, 400) + params.counters.errorSamples[key] = (params.counters.errorSamples[key] ?? 0) + 1 + } + } + + const inflight = Math.max(1, cfg.inflightPerWallet) + const active = new Set>() + + function launchOne() { + const p = sendOne().finally(() => { + active.delete(p) + }) + active.add(p) + } + + while (nowMs() < params.stopAtMs) { + while (active.size < inflight && nowMs() < params.stopAtMs) { + launchOne() + } + if (active.size === 0) break + await Promise.race(Array.from(active)) + } + + await Promise.allSettled(Array.from(active)) +} + +export async function runTokenMintLoadgen() { + maybeSilenceConsole() + const wallets = await readWalletMnemonics() + if (wallets.length === 0) throw new Error("No wallets found. Set WALLETS or MNEMONICS_DIR/WALLET_FILES.") + + const ownerMnemonic = wallets[0]! + const cfg = getConfig() + + const bootstrapRpc = cfg.targets[0]! + const allWalletAddresses = await getWalletAddresses(bootstrapRpc, wallets) + const { tokenAddress } = await ensureTokenAndBalances(bootstrapRpc, ownerMnemonic, allWalletAddresses) + + const explicitRecipients = splitCsv(process.env.RECIPIENTS) + const recipients = explicitRecipients.length > 0 ? explicitRecipients : allWalletAddresses + + const nonceDemos = new Demos() + await waitForRpcReady(bootstrapRpc, envInt("WAIT_FOR_RPC_SEC", 120)) + await waitForTxReady(bootstrapRpc, envInt("WAIT_FOR_TX_SEC", 120)) + await nonceDemos.connect(bootstrapRpc) + await nonceDemos.connectWallet(ownerMnemonic, { algorithm: "ed25519" }) + const sender = (await nonceDemos.crypto.getIdentity("ed25519")).publicKey + const senderHex = uint8ArrayToHex(sender) + const currentNonce = await nonceDemos.getAddressNonce(senderHex) + let nextNonce = Number(currentNonce) + 1 + const allocateNonce = () => nextNonce++ + + const startedAtMs = nowMs() + const stopAtMs = startedAtMs + cfg.durationSec * 1000 + + const counters: Counters = { + startedAtMs, + endedAtMs: 0, + total: 0, + ok: 0, + error: 0, + errorSamples: {}, + } + + const sampler = new ReservoirSampler(cfg.sampleLimit) + const timeseriesSampler = new ReservoirSampler(50_000) + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_mint` + const artifacts = { + runId: run.runId, + runDir: run.runDir, + summaryPath: `${artifactBase}.summary.json`, + timeseriesPath: `${artifactBase}.timeseries.jsonl`, + } + + let lastPointAtMs = startedAtMs + let lastOk = 0 + let lastTotal = 0 + let lastError = 0 + + async function timeseriesLoop() { + if (!cfg.emitTimeseries) return + while (nowMs() < stopAtMs) { + await sleep(1000) + const now = nowMs() + const elapsedSinceLast = Math.max(0.001, (now - lastPointAtMs) / 1000) + lastPointAtMs = now + + const okDelta = counters.ok - lastOk + const totalDelta = counters.total - lastTotal + const errorDelta = counters.error - lastError + + lastOk = counters.ok + lastTotal = counters.total + lastError = counters.error + + const samples = timeseriesSampler.snapshotSorted() + const point: TimeseriesPoint = { + tSec: (now - startedAtMs) / 1000, + ok: okDelta, + total: totalDelta, + error: errorDelta, + tpsOk: okDelta / elapsedSinceLast, + latencyMs: { + sampleCount: timeseriesSampler.size(), + p50: percentile(samples, 50), + p95: percentile(samples, 95), + p99: percentile(samples, 99), + }, + timestamp: new Date().toISOString(), + } + + appendJsonl(artifacts.timeseriesPath, point) + } + } + + const effectiveConc = Math.max(1, cfg.concurrency) + + await Promise.all( + [ + ...Array.from({ length: effectiveConc }).map((_, idx) => + worker({ + cfg, + counters, + sampler, + timeseriesSampler, + stopAtMs, + ownerMnemonic, + workerId: idx, + tokenAddress, + recipientAddresses: recipients, + allocateNonce, + }), + ), + timeseriesLoop(), + ], + ) + + counters.endedAtMs = nowMs() + + const postRunSettleCheck = envBool("POST_RUN_SETTLE_CHECK", true) + const settleSample = unique([senderHex, ...recipients]).slice(0, envInt("POST_RUN_SETTLE_SAMPLE_ADDRESSES", 8)) + + const postRunSettle = postRunSettleCheck + ? await waitForCrossNodeTokenConsistency({ + rpcUrls: cfg.targets, + tokenAddress, + addresses: settleSample, + timeoutSec: envInt("POST_RUN_SETTLE_TIMEOUT_SEC", 120), + pollMs: envInt("POST_RUN_SETTLE_POLL_MS", 500), + }) + : null + + const holderPointerSettleCheck = envBool("POST_RUN_HOLDER_POINTER_CHECK", true) + const expectedPresent: Record = {} + if (postRunSettle?.ok && postRunSettle.perNode?.[0]?.snapshot?.balances) { + for (const [addr, balRaw] of Object.entries(postRunSettle.perNode[0].snapshot.balances)) { + try { + expectedPresent[addr] = BigInt(balRaw ?? "0") > 0n + } catch { + expectedPresent[addr] = false + } + } + } + + const holderPointerSettle = + holderPointerSettleCheck && Object.keys(expectedPresent).length > 0 + ? await waitForCrossNodeHolderPointersMatchBalances({ + rpcUrls: cfg.targets, + tokenAddress, + expectedPresent, + timeoutSec: envInt("POST_RUN_HOLDER_POINTER_TIMEOUT_SEC", 120), + pollMs: envInt("POST_RUN_HOLDER_POINTER_POLL_MS", 500), + }) + : null + + const durationSec = (counters.endedAtMs - counters.startedAtMs) / 1000 + const samples = sampler.snapshotSorted() + const summary = { + scenario: "token_mint", + tokenAddress, + ok: counters.ok, + total: counters.total, + error: counters.error, + errorSamples: counters.errorSamples, + durationSec, + okTps: counters.ok / Math.max(0.001, durationSec), + latencyMs: { + sampleCount: sampler.size(), + p50: percentile(samples, 50), + p95: percentile(samples, 95), + p99: percentile(samples, 99), + }, + config: { + targets: cfg.targets, + concurrency: effectiveConc, + inflightPerWallet: cfg.inflightPerWallet, + amount: cfg.amount.toString(), + waitForRpcSec: envInt("WAIT_FOR_RPC_SEC", 120), + tokenBootstrap: envBool("TOKEN_BOOTSTRAP", true), + tokenDistribute: envBool("TOKEN_DISTRIBUTE", true), + avoidSelfRecipient: cfg.avoidSelfRecipient, + }, + postRun: { + settleSample, + settle: postRunSettle, + holderPointers: holderPointerSettle, + }, + artifacts, + timestamp: new Date().toISOString(), + } + + writeJson(artifacts.summaryPath, summary) + console.log(JSON.stringify({ token_mint_summary: summary }, null, 2)) + + const strict = envBool("POST_RUN_SETTLE_STRICT", false) + if (strict && postRunSettleCheck && postRunSettle && !postRunSettle.ok) { + throw new Error("Post-run settle check failed (token_mint)") + } + const strictPointers = envBool("POST_RUN_HOLDER_POINTER_STRICT", false) + if (strictPointers && holderPointerSettleCheck && holderPointerSettle && !holderPointerSettle.ok) { + throw new Error("Post-run holder-pointer check failed (token_mint)") + } +} diff --git a/better_testing/loadgen/src/token_mint_ramp.ts b/better_testing/loadgen/src/token_mint_ramp.ts new file mode 100644 index 000000000..1651a0e30 --- /dev/null +++ b/better_testing/loadgen/src/token_mint_ramp.ts @@ -0,0 +1,112 @@ +import { runTokenMintLoadgen } from "./token_mint_loadgen" +import { getRunConfig, writeJson } from "./run_io" + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function splitCsv(value: string | undefined): string[] { + return (value ?? "") + .split(",") + .map(s => s.trim()) + .filter(Boolean) +} + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +export async function runTokenMintRamp() { + const ramp = splitCsv(process.env.RAMP_CONCURRENCY) + .map(s => Number.parseInt(s, 10)) + .filter(n => Number.isFinite(n) && n > 0) + const stepDurationSec = envInt("STEP_DURATION_SEC", 15) + const cooldownSec = envInt("COOLDOWN_SEC", 3) + + if (ramp.length === 0) throw new Error("RAMP_CONCURRENCY must be a comma-separated list of positive ints") + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_mint_ramp` + const artifacts = { + runId: run.runId, + runDir: run.runDir, + summaryPath: `${artifactBase}.summary.json`, + } + + const results: any[] = [] + + for (const conc of ramp) { + process.env.SCENARIO = "token_mint" + process.env.DURATION_SEC = String(stepDurationSec) + process.env.CONCURRENCY = String(conc) + + let stepSummary: any = null + let stepError: any = null + + const originalLog = console.log + const capture: any[] = [] + console.log = (...args: any[]) => { + capture.push(args) + originalLog(...args) + } + + try { + await runTokenMintLoadgen() + for (const row of capture) { + const payload = row?.[0] + if (payload && typeof payload === "string") { + try { + const parsed = JSON.parse(payload) + if (parsed?.token_mint_summary) stepSummary = parsed.token_mint_summary + } catch { + // ignore + } + } else if (payload?.token_mint_summary) { + stepSummary = payload.token_mint_summary + } + } + } catch (err: any) { + stepError = { message: err?.message ?? String(err) } + } finally { + console.log = originalLog + } + + results.push({ + concurrency: conc, + stepDurationSec, + cooldownSec, + summary: stepSummary, + error: stepError, + }) + + if (cooldownSec > 0) await sleep(cooldownSec * 1000) + } + + const okSteps = results + .map(r => ({ concurrency: r.concurrency, okTps: r.summary?.okTps })) + .filter(r => typeof r.okTps === "number") + + const best = okSteps.sort((a, b) => (b.okTps ?? 0) - (a.okTps ?? 0))[0] ?? null + + const rampSummary = { + scenario: "token_mint_ramp", + bestByOkTps: best, + steps: results, + config: { + rampConcurrency: ramp, + stepDurationSec, + cooldownSec, + inflightPerWallet: envInt("INFLIGHT_PER_WALLET", 1), + tokenMintAmount: process.env.TOKEN_MINT_AMOUNT ?? process.env.AMOUNT ?? "1", + }, + artifacts, + timestamp: new Date().toISOString(), + } + + writeJson(artifacts.summaryPath, rampSummary) + console.log(JSON.stringify({ token_mint_ramp_summary: rampSummary }, null, 2)) +} + diff --git a/better_testing/loadgen/src/token_mint_smoke.ts b/better_testing/loadgen/src/token_mint_smoke.ts new file mode 100644 index 000000000..5ad2c82df --- /dev/null +++ b/better_testing/loadgen/src/token_mint_smoke.ts @@ -0,0 +1,191 @@ +import { Demos } from "@kynesyslabs/demosdk/websdk" +import { + getTokenTargets, + maybeSilenceConsole, + nodeCall, + readWalletMnemonics, + ensureTokenAndBalances, + getWalletAddresses, + sendTokenMintTxWithDemos, + waitForCrossNodeTokenConsistency, + waitForCrossNodeHolderPointersMatchBalances, + waitForRpcReady, + waitForTxReady, +} from "./token_shared" +import { getRunConfig, writeJson } from "./run_io" + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function envBool(name: string, fallback: boolean): boolean { + const raw = process.env[name] + if (!raw) return fallback + switch (raw.trim().toLowerCase()) { + case "1": + case "true": + case "yes": + case "y": + case "on": + return true + case "0": + case "false": + case "no": + case "n": + case "off": + return false + default: + return fallback + } +} + +function expectPresentFromBalance(balance: string | null): boolean { + try { + return BigInt(balance ?? "0") > 0n + } catch { + return false + } +} + +async function waitForTotalSupplyDelta(params: { + rpcUrl: string + tokenAddress: string + before: bigint + delta: bigint + timeoutSec: number +}) { + const deadline = Date.now() + Math.max(1, params.timeoutSec) * 1000 + let attempt = 0 + while (Date.now() < deadline) { + const token = await nodeCall(params.rpcUrl, "token.get", { tokenAddress: params.tokenAddress }, `token.get:${attempt}`) + const totalRaw = token?.response?.state?.totalSupply + if (typeof totalRaw === "string") { + try { + const total = BigInt(totalRaw) + if (total >= params.before + params.delta) return total + } catch { + // ignore + } + } + attempt++ + await new Promise(r => setTimeout(r, Math.min(2000, 100 + attempt * 100))) + } + return null +} + +export async function runTokenMintSmoke() { + maybeSilenceConsole() + const targets = getTokenTargets() + const rpcUrl = targets[0]! + const wallets = await readWalletMnemonics() + if (wallets.length < 2) throw new Error("token_mint_smoke requires at least 2 wallets") + + const addrs = await getWalletAddresses(rpcUrl, wallets.slice(0, 2)) + const deployer = addrs[0]! + const recipient = addrs[1]! + + const { tokenAddress } = await ensureTokenAndBalances(rpcUrl, wallets[0]!, addrs) + const amount = BigInt(process.env.TOKEN_MINT_AMOUNT ?? "1") + + const demos = new Demos() + await waitForRpcReady(rpcUrl, envInt("WAIT_FOR_RPC_SEC", 120)) + await waitForTxReady(rpcUrl, envInt("WAIT_FOR_TX_SEC", 120)) + await demos.connect(rpcUrl) + await demos.connectWallet(wallets[0]!, { algorithm: "ed25519" }) + + const beforeTo = await nodeCall(rpcUrl, "token.getBalance", { tokenAddress, address: recipient }, "beforeTo") + const beforeToken = await nodeCall(rpcUrl, "token.get", { tokenAddress }, "beforeToken") + const beforeSupply = BigInt(beforeToken?.response?.state?.totalSupply ?? "0") + + const currentNonce = await demos.getAddressNonce(deployer) + const nonce = Number(currentNonce) + 1 + + const { res } = await sendTokenMintTxWithDemos({ + demos, + tokenAddress, + to: recipient, + amount, + nonce, + }) + + const supplyReached = await waitForTotalSupplyDelta({ + rpcUrl, + tokenAddress, + before: beforeSupply, + delta: amount, + timeoutSec: envInt("TOKEN_WAIT_APPLY_SEC", 30), + }) + + const afterTo = await nodeCall(rpcUrl, "token.getBalance", { tokenAddress, address: recipient }, "afterTo") + const afterToken = await nodeCall(rpcUrl, "token.get", { tokenAddress }, "afterToken") + + const crossNodeCheck = envBool("CROSS_NODE_CHECK", true) + const crossNode = crossNodeCheck + ? await waitForCrossNodeTokenConsistency({ + rpcUrls: targets, + tokenAddress, + addresses: [deployer, recipient], + timeoutSec: envInt("CROSS_NODE_TIMEOUT_SEC", 120), + pollMs: envInt("CROSS_NODE_POLL_MS", 500), + }) + : null + + const holderPointerCheck = envBool("HOLDER_POINTER_CHECK", true) + const expectedPresent = + crossNode?.ok && crossNode.perNode?.[0]?.snapshot?.balances + ? { + [deployer]: expectPresentFromBalance(crossNode.perNode[0].snapshot.balances[deployer] ?? null), + [recipient]: expectPresentFromBalance(crossNode.perNode[0].snapshot.balances[recipient] ?? null), + } + : { + [deployer]: true, + [recipient]: BigInt(afterTo?.response?.balance ?? "0") > 0n, + } + + const holderPointers = holderPointerCheck + ? await waitForCrossNodeHolderPointersMatchBalances({ + rpcUrls: targets, + tokenAddress, + expectedPresent, + timeoutSec: envInt("HOLDER_POINTER_TIMEOUT_SEC", 120), + pollMs: envInt("HOLDER_POINTER_POLL_MS", 500), + }) + : null + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_mint_smoke` + const summary = { + runId: run.runId, + tokenAddress, + rpcUrl, + minter: deployer, + to: recipient, + amount: amount.toString(), + transferResult: res ?? null, + balances: { + beforeTo: beforeTo?.response?.balance ?? null, + afterTo: afterTo?.response?.balance ?? null, + }, + totalSupply: { + before: beforeToken?.response?.state?.totalSupply ?? null, + after: afterToken?.response?.state?.totalSupply ?? null, + reached: supplyReached?.toString?.() ?? null, + }, + crossNode, + holderPointers, + timestamp: new Date().toISOString(), + } + + writeJson(`${artifactBase}.summary.json`, summary) + console.log(JSON.stringify({ token_mint_smoke_summary: summary }, null, 2)) + + if (crossNodeCheck && crossNode && !crossNode.ok) { + throw new Error("Cross-node token consistency check failed (token_mint_smoke)") + } + if (holderPointerCheck && holderPointers && !holderPointers.ok) { + throw new Error("Holder-pointer check failed (token_mint_smoke)") + } +} diff --git a/better_testing/loadgen/src/token_names_from_runs.ts b/better_testing/loadgen/src/token_names_from_runs.ts new file mode 100644 index 000000000..dd5d5649a --- /dev/null +++ b/better_testing/loadgen/src/token_names_from_runs.ts @@ -0,0 +1,74 @@ +import path from "path" +import { nodeCall } from "./token_shared" + +function env(name: string, fallback: string): string { + const raw = process.env[name] + return raw && raw.trim().length > 0 ? raw.trim() : fallback +} + +function safeParseJson(text: string): any | null { + try { + return JSON.parse(text) + } catch { + return null + } +} + +function extractTokenAddress(summary: any): string | null { + if (!summary || typeof summary !== "object") return null + const direct = summary.tokenAddress + if (typeof direct === "string" && direct.startsWith("0x")) return direct + return null +} + +async function listTokenAddressesFromRuns(runsDir: string): Promise { + const glob = new Bun.Glob("**/*.summary.json") + const addresses = new Set() + + for await (const rel of glob.scan(runsDir)) { + const full = path.join(runsDir, rel) + const text = await Bun.file(full).text().catch(() => "") + if (!text) continue + const parsed = safeParseJson(text) + const addr = extractTokenAddress(parsed) + if (addr) addresses.add(addr) + } + + return Array.from(addresses) +} + +export async function runTokenNamesFromRuns() { + const runsDir = env("RUNS_DIR", "better_testing/runs") + const rpcUrl = env("RPC_URL", "http://localhost:53551") + + const tokenAddresses = await listTokenAddressesFromRuns(runsDir) + const results: any[] = [] + + for (const tokenAddress of tokenAddresses) { + const res = await nodeCall(rpcUrl, "token.get", { tokenAddress }, `token.get:${tokenAddress}`) + const ok = res?.result === 200 + results.push({ + tokenAddress, + ok, + name: res?.response?.metadata?.name ?? null, + ticker: res?.response?.metadata?.ticker ?? null, + deployer: res?.response?.metadata?.deployer ?? null, + error: ok ? null : res?.response ?? null, + }) + } + + const output = { + rpcUrl, + runsDir, + count: results.length, + tokens: results.sort((a, b) => String(a.tokenAddress).localeCompare(String(b.tokenAddress))), + timestamp: new Date().toISOString(), + } + + console.log(JSON.stringify({ token_names_from_runs: output }, null, 2)) +} + +if (import.meta.main) { + await runTokenNamesFromRuns() +} + diff --git a/better_testing/loadgen/src/token_observe.ts b/better_testing/loadgen/src/token_observe.ts new file mode 100644 index 000000000..cdcc76b48 --- /dev/null +++ b/better_testing/loadgen/src/token_observe.ts @@ -0,0 +1,309 @@ +import { appendJsonl, getRunConfig, writeJson } from "./run_io" +import { + getTokenTargets, + getWalletAddresses, + maybeSilenceConsole, + nodeCall, + readWalletMnemonics, + waitForRpcReady, + waitForTxReady, +} from "./token_shared" +import { createHash } from "crypto" + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function envBool(name: string, fallback: boolean): boolean { + const raw = process.env[name] + if (!raw) return fallback + switch (raw.trim().toLowerCase()) { + case "1": + case "true": + case "yes": + case "y": + case "on": + return true + case "0": + case "false": + case "no": + case "n": + case "off": + return false + default: + return fallback + } +} + +function splitCsv(value: string | undefined): string[] { + return (value ?? "") + .split(",") + .map(s => s.trim()) + .filter(Boolean) +} + +function normalizeHexAddress(address: string): string { + const trimmed = (address ?? "").trim() + if (!trimmed) return trimmed + return trimmed.startsWith("0x") ? trimmed.toLowerCase() : ("0x" + trimmed).toLowerCase() +} + +function normalizeRpcUrl(url: string): string { + return url.replace(/\/+$/, "") + "/" +} + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +function sortObjectDeep(value: any): any { + if (Array.isArray(value)) return value.map(sortObjectDeep) + if (!value || typeof value !== "object") return value + const out: Record = {} + for (const key of Object.keys(value).sort()) out[key] = sortObjectDeep((value as any)[key]) + return out +} + +function stableJson(value: any): string { + return JSON.stringify(sortObjectDeep(value)) +} + +function sha256Hex(input: string): string { + return createHash("sha256").update(input).digest("hex") +} + +function isNonEmptyString(value: any): value is string { + return typeof value === "string" && value.length > 0 +} + +function extractMempoolCount(raw: any): number | null { + const res = raw?.result === 200 ? raw?.response : null + if (Array.isArray(res)) return res.length + if (res && typeof res === "object") { + if (Array.isArray((res as any).txs)) return (res as any).txs.length + if (Array.isArray((res as any).transactions)) return (res as any).transactions.length + if (typeof (res as any).size === "number" && Number.isFinite((res as any).size)) return (res as any).size + if (typeof (res as any).count === "number" && Number.isFinite((res as any).count)) return (res as any).count + } + return null +} + +async function getLastBlockNumber(rpcUrl: string, muid: string): Promise { + const res = await nodeCall(rpcUrl, "getLastBlockNumber", {}, muid) + const n = res?.response + if (typeof n === "number" && Number.isFinite(n)) return n + if (typeof n === "string") { + const parsed = Number.parseInt(n, 10) + return Number.isFinite(parsed) ? parsed : null + } + return null +} + +async function getLastBlockHash(rpcUrl: string, muid: string): Promise { + const res = await nodeCall(rpcUrl, "getLastBlockHash", {}, muid) + const h = res?.response + if (typeof h === "string" && h.length > 0) return h + return null +} + +export async function runTokenObserve() { + maybeSilenceConsole() + const targets = getTokenTargets().map(normalizeRpcUrl) + if (targets.length === 0) throw new Error("No TARGETS configured") + + const bootstrapRpc = targets[0]! + const waitForRpcSec = envInt("WAIT_FOR_RPC_SEC", 120) + const waitForTxSec = envInt("WAIT_FOR_TX_SEC", 120) + for (const url of targets) await waitForRpcReady(url, waitForRpcSec) + await waitForTxReady(bootstrapRpc, waitForTxSec) + + const tokenAddress = String(process.env.TOKEN_ADDRESS ?? "").trim() + if (!tokenAddress) throw new Error("TOKEN_ADDRESS is required for token_observe") + + const wallets = await readWalletMnemonics() + const walletCount = Math.max(0, envInt("OBSERVE_WALLETS", 4)) + const derived = + walletCount > 0 && wallets.length > 0 + ? await getWalletAddresses(bootstrapRpc, wallets.slice(0, walletCount)) + : [] + + const explicit = splitCsv(process.env.ADDRESSES) + const addresses = Array.from(new Set([...derived, ...explicit].map(normalizeHexAddress).filter(Boolean))) + if (addresses.length === 0) throw new Error("No addresses to observe. Provide ADDRESSES or OBSERVE_WALLETS>0 with wallets configured.") + + const observeSec = envInt("OBSERVE_SEC", 120) + const pollMs = Math.max(100, envInt("OBSERVE_POLL_MS", 1000)) + const includeTokenGet = envBool("INCLUDE_TOKEN_GET", true) + const includeScriptState = envBool("INCLUDE_SCRIPT_STATE", true) + const includeMempool = envBool("INCLUDE_MEMPOOL", true) + const includeRaw = envBool("INCLUDE_RAW", false) + const viewMethod = process.env.SCRIPT_HOOKCOUNTS_VIEW ?? "getHookCounts" + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_observe` + const artifacts = { + runId: run.runId, + runDir: run.runDir, + summaryPath: `${artifactBase}.summary.json`, + timeseriesPath: `${artifactBase}.timeseries.jsonl`, + } + + const startMs = Date.now() + const stopAtMs = startMs + Math.max(1, observeSec) * 1000 + + let ticks = 0 + let firstSeen: Record | null = null + let lastSeen: Record | null = null + + while (Date.now() < stopAtMs) { + ticks++ + const tMs = Date.now() + + const perNode: Record = {} + for (const url of targets) { + const blockNumber = await getLastBlockNumber(url, `getLastBlockNumber:observe:${ticks}:${url}`) + const blockHash = await getLastBlockHash(url, `getLastBlockHash:observe:${ticks}:${url}`) + + const mempool = includeMempool ? await nodeCall(url, "getMempool", {}, `getMempool:observe:${ticks}:${url}`) : null + const mempoolCount = includeMempool ? extractMempoolCount(mempool) : null + + let inFlux = false + if (blockNumber === null || !isNonEmptyString(blockHash)) inFlux = true + + const balances: Record = {} + for (const a of addresses) { + const bal = await nodeCall( + url, + "token.getBalanceCommitted", + { tokenAddress, address: a }, + `token.getBalanceCommitted:observe:${ticks}:${url}:${a}`, + ) + if (bal?.result === 409) inFlux = true + balances[a] = bal?.result === 200 ? (bal?.response?.balance ?? null) : null + } + + const tokenGet = includeTokenGet + ? await nodeCall(url, "token.getCommitted", { tokenAddress }, `token.getCommitted:observe:${ticks}:${url}`) + : null + if (tokenGet?.result === 409) inFlux = true + const totalSupply = tokenGet?.result === 200 ? (tokenGet?.response?.state?.totalSupply ?? null) : null + const customState = includeScriptState && tokenGet?.result === 200 ? (tokenGet?.response?.state?.customState ?? null) : null + const hookCounts = + includeScriptState + ? await nodeCall( + url, + "token.callViewCommitted", + { tokenAddress, method: viewMethod, args: [] }, + `token.callViewCommitted:${viewMethod}:observe:${ticks}:${url}`, + ) + : null + if (hookCounts?.result === 409) inFlux = true + + const stateForHash = { + tokenAddress: normalizeHexAddress(tokenAddress), + totalSupply, + balances, + ...(includeScriptState ? { customState } : {}), + } + + perNode[url] = { + url, + blockNumber, + blockHash, + mempoolCount, + token: { + inFlux, + totalSupply, + balances, + ...(includeScriptState ? { customState } : {}), + stateHash: inFlux ? null : sha256Hex(stableJson(stateForHash)), + ...(includeTokenGet ? { hasScript: !!tokenGet?.response?.metadata?.hasScript } : {}), + }, + ...(includeScriptState + ? { + script: { + hookCountsHash: inFlux + ? null + : sha256Hex(stableJson(hookCounts?.result === 200 ? hookCounts?.response?.value ?? null : null)), + }, + } + : {}), + ...(includeRaw + ? { + raw: { + mempool, + tokenGet, + hookCounts, + }, + } + : {}), + } + } + + // If nodes are not on the same last block hash, treat this tick as "in flux" globally. + // Otherwise, we'd flag transient skew (some nodes slightly ahead) as a committed-state divergence. + const blockHashes = Object.values(perNode).map(v => v?.blockHash ?? null) + const knownBlockHashes = blockHashes.filter(isNonEmptyString) + const uniqueKnownBlockHashes = new Set(knownBlockHashes) + const globalSkewInFlux = uniqueKnownBlockHashes.size > 1 + if (globalSkewInFlux) { + for (const url of targets) { + const node = perNode[url] + if (!node?.token) continue + node.token.inFlux = true + node.token.stateHash = null + if (node?.script) node.script.hookCountsHash = null + } + } + + const point = { + tSec: (tMs - startMs) / 1000, + timestamp: new Date().toISOString(), + ticks, + tokenAddress: normalizeHexAddress(tokenAddress), + addresses, + perNode, + crossNode: { + stateHashes: Object.fromEntries(Object.entries(perNode).map(([k, v]) => [k, v?.token?.stateHash ?? null])), + hookCountsHashes: Object.fromEntries(Object.entries(perNode).map(([k, v]) => [k, v?.script?.hookCountsHash ?? null])), + mempoolCounts: Object.fromEntries(Object.entries(perNode).map(([k, v]) => [k, v?.mempoolCount ?? null])), + blockNumbers: Object.fromEntries(Object.entries(perNode).map(([k, v]) => [k, v?.blockNumber ?? null])), + blockHashes: Object.fromEntries(Object.entries(perNode).map(([k, v]) => [k, v?.blockHash ?? null])), + }, + } + + if (!firstSeen) firstSeen = point + lastSeen = point + + appendJsonl(artifacts.timeseriesPath, point) + await sleep(pollMs) + } + + const summary = { + runId: run.runId, + scenario: "token_observe", + tokenAddress: normalizeHexAddress(tokenAddress), + rpcUrls: targets, + addresses, + config: { + observeSec, + pollMs, + includeTokenGet, + includeScriptState, + includeMempool, + includeRaw, + viewMethod: includeScriptState ? viewMethod : null, + }, + artifacts, + first: firstSeen ? { tSec: firstSeen.tSec, crossNode: firstSeen.crossNode } : null, + last: lastSeen ? { tSec: lastSeen.tSec, crossNode: lastSeen.crossNode } : null, + ticks, + timestamp: new Date().toISOString(), + } + + writeJson(artifacts.summaryPath, summary) + console.log(JSON.stringify({ token_observe_summary: summary }, null, 2)) +} diff --git a/better_testing/loadgen/src/token_pause_under_load.ts b/better_testing/loadgen/src/token_pause_under_load.ts new file mode 100644 index 000000000..5b37e6793 --- /dev/null +++ b/better_testing/loadgen/src/token_pause_under_load.ts @@ -0,0 +1,794 @@ +import { Demos } from "@kynesyslabs/demosdk/websdk" +import { uint8ArrayToHex } from "@kynesyslabs/demosdk/encryption" +import fs from "fs" +import { getRunConfig, writeJson } from "./run_io" +import { + ensureTokenAndBalances, + getTokenTargets, + getWalletAddresses, + maybeSilenceConsole, + nodeCall, + pickRecipient, + readWalletMnemonics, + sendTokenBurnTxWithDemos, + sendTokenMintTxWithDemos, + sendTokenPauseTxWithDemos, + sendTokenTransferTxWithDemos, + sendTokenUnpauseTxWithDemos, + waitForCrossNodeTokenConsistency, + waitForRpcReady, + waitForTxReady, + withDemosWallet, +} from "./token_shared" + +type Mode = "pre_pause" | "transition_to_pause" | "paused" | "transition_to_unpause" | "post_unpause" + +type PhaseCounters = { + total: number + ok: number + rejectedPaused: number + rejectedOther: number + okUnexpected: number + rejectUnexpected: number + errorSamples: Record +} + +type ScenarioCounters = { + startedAtMs: number + endedAtMs: number + perMode: Record +} + +type MempoolDrainReport = { + ok: boolean + timeoutSec: number + pollMs: number + stablePolls: number + attempts: number + durationMs: number + lastCount: Record +} + +type BlockSkewReport = { + ok: boolean + timeoutSec: number + pollMs: number + maxSkew: number + stablePolls: number + attempts: number + durationMs: number + last: Record + lastHash: Record +} + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function envBool(name: string, fallback: boolean): boolean { + const raw = process.env[name] + if (!raw) return fallback + switch (raw.trim().toLowerCase()) { + case "1": + case "true": + case "yes": + case "y": + case "on": + return true + case "0": + case "false": + case "no": + case "n": + case "off": + return false + default: + return fallback + } +} + +function normalizeRpcUrl(url: string): string { + return url.replace(/\/+$/, "") + "/" +} + +async function rpcPost(rpcUrl: string, body: unknown): Promise { + const url = normalizeRpcUrl(rpcUrl) + const timeoutMs = envInt("NODECALL_FETCH_TIMEOUT_MS", 8000) + const controller = timeoutMs > 0 ? new AbortController() : null + const timer = controller ? setTimeout(() => controller.abort(), timeoutMs) : null + try { + const res = await fetch(url, { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify(body), + ...(controller ? { signal: controller.signal } : {}), + }) + const json = await res.json().catch(() => null) + return { ok: res.ok, status: res.status, json } + } catch (error: any) { + const reason = + error?.name === "AbortError" + ? `NODECALL_FETCH_TIMEOUT_MS exceeded (${timeoutMs}ms)` + : (error instanceof Error ? error.message : String(error)) + return { + ok: false, + status: 0, + json: { + result: 599, + response: `rpcPost failed: ${reason}`, + require_reply: false, + extra: null, + }, + } + } finally { + if (timer) clearTimeout(timer) + } +} + +async function nodeCallExact(rpcUrl: string, message: string, data: any, muid = "loadgen"): Promise { + const payload = { method: "nodeCall", params: [{ message, data, muid }] } + const { ok, json } = await rpcPost(rpcUrl, payload) + if (!ok) return json + return json +} + +function normalizeHexAddress(address: string): string { + const trimmed = (address ?? "").trim() + if (!trimmed) return trimmed + return trimmed.startsWith("0x") ? trimmed.toLowerCase() : ("0x" + trimmed).toLowerCase() +} + +function ensurePhaseCounters(): PhaseCounters { + return { + total: 0, + ok: 0, + rejectedPaused: 0, + rejectedOther: 0, + okUnexpected: 0, + rejectUnexpected: 0, + errorSamples: {}, + } +} + +function classifyError(res: any, err: any): string { + const pieces: string[] = [] + if (typeof err?.message === "string") pieces.push(err.message) + if (typeof res?.extra?.error === "string") pieces.push(res.extra.error) + if (typeof res?.response === "string") pieces.push(res.response) + if (res?.response === false) pieces.push("false") + if (typeof res?.message === "string") pieces.push(res.message) + return pieces.join(" ").trim() +} + +function isTokenPausedErrorMessage(message: string): boolean { + return message.toLowerCase().includes("token is paused") +} + +function extractMempoolCount(raw: any): number | null { + const res = raw?.result === 200 ? raw?.response : null + if (Array.isArray(res)) return res.length + if (res && typeof res === "object") { + if (Array.isArray((res as any).txs)) return (res as any).txs.length + if (Array.isArray((res as any).transactions)) return (res as any).transactions.length + if (typeof (res as any).size === "number" && Number.isFinite((res as any).size)) return (res as any).size + if (typeof (res as any).count === "number" && Number.isFinite((res as any).count)) return (res as any).count + } + return null +} + +async function waitForMempoolDrain(params: { + rpcUrls: string[] + timeoutSec: number + pollMs: number + stablePolls: number +}): Promise { + const startedAtMs = Date.now() + const deadlineMs = Date.now() + Math.max(1, params.timeoutSec) * 1000 + const pollMs = Math.max(100, Math.floor(params.pollMs)) + const stableNeeded = Math.max(1, Math.floor(params.stablePolls)) + + let stable = 0 + let attempts = 0 + let lastCount: Record = {} + + while (Date.now() < deadlineMs) { + attempts++ + lastCount = {} + for (const rpcUrl of params.rpcUrls) { + const mempool = await nodeCall(rpcUrl, "getMempool", {}, `getMempool:${attempts}:${rpcUrl}`) + lastCount[rpcUrl] = extractMempoolCount(mempool) + } + + const counts = Object.values(lastCount) + const allKnown = counts.every(c => typeof c === "number") + const allZero = allKnown && counts.every(c => (c ?? 1) === 0) + + if (allZero) { + stable++ + if (stable >= stableNeeded) { + return { + ok: true, + timeoutSec: params.timeoutSec, + pollMs, + stablePolls: stableNeeded, + attempts, + durationMs: Date.now() - startedAtMs, + lastCount, + } + } + } else { + stable = 0 + } + + await sleep(pollMs) + } + + return { + ok: false, + timeoutSec: params.timeoutSec, + pollMs, + stablePolls: stableNeeded, + attempts, + durationMs: Date.now() - startedAtMs, + lastCount, + } +} + +async function getLastBlockNumber(rpcUrl: string, muid: string): Promise { + const res = await nodeCall(rpcUrl, "getLastBlockNumber", {}, muid) + const n = res?.response + if (typeof n === "number" && Number.isFinite(n)) return n + if (typeof n === "string") { + const parsed = Number.parseInt(n, 10) + return Number.isFinite(parsed) ? parsed : null + } + return null +} + +async function getLastBlockHash(rpcUrl: string, muid: string): Promise { + const res = await nodeCall(rpcUrl, "getLastBlockHash", {}, muid) + const h = res?.response + if (typeof h === "string" && h.length > 0) return h + return null +} + +async function waitForBlockSkew(params: { + rpcUrls: string[] + timeoutSec: number + pollMs: number + maxSkew: number + stablePolls: number +}): Promise { + const startedAtMs = Date.now() + const deadlineMs = Date.now() + Math.max(1, params.timeoutSec) * 1000 + const pollMs = Math.max(100, Math.floor(params.pollMs)) + const stableNeeded = Math.max(1, Math.floor(params.stablePolls)) + const maxSkew = Math.max(0, Math.floor(params.maxSkew)) + + let stable = 0 + let attempts = 0 + let last: Record = {} + let lastHash: Record = {} + + while (Date.now() < deadlineMs) { + attempts++ + last = {} + lastHash = {} + const values: number[] = [] + for (const rpcUrl of params.rpcUrls) { + const n = await getLastBlockNumber(rpcUrl, `getLastBlockNumber:skew:${attempts}:${rpcUrl}`) + last[rpcUrl] = n + lastHash[rpcUrl] = await getLastBlockHash(rpcUrl, `getLastBlockHash:skew:${attempts}:${rpcUrl}`) + if (typeof n === "number") values.push(n) + } + + const min = values.length > 0 ? Math.min(...values) : null + const max = values.length > 0 ? Math.max(...values) : null + const skewOk = typeof min === "number" && typeof max === "number" && max - min <= maxSkew + + if (skewOk) { + stable++ + if (stable >= stableNeeded) { + return { + ok: true, + timeoutSec: params.timeoutSec, + pollMs, + maxSkew, + stablePolls: stableNeeded, + attempts, + durationMs: Date.now() - startedAtMs, + last, + lastHash, + } + } + } else { + stable = 0 + } + + await sleep(pollMs) + } + + return { + ok: false, + timeoutSec: params.timeoutSec, + pollMs, + maxSkew, + stablePolls: stableNeeded, + attempts, + durationMs: Date.now() - startedAtMs, + last, + lastHash, + } +} + +async function waitForCommittedTokenReadReady(params: { + rpcUrls: string[] + tokenAddress: string + timeoutSec: number + pollMs: number +}) { + const deadlineMs = Date.now() + Math.max(1, params.timeoutSec) * 1000 + const pollMs = Math.max(100, Math.floor(params.pollMs)) + let attempts = 0 + let lastPerNode: any[] = [] + + while (Date.now() < deadlineMs) { + attempts++ + lastPerNode = [] + let allOk = true + for (const rpcUrl of params.rpcUrls) { + const res = await nodeCall( + rpcUrl, + "token.getCommitted", + { tokenAddress: params.tokenAddress }, + `token.getCommitted:ready:${attempts}:${rpcUrl}`, + ) + const inFlux = res?.result === 409 && res?.response?.error === "STATE_IN_FLUX" + const ok = res?.result === 200 && !inFlux + lastPerNode.push({ rpcUrl, ok, inFlux, raw: res }) + if (!ok) allOk = false + } + if (allOk) return { ok: true, attempts, perNode: lastPerNode } + await sleep(pollMs) + } + + return { ok: false, attempts, perNode: lastPerNode } +} + +async function waitForCrossNodePausedStateLive(params: { + rpcUrls: string[] + tokenAddress: string + expectedPaused: boolean + timeoutSec: number + pollMs: number +}) { + const deadlineMs = Date.now() + Math.max(1, params.timeoutSec) * 1000 + const pollMs = Math.max(100, Math.floor(params.pollMs)) + let attempts = 0 + let lastPerNode: any[] = [] + + while (Date.now() < deadlineMs) { + attempts++ + lastPerNode = [] + let allOk = true + for (const rpcUrl of params.rpcUrls) { + const res = await nodeCallExact( + rpcUrl, + "token.get", + { tokenAddress: params.tokenAddress }, + `token.get:pausedLive:${attempts}:${rpcUrl}`, + ) + const paused = !!res?.response?.accessControl?.paused + const ok = res?.result === 200 && paused === params.expectedPaused + lastPerNode.push({ rpcUrl, ok, paused, raw: res }) + if (!ok) allOk = false + } + if (allOk) return { ok: true, attempts, perNode: lastPerNode } + await sleep(pollMs) + } + + return { ok: false, attempts, perNode: lastPerNode } +} + +async function worker(params: { + rpcUrl: string + tokenAddress: string + walletMnemonic: string + workerId: number + recipientAddresses: string[] + modeRef: { mode: Mode } + runningRef: { running: boolean } + counters: ScenarioCounters + avoidSelfRecipient: boolean +}) { + const demos = new Demos() + await waitForRpcReady(params.rpcUrl, envInt("WAIT_FOR_RPC_SEC", 120)) + await waitForTxReady(params.rpcUrl, envInt("WAIT_FOR_TX_SEC", 120)) + await demos.connect(params.rpcUrl) + await demos.connectWallet(params.walletMnemonic, { algorithm: "ed25519" }) + + const sender = (await demos.crypto.getIdentity("ed25519")).publicKey + const senderHex = normalizeHexAddress(uint8ArrayToHex(sender)) + + const to = normalizeHexAddress( + pickRecipient(params.recipientAddresses, senderHex, params.workerId, params.avoidSelfRecipient), + ) + + // Manage nonce locally, but resync after each attempt (important when we *expect* rejects while paused). + const startNonce = await demos.getAddressNonce(senderHex) + let nextNonce = Number(startNonce) + 1 + + while (params.runningRef.running) { + const mode = params.modeRef.mode + const bucket = (params.counters.perMode[mode] ??= ensurePhaseCounters()) + bucket.total++ + + let res: any = null + let err: any = null + try { + const { res: sendRes } = await sendTokenTransferTxWithDemos({ + demos, + tokenAddress: params.tokenAddress, + to, + amount: BigInt(process.env.TOKEN_TRANSFER_AMOUNT ?? "1"), + nonce: nextNonce, + }) + res = sendRes + } catch (e: any) { + err = e + } + + const message = classifyError(res, err) + const isPausedRejection = message ? isTokenPausedErrorMessage(message) : false + + const accepted = res?.result === 200 + if (accepted) { + bucket.ok++ + if (mode === "paused") bucket.okUnexpected++ + } else { + if (isPausedRejection) bucket.rejectedPaused++ + else bucket.rejectedOther++ + if (mode === "pre_pause" || mode === "post_unpause") bucket.rejectUnexpected++ + } + + if (!accepted && !isPausedRejection) { + const key = (message || "unknown").slice(0, 400) + bucket.errorSamples[key] = (bucket.errorSamples[key] ?? 0) + 1 + } + + // Resync nonce after every attempt. The node typically increments on accept; paused rejects should not. + try { + const current = await demos.getAddressNonce(senderHex) + nextNonce = Number(current) + 1 + } catch { + // keep old nextNonce and continue; will show up in errorSamples if broken + nextNonce++ + } + } +} + +function assertRejectedTokenPaused(res: any) { + if (res?.result === 200) { + throw new Error(`Expected rejection but got result=200: ${JSON.stringify(res)}`) + } + const msg = classifyError(res, null) + if (!isTokenPausedErrorMessage(msg)) { + throw new Error(`Expected paused rejection but got: ${JSON.stringify(res)}`) + } +} + +export async function runTokenPauseUnderLoad() { + maybeSilenceConsole() + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_pause_under_load` + + const targets = getTokenTargets().map(normalizeRpcUrl) + if (targets.length === 0) throw new Error("No TARGETS configured") + + const wallets = await readWalletMnemonics() + if (wallets.length < 2) throw new Error("token_pause_under_load requires at least 2 wallets (owner + one sender)") + + const ownerMnemonic = wallets[0]! + const senderMnemonics = wallets.slice(1) + + const ownerRpc = targets[0]! + const walletAddresses = (await getWalletAddresses(ownerRpc, wallets)).map(normalizeHexAddress) + const owner = walletAddresses[0]! + + try { + const { tokenAddress } = await ensureTokenAndBalances(ownerRpc, ownerMnemonic, walletAddresses) + + const prePauseSec = envInt("PRE_PAUSE_SEC", 20) + const pausedSec = envInt("PAUSED_SEC", 20) + const postUnpauseSec = envInt("POST_UNPAUSE_SEC", 20) + const transitionTimeoutSec = envInt("TRANSITION_TIMEOUT_SEC", 180) + const transitionPollMs = envInt("TRANSITION_POLL_MS", 500) + + const concurrency = Math.max( + 1, + Math.min(envInt("CONCURRENCY", senderMnemonics.length || 1), senderMnemonics.length || 1), + ) + const avoidSelfRecipient = envBool("AVOID_SELF_RECIPIENT", true) + + const modeRef: { mode: Mode } = { mode: "pre_pause" } + const runningRef = { running: true } + const counters: ScenarioCounters = { + startedAtMs: Date.now(), + endedAtMs: 0, + perMode: { + pre_pause: ensurePhaseCounters(), + transition_to_pause: ensurePhaseCounters(), + paused: ensurePhaseCounters(), + transition_to_unpause: ensurePhaseCounters(), + post_unpause: ensurePhaseCounters(), + }, + } + + const recipients = walletAddresses + + const workers: Promise[] = [] + for (let i = 0; i < concurrency; i++) { + const rpcUrl = targets[i % targets.length]! + const walletMnemonic = senderMnemonics[i % senderMnemonics.length]! + workers.push( + worker({ + rpcUrl, + tokenAddress, + walletMnemonic, + workerId: i, + recipientAddresses: recipients, + modeRef, + runningRef, + counters, + avoidSelfRecipient, + }), + ) + } + + // Phase 1: run transfers, then pause mid-run. + await sleep(Math.max(0, prePauseSec) * 1000) + const pauseTx = await withDemosWallet({ + rpcUrl: ownerRpc, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + const from = normalizeHexAddress(fromHex) + if (from !== owner) throw new Error(`owner identity mismatch: ${from} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenPauseTxWithDemos({ demos, tokenAddress, nonce }) + }, + }) + if (pauseTx?.res?.result !== 200) { + runningRef.running = false + await Promise.allSettled(workers) + throw new Error(`Pause tx rejected: ${JSON.stringify(pauseTx)}`) + } + + modeRef.mode = "transition_to_pause" + const pausedLive = await waitForCrossNodePausedStateLive({ + rpcUrls: targets, + tokenAddress, + expectedPaused: true, + timeoutSec: transitionTimeoutSec, + pollMs: transitionPollMs, + }) + if (!pausedLive.ok) { + runningRef.running = false + await Promise.allSettled(workers) + throw new Error( + `Pause never became visible (token.get) on all nodes. pauseTx=${JSON.stringify(pauseTx)} pausedLive=${JSON.stringify(pausedLive)}`, + ) + } + + modeRef.mode = "paused" + + // While paused, spot-check explicit transfer/mint/burn rejects from the owner. + const pausedTransfer = await withDemosWallet({ + rpcUrl: ownerRpc, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + const from = normalizeHexAddress(fromHex) + if (from !== owner) throw new Error(`owner identity mismatch: ${from} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenTransferTxWithDemos({ + demos, + tokenAddress, + to: normalizeHexAddress(walletAddresses[1]!), + amount: BigInt(process.env.TOKEN_TRANSFER_AMOUNT ?? "1"), + nonce, + }) + }, + }) + assertRejectedTokenPaused(pausedTransfer?.res) + + const pausedMint = await withDemosWallet({ + rpcUrl: ownerRpc, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + const from = normalizeHexAddress(fromHex) + if (from !== owner) throw new Error(`owner identity mismatch: ${from} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenMintTxWithDemos({ + demos, + tokenAddress, + to: normalizeHexAddress(walletAddresses[1]!), + amount: BigInt(process.env.TOKEN_MINT_AMOUNT ?? "1"), + nonce, + }) + }, + }) + assertRejectedTokenPaused(pausedMint?.res) + + const pausedBurn = await withDemosWallet({ + rpcUrl: ownerRpc, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + const from = normalizeHexAddress(fromHex) + if (from !== owner) throw new Error(`owner identity mismatch: ${from} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenBurnTxWithDemos({ + demos, + tokenAddress, + from: owner, + amount: BigInt(process.env.TOKEN_BURN_AMOUNT ?? "1"), + nonce, + }) + }, + }) + assertRejectedTokenPaused(pausedBurn?.res) + + await sleep(Math.max(0, pausedSec) * 1000) + + // Unpause mid-run. + const unpauseTx = await withDemosWallet({ + rpcUrl: ownerRpc, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + const from = normalizeHexAddress(fromHex) + if (from !== owner) throw new Error(`owner identity mismatch: ${from} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenUnpauseTxWithDemos({ demos, tokenAddress, nonce }) + }, + }) + if (unpauseTx?.res?.result !== 200) { + runningRef.running = false + await Promise.allSettled(workers) + throw new Error(`Unpause tx rejected: ${JSON.stringify(unpauseTx)}`) + } + + modeRef.mode = "transition_to_unpause" + const unpausedLive = await waitForCrossNodePausedStateLive({ + rpcUrls: targets, + tokenAddress, + expectedPaused: false, + timeoutSec: transitionTimeoutSec, + pollMs: transitionPollMs, + }) + if (!unpausedLive.ok) { + runningRef.running = false + await Promise.allSettled(workers) + throw new Error( + `Unpause never became visible (token.get) on all nodes. unpauseTx=${JSON.stringify(unpauseTx)} unpausedLive=${JSON.stringify(unpausedLive)}`, + ) + } + + modeRef.mode = "post_unpause" + await sleep(Math.max(0, postUnpauseSec) * 1000) + + runningRef.running = false + await Promise.allSettled(workers) + counters.endedAtMs = Date.now() + + const mempoolDrain = await waitForMempoolDrain({ + rpcUrls: targets, + timeoutSec: envInt("MEMPOOL_DRAIN_TIMEOUT_SEC", 180), + pollMs: envInt("MEMPOOL_DRAIN_POLL_MS", 1000), + stablePolls: envInt("MEMPOOL_DRAIN_STABLE_POLLS", 3), + }) + + const blockSkew = await waitForBlockSkew({ + rpcUrls: targets, + timeoutSec: envInt("BLOCK_SKEW_TIMEOUT_SEC", 180), + pollMs: envInt("BLOCK_SKEW_POLL_MS", 1000), + maxSkew: envInt("BLOCK_SKEW_MAX", 1), + stablePolls: envInt("BLOCK_SKEW_STABLE_POLLS", 3), + }) + + const committedReady = await waitForCommittedTokenReadReady({ + rpcUrls: targets, + tokenAddress, + timeoutSec: envInt("COMMITTED_READY_TIMEOUT_SEC", 300), + pollMs: envInt("COMMITTED_READY_POLL_MS", 1000), + }) + + // Final convergence check: committed reads across nodes. + const crossNodeCommitted = await waitForCrossNodeTokenConsistency({ + rpcUrls: targets, + tokenAddress, + addresses: walletAddresses, + timeoutSec: envInt("CROSS_NODE_TIMEOUT_SEC", 900), + pollMs: envInt("CROSS_NODE_POLL_MS", 1000), + }) + + const ok = + pauseTx?.res?.result === 200 && + unpauseTx?.res?.result === 200 && + counters.perMode.pre_pause.rejectUnexpected === 0 && + counters.perMode.post_unpause.rejectUnexpected === 0 && + counters.perMode.paused.okUnexpected === 0 && + crossNodeCommitted.ok + + const summary = { + runId: run.runId, + scenario: "token_pause_under_load", + tokenAddress, + rpcUrls: targets, + owner, + config: { + prePauseSec, + pausedSec, + postUnpauseSec, + concurrency, + avoidSelfRecipient, + transitionTimeoutSec, + transitionPollMs, + crossNodeTimeoutSec: envInt("CROSS_NODE_TIMEOUT_SEC", 900), + crossNodePollMs: envInt("CROSS_NODE_POLL_MS", 1000), + }, + txs: { + pauseTx, + unpauseTx, + pausedTransfer, + pausedMint, + pausedBurn, + }, + liveTransitions: { + pausedLive, + unpausedLive, + }, + settle: { + mempoolDrain, + blockSkew, + committedReady, + }, + counters: { + startedAtMs: counters.startedAtMs, + endedAtMs: counters.endedAtMs, + durationMs: counters.endedAtMs - counters.startedAtMs, + perMode: counters.perMode, + }, + crossNodeCommitted, + ok, + timestamp: new Date().toISOString(), + } + + writeJson(`${artifactBase}.summary.json`, summary) + console.log(JSON.stringify({ token_pause_under_load_summary: summary }, null, 2)) + + if (!ok) { + throw new Error(`token_pause_under_load failed (see summary): ${artifactBase}.summary.json`) + } + } catch (err: any) { + const summaryPath = `${artifactBase}.summary.json` + if (!fs.existsSync(summaryPath)) { + const summary = { + runId: run.runId, + scenario: "token_pause_under_load", + ok: false, + rpcUrls: targets, + owner, + error: err instanceof Error ? err.message : String(err), + timestamp: new Date().toISOString(), + } + writeJson(summaryPath, summary) + console.log(JSON.stringify({ token_pause_under_load_summary: summary }, null, 2)) + } + throw err + } +} diff --git a/better_testing/loadgen/src/token_query_coverage.ts b/better_testing/loadgen/src/token_query_coverage.ts new file mode 100644 index 000000000..21da4492a --- /dev/null +++ b/better_testing/loadgen/src/token_query_coverage.ts @@ -0,0 +1,239 @@ +import { + ensureTokenAndBalances, + getTokenTargets, + getWalletAddresses, + maybeSilenceConsole, + nodeCall, + readWalletMnemonics, + waitForCrossNodeTokenConsistency, + waitForRpcReady, + waitForTxReady, +} from "./token_shared" +import { getRunConfig, writeJson } from "./run_io" + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function normalizeRpcUrl(url: string): string { + return url.replace(/\/+$/, "") + "/" +} + +function normalizeHexAddress(address: string): string { + const trimmed = (address ?? "").trim() + if (!trimmed) return trimmed + return trimmed.startsWith("0x") ? trimmed.toLowerCase() : ("0x" + trimmed).toLowerCase() +} + +function parseBigintOrZero(value: any): bigint { + try { + if (typeof value === "bigint") return value + if (typeof value === "number" && Number.isFinite(value)) return BigInt(value) + if (typeof value === "string") return BigInt(value) + } catch { + // ignore + } + return 0n +} + +type PerNodeReport = { + rpcUrl: string + tokenGet: any + tokenGetMissing: any + balances: Record + holderPointers: Record< + string, + { result: any; tokenCount: number | null; hasPointer: boolean | null; rawError?: any } + > + callViewNoScript: { result: any; error: string | null; message: string | null } + assertions: { + tokenGetOk: boolean + tokenGetMissing404: boolean + balancesOk: boolean + holderPointersOk: boolean + callViewNoScriptOk: boolean + } +} + +export async function runTokenQueryCoverage() { + maybeSilenceConsole() + + const targets = getTokenTargets().map(normalizeRpcUrl) + const rpcUrl = targets[0]! + + const wallets = await readWalletMnemonics() + if (wallets.length < 2) throw new Error("token_query_coverage requires at least 2 wallets") + + await waitForRpcReady(rpcUrl, envInt("WAIT_FOR_RPC_SEC", 120)) + await waitForTxReady(rpcUrl, envInt("WAIT_FOR_TX_SEC", 120)) + + const walletAddresses = await getWalletAddresses(rpcUrl, wallets.slice(0, 4)) + const normalizedAddresses = walletAddresses.map(normalizeHexAddress) + + const { tokenAddress } = await ensureTokenAndBalances(rpcUrl, wallets[0]!, walletAddresses) + + const token = await nodeCall(rpcUrl, "token.get", { tokenAddress }, "baseline:token.get") + if (token?.result !== 200) { + throw new Error(`token.get failed on baseline node: ${JSON.stringify(token)}`) + } + + const expectedMeta = { + name: token?.response?.metadata?.name ?? null, + ticker: token?.response?.metadata?.ticker ?? null, + decimals: token?.response?.metadata?.decimals ?? null, + hasScript: token?.response?.metadata?.hasScript ?? null, + } + + const expectedBalances: Record = {} + for (const a of normalizedAddresses) { + const bal = await nodeCall(rpcUrl, "token.getBalance", { tokenAddress, address: a }, `baseline:bal:${a}`) + if (bal?.result !== 200) throw new Error(`token.getBalance failed on baseline node: ${JSON.stringify(bal)}`) + expectedBalances[a] = String(bal?.response?.balance ?? "0") + } + + const crossNode = await waitForCrossNodeTokenConsistency({ + rpcUrls: targets, + tokenAddress, + addresses: normalizedAddresses, + timeoutSec: envInt("CROSS_NODE_TIMEOUT_SEC", 180), + pollMs: envInt("CROSS_NODE_POLL_MS", 500), + }) + + const missingTokenAddress = + normalizeHexAddress(process.env.MISSING_TOKEN_ADDRESS ?? "0x" + "11".repeat(32)) + + const perNode: PerNodeReport[] = [] + for (const target of targets) { + const tokenGet = await nodeCall(target, "token.get", { tokenAddress }, `token.get:${tokenAddress}`) + const tokenGetMissing = await nodeCall(target, "token.get", { tokenAddress: missingTokenAddress }, `token.get:missing`) + + const balances: Record = {} + for (const a of normalizedAddresses) { + const res = await nodeCall(target, "token.getBalance", { tokenAddress, address: a }, `token.getBalance:${a}`) + balances[a] = { + result: res?.result ?? null, + balance: res?.result === 200 ? (res?.response?.balance ?? null) : null, + raw: res?.result === 200 ? undefined : res, + } + } + + const holderPointers: Record = {} + for (const a of normalizedAddresses) { + const res = await nodeCall(target, "token.getHolderPointers", { address: a }, `token.getHolderPointers:${a}`) + if (res?.result !== 200) { + holderPointers[a] = { result: res?.result ?? null, tokenCount: null, hasPointer: null, rawError: res } + continue + } + + const tokens = Array.isArray(res?.response?.tokens) ? res.response.tokens : [] + const hasPointer = tokens + .map((t: any) => (typeof t === "string" ? normalizeHexAddress(t) : normalizeHexAddress(t?.tokenAddress))) + .includes(normalizeHexAddress(tokenAddress)) + holderPointers[a] = { result: res?.result ?? null, tokenCount: tokens.length, hasPointer } + } + + const callViewNoScript = await nodeCall( + target, + "token.callView", + { tokenAddress, method: "name", args: [] }, + `token.callView:${tokenAddress}:name`, + ) + + const tokenGetOk = + tokenGet?.result === 200 && + tokenGet?.response?.tokenAddress === tokenAddress && + (tokenGet?.response?.metadata?.name ?? null) === expectedMeta.name && + (tokenGet?.response?.metadata?.ticker ?? null) === expectedMeta.ticker && + (tokenGet?.response?.metadata?.decimals ?? null) === expectedMeta.decimals && + (tokenGet?.response?.metadata?.hasScript ?? null) === expectedMeta.hasScript + + const tokenGetMissing404 = tokenGetMissing?.result === 404 + + let balancesOk = true + for (const a of normalizedAddresses) { + const one = balances[a] + const got = String(one?.balance ?? "0") + if (one?.result !== 200 || got !== expectedBalances[a]) { + balancesOk = false + break + } + } + + let holderPointersOk = true + for (const a of normalizedAddresses) { + const bal = parseBigintOrZero(expectedBalances[a]) + const shouldHave = bal > 0n + const holder = holderPointers[a] + if (holder?.result !== 200) { + holderPointersOk = false + break + } + if (holder?.hasPointer !== shouldHave) { + holderPointersOk = false + break + } + } + + const callViewNoScriptOk = + expectedMeta.hasScript === false + ? callViewNoScript?.result === 400 && callViewNoScript?.response?.error === "NO_SCRIPT" + : true + + perNode.push({ + rpcUrl: target, + tokenGet, + tokenGetMissing, + balances, + holderPointers, + callViewNoScript: { + result: callViewNoScript?.result ?? null, + error: callViewNoScript?.response?.error ?? null, + message: callViewNoScript?.response?.message ?? null, + }, + assertions: { + tokenGetOk, + tokenGetMissing404, + balancesOk, + holderPointersOk, + callViewNoScriptOk, + }, + }) + } + + const ok = + crossNode.ok && + perNode.every(n => + n.assertions.tokenGetOk && + n.assertions.tokenGetMissing404 && + n.assertions.balancesOk && + n.assertions.holderPointersOk && + n.assertions.callViewNoScriptOk, + ) + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_query_coverage` + const summary = { + runId: run.runId, + scenario: "token_query_coverage", + tokenAddress, + rpcUrls: targets, + addresses: normalizedAddresses, + expectedMeta, + expectedBalances, + missingTokenAddress, + crossNode, + perNode, + ok, + timestamp: new Date().toISOString(), + } + + writeJson(`${artifactBase}.summary.json`, summary) + console.log(JSON.stringify({ token_query_coverage_summary: summary }, null, 2)) + + if (!ok) { + throw new Error("token_query_coverage failed (one or more node read APIs diverged or assertions failed)") + } +} diff --git a/better_testing/loadgen/src/token_script_burn_loadgen.ts b/better_testing/loadgen/src/token_script_burn_loadgen.ts new file mode 100644 index 000000000..8b46659a6 --- /dev/null +++ b/better_testing/loadgen/src/token_script_burn_loadgen.ts @@ -0,0 +1,432 @@ +import { Demos } from "@kynesyslabs/demosdk/websdk" +import { uint8ArrayToHex } from "@kynesyslabs/demosdk/encryption" +import { appendJsonl, getRunConfig, writeJson } from "./run_io" +import { + ensureTokenAndBalances, + getTokenTargets, + getWalletAddresses, + maybeSilenceConsole, + readWalletMnemonics, + sendTokenBurnTxWithDemos, + waitForCrossNodeHolderPointersMatchBalances, + waitForCrossNodeTokenConsistency, + waitForRpcReady, + waitForTxReady, +} from "./token_shared" +import { maybeUpgradeScript } from "./token_script_perf_shared" + +type LoadgenConfig = { + targets: string[] + durationSec: number + concurrency: number + amount: bigint + sampleLimit: number + inflightPerWallet: number + emitTimeseries: boolean + scriptWorkIters: number + scriptSetStorage: boolean + scriptUpgrade: boolean + scriptForceUpgrade: boolean +} + +type Counters = { + startedAtMs: number + endedAtMs: number + total: number + ok: number + error: number + errorSamples: Record +} + +type TimeseriesPoint = { + tSec: number + ok: number + total: number + error: number + tpsOk: number + latencyMs: { sampleCount: number; p50: number; p95: number; p99: number } + timestamp: string +} + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function envBool(name: string, fallback: boolean): boolean { + const raw = process.env[name] + if (!raw) return fallback + switch (raw.trim().toLowerCase()) { + case "1": + case "true": + case "yes": + case "y": + case "on": + return true + case "0": + case "false": + case "no": + case "n": + case "off": + return false + default: + return fallback + } +} + +function nowMs(): number { + return Date.now() +} + +function unique(values: string[]): string[] { + return Array.from(new Set(values)) +} + +function percentile(sorted: number[], p: number): number { + if (sorted.length === 0) return NaN + const idx = Math.min( + sorted.length - 1, + Math.max(0, Math.floor((p / 100) * (sorted.length - 1))), + ) + return sorted[idx]! +} + +class ReservoirSampler { + private seen = 0 + private readonly max: number + private readonly samples: number[] = [] + + constructor(maxSamples: number) { + this.max = Math.max(1, Math.floor(maxSamples)) + } + + add(value: number) { + this.seen++ + if (this.samples.length < this.max) { + this.samples.push(value) + return + } + const j = Math.floor(Math.random() * this.seen) + if (j < this.max) this.samples[j] = value + } + + snapshotSorted(): number[] { + const copy = this.samples.slice() + copy.sort((a, b) => a - b) + return copy + } + + size(): number { + return this.samples.length + } +} + +function getConfig(): LoadgenConfig { + const targets = getTokenTargets() + return { + targets, + durationSec: envInt("DURATION_SEC", 30), + concurrency: envInt("CONCURRENCY", Math.max(1, targets.length)), + amount: BigInt(process.env.TOKEN_BURN_AMOUNT ?? process.env.AMOUNT ?? "1"), + sampleLimit: envInt("SAMPLE_LIMIT", 200_000), + inflightPerWallet: Math.max(1, envInt("INFLIGHT_PER_WALLET", 1)), + emitTimeseries: envBool("EMIT_TIMESERIES", true), + scriptWorkIters: Math.max(0, envInt("SCRIPT_WORK_ITERS", 0)), + scriptSetStorage: envBool("SCRIPT_SET_STORAGE", false), + scriptUpgrade: envBool("TOKEN_SCRIPT_UPGRADE", true), + scriptForceUpgrade: envBool("TOKEN_SCRIPT_FORCE_UPGRADE", false), + } +} + +async function worker(params: { + cfg: LoadgenConfig + counters: Counters + sampler: ReservoirSampler + timeseriesSampler: ReservoirSampler + stopAtMs: number + ownerMnemonic: string + workerId: number + tokenAddress: string + fromAddress: string + allocateNonce: () => number +}) { + const { cfg } = params + const rpcUrl = cfg.targets[params.workerId % cfg.targets.length]! + const demos = new Demos() + await waitForRpcReady(rpcUrl, envInt("WAIT_FOR_RPC_SEC", 120)) + await waitForTxReady(rpcUrl, envInt("WAIT_FOR_TX_SEC", 120)) + await demos.connect(rpcUrl) + await demos.connectWallet(params.ownerMnemonic, { algorithm: "ed25519" }) + + async function sendOne() { + const start = performance.now() + params.counters.total++ + try { + const nonce = params.allocateNonce() + const { res } = await sendTokenBurnTxWithDemos({ + demos, + tokenAddress: params.tokenAddress, + from: params.fromAddress, + amount: cfg.amount, + nonce, + }) + if (res?.result !== 200) { + throw new Error(`tx rejected: ${JSON.stringify(res)}`) + } + const elapsed = performance.now() - start + params.sampler.add(elapsed) + params.timeseriesSampler.add(elapsed) + params.counters.ok++ + } catch (err: any) { + const elapsed = performance.now() - start + params.sampler.add(elapsed) + params.timeseriesSampler.add(elapsed) + params.counters.error++ + const key = String(err?.message ?? err ?? "unknown").slice(0, 400) + params.counters.errorSamples[key] = (params.counters.errorSamples[key] ?? 0) + 1 + } + } + + const inflight = Math.max(1, cfg.inflightPerWallet) + const active = new Set>() + + function launchOne() { + const p = sendOne().finally(() => { + active.delete(p) + }) + active.add(p) + } + + while (nowMs() < params.stopAtMs) { + while (active.size < inflight && nowMs() < params.stopAtMs) { + launchOne() + } + if (active.size === 0) break + await Promise.race(Array.from(active)) + } + + await Promise.allSettled(Array.from(active)) +} + +export async function runTokenScriptBurnLoadgen() { + maybeSilenceConsole() + const wallets = await readWalletMnemonics() + if (wallets.length === 0) throw new Error("No wallets found. Set WALLETS or MNEMONICS_DIR/WALLET_FILES.") + + const ownerMnemonic = wallets[0]! + const cfg = getConfig() + + const bootstrapRpc = cfg.targets[0]! + const allWalletAddresses = await getWalletAddresses(bootstrapRpc, wallets) + const ownerAddress = allWalletAddresses[0]! + + const { tokenAddress } = await ensureTokenAndBalances(bootstrapRpc, ownerMnemonic, allWalletAddresses) + + const script = await maybeUpgradeScript({ + rpcUrl: bootstrapRpc, + rpcUrls: cfg.targets, + ownerMnemonic, + ownerAddress, + tokenAddress, + workIters: cfg.scriptWorkIters, + setStorage: cfg.scriptSetStorage, + upgrade: cfg.scriptUpgrade, + force: cfg.scriptForceUpgrade, + }) + + const nonceDemos = new Demos() + await waitForRpcReady(bootstrapRpc, envInt("WAIT_FOR_RPC_SEC", 120)) + await waitForTxReady(bootstrapRpc, envInt("WAIT_FOR_TX_SEC", 120)) + await nonceDemos.connect(bootstrapRpc) + await nonceDemos.connectWallet(ownerMnemonic, { algorithm: "ed25519" }) + const sender = (await nonceDemos.crypto.getIdentity("ed25519")).publicKey + const senderHex = uint8ArrayToHex(sender) + const currentNonce = await nonceDemos.getAddressNonce(senderHex) + let nextNonce = Number(currentNonce) + 1 + const allocateNonce = () => nextNonce++ + + const startedAtMs = nowMs() + const stopAtMs = startedAtMs + cfg.durationSec * 1000 + + const counters: Counters = { + startedAtMs, + endedAtMs: 0, + total: 0, + ok: 0, + error: 0, + errorSamples: {}, + } + + const sampler = new ReservoirSampler(cfg.sampleLimit) + const timeseriesSampler = new ReservoirSampler(50_000) + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_script_burn` + const artifacts = { + runId: run.runId, + runDir: run.runDir, + summaryPath: `${artifactBase}.summary.json`, + timeseriesPath: `${artifactBase}.timeseries.jsonl`, + } + + let lastPointAtMs = startedAtMs + let lastOk = 0 + let lastTotal = 0 + let lastError = 0 + + async function timeseriesLoop() { + if (!cfg.emitTimeseries) return + while (nowMs() < stopAtMs) { + await sleep(1000) + const now = nowMs() + const elapsedSinceLast = Math.max(0.001, (now - lastPointAtMs) / 1000) + lastPointAtMs = now + + const okDelta = counters.ok - lastOk + const totalDelta = counters.total - lastTotal + const errorDelta = counters.error - lastError + + lastOk = counters.ok + lastTotal = counters.total + lastError = counters.error + + const samples = timeseriesSampler.snapshotSorted() + const point: TimeseriesPoint = { + tSec: (now - startedAtMs) / 1000, + ok: okDelta, + total: totalDelta, + error: errorDelta, + tpsOk: okDelta / elapsedSinceLast, + latencyMs: { + sampleCount: timeseriesSampler.size(), + p50: percentile(samples, 50), + p95: percentile(samples, 95), + p99: percentile(samples, 99), + }, + timestamp: new Date().toISOString(), + } + + appendJsonl(artifacts.timeseriesPath, point) + } + } + + const effectiveConc = Math.max(1, cfg.concurrency) + + await Promise.all( + [ + ...Array.from({ length: effectiveConc }).map((_, idx) => + worker({ + cfg, + counters, + sampler, + timeseriesSampler, + stopAtMs, + ownerMnemonic, + workerId: idx, + tokenAddress, + fromAddress: senderHex, + allocateNonce, + }), + ), + timeseriesLoop(), + ], + ) + + counters.endedAtMs = nowMs() + + const postRunSettleCheck = envBool("POST_RUN_SETTLE_CHECK", true) + const settleSample = unique([senderHex, ...allWalletAddresses]).slice(0, envInt("POST_RUN_SETTLE_SAMPLE_ADDRESSES", 8)) + + const postRunSettle = postRunSettleCheck + ? await waitForCrossNodeTokenConsistency({ + rpcUrls: cfg.targets, + tokenAddress, + addresses: settleSample, + timeoutSec: envInt("POST_RUN_SETTLE_TIMEOUT_SEC", 120), + pollMs: envInt("POST_RUN_SETTLE_POLL_MS", 500), + }) + : null + + const holderPointerSettleCheck = envBool("POST_RUN_HOLDER_POINTER_CHECK", true) + const expectedPresent: Record = {} + if (postRunSettle?.ok && postRunSettle.perNode?.[0]?.snapshot?.balances) { + for (const [addr, balRaw] of Object.entries(postRunSettle.perNode[0].snapshot.balances)) { + try { + expectedPresent[addr] = BigInt(balRaw ?? "0") > 0n + } catch { + expectedPresent[addr] = false + } + } + } + + const holderPointerSettle = + holderPointerSettleCheck && Object.keys(expectedPresent).length > 0 + ? await waitForCrossNodeHolderPointersMatchBalances({ + rpcUrls: cfg.targets, + tokenAddress, + expectedPresent, + timeoutSec: envInt("POST_RUN_HOLDER_POINTER_TIMEOUT_SEC", 120), + pollMs: envInt("POST_RUN_HOLDER_POINTER_POLL_MS", 500), + }) + : null + + const durationSec = (counters.endedAtMs - counters.startedAtMs) / 1000 + const samples = sampler.snapshotSorted() + const summary = { + scenario: "token_script_burn", + tokenAddress, + script: { + tokenScriptUpgrade: cfg.scriptUpgrade, + tokenScriptForceUpgrade: cfg.scriptForceUpgrade, + workIters: cfg.scriptWorkIters, + setStorage: cfg.scriptSetStorage, + upgrade: script, + }, + ok: counters.ok, + total: counters.total, + error: counters.error, + errorSamples: counters.errorSamples, + durationSec, + okTps: counters.ok / Math.max(0.001, durationSec), + latencyMs: { + sampleCount: sampler.size(), + p50: percentile(samples, 50), + p95: percentile(samples, 95), + p99: percentile(samples, 99), + }, + config: { + targets: cfg.targets, + concurrency: effectiveConc, + inflightPerWallet: cfg.inflightPerWallet, + amount: cfg.amount.toString(), + waitForRpcSec: envInt("WAIT_FOR_RPC_SEC", 120), + tokenBootstrap: envBool("TOKEN_BOOTSTRAP", true), + tokenDistribute: envBool("TOKEN_DISTRIBUTE", true), + }, + postRun: { + settleSample, + settle: postRunSettle, + holderPointers: holderPointerSettle, + }, + artifacts, + timestamp: new Date().toISOString(), + } + + writeJson(artifacts.summaryPath, summary) + console.log(JSON.stringify({ token_script_burn_summary: summary }, null, 2)) + + const strict = envBool("POST_RUN_SETTLE_STRICT", false) + if (strict && postRunSettleCheck && postRunSettle && !postRunSettle.ok) { + throw new Error("Post-run settle check failed (token_script_burn)") + } + const strictPointers = envBool("POST_RUN_HOLDER_POINTER_STRICT", false) + if (strictPointers && holderPointerSettleCheck && holderPointerSettle && !holderPointerSettle.ok) { + throw new Error("Post-run holder-pointer check failed (token_script_burn)") + } +} diff --git a/better_testing/loadgen/src/token_script_burn_ramp.ts b/better_testing/loadgen/src/token_script_burn_ramp.ts new file mode 100644 index 000000000..4c6182c71 --- /dev/null +++ b/better_testing/loadgen/src/token_script_burn_ramp.ts @@ -0,0 +1,153 @@ +import { runTokenScriptBurnLoadgen } from "./token_script_burn_loadgen" +import { getRunConfig, writeJson } from "./run_io" + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function splitCsv(value: string | undefined): string[] { + return (value ?? "") + .split(",") + .map(s => s.trim()) + .filter(Boolean) +} + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +export async function runTokenScriptBurnRamp() { + const rampConcurrency = splitCsv(process.env.RAMP_CONCURRENCY) + .map(s => Number.parseInt(s, 10)) + .filter(n => Number.isFinite(n) && n > 0) + + const rampInflight = splitCsv(process.env.RAMP_INFLIGHT_PER_WALLET) + .map(s => Number.parseInt(s, 10)) + .filter(n => Number.isFinite(n) && n > 0) + + const mode: "concurrency" | "inflight" = rampInflight.length > 0 ? "inflight" : "concurrency" + const stepDurationSec = envInt("STEP_DURATION_SEC", 15) + const cooldownSec = envInt("COOLDOWN_SEC", 3) + + if (mode === "concurrency" && rampConcurrency.length === 0) { + throw new Error("RAMP_CONCURRENCY must be a comma-separated list of positive ints") + } + if (mode === "inflight" && rampInflight.length === 0) { + throw new Error("RAMP_INFLIGHT_PER_WALLET must be a comma-separated list of positive ints") + } + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_script_burn_ramp` + const artifacts = { + runId: run.runId, + runDir: run.runDir, + summaryPath: `${artifactBase}.summary.json`, + } + + const results: any[] = [] + let reuseTokenAddress: string | null = null + + const fixedConcurrency = envInt("CONCURRENCY", 4) + const fixedInflight = envInt("INFLIGHT_PER_WALLET", 1) + + const steps = + mode === "inflight" + ? rampInflight.map(inflight => ({ concurrency: fixedConcurrency, inflightPerWallet: inflight })) + : rampConcurrency.map(concurrency => ({ concurrency, inflightPerWallet: fixedInflight })) + + for (const step of steps) { + process.env.SCENARIO = "token_script_burn" + process.env.DURATION_SEC = String(stepDurationSec) + process.env.CONCURRENCY = String(step.concurrency) + process.env.INFLIGHT_PER_WALLET = String(step.inflightPerWallet) + + if (reuseTokenAddress) { + process.env.TOKEN_ADDRESS = reuseTokenAddress + process.env.TOKEN_BOOTSTRAP = "false" + process.env.TOKEN_DISTRIBUTE = "false" + process.env.TOKEN_WAIT_DISTRIBUTION = "false" + process.env.TOKEN_SCRIPT_UPGRADE = "false" + } else { + if (!process.env.TOKEN_BOOTSTRAP) process.env.TOKEN_BOOTSTRAP = "true" + if (!process.env.TOKEN_SCRIPT_UPGRADE) process.env.TOKEN_SCRIPT_UPGRADE = "true" + } + + let stepSummary: any = null + let stepError: any = null + + const originalLog = console.log + const capture: any[] = [] + console.log = (...args: any[]) => { + capture.push(args) + originalLog(...args) + } + + try { + await runTokenScriptBurnLoadgen() + for (const row of capture) { + const payload = row?.[0] + if (payload && typeof payload === "string") { + try { + const parsed = JSON.parse(payload) + if (parsed?.token_script_burn_summary) stepSummary = parsed.token_script_burn_summary + } catch { + // ignore + } + } else if (payload?.token_script_burn_summary) { + stepSummary = payload.token_script_burn_summary + } + } + if (!reuseTokenAddress && stepSummary?.tokenAddress) { + reuseTokenAddress = String(stepSummary.tokenAddress) + } + } catch (err: any) { + stepError = { message: err?.message ?? String(err) } + } finally { + console.log = originalLog + } + + results.push({ + concurrency: step.concurrency, + inflightPerWallet: step.inflightPerWallet, + stepDurationSec, + cooldownSec, + summary: stepSummary, + error: stepError, + }) + + if (cooldownSec > 0) await sleep(cooldownSec * 1000) + } + + const okSteps = results + .map(r => ({ concurrency: r.concurrency, inflightPerWallet: r.inflightPerWallet, okTps: r.summary?.okTps })) + .filter(r => typeof r.okTps === "number") + + const best = okSteps.sort((a, b) => (b.okTps ?? 0) - (a.okTps ?? 0))[0] ?? null + + const rampSummary = { + scenario: "token_script_burn_ramp", + mode, + bestByOkTps: best, + steps: results, + config: { + rampConcurrency: rampConcurrency.length > 0 ? rampConcurrency : null, + rampInflightPerWallet: rampInflight.length > 0 ? rampInflight : null, + fixedConcurrency, + fixedInflightPerWallet: fixedInflight, + stepDurationSec, + cooldownSec, + tokenBurnAmount: process.env.TOKEN_BURN_AMOUNT ?? process.env.AMOUNT ?? "1", + scriptWorkIters: process.env.SCRIPT_WORK_ITERS ?? "0", + scriptSetStorage: process.env.SCRIPT_SET_STORAGE ?? "false", + }, + artifacts, + timestamp: new Date().toISOString(), + } + + writeJson(artifacts.summaryPath, rampSummary) + console.log(JSON.stringify({ token_script_burn_ramp_summary: rampSummary }, null, 2)) +} + diff --git a/better_testing/loadgen/src/token_script_complex_policy_dynamic_updates.ts b/better_testing/loadgen/src/token_script_complex_policy_dynamic_updates.ts new file mode 100644 index 000000000..3706bcdb3 --- /dev/null +++ b/better_testing/loadgen/src/token_script_complex_policy_dynamic_updates.ts @@ -0,0 +1,603 @@ +import { + buildSignedTokenTransferTxWithDemos, + ensureTokenAndBalances, + getTokenTargets, + getWalletAddresses, + maybeSilenceConsole, + nodeCall, + readWalletMnemonics, + sendTokenTransferTxWithDemos, + sendTokenUpgradeScriptTxWithDemos, + withDemosWallet, +} from "./token_shared" +import { createHash } from "crypto" +import { getRunConfig, writeJson } from "./run_io" +import { buildComplexPolicyScript } from "./token_script_complex_policy_shared" + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function normalizeRpcUrl(url: string): string { + return url.replace(/\/+$/, "") + "/" +} + +function normalizeHexAddress(address: string): string { + const trimmed = (address ?? "").trim() + if (!trimmed) return trimmed + return trimmed.startsWith("0x") ? trimmed.toLowerCase() : ("0x" + trimmed).toLowerCase() +} + +function sortObjectDeep(value: any): any { + if (Array.isArray(value)) return value.map(sortObjectDeep) + if (!value || typeof value !== "object") return value + const out: Record = {} + for (const key of Object.keys(value).sort()) out[key] = sortObjectDeep((value as any)[key]) + return out +} + +function sha256Hex(input: string): string { + return createHash("sha256").update(input).digest("hex") +} + +function stableHashJson(value: any): string { + return sha256Hex(JSON.stringify(sortObjectDeep(value))) +} + +function stringifyJson(value: unknown) { + return JSON.stringify(value, (_key, v) => (typeof v === "bigint" ? v.toString() : v), 2) +} + +function rejectHaystack(res: any): string { + const pieces: string[] = [] + if (typeof res?.extra?.error === "string") pieces.push(res.extra.error) + if (typeof res?.response === "string") pieces.push(res.response) + if (res?.response === false) pieces.push("false") + if (typeof res?.message === "string") pieces.push(res.message) + if (typeof res?.response?.message === "string") pieces.push(res.response.message) + return pieces.join(" ").toLowerCase() +} + +function extractRejectSignature(res: any): string | null { + const text = rejectHaystack(res) + for (const k of ["denylist", "not_allowlisted", "quota", "amount_limit", "zero_amount"]) { + if (text.includes(k)) return k + } + if (text.includes("rejected")) return "rejected" + return null +} + +function assertRejected(res: any, expectedMessageSubstring: string) { + if (res?.result === 200) { + throw new Error(`Expected rejection but got result=200: ${JSON.stringify(res)}`) + } + const text = rejectHaystack(res) + if (!text.includes(expectedMessageSubstring.toLowerCase())) { + throw new Error(`Expected error to include "${expectedMessageSubstring}" but got: ${JSON.stringify(res)}`) + } +} + +function parseBigintOrZero(value: any): bigint { + try { + if (typeof value === "bigint") return value + if (typeof value === "number" && Number.isFinite(value)) return BigInt(value) + if (typeof value === "string") return BigInt(value) + } catch { + // ignore + } + return 0n +} + +async function waitForConsensusRounds(params: { rpcUrls: string[]; rounds: number; timeoutSec: number; pollMs: number }) { + const deadlineMs = Date.now() + Math.max(1, params.timeoutSec) * 1000 + const start: Record = {} + + for (const rpcUrl of params.rpcUrls) { + const res = await nodeCall(rpcUrl, "getLastBlockNumber", {}, `getLastBlockNumber:start:${rpcUrl}`) + const raw = res?.response + start[rpcUrl] = typeof raw === "number" ? raw : typeof raw === "string" ? Number.parseInt(raw, 10) : null + } + + while (Date.now() < deadlineMs) { + let allOk = true + for (const rpcUrl of params.rpcUrls) { + const base = start[rpcUrl] + const res = await nodeCall(rpcUrl, "getLastBlockNumber", {}, `getLastBlockNumber:poll:${rpcUrl}`) + const raw = res?.response + const current = typeof raw === "number" ? raw : typeof raw === "string" ? Number.parseInt(raw, 10) : null + const ok = typeof base === "number" && typeof current === "number" && current >= base + params.rounds + if (!ok) allOk = false + } + if (allOk) return { ok: true, start } + await sleep(Math.max(100, Math.floor(params.pollMs))) + } + + return { ok: false, start } +} + +async function callView(rpcUrl: string, tokenAddress: string, method: string, args: any[]) { + return await nodeCall(rpcUrl, "token.callView", { tokenAddress, method, args }, `token.callView:${method}`) +} + +async function getBalance(rpcUrl: string, tokenAddress: string, address: string): Promise { + const res = await nodeCall(rpcUrl, "token.getBalance", { tokenAddress, address }, `token.getBalance:${address}`) + if (res?.result !== 200) throw new Error(`token.getBalance failed: ${JSON.stringify(res)}`) + return parseBigintOrZero(res?.response?.balance) +} + +async function tokenGetCommittedWithFallback(rpcUrl: string, tokenAddress: string): Promise { + const committed = await nodeCall( + rpcUrl, + "token.getCommitted", + { tokenAddress }, + `token.getCommitted:dyn_policy:${rpcUrl.replace(/[^a-z0-9]+/gi, "_")}`, + ) + if (committed?.result === 409) { + return await nodeCall( + rpcUrl, + "token.get", + { tokenAddress }, + `token.get:fallback:dyn_policy:${rpcUrl.replace(/[^a-z0-9]+/gi, "_")}`, + ) + } + return committed +} + +function assertPolicyHas(value: any, expect: { denyHas?: string; allowHas?: string; allowMissing?: string; quotaPerBucket?: number }) { + const policy = value?.policy + if (!policy) throw new Error(`getPolicy missing policy: ${JSON.stringify(value)}`) + if (expect.denyHas) { + const deny = Array.isArray(policy.denylist) ? policy.denylist.map(normalizeHexAddress) : [] + if (!deny.includes(normalizeHexAddress(expect.denyHas))) { + throw new Error(`Expected denylist to include ${expect.denyHas} but got: ${JSON.stringify(policy.denylist)}`) + } + } + if (expect.allowHas) { + const allow = Array.isArray(policy.allowlist) ? policy.allowlist.map(normalizeHexAddress) : [] + if (!allow.includes(normalizeHexAddress(expect.allowHas))) { + throw new Error(`Expected allowlist to include ${expect.allowHas} but got: ${JSON.stringify(policy.allowlist)}`) + } + } + if (expect.allowMissing) { + const allow = Array.isArray(policy.allowlist) ? policy.allowlist.map(normalizeHexAddress) : [] + if (allow.includes(normalizeHexAddress(expect.allowMissing))) { + throw new Error(`Expected allowlist to NOT include ${expect.allowMissing} but got: ${JSON.stringify(policy.allowlist)}`) + } + } + if (typeof expect.quotaPerBucket === "number") { + const quota = Number(policy.quotaPerBucket ?? 0) + if (quota !== expect.quotaPerBucket) { + throw new Error(`Expected quotaPerBucket=${expect.quotaPerBucket} but got ${quota}: ${JSON.stringify(policy)}`) + } + } +} + +export async function runTokenScriptComplexPolicyDynamicUpdates() { + maybeSilenceConsole() + + const targets = getTokenTargets().map(normalizeRpcUrl) + const rpcUrl = targets[0]! + + const wallets = await readWalletMnemonics() + if (wallets.length < 3) throw new Error("token_script_complex_policy_dynamic_updates requires 3 wallets (owner, other, attacker)") + const ownerMnemonic = wallets[0]! + const otherMnemonic = wallets[1]! + const attackerMnemonic = wallets[2]! + + const walletAddresses = (await getWalletAddresses(rpcUrl, [ownerMnemonic, otherMnemonic, attackerMnemonic])).map(normalizeHexAddress) + const owner = walletAddresses[0]! + const other = walletAddresses[1]! + const attacker = walletAddresses[2]! + + const { tokenAddress } = await ensureTokenAndBalances(rpcUrl, ownerMnemonic, walletAddresses) + + const commandBase = 9_000_000n + const cmdDenyAttacker = commandBase + 1n + const cmdClearDeny = commandBase + 2n + const cmdAllowNoAttacker = commandBase + 3n + const cmdAllowWithAttacker = commandBase + 4n + const cmdQuota1 = commandBase + 5n + const cmdQuota3 = commandBase + 6n + + const scriptCode = buildComplexPolicyScript({ + allowlist: [owner, other, attacker], + denylist: [], + quotaPerBucket: 3, + bucketMs: 60_000, + amountLimit: 20_000_000n, + feeThreshold: 10n, + feeFixed: 1n, + feeSink: owner, + dynamicPolicy: { + admin: owner, + commandBase, + presets: { + "1": { denylist: [attacker] }, + "2": { denylist: [] }, + "3": { allowlist: [owner, other] }, + "4": { allowlist: [owner, other, attacker] }, + "5": { quotaPerBucket: 1 }, + "6": { quotaPerBucket: 3 }, + }, + }, + }) + + const upgrade = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== owner) throw new Error(`owner identity mismatch: ${fromHex} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenUpgradeScriptTxWithDemos({ + demos, + tokenAddress, + scriptCode, + methodNames: ["ping", "getHookCounts", "getPolicy", "getSenderStats"], + nonce, + }) + }, + }) + + const waitAfterUpgrade = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitAfterUpgrade.ok) throw new Error("Consensus wait failed after upgradeScript") + + // Baseline: attacker transfer should be OK (allowlisted, not denied). + const attackerOk1 = await withDemosWallet({ + rpcUrl, + mnemonic: attackerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== attacker) throw new Error(`attacker identity mismatch: ${fromHex} !== ${attacker}`) + const nonce = Number(await demos.getAddressNonce(attacker)) + 1 + return await sendTokenTransferTxWithDemos({ demos, tokenAddress, to: other, amount: 1n, nonce }) + }, + }) + if ((attackerOk1 as any)?.res?.result !== 200) throw new Error(`Expected attacker ok transfer but got: ${JSON.stringify(attackerOk1)}`) + + const waitAfterBaseline = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitAfterBaseline.ok) throw new Error("Consensus wait failed after baseline transfer") + + async function sendAdminCommand(amount: bigint) { + return await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== owner) throw new Error(`owner identity mismatch: ${fromHex} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenTransferTxWithDemos({ demos, tokenAddress, to: owner, amount, nonce }) + }, + }) + } + + async function assertPolicyDeterministic(expect: Parameters[1]) { + const perNode: Record = {} + const policyHashPerNode: Record = {} + const storageHashPerNode: Record = {} + for (const url of targets) { + const policyRes = await callView(url, tokenAddress, "getPolicy", []) + perNode[url] = policyRes + if (policyRes?.result !== 200) throw new Error(`getPolicy failed on ${url}: ${JSON.stringify(policyRes)}`) + const value = policyRes?.response?.value + assertPolicyHas(value, expect) + policyHashPerNode[url] = stableHashJson(value?.policy ?? null) + storageHashPerNode[url] = stableHashJson(value?.storage ?? null) + } + + const first = targets[0]! + for (const url of targets) { + if (policyHashPerNode[url] !== policyHashPerNode[first]) { + throw new Error(`Non-deterministic policy across nodes: ${stringifyJson({ policyHashPerNode, perNode })}`) + } + if (storageHashPerNode[url] !== storageHashPerNode[first]) { + throw new Error(`Non-deterministic storage across nodes: ${stringifyJson({ storageHashPerNode, perNode })}`) + } + } + + return { perNode, policyHashPerNode, storageHashPerNode } + } + + // 1) Deny attacker via admin command. + const cmd1 = await sendAdminCommand(cmdDenyAttacker) + if ((cmd1 as any)?.res?.result !== 200) throw new Error(`Expected admin cmd1 applied: ${JSON.stringify(cmd1)}`) + + const waitAfterCmd1 = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitAfterCmd1.ok) throw new Error("Consensus wait failed after cmd1") + + const polAfterCmd1 = await assertPolicyDeterministic({ denyHas: attacker }) + + // Attacker transfer should now reject on all nodes. + const invalidTx = await withDemosWallet({ + rpcUrl, + mnemonic: attackerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== attacker) throw new Error(`attacker identity mismatch: ${fromHex} !== ${attacker}`) + const nonce = Number(await demos.getAddressNonce(attacker)) + 1 + const timestamp = Date.now() + return await buildSignedTokenTransferTxWithDemos({ demos, tokenAddress, to: other, amount: 1n, nonce, timestamp }) + }, + }) + + const rejectPerNode: Record = {} + for (const url of targets) { + const out = await withDemosWallet({ + rpcUrl: url, + mnemonic: attackerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== attacker) throw new Error(`attacker identity mismatch: ${fromHex} !== ${attacker}`) + const validity = await (demos as any).confirm(invalidTx.signedTx) + const res = await (demos as any).broadcast(validity) + return { validity, res } + }, + }) + rejectPerNode[url] = out + } + + const rejectSignatures = targets.map(url => ({ url, sig: extractRejectSignature(rejectPerNode[url]?.res) })) + const rejectDeterministic = + rejectSignatures.every(e => !!e.sig) && rejectSignatures.every(e => e.sig === rejectSignatures[0]!.sig) + if (!rejectDeterministic) { + throw new Error(`Non-deterministic reject across nodes: ${stringifyJson({ rejectSignatures, rejectPerNode })}`) + } + for (const url of targets) assertRejected(rejectPerNode[url]?.res, "denylist") + + // 2) Clear denylist; attacker becomes OK again. + const cmd2 = await sendAdminCommand(cmdClearDeny) + if ((cmd2 as any)?.res?.result !== 200) throw new Error(`Expected admin cmd2 applied: ${JSON.stringify(cmd2)}`) + + const waitAfterCmd2 = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitAfterCmd2.ok) throw new Error("Consensus wait failed after cmd2") + + const polAfterCmd2 = await assertPolicyDeterministic({ allowHas: attacker }) + + const attackerOk2 = await withDemosWallet({ + rpcUrl, + mnemonic: attackerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== attacker) throw new Error(`attacker identity mismatch: ${fromHex} !== ${attacker}`) + const nonce = Number(await demos.getAddressNonce(attacker)) + 1 + return await sendTokenTransferTxWithDemos({ demos, tokenAddress, to: other, amount: 1n, nonce }) + }, + }) + if ((attackerOk2 as any)?.res?.result !== 200) throw new Error(`Expected attacker ok transfer after clear deny but got: ${JSON.stringify(attackerOk2)}`) + + const waitAfterOk2 = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitAfterOk2.ok) throw new Error("Consensus wait failed after attacker ok2") + + // 3) Remove attacker from allowlist; should reject not_allowlisted. + const cmd3 = await sendAdminCommand(cmdAllowNoAttacker) + if ((cmd3 as any)?.res?.result !== 200) throw new Error(`Expected admin cmd3 applied: ${JSON.stringify(cmd3)}`) + + const waitAfterCmd3 = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitAfterCmd3.ok) throw new Error("Consensus wait failed after cmd3") + + const polAfterCmd3 = await assertPolicyDeterministic({ allowMissing: attacker }) + + const invalidTx2 = await withDemosWallet({ + rpcUrl, + mnemonic: attackerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== attacker) throw new Error(`attacker identity mismatch: ${fromHex} !== ${attacker}`) + const nonce = Number(await demos.getAddressNonce(attacker)) + 1 + const timestamp = Date.now() + return await buildSignedTokenTransferTxWithDemos({ demos, tokenAddress, to: other, amount: 1n, nonce, timestamp }) + }, + }) + + const rejectPerNode2: Record = {} + for (const url of targets) { + const out = await withDemosWallet({ + rpcUrl: url, + mnemonic: attackerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== attacker) throw new Error(`attacker identity mismatch: ${fromHex} !== ${attacker}`) + const validity = await (demos as any).confirm(invalidTx2.signedTx) + const res = await (demos as any).broadcast(validity) + return { validity, res } + }, + }) + rejectPerNode2[url] = out + } + for (const url of targets) assertRejected(rejectPerNode2[url]?.res, "not_allowlisted") + + // 4) Add attacker back to allowlist. + const cmd4 = await sendAdminCommand(cmdAllowWithAttacker) + if ((cmd4 as any)?.res?.result !== 200) throw new Error(`Expected admin cmd4 applied: ${JSON.stringify(cmd4)}`) + + const waitAfterCmd4 = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitAfterCmd4.ok) throw new Error("Consensus wait failed after cmd4") + + const polAfterCmd4 = await assertPolicyDeterministic({ allowHas: attacker }) + + // 5) Update quota to 1 and verify only 1/3 applies (same bucket, sequential nonces). + const cmd5 = await sendAdminCommand(cmdQuota1) + if ((cmd5 as any)?.res?.result !== 200) throw new Error(`Expected admin cmd5 applied: ${JSON.stringify(cmd5)}`) + + const waitAfterCmd5 = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitAfterCmd5.ok) throw new Error("Consensus wait failed after cmd5") + + const polAfterCmd5 = await assertPolicyDeterministic({ quotaPerBucket: 1 }) + + const quotaBefore = { + owner: await getBalance(rpcUrl, tokenAddress, owner), + other: await getBalance(rpcUrl, tokenAddress, other), + } + + const quotaTimestamp = Date.now() + const quotaResults: any[] = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== owner) throw new Error(`owner identity mismatch: ${fromHex} !== ${owner}`) + const baseNonce = Number(await demos.getAddressNonce(owner)) + const out: any[] = [] + for (let i = 0; i < 3; i++) { + const nonce = baseNonce + 1 + i + const tx = await buildSignedTokenTransferTxWithDemos({ + demos, + tokenAddress, + to: other, + amount: 1n, + nonce, + timestamp: quotaTimestamp, + }) + const validity = await (demos as any).confirm(tx.signedTx) + const res = await (demos as any).broadcast(validity) + out.push({ tx, validity, out: res }) + } + return out + }, + }) + + const waitAfterQuota = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitAfterQuota.ok) throw new Error("Consensus wait failed after quota burst") + + const quotaAfter = { + owner: await getBalance(rpcUrl, tokenAddress, owner), + other: await getBalance(rpcUrl, tokenAddress, other), + } + + const ownerDelta = quotaBefore.owner - quotaAfter.owner + const otherDelta = quotaAfter.other - quotaBefore.other + if (ownerDelta !== 1n || otherDelta !== 1n) { + throw new Error( + `Expected quota=1 to apply only 1/3 transfers but got deltas: ${stringifyJson({ + ownerDelta: ownerDelta.toString(), + otherDelta: otherDelta.toString(), + quotaResults: quotaResults.map(r => r?.out), + })}`, + ) + } + + // Reset quota back to 3 for future runs (idempotent). + const cmd6 = await sendAdminCommand(cmdQuota3) + if ((cmd6 as any)?.res?.result !== 200) throw new Error(`Expected admin cmd6 applied: ${JSON.stringify(cmd6)}`) + + const waitAfterCmd6 = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitAfterCmd6.ok) throw new Error("Consensus wait failed after cmd6") + + const polAfterCmd6 = await assertPolicyDeterministic({ quotaPerBucket: 3 }) + + // Supply invariant (per node): totalSupply == sum(balances) + const supplyPerNode: Record = {} + for (const url of targets) { + const tokenGet = await tokenGetCommittedWithFallback(url, tokenAddress) + supplyPerNode[url] = tokenGet + if (tokenGet?.result !== 200) throw new Error(`token.getCommitted failed on ${url}: ${JSON.stringify(tokenGet)}`) + const state = tokenGet?.response?.state ?? {} + const totalSupply = parseBigintOrZero(state?.totalSupply) + const balances = state?.balances ?? {} + let sum = 0n + for (const v of Object.values(balances)) sum += parseBigintOrZero(v) + if (totalSupply !== sum) { + throw new Error( + `Supply invariant failed on ${url}: totalSupply != sum(balances): ${stringifyJson({ + totalSupply: totalSupply.toString(), + sumBalances: sum.toString(), + })}`, + ) + } + } + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_script_complex_policy_dynamic_updates` + const summary = { + runId: run.runId, + scenario: "token_script_complex_policy_dynamic_updates", + tokenAddress, + rpcUrls: targets, + addresses: { owner, other, attacker }, + txs: { + upgrade, + attackerOk1, + cmd1, + cmd2, + attackerOk2, + cmd3, + cmd4, + cmd5, + cmd6, + }, + policySnapshots: { + afterCmd1: polAfterCmd1, + afterCmd2: polAfterCmd2, + afterCmd3: polAfterCmd3, + afterCmd4: polAfterCmd4, + afterCmd5: polAfterCmd5, + afterCmd6: polAfterCmd6, + }, + rejects: { + afterCmd1: { rejectPerNode, rejectSignatures }, + afterCmd3: { rejectPerNode: rejectPerNode2 }, + }, + quota: { + before: { owner: quotaBefore.owner.toString(), other: quotaBefore.other.toString() }, + after: { owner: quotaAfter.owner.toString(), other: quotaAfter.other.toString() }, + broadcastResults: quotaResults.map(r => ({ out: r?.out, result: r?.out?.result })), + }, + invariants: { + supplyOk: true, + }, + ok: true, + timestamp: new Date().toISOString(), + } + + writeJson(`${artifactBase}.summary.json`, summary) + console.log(JSON.stringify({ token_script_complex_policy_dynamic_updates_summary: summary }, null, 2)) +} + diff --git a/better_testing/loadgen/src/token_script_complex_policy_escrow_state_machine.ts b/better_testing/loadgen/src/token_script_complex_policy_escrow_state_machine.ts new file mode 100644 index 000000000..1216689c1 --- /dev/null +++ b/better_testing/loadgen/src/token_script_complex_policy_escrow_state_machine.ts @@ -0,0 +1,484 @@ +import { + buildSignedTokenTransferTxWithDemos, + ensureTokenAndBalances, + getTokenTargets, + getWalletAddresses, + maybeSilenceConsole, + nodeCall, + readWalletMnemonics, + sendTokenTransferTxWithDemos, + sendTokenUpgradeScriptTxWithDemos, + withDemosWallet, +} from "./token_shared" +import { createHash } from "crypto" +import { getRunConfig, writeJson } from "./run_io" +import { buildComplexPolicyScript } from "./token_script_complex_policy_shared" + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +function normalizeRpcUrl(url: string): string { + return url.replace(/\/+$/, "") + "/" +} + +function normalizeHexAddress(address: string): string { + const trimmed = (address ?? "").trim() + if (!trimmed) return trimmed + return trimmed.startsWith("0x") ? trimmed.toLowerCase() : ("0x" + trimmed).toLowerCase() +} + +function sortObjectDeep(value: any): any { + if (Array.isArray(value)) return value.map(sortObjectDeep) + if (!value || typeof value !== "object") return value + const out: Record = {} + for (const key of Object.keys(value).sort()) out[key] = sortObjectDeep((value as any)[key]) + return out +} + +function sha256Hex(input: string): string { + return createHash("sha256").update(input).digest("hex") +} + +function stableHashJson(value: any): string { + return sha256Hex(JSON.stringify(sortObjectDeep(value))) +} + +function stringifyJson(value: unknown) { + return JSON.stringify(value, (_key, v) => (typeof v === "bigint" ? v.toString() : v), 2) +} + +function parseBigintOrZero(value: any): bigint { + try { + if (typeof value === "bigint") return value + if (typeof value === "number" && Number.isFinite(value)) return BigInt(value) + return BigInt(String(value ?? "0")) + } catch { + return 0n + } +} + +function rejectHaystack(res: any): string { + const pieces: string[] = [] + if (typeof res?.extra?.error === "string") pieces.push(res.extra.error) + if (typeof res?.response === "string") pieces.push(res.response) + if (res?.response === false) pieces.push("false") + if (typeof res?.message === "string") pieces.push(res.message) + if (typeof res?.response?.message === "string") pieces.push(res.response.message) + return pieces.join(" ").toLowerCase() +} + +function extractRejectSignature(res: any): string | null { + const text = rejectHaystack(res) + for (const k of [ + "escrow_no_entry", + "escrow_missing_entry", + "escrow_no_beneficiary", + "vesting_locked", + "denylist", + "not_allowlisted", + "quota", + "amount_limit", + "zero_amount", + ]) { + if (text.includes(k)) return k + } + if (text.includes("rejected")) return "rejected" + return null +} + +function assertRejected(res: any, expectedMessageSubstring: string) { + if (res?.result === 200) { + throw new Error(`Expected rejection but got result=200: ${JSON.stringify(res)}`) + } + const text = rejectHaystack(res) + if (!text.includes(expectedMessageSubstring.toLowerCase())) { + throw new Error(`Expected error to include "${expectedMessageSubstring}" but got: ${JSON.stringify(res)}`) + } +} + +async function waitForConsensusRounds(params: { rpcUrls: string[]; rounds: number; timeoutSec: number; pollMs: number }) { + const deadlineMs = Date.now() + Math.max(1, params.timeoutSec) * 1000 + const start: Record = {} + + for (const rpcUrl of params.rpcUrls) { + const res = await nodeCall(rpcUrl, "getLastBlockNumber", {}, `getLastBlockNumber:start:${rpcUrl}`) + const raw = res?.response + start[rpcUrl] = typeof raw === "number" ? raw : typeof raw === "string" ? Number.parseInt(raw, 10) : null + } + + while (Date.now() < deadlineMs) { + let allOk = true + for (const rpcUrl of params.rpcUrls) { + const base = start[rpcUrl] + const res = await nodeCall(rpcUrl, "getLastBlockNumber", {}, `getLastBlockNumber:poll:${rpcUrl}`) + const raw = res?.response + const current = typeof raw === "number" ? raw : typeof raw === "string" ? Number.parseInt(raw, 10) : null + const ok = typeof base === "number" && typeof current === "number" && current >= base + params.rounds + if (!ok) allOk = false + } + if (allOk) return { ok: true, start } + await sleep(Math.max(100, Math.floor(params.pollMs))) + } + + return { ok: false, start } +} + +async function tokenGetCommittedWithFallback(rpcUrl: string, tokenAddress: string): Promise { + const committed = await nodeCall( + rpcUrl, + "token.getCommitted", + { tokenAddress }, + `token.getCommitted:escrow:${rpcUrl.replace(/[^a-z0-9]+/gi, "_")}`, + ) + if (committed?.result === 409) { + return await nodeCall( + rpcUrl, + "token.get", + { tokenAddress }, + `token.get:fallback:escrow:${rpcUrl.replace(/[^a-z0-9]+/gi, "_")}`, + ) + } + return committed +} + +async function callView(rpcUrl: string, tokenAddress: string, method: string, args: any[]) { + return await nodeCall(rpcUrl, "token.callView", { tokenAddress, method, args }, `token.callView:${method}`) +} + +async function broadcastSignedTxOnce(params: { rpcUrl: string; mnemonic: string; signedTx: any }) { + return await withDemosWallet({ + rpcUrl: params.rpcUrl, + mnemonic: params.mnemonic, + fn: async (demos) => { + const validity = await (demos as any).confirm(params.signedTx) + const res = await (demos as any).broadcast(validity) + return { validity, res } + }, + }) +} + +export async function runTokenScriptComplexPolicyEscrowStateMachine() { + maybeSilenceConsole() + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_script_complex_policy_escrow_state_machine` + + const targets = getTokenTargets().map(normalizeRpcUrl) + const rpcUrl = targets[0]! + + const wallets = await readWalletMnemonics() + if (wallets.length < 3) throw new Error("token_script_complex_policy_escrow_state_machine requires 3 wallets (owner, other, vault)") + const ownerMnemonic = wallets[0]! + const otherMnemonic = wallets[1]! + const vaultMnemonic = wallets[2]! + + const walletAddresses = (await getWalletAddresses(rpcUrl, [ownerMnemonic, otherMnemonic, vaultMnemonic])).map(normalizeHexAddress) + const owner = walletAddresses[0]! + const other = walletAddresses[1]! + const vault = walletAddresses[2]! + + const { tokenAddress } = await ensureTokenAndBalances(rpcUrl, ownerMnemonic, walletAddresses) + + const commandBase = 1000n + const scriptCode = buildComplexPolicyScript({ + allowlist: [], + denylist: [], + quotaPerBucket: 0, + bucketMs: 60_000, + amountLimit: 1_000_000n, + feeThreshold: 1_000_000n, + feeFixed: 0n, + feeSink: null, + escrow: { vault }, + dynamicPolicy: { + admin: owner, + commandBase, + presets: {}, + vestingUnlocks: {}, + escrowCmds: { + "1": { type: "setBeneficiary", id: 1, beneficiary: owner }, + "2": { type: "approveRelease", id: 1 }, + "3": { type: "approveRefund", id: 2 }, + }, + }, + }) + + const upgrade = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== owner) throw new Error(`owner identity mismatch: ${fromHex} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenUpgradeScriptTxWithDemos({ + demos, + tokenAddress, + scriptCode, + nonce, + }) + }, + }) + if ((upgrade as any)?.res?.result !== 200) throw new Error(`Upgrade failed: ${JSON.stringify(upgrade)}`) + + await waitForConsensusRounds({ rpcUrls: targets, rounds: 2, timeoutSec: 60, pollMs: 1000 }) + + const deposit1 = await withDemosWallet({ + rpcUrl, + mnemonic: otherMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== other) throw new Error(`other identity mismatch: ${fromHex} !== ${other}`) + const nonce = Number(await demos.getAddressNonce(other)) + 1 + return await sendTokenTransferTxWithDemos({ + demos, + tokenAddress, + to: vault, + amount: 5n, + nonce, + }) + }, + }) + if ((deposit1 as any)?.res?.result !== 200) throw new Error(`Deposit1 failed: ${JSON.stringify(deposit1)}`) + + await waitForConsensusRounds({ rpcUrls: targets, rounds: 2, timeoutSec: 60, pollMs: 1000 }) + + const cmdSetBeneficiary = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== owner) throw new Error(`owner identity mismatch: ${fromHex} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenTransferTxWithDemos({ + demos, + tokenAddress, + to: owner, + amount: commandBase + 1n, + nonce, + }) + }, + }) + if ((cmdSetBeneficiary as any)?.res?.result !== 200) throw new Error(`cmdSetBeneficiary failed: ${JSON.stringify(cmdSetBeneficiary)}`) + + await waitForConsensusRounds({ rpcUrls: targets, rounds: 2, timeoutSec: 60, pollMs: 1000 }) + + const cmdApproveRelease = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== owner) throw new Error(`owner identity mismatch: ${fromHex} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenTransferTxWithDemos({ + demos, + tokenAddress, + to: owner, + amount: commandBase + 2n, + nonce, + }) + }, + }) + if ((cmdApproveRelease as any)?.res?.result !== 200) throw new Error(`cmdApproveRelease failed: ${JSON.stringify(cmdApproveRelease)}`) + + await waitForConsensusRounds({ rpcUrls: targets, rounds: 2, timeoutSec: 60, pollMs: 1000 }) + + const signedRejectOut = await withDemosWallet({ + rpcUrl, + mnemonic: vaultMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== vault) throw new Error(`vault identity mismatch: ${fromHex} !== ${vault}`) + const nonce = Number(await demos.getAddressNonce(vault)) + 1 + return await buildSignedTokenTransferTxWithDemos({ + demos, + tokenAddress, + to: owner, + amount: 6n, + nonce, + }) + }, + }) + + const rejectPerNode: Record = {} + for (const url of targets) { + rejectPerNode[url] = await broadcastSignedTxOnce({ + rpcUrl: url, + mnemonic: vaultMnemonic, + signedTx: (signedRejectOut as any).signedTx, + }) + } + const rejectSignatures = targets.map(url => ({ url, sig: extractRejectSignature(rejectPerNode[url]?.res) })) + const deterministic = rejectSignatures.every(e => !!e.sig) && rejectSignatures.every(e => e.sig === rejectSignatures[0]!.sig) + if (!deterministic) { + throw new Error(`Non-deterministic escrow reject across nodes: ${stringifyJson({ rejectSignatures, rejectPerNode })}`) + } + for (const url of targets) assertRejected(rejectPerNode[url]?.res, "escrow_no_entry") + + const release1 = await withDemosWallet({ + rpcUrl, + mnemonic: vaultMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== vault) throw new Error(`vault identity mismatch: ${fromHex} !== ${vault}`) + const nonce = Number(await demos.getAddressNonce(vault)) + 1 + return await sendTokenTransferTxWithDemos({ + demos, + tokenAddress, + to: owner, + amount: 3n, + nonce, + }) + }, + }) + if ((release1 as any)?.res?.result !== 200) throw new Error(`Release1 failed: ${JSON.stringify(release1)}`) + + const release2 = await withDemosWallet({ + rpcUrl, + mnemonic: vaultMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== vault) throw new Error(`vault identity mismatch: ${fromHex} !== ${vault}`) + const nonce = Number(await demos.getAddressNonce(vault)) + 1 + return await sendTokenTransferTxWithDemos({ + demos, + tokenAddress, + to: owner, + amount: 2n, + nonce, + }) + }, + }) + if ((release2 as any)?.res?.result !== 200) throw new Error(`Release2 failed: ${JSON.stringify(release2)}`) + + await waitForConsensusRounds({ rpcUrls: targets, rounds: 2, timeoutSec: 60, pollMs: 1000 }) + + const entry1PerNode: Record = {} + for (const url of targets) { + const res = await callView(url, tokenAddress, "getEscrowEntry", [1]) + if (res?.result !== 200) throw new Error(`getEscrowEntry(1) failed on ${url}: ${JSON.stringify(res)}`) + entry1PerNode[url] = res?.response?.value + } + + const entry1HashPerNode = Object.fromEntries(Object.entries(entry1PerNode).map(([k, v]) => [k, stableHashJson(v)])) + const entry1Hashes = Object.values(entry1HashPerNode) + if (!entry1Hashes.every(h => h === entry1Hashes[0])) { + throw new Error(`Non-deterministic escrow entry#1 across nodes: ${stringifyJson({ entry1HashPerNode, entry1PerNode })}`) + } + + const entry1 = entry1PerNode[targets[0]!]! + if (String(entry1?.status) !== "claimed") { + throw new Error(`Expected entry#1 status=claimed, got: ${stringifyJson(entry1)}`) + } + if (parseBigintOrZero(entry1?.released) !== 5n) { + throw new Error(`Expected entry#1 released=5, got: ${stringifyJson(entry1)}`) + } + + const deposit2 = await withDemosWallet({ + rpcUrl, + mnemonic: otherMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== other) throw new Error(`other identity mismatch: ${fromHex} !== ${other}`) + const nonce = Number(await demos.getAddressNonce(other)) + 1 + return await sendTokenTransferTxWithDemos({ + demos, + tokenAddress, + to: vault, + amount: 4n, + nonce, + }) + }, + }) + if ((deposit2 as any)?.res?.result !== 200) throw new Error(`Deposit2 failed: ${JSON.stringify(deposit2)}`) + + await waitForConsensusRounds({ rpcUrls: targets, rounds: 2, timeoutSec: 60, pollMs: 1000 }) + + const cmdApproveRefund = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== owner) throw new Error(`owner identity mismatch: ${fromHex} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenTransferTxWithDemos({ + demos, + tokenAddress, + to: owner, + amount: commandBase + 3n, + nonce, + }) + }, + }) + if ((cmdApproveRefund as any)?.res?.result !== 200) throw new Error(`cmdApproveRefund failed: ${JSON.stringify(cmdApproveRefund)}`) + + await waitForConsensusRounds({ rpcUrls: targets, rounds: 2, timeoutSec: 60, pollMs: 1000 }) + + const refund = await withDemosWallet({ + rpcUrl, + mnemonic: vaultMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== vault) throw new Error(`vault identity mismatch: ${fromHex} !== ${vault}`) + const nonce = Number(await demos.getAddressNonce(vault)) + 1 + return await sendTokenTransferTxWithDemos({ + demos, + tokenAddress, + to: other, + amount: 4n, + nonce, + }) + }, + }) + if ((refund as any)?.res?.result !== 200) throw new Error(`Refund failed: ${JSON.stringify(refund)}`) + + await waitForConsensusRounds({ rpcUrls: targets, rounds: 2, timeoutSec: 60, pollMs: 1000 }) + + const entry2PerNode: Record = {} + for (const url of targets) { + const res = await callView(url, tokenAddress, "getEscrowEntry", [2]) + if (res?.result !== 200) throw new Error(`getEscrowEntry(2) failed on ${url}: ${JSON.stringify(res)}`) + entry2PerNode[url] = res?.response?.value + } + const entry2HashPerNode = Object.fromEntries(Object.entries(entry2PerNode).map(([k, v]) => [k, stableHashJson(v)])) + const entry2Hashes = Object.values(entry2HashPerNode) + if (!entry2Hashes.every(h => h === entry2Hashes[0])) { + throw new Error(`Non-deterministic escrow entry#2 across nodes: ${stringifyJson({ entry2HashPerNode, entry2PerNode })}`) + } + const entry2 = entry2PerNode[targets[0]!]! + if (String(entry2?.status) !== "refunded") { + throw new Error(`Expected entry#2 status=refunded, got: ${stringifyJson(entry2)}`) + } + + const committedPerNode: Record = {} + for (const url of targets) { + const res = await tokenGetCommittedWithFallback(url, tokenAddress) + if (res?.result !== 200) throw new Error(`token.getCommitted failed on ${url}: ${JSON.stringify(res)}`) + committedPerNode[url] = res?.response + } + const committedHashes = Object.fromEntries(Object.entries(committedPerNode).map(([k, v]) => [k, stableHashJson(v)])) + const values = Object.values(committedHashes) + if (!values.every(h => h === values[0])) { + throw new Error(`Non-deterministic committed token state across nodes: ${stringifyJson({ committedHashes })}`) + } + + const summary = { + runId: run.runId, + scenario: "token_script_complex_policy_escrow_state_machine", + tokenAddress, + rpcUrls: targets, + addresses: { owner, other, vault }, + txs: { + upgrade, + deposit1, + cmdSetBeneficiary, + cmdApproveRelease, + rejectSignatures, + release1, + release2, + deposit2, + cmdApproveRefund, + refund, + }, + escrow: { + entry1, + entry2, + }, + committedHash: values[0], + ok: true, + timestamp: new Date().toISOString(), + } + + writeJson(`${artifactBase}.summary.json`, summary) + console.log(JSON.stringify({ token_script_complex_policy_escrow_state_machine_summary: summary }, null, 2)) +} diff --git a/better_testing/loadgen/src/token_script_complex_policy_ramp.ts b/better_testing/loadgen/src/token_script_complex_policy_ramp.ts new file mode 100644 index 000000000..7ca5b14d2 --- /dev/null +++ b/better_testing/loadgen/src/token_script_complex_policy_ramp.ts @@ -0,0 +1,185 @@ +import { runTokenScriptTransferLoadgen } from "./token_script_transfer_loadgen" +import { getRunConfig, writeJson } from "./run_io" +import { buildComplexPolicyScript } from "./token_script_complex_policy_shared" +import { getTokenTargets, getWalletAddresses, readWalletMnemonics } from "./token_shared" + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function splitCsv(value: string | undefined): string[] { + return (value ?? "") + .split(",") + .map(s => s.trim()) + .filter(Boolean) +} + +function normalizeRpcUrl(url: string): string { + return url.replace(/\/+$/, "") + "/" +} + +function normalizeHexAddress(address: string): string { + const trimmed = (address ?? "").trim() + if (!trimmed) return trimmed + return trimmed.startsWith("0x") ? trimmed.toLowerCase() : ("0x" + trimmed).toLowerCase() +} + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +export async function runTokenScriptComplexPolicyRamp() { + const rampConcurrency = splitCsv(process.env.RAMP_CONCURRENCY) + .map(s => Number.parseInt(s, 10)) + .filter(n => Number.isFinite(n) && n > 0) + + const rampInflight = splitCsv(process.env.RAMP_INFLIGHT_PER_WALLET) + .map(s => Number.parseInt(s, 10)) + .filter(n => Number.isFinite(n) && n > 0) + + const mode: "concurrency" | "inflight" = rampInflight.length > 0 ? "inflight" : "concurrency" + const stepDurationSec = envInt("STEP_DURATION_SEC", 15) + const cooldownSec = envInt("COOLDOWN_SEC", 3) + + if (mode === "concurrency" && rampConcurrency.length === 0) { + throw new Error("RAMP_CONCURRENCY must be a comma-separated list of positive ints") + } + if (mode === "inflight" && rampInflight.length === 0) { + throw new Error("RAMP_INFLIGHT_PER_WALLET must be a comma-separated list of positive ints") + } + + // Build a script that allows all known wallets so loadgen won't be rejected. + const targets = getTokenTargets().map(normalizeRpcUrl) + const rpcUrl = targets[0]! + const wallets = await readWalletMnemonics() + const walletAddresses = (await getWalletAddresses(rpcUrl, wallets.slice(0, 4))).map(normalizeHexAddress) + + process.env.TOKEN_VIEW_METHOD = process.env.TOKEN_VIEW_METHOD ?? "ping" + process.env.TOKEN_SCRIPT_CODE = + process.env.TOKEN_SCRIPT_CODE ?? + buildComplexPolicyScript({ + allowlist: walletAddresses, + denylist: [], + quotaPerBucket: 0, + bucketMs: 60_000, + amountLimit: 1_000_000n, + feeThreshold: 1_000_000_000n, // disable fee in perf runs + feeFixed: 0n, + feeSink: walletAddresses[0] ?? null, + }) + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_script_complex_policy_ramp` + const artifacts = { + runId: run.runId, + runDir: run.runDir, + summaryPath: `${artifactBase}.summary.json`, + } + + const results: any[] = [] + let reuseTokenAddress: string | null = null + + const fixedConcurrency = envInt("CONCURRENCY", 4) + const fixedInflight = envInt("INFLIGHT_PER_WALLET", 1) + + const steps = + mode === "inflight" + ? rampInflight.map(inflight => ({ concurrency: fixedConcurrency, inflightPerWallet: inflight })) + : rampConcurrency.map(concurrency => ({ concurrency, inflightPerWallet: fixedInflight })) + + for (const step of steps) { + // Reuse the existing transfer loadgen (scripted), but with our complex-policy script injected via TOKEN_SCRIPT_CODE. + process.env.SCENARIO = "token_script_transfer" + process.env.DURATION_SEC = String(stepDurationSec) + process.env.CONCURRENCY = String(step.concurrency) + process.env.INFLIGHT_PER_WALLET = String(step.inflightPerWallet) + + if (reuseTokenAddress) { + process.env.TOKEN_ADDRESS = reuseTokenAddress + process.env.TOKEN_BOOTSTRAP = "false" + process.env.TOKEN_DISTRIBUTE = "false" + process.env.TOKEN_WAIT_DISTRIBUTION = "false" + process.env.TOKEN_SCRIPT_UPGRADE = "false" + } else { + if (!process.env.TOKEN_BOOTSTRAP) process.env.TOKEN_BOOTSTRAP = "true" + process.env.TOKEN_SCRIPT_UPGRADE = "true" + } + + let stepSummary: any = null + let stepError: any = null + + const originalLog = console.log + const capture: any[] = [] + console.log = (...args: any[]) => { + capture.push(args) + originalLog(...args) + } + + try { + await runTokenScriptTransferLoadgen() + for (const row of capture) { + const payload = row?.[0] + if (payload && typeof payload === "string") { + try { + const parsed = JSON.parse(payload) + if (parsed?.token_script_transfer_summary) stepSummary = parsed.token_script_transfer_summary + } catch { + // ignore + } + } else if (payload?.token_script_transfer_summary) { + stepSummary = payload.token_script_transfer_summary + } + } + if (!reuseTokenAddress && stepSummary?.tokenAddress) { + reuseTokenAddress = String(stepSummary.tokenAddress) + } + } catch (err: any) { + stepError = { message: err?.message ?? String(err) } + } finally { + console.log = originalLog + } + + results.push({ + concurrency: step.concurrency, + inflightPerWallet: step.inflightPerWallet, + stepDurationSec, + cooldownSec, + summary: stepSummary, + error: stepError, + }) + + if (cooldownSec > 0) await sleep(cooldownSec * 1000) + } + + const okSteps = results + .map(r => ({ concurrency: r.concurrency, inflightPerWallet: r.inflightPerWallet, okTps: r.summary?.okTps })) + .filter(r => typeof r.okTps === "number") + + const best = okSteps.sort((a, b) => (b.okTps ?? 0) - (a.okTps ?? 0))[0] ?? null + + const rampSummary = { + scenario: "token_script_complex_policy_ramp", + mode, + bestByOkTps: best, + steps: results, + config: { + rampConcurrency: rampConcurrency.length > 0 ? rampConcurrency : null, + rampInflightPerWallet: rampInflight.length > 0 ? rampInflight : null, + fixedConcurrency, + fixedInflightPerWallet: fixedInflight, + stepDurationSec, + cooldownSec, + tokenTransferAmount: process.env.TOKEN_TRANSFER_AMOUNT ?? process.env.AMOUNT ?? "1", + scriptSetStorage: "true", + }, + artifacts, + timestamp: new Date().toISOString(), + } + + writeJson(artifacts.summaryPath, rampSummary) + console.log(JSON.stringify({ token_script_complex_policy_ramp_summary: rampSummary }, null, 2)) +} + diff --git a/better_testing/loadgen/src/token_script_complex_policy_shared.ts b/better_testing/loadgen/src/token_script_complex_policy_shared.ts new file mode 100644 index 000000000..bbf9292a2 --- /dev/null +++ b/better_testing/loadgen/src/token_script_complex_policy_shared.ts @@ -0,0 +1,642 @@ +type ComplexPolicyScriptParams = { + allowlist: string[] + denylist: string[] + quotaPerBucket: number + bucketMs: number + amountLimit: bigint + feeThreshold: bigint + feeFixed: bigint + feeSink: string | null + escrow?: { + vault: string + } + vesting?: { + schedules: Record< + string, + { + total: bigint + } + > + } + debugCapture?: boolean + dynamicPolicy?: { + admin: string + commandBase: bigint + presets: Record< + string, + Partial<{ + allowlist: string[] + denylist: string[] + quotaPerBucket: number + bucketMs: number + amountLimit: bigint + feeThreshold: bigint + feeFixed: bigint + feeSink: string | null + escrow: { + vault: string + } + vesting: { + schedules: Record + } + }> + > + vestingUnlocks?: Record< + string, + { + address: string + addUnlocked: bigint + } + > + escrowCmds?: Record< + string, + { + type: "setBeneficiary" | "approveRelease" | "approveRefund" + id: number + beneficiary?: string + } + > + } +} + +function normHex(address: string): string { + const trimmed = (address ?? "").trim().toLowerCase() + if (!trimmed) return trimmed + return trimmed.startsWith("0x") ? trimmed : `0x${trimmed}` +} + +function jsArrayOfStrings(values: string[]): string { + return `[${values.map(v => JSON.stringify(v)).join(", ")}]` +} + +function jsBigintLiteral(value: bigint): string { + // Script runtime supports BigInt (used throughout existing token_script_* scenarios). + return `${value.toString()}n` +} + +function jsVestingSchedulesObject( + schedules: Record, +): string { + const entries: string[] = [] + for (const [addr, sched] of Object.entries(schedules ?? {})) { + const a = normHex(addr) + if (!a) continue + const total = typeof sched?.total === "bigint" ? sched.total : 0n + entries.push(`${JSON.stringify(a)}: { total: ${jsBigintLiteral(total)} }`) + } + return `{ ${entries.join(", ")} }` +} + +function jsPolicyOverrideObject(value: any): string { + if (!value || typeof value !== "object") return "{}" + const entries: string[] = [] + + if (Array.isArray(value.allowlist)) entries.push(`allowlist: ${jsArrayOfStrings(value.allowlist)}`) + if (Array.isArray(value.denylist)) entries.push(`denylist: ${jsArrayOfStrings(value.denylist)}`) + if (typeof value.quotaPerBucket === "number") entries.push(`quotaPerBucket: ${Math.max(0, Math.floor(value.quotaPerBucket))}`) + if (typeof value.bucketMs === "number") entries.push(`bucketMs: ${Math.max(1, Math.floor(value.bucketMs))}`) + if (typeof value.amountLimit === "bigint") entries.push(`amountLimit: ${jsBigintLiteral(value.amountLimit)}`) + if (typeof value.feeThreshold === "bigint") entries.push(`feeThreshold: ${jsBigintLiteral(value.feeThreshold)}`) + if (typeof value.feeFixed === "bigint") entries.push(`feeFixed: ${jsBigintLiteral(value.feeFixed)}`) + if (typeof value.feeSink === "string") entries.push(`feeSink: ${JSON.stringify(normHex(value.feeSink))}`) + if (value.feeSink === null) entries.push(`feeSink: null`) + if (value.vesting && typeof value.vesting === "object" && value.vesting.schedules && typeof value.vesting.schedules === "object") { + entries.push(`vesting: { schedules: ${jsVestingSchedulesObject(value.vesting.schedules)} }`) + } + + return `{ ${entries.join(", ")} }` +} + +export function buildComplexPolicyScript(params: ComplexPolicyScriptParams): string { + const allow = params.allowlist.map(normHex).filter(Boolean) + const deny = params.denylist.map(normHex).filter(Boolean) + + const quota = Math.max(0, Math.floor(params.quotaPerBucket)) + const bucketMs = Math.max(1, Math.floor(params.bucketMs)) + + const feeSink = params.feeSink ? normHex(params.feeSink) : null + + const escrowVault = params.escrow?.vault ? normHex(params.escrow.vault) : null + + const vestingSchedules = params.vesting?.schedules ?? {} + + const dynamicPolicy = params.dynamicPolicy + ? { + admin: normHex(params.dynamicPolicy.admin), + commandBase: params.dynamicPolicy.commandBase, + presets: Object.fromEntries( + Object.entries(params.dynamicPolicy.presets ?? {}).map(([k, v]) => [String(k), v]), + ) as Record, + vestingUnlocks: Object.fromEntries( + Object.entries(params.dynamicPolicy.vestingUnlocks ?? {}).map(([k, v]) => [ + String(k), + { address: normHex(v.address), addUnlocked: v.addUnlocked }, + ]), + ) as Record, + escrowCmds: Object.fromEntries( + Object.entries(params.dynamicPolicy.escrowCmds ?? {}).map(([k, v]) => [ + String(k), + { + type: String(v.type), + id: Math.max(0, Math.floor(Number(v.id))), + beneficiary: v.beneficiary ? normHex(v.beneficiary) : null, + }, + ]), + ) as Record, + } + : null + + const lines: string[] = [ + `function normHex(a) {`, + ` const s = String(a ?? '').trim().toLowerCase();`, + ` if (!s) return s;`, + ` return s.startsWith('0x') ? s : ('0x' + s);`, + `}`, + ``, + `function parseBigint(v) {`, + ` try {`, + ` if (typeof v === 'bigint') return v;`, + ` if (typeof v === 'number' && Number.isFinite(v)) return BigInt(v);`, + ` return BigInt(String(v ?? '0'));`, + ` } catch {`, + ` return 0n;`, + ` }`, + `}`, + ``, + `function getCaller(ctx) {`, + ` return normHex(`, + ` ctx?.caller ??`, + ` ctx?.operationContext?.caller ??`, + ` ctx?.operationData?.caller ??`, + ` ctx?.operationData?.from ??`, + ` ctx?.operationData?.fromHex ??`, + ` ctx?.from ??`, + ` ctx?.tx?.from ??`, + ` ''`, + ` );`, + `}`, + ``, + `function getTo(ctx) {`, + ` return normHex(`, + ` ctx?.operationData?.to ??`, + ` ctx?.operationData?.toHex ??`, + ` ctx?.to ??`, + ` ''`, + ` );`, + `}`, + ``, + `function getBucket(ctx, bucketMs) {`, + ` const ts = ctx?.operationContext?.txTimestamp ?? ctx?.txTimestamp ?? ctx?.operationData?.timestamp ?? ctx?.tx?.content?.timestamp ?? null;`, + ` const n = typeof ts === 'number' && Number.isFinite(ts) ? ts : (typeof ts === 'string' ? Number.parseInt(ts, 10) : null);`, + ` if (typeof n !== 'number' || !Number.isFinite(n)) return 0;`, + ` const ms = typeof bucketMs === 'number' && Number.isFinite(bucketMs) ? bucketMs : Number.parseInt(String(bucketMs ?? '0'), 10);`, + ` const denom = typeof ms === 'number' && Number.isFinite(ms) && ms > 0 ? ms : 1;`, + ` return Math.floor(n / denom);`, + `}`, + ``, + `function incInt(obj, key, by) {`, + ` const base = obj && typeof obj === 'object' ? obj : {};`, + ` const cur = Number(base[key] || 0);`, + ` const next = (Number.isFinite(cur) ? cur : 0) + Number(by || 1);`, + ` return { ...base, [key]: next };`, + `}`, + ``, + `function incBigintStr(obj, key, by) {`, + ` const base = obj && typeof obj === 'object' ? obj : {};`, + ` let cur = 0n;`, + ` try { cur = BigInt(String(base[key] ?? '0')); } catch { cur = 0n; }`, + ` const next = cur + parseBigint(by);`, + ` return { ...base, [key]: next.toString() };`, + `}`, + ``, + `function updateNestedIntMap(root, addr, bucket, by) {`, + ` const base = root && typeof root === 'object' ? root : {};`, + ` const a = String(addr ?? '');`, + ` const curMap = base[a] && typeof base[a] === 'object' ? base[a] : {};`, + ` const cur = Number(curMap[String(bucket)] || 0);`, + ` const next = (Number.isFinite(cur) ? cur : 0) + Number(by || 1);`, + ` return { ...base, [a]: { ...curMap, [String(bucket)]: next } };`, + `}`, + ``, + `function escrowInit(storage) {`, + ` const st = storage && typeof storage === 'object' ? storage : {};`, + ` const e = st.escrow && typeof st.escrow === 'object' ? st.escrow : {};`, + ` const entries = e.entries && typeof e.entries === 'object' ? e.entries : {};`, + ` const rawNextId = e.nextId ?? 0;`, + ` const nextId = Number.isFinite(Number(rawNextId)) ? Math.max(0, Math.floor(Number(rawNextId))) : 0;`, + ` return { nextId, entries };`, + `}`, + ``, + `function escrowGetEntry(escrow, id) {`, + ` const key = String(id ?? '');`, + ` const raw = escrow && escrow.entries && typeof escrow.entries === 'object' ? escrow.entries[key] : null;`, + ` return raw && typeof raw === 'object' ? raw : null;`, + `}`, + ``, + `function escrowSetEntry(escrow, id, entry) {`, + ` const base = escrow && typeof escrow === 'object' ? escrow : { nextId: 0, entries: {} };`, + ` const entries = base.entries && typeof base.entries === 'object' ? base.entries : {};`, + ` return { ...base, entries: { ...entries, [String(id)]: entry } };`, + `}`, + ``, + `function escrowRemaining(entry) {`, + ` const total = parseBigint(entry?.total ?? 0);`, + ` const released = parseBigint(entry?.released ?? 0);`, + ` return total > released ? (total - released) : 0n;`, + `}`, + ``, + `function escrowFindMatch(escrow, to, amount) {`, + ` const e = escrow && typeof escrow === 'object' ? escrow : { nextId: 0, entries: {} };`, + ` const n = Number.isFinite(Number(e.nextId)) ? Math.max(0, Math.floor(Number(e.nextId))) : 0;`, + ` for (let i = 1; i <= n; i++) {`, + ` const entry = escrowGetEntry(e, i);`, + ` if (!entry) continue;`, + ` const status = String(entry.status || '');`, + ` const rem = escrowRemaining(entry);`, + ` if (amount > rem) continue;`, + ` if (status === 'release_approved' && normHex(entry.beneficiary || '') === to) return { id: i, kind: 'release' };`, + ` if (status === 'refund_approved' && normHex(entry.depositor || '') === to) return { id: i, kind: 'refund' };`, + ` }`, + ` return null;`, + `}`, + ``, + `const POLICY_DEFAULT = {`, + ` allowlist: ${jsArrayOfStrings(allow)},`, + ` denylist: ${jsArrayOfStrings(deny)},`, + ` quotaPerBucket: ${quota},`, + ` bucketMs: ${bucketMs},`, + ` amountLimit: ${jsBigintLiteral(params.amountLimit)},`, + ` feeThreshold: ${jsBigintLiteral(params.feeThreshold)},`, + ` feeFixed: ${jsBigintLiteral(params.feeFixed)},`, + ` feeSink: ${feeSink ? JSON.stringify(feeSink) : "null"},`, + ` vesting: { schedules: ${jsVestingSchedulesObject(vestingSchedules)} },`, + `};`, + ``, + `const DEBUG_CAPTURE = ${params.debugCapture ? "true" : "false"};`, + ``, + `const ESCROW = ${escrowVault ? `{ enabled: true, vault: ${JSON.stringify(escrowVault)} }` : "null"};`, + ``, + ] + + if (dynamicPolicy) { + lines.push( + `const DYNAMIC = {`, + ` enabled: true,`, + ` admin: ${JSON.stringify(dynamicPolicy.admin)},`, + ` commandBase: ${jsBigintLiteral(dynamicPolicy.commandBase)},`, + ` presets: {`, + ...Object.entries(dynamicPolicy.presets).map(([k, v]) => ` ${JSON.stringify(k)}: ${jsPolicyOverrideObject(v)},`), + ` },`, + ` vestingUnlocks: {`, + ...Object.entries(dynamicPolicy.vestingUnlocks ?? {}).map( + ([k, v]) => + ` ${JSON.stringify(k)}: { address: ${JSON.stringify((v as any).address)}, addUnlocked: ${jsBigintLiteral( + (v as any).addUnlocked as bigint, + )} },`, + ), + ` },`, + ` escrowCmds: {`, + ...Object.entries(dynamicPolicy.escrowCmds ?? {}).map(([k, v]) => { + const beneficiary = (v as any).beneficiary ? JSON.stringify((v as any).beneficiary) : "null" + return ` ${JSON.stringify(k)}: { type: ${JSON.stringify((v as any).type)}, id: ${JSON.stringify( + (v as any).id, + )}, beneficiary: ${beneficiary} },` + }), + ` },`, + `};`, + ``, + ) + } else { + lines.push(`const DYNAMIC = null;`, ``) + } + + lines.push( + `function asSet(list) {`, + ` const out = {};`, + ` for (const v of Array.isArray(list) ? list : []) out[normHex(v)] = true;`, + ` return out;`, + `}`, + ``, + `function pickPolicy(storage) {`, + ` const st = storage && typeof storage === 'object' ? storage : {};`, + ` const override = st.policyOverride && typeof st.policyOverride === 'object' ? st.policyOverride : null;`, + ` const base = st.policy && typeof st.policy === 'object' ? st.policy : POLICY_DEFAULT;`, + ` return override ? { ...base, ...override } : base;`, + `}`, + ``, + `function policyToCanonical(policy) {`, + ` const p = policy && typeof policy === 'object' ? policy : {};`, + ` const v = p.vesting && typeof p.vesting === 'object' ? p.vesting : {};`, + ` const schedules = v.schedules && typeof v.schedules === 'object' ? v.schedules : {};`, + ` const schedulesOut = {};`, + ` for (const k of Object.keys(schedules)) {`, + ` const s = schedules[k] && typeof schedules[k] === 'object' ? schedules[k] : {};`, + ` schedulesOut[normHex(k)] = { total: parseBigint(s.total ?? 0) };`, + ` }`, + ` return {`, + ` allowlist: Array.isArray(p.allowlist) ? p.allowlist.map(normHex) : [],`, + ` denylist: Array.isArray(p.denylist) ? p.denylist.map(normHex) : [],`, + ` quotaPerBucket: Number.isFinite(Number(p.quotaPerBucket)) ? Math.max(0, Math.floor(Number(p.quotaPerBucket))) : 0,`, + ` bucketMs: Number.isFinite(Number(p.bucketMs)) ? Math.max(1, Math.floor(Number(p.bucketMs))) : 1,`, + ` amountLimit: parseBigint(p.amountLimit ?? 0),`, + ` feeThreshold: parseBigint(p.feeThreshold ?? 0),`, + ` feeFixed: parseBigint(p.feeFixed ?? 0),`, + ` feeSink: p.feeSink ? normHex(p.feeSink) : null,`, + ` vesting: { schedules: schedulesOut },`, + ` };`, + `}`, + ``, + `// NOTE: Script hook context currently exposes only operationData.{from,to,amount} (no timestamp, nonce, or block).`, + ``, + `function applyPolicy(ctx, hook) {`, + ` const caller = getCaller(ctx);`, + ` const to = getTo(ctx);`, + ` const amount = parseBigint(ctx?.operationData?.amount ?? 0);`, + ` const isBefore = String(hook || '').startsWith('before');`, + ``, + ` const storage = ctx?.token?.storage && typeof ctx.token.storage === 'object' ? ctx.token.storage : {};`, + ` const counts = storage.counts && typeof storage.counts === 'object' ? storage.counts : {};`, + ` const rejections = storage.rejections && typeof storage.rejections === 'object' ? storage.rejections : {};`, + ` const quotas = storage.quotas && typeof storage.quotas === 'object' ? storage.quotas : {};`, + ` const fees = storage.fees && typeof storage.fees === 'object' ? storage.fees : {};`, + ``, + ` const counts2 = incInt(counts, hook, 1);`, + ``, + ` const effective = policyToCanonical(pickPolicy(storage));`, + ` const bucket = getBucket(ctx, effective.bucketMs);`, + ` const nowRef = 0;`, + ` const ALLOW = asSet(effective.allowlist);`, + ` const DENY = asSet(effective.denylist);`, + ``, + ` const debugCtx = DEBUG_CAPTURE && !storage.debugCtx ? ({`, + ` keys: Object.keys(ctx || {}).sort(),`, + ` operationDataKeys: Object.keys((ctx && ctx.operationData) || {}).sort(),`, + ` operationContextKeys: Object.keys((ctx && ctx.operationContext) || {}).sort(),`, + ` txKeys: Object.keys((ctx && ctx.tx) || {}).sort(),`, + ` txContentKeys: Object.keys((ctx && ctx.tx && ctx.tx.content) || {}).sort(),`, + ` sample: {`, + ` nowRef,`, + ` operationData: {`, + ` nonce: ctx?.operationData?.nonce ?? null,`, + ` timestamp: ctx?.operationData?.timestamp ?? null,`, + ` reference_block: ctx?.operationData?.reference_block ?? null,`, + ` referenceBlock: ctx?.operationData?.referenceBlock ?? null,`, + ` blockNumber: ctx?.operationData?.blockNumber ?? null,`, + ` },`, + ` operationContext: {`, + ` caller: ctx?.operationContext?.caller ?? null,`, + ` reference_block: ctx?.operationContext?.reference_block ?? null,`, + ` referenceBlock: ctx?.operationContext?.referenceBlock ?? null,`, + ` blockNumber: ctx?.operationContext?.blockNumber ?? null,`, + ` txTimestamp: ctx?.operationContext?.txTimestamp ?? null,`, + ` },`, + ` tx: {`, + ` nonce: ctx?.tx?.nonce ?? null,`, + ` from: ctx?.tx?.from ?? null,`, + ` contentNonce: ctx?.tx?.content?.nonce ?? null,`, + ` contentTimestamp: ctx?.tx?.content?.timestamp ?? null,`, + ` },`, + ` },`, + ` }) : null;`, + ``, + ` // Dynamic policy updates: admin self-transfer with amount >= commandBase sets storage.policyOverride.`, + ` if (isBefore && DYNAMIC && DYNAMIC.enabled && caller === normHex(DYNAMIC.admin) && to === caller) {`, + ` const base = parseBigint(DYNAMIC.commandBase ?? 0);`, + ` if (amount >= base) {`, + ` const cmd = amount - base;`, + ` const unlock = (DYNAMIC.vestingUnlocks || {})[String(cmd)] || null;`, + ` if (unlock && unlock.address) {`, + ` const vestingUnlocked = storage.vestingUnlocked && typeof storage.vestingUnlocked === 'object' ? storage.vestingUnlocked : {};`, + ` const a = normHex(unlock.address);`, + ` const by = parseBigint(unlock.addUnlocked ?? 0);`, + ` const nextUnlocked = incBigintStr(vestingUnlocked, a, by);`, + ` const nextStorage = {`, + ` ...storage,`, + ` policy: POLICY_DEFAULT,`, + ` counts: counts2,`, + ` vestingUnlocked: nextUnlocked,`, + ` lastVestingUnlock: { caller, cmd: cmd.toString(), address: a, addUnlocked: by.toString(), atBucket: bucket },`, + ` };`, + ` return { setStorage: nextStorage };`, + ` }`, + ` const preset = (DYNAMIC.presets || {})[String(cmd)] || null;`, + ` if (preset) {`, + ` const nextPolicy = policyToCanonical({ ...effective, ...preset });`, + ` const nextStorage = {`, + ` ...storage,`, + ` policy: POLICY_DEFAULT,`, + ` policyOverride: nextPolicy,`, + ` counts: counts2,`, + ` lastPolicyUpdate: { caller, cmd: cmd.toString(), atBucket: bucket },`, + ` };`, + ` return { setStorage: nextStorage };`, + ` }`, + ` const escrowCmd = (DYNAMIC.escrowCmds || {})[String(cmd)] || null;`, + ` if (escrowCmd && escrowCmd.type && escrowCmd.id) {`, + ` const esc = escrowInit(storage);`, + ` const id = Number(escrowCmd.id || 0);`, + ` const entry = escrowGetEntry(esc, id);`, + ` if (!entry) {`, + ` const rej = incInt(rejections, 'escrow_missing_entry', 1);`, + ` return { reject: 'escrow_missing_entry', setStorage: { ...storage, policy: POLICY_DEFAULT, counts: counts2, rejections: rej } };`, + ` }`, + ` const type = String(escrowCmd.type || '');`, + ` const beneficiary = escrowCmd.beneficiary ? normHex(escrowCmd.beneficiary) : null;`, + ` let nextEntry = entry;`, + ` if (type === 'setBeneficiary') {`, + ` nextEntry = { ...entry, beneficiary, lastCmd: { type, atBucket: bucket } };`, + ` } else if (type === 'approveRelease') {`, + ` if (!entry.beneficiary) {`, + ` const rej = incInt(rejections, 'escrow_no_beneficiary', 1);`, + ` return { reject: 'escrow_no_beneficiary', setStorage: { ...storage, policy: POLICY_DEFAULT, counts: counts2, rejections: rej } };`, + ` }`, + ` nextEntry = { ...entry, status: 'release_approved', lastCmd: { type, atBucket: bucket } };`, + ` } else if (type === 'approveRefund') {`, + ` nextEntry = { ...entry, status: 'refund_approved', lastCmd: { type, atBucket: bucket } };`, + ` }`, + ` const esc2 = escrowSetEntry(esc, id, nextEntry);`, + ` const nextStorage = {`, + ` ...storage,`, + ` policy: POLICY_DEFAULT,`, + ` counts: counts2,`, + ` escrow: { nextId: esc2.nextId, entries: esc2.entries },`, + ` lastEscrowCmd: { caller, cmd: cmd.toString(), type, id, beneficiary, atBucket: bucket },`, + ` };`, + ` return { setStorage: nextStorage };`, + ` }`, + ` }`, + ` }`, + ` if (isBefore && DENY[caller]) {`, + ` const rej = incInt(rejections, 'denylist', 1);`, + ` return { reject: 'denylist', setStorage: { ...storage, policy: POLICY_DEFAULT, counts: counts2, rejections: rej } };`, + ` }`, + ` if (isBefore && effective.allowlist.length > 0 && !ALLOW[caller]) {`, + ` const rej = incInt(rejections, 'not_allowlisted', 1);`, + ` return { reject: 'not_allowlisted', setStorage: { ...storage, policy: POLICY_DEFAULT, counts: counts2, rejections: rej } };`, + ` }`, + ` if (isBefore && amount <= 0n) {`, + ` const rej = incInt(rejections, 'zero_amount', 1);`, + ` return { reject: 'zero_amount', setStorage: { ...storage, policy: POLICY_DEFAULT, counts: counts2, rejections: rej } };`, + ` }`, + ` if (isBefore && amount > effective.amountLimit) {`, + ` const rej = incInt(rejections, 'amount_limit', 1);`, + ` return { reject: 'amount_limit', setStorage: { ...storage, policy: POLICY_DEFAULT, counts: counts2, rejections: rej } };`, + ` }`, + ``, + ` // Vesting/lockup transfer gates (only applies to transfers from a scheduled address).`, + ` if (hook === 'beforeTransfer') {`, + ` const sched = effective?.vesting?.schedules ? effective.vesting.schedules[caller] : null;`, + ` if (sched) {`, + ` const total = parseBigint(sched.total ?? 0);`, + ` let unlocked = 0n;`, + ` try { unlocked = BigInt(String((storage.vestingUnlocked || {})[caller] ?? '0')); } catch { unlocked = 0n; }`, + ` let spent = 0n;`, + ` try { spent = BigInt(String((storage.vestingSpent || {})[caller] ?? '0')); } catch { spent = 0n; }`, + ` const unlockedCapped = unlocked < total ? unlocked : total;`, + ` const remaining = unlockedCapped > spent ? (unlockedCapped - spent) : 0n;`, + ` if (amount > remaining) {`, + ` const rej = incInt(rejections, 'vesting_locked', 1);`, + ` return { reject: 'vesting_locked', setStorage: { ...storage, policy: POLICY_DEFAULT, counts: counts2, rejections: rej, ...(debugCtx ? { debugCtx } : {}) } };`, + ` }`, + ` }`, + ` }`, + ``, + ` // Escrow/state-machine: deposits into a vault create entries; vault releases/refunds require an approved entry.`, + ` let escrowOut = null;`, + ` let escrowLastMatchOut = storage.escrowLastMatch || null;`, + ` if (ESCROW && ESCROW.enabled && ESCROW.vault && hook === 'beforeTransfer') {`, + ` const vault = normHex(ESCROW.vault);`, + ` if (caller === vault && to !== vault) {`, + ` const esc = escrowInit(storage);`, + ` const match = escrowFindMatch(esc, to, amount);`, + ` if (!match) {`, + ` const rej = incInt(rejections, 'escrow_no_entry', 1);`, + ` return { reject: 'escrow_no_entry', setStorage: { ...storage, policy: POLICY_DEFAULT, counts: counts2, rejections: rej } };`, + ` }`, + ` escrowLastMatchOut = { id: match.id, kind: match.kind, to, amount: amount.toString(), atBucket: bucket };`, + ` }`, + ` }`, + ` if (ESCROW && ESCROW.enabled && ESCROW.vault && hook === 'afterTransfer') {`, + ` const vault = normHex(ESCROW.vault);`, + ` const esc = escrowInit(storage);`, + ` let esc2 = esc;`, + ` if (to === vault && caller !== vault) {`, + ` const id = esc.nextId + 1;`, + ` const entry = { id, depositor: caller, beneficiary: null, total: amount.toString(), released: '0', status: 'pending' };`, + ` esc2 = { nextId: id, entries: { ...esc.entries, [String(id)]: entry } };`, + ` } else if (caller === vault && to !== vault) {`, + ` const last = storage.escrowLastMatch && typeof storage.escrowLastMatch === 'object' ? storage.escrowLastMatch : null;`, + ` const match = last && Number(last.id) > 0 ? { id: Number(last.id), kind: String(last.kind || '') } : escrowFindMatch(esc, to, amount);`, + ` if (match) {`, + ` const entry = escrowGetEntry(esc, match.id);`, + ` if (entry) {`, + ` const released = parseBigint(entry.released ?? 0) + amount;`, + ` const total = parseBigint(entry.total ?? 0);`, + ` const done = released >= total;`, + ` const statusDone = match.kind === 'refund' ? 'refunded' : 'claimed';`, + ` const nextEntry = { ...entry, released: released.toString(), status: done ? statusDone : entry.status, lastPayout: { kind: match.kind, to, amount: amount.toString(), atBucket: bucket } };`, + ` esc2 = escrowSetEntry(esc, match.id, nextEntry);`, + ` escrowLastMatchOut = null;`, + ` }`, + ` }`, + ` }`, + ` escrowOut = { nextId: esc2.nextId, entries: esc2.entries };`, + ` }`, + ``, + ` if (isBefore) {`, + ` const used = Number((quotas[caller] && quotas[caller][String(bucket)]) || 0);`, + ` if (effective.quotaPerBucket > 0 && used >= effective.quotaPerBucket) {`, + ` const rej = incInt(rejections, 'quota', 1);`, + ` const quotas2 = updateNestedIntMap(quotas, caller, bucket, 0);`, + ` return { reject: 'quota', setStorage: { ...storage, policy: POLICY_DEFAULT, counts: counts2, rejections: rej, quotas: quotas2 } };`, + ` }`, + ` }`, + ``, + ` const fee = isBefore && amount >= effective.feeThreshold ? effective.feeFixed : 0n;`, + ` const fees2 = isBefore ? ({`, + ` ...fees,`, + ` total: String(parseBigint(fees.total ?? '0') + fee),`, + ` bySender: incBigintStr(fees.bySender, caller, fee),`, + ` bySink: effective.feeSink ? incBigintStr(fees.bySink, effective.feeSink, fee) : (fees.bySink || {}),`, + ` }) : fees;`, + ``, + ` const quotas2 = isBefore ? updateNestedIntMap(quotas, caller, bucket, 1) : quotas;`, + ` const last = { caller, to, amount: amount.toString(), fee: fee.toString(), bucket, hook };`, + ` const vestingSpent = storage.vestingSpent && typeof storage.vestingSpent === 'object' ? storage.vestingSpent : {};`, + ` const vestingUnlocked = storage.vestingUnlocked && typeof storage.vestingUnlocked === 'object' ? storage.vestingUnlocked : {};`, + ` const vestSched = effective?.vesting?.schedules ? effective.vesting.schedules[caller] : null;`, + ` const vestingSpent2 = (hook === 'afterTransfer' && vestSched) ? incBigintStr(vestingSpent, caller, amount) : vestingSpent;`, + ` const next = { ...storage, policy: POLICY_DEFAULT, counts: counts2, rejections, quotas: quotas2, fees: fees2, last, vestingSpent: vestingSpent2, vestingUnlocked, ...(escrowOut ? { escrow: escrowOut } : {}), escrowLastMatch: escrowLastMatchOut, ...(debugCtx ? { debugCtx } : {}) };`, + ` return { setStorage: next };`, + `}`, + ``, + `module.exports = {`, + ` hooks: {`, + ` beforeTransfer: (ctx) => applyPolicy(ctx, 'beforeTransfer'),`, + ` afterTransfer: (ctx) => applyPolicy(ctx, 'afterTransfer'),`, + ` beforeMint: (ctx) => applyPolicy(ctx, 'beforeMint'),`, + ` afterMint: (ctx) => applyPolicy(ctx, 'afterMint'),`, + ` beforeBurn: (ctx) => applyPolicy(ctx, 'beforeBurn'),`, + ` afterBurn: (ctx) => applyPolicy(ctx, 'afterBurn'),`, + ` },`, + ` views: {`, + ` ping: (token) => ({ ok: true, address: token.address, ticker: token.ticker, hasScript: true }),`, + ` getHookCounts: (token) => token.storage || {},`, + ` getPolicy: (token) => {`, + ` const st = token.storage || {};`, + ` const effective = policyToCanonical(pickPolicy(st));`, + ` return { policy: effective, defaultPolicy: POLICY_DEFAULT, storage: st, hasOverride: !!st.policyOverride };`, + ` },`, + ` getVestingStatus: (token, sender) => {`, + ` const st = token.storage || {};`, + ` const effective = policyToCanonical(pickPolicy(st));`, + ` const s = normHex(sender);`, + ` const sched = effective?.vesting?.schedules ? effective.vesting.schedules[s] : null;`, + ` const total = sched ? parseBigint(sched.total ?? 0) : 0n;`, + ` let unlocked = 0n;`, + ` try { unlocked = BigInt(String((st.vestingUnlocked || {})[s] ?? '0')); } catch { unlocked = 0n; }`, + ` let spent = 0n;`, + ` try { spent = BigInt(String((st.vestingSpent || {})[s] ?? '0')); } catch { spent = 0n; }`, + ` const unlockedCapped = unlocked < total ? unlocked : total;`, + ` const remaining = unlockedCapped > spent ? (unlockedCapped - spent) : 0n;`, + ` return { sender: s, schedule: sched || null, total: total.toString(), unlocked: unlocked.toString(), spent: spent.toString(), remaining: remaining.toString() };`, + ` },`, + ` getEscrowEntry: (token, id) => {`, + ` const st = token.storage || {};`, + ` const esc = escrowInit(st);`, + ` const n = Number(id || 0);`, + ` const e = escrowGetEntry(esc, n);`, + ` if (!e) return null;`, + ` return {`, + ` id: Number(e.id || 0),`, + ` depositor: normHex(e.depositor || ''),`, + ` beneficiary: e.beneficiary ? normHex(e.beneficiary) : null,`, + ` total: parseBigint(e.total ?? 0).toString(),`, + ` released: parseBigint(e.released ?? 0).toString(),`, + ` remaining: escrowRemaining(e).toString(),`, + ` status: String(e.status || ''),`, + ` };`, + ` },`, + ` getEscrowState: (token) => {`, + ` const st = token.storage || {};`, + ` const esc = escrowInit(st);`, + ` return { nextId: esc.nextId, entries: Object.keys(esc.entries || {}).length };`, + ` },`, + ` getDebugCtx: (token) => (token.storage || {}).debugCtx || null,`, + ` getSenderStats: (token, sender) => {`, + ` const s = normHex(sender);`, + ` const st = token.storage || {};`, + ` return {`, + ` sender: s,`, + ` quota: (st.quotas || {})[s] || {},`, + ` fee: (st.fees || {}).bySender ? (st.fees.bySender[s] || '0') : '0',`, + ` last: st.last || null,`, + ` };`, + ` },`, + ` },`, + `};`, + ``, + ) + + return lines.join("\n") +} diff --git a/better_testing/loadgen/src/token_script_complex_policy_smoke.ts b/better_testing/loadgen/src/token_script_complex_policy_smoke.ts new file mode 100644 index 000000000..0daba9abc --- /dev/null +++ b/better_testing/loadgen/src/token_script_complex_policy_smoke.ts @@ -0,0 +1,491 @@ +import { + buildSignedTokenTransferTxWithDemos, + ensureTokenAndBalances, + getTokenTargets, + getWalletAddresses, + maybeSilenceConsole, + nodeCall, + readWalletMnemonics, + sendTokenUpgradeScriptTxWithDemos, + withDemosWallet, +} from "./token_shared" +import { createHash } from "crypto" +import { getRunConfig, writeJson } from "./run_io" +import { buildComplexPolicyScript } from "./token_script_complex_policy_shared" + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function normalizeRpcUrl(url: string): string { + return url.replace(/\/+$/, "") + "/" +} + +function normalizeHexAddress(address: string): string { + const trimmed = (address ?? "").trim() + if (!trimmed) return trimmed + return trimmed.startsWith("0x") ? trimmed.toLowerCase() : ("0x" + trimmed).toLowerCase() +} + +function stringifyJson(value: unknown) { + return JSON.stringify(value, (_key, v) => (typeof v === "bigint" ? v.toString() : v), 2) +} + +function parseBigintOrZero(value: any): bigint { + try { + if (typeof value === "bigint") return value + if (typeof value === "number" && Number.isFinite(value)) return BigInt(value) + if (typeof value === "string") return BigInt(value) + } catch { + // ignore + } + return 0n +} + +function sortObjectDeep(value: any): any { + if (Array.isArray(value)) return value.map(sortObjectDeep) + if (!value || typeof value !== "object") return value + const out: Record = {} + for (const key of Object.keys(value).sort()) out[key] = sortObjectDeep((value as any)[key]) + return out +} + +function sha256Hex(input: string): string { + return createHash("sha256").update(input).digest("hex") +} + +function stableHashJson(value: any): string { + return sha256Hex(JSON.stringify(sortObjectDeep(value))) +} + +function safeBigIntFromString(value: any): bigint { + try { + if (typeof value === "bigint") return value + if (typeof value === "number" && Number.isFinite(value)) return BigInt(value) + return BigInt(String(value ?? "0")) + } catch { + return 0n + } +} + +function sumBigintStringMap(map: any): bigint { + if (!map || typeof map !== "object") return 0n + let sum = 0n + for (const v of Object.values(map)) sum += safeBigIntFromString(v) + return sum +} + +async function tokenGetCommittedWithFallback(rpcUrl: string, tokenAddress: string): Promise { + const committed = await nodeCall( + rpcUrl, + "token.getCommitted", + { tokenAddress }, + `token.getCommitted:complex_policy:${rpcUrl.replace(/[^a-z0-9]+/gi, "_")}`, + ) + if (committed?.result === 409) { + return await nodeCall( + rpcUrl, + "token.get", + { tokenAddress }, + `token.get:fallback:complex_policy:${rpcUrl.replace(/[^a-z0-9]+/gi, "_")}`, + ) + } + return committed +} + +async function waitForConsensusRounds(params: { rpcUrls: string[]; rounds: number; timeoutSec: number; pollMs: number }) { + const deadlineMs = Date.now() + Math.max(1, params.timeoutSec) * 1000 + const start: Record = {} + + for (const rpcUrl of params.rpcUrls) { + const res = await nodeCall(rpcUrl, "getLastBlockNumber", {}, `getLastBlockNumber:start:${rpcUrl}`) + const raw = res?.response + start[rpcUrl] = typeof raw === "number" ? raw : typeof raw === "string" ? Number.parseInt(raw, 10) : null + } + + while (Date.now() < deadlineMs) { + let allOk = true + for (const rpcUrl of params.rpcUrls) { + const base = start[rpcUrl] + const res = await nodeCall(rpcUrl, "getLastBlockNumber", {}, `getLastBlockNumber:poll:${rpcUrl}`) + const raw = res?.response + const current = typeof raw === "number" ? raw : typeof raw === "string" ? Number.parseInt(raw, 10) : null + const ok = typeof base === "number" && typeof current === "number" && current >= base + params.rounds + if (!ok) allOk = false + } + if (allOk) return { ok: true, start } + await sleep(Math.max(100, Math.floor(params.pollMs))) + } + + return { ok: false, start } +} + +function rejectHaystack(res: any): string { + const pieces: string[] = [] + if (typeof res?.extra?.error === "string") pieces.push(res.extra.error) + if (typeof res?.response === "string") pieces.push(res.response) + if (res?.response === false) pieces.push("false") + if (typeof res?.message === "string") pieces.push(res.message) + if (typeof res?.response?.message === "string") pieces.push(res.response.message) + return pieces.join(" ").toLowerCase() +} + +function extractRejectSignature(res: any): string | null { + const text = rejectHaystack(res) + for (const k of ["denylist", "not_allowlisted", "quota", "amount_limit", "zero_amount"]) { + if (text.includes(k)) return k + } + if (text.includes("rejected")) return "rejected" + return null +} + +function assertRejected(res: any, expectedMessageSubstring: string) { + if (res?.result === 200) { + throw new Error(`Expected rejection but got result=200: ${JSON.stringify(res)}`) + } + const text = rejectHaystack(res) + if (!text.includes(expectedMessageSubstring.toLowerCase())) { + throw new Error(`Expected error to include "${expectedMessageSubstring}" but got: ${JSON.stringify(res)}`) + } +} + +async function callView(rpcUrl: string, tokenAddress: string, method: string, args: any[]) { + return await nodeCall(rpcUrl, "token.callView", { tokenAddress, method, args }, `token.callView:${method}`) +} + +async function getBalance(rpcUrl: string, tokenAddress: string, address: string): Promise { + const res = await nodeCall(rpcUrl, "token.getBalance", { tokenAddress, address }, `token.getBalance:${address}`) + if (res?.result !== 200) throw new Error(`token.getBalance failed: ${JSON.stringify(res)}`) + return parseBigintOrZero(res?.response?.balance) +} + +async function broadcastSignedTxOnce(params: { rpcUrl: string; mnemonic: string; signedTx: any }) { + return await withDemosWallet({ + rpcUrl: params.rpcUrl, + mnemonic: params.mnemonic, + fn: async (demos) => { + const validity = await (demos as any).confirm(params.signedTx) + const res = await (demos as any).broadcast(validity) + return { validity, res } + }, + }) +} + +export async function runTokenScriptComplexPolicySmoke() { + maybeSilenceConsole() + + const targets = getTokenTargets().map(normalizeRpcUrl) + const rpcUrl = targets[0]! + + const wallets = await readWalletMnemonics() + if (wallets.length < 3) throw new Error("token_script_complex_policy_smoke requires 3 wallets (owner, other, attacker)") + const ownerMnemonic = wallets[0]! + const otherMnemonic = wallets[1]! + const attackerMnemonic = wallets[2]! + + const walletAddresses = (await getWalletAddresses(rpcUrl, [ownerMnemonic, otherMnemonic, attackerMnemonic])).map(normalizeHexAddress) + const owner = walletAddresses[0]! + const other = walletAddresses[1]! + const attacker = walletAddresses[2]! + + const { tokenAddress } = await ensureTokenAndBalances(rpcUrl, ownerMnemonic, walletAddresses) + + const scriptCode = buildComplexPolicyScript({ + allowlist: [owner, other], // attacker is not allowlisted + denylist: [attacker], // explicit deny branch + quotaPerBucket: 3, + bucketMs: 60_000, + amountLimit: 1000n, + feeThreshold: 10n, + feeFixed: 1n, + feeSink: owner, + }) + + const upgrade = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== owner) throw new Error(`owner identity mismatch: ${fromHex} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenUpgradeScriptTxWithDemos({ + demos, + tokenAddress, + scriptCode, + methodNames: ["ping", "getHookCounts", "getPolicy", "getSenderStats"], + nonce, + }) + }, + }) + + const waitConsensus = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitConsensus.ok) throw new Error("Consensus wait failed after upgradeScript") + + // 1) allowlisted transfer (owner -> other), amount >= feeThreshold to exercise fee branch + const baseTimestamp = Date.now() + const okTransferTx = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== owner) throw new Error(`owner identity mismatch: ${fromHex} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await buildSignedTokenTransferTxWithDemos({ demos, tokenAddress, to: other, amount: 10n, nonce, timestamp: baseTimestamp }) + }, + }) + const okTransfer = await broadcastSignedTxOnce({ rpcUrl, mnemonic: ownerMnemonic, signedTx: (okTransferTx as any).signedTx }) + if ((okTransfer as any)?.res?.result !== 200) { + throw new Error(`Expected ok transfer but got: ${JSON.stringify(okTransfer)}`) + } + + const waitConsensusAfterOk = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitConsensusAfterOk.ok) throw new Error("Consensus wait failed after ok transfer") + + // 2) attacker transfer should reject deterministically on all nodes (denylist + not_allowlisted). + const invalidTx = await withDemosWallet({ + rpcUrl, + mnemonic: attackerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== attacker) throw new Error(`attacker identity mismatch: ${fromHex} !== ${attacker}`) + const nonce = Number(await demos.getAddressNonce(attacker)) + 1 + const timestamp = Date.now() + return await buildSignedTokenTransferTxWithDemos({ demos, tokenAddress, to: other, amount: 1n, nonce, timestamp }) + }, + }) + + const invalidBroadcastPerNode: Record = {} + for (const url of targets) { + const out = await withDemosWallet({ + rpcUrl: url, + mnemonic: attackerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== attacker) throw new Error(`attacker identity mismatch: ${fromHex} !== ${attacker}`) + const validity = await (demos as any).confirm(invalidTx.signedTx) + const res = await (demos as any).broadcast(validity) + return { validity, res } + }, + }) + invalidBroadcastPerNode[url] = out + } + + const rejectSignatures = targets.map(url => ({ url, sig: extractRejectSignature(invalidBroadcastPerNode[url]?.res) })) + const rejectDeterministic = + rejectSignatures.every(e => !!e.sig) && rejectSignatures.every(e => e.sig === rejectSignatures[0]!.sig) + if (!rejectDeterministic) { + throw new Error(`Non-deterministic reject across nodes: ${stringifyJson({ rejectSignatures, invalidBroadcastPerNode })}`) + } + for (const url of targets) { + assertRejected(invalidBroadcastPerNode[url]?.res, "denylist") + } + + // 3) quota branch: 3 transfers in the same bucket should reject the 3rd. + const quotaBefore = { + owner: await getBalance(rpcUrl, tokenAddress, owner), + other: await getBalance(rpcUrl, tokenAddress, other), + } + + const quotaTimestamp = baseTimestamp + const quotaResults: any[] = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== owner) throw new Error(`owner identity mismatch: ${fromHex} !== ${owner}`) + const baseNonce = Number(await demos.getAddressNonce(owner)) + const out: any[] = [] + for (let i = 0; i < 3; i++) { + const nonce = baseNonce + 1 + i + const tx = await buildSignedTokenTransferTxWithDemos({ + demos, + tokenAddress, + to: other, + amount: 1n, + nonce, + timestamp: quotaTimestamp, + }) + const validity = await (demos as any).confirm(tx.signedTx) + const res = await (demos as any).broadcast(validity) + out.push({ tx, validity, out: res }) + } + return out + }, + }) + + const waitConsensus3 = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitConsensus3.ok) throw new Error("Consensus wait failed after quota burst") + + const quotaAfter = { + owner: await getBalance(rpcUrl, tokenAddress, owner), + other: await getBalance(rpcUrl, tokenAddress, other), + } + + const appliedCount = + quotaBefore.owner - quotaAfter.owner === 2n && quotaAfter.other - quotaBefore.other === 2n ? 2 : null + if (appliedCount !== 2) { + throw new Error( + `Expected quota to apply only 2/3 transfers but got deltas: ${stringifyJson({ + ownerDelta: (quotaBefore.owner - quotaAfter.owner).toString(), + otherDelta: (quotaAfter.other - quotaBefore.other).toString(), + quotaResults: quotaResults.map(r => r?.out), + })}`, + ) + } + + const waitConsensus2 = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitConsensus2.ok) throw new Error("Consensus wait failed after policy transfers") + + // Verify policy views respond on all nodes and customState (storage) has the expected structure. + const policyPerNode: Record = {} + const senderStatsPerNode: Record = {} + for (const url of targets) { + const policy = await callView(url, tokenAddress, "getPolicy", []) + policyPerNode[url] = policy + if (policy?.result !== 200) throw new Error(`getPolicy failed on ${url}: ${JSON.stringify(policy)}`) + const stats = await callView(url, tokenAddress, "getSenderStats", [owner]) + senderStatsPerNode[url] = stats + if (stats?.result !== 200) throw new Error(`getSenderStats failed on ${url}: ${JSON.stringify(stats)}`) + } + + // Invariants: (1) customState deterministic across nodes, (2) fee accounting, (3) quotas/counters, (4) totalSupply == sum(balances) + const policyValuePerNode: Record = {} + const policyStorageHashPerNode: Record = {} + const policyHashPerNode: Record = {} + for (const url of targets) { + const value = policyPerNode[url]?.response?.value + if (!value || typeof value !== "object") { + throw new Error(`getPolicy missing response.value on ${url}: ${JSON.stringify(policyPerNode[url])}`) + } + policyValuePerNode[url] = value + policyStorageHashPerNode[url] = stableHashJson(value.storage ?? null) + policyHashPerNode[url] = stableHashJson(value.policy ?? null) + } + + const firstStorageHash = policyStorageHashPerNode[targets[0]!]! + const firstPolicyHash = policyHashPerNode[targets[0]!]! + for (const url of targets) { + if (policyStorageHashPerNode[url] !== firstStorageHash) { + throw new Error( + `Non-deterministic policy storage across nodes: ${stringifyJson({ policyStorageHashPerNode, policyValuePerNode })}`, + ) + } + if (policyHashPerNode[url] !== firstPolicyHash) { + throw new Error(`Non-deterministic policy config across nodes: ${stringifyJson({ policyHashPerNode, policyValuePerNode })}`) + } + } + + const canonicalStorage = policyValuePerNode[targets[0]!]!.storage ?? {} + const fees = canonicalStorage?.fees ?? {} + const feeTotal = safeBigIntFromString(fees?.total ?? "0") + const feeBySenderSum = sumBigintStringMap(fees?.bySender ?? {}) + const feeBySinkSum = sumBigintStringMap(fees?.bySink ?? {}) + if (feeTotal !== feeBySenderSum) { + throw new Error(`Fee invariant failed: fees.total != sum(fees.bySender): ${stringifyJson({ fees })}`) + } + if (feeTotal !== feeBySinkSum) { + throw new Error(`Fee invariant failed: fees.total != sum(fees.bySink): ${stringifyJson({ fees })}`) + } + if (feeTotal !== 1n) { + throw new Error(`Fee invariant failed: expected fees.total == 1 but got ${feeTotal.toString()}: ${stringifyJson({ fees })}`) + } + if (safeBigIntFromString(fees?.bySender?.[owner] ?? "0") !== 1n) { + throw new Error(`Fee invariant failed: expected fees.bySender[owner] == 1: ${stringifyJson({ fees, owner })}`) + } + if (safeBigIntFromString(fees?.bySink?.[owner] ?? "0") !== 1n) { + throw new Error(`Fee invariant failed: expected fees.bySink[owner] == 1: ${stringifyJson({ fees, owner })}`) + } + + const counts = canonicalStorage?.counts ?? {} + if (Number(counts?.beforeTransfer ?? 0) !== 3 || Number(counts?.afterTransfer ?? 0) !== 3) { + throw new Error(`Counter invariant failed: expected before/afterTransfer == 3: ${stringifyJson({ counts })}`) + } + const quotaOwnerBucket0 = canonicalStorage?.quotas?.[owner]?.["0"] ?? canonicalStorage?.quotas?.[owner]?.[0] + if (Number(quotaOwnerBucket0 ?? 0) !== 3) { + throw new Error(`Quota invariant failed: expected quotas[owner][0] == 3: ${stringifyJson({ quotas: canonicalStorage?.quotas })}`) + } + + const supplyInvariantPerNode: Record = {} + for (const url of targets) { + const tokenGet = await tokenGetCommittedWithFallback(url, tokenAddress) + supplyInvariantPerNode[url] = tokenGet + if (tokenGet?.result !== 200) { + throw new Error(`Supply invariant: token.getCommitted failed on ${url}: ${JSON.stringify(tokenGet)}`) + } + const state = tokenGet?.response?.state ?? {} + const totalSupply = safeBigIntFromString(state?.totalSupply ?? "0") + const balances = state?.balances ?? {} + let sumBalances = 0n + for (const v of Object.values(balances)) sumBalances += safeBigIntFromString(v) + if (totalSupply !== sumBalances) { + throw new Error( + `Supply invariant failed on ${url}: totalSupply != sum(balances): ${stringifyJson({ + totalSupply: totalSupply.toString(), + sumBalances: sumBalances.toString(), + })}`, + ) + } + } + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_script_complex_policy_smoke` + const summary = { + runId: run.runId, + scenario: "token_script_complex_policy_smoke", + tokenAddress, + rpcUrls: targets, + addresses: { owner, other, attacker }, + txs: { upgrade, okTransfer }, + invalidBroadcastPerNode, + rejectSignatures, + quota: { + baseTimestamp, + before: { owner: quotaBefore.owner.toString(), other: quotaBefore.other.toString() }, + after: { owner: quotaAfter.owner.toString(), other: quotaAfter.other.toString() }, + broadcastResults: quotaResults.map(r => ({ out: r?.out, result: r?.out?.result })), + }, + policyPerNode, + senderStatsPerNode, + invariants: { + policyStorageHashPerNode, + policyHashPerNode, + fees: { + expectedTotal: "1", + observed: fees, + }, + counts, + quotas: canonicalStorage?.quotas ?? null, + supply: { + ok: true, + perNode: targets.map(url => ({ rpcUrl: url, ok: supplyInvariantPerNode[url]?.result === 200 })), + }, + }, + ok: true, + timestamp: new Date().toISOString(), + } + + writeJson(`${artifactBase}.summary.json`, summary) + console.log(JSON.stringify({ token_script_complex_policy_smoke_summary: summary }, null, 2)) +} diff --git a/better_testing/loadgen/src/token_script_complex_policy_vesting_lockup.ts b/better_testing/loadgen/src/token_script_complex_policy_vesting_lockup.ts new file mode 100644 index 000000000..cfe72fa28 --- /dev/null +++ b/better_testing/loadgen/src/token_script_complex_policy_vesting_lockup.ts @@ -0,0 +1,500 @@ +import { + buildSignedTokenTransferTxWithDemos, + ensureTokenAndBalances, + getTokenTargets, + getWalletAddresses, + maybeSilenceConsole, + nodeCall, + readWalletMnemonics, + sendTokenMintTxWithDemos, + sendTokenTransferTxWithDemos, + sendTokenUpgradeScriptTxWithDemos, + withDemosWallet, +} from "./token_shared" +import { createHash } from "crypto" +import { getRunConfig, writeJson } from "./run_io" +import { buildComplexPolicyScript } from "./token_script_complex_policy_shared" + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function normalizeRpcUrl(url: string): string { + return url.replace(/\/+$/, "") + "/" +} + +function normalizeHexAddress(address: string): string { + const trimmed = (address ?? "").trim() + if (!trimmed) return trimmed + return trimmed.startsWith("0x") ? trimmed.toLowerCase() : ("0x" + trimmed).toLowerCase() +} + +function sortObjectDeep(value: any): any { + if (Array.isArray(value)) return value.map(sortObjectDeep) + if (!value || typeof value !== "object") return value + const out: Record = {} + for (const key of Object.keys(value).sort()) out[key] = sortObjectDeep((value as any)[key]) + return out +} + +function sha256Hex(input: string): string { + return createHash("sha256").update(input).digest("hex") +} + +function stableHashJson(value: any): string { + return sha256Hex(JSON.stringify(sortObjectDeep(value))) +} + +function stringifyJson(value: unknown) { + return JSON.stringify(value, (_key, v) => (typeof v === "bigint" ? v.toString() : v), 2) +} + +function parseBigintOrZero(value: any): bigint { + try { + if (typeof value === "bigint") return value + if (typeof value === "number" && Number.isFinite(value)) return BigInt(value) + return BigInt(String(value ?? "0")) + } catch { + return 0n + } +} + +function rejectHaystack(res: any): string { + const pieces: string[] = [] + if (typeof res?.extra?.error === "string") pieces.push(res.extra.error) + if (typeof res?.response === "string") pieces.push(res.response) + if (res?.response === false) pieces.push("false") + if (typeof res?.message === "string") pieces.push(res.message) + if (typeof res?.response?.message === "string") pieces.push(res.response.message) + return pieces.join(" ").toLowerCase() +} + +function extractRejectSignature(res: any): string | null { + const text = rejectHaystack(res) + for (const k of ["vesting_locked", "denylist", "not_allowlisted", "quota", "amount_limit", "zero_amount"]) { + if (text.includes(k)) return k + } + if (text.includes("rejected")) return "rejected" + return null +} + +function assertRejected(res: any, expectedMessageSubstring: string) { + if (res?.result === 200) { + throw new Error(`Expected rejection but got result=200: ${JSON.stringify(res)}`) + } + const text = rejectHaystack(res) + if (!text.includes(expectedMessageSubstring.toLowerCase())) { + throw new Error(`Expected error to include "${expectedMessageSubstring}" but got: ${JSON.stringify(res)}`) + } +} + +async function waitForConsensusRounds(params: { rpcUrls: string[]; rounds: number; timeoutSec: number; pollMs: number }) { + const deadlineMs = Date.now() + Math.max(1, params.timeoutSec) * 1000 + const start: Record = {} + + for (const rpcUrl of params.rpcUrls) { + const res = await nodeCall(rpcUrl, "getLastBlockNumber", {}, `getLastBlockNumber:start:${rpcUrl}`) + const raw = res?.response + start[rpcUrl] = typeof raw === "number" ? raw : typeof raw === "string" ? Number.parseInt(raw, 10) : null + } + + while (Date.now() < deadlineMs) { + let allOk = true + for (const rpcUrl of params.rpcUrls) { + const base = start[rpcUrl] + const res = await nodeCall(rpcUrl, "getLastBlockNumber", {}, `getLastBlockNumber:poll:${rpcUrl}`) + const raw = res?.response + const current = typeof raw === "number" ? raw : typeof raw === "string" ? Number.parseInt(raw, 10) : null + const ok = typeof base === "number" && typeof current === "number" && current >= base + params.rounds + if (!ok) allOk = false + } + if (allOk) return { ok: true, start } + await sleep(Math.max(100, Math.floor(params.pollMs))) + } + + return { ok: false, start } +} + +async function callView(rpcUrl: string, tokenAddress: string, method: string, args: any[]) { + return await nodeCall(rpcUrl, "token.callView", { tokenAddress, method, args }, `token.callView:${method}`) +} + +async function getBalance(rpcUrl: string, tokenAddress: string, address: string): Promise { + const res = await nodeCall(rpcUrl, "token.getBalance", { tokenAddress, address }, `token.getBalance:${address}`) + if (res?.result !== 200) throw new Error(`token.getBalance failed: ${JSON.stringify(res)}`) + return parseBigintOrZero(res?.response?.balance) +} + +async function broadcastSignedTxOnce(params: { rpcUrl: string; mnemonic: string; signedTx: any }) { + return await withDemosWallet({ + rpcUrl: params.rpcUrl, + mnemonic: params.mnemonic, + fn: async (demos) => { + const validity = await (demos as any).confirm(params.signedTx) + const res = await (demos as any).broadcast(validity) + return { validity, res } + }, + }) +} + +async function broadcastSignedTransferOnAllNodes(params: { + rpcUrls: string[] + mnemonic: string + signedTx: any + expectedRejectSubstring?: string | null +}) { + const perNode: Record = {} + for (const url of params.rpcUrls) { + const out = await withDemosWallet({ + rpcUrl: url, + mnemonic: params.mnemonic, + fn: async (demos) => { + const validity = await (demos as any).confirm(params.signedTx) + const res = await (demos as any).broadcast(validity) + return { validity, res } + }, + }) + perNode[url] = out + } + + if (params.expectedRejectSubstring) { + const rejectSignatures = params.rpcUrls.map(url => ({ url, sig: extractRejectSignature(perNode[url]?.res) })) + const deterministic = + rejectSignatures.every(e => !!e.sig) && rejectSignatures.every(e => e.sig === rejectSignatures[0]!.sig) + if (!deterministic) { + throw new Error(`Non-deterministic reject across nodes: ${stringifyJson({ rejectSignatures, perNode })}`) + } + for (const url of params.rpcUrls) assertRejected(perNode[url]?.res, params.expectedRejectSubstring) + return { ok: true, perNode, rejectSignatures } + } + + return { ok: true, perNode, rejectSignatures: null } +} + +export async function runTokenScriptComplexPolicyVestingLockup() { + maybeSilenceConsole() + + const targets = getTokenTargets().map(normalizeRpcUrl) + const rpcUrl = targets[0]! + + const wallets = await readWalletMnemonics() + if (wallets.length < 3) throw new Error("token_script_complex_policy_vesting_lockup requires 3 wallets (owner, other, attacker)") + const ownerMnemonic = wallets[0]! + const otherMnemonic = wallets[1]! + const attackerMnemonic = wallets[2]! + + const walletAddresses = (await getWalletAddresses(rpcUrl, [ownerMnemonic, otherMnemonic, attackerMnemonic])).map(normalizeHexAddress) + const owner = walletAddresses[0]! + const other = walletAddresses[1]! + const attacker = walletAddresses[2]! + + const { tokenAddress } = await ensureTokenAndBalances(rpcUrl, ownerMnemonic, walletAddresses) + + // Ensure "other" has enough balance to exercise lockup gates deterministically. + const mintToOther = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos) => { + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenMintTxWithDemos({ demos, tokenAddress, to: other, amount: 10n, nonce }) + }, + }) + if ((mintToOther as any)?.res?.result !== 200) throw new Error(`Mint to other failed: ${JSON.stringify(mintToOther)}`) + + const commandBase = 9_300_000n + const cmdUnlock2 = commandBase + 1n + const cmdUnlock3 = commandBase + 2n + const total = 5n + + const scriptCode = buildComplexPolicyScript({ + allowlist: [owner, other, attacker], + denylist: [], + quotaPerBucket: 0, + bucketMs: 60_000, + amountLimit: 100_000_000n, + feeThreshold: 0n, + feeFixed: 0n, + feeSink: null, + vesting: { + schedules: { + [other]: { total }, + }, + }, + debugCapture: true, + dynamicPolicy: { + admin: owner, + commandBase, + presets: {}, + vestingUnlocks: { + "1": { address: other, addUnlocked: 2n }, + "2": { address: other, addUnlocked: 3n }, + }, + }, + }) + + const upgrade = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos) => { + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenUpgradeScriptTxWithDemos({ + demos, + tokenAddress, + scriptCode, + methodNames: ["ping", "getHookCounts", "getPolicy", "getSenderStats", "getVestingStatus", "getDebugCtx"], + nonce, + }) + }, + }) + + const waitAfterUpgrade = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitAfterUpgrade.ok) throw new Error("Consensus wait failed after upgradeScript") + + // Baseline: attacker transfers are unaffected by vesting schedule for "other". + const attackerOkTransfer = await withDemosWallet({ + rpcUrl, + mnemonic: attackerMnemonic, + fn: async (demos) => { + const nonce = Number(await demos.getAddressNonce(attacker)) + 1 + return await sendTokenTransferTxWithDemos({ demos, tokenAddress, to: owner, amount: 1n, nonce }) + }, + }) + if ((attackerOkTransfer as any)?.res?.result !== 200) { + throw new Error(`Expected attacker baseline ok transfer but got: ${JSON.stringify(attackerOkTransfer)}`) + } + + const waitAfterAttackerOk = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitAfterAttackerOk.ok) throw new Error("Consensus wait failed after attacker baseline ok transfer") + + // Capture script hook context shape (useful to explain why this scenario uses admin-controlled releases). + const debugCtxPerNode: Record = {} + for (const url of targets) { + const res = await callView(url, tokenAddress, "getDebugCtx", []) + debugCtxPerNode[url] = res + } + + // Branch 1: before any unlock, transfer from "other" should reject with vesting_locked. + const preUnlockTx = await withDemosWallet({ + rpcUrl, + mnemonic: otherMnemonic, + fn: async (demos) => { + const nonce = Number(await demos.getAddressNonce(other)) + 1 + return await buildSignedTokenTransferTxWithDemos({ demos, tokenAddress, to: owner, amount: 1n, nonce }) + }, + }) + + const preUnlockReject = await broadcastSignedTransferOnAllNodes({ + rpcUrls: targets, + mnemonic: otherMnemonic, + signedTx: (preUnlockTx as any).signedTx, + expectedRejectSubstring: "vesting_locked", + }) + + async function sendAdminCommand(amount: bigint) { + return await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos) => { + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenTransferTxWithDemos({ demos, tokenAddress, to: owner, amount, nonce }) + }, + }) + } + + // Unlock 2 tokens for "other". + const unlock2 = await sendAdminCommand(cmdUnlock2) + if ((unlock2 as any)?.res?.result !== 200) throw new Error(`Unlock2 command failed: ${JSON.stringify(unlock2)}`) + + const waitAfterUnlock2 = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitAfterUnlock2.ok) throw new Error("Consensus wait failed after unlock2") + + // Branch 2: with unlocked=2, reject 3 and allow 1. + const midRejectTx = await withDemosWallet({ + rpcUrl, + mnemonic: otherMnemonic, + fn: async (demos) => { + const nonce = Number(await demos.getAddressNonce(other)) + 1 + return await buildSignedTokenTransferTxWithDemos({ demos, tokenAddress, to: owner, amount: 3n, nonce }) + }, + }) + + const midReject = await broadcastSignedTransferOnAllNodes({ + rpcUrls: targets, + mnemonic: otherMnemonic, + signedTx: (midRejectTx as any).signedTx, + expectedRejectSubstring: "vesting_locked", + }) + + const midOkTx = await withDemosWallet({ + rpcUrl, + mnemonic: otherMnemonic, + fn: async (demos) => { + const nonce = Number(await demos.getAddressNonce(other)) + 1 + return await buildSignedTokenTransferTxWithDemos({ demos, tokenAddress, to: owner, amount: 1n, nonce }) + }, + }) + + const midOkTransfer = await broadcastSignedTxOnce({ rpcUrl, mnemonic: otherMnemonic, signedTx: (midOkTx as any).signedTx }) + if ((midOkTransfer as any)?.res?.result !== 200) { + throw new Error(`Expected mid ok transfer but got: ${JSON.stringify(midOkTransfer)}`) + } + + const waitAfterMidOk = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitAfterMidOk.ok) throw new Error("Consensus wait failed after mid ok transfer") + + // Unlock remaining 3 (total unlocked becomes 5). + const unlock3 = await sendAdminCommand(cmdUnlock3) + if ((unlock3 as any)?.res?.result !== 200) throw new Error(`Unlock3 command failed: ${JSON.stringify(unlock3)}`) + + const waitAfterUnlock3 = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitAfterUnlock3.ok) throw new Error("Consensus wait failed after unlock3") + + // Branch 3: total unlocked=5, spent=1. Reject 5, allow 4. + const afterUnlockRejectTx = await withDemosWallet({ + rpcUrl, + mnemonic: otherMnemonic, + fn: async (demos) => { + const nonce = Number(await demos.getAddressNonce(other)) + 1 + return await buildSignedTokenTransferTxWithDemos({ demos, tokenAddress, to: owner, amount: 5n, nonce }) + }, + }) + + const afterUnlockReject = await broadcastSignedTransferOnAllNodes({ + rpcUrls: targets, + mnemonic: otherMnemonic, + signedTx: (afterUnlockRejectTx as any).signedTx, + expectedRejectSubstring: "vesting_locked", + }) + + const balancesBeforeFinal = { + owner: await getBalance(rpcUrl, tokenAddress, owner), + other: await getBalance(rpcUrl, tokenAddress, other), + } + + const finalOkTx = await withDemosWallet({ + rpcUrl, + mnemonic: otherMnemonic, + fn: async (demos) => { + const nonce = Number(await demos.getAddressNonce(other)) + 1 + return await buildSignedTokenTransferTxWithDemos({ demos, tokenAddress, to: owner, amount: 4n, nonce }) + }, + }) + + const finalOkTransfer = await broadcastSignedTxOnce({ rpcUrl, mnemonic: otherMnemonic, signedTx: (finalOkTx as any).signedTx }) + if ((finalOkTransfer as any)?.res?.result !== 200) { + throw new Error(`Expected final ok transfer but got: ${JSON.stringify(finalOkTransfer)}`) + } + + const waitAfterFinal = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitAfterFinal.ok) throw new Error("Consensus wait failed after final ok transfer") + + const balancesAfterFinal = { + owner: await getBalance(rpcUrl, tokenAddress, owner), + other: await getBalance(rpcUrl, tokenAddress, other), + } + + const ownerDelta = balancesAfterFinal.owner - balancesBeforeFinal.owner + const otherDelta = balancesBeforeFinal.other - balancesAfterFinal.other + if (ownerDelta !== 4n || otherDelta !== 4n) { + throw new Error( + `Expected final transfer to move 4 tokens but got deltas: ${stringifyJson({ + ownerDelta: ownerDelta.toString(), + otherDelta: otherDelta.toString(), + balancesBeforeFinal: { + owner: balancesBeforeFinal.owner.toString(), + other: balancesBeforeFinal.other.toString(), + }, + balancesAfterFinal: { + owner: balancesAfterFinal.owner.toString(), + other: balancesAfterFinal.other.toString(), + }, + })}`, + ) + } + + // Verify vesting status view is deterministic across nodes and reflects unlocked>=5 and spent=5. + const vestingPerNode: Record = {} + const vestingHashPerNode: Record = {} + for (const url of targets) { + const res = await callView(url, tokenAddress, "getVestingStatus", [other]) + vestingPerNode[url] = res + if (res?.result !== 200) throw new Error(`getVestingStatus failed on ${url}: ${JSON.stringify(res)}`) + vestingHashPerNode[url] = stableHashJson(res?.response?.value ?? null) + const spent = parseBigintOrZero(res?.response?.value?.spent) + if (spent !== 5n) throw new Error(`Expected vesting spent=5 but got ${spent.toString()} on ${url}: ${JSON.stringify(res)}`) + const unlocked = parseBigintOrZero(res?.response?.value?.unlocked) + if (unlocked < 5n) throw new Error(`Expected vesting unlocked>=5 but got ${unlocked.toString()} on ${url}: ${JSON.stringify(res)}`) + } + const first = targets[0]! + for (const url of targets) { + if (vestingHashPerNode[url] !== vestingHashPerNode[first]) { + throw new Error(`Non-deterministic getVestingStatus across nodes: ${stringifyJson({ vestingHashPerNode, vestingPerNode })}`) + } + } + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_script_complex_policy_vesting_lockup` + const summary = { + runId: run.runId, + scenario: "token_script_complex_policy_vesting_lockup", + tokenAddress, + rpcUrls: targets, + addresses: { owner, other, attacker }, + vesting: { + total: total.toString(), + commandBase: commandBase.toString(), + cmdUnlock2: cmdUnlock2.toString(), + cmdUnlock3: cmdUnlock3.toString(), + }, + txs: { mintToOther, upgrade, attackerOkTransfer, unlock2, unlock3, midOkTransfer, finalOkTransfer }, + rejects: { preUnlockReject, midReject, afterUnlockReject }, + balances: { + beforeFinal: { owner: balancesBeforeFinal.owner.toString(), other: balancesBeforeFinal.other.toString() }, + afterFinal: { owner: balancesAfterFinal.owner.toString(), other: balancesAfterFinal.other.toString() }, + }, + debugCtxPerNode, + vestingHashPerNode, + ok: true, + timestamp: new Date().toISOString(), + } + + writeJson(`${artifactBase}.summary.json`, summary) + console.log(JSON.stringify({ token_script_complex_policy_vesting_lockup_summary: summary }, null, 2)) +} diff --git a/better_testing/loadgen/src/token_script_hooks_correctness.ts b/better_testing/loadgen/src/token_script_hooks_correctness.ts new file mode 100644 index 000000000..4c6211e1b --- /dev/null +++ b/better_testing/loadgen/src/token_script_hooks_correctness.ts @@ -0,0 +1,400 @@ +import { + ensureTokenAndBalances, + getTokenTargets, + getWalletAddresses, + maybeSilenceConsole, + nodeCall, + readWalletMnemonics, + sendTokenBurnTxWithDemos, + sendTokenMintTxWithDemos, + sendTokenTransferTxWithDemos, + sendTokenUpgradeScriptTxWithDemos, + withDemosWallet, +} from "./token_shared" +import { getRunConfig, writeJson } from "./run_io" + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function normalizeRpcUrl(url: string): string { + return url.replace(/\/+$/, "") + "/" +} + +function normalizeHexAddress(address: string): string { + const trimmed = (address ?? "").trim() + if (!trimmed) return trimmed + return trimmed.startsWith("0x") ? trimmed.toLowerCase() : ("0x" + trimmed).toLowerCase() +} + +function stringifyJson(value: unknown) { + return JSON.stringify(value, (_key, v) => (typeof v === "bigint" ? v.toString() : v), 2) +} + +function parseIntOrZero(value: any): number { + if (typeof value === "number" && Number.isFinite(value)) return value + if (typeof value === "string") { + const n = Number.parseInt(value, 10) + return Number.isFinite(n) ? n : 0 + } + return 0 +} + +function parseBigintOrZero(value: any): bigint { + try { + if (typeof value === "bigint") return value + if (typeof value === "number" && Number.isFinite(value)) return BigInt(value) + if (typeof value === "string") return BigInt(value) + } catch { + // ignore + } + return 0n +} + +async function snapshot(rpcUrl: string, tokenAddress: string, addresses: string[]) { + const token = await nodeCall(rpcUrl, "token.get", { tokenAddress }, `token.get:${tokenAddress}`) + if (token?.result !== 200) throw new Error(`token.get failed: ${JSON.stringify(token)}`) + + const customState = token?.response?.state?.customState ?? {} + const supply = parseBigintOrZero(token?.response?.state?.totalSupply) + + const balances: Record = {} + for (const a of addresses) { + const bal = await nodeCall(rpcUrl, "token.getBalance", { tokenAddress, address: a }, `token.getBalance:${a}`) + if (bal?.result !== 200) throw new Error(`token.getBalance failed: ${JSON.stringify(bal)}`) + balances[a] = parseBigintOrZero(bal?.response?.balance) + } + + return { token, customState, supply, balances } +} + +async function waitForConsensusRounds(params: { rpcUrls: string[]; rounds: number; timeoutSec: number; pollMs: number }) { + const deadlineMs = Date.now() + Math.max(1, params.timeoutSec) * 1000 + const start: Record = {} + + for (const rpcUrl of params.rpcUrls) { + const res = await nodeCall(rpcUrl, "getLastBlockNumber", {}, `getLastBlockNumber:start:${rpcUrl}`) + start[rpcUrl] = typeof res?.response === "number" ? res.response : null + } + + while (Date.now() < deadlineMs) { + let allOk = true + for (const rpcUrl of params.rpcUrls) { + const base = start[rpcUrl] + const res = await nodeCall(rpcUrl, "getLastBlockNumber", {}, `getLastBlockNumber:poll:${rpcUrl}`) + const current = typeof res?.response === "number" ? res.response : null + const ok = typeof base === "number" && typeof current === "number" && current >= base + params.rounds + if (!ok) allOk = false + } + if (allOk) return { ok: true, start } + await sleep(Math.max(100, Math.floor(params.pollMs))) + } + + return { ok: false, start } +} + +async function waitForCustomStateCounts(params: { + rpcUrl: string + tokenAddress: string + addresses: string[] + expected: Record + timeoutSec: number +}) { + const deadline = Date.now() + Math.max(1, params.timeoutSec) * 1000 + let last = await snapshot(params.rpcUrl, params.tokenAddress, params.addresses) + while (Date.now() < deadline) { + last = await snapshot(params.rpcUrl, params.tokenAddress, params.addresses) + const state = last.customState ?? {} + let ok = true + for (const [k, v] of Object.entries(params.expected)) { + if (parseIntOrZero((state as any)[k]) !== v) { + ok = false + break + } + } + if (ok) return { ok: true, snapshot: last } + await sleep(500) + } + return { ok: false, snapshot: last } +} + +async function waitForCrossNodeCustomState(params: { + rpcUrls: string[] + tokenAddress: string + expected: Record + timeoutSec: number + pollMs: number +}) { + const deadline = Date.now() + Math.max(1, params.timeoutSec) * 1000 + let attempts = 0 + let last: any = null + while (Date.now() < deadline) { + attempts++ + const perNode: Record = {} + let allOk = true + for (const url of params.rpcUrls) { + const res = await nodeCall(url, "token.get", { tokenAddress: params.tokenAddress }, `token.get:cross:${attempts}:${url}`) + perNode[url] = res + if (res?.result !== 200) { + allOk = false + continue + } + const cs = res?.response?.state?.customState ?? {} + for (const [k, v] of Object.entries(params.expected)) { + if (parseIntOrZero((cs as any)[k]) !== v) { + allOk = false + break + } + } + } + last = perNode + if (allOk) return { ok: true, attempts, perNode } + await sleep(Math.max(50, Math.floor(params.pollMs))) + } + return { ok: false, attempts, perNode: last } +} + +export async function runTokenScriptHooksCorrectness() { + maybeSilenceConsole() + + const targets = getTokenTargets().map(normalizeRpcUrl) + const rpcUrl = targets[0]! + + const wallets = await readWalletMnemonics() + if (wallets.length < 2) throw new Error("token_script_hooks_correctness requires at least 2 wallets (owner, other)") + + const ownerMnemonic = wallets[0]! + const otherMnemonic = wallets[1]! + + const walletAddresses = (await getWalletAddresses(rpcUrl, [ownerMnemonic, otherMnemonic])).map(normalizeHexAddress) + const owner = walletAddresses[0]! + const other = walletAddresses[1]! + + const { tokenAddress } = await ensureTokenAndBalances(rpcUrl, ownerMnemonic, walletAddresses) + + const transferAmount = parseBigintOrZero(process.env.TOKEN_TRANSFER_AMOUNT ?? "1") + const mintAmount = parseBigintOrZero(process.env.TOKEN_MINT_AMOUNT ?? "1") + const burnAmount = parseBigintOrZero(process.env.TOKEN_BURN_AMOUNT ?? "1") + + const applyTimeoutSec = envInt("TOKEN_WAIT_APPLY_SEC", 120) + + const hookKeys = { + beforeTransfer: "beforeTransferCount", + afterTransfer: "afterTransferCount", + beforeMint: "beforeMintCount", + afterMint: "afterMintCount", + beforeBurn: "beforeBurnCount", + afterBurn: "afterBurnCount", + } + + const scriptCode = + process.env.TOKEN_SCRIPT_CODE ?? + [ + "function inc(storage, key) {", + " const cur = (storage && typeof storage === 'object' ? storage[key] : 0) || 0;", + " const next = Number(cur) + 1;", + " return { ...(storage && typeof storage === 'object' ? storage : {}), [key]: next };", + "}", + "", + "module.exports = {", + " hooks: {", + " beforeTransfer: (ctx) => ({ setStorage: inc(ctx.token.storage, 'beforeTransferCount') }),", + " afterTransfer: (ctx) => ({ setStorage: inc(ctx.token.storage, 'afterTransferCount') }),", + " beforeMint: (ctx) => ({ setStorage: inc(ctx.token.storage, 'beforeMintCount') }),", + " afterMint: (ctx) => ({ setStorage: inc(ctx.token.storage, 'afterMintCount') }),", + " beforeBurn: (ctx) => ({ setStorage: inc(ctx.token.storage, 'beforeBurnCount') }),", + " afterBurn: (ctx) => ({ setStorage: inc(ctx.token.storage, 'afterBurnCount') }),", + " },", + " views: {", + " getHookCounts: (token) => token.storage || {},", + " },", + "}", + "", + ].join("\n") + + const before = await snapshot(rpcUrl, tokenAddress, [owner, other]) + + const upgrade = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== owner) throw new Error(`owner identity mismatch: ${fromHex} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenUpgradeScriptTxWithDemos({ + demos, + tokenAddress, + scriptCode, + methodNames: ["getHookCounts"], + nonce, + }) + }, + }) + + const waitUpgradeConsensus = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitUpgradeConsensus.ok) throw new Error("Consensus wait failed after upgradeScript") + + const afterUpgrade = await snapshot(rpcUrl, tokenAddress, [owner, other]) + + // 1) Transfer owner -> other (should trigger before/after transfer hooks) + const transferTx = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== owner) throw new Error(`owner identity mismatch: ${fromHex} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenTransferTxWithDemos({ demos, tokenAddress, to: other, amount: transferAmount, nonce }) + }, + }) + + const waitTransferConsensus = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitTransferConsensus.ok) throw new Error("Consensus wait failed after transfer") + + const afterTransferCounts = await waitForCustomStateCounts({ + rpcUrl, + tokenAddress, + addresses: [owner, other], + expected: { [hookKeys.beforeTransfer]: 1, [hookKeys.afterTransfer]: 1 }, + timeoutSec: applyTimeoutSec, + }) + if (!afterTransferCounts.ok) throw new Error(`Transfer hook counts not visible: ${JSON.stringify(afterTransferCounts.snapshot.token)}`) + + const afterTransfer = afterTransferCounts.snapshot + const transferApplied = + afterTransfer.balances[owner] === afterUpgrade.balances[owner] - transferAmount && + afterTransfer.balances[other] === afterUpgrade.balances[other] + transferAmount + + // 2) Mint owner -> other (should trigger before/after mint hooks) + const mintTx = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== owner) throw new Error(`owner identity mismatch: ${fromHex} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenMintTxWithDemos({ demos, tokenAddress, to: other, amount: mintAmount, nonce }) + }, + }) + + const waitMintConsensus = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitMintConsensus.ok) throw new Error("Consensus wait failed after mint") + + const afterMintCounts = await waitForCustomStateCounts({ + rpcUrl, + tokenAddress, + addresses: [owner, other], + expected: { + [hookKeys.beforeTransfer]: 1, + [hookKeys.afterTransfer]: 1, + [hookKeys.beforeMint]: 1, + [hookKeys.afterMint]: 1, + }, + timeoutSec: applyTimeoutSec, + }) + if (!afterMintCounts.ok) throw new Error(`Mint hook counts not visible: ${JSON.stringify(afterMintCounts.snapshot.token)}`) + + const afterMint = afterMintCounts.snapshot + const mintApplied = + afterMint.supply === afterTransfer.supply + mintAmount && afterMint.balances[other] === afterTransfer.balances[other] + mintAmount + + // 3) Burn by other from self (should trigger before/after burn hooks) + const burnTx = await withDemosWallet({ + rpcUrl, + mnemonic: otherMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== other) throw new Error(`other identity mismatch: ${fromHex} !== ${other}`) + const nonce = Number(await demos.getAddressNonce(other)) + 1 + return await sendTokenBurnTxWithDemos({ demos, tokenAddress, from: other, amount: burnAmount, nonce }) + }, + }) + + const waitBurnConsensus = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitBurnConsensus.ok) throw new Error("Consensus wait failed after burn") + + const afterBurnCounts = await waitForCustomStateCounts({ + rpcUrl, + tokenAddress, + addresses: [owner, other], + expected: { + [hookKeys.beforeTransfer]: 1, + [hookKeys.afterTransfer]: 1, + [hookKeys.beforeMint]: 1, + [hookKeys.afterMint]: 1, + [hookKeys.beforeBurn]: 1, + [hookKeys.afterBurn]: 1, + }, + timeoutSec: applyTimeoutSec, + }) + if (!afterBurnCounts.ok) throw new Error(`Burn hook counts not visible: ${JSON.stringify(afterBurnCounts.snapshot.token)}`) + + const afterBurn = afterBurnCounts.snapshot + const burnApplied = + afterBurn.supply === afterMint.supply - burnAmount && afterBurn.balances[other] === afterMint.balances[other] - burnAmount + + const crossNodeCustomState = await waitForCrossNodeCustomState({ + rpcUrls: targets, + tokenAddress, + expected: { + [hookKeys.beforeTransfer]: 1, + [hookKeys.afterTransfer]: 1, + [hookKeys.beforeMint]: 1, + [hookKeys.afterMint]: 1, + [hookKeys.beforeBurn]: 1, + [hookKeys.afterBurn]: 1, + }, + timeoutSec: envInt("CROSS_NODE_TIMEOUT_SEC", 180), + pollMs: envInt("CROSS_NODE_POLL_MS", 500), + }) + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_script_hooks_correctness` + const summary = { + runId: run.runId, + scenario: "token_script_hooks_correctness", + tokenAddress, + rpcUrls: targets, + addresses: { owner, other }, + amounts: { transferAmount: transferAmount.toString(), mintAmount: mintAmount.toString(), burnAmount: burnAmount.toString() }, + txs: { upgrade, transferTx, mintTx, burnTx }, + snapshots: { before, afterUpgrade, afterTransfer, afterMint, afterBurn }, + assertions: { + transferApplied, + mintApplied, + burnApplied, + crossNodeCustomStateOk: crossNodeCustomState.ok, + }, + crossNodeCustomState, + ok: transferApplied && mintApplied && burnApplied && crossNodeCustomState.ok, + timestamp: new Date().toISOString(), + } + + writeJson(`${artifactBase}.summary.json`, summary) + console.log(stringifyJson({ token_script_hooks_correctness_summary: summary })) + if (!summary.ok) throw new Error("token_script_hooks_correctness failed assertions") +} + diff --git a/better_testing/loadgen/src/token_script_mint_loadgen.ts b/better_testing/loadgen/src/token_script_mint_loadgen.ts new file mode 100644 index 000000000..99cc9fd18 --- /dev/null +++ b/better_testing/loadgen/src/token_script_mint_loadgen.ts @@ -0,0 +1,450 @@ +import { Demos } from "@kynesyslabs/demosdk/websdk" +import { uint8ArrayToHex } from "@kynesyslabs/demosdk/encryption" +import { appendJsonl, getRunConfig, writeJson } from "./run_io" +import { + ensureTokenAndBalances, + getTokenTargets, + getWalletAddresses, + maybeSilenceConsole, + pickRecipient, + readWalletMnemonics, + sendTokenMintTxWithDemos, + waitForCrossNodeHolderPointersMatchBalances, + waitForCrossNodeTokenConsistency, + waitForRpcReady, + waitForTxReady, +} from "./token_shared" +import { maybeUpgradeScript } from "./token_script_perf_shared" + +type LoadgenConfig = { + targets: string[] + durationSec: number + concurrency: number + amount: bigint + sampleLimit: number + inflightPerWallet: number + avoidSelfRecipient: boolean + emitTimeseries: boolean + scriptWorkIters: number + scriptSetStorage: boolean + scriptUpgrade: boolean + scriptForceUpgrade: boolean +} + +type Counters = { + startedAtMs: number + endedAtMs: number + total: number + ok: number + error: number + errorSamples: Record +} + +type TimeseriesPoint = { + tSec: number + ok: number + total: number + error: number + tpsOk: number + latencyMs: { sampleCount: number; p50: number; p95: number; p99: number } + timestamp: string +} + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function envBool(name: string, fallback: boolean): boolean { + const raw = process.env[name] + if (!raw) return fallback + switch (raw.trim().toLowerCase()) { + case "1": + case "true": + case "yes": + case "y": + case "on": + return true + case "0": + case "false": + case "no": + case "n": + case "off": + return false + default: + return fallback + } +} + +function splitCsv(value: string | undefined): string[] { + return (value ?? "") + .split(",") + .map(s => s.trim()) + .filter(Boolean) +} + +function nowMs(): number { + return Date.now() +} + +function unique(values: string[]): string[] { + return Array.from(new Set(values)) +} + +function percentile(sorted: number[], p: number): number { + if (sorted.length === 0) return NaN + const idx = Math.min( + sorted.length - 1, + Math.max(0, Math.floor((p / 100) * (sorted.length - 1))), + ) + return sorted[idx]! +} + +class ReservoirSampler { + private seen = 0 + private readonly max: number + private readonly samples: number[] = [] + + constructor(maxSamples: number) { + this.max = Math.max(1, Math.floor(maxSamples)) + } + + add(value: number) { + this.seen++ + if (this.samples.length < this.max) { + this.samples.push(value) + return + } + const j = Math.floor(Math.random() * this.seen) + if (j < this.max) this.samples[j] = value + } + + snapshotSorted(): number[] { + const copy = this.samples.slice() + copy.sort((a, b) => a - b) + return copy + } + + size(): number { + return this.samples.length + } +} + +function getConfig(): LoadgenConfig { + const targets = getTokenTargets() + return { + targets, + durationSec: envInt("DURATION_SEC", 30), + concurrency: envInt("CONCURRENCY", Math.max(1, targets.length)), + amount: BigInt(process.env.TOKEN_MINT_AMOUNT ?? process.env.AMOUNT ?? "1"), + sampleLimit: envInt("SAMPLE_LIMIT", 200_000), + inflightPerWallet: Math.max(1, envInt("INFLIGHT_PER_WALLET", 1)), + avoidSelfRecipient: envBool("AVOID_SELF_RECIPIENT", true), + emitTimeseries: envBool("EMIT_TIMESERIES", true), + scriptWorkIters: Math.max(0, envInt("SCRIPT_WORK_ITERS", 0)), + scriptSetStorage: envBool("SCRIPT_SET_STORAGE", false), + scriptUpgrade: envBool("TOKEN_SCRIPT_UPGRADE", true), + scriptForceUpgrade: envBool("TOKEN_SCRIPT_FORCE_UPGRADE", false), + } +} + +async function worker(params: { + cfg: LoadgenConfig + counters: Counters + sampler: ReservoirSampler + timeseriesSampler: ReservoirSampler + stopAtMs: number + ownerMnemonic: string + workerId: number + tokenAddress: string + recipientAddresses: string[] + allocateNonce: () => number +}) { + const { cfg } = params + const rpcUrl = cfg.targets[params.workerId % cfg.targets.length]! + const demos = new Demos() + await waitForRpcReady(rpcUrl, envInt("WAIT_FOR_RPC_SEC", 120)) + await waitForTxReady(rpcUrl, envInt("WAIT_FOR_TX_SEC", 120)) + await demos.connect(rpcUrl) + await demos.connectWallet(params.ownerMnemonic, { algorithm: "ed25519" }) + + const sender = (await demos.crypto.getIdentity("ed25519")).publicKey + const senderHex = uint8ArrayToHex(sender) + const to = pickRecipient(params.recipientAddresses, senderHex, params.workerId, cfg.avoidSelfRecipient) + + async function sendOne() { + const start = performance.now() + params.counters.total++ + try { + const nonce = params.allocateNonce() + const { res } = await sendTokenMintTxWithDemos({ + demos, + tokenAddress: params.tokenAddress, + to, + amount: cfg.amount, + nonce, + }) + if (res?.result !== 200) { + throw new Error(`tx rejected: ${JSON.stringify(res)}`) + } + const elapsed = performance.now() - start + params.sampler.add(elapsed) + params.timeseriesSampler.add(elapsed) + params.counters.ok++ + } catch (err: any) { + const elapsed = performance.now() - start + params.sampler.add(elapsed) + params.timeseriesSampler.add(elapsed) + params.counters.error++ + const key = String(err?.message ?? err ?? "unknown").slice(0, 400) + params.counters.errorSamples[key] = (params.counters.errorSamples[key] ?? 0) + 1 + } + } + + const inflight = Math.max(1, cfg.inflightPerWallet) + const active = new Set>() + + function launchOne() { + const p = sendOne().finally(() => { + active.delete(p) + }) + active.add(p) + } + + while (nowMs() < params.stopAtMs) { + while (active.size < inflight && nowMs() < params.stopAtMs) { + launchOne() + } + if (active.size === 0) break + await Promise.race(Array.from(active)) + } + + await Promise.allSettled(Array.from(active)) +} + +export async function runTokenScriptMintLoadgen() { + maybeSilenceConsole() + const wallets = await readWalletMnemonics() + if (wallets.length === 0) throw new Error("No wallets found. Set WALLETS or MNEMONICS_DIR/WALLET_FILES.") + + const ownerMnemonic = wallets[0]! + const cfg = getConfig() + + const bootstrapRpc = cfg.targets[0]! + const allWalletAddresses = await getWalletAddresses(bootstrapRpc, wallets) + const ownerAddress = allWalletAddresses[0]! + + const { tokenAddress } = await ensureTokenAndBalances(bootstrapRpc, ownerMnemonic, allWalletAddresses) + + const script = await maybeUpgradeScript({ + rpcUrl: bootstrapRpc, + rpcUrls: cfg.targets, + ownerMnemonic, + ownerAddress, + tokenAddress, + workIters: cfg.scriptWorkIters, + setStorage: cfg.scriptSetStorage, + upgrade: cfg.scriptUpgrade, + force: cfg.scriptForceUpgrade, + }) + + const explicitRecipients = splitCsv(process.env.RECIPIENTS) + const recipients = explicitRecipients.length > 0 ? explicitRecipients : allWalletAddresses + + const nonceDemos = new Demos() + await waitForRpcReady(bootstrapRpc, envInt("WAIT_FOR_RPC_SEC", 120)) + await waitForTxReady(bootstrapRpc, envInt("WAIT_FOR_TX_SEC", 120)) + await nonceDemos.connect(bootstrapRpc) + await nonceDemos.connectWallet(ownerMnemonic, { algorithm: "ed25519" }) + const sender = (await nonceDemos.crypto.getIdentity("ed25519")).publicKey + const senderHex = uint8ArrayToHex(sender) + const currentNonce = await nonceDemos.getAddressNonce(senderHex) + let nextNonce = Number(currentNonce) + 1 + const allocateNonce = () => nextNonce++ + + const startedAtMs = nowMs() + const stopAtMs = startedAtMs + cfg.durationSec * 1000 + + const counters: Counters = { + startedAtMs, + endedAtMs: 0, + total: 0, + ok: 0, + error: 0, + errorSamples: {}, + } + + const sampler = new ReservoirSampler(cfg.sampleLimit) + const timeseriesSampler = new ReservoirSampler(50_000) + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_script_mint` + const artifacts = { + runId: run.runId, + runDir: run.runDir, + summaryPath: `${artifactBase}.summary.json`, + timeseriesPath: `${artifactBase}.timeseries.jsonl`, + } + + let lastPointAtMs = startedAtMs + let lastOk = 0 + let lastTotal = 0 + let lastError = 0 + + async function timeseriesLoop() { + if (!cfg.emitTimeseries) return + while (nowMs() < stopAtMs) { + await sleep(1000) + const now = nowMs() + const elapsedSinceLast = Math.max(0.001, (now - lastPointAtMs) / 1000) + lastPointAtMs = now + + const okDelta = counters.ok - lastOk + const totalDelta = counters.total - lastTotal + const errorDelta = counters.error - lastError + + lastOk = counters.ok + lastTotal = counters.total + lastError = counters.error + + const samples = timeseriesSampler.snapshotSorted() + const point: TimeseriesPoint = { + tSec: (now - startedAtMs) / 1000, + ok: okDelta, + total: totalDelta, + error: errorDelta, + tpsOk: okDelta / elapsedSinceLast, + latencyMs: { + sampleCount: timeseriesSampler.size(), + p50: percentile(samples, 50), + p95: percentile(samples, 95), + p99: percentile(samples, 99), + }, + timestamp: new Date().toISOString(), + } + + appendJsonl(artifacts.timeseriesPath, point) + } + } + + const effectiveConc = Math.max(1, cfg.concurrency) + + await Promise.all( + [ + ...Array.from({ length: effectiveConc }).map((_, idx) => + worker({ + cfg, + counters, + sampler, + timeseriesSampler, + stopAtMs, + ownerMnemonic, + workerId: idx, + tokenAddress, + recipientAddresses: recipients, + allocateNonce, + }), + ), + timeseriesLoop(), + ], + ) + + counters.endedAtMs = nowMs() + + const postRunSettleCheck = envBool("POST_RUN_SETTLE_CHECK", true) + const settleSample = unique([senderHex, ...recipients]).slice(0, envInt("POST_RUN_SETTLE_SAMPLE_ADDRESSES", 8)) + + const postRunSettle = postRunSettleCheck + ? await waitForCrossNodeTokenConsistency({ + rpcUrls: cfg.targets, + tokenAddress, + addresses: settleSample, + timeoutSec: envInt("POST_RUN_SETTLE_TIMEOUT_SEC", 120), + pollMs: envInt("POST_RUN_SETTLE_POLL_MS", 500), + }) + : null + + const holderPointerSettleCheck = envBool("POST_RUN_HOLDER_POINTER_CHECK", true) + const expectedPresent: Record = {} + if (postRunSettle?.ok && postRunSettle.perNode?.[0]?.snapshot?.balances) { + for (const [addr, balRaw] of Object.entries(postRunSettle.perNode[0].snapshot.balances)) { + try { + expectedPresent[addr] = BigInt(balRaw ?? "0") > 0n + } catch { + expectedPresent[addr] = false + } + } + } + + const holderPointerSettle = + holderPointerSettleCheck && Object.keys(expectedPresent).length > 0 + ? await waitForCrossNodeHolderPointersMatchBalances({ + rpcUrls: cfg.targets, + tokenAddress, + expectedPresent, + timeoutSec: envInt("POST_RUN_HOLDER_POINTER_TIMEOUT_SEC", 120), + pollMs: envInt("POST_RUN_HOLDER_POINTER_POLL_MS", 500), + }) + : null + + const durationSec = (counters.endedAtMs - counters.startedAtMs) / 1000 + const samples = sampler.snapshotSorted() + const summary = { + scenario: "token_script_mint", + tokenAddress, + script: { + tokenScriptUpgrade: cfg.scriptUpgrade, + tokenScriptForceUpgrade: cfg.scriptForceUpgrade, + workIters: cfg.scriptWorkIters, + setStorage: cfg.scriptSetStorage, + upgrade: script, + }, + ok: counters.ok, + total: counters.total, + error: counters.error, + errorSamples: counters.errorSamples, + durationSec, + okTps: counters.ok / Math.max(0.001, durationSec), + latencyMs: { + sampleCount: sampler.size(), + p50: percentile(samples, 50), + p95: percentile(samples, 95), + p99: percentile(samples, 99), + }, + config: { + targets: cfg.targets, + concurrency: effectiveConc, + inflightPerWallet: cfg.inflightPerWallet, + amount: cfg.amount.toString(), + waitForRpcSec: envInt("WAIT_FOR_RPC_SEC", 120), + tokenBootstrap: envBool("TOKEN_BOOTSTRAP", true), + tokenDistribute: envBool("TOKEN_DISTRIBUTE", true), + avoidSelfRecipient: cfg.avoidSelfRecipient, + }, + postRun: { + settleSample, + settle: postRunSettle, + holderPointers: holderPointerSettle, + }, + artifacts, + timestamp: new Date().toISOString(), + } + + writeJson(artifacts.summaryPath, summary) + console.log(JSON.stringify({ token_script_mint_summary: summary }, null, 2)) + + const strict = envBool("POST_RUN_SETTLE_STRICT", false) + if (strict && postRunSettleCheck && postRunSettle && !postRunSettle.ok) { + throw new Error("Post-run settle check failed (token_script_mint)") + } + const strictPointers = envBool("POST_RUN_HOLDER_POINTER_STRICT", false) + if (strictPointers && holderPointerSettleCheck && holderPointerSettle && !holderPointerSettle.ok) { + throw new Error("Post-run holder-pointer check failed (token_script_mint)") + } +} diff --git a/better_testing/loadgen/src/token_script_mint_ramp.ts b/better_testing/loadgen/src/token_script_mint_ramp.ts new file mode 100644 index 000000000..9b3807b49 --- /dev/null +++ b/better_testing/loadgen/src/token_script_mint_ramp.ts @@ -0,0 +1,153 @@ +import { runTokenScriptMintLoadgen } from "./token_script_mint_loadgen" +import { getRunConfig, writeJson } from "./run_io" + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function splitCsv(value: string | undefined): string[] { + return (value ?? "") + .split(",") + .map(s => s.trim()) + .filter(Boolean) +} + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +export async function runTokenScriptMintRamp() { + const rampConcurrency = splitCsv(process.env.RAMP_CONCURRENCY) + .map(s => Number.parseInt(s, 10)) + .filter(n => Number.isFinite(n) && n > 0) + + const rampInflight = splitCsv(process.env.RAMP_INFLIGHT_PER_WALLET) + .map(s => Number.parseInt(s, 10)) + .filter(n => Number.isFinite(n) && n > 0) + + const mode: "concurrency" | "inflight" = rampInflight.length > 0 ? "inflight" : "concurrency" + const stepDurationSec = envInt("STEP_DURATION_SEC", 15) + const cooldownSec = envInt("COOLDOWN_SEC", 3) + + if (mode === "concurrency" && rampConcurrency.length === 0) { + throw new Error("RAMP_CONCURRENCY must be a comma-separated list of positive ints") + } + if (mode === "inflight" && rampInflight.length === 0) { + throw new Error("RAMP_INFLIGHT_PER_WALLET must be a comma-separated list of positive ints") + } + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_script_mint_ramp` + const artifacts = { + runId: run.runId, + runDir: run.runDir, + summaryPath: `${artifactBase}.summary.json`, + } + + const results: any[] = [] + let reuseTokenAddress: string | null = null + + const fixedConcurrency = envInt("CONCURRENCY", 4) + const fixedInflight = envInt("INFLIGHT_PER_WALLET", 1) + + const steps = + mode === "inflight" + ? rampInflight.map(inflight => ({ concurrency: fixedConcurrency, inflightPerWallet: inflight })) + : rampConcurrency.map(concurrency => ({ concurrency, inflightPerWallet: fixedInflight })) + + for (const step of steps) { + process.env.SCENARIO = "token_script_mint" + process.env.DURATION_SEC = String(stepDurationSec) + process.env.CONCURRENCY = String(step.concurrency) + process.env.INFLIGHT_PER_WALLET = String(step.inflightPerWallet) + + if (reuseTokenAddress) { + process.env.TOKEN_ADDRESS = reuseTokenAddress + process.env.TOKEN_BOOTSTRAP = "false" + process.env.TOKEN_DISTRIBUTE = "false" + process.env.TOKEN_WAIT_DISTRIBUTION = "false" + process.env.TOKEN_SCRIPT_UPGRADE = "false" + } else { + if (!process.env.TOKEN_BOOTSTRAP) process.env.TOKEN_BOOTSTRAP = "true" + if (!process.env.TOKEN_SCRIPT_UPGRADE) process.env.TOKEN_SCRIPT_UPGRADE = "true" + } + + let stepSummary: any = null + let stepError: any = null + + const originalLog = console.log + const capture: any[] = [] + console.log = (...args: any[]) => { + capture.push(args) + originalLog(...args) + } + + try { + await runTokenScriptMintLoadgen() + for (const row of capture) { + const payload = row?.[0] + if (payload && typeof payload === "string") { + try { + const parsed = JSON.parse(payload) + if (parsed?.token_script_mint_summary) stepSummary = parsed.token_script_mint_summary + } catch { + // ignore + } + } else if (payload?.token_script_mint_summary) { + stepSummary = payload.token_script_mint_summary + } + } + if (!reuseTokenAddress && stepSummary?.tokenAddress) { + reuseTokenAddress = String(stepSummary.tokenAddress) + } + } catch (err: any) { + stepError = { message: err?.message ?? String(err) } + } finally { + console.log = originalLog + } + + results.push({ + concurrency: step.concurrency, + inflightPerWallet: step.inflightPerWallet, + stepDurationSec, + cooldownSec, + summary: stepSummary, + error: stepError, + }) + + if (cooldownSec > 0) await sleep(cooldownSec * 1000) + } + + const okSteps = results + .map(r => ({ concurrency: r.concurrency, inflightPerWallet: r.inflightPerWallet, okTps: r.summary?.okTps })) + .filter(r => typeof r.okTps === "number") + + const best = okSteps.sort((a, b) => (b.okTps ?? 0) - (a.okTps ?? 0))[0] ?? null + + const rampSummary = { + scenario: "token_script_mint_ramp", + mode, + bestByOkTps: best, + steps: results, + config: { + rampConcurrency: rampConcurrency.length > 0 ? rampConcurrency : null, + rampInflightPerWallet: rampInflight.length > 0 ? rampInflight : null, + fixedConcurrency, + fixedInflightPerWallet: fixedInflight, + stepDurationSec, + cooldownSec, + tokenMintAmount: process.env.TOKEN_MINT_AMOUNT ?? process.env.AMOUNT ?? "1", + scriptWorkIters: process.env.SCRIPT_WORK_ITERS ?? "0", + scriptSetStorage: process.env.SCRIPT_SET_STORAGE ?? "false", + }, + artifacts, + timestamp: new Date().toISOString(), + } + + writeJson(artifacts.summaryPath, rampSummary) + console.log(JSON.stringify({ token_script_mint_ramp_summary: rampSummary }, null, 2)) +} + diff --git a/better_testing/loadgen/src/token_script_perf_shared.ts b/better_testing/loadgen/src/token_script_perf_shared.ts new file mode 100644 index 000000000..48f32aa4e --- /dev/null +++ b/better_testing/loadgen/src/token_script_perf_shared.ts @@ -0,0 +1,197 @@ +import { nodeCall, sendTokenUpgradeScriptTxWithDemos, withDemosWallet } from "./token_shared" + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +async function callView(rpcUrl: string, tokenAddress: string, method: string, args: any[]) { + return await nodeCall(rpcUrl, "token.callView", { tokenAddress, method, args }, `token.callView:${method}`) +} + +export function buildPerfScript(params: { workIters: number; setStorage: boolean }) { + const work = Math.max(0, Math.floor(params.workIters)) + const setStorage = !!params.setStorage + + return [ + `function spin(n) {`, + ` let x = 0;`, + ` for (let i = 0; i < n; i++) x = (x + i) % 1000003;`, + ` return x;`, + `}`, + ``, + `function inc(storage, key) {`, + ` const base = storage && typeof storage === 'object' ? storage : {};`, + ` const cur = base[key] || 0;`, + ` const next = Number(cur) + 1;`, + ` return { ...base, [key]: next };`, + `}`, + ``, + `module.exports = {`, + ` hooks: {`, + ` beforeTransfer: (ctx) => (spin(${work}), ${setStorage ? "({ setStorage: inc(ctx.token.storage, 'beforeTransferCount') })" : "({})"}),`, + ` afterTransfer: (ctx) => (spin(${work}), ${setStorage ? "({ setStorage: inc(ctx.token.storage, 'afterTransferCount') })" : "({})"}),`, + ` beforeMint: (ctx) => (spin(${work}), ${setStorage ? "({ setStorage: inc(ctx.token.storage, 'beforeMintCount') })" : "({})"}),`, + ` afterMint: (ctx) => (spin(${work}), ${setStorage ? "({ setStorage: inc(ctx.token.storage, 'afterMintCount') })" : "({})"}),`, + ` beforeBurn: (ctx) => (spin(${work}), ${setStorage ? "({ setStorage: inc(ctx.token.storage, 'beforeBurnCount') })" : "({})"}),`, + ` afterBurn: (ctx) => (spin(${work}), ${setStorage ? "({ setStorage: inc(ctx.token.storage, 'afterBurnCount') })" : "({})"}),`, + ` },`, + ` views: {`, + ` ping: (token) => ({ ok: true, address: token.address, ticker: token.ticker, hasScript: true }),`, + ` getHookCounts: (token) => token.storage || {},`, + ` },`, + `}`, + ``, + ].join("\n") +} + +async function waitForConsensusRounds(params: { rpcUrls: string[]; rounds: number; timeoutSec: number; pollMs: number }) { + const deadlineMs = Date.now() + Math.max(1, params.timeoutSec) * 1000 + const start: Record = {} + + for (const rpcUrl of params.rpcUrls) { + const res = await nodeCall(rpcUrl, "getLastBlockNumber", {}, `getLastBlockNumber:start:${rpcUrl}`) + const raw = res?.response + start[rpcUrl] = typeof raw === "number" ? raw : typeof raw === "string" ? Number.parseInt(raw, 10) : null + } + + while (Date.now() < deadlineMs) { + let allOk = true + for (const rpcUrl of params.rpcUrls) { + const base = start[rpcUrl] + const res = await nodeCall(rpcUrl, "getLastBlockNumber", {}, `getLastBlockNumber:poll:${rpcUrl}`) + const raw = res?.response + const current = typeof raw === "number" ? raw : typeof raw === "string" ? Number.parseInt(raw, 10) : null + const ok = typeof base === "number" && typeof current === "number" && current >= base + params.rounds + if (!ok) allOk = false + } + if (allOk) return { ok: true, start } + await sleep(Math.max(100, Math.floor(params.pollMs))) + } + + return { ok: false, start } +} + +async function waitForScriptReadyOnAllNodes(params: { + rpcUrls: string[] + tokenAddress: string + timeoutSec: number + viewMethod: string + viewArgs: any[] +}) { + const deadline = Date.now() + Math.max(1, params.timeoutSec) * 1000 + let last: any = null + + while (Date.now() < deadline) { + let allOk = true + const perNode: Record = {} + for (const url of params.rpcUrls) { + const token = await nodeCall(url, "token.get", { tokenAddress: params.tokenAddress }, `token.get:ready:${url}`) + const view = await callView(url, params.tokenAddress, params.viewMethod, params.viewArgs) + perNode[url] = { token, view } + if (token?.result !== 200 || !token?.response?.metadata?.hasScript || view?.result !== 200) { + allOk = false + } + } + last = perNode + if (allOk) return { ok: true, perNode } + await sleep(500) + } + + return { ok: false, perNode: last } +} + +export async function maybeUpgradeScript(params: { + rpcUrl: string + rpcUrls: string[] + ownerMnemonic: string + ownerAddress: string + tokenAddress: string + workIters: number + setStorage: boolean + upgrade: boolean + force: boolean +}) { + const tokenGetDeadlineMs = Date.now() + Math.max(1, envInt("TOKEN_WAIT_APPLY_SEC", 60)) * 1000 + let token: any = null + while (Date.now() < tokenGetDeadlineMs) { + token = await nodeCall( + params.rpcUrl, + "token.get", + { tokenAddress: params.tokenAddress }, + `token.get:maybeUpgrade:${params.tokenAddress}`, + ) + if (token?.result === 200) break + const inFlux = token?.result === 409 && token?.response?.error === "STATE_IN_FLUX" + if (!inFlux) break + await sleep(250) + } + if (token?.result !== 200) { + throw new Error(`token.get failed before script upgrade: ${JSON.stringify(token)}`) + } + const hasScript = !!token?.response?.metadata?.hasScript + + if (!params.upgrade) { + if (!hasScript) throw new Error("TOKEN_SCRIPT_UPGRADE=false but token has no script (metadata.hasScript=false)") + return { upgraded: false, tokenGet: token, upgradeTx: null, ready: null } + } + + const viewMethod = process.env.TOKEN_VIEW_METHOD ?? "ping" + + if (hasScript && !params.force) { + const ready = await waitForScriptReadyOnAllNodes({ + rpcUrls: params.rpcUrls, + tokenAddress: params.tokenAddress, + timeoutSec: envInt("TOKEN_WAIT_APPLY_SEC", 60), + viewMethod, + viewArgs: [], + }) + if (!ready.ok) throw new Error(`Script present but ping not ready in time: ${JSON.stringify(ready)}`) + return { upgraded: false, tokenGet: token, upgradeTx: null, ready } + } + + const scriptCode = process.env.TOKEN_SCRIPT_CODE ?? buildPerfScript({ workIters: params.workIters, setStorage: params.setStorage }) + + const upgradeTx = await withDemosWallet({ + rpcUrl: params.rpcUrl, + mnemonic: params.ownerMnemonic, + fn: async (demos, fromHex) => { + if (fromHex.toLowerCase() !== params.ownerAddress.toLowerCase()) { + throw new Error(`owner identity mismatch: ${fromHex} !== ${params.ownerAddress}`) + } + const nonce = Number(await demos.getAddressNonce(params.ownerAddress)) + 1 + return await sendTokenUpgradeScriptTxWithDemos({ + demos, + tokenAddress: params.tokenAddress, + scriptCode, + methodNames: [viewMethod, "getHookCounts"], + nonce, + }) + }, + }) + + const waitConsensus = await waitForConsensusRounds({ + rpcUrls: params.rpcUrls, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitConsensus.ok) throw new Error("Consensus wait failed after upgradeScript") + + const ready = await waitForScriptReadyOnAllNodes({ + rpcUrls: params.rpcUrls, + tokenAddress: params.tokenAddress, + timeoutSec: envInt("TOKEN_WAIT_APPLY_SEC", 120), + viewMethod, + viewArgs: [], + }) + if (!ready.ok) throw new Error(`upgradeScript not visible in time: ${JSON.stringify(ready)}`) + + return { upgraded: true, tokenGet: token, upgradeTx, ready } +} diff --git a/better_testing/loadgen/src/token_script_rejects.ts b/better_testing/loadgen/src/token_script_rejects.ts new file mode 100644 index 000000000..d7a887356 --- /dev/null +++ b/better_testing/loadgen/src/token_script_rejects.ts @@ -0,0 +1,402 @@ +import { + buildSignedTokenTransferTxWithDemos, + ensureTokenAndBalances, + getTokenTargets, + getWalletAddresses, + maybeSilenceConsole, + nodeCall, + readWalletMnemonics, + sendTokenTransferTxWithDemos, + sendTokenUpgradeScriptTxWithDemos, + waitForCrossNodeTokenConsistency, + withDemosWallet, +} from "./token_shared" +import { getRunConfig, writeJson } from "./run_io" + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function normalizeRpcUrl(url: string): string { + return url.replace(/\/+$/, "") + "/" +} + +function normalizeHexAddress(address: string): string { + const trimmed = (address ?? "").trim() + if (!trimmed) return trimmed + return trimmed.startsWith("0x") ? trimmed.toLowerCase() : ("0x" + trimmed).toLowerCase() +} + +function parseBigintOrZero(value: any): bigint { + try { + if (typeof value === "bigint") return value + if (typeof value === "number" && Number.isFinite(value)) return BigInt(value) + if (typeof value === "string") return BigInt(value) + } catch { + // ignore + } + return 0n +} + +function stringifyJson(value: unknown) { + return JSON.stringify(value, (_key, v) => (typeof v === "bigint" ? v.toString() : v), 2) +} + +function assertRejected(res: any, expectedMessageSubstring: string) { + if (res?.result === 200) { + throw new Error(`Expected rejection but got result=200: ${JSON.stringify(res)}`) + } + const pieces: string[] = [] + if (typeof res?.extra?.error === "string") pieces.push(res.extra.error) + if (typeof res?.response === "string") pieces.push(res.response) + if (res?.response === false) pieces.push("false") + if (typeof res?.message === "string") pieces.push(res.message) + if (typeof res?.response?.message === "string") pieces.push(res.response.message) + const haystack = pieces.join(" ").toLowerCase() + if (!haystack.includes(expectedMessageSubstring.toLowerCase())) { + throw new Error(`Expected error to include "${expectedMessageSubstring}" but got: ${JSON.stringify(res)}`) + } +} + +function extractRejectSignature(res: any): string | null { + const pieces: string[] = [] + if (typeof res?.extra?.error === "string") pieces.push(res.extra.error) + if (typeof res?.response === "string") pieces.push(res.response) + if (typeof res?.message === "string") pieces.push(res.message) + if (typeof res?.response?.message === "string") pieces.push(res.response.message) + + const text = pieces.join(" ") + const m = text.match(/amount-too-large:[0-9]+>[0-9]+/i) + if (m?.[0]) return m[0].toLowerCase() + if (text.toLowerCase().includes("rejected")) return "rejected" + return null +} + +async function snapshot(rpcUrl: string, tokenAddress: string, addresses: string[]) { + const token = await nodeCall(rpcUrl, "token.get", { tokenAddress }, `token.get:${tokenAddress}`) + if (token?.result !== 200) throw new Error(`token.get failed: ${JSON.stringify(token)}`) + + const supply = parseBigintOrZero(token?.response?.state?.totalSupply) + const balances: Record = {} + for (const a of addresses) { + const bal = await nodeCall(rpcUrl, "token.getBalance", { tokenAddress, address: a }, `token.getBalance:${a}`) + if (bal?.result !== 200) throw new Error(`token.getBalance failed: ${JSON.stringify(bal)}`) + balances[a] = parseBigintOrZero(bal?.response?.balance) + } + const customState = token?.response?.state?.customState ?? {} + return { token, supply, balances, customState } +} + +function stableJson(value: any): string { + const sort = (v: any): any => { + if (Array.isArray(v)) return v.map(sort) + if (v && typeof v === "object") { + const out: any = {} + for (const k of Object.keys(v).sort()) out[k] = sort(v[k]) + return out + } + return v + } + return JSON.stringify(sort(value)) +} + +async function waitForCrossNodeCustomState(params: { + rpcUrls: string[] + tokenAddress: string + expectedCustomState: any + timeoutSec: number + pollMs: number +}) { + const deadline = Date.now() + Math.max(1, params.timeoutSec) * 1000 + let attempts = 0 + let last: any = null + const expectedStable = stableJson(params.expectedCustomState) + + while (Date.now() < deadline) { + attempts++ + const perNode: Record = {} + let allOk = true + for (const url of params.rpcUrls) { + const res = await nodeCall(url, "token.get", { tokenAddress: params.tokenAddress }, `token.get:cs:${attempts}:${url}`) + perNode[url] = res + if (res?.result !== 200) { + allOk = false + continue + } + const cs = res?.response?.state?.customState ?? {} + if (stableJson(cs) !== expectedStable) allOk = false + } + last = perNode + if (allOk) return { ok: true, attempts, perNode } + await sleep(Math.max(50, Math.floor(params.pollMs))) + } + + return { ok: false, attempts, perNode: last } +} + +async function waitForConsensusRounds(params: { rpcUrls: string[]; rounds: number; timeoutSec: number; pollMs: number }) { + const deadlineMs = Date.now() + Math.max(1, params.timeoutSec) * 1000 + const start: Record = {} + + for (const rpcUrl of params.rpcUrls) { + const res = await nodeCall(rpcUrl, "getLastBlockNumber", {}, `getLastBlockNumber:start:${rpcUrl}`) + start[rpcUrl] = typeof res?.response === "number" ? res.response : null + } + + while (Date.now() < deadlineMs) { + let allOk = true + for (const rpcUrl of params.rpcUrls) { + const base = start[rpcUrl] + const res = await nodeCall(rpcUrl, "getLastBlockNumber", {}, `getLastBlockNumber:poll:${rpcUrl}`) + const current = typeof res?.response === "number" ? res.response : null + const ok = typeof base === "number" && typeof current === "number" && current >= base + params.rounds + if (!ok) allOk = false + } + if (allOk) return { ok: true, start } + await sleep(Math.max(100, Math.floor(params.pollMs))) + } + + return { ok: false, start } +} + +export async function runTokenScriptRejects() { + maybeSilenceConsole() + + const targets = getTokenTargets().map(normalizeRpcUrl) + const rpcUrl = targets[0]! + + const wallets = await readWalletMnemonics() + if (wallets.length < 2) throw new Error("token_script_rejects requires at least 2 wallets (owner, other)") + const ownerMnemonic = wallets[0]! + const otherMnemonic = wallets[1]! + + const walletAddresses = (await getWalletAddresses(rpcUrl, [ownerMnemonic, otherMnemonic])).map(normalizeHexAddress) + const owner = walletAddresses[0]! + const other = walletAddresses[1]! + + const { tokenAddress } = await ensureTokenAndBalances(rpcUrl, ownerMnemonic, walletAddresses) + + const thresholdRaw = parseBigintOrZero(process.env.SCRIPT_REJECT_THRESHOLD ?? "1") + const threshold = thresholdRaw > 0n ? thresholdRaw : 1n + const tooLarge = threshold + 1n + const small = threshold + + const applyTimeoutSec = envInt("TOKEN_WAIT_APPLY_SEC", 120) + + const scriptCode = + process.env.TOKEN_SCRIPT_CODE ?? + [ + `const LIMIT = BigInt(${JSON.stringify(threshold.toString())});`, + "", + "module.exports = {", + " hooks: {", + " beforeTransfer: (ctx) => {", + " let amt = 0n;", + " try { amt = BigInt(ctx?.operationData?.amount ?? 0); } catch { amt = 0n; }", + " if (amt > LIMIT) return { reject: `amount-too-large:${amt.toString()}>${LIMIT.toString()}` };", + " return null;", + " },", + " },", + " views: {", + " getThreshold: (_token) => ({ threshold: LIMIT.toString() }),", + " },", + "}", + "", + ].join("\n") + + // We store threshold in customState/storage via the install-time state (token.customState). For this smoke/reject test, + // we just encode threshold in the script itself by default; but allow overriding via TOKEN_SCRIPT_CODE. + // (The HookExecutor passes token.storage=customState.) + + const before = await snapshot(rpcUrl, tokenAddress, [owner, other]) + + const upgrade = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== owner) throw new Error(`owner identity mismatch: ${fromHex} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenUpgradeScriptTxWithDemos({ demos, tokenAddress, scriptCode, methodNames: ["getThreshold"], nonce }) + }, + }) + + const waitUpgradeConsensus = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitUpgradeConsensus.ok) throw new Error("Consensus wait failed after upgradeScript") + + const viewPerNode: Record = {} + for (const url of targets) { + const res = await nodeCall(url, "token.callView", { tokenAddress, method: "getThreshold", args: [] }, `token.callView:getThreshold:${url}`) + viewPerNode[url] = res + if (res?.result !== 200) throw new Error(`token.callView failed on ${url}: ${JSON.stringify(res)}`) + const got = res?.response?.value?.threshold + if (String(got ?? "") !== threshold.toString()) { + throw new Error(`Unexpected getThreshold on ${url}: expected=${threshold.toString()} got=${stringifyJson(res?.response?.value)}`) + } + } + + // Valid transfer BEFORE invalid (proves hooks are active). + const okTransferBefore = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== owner) throw new Error(`owner identity mismatch: ${fromHex} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenTransferTxWithDemos({ demos, tokenAddress, to: other, amount: small, nonce }) + }, + }) + if (okTransferBefore?.res?.result !== 200) { + throw new Error(`Expected ok transfer-before but got: ${JSON.stringify(okTransferBefore?.res)}`) + } + + const waitOkBeforeConsensus = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitOkBeforeConsensus.ok) throw new Error("Consensus wait failed after ok transfer-before") + + const baseline = await snapshot(rpcUrl, tokenAddress, [owner, other]) + const okAppliedBefore = + baseline.balances[owner] === before.balances[owner] - small && baseline.balances[other] === before.balances[other] + small + + // Build ONE oversized transfer and confirm it across all nodes (determinism check). + const invalidTx = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== owner) throw new Error(`owner identity mismatch: ${fromHex} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + const timestamp = Date.now() + return await buildSignedTokenTransferTxWithDemos({ demos, tokenAddress, to: other, amount: tooLarge, nonce, timestamp }) + }, + }) + + const invalidBroadcastPerNode: Record = {} + for (const url of targets) { + const out = await withDemosWallet({ + rpcUrl: url, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== owner) throw new Error(`owner identity mismatch: ${fromHex} !== ${owner}`) + const validity = await (demos as any).confirm(invalidTx.signedTx) + const res = await (demos as any).broadcast(validity) + return { validity, res } + }, + }) + invalidBroadcastPerNode[url] = out + } + + const rejectSignatures = targets.map(url => ({ url, sig: extractRejectSignature(invalidBroadcastPerNode[url]?.res) })) + const rejectDeterministic = + rejectSignatures.every(e => !!e.sig) && rejectSignatures.every(e => e.sig === rejectSignatures[0]!.sig) + + if (!rejectDeterministic) { + throw new Error(`Non-deterministic reject across nodes: ${stringifyJson({ rejectSignatures, invalidBroadcastPerNode })}`) + } + + for (const url of targets) { + assertRejected(invalidBroadcastPerNode[url]?.res, "amount-too-large") + } + + const afterRejected = await (async () => { + const deadline = Date.now() + applyTimeoutSec * 1000 + let last = await snapshot(rpcUrl, tokenAddress, [owner, other]) + while (Date.now() < deadline) { + last = await snapshot(rpcUrl, tokenAddress, [owner, other]) + const unchanged = + last.supply === baseline.supply && + last.balances[owner] === baseline.balances[owner] && + last.balances[other] === baseline.balances[other] && + stableJson(last.customState) === stableJson(baseline.customState) + if (unchanged) return { ok: true, snapshot: last } + await sleep(500) + } + return { ok: false, snapshot: last } + })() + + const rejectStateUnchanged = afterRejected.ok + + // Valid transfer AFTER invalid (proves network continues and state applies). + const okTransferAfter = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== owner) throw new Error(`owner identity mismatch: ${fromHex} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenTransferTxWithDemos({ demos, tokenAddress, to: other, amount: small, nonce }) + }, + }) + if (okTransferAfter?.res?.result !== 200) throw new Error(`Expected ok transfer-after but got: ${JSON.stringify(okTransferAfter?.res)}`) + + const waitOkConsensus = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitOkConsensus.ok) throw new Error("Consensus wait failed after ok transfer-after") + + const afterOk = await snapshot(rpcUrl, tokenAddress, [owner, other]) + const okApplied = + afterOk.balances[owner] === baseline.balances[owner] - small && afterOk.balances[other] === baseline.balances[other] + small + + const crossNodeBalances = await waitForCrossNodeTokenConsistency({ + rpcUrls: targets, + tokenAddress, + addresses: [owner, other], + timeoutSec: envInt("CROSS_NODE_TIMEOUT_SEC", 180), + pollMs: envInt("CROSS_NODE_POLL_MS", 500), + }) + + const crossNodeCustomState = await waitForCrossNodeCustomState({ + rpcUrls: targets, + tokenAddress, + expectedCustomState: before.customState, + timeoutSec: envInt("CROSS_NODE_TIMEOUT_SEC", 180), + pollMs: envInt("CROSS_NODE_POLL_MS", 500), + }) + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_script_rejects` + const summary = { + runId: run.runId, + scenario: "token_script_rejects", + tokenAddress, + rpcUrls: targets, + addresses: { owner, other }, + config: { threshold: threshold.toString(), tooLarge: tooLarge.toString(), small: small.toString() }, + views: { getThreshold: viewPerNode }, + txs: { upgrade, okTransferBefore, invalidTx, okTransferAfter }, + broadcasts: { invalidBroadcastPerNode, rejectSignatures }, + snapshots: { before, baseline, afterRejected: afterRejected.snapshot, afterOk }, + assertions: { + okAppliedBefore, + rejectDeterministic, + rejectStateUnchanged, + okApplied, + crossNodeBalancesOk: crossNodeBalances.ok, + crossNodeCustomStateOk: crossNodeCustomState.ok, + }, + crossNodeBalances, + crossNodeCustomState, + ok: rejectStateUnchanged && okApplied && crossNodeBalances.ok && crossNodeCustomState.ok, + timestamp: new Date().toISOString(), + } + + writeJson(`${artifactBase}.summary.json`, summary) + console.log(stringifyJson({ token_script_rejects_summary: summary })) + if (!summary.ok) throw new Error("token_script_rejects failed assertions") +} diff --git a/better_testing/loadgen/src/token_script_smoke.ts b/better_testing/loadgen/src/token_script_smoke.ts new file mode 100644 index 000000000..518198158 --- /dev/null +++ b/better_testing/loadgen/src/token_script_smoke.ts @@ -0,0 +1,192 @@ +import { + ensureTokenAndBalances, + getTokenTargets, + getWalletAddresses, + maybeSilenceConsole, + nodeCall, + readWalletMnemonics, + sendTokenUpgradeScriptTxWithDemos, + withDemosWallet, +} from "./token_shared" +import { getRunConfig, writeJson } from "./run_io" + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function normalizeRpcUrl(url: string): string { + return url.replace(/\/+$/, "") + "/" +} + +function normalizeHexAddress(address: string): string { + const trimmed = (address ?? "").trim() + if (!trimmed) return trimmed + return trimmed.startsWith("0x") ? trimmed.toLowerCase() : ("0x" + trimmed).toLowerCase() +} + +function assertHasError(res: any, expectedError: string) { + if (res?.result === 200) throw new Error(`Expected error ${expectedError} but got 200: ${JSON.stringify(res)}`) + const err = res?.response?.error ?? res?.error + if (String(err ?? "").toUpperCase() !== expectedError.toUpperCase()) { + throw new Error(`Expected error=${expectedError} but got: ${JSON.stringify(res)}`) + } +} + +function stringifyJson(value: unknown) { + return JSON.stringify(value, (_key, v) => (typeof v === "bigint" ? v.toString() : v), 2) +} + +async function waitForConsensusRounds(params: { rpcUrls: string[]; rounds: number; timeoutSec: number; pollMs: number }) { + const deadlineMs = Date.now() + Math.max(1, params.timeoutSec) * 1000 + const start: Record = {} + + for (const rpcUrl of params.rpcUrls) { + const res = await nodeCall(rpcUrl, "getLastBlockNumber", {}, `getLastBlockNumber:start:${rpcUrl}`) + start[rpcUrl] = typeof res?.response === "number" ? res.response : null + } + + while (Date.now() < deadlineMs) { + let allOk = true + for (const rpcUrl of params.rpcUrls) { + const base = start[rpcUrl] + const res = await nodeCall(rpcUrl, "getLastBlockNumber", {}, `getLastBlockNumber:poll:${rpcUrl}`) + const current = typeof res?.response === "number" ? res.response : null + const ok = typeof base === "number" && typeof current === "number" && current >= base + params.rounds + if (!ok) allOk = false + } + if (allOk) return { ok: true, start } + await sleep(Math.max(100, Math.floor(params.pollMs))) + } + + return { ok: false, start } +} + +async function waitForTokenScriptApplied(params: { + rpcUrl: string + tokenAddress: string + timeoutSec: number + viewMethod: string + viewArgs: any[] +}) { + const deadline = Date.now() + Math.max(1, params.timeoutSec) * 1000 + let last: any = null + let lastView: any = null + while (Date.now() < deadline) { + last = await nodeCall(params.rpcUrl, "token.get", { tokenAddress: params.tokenAddress }, `token.get:${params.tokenAddress}`) + if (last?.result === 200) { + const hasScript = !!last?.response?.metadata?.hasScript + if (hasScript) { + lastView = await callView(params.rpcUrl, params.tokenAddress, params.viewMethod, params.viewArgs) + if (lastView?.result === 200) { + return { ok: true, tokenGet: last, view: lastView } + } + } + } + await sleep(500) + } + return { ok: false, tokenGet: last, view: lastView } +} + +async function callView(rpcUrl: string, tokenAddress: string, method: string, args: any[]) { + return await nodeCall(rpcUrl, "token.callView", { tokenAddress, method, args }, `token.callView:${method}`) +} + +export async function runTokenScriptSmoke() { + maybeSilenceConsole() + + const targets = getTokenTargets().map(normalizeRpcUrl) + const rpcUrl = targets[0]! + + const wallets = await readWalletMnemonics() + if (wallets.length < 1) throw new Error("token_script_smoke requires at least 1 wallet (owner)") + const ownerMnemonic = wallets[0]! + + const walletAddresses = (await getWalletAddresses(rpcUrl, [ownerMnemonic])).map(normalizeHexAddress) + const owner = walletAddresses[0]! + + const { tokenAddress } = await ensureTokenAndBalances(rpcUrl, ownerMnemonic, walletAddresses) + + const viewMethod = process.env.TOKEN_VIEW_METHOD ?? "hello" + + const preView = await callView(rpcUrl, tokenAddress, viewMethod, ["world"]) + assertHasError(preView, "NO_SCRIPT") + + const scriptCode = + process.env.TOKEN_SCRIPT_CODE ?? + [ + "module.exports = {", + " views: {", + " hello: (token, name) => ({ ok: true, hello: String(name ?? 'world'), ticker: token.ticker, address: token.address }),", + " },", + "}", + "", + ].join("\n") + + const upgrade = await withDemosWallet({ + rpcUrl, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + if (normalizeHexAddress(fromHex) !== owner) throw new Error(`owner identity mismatch: ${fromHex} !== ${owner}`) + const nonce = Number(await demos.getAddressNonce(owner)) + 1 + return await sendTokenUpgradeScriptTxWithDemos({ demos, tokenAddress, scriptCode, methodNames: [viewMethod], nonce }) + }, + }) + + const waitConsensus = await waitForConsensusRounds({ + rpcUrls: targets, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitConsensus.ok) throw new Error("Consensus wait failed after upgradeScript") + + const applied = await waitForTokenScriptApplied({ + rpcUrl, + tokenAddress, + timeoutSec: envInt("TOKEN_WAIT_APPLY_SEC", 120), + viewMethod, + viewArgs: ["world"], + }) + if (!applied.ok) throw new Error(`upgradeScript not visible in time: ${JSON.stringify({ tokenGet: applied.tokenGet, view: applied.view })}`) + + const perNodeViews: Record = {} + for (const url of targets) { + const res = await callView(url, tokenAddress, viewMethod, ["world"]) + perNodeViews[url] = res + if (res?.result !== 200) { + throw new Error(`token.callView failed on ${url}: ${JSON.stringify(res)}`) + } + const value = res?.response?.value + if (!value || value.ok !== true || value.hello !== "world") { + throw new Error(`Unexpected token.callView value on ${url}: ${JSON.stringify(res)}`) + } + } + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_script_smoke` + const summary = { + runId: run.runId, + scenario: "token_script_smoke", + tokenAddress, + rpcUrls: targets, + addresses: { owner }, + viewMethod, + txs: { upgrade }, + preView, + tokenGetAfterUpgrade: applied.tokenGet, + viewAfterUpgrade: applied.view, + perNodeViews, + ok: true, + timestamp: new Date().toISOString(), + } + + writeJson(`${artifactBase}.summary.json`, summary) + console.log(stringifyJson({ token_script_smoke_summary: summary })) +} diff --git a/better_testing/loadgen/src/token_script_transfer_loadgen.ts b/better_testing/loadgen/src/token_script_transfer_loadgen.ts new file mode 100644 index 000000000..44a53f7ff --- /dev/null +++ b/better_testing/loadgen/src/token_script_transfer_loadgen.ts @@ -0,0 +1,623 @@ +import { Demos } from "@kynesyslabs/demosdk/websdk" +import { uint8ArrayToHex } from "@kynesyslabs/demosdk/encryption" +import { appendJsonl, getRunConfig, writeJson } from "./run_io" +import { + ensureTokenAndBalances, + getTokenTargets, + getWalletAddresses, + maybeSilenceConsole, + nodeCall, + pickRecipient, + readWalletMnemonics, + sendTokenTransferTxWithDemos, + sendTokenUpgradeScriptTxWithDemos, + waitForCrossNodeHolderPointersMatchBalances, + waitForCrossNodeTokenConsistency, + waitForRpcReady, + waitForTxReady, + withDemosWallet, +} from "./token_shared" + +type LoadgenConfig = { + targets: string[] + durationSec: number + wallets: string[] + concurrency: number + amount: bigint + sampleLimit: number + inflightPerWallet: number + avoidSelfRecipient: boolean + emitTimeseries: boolean + scriptWorkIters: number + scriptSetStorage: boolean + scriptUpgrade: boolean + scriptForceUpgrade: boolean +} + +type Counters = { + startedAtMs: number + endedAtMs: number + total: number + ok: number + error: number + errorSamples: Record +} + +type TimeseriesPoint = { + tSec: number + ok: number + total: number + error: number + tpsOk: number + latencyMs: { sampleCount: number; p50: number; p95: number; p99: number } + timestamp: string +} + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function envBool(name: string, fallback: boolean): boolean { + const raw = process.env[name] + if (!raw) return fallback + switch (raw.trim().toLowerCase()) { + case "1": + case "true": + case "yes": + case "y": + case "on": + return true + case "0": + case "false": + case "no": + case "n": + case "off": + return false + default: + return fallback + } +} + +function splitCsv(value: string | undefined): string[] { + return (value ?? "") + .split(",") + .map(s => s.trim()) + .filter(Boolean) +} + +function nowMs(): number { + return Date.now() +} + +function percentile(sorted: number[], p: number): number { + if (sorted.length === 0) return NaN + const idx = Math.min( + sorted.length - 1, + Math.max(0, Math.floor((p / 100) * (sorted.length - 1))), + ) + return sorted[idx]! +} + +function unique(values: string[]): string[] { + const out: string[] = [] + const seen = new Set() + for (const v of values) { + const key = v.toLowerCase() + if (seen.has(key)) continue + seen.add(key) + out.push(v) + } + return out +} + +function normalizeRpcUrl(url: string): string { + return url.replace(/\/+$/, "") + "/" +} + +class ReservoirSampler { + private seen = 0 + private readonly max: number + private readonly samples: number[] = [] + + constructor(maxSamples: number) { + this.max = Math.max(1, Math.floor(maxSamples)) + } + + add(value: number) { + this.seen++ + if (this.samples.length < this.max) { + this.samples.push(value) + return + } + const j = Math.floor(Math.random() * this.seen) + if (j < this.max) this.samples[j] = value + } + + snapshotSorted(): number[] { + const copy = this.samples.slice() + copy.sort((a, b) => a - b) + return copy + } + + size(): number { + return this.samples.length + } +} + +function getConfig(wallets: string[]): LoadgenConfig { + return { + targets: getTokenTargets().map(normalizeRpcUrl), + durationSec: envInt("DURATION_SEC", 30), + wallets, + concurrency: envInt("CONCURRENCY", wallets.length || 1), + amount: BigInt(process.env.TOKEN_TRANSFER_AMOUNT ?? process.env.AMOUNT ?? "1"), + sampleLimit: envInt("SAMPLE_LIMIT", 200_000), + inflightPerWallet: Math.max(1, envInt("INFLIGHT_PER_WALLET", 1)), + avoidSelfRecipient: envBool("AVOID_SELF_RECIPIENT", true), + emitTimeseries: envBool("EMIT_TIMESERIES", true), + scriptWorkIters: Math.max(0, envInt("SCRIPT_WORK_ITERS", 0)), + scriptSetStorage: envBool("SCRIPT_SET_STORAGE", false), + scriptUpgrade: envBool("TOKEN_SCRIPT_UPGRADE", true), + scriptForceUpgrade: envBool("TOKEN_SCRIPT_FORCE_UPGRADE", false), + } +} + +async function callView(rpcUrl: string, tokenAddress: string, method: string, args: any[]) { + return await nodeCall(rpcUrl, "token.callView", { tokenAddress, method, args }, `token.callView:${method}`) +} + +async function waitForConsensusRounds(params: { rpcUrls: string[]; rounds: number; timeoutSec: number; pollMs: number }) { + const deadlineMs = Date.now() + Math.max(1, params.timeoutSec) * 1000 + const start: Record = {} + + for (const rpcUrl of params.rpcUrls) { + const res = await nodeCall(rpcUrl, "getLastBlockNumber", {}, `getLastBlockNumber:start:${rpcUrl}`) + start[rpcUrl] = typeof res?.response === "number" ? res.response : null + } + + while (Date.now() < deadlineMs) { + let allOk = true + for (const rpcUrl of params.rpcUrls) { + const base = start[rpcUrl] + const res = await nodeCall(rpcUrl, "getLastBlockNumber", {}, `getLastBlockNumber:poll:${rpcUrl}`) + const current = typeof res?.response === "number" ? res.response : null + const ok = typeof base === "number" && typeof current === "number" && current >= base + params.rounds + if (!ok) allOk = false + } + if (allOk) return { ok: true, start } + await sleep(Math.max(100, Math.floor(params.pollMs))) + } + + return { ok: false, start } +} + +async function waitForScriptReadyOnAllNodes(params: { + rpcUrls: string[] + tokenAddress: string + timeoutSec: number + viewMethod: string + viewArgs: any[] +}) { + const deadline = Date.now() + Math.max(1, params.timeoutSec) * 1000 + let last: any = null + + while (Date.now() < deadline) { + let allOk = true + const perNode: Record = {} + for (const url of params.rpcUrls) { + const token = await nodeCall(url, "token.get", { tokenAddress: params.tokenAddress }, `token.get:scriptReady:${url}`) + perNode[url] = { token } + if (token?.result !== 200 || !token?.response?.metadata?.hasScript) { + allOk = false + continue + } + const view = await callView(url, params.tokenAddress, params.viewMethod, params.viewArgs) + perNode[url].view = view + if (view?.result !== 200) { + allOk = false + continue + } + } + last = perNode + if (allOk) return { ok: true, perNode } + await sleep(500) + } + + return { ok: false, perNode: last } +} + +function buildPerfScript(params: { workIters: number; setStorage: boolean }) { + const work = Math.max(0, Math.floor(params.workIters)) + const setStorage = !!params.setStorage + + return [ + `function spin(n) {`, + ` let x = 0;`, + ` for (let i = 0; i < n; i++) x = (x + i) % 1000003;`, + ` return x;`, + `}`, + ``, + `function inc(storage, key) {`, + ` const base = storage && typeof storage === 'object' ? storage : {};`, + ` const cur = base[key] || 0;`, + ` const next = Number(cur) + 1;`, + ` return { ...base, [key]: next };`, + `}`, + ``, + `module.exports = {`, + ` hooks: {`, + ` beforeTransfer: (ctx) => (spin(${work}), ${setStorage ? "({ setStorage: inc(ctx.token.storage, 'beforeTransferCount') })" : "({})"}),`, + ` afterTransfer: (ctx) => (spin(${work}), ${setStorage ? "({ setStorage: inc(ctx.token.storage, 'afterTransferCount') })" : "({})"}),`, + ` beforeMint: (ctx) => (spin(${work}), ${setStorage ? "({ setStorage: inc(ctx.token.storage, 'beforeMintCount') })" : "({})"}),`, + ` afterMint: (ctx) => (spin(${work}), ${setStorage ? "({ setStorage: inc(ctx.token.storage, 'afterMintCount') })" : "({})"}),`, + ` beforeBurn: (ctx) => (spin(${work}), ${setStorage ? "({ setStorage: inc(ctx.token.storage, 'beforeBurnCount') })" : "({})"}),`, + ` afterBurn: (ctx) => (spin(${work}), ${setStorage ? "({ setStorage: inc(ctx.token.storage, 'afterBurnCount') })" : "({})"}),`, + ` },`, + ` views: {`, + ` ping: (token) => ({ ok: true, address: token.address, ticker: token.ticker, hasScript: true }),`, + ` getHookCounts: (token) => token.storage || {},`, + ` },`, + `}`, + ``, + ].join("\n") +} + +async function maybeUpgradeScript(params: { + rpcUrl: string + rpcUrls: string[] + ownerMnemonic: string + ownerAddress: string + tokenAddress: string + workIters: number + setStorage: boolean + upgrade: boolean + force: boolean +}) { + const token = await nodeCall(params.rpcUrl, "token.get", { tokenAddress: params.tokenAddress }, `token.get:maybeUpgrade:${params.tokenAddress}`) + if (token?.result !== 200) throw new Error(`token.get failed before script upgrade: ${JSON.stringify(token)}`) + const hasScript = !!token?.response?.metadata?.hasScript + + if (!params.upgrade) { + if (!hasScript) throw new Error("TOKEN_SCRIPT_UPGRADE=false but token has no script (metadata.hasScript=false)") + return { upgraded: false, tokenGet: token, upgradeTx: null, ready: null } + } + + if (hasScript && !params.force) { + const ready = await waitForScriptReadyOnAllNodes({ + rpcUrls: params.rpcUrls, + tokenAddress: params.tokenAddress, + timeoutSec: envInt("TOKEN_WAIT_APPLY_SEC", 60), + viewMethod: process.env.TOKEN_VIEW_METHOD ?? "ping", + viewArgs: [], + }) + if (!ready.ok) throw new Error(`Script present but ping not ready in time: ${JSON.stringify(ready)}`) + return { upgraded: false, tokenGet: token, upgradeTx: null, ready } + } + + const viewMethod = process.env.TOKEN_VIEW_METHOD ?? "ping" + const scriptCode = process.env.TOKEN_SCRIPT_CODE ?? buildPerfScript({ workIters: params.workIters, setStorage: params.setStorage }) + + const upgradeTx = await withDemosWallet({ + rpcUrl: params.rpcUrl, + mnemonic: params.ownerMnemonic, + fn: async (demos, fromHex) => { + if (fromHex.toLowerCase() !== params.ownerAddress.toLowerCase()) { + throw new Error(`owner identity mismatch: ${fromHex} !== ${params.ownerAddress}`) + } + const nonce = Number(await demos.getAddressNonce(params.ownerAddress)) + 1 + return await sendTokenUpgradeScriptTxWithDemos({ + demos, + tokenAddress: params.tokenAddress, + scriptCode, + methodNames: [viewMethod, "getHookCounts"], + nonce, + }) + }, + }) + + const waitConsensus = await waitForConsensusRounds({ + rpcUrls: params.rpcUrls, + rounds: envInt("CONSENSUS_ROUNDS", 1), + timeoutSec: envInt("CONSENSUS_TIMEOUT_SEC", 180), + pollMs: envInt("CONSENSUS_POLL_MS", 500), + }) + if (!waitConsensus.ok) throw new Error("Consensus wait failed after upgradeScript") + + const ready = await waitForScriptReadyOnAllNodes({ + rpcUrls: params.rpcUrls, + tokenAddress: params.tokenAddress, + timeoutSec: envInt("TOKEN_WAIT_APPLY_SEC", 120), + viewMethod, + viewArgs: [], + }) + if (!ready.ok) throw new Error(`upgradeScript not visible in time: ${JSON.stringify(ready)}`) + + return { upgraded: true, tokenGet: token, upgradeTx, ready } +} + +async function worker( + cfg: LoadgenConfig, + counters: Counters, + sampler: ReservoirSampler, + timeseriesSampler: ReservoirSampler, + stopAtMs: number, + walletMnemonic: string, + workerId: number, + tokenAddress: string, + recipientAddresses: string[], +) { + const rpcUrl = cfg.targets[workerId % cfg.targets.length]! + const demos = new Demos() + await waitForRpcReady(rpcUrl, envInt("WAIT_FOR_RPC_SEC", 120)) + await waitForTxReady(rpcUrl, envInt("WAIT_FOR_TX_SEC", 120)) + await demos.connect(rpcUrl) + await demos.connectWallet(walletMnemonic, { algorithm: "ed25519" }) + + const sender = (await demos.crypto.getIdentity("ed25519")).publicKey + const senderHex = uint8ArrayToHex(sender) + + const to = pickRecipient(recipientAddresses, senderHex, workerId, cfg.avoidSelfRecipient) + + const currentNonce = await demos.getAddressNonce(senderHex) + let nextNonce = Number(currentNonce) + 1 + + async function sendOne() { + const start = performance.now() + counters.total++ + try { + const nonce = nextNonce++ + const { res } = await sendTokenTransferTxWithDemos({ + demos, + tokenAddress, + to, + amount: cfg.amount, + nonce, + }) + if (res?.result !== 200) { + throw new Error(`tx rejected: ${JSON.stringify(res)}`) + } + const elapsed = performance.now() - start + sampler.add(elapsed) + timeseriesSampler.add(elapsed) + counters.ok++ + } catch (err: any) { + const elapsed = performance.now() - start + sampler.add(elapsed) + timeseriesSampler.add(elapsed) + counters.error++ + const key = String(err?.message ?? err ?? "unknown").slice(0, 400) + counters.errorSamples[key] = (counters.errorSamples[key] ?? 0) + 1 + } + } + + const inflight = Math.max(1, cfg.inflightPerWallet) + const active = new Set>() + + function launchOne() { + const p = sendOne().finally(() => { + active.delete(p) + }) + active.add(p) + } + + while (nowMs() < stopAtMs) { + while (active.size < inflight && nowMs() < stopAtMs) { + launchOne() + } + if (active.size === 0) break + await Promise.race(Array.from(active)) + } + + await Promise.allSettled(Array.from(active)) +} + +export async function runTokenScriptTransferLoadgen() { + maybeSilenceConsole() + const wallets = await readWalletMnemonics() + const cfg = getConfig(wallets) + + if (wallets.length === 0) throw new Error("No wallets found. Set WALLETS or MNEMONICS_DIR/WALLET_FILES.") + + const usedWallets = wallets.slice(0, Math.max(1, Math.min(cfg.concurrency, wallets.length))) + + const bootstrapRpc = cfg.targets[0]! + const recipientWallets = wallets.length >= 2 ? wallets : usedWallets + const recipientAddresses = await getWalletAddresses(bootstrapRpc, recipientWallets) + const usedWalletAddresses = await getWalletAddresses(bootstrapRpc, usedWallets) + + const ownerMnemonic = wallets[0]! + const owner = recipientAddresses[0]! + + const { tokenAddress } = await ensureTokenAndBalances(bootstrapRpc, ownerMnemonic, recipientAddresses) + const explicitRecipients = splitCsv(process.env.RECIPIENTS) + const recipients = explicitRecipients.length > 0 ? explicitRecipients : recipientAddresses + + const script = await maybeUpgradeScript({ + rpcUrl: bootstrapRpc, + rpcUrls: cfg.targets, + ownerMnemonic, + ownerAddress: owner, + tokenAddress, + workIters: cfg.scriptWorkIters, + setStorage: cfg.scriptSetStorage, + upgrade: cfg.scriptUpgrade, + force: cfg.scriptForceUpgrade, + }) + + const startedAtMs = nowMs() + const stopAtMs = startedAtMs + cfg.durationSec * 1000 + + const counters: Counters = { + startedAtMs, + endedAtMs: 0, + total: 0, + ok: 0, + error: 0, + errorSamples: {}, + } + + const sampler = new ReservoirSampler(cfg.sampleLimit) + const timeseriesSampler = new ReservoirSampler(50_000) + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_script_transfer` + const artifacts = { + runId: run.runId, + runDir: run.runDir, + summaryPath: `${artifactBase}.summary.json`, + timeseriesPath: `${artifactBase}.timeseries.jsonl`, + } + + let lastPointAtMs = startedAtMs + let lastOk = 0 + let lastTotal = 0 + let lastError = 0 + + async function timeseriesLoop() { + if (!cfg.emitTimeseries) return + while (nowMs() < stopAtMs) { + await sleep(1000) + const now = nowMs() + const elapsedSinceLast = Math.max(0.001, (now - lastPointAtMs) / 1000) + lastPointAtMs = now + + const okDelta = counters.ok - lastOk + const totalDelta = counters.total - lastTotal + const errorDelta = counters.error - lastError + + lastOk = counters.ok + lastTotal = counters.total + lastError = counters.error + + const samples = timeseriesSampler.snapshotSorted() + const point: TimeseriesPoint = { + tSec: (now - startedAtMs) / 1000, + ok: okDelta, + total: totalDelta, + error: errorDelta, + tpsOk: okDelta / elapsedSinceLast, + latencyMs: { + sampleCount: timeseriesSampler.size(), + p50: percentile(samples, 50), + p95: percentile(samples, 95), + p99: percentile(samples, 99), + }, + timestamp: new Date().toISOString(), + } + + appendJsonl(artifacts.timeseriesPath, point) + } + } + + await Promise.all( + [ + ...usedWallets.map((mnemonic, idx) => + worker(cfg, counters, sampler, timeseriesSampler, stopAtMs, mnemonic, idx, tokenAddress, recipients), + ), + timeseriesLoop(), + ], + ) + + counters.endedAtMs = nowMs() + + const postRunSettleCheck = envBool("POST_RUN_SETTLE_CHECK", true) + const settleSample = unique([ + ...usedWalletAddresses, + ...recipients.slice(0, Math.min(4, recipients.length)), + ]).slice(0, envInt("POST_RUN_SETTLE_SAMPLE_ADDRESSES", 8)) + + const postRunSettle = postRunSettleCheck + ? await waitForCrossNodeTokenConsistency({ + rpcUrls: cfg.targets, + tokenAddress, + addresses: settleSample, + timeoutSec: envInt("POST_RUN_SETTLE_TIMEOUT_SEC", 120), + pollMs: envInt("POST_RUN_SETTLE_POLL_MS", 500), + }) + : null + + const holderPointerSettleCheck = envBool("POST_RUN_HOLDER_POINTER_CHECK", true) + const expectedPresent: Record = {} + if (postRunSettle?.ok && postRunSettle.perNode?.[0]?.snapshot?.balances) { + const b = postRunSettle.perNode[0].snapshot.balances + for (const addr of settleSample) { + try { + expectedPresent[addr] = BigInt(b[addr] ?? "0") > 0n + } catch { + expectedPresent[addr] = false + } + } + } + + const holderPointerSettle = + holderPointerSettleCheck && Object.keys(expectedPresent).length > 0 + ? await waitForCrossNodeHolderPointersMatchBalances({ + rpcUrls: cfg.targets, + tokenAddress, + expectedPresent, + timeoutSec: envInt("POST_RUN_HOLDER_POINTER_TIMEOUT_SEC", 120), + pollMs: envInt("POST_RUN_HOLDER_POINTER_POLL_MS", 500), + }) + : null + + const durationSec = (counters.endedAtMs - counters.startedAtMs) / 1000 + const samples = sampler.snapshotSorted() + const summary = { + scenario: "token_script_transfer", + tokenAddress, + script: { + tokenScriptUpgrade: cfg.scriptUpgrade, + tokenScriptForceUpgrade: cfg.scriptForceUpgrade, + workIters: cfg.scriptWorkIters, + setStorage: cfg.scriptSetStorage, + upgrade: script, + }, + ok: counters.ok, + total: counters.total, + error: counters.error, + errorSamples: counters.errorSamples, + durationSec, + okTps: counters.ok / Math.max(0.001, durationSec), + latencyMs: { + sampleCount: sampler.size(), + p50: percentile(samples, 50), + p95: percentile(samples, 95), + p99: percentile(samples, 99), + }, + config: { + targets: cfg.targets, + concurrency: usedWallets.length, + inflightPerWallet: cfg.inflightPerWallet, + amount: cfg.amount.toString(), + waitForRpcSec: envInt("WAIT_FOR_RPC_SEC", 120), + tokenBootstrap: envBool("TOKEN_BOOTSTRAP", true), + tokenDistribute: envBool("TOKEN_DISTRIBUTE", true), + }, + postRun: { + settleSample, + settle: postRunSettle, + holderPointers: holderPointerSettle, + }, + artifacts, + timestamp: new Date().toISOString(), + } + + writeJson(artifacts.summaryPath, summary) + console.log(JSON.stringify({ token_script_transfer_summary: summary }, null, 2)) + + const strict = envBool("POST_RUN_SETTLE_STRICT", false) + if (strict && postRunSettleCheck && postRunSettle && !postRunSettle.ok) { + throw new Error("Post-run settle check failed (token_script_transfer)") + } + const strictPointers = envBool("POST_RUN_HOLDER_POINTER_STRICT", false) + if (strictPointers && holderPointerSettleCheck && holderPointerSettle && !holderPointerSettle.ok) { + throw new Error("Post-run holder-pointer check failed (token_script_transfer)") + } +} diff --git a/better_testing/loadgen/src/token_script_transfer_ramp.ts b/better_testing/loadgen/src/token_script_transfer_ramp.ts new file mode 100644 index 000000000..f82462685 --- /dev/null +++ b/better_testing/loadgen/src/token_script_transfer_ramp.ts @@ -0,0 +1,153 @@ +import { runTokenScriptTransferLoadgen } from "./token_script_transfer_loadgen" +import { getRunConfig, writeJson } from "./run_io" + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function splitCsv(value: string | undefined): string[] { + return (value ?? "") + .split(",") + .map(s => s.trim()) + .filter(Boolean) +} + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +export async function runTokenScriptTransferRamp() { + const rampConcurrency = splitCsv(process.env.RAMP_CONCURRENCY) + .map(s => Number.parseInt(s, 10)) + .filter(n => Number.isFinite(n) && n > 0) + + const rampInflight = splitCsv(process.env.RAMP_INFLIGHT_PER_WALLET) + .map(s => Number.parseInt(s, 10)) + .filter(n => Number.isFinite(n) && n > 0) + + const mode: "concurrency" | "inflight" = rampInflight.length > 0 ? "inflight" : "concurrency" + const stepDurationSec = envInt("STEP_DURATION_SEC", 15) + const cooldownSec = envInt("COOLDOWN_SEC", 3) + + if (mode === "concurrency" && rampConcurrency.length === 0) { + throw new Error("RAMP_CONCURRENCY must be a comma-separated list of positive ints") + } + if (mode === "inflight" && rampInflight.length === 0) { + throw new Error("RAMP_INFLIGHT_PER_WALLET must be a comma-separated list of positive ints") + } + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_script_transfer_ramp` + const artifacts = { + runId: run.runId, + runDir: run.runDir, + summaryPath: `${artifactBase}.summary.json`, + } + + const results: any[] = [] + let reuseTokenAddress: string | null = null + + const fixedConcurrency = envInt("CONCURRENCY", 4) + const fixedInflight = envInt("INFLIGHT_PER_WALLET", 1) + + const steps = + mode === "inflight" + ? rampInflight.map(inflight => ({ concurrency: fixedConcurrency, inflightPerWallet: inflight })) + : rampConcurrency.map(concurrency => ({ concurrency, inflightPerWallet: fixedInflight })) + + for (const step of steps) { + process.env.SCENARIO = "token_script_transfer" + process.env.DURATION_SEC = String(stepDurationSec) + process.env.CONCURRENCY = String(step.concurrency) + process.env.INFLIGHT_PER_WALLET = String(step.inflightPerWallet) + + if (reuseTokenAddress) { + process.env.TOKEN_ADDRESS = reuseTokenAddress + process.env.TOKEN_BOOTSTRAP = "false" + process.env.TOKEN_DISTRIBUTE = "false" + process.env.TOKEN_WAIT_DISTRIBUTION = "false" + process.env.TOKEN_SCRIPT_UPGRADE = "false" + } else { + if (!process.env.TOKEN_BOOTSTRAP) process.env.TOKEN_BOOTSTRAP = "true" + if (!process.env.TOKEN_SCRIPT_UPGRADE) process.env.TOKEN_SCRIPT_UPGRADE = "true" + } + + let stepSummary: any = null + let stepError: any = null + + const originalLog = console.log + const capture: any[] = [] + console.log = (...args: any[]) => { + capture.push(args) + originalLog(...args) + } + + try { + await runTokenScriptTransferLoadgen() + for (const row of capture) { + const payload = row?.[0] + if (payload && typeof payload === "string") { + try { + const parsed = JSON.parse(payload) + if (parsed?.token_script_transfer_summary) stepSummary = parsed.token_script_transfer_summary + } catch { + // ignore + } + } else if (payload?.token_script_transfer_summary) { + stepSummary = payload.token_script_transfer_summary + } + } + if (!reuseTokenAddress && stepSummary?.tokenAddress) { + reuseTokenAddress = String(stepSummary.tokenAddress) + } + } catch (err: any) { + stepError = { message: err?.message ?? String(err) } + } finally { + console.log = originalLog + } + + results.push({ + concurrency: step.concurrency, + inflightPerWallet: step.inflightPerWallet, + stepDurationSec, + cooldownSec, + summary: stepSummary, + error: stepError, + }) + + if (cooldownSec > 0) await sleep(cooldownSec * 1000) + } + + const okSteps = results + .map(r => ({ concurrency: r.concurrency, inflightPerWallet: r.inflightPerWallet, okTps: r.summary?.okTps })) + .filter(r => typeof r.okTps === "number") + + const best = okSteps.sort((a, b) => (b.okTps ?? 0) - (a.okTps ?? 0))[0] ?? null + + const rampSummary = { + scenario: "token_script_transfer_ramp", + mode, + bestByOkTps: best, + steps: results, + config: { + rampConcurrency: rampConcurrency.length > 0 ? rampConcurrency : null, + rampInflightPerWallet: rampInflight.length > 0 ? rampInflight : null, + fixedConcurrency, + fixedInflightPerWallet: fixedInflight, + stepDurationSec, + cooldownSec, + tokenTransferAmount: process.env.TOKEN_TRANSFER_AMOUNT ?? process.env.AMOUNT ?? "1", + scriptWorkIters: process.env.SCRIPT_WORK_ITERS ?? "0", + scriptSetStorage: process.env.SCRIPT_SET_STORAGE ?? "false", + }, + artifacts, + timestamp: new Date().toISOString(), + } + + writeJson(artifacts.summaryPath, rampSummary) + console.log(JSON.stringify({ token_script_transfer_ramp_summary: rampSummary }, null, 2)) +} + diff --git a/better_testing/loadgen/src/token_script_upgrade_mid_load.ts b/better_testing/loadgen/src/token_script_upgrade_mid_load.ts new file mode 100644 index 000000000..ef3199d4d --- /dev/null +++ b/better_testing/loadgen/src/token_script_upgrade_mid_load.ts @@ -0,0 +1,483 @@ +import { appendJsonl, getRunConfig, writeJson } from "./run_io" +import { + ensureTokenAndBalances, + getTokenTargets, + getWalletAddresses, + maybeSilenceConsole, + nodeCall, + pickRecipient, + readWalletMnemonics, + sendTokenTransferTxWithDemos, + sendTokenUpgradeScriptTxWithDemos, + waitForCrossNodeTokenConsistency, + waitForRpcReady, + waitForTxReady, + withDemosWallet, +} from "./token_shared" +import { Demos } from "@kynesyslabs/demosdk/websdk" +import { uint8ArrayToHex } from "@kynesyslabs/demosdk/encryption" + +type Config = { + targets: string[] + durationSec: number + upgradeAtSec: number + wallets: string[] + concurrency: number + inflightPerWallet: number + amount: bigint + emitTimeseries: boolean + scriptWorkItersA: number + scriptWorkItersB: number + scriptSetStorage: boolean + scriptForceUpgrade: boolean +} + +type Counters = { + startedAtMs: number + endedAtMs: number + total: number + ok: number + error: number + errorSamples: Record +} + +type TimeseriesPoint = { + tSec: number + ok: number + total: number + error: number + tpsOk: number + timestamp: string +} + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function envBool(name: string, fallback: boolean): boolean { + const raw = process.env[name] + if (!raw) return fallback + switch (raw.trim().toLowerCase()) { + case "1": + case "true": + case "yes": + case "y": + case "on": + return true + case "0": + case "false": + case "no": + case "n": + case "off": + return false + default: + return fallback + } +} + +function nowMs(): number { + return Date.now() +} + +function normalizeRpcUrl(url: string): string { + return url.replace(/\/+$/, "") + "/" +} + +function stableJson(value: any): string { + const sort = (v: any): any => { + if (Array.isArray(v)) return v.map(sort) + if (v && typeof v === "object") { + const out: any = {} + for (const k of Object.keys(v).sort()) out[k] = sort(v[k]) + return out + } + return v + } + return JSON.stringify(sort(value)) +} + +function buildUpgradableScript(params: { tag: "A" | "B"; workIters: number; setStorage: boolean }) { + const tag = params.tag + const work = Math.max(0, Math.floor(params.workIters)) + const setStorage = !!params.setStorage + + return [ + `const TAG = ${JSON.stringify(tag)};`, + `const WORK = ${JSON.stringify(work)};`, + "", + `function spin(n) {`, + ` let x = 0;`, + ` for (let i = 0; i < n; i++) x = (x + i) % 1000003;`, + ` return x;`, + `}`, + "", + `function inc(storage, key) {`, + ` const base = storage && typeof storage === 'object' ? storage : {};`, + ` const cur = base[key] || 0;`, + ` const next = Number(cur) + 1;`, + ` return { ...base, [key]: next };`, + `}`, + "", + `module.exports = {`, + ` hooks: {`, + ` beforeTransfer: (ctx) => (spin(WORK), ${setStorage ? "({ setStorage: { ...inc(ctx.token.storage, 'beforeTransferCount'), scriptTag: TAG } })" : "({})"}),`, + ` afterTransfer: (ctx) => (spin(WORK), ${setStorage ? "({ setStorage: { ...inc(ctx.token.storage, 'afterTransferCount'), scriptTag: TAG } })" : "({})"}),`, + ` },`, + ` views: {`, + ` ping: (_token) => ({ ok: true, tag: TAG }),`, + ` getScriptTag: (_token) => ({ tag: TAG }),`, + ` getHookCounts: (token) => token.storage || {},`, + ` },`, + `}`, + "", + ].join("\n") +} + +async function callView(rpcUrl: string, tokenAddress: string, method: string, args: any[]) { + return await nodeCall(rpcUrl, "token.callView", { tokenAddress, method, args }, `token.callView:${method}`) +} + +async function waitForViewTagOnAllNodes(params: { + rpcUrls: string[] + tokenAddress: string + method: string + args: any[] + expectedTag: "A" | "B" + timeoutSec: number + pollMs: number +}) { + const deadline = nowMs() + Math.max(1, params.timeoutSec) * 1000 + let attempts = 0 + let last: any = null + while (nowMs() < deadline) { + attempts++ + const perNode: Record = {} + let allOk = true + for (const url of params.rpcUrls) { + const res = await callView(url, params.tokenAddress, params.method, params.args) + perNode[url] = res + if (res?.result !== 200) { + allOk = false + continue + } + const tag = res?.response?.value?.tag + if (tag !== params.expectedTag) allOk = false + } + last = perNode + if (allOk) return { ok: true, attempts, perNode } + await sleep(Math.max(50, Math.floor(params.pollMs))) + } + return { ok: false, attempts, perNode: last } +} + +async function waitForCrossNodeHookCountsStable(params: { + rpcUrls: string[] + tokenAddress: string + timeoutSec: number + pollMs: number + stablePolls: number +}) { + const deadline = nowMs() + Math.max(1, params.timeoutSec) * 1000 + const required = Math.max(1, Math.floor(params.stablePolls)) + let stable = 0 + let attempts = 0 + let last: any = null + + while (nowMs() < deadline) { + attempts++ + const perNode: Record = {} + let allOk = true + let stableValue: string | null = null + + for (const url of params.rpcUrls) { + const res = await callView(url, params.tokenAddress, "getHookCounts", []) + perNode[url] = res + if (res?.result !== 200) { + allOk = false + continue + } + const v = stableJson(res?.response?.value ?? {}) + if (stableValue == null) stableValue = v + else if (v !== stableValue) allOk = false + } + + last = perNode + if (allOk) stable++ + else stable = 0 + + if (stable >= required) return { ok: true, attempts, stablePolls: stable, perNode: last } + await sleep(Math.max(100, Math.floor(params.pollMs))) + } + + return { ok: false, attempts, stablePolls: stable, perNode: last } +} + +function getConfig(wallets: string[]): Config { + const targets = getTokenTargets().map(normalizeRpcUrl) + const durationSec = envInt("DURATION_SEC", 45) + const upgradeAt = envInt("UPGRADE_AT_SEC", Math.max(3, Math.floor(durationSec / 2))) + + return { + targets, + durationSec, + upgradeAtSec: Math.max(1, Math.min(durationSec - 1, upgradeAt)), + wallets, + concurrency: envInt("CONCURRENCY", Math.max(1, wallets.length - 1)), + inflightPerWallet: Math.max(1, envInt("INFLIGHT_PER_WALLET", 1)), + amount: BigInt(process.env.TOKEN_TRANSFER_AMOUNT ?? process.env.AMOUNT ?? "1"), + emitTimeseries: envBool("EMIT_TIMESERIES", true), + scriptWorkItersA: Math.max(0, envInt("SCRIPT_WORK_ITERS_A", envInt("SCRIPT_WORK_ITERS", 0))), + scriptWorkItersB: Math.max(0, envInt("SCRIPT_WORK_ITERS_B", Math.max(0, envInt("SCRIPT_WORK_ITERS", 0) + 1000))), + scriptSetStorage: envBool("SCRIPT_SET_STORAGE", true), + scriptForceUpgrade: envBool("TOKEN_SCRIPT_FORCE_UPGRADE", true), + } +} + +async function worker( + cfg: Config, + counters: Counters, + stopAtMs: number, + walletMnemonic: string, + workerId: number, + tokenAddress: string, + recipientAddresses: string[], +) { + const rpcUrl = cfg.targets[workerId % cfg.targets.length]! + const demos = new Demos() + await waitForRpcReady(rpcUrl, envInt("WAIT_FOR_RPC_SEC", 120)) + await waitForTxReady(rpcUrl, envInt("WAIT_FOR_TX_SEC", 120)) + await demos.connect(rpcUrl) + await demos.connectWallet(walletMnemonic, { algorithm: "ed25519" }) + + const sender = (await demos.crypto.getIdentity("ed25519")).publicKey + const senderHex = uint8ArrayToHex(sender) + + const currentNonce = await demos.getAddressNonce(senderHex) + let nextNonce = Number(currentNonce) + 1 + + async function sendOne() { + counters.total++ + const nonce = nextNonce++ + const to = pickRecipient(recipientAddresses, senderHex, counters.total + workerId, true) + const res = await sendTokenTransferTxWithDemos({ demos, tokenAddress, to, amount: cfg.amount, nonce }) + if (res?.res?.result !== 200) throw new Error(`tx rejected: ${JSON.stringify(res?.res)}`) + counters.ok++ + } + + const inflight = Math.max(1, cfg.inflightPerWallet) + const active = new Set>() + + function launchOne() { + const p = sendOne().catch((err: any) => { + counters.error++ + const key = String(err?.message ?? err ?? "unknown").slice(0, 400) + counters.errorSamples[key] = (counters.errorSamples[key] ?? 0) + 1 + }).finally(() => { + active.delete(p) + }) + active.add(p) + } + + while (nowMs() < stopAtMs) { + while (active.size < inflight && nowMs() < stopAtMs) launchOne() + if (active.size === 0) break + await Promise.race(Array.from(active)) + } + + await Promise.allSettled(Array.from(active)) +} + +export async function runTokenScriptUpgradeMidLoad() { + maybeSilenceConsole() + + const wallets = await readWalletMnemonics() + if (wallets.length < 2) throw new Error("token_script_upgrade_mid_load requires at least 2 wallets (owner + worker)") + + const cfg = getConfig(wallets) + + const ownerMnemonic = wallets[0]! + const bootstrapRpc = cfg.targets[0]! + + const addresses = await getWalletAddresses(bootstrapRpc, wallets.slice(0, Math.min(wallets.length, Math.max(4, cfg.concurrency + 1)))) + const ownerAddress = addresses[0]! + const { tokenAddress } = await ensureTokenAndBalances(bootstrapRpc, ownerMnemonic, addresses) + + const tokenBefore = await nodeCall(bootstrapRpc, "token.get", { tokenAddress }, `token.get:before:${tokenAddress}`) + if (tokenBefore?.result !== 200) throw new Error(`token.get failed before upgrade: ${JSON.stringify(tokenBefore)}`) + const hasScriptBefore = !!tokenBefore?.response?.metadata?.hasScript + + const scriptA = buildUpgradableScript({ tag: "A", workIters: cfg.scriptWorkItersA, setStorage: cfg.scriptSetStorage }) + const scriptB = buildUpgradableScript({ tag: "B", workIters: cfg.scriptWorkItersB, setStorage: cfg.scriptSetStorage }) + + const methodNames = ["ping", "getScriptTag", "getHookCounts"] + + const upgradeA = await withDemosWallet({ + rpcUrl: bootstrapRpc, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + if (fromHex.toLowerCase() !== ownerAddress.toLowerCase()) throw new Error(`owner identity mismatch: ${fromHex} !== ${ownerAddress}`) + const nonce = Number(await demos.getAddressNonce(ownerAddress)) + 1 + const out = await sendTokenUpgradeScriptTxWithDemos({ demos, tokenAddress, scriptCode: scriptA, methodNames, nonce }) + return out + }, + }) + + const tagAReady = await waitForViewTagOnAllNodes({ + rpcUrls: cfg.targets, + tokenAddress, + method: "ping", + args: [], + expectedTag: "A", + timeoutSec: envInt("SCRIPT_READY_TIMEOUT_SEC", 120), + pollMs: envInt("SCRIPT_READY_POLL_MS", 500), + }) + if (!tagAReady.ok) throw new Error(`Script tag A not visible across nodes: ${JSON.stringify(tagAReady)}`) + + const startedAtMs = nowMs() + const stopAtMs = startedAtMs + cfg.durationSec * 1000 + const upgradeAtMs = startedAtMs + cfg.upgradeAtSec * 1000 + + const usedWallets = wallets.slice(1, Math.min(wallets.length, 1 + Math.max(1, cfg.concurrency))) + + const counters: Counters = { + startedAtMs, + endedAtMs: 0, + total: 0, + ok: 0, + error: 0, + errorSamples: {}, + } + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_script_upgrade_mid_load` + const artifacts = { + runId: run.runId, + runDir: run.runDir, + summaryPath: `${artifactBase}.summary.json`, + timeseriesPath: `${artifactBase}.timeseries.jsonl`, + } + + let lastPointAtMs = startedAtMs + let lastOk = 0 + let lastTotal = 0 + let lastError = 0 + + async function timeseriesLoop() { + if (!cfg.emitTimeseries) return + while (nowMs() < stopAtMs) { + await sleep(1000) + const now = nowMs() + const elapsedSinceLast = Math.max(0.001, (now - lastPointAtMs) / 1000) + lastPointAtMs = now + + const okDelta = counters.ok - lastOk + const totalDelta = counters.total - lastTotal + const errorDelta = counters.error - lastError + + lastOk = counters.ok + lastTotal = counters.total + lastError = counters.error + + const point: TimeseriesPoint = { + tSec: (now - startedAtMs) / 1000, + ok: okDelta, + total: totalDelta, + error: errorDelta, + tpsOk: okDelta / elapsedSinceLast, + timestamp: new Date().toISOString(), + } + appendJsonl(artifacts.timeseriesPath, point) + } + } + + const upgradeBPromise = (async () => { + while (nowMs() < upgradeAtMs) await sleep(250) + return await withDemosWallet({ + rpcUrl: bootstrapRpc, + mnemonic: ownerMnemonic, + fn: async (demos, fromHex) => { + if (fromHex.toLowerCase() !== ownerAddress.toLowerCase()) throw new Error(`owner identity mismatch: ${fromHex} !== ${ownerAddress}`) + const nonce = Number(await demos.getAddressNonce(ownerAddress)) + 1 + return await sendTokenUpgradeScriptTxWithDemos({ demos, tokenAddress, scriptCode: scriptB, methodNames, nonce }) + }, + }) + })() + + await Promise.all([ + ...usedWallets.map((mnemonic, idx) => worker(cfg, counters, stopAtMs, mnemonic, idx, tokenAddress, addresses)), + timeseriesLoop(), + ]) + + counters.endedAtMs = nowMs() + const upgradeB = await upgradeBPromise + + const tagBReady = await waitForViewTagOnAllNodes({ + rpcUrls: cfg.targets, + tokenAddress, + method: "ping", + args: [], + expectedTag: "B", + timeoutSec: envInt("SCRIPT_READY_TIMEOUT_SEC", 180), + pollMs: envInt("SCRIPT_READY_POLL_MS", 500), + }) + if (!tagBReady.ok) throw new Error(`Script tag B not visible across nodes: ${JSON.stringify(tagBReady)}`) + + const hookCountsStable = await waitForCrossNodeHookCountsStable({ + rpcUrls: cfg.targets, + tokenAddress, + timeoutSec: envInt("SCRIPT_SETTLE_TIMEOUT_SEC", 180), + pollMs: envInt("SCRIPT_SETTLE_POLL_MS", 700), + stablePolls: envInt("SCRIPT_STABLE_POLLS", 3), + }) + + const settleSample = addresses.slice(0, Math.min(addresses.length, envInt("POST_RUN_SETTLE_SAMPLE_ADDRESSES", 8))) + const crossNodeBalances = await waitForCrossNodeTokenConsistency({ + rpcUrls: cfg.targets, + tokenAddress, + addresses: settleSample, + timeoutSec: envInt("POST_RUN_SETTLE_TIMEOUT_SEC", 180), + pollMs: envInt("POST_RUN_SETTLE_POLL_MS", 500), + }) + + const summary = { + runId: run.runId, + scenario: "token_script_upgrade_mid_load", + tokenAddress, + rpcUrls: cfg.targets, + config: { + durationSec: cfg.durationSec, + upgradeAtSec: cfg.upgradeAtSec, + concurrency: cfg.concurrency, + inflightPerWallet: cfg.inflightPerWallet, + amount: cfg.amount.toString(), + scriptWorkItersA: cfg.scriptWorkItersA, + scriptWorkItersB: cfg.scriptWorkItersB, + scriptSetStorage: cfg.scriptSetStorage, + scriptForceUpgrade: cfg.scriptForceUpgrade, + }, + addresses: { owner: ownerAddress, workers: addresses.slice(1) }, + counters, + script: { hasScriptBefore, upgradeA, upgradeB }, + checks: { + tagAReadyOk: tagAReady.ok, + tagBReadyOk: tagBReady.ok, + hookCountsStableOk: hookCountsStable.ok, + crossNodeBalancesOk: crossNodeBalances.ok, + }, + hookCountsStable, + crossNodeBalances, + timestamp: new Date().toISOString(), + ok: tagAReady.ok && tagBReady.ok && hookCountsStable.ok && crossNodeBalances.ok, + } + + writeJson(artifacts.summaryPath, summary) + console.log(JSON.stringify({ token_script_upgrade_mid_load_summary: summary }, null, 2)) + if (!summary.ok) throw new Error("token_script_upgrade_mid_load failed checks") +} diff --git a/better_testing/loadgen/src/token_settle_check.ts b/better_testing/loadgen/src/token_settle_check.ts new file mode 100644 index 000000000..2ba9e5c54 --- /dev/null +++ b/better_testing/loadgen/src/token_settle_check.ts @@ -0,0 +1,508 @@ +import { getRunConfig, writeJson } from "./run_io" +import { + getTokenTargets, + getWalletAddresses, + maybeSilenceConsole, + nodeCall, + readWalletMnemonics, + waitForCrossNodeHolderPointersMatchBalances, + waitForCrossNodeTokenConsistency, + waitForRpcReady, + waitForTxReady, +} from "./token_shared" + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function envBool(name: string, fallback: boolean): boolean { + const raw = process.env[name] + if (!raw) return fallback + switch (raw.trim().toLowerCase()) { + case "1": + case "true": + case "yes": + case "y": + case "on": + return true + case "0": + case "false": + case "no": + case "n": + case "off": + return false + default: + return fallback + } +} + +function splitCsv(value: string | undefined): string[] { + return (value ?? "") + .split(",") + .map(s => s.trim()) + .filter(Boolean) +} + +function normalizeHexAddress(address: string): string { + const trimmed = (address ?? "").trim() + if (!trimmed) return trimmed + return trimmed.startsWith("0x") ? trimmed.toLowerCase() : ("0x" + trimmed).toLowerCase() +} + +function normalizeRpcUrl(url: string): string { + return url.replace(/\/+$/, "") + "/" +} + +function sortObjectDeep(value: any): any { + if (Array.isArray(value)) return value.map(sortObjectDeep) + if (!value || typeof value !== "object") return value + const out: Record = {} + for (const key of Object.keys(value).sort()) { + out[key] = sortObjectDeep((value as any)[key]) + } + return out +} + +function stableJson(value: any): string { + return JSON.stringify(sortObjectDeep(value)) +} + +async function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +async function getLastBlockNumber(rpcUrl: string, muid: string): Promise { + const res = await nodeCall(rpcUrl, "getLastBlockNumber", {}, muid) + const n = res?.response + if (typeof n === "number" && Number.isFinite(n)) return n + if (typeof n === "string") { + const parsed = Number.parseInt(n, 10) + return Number.isFinite(parsed) ? parsed : null + } + return null +} + +async function getLastBlockHash(rpcUrl: string, muid: string): Promise { + const res = await nodeCall(rpcUrl, "getLastBlockHash", {}, muid) + const h = res?.response + if (typeof h === "string" && h.length > 0) return h + return null +} + +type BlockSkewReport = { + ok: boolean + timeoutSec: number + pollMs: number + maxSkew: number + stablePolls: number + attempts: number + durationMs: number + startedAt: string + endedAt: string + last: Record + lastHash: Record +} + +type MempoolDrainReport = { + ok: boolean + timeoutSec: number + pollMs: number + stablePolls: number + attempts: number + durationMs: number + startedAt: string + endedAt: string + lastCount: Record + lastRaw?: Record +} + +async function waitForBlockSkew(params: { + rpcUrls: string[] + timeoutSec: number + pollMs: number + maxSkew: number + stablePolls: number +}): Promise { + const startedAt = new Date() + const deadlineMs = Date.now() + Math.max(1, params.timeoutSec) * 1000 + const pollMs = Math.max(100, Math.floor(params.pollMs)) + const stableNeeded = Math.max(1, Math.floor(params.stablePolls)) + const maxSkew = Math.max(0, Math.floor(params.maxSkew)) + + let stable = 0 + let attempts = 0 + let last: Record = {} + let lastHash: Record = {} + + while (Date.now() < deadlineMs) { + attempts++ + last = {} + lastHash = {} + const values: number[] = [] + for (const rpcUrl of params.rpcUrls) { + const n = await getLastBlockNumber(rpcUrl, `getLastBlockNumber:skew:${attempts}:${rpcUrl}`) + last[rpcUrl] = n + lastHash[rpcUrl] = await getLastBlockHash(rpcUrl, `getLastBlockHash:skew:${attempts}:${rpcUrl}`) + if (typeof n === "number") values.push(n) + } + + const min = values.length > 0 ? Math.min(...values) : null + const max = values.length > 0 ? Math.max(...values) : null + const skewOk = typeof min === "number" && typeof max === "number" && max - min <= maxSkew + + if (skewOk) { + stable++ + if (stable >= stableNeeded) { + const endedAt = new Date() + return { + ok: true, + timeoutSec: params.timeoutSec, + pollMs, + maxSkew, + stablePolls: stableNeeded, + attempts, + durationMs: endedAt.getTime() - startedAt.getTime(), + startedAt: startedAt.toISOString(), + endedAt: endedAt.toISOString(), + last, + lastHash, + } + } + } else { + stable = 0 + } + + await sleep(pollMs) + } + + const endedAt = new Date() + return { + ok: false, + timeoutSec: params.timeoutSec, + pollMs, + maxSkew, + stablePolls: stableNeeded, + attempts, + durationMs: endedAt.getTime() - startedAt.getTime(), + startedAt: startedAt.toISOString(), + endedAt: endedAt.toISOString(), + last, + lastHash, + } +} + +function extractMempoolCount(raw: any): number | null { + const res = raw?.result === 200 ? raw?.response : null + if (Array.isArray(res)) return res.length + if (res && typeof res === "object") { + if (Array.isArray((res as any).txs)) return (res as any).txs.length + if (Array.isArray((res as any).transactions)) return (res as any).transactions.length + if (typeof (res as any).size === "number" && Number.isFinite((res as any).size)) return (res as any).size + if (typeof (res as any).count === "number" && Number.isFinite((res as any).count)) return (res as any).count + } + return null +} + +async function waitForMempoolDrain(params: { + rpcUrls: string[] + timeoutSec: number + pollMs: number + stablePolls: number + includeRaw: boolean +}): Promise { + const startedAt = new Date() + const deadlineMs = Date.now() + Math.max(1, params.timeoutSec) * 1000 + const pollMs = Math.max(100, Math.floor(params.pollMs)) + const stableNeeded = Math.max(1, Math.floor(params.stablePolls)) + + let stable = 0 + let attempts = 0 + let lastCount: Record = {} + const lastRaw: Record = {} + + while (Date.now() < deadlineMs) { + attempts++ + lastCount = {} + for (const rpcUrl of params.rpcUrls) { + const mempool = await nodeCall(rpcUrl, "getMempool", {}, `getMempool:${attempts}:${rpcUrl}`) + lastCount[rpcUrl] = extractMempoolCount(mempool) + if (params.includeRaw) lastRaw[rpcUrl] = mempool + } + + const counts = Object.values(lastCount) + const allKnown = counts.every(c => typeof c === "number") + const allZero = allKnown && counts.every(c => (c ?? 1) === 0) + + if (allZero) { + stable++ + if (stable >= stableNeeded) { + const endedAt = new Date() + return { + ok: true, + timeoutSec: params.timeoutSec, + pollMs, + stablePolls: stableNeeded, + attempts, + durationMs: endedAt.getTime() - startedAt.getTime(), + startedAt: startedAt.toISOString(), + endedAt: endedAt.toISOString(), + lastCount, + ...(params.includeRaw ? { lastRaw } : {}), + } + } + } else { + stable = 0 + } + + await sleep(pollMs) + } + + const endedAt = new Date() + return { + ok: false, + timeoutSec: params.timeoutSec, + pollMs, + stablePolls: stableNeeded, + attempts, + durationMs: endedAt.getTime() - startedAt.getTime(), + startedAt: startedAt.toISOString(), + endedAt: endedAt.toISOString(), + lastCount, + ...(params.includeRaw ? { lastRaw } : {}), + } +} + +export async function runTokenSettleCheck() { + maybeSilenceConsole() + const targets = getTokenTargets().map(normalizeRpcUrl) + if (targets.length === 0) throw new Error("No TARGETS configured") + + const bootstrapRpc = targets[0]! + const waitForRpcSec = envInt("WAIT_FOR_RPC_SEC", 120) + const waitForTxSec = envInt("WAIT_FOR_TX_SEC", 120) + for (const url of targets) { + await waitForRpcReady(url, waitForRpcSec) + } + await waitForTxReady(bootstrapRpc, waitForTxSec) + + const tokenAddress = String(process.env.TOKEN_ADDRESS ?? "").trim() + if (!tokenAddress) throw new Error("TOKEN_ADDRESS is required for token_settle_check") + + const wallets = await readWalletMnemonics() + const walletCount = Math.max(0, envInt("SETTLE_WALLETS", 4)) + const derived = walletCount > 0 && wallets.length > 0 + ? await getWalletAddresses(bootstrapRpc, wallets.slice(0, walletCount)) + : [] + + const explicit = splitCsv(process.env.ADDRESSES) + const addresses = Array.from( + new Set([...derived, ...explicit].map(normalizeHexAddress).filter(Boolean)), + ) + if (addresses.length === 0) throw new Error("No addresses to check. Provide ADDRESSES or SETTLE_WALLETS>0 with wallets configured.") + + const blockSyncRounds = envInt("BLOCK_SYNC_ENABLE", 1) + const blockSkew = blockSyncRounds !== 0 + ? await waitForBlockSkew({ + rpcUrls: targets, + timeoutSec: envInt("BLOCK_SYNC_TIMEOUT_SEC", 120), + pollMs: envInt("BLOCK_SYNC_POLL_MS", 500), + maxSkew: envInt("BLOCK_MAX_SKEW", 2), + stablePolls: envInt("BLOCK_STABLE_POLLS", 3), + }) + : null + + const mempoolDrainEnable = envInt("MEMPOOL_DRAIN_ENABLE", 1) !== 0 + const requireMempoolDrain = envBool("REQUIRE_MEMPOOL_DRAIN", true) + const mempoolDrain = mempoolDrainEnable + ? await waitForMempoolDrain({ + rpcUrls: targets, + timeoutSec: envInt("MEMPOOL_DRAIN_TIMEOUT_SEC", 90), + pollMs: envInt("MEMPOOL_DRAIN_POLL_MS", 500), + stablePolls: envInt("MEMPOOL_DRAIN_STABLE_POLLS", 3), + includeRaw: envBool("MEMPOOL_DRAIN_INCLUDE_RAW", false), + }) + : null + + const settle = await waitForCrossNodeTokenConsistency({ + rpcUrls: targets, + tokenAddress, + addresses, + timeoutSec: envInt("CROSS_NODE_TIMEOUT_SEC", 180), + pollMs: envInt("CROSS_NODE_POLL_MS", 500), + }) + + const holderPointerCheck = envBool("HOLDER_POINTER_CHECK", true) + const expectedPresent: Record = {} + if (settle.ok && settle.perNode?.[0]?.snapshot?.balances) { + for (const [addr, balRaw] of Object.entries(settle.perNode[0].snapshot.balances)) { + try { + expectedPresent[addr] = BigInt(balRaw ?? "0") > 0n + } catch { + expectedPresent[addr] = false + } + } + } + const holderPointers = + holderPointerCheck && settle.ok && Object.keys(expectedPresent).length > 0 + ? await waitForCrossNodeHolderPointersMatchBalances({ + rpcUrls: targets, + tokenAddress, + expectedPresent, + timeoutSec: envInt("HOLDER_POINTER_TIMEOUT_SEC", 180), + pollMs: envInt("HOLDER_POINTER_POLL_MS", 500), + }) + : null + + const expectScript = envBool("EXPECT_SCRIPT", false) + const scriptViewMethod = process.env.SCRIPT_HOOKCOUNTS_VIEW ?? "getHookCounts" + const perNodeScript: Record = {} + + let scriptOk = true + let scriptReason: string | null = null + let scriptStablePollsNeeded: number | null = null + + if (expectScript) { + const scriptTimeoutSec = envInt("SCRIPT_SETTLE_TIMEOUT_SEC", envInt("CROSS_NODE_TIMEOUT_SEC", 180)) + const scriptPollMs = envInt("SCRIPT_SETTLE_POLL_MS", 500) + const stablePollsNeeded = Math.max(1, envInt("SCRIPT_STABLE_POLLS", 3)) + scriptStablePollsNeeded = stablePollsNeeded + const deadlineMs = Date.now() + Math.max(1, scriptTimeoutSec) * 1000 + + let stablePolls = 0 + + while (Date.now() < deadlineMs) { + const customStates: Record = {} + const hookCounts: Record = {} + const hasScriptFlags: Record = {} + let inFlux = false + + for (const url of targets) { + const token = await nodeCall( + url, + "token.getCommitted", + { tokenAddress }, + `token.getCommitted:settle:${url}`, + ) + + const view = await nodeCall( + url, + "token.callViewCommitted", + { tokenAddress, method: scriptViewMethod, args: [] }, + `token.callViewCommitted:${scriptViewMethod}:${url}`, + ) + + perNodeScript[url] = { tokenGet: token, hookCountsView: view } + + if (token?.result === 409 || view?.result === 409) { + inFlux = true + continue + } + + hasScriptFlags[url] = !!token?.response?.metadata?.hasScript + const customState = + token?.result === 200 ? token?.response?.state?.customState ?? null : null + customStates[url] = stableJson(customState) + const counts = view?.result === 200 ? (view?.response?.value ?? null) : null + hookCounts[url] = stableJson(counts) + } + + if (inFlux) { + stablePolls = 0 + await sleep(scriptPollMs) + continue + } + + const uniqueHasScript = new Set(Object.values(hasScriptFlags).map(v => String(v))).size + const uniqueCustomState = new Set(Object.values(customStates)).size + const uniqueHookCounts = new Set(Object.values(hookCounts)).size + + const hasScriptOk = uniqueHasScript === 1 && Object.values(hasScriptFlags).every(v => v === true) + const customStateOk = uniqueCustomState === 1 + const hookCountsOk = uniqueHookCounts === 1 + + if (hasScriptOk && customStateOk && hookCountsOk) { + stablePolls++ + if (stablePolls >= stablePollsNeeded) { + scriptOk = true + scriptReason = null + break + } + } else { + stablePolls = 0 + if (!hasScriptOk) { + scriptOk = false + scriptReason = "metadata.hasScript not true on all nodes" + } else if (!customStateOk) { + scriptOk = false + scriptReason = "token.state.customState differs across nodes" + } else if (!hookCountsOk) { + scriptOk = false + scriptReason = "token.callView hookCounts differs across nodes" + } else { + scriptOk = false + scriptReason = "script checks failed" + } + } + + await sleep(Math.max(50, scriptPollMs)) + } + + if (stablePolls < stablePollsNeeded && stablePollsNeeded > 0 && scriptOk) { + scriptOk = false + scriptReason = "script checks did not stabilize" + } + } + + const ok = + (!requireMempoolDrain || !mempoolDrainEnable || (mempoolDrain?.ok ?? true)) && + settle.ok && + (holderPointers?.ok ?? true) && + (!expectScript || scriptOk) + const failureReason = + requireMempoolDrain && mempoolDrainEnable && mempoolDrain && !mempoolDrain.ok + ? "mempool did not drain (token reads may include pending txs)" + : !settle.ok + ? "cross-node token state differs (token.get/token.getBalance)" + : holderPointers && !holderPointers.ok + ? "cross-node holder pointer mismatch (token.getHolderPointers)" + : expectScript && !scriptOk + ? scriptReason ?? "script checks failed" + : null + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_settle_check` + const summary = { + runId: run.runId, + scenario: "token_settle_check", + tokenAddress, + rpcUrls: targets, + addresses, + expectScript, + scriptViewMethod: expectScript ? scriptViewMethod : null, + blockSkew, + mempoolDrain, + settle, + holderPointers, + script: expectScript + ? { + ok: scriptOk, + reason: scriptReason, + stablePolls: scriptStablePollsNeeded, + perNode: perNodeScript, + } + : null, + ok, + failureReason, + timestamp: new Date().toISOString(), + } + + writeJson(`${artifactBase}.summary.json`, summary) + console.log(JSON.stringify({ token_settle_check_summary: summary }, null, 2)) + + if (!ok) { + throw new Error(`token_settle_check failed: ${failureReason ?? "unknown"}`) + } +} diff --git a/better_testing/loadgen/src/token_shared.ts b/better_testing/loadgen/src/token_shared.ts new file mode 100644 index 000000000..588847112 --- /dev/null +++ b/better_testing/loadgen/src/token_shared.ts @@ -0,0 +1,1506 @@ +import { Demos } from "@kynesyslabs/demosdk/websdk" +import { Cryptography, Hashing, uint8ArrayToHex } from "@kynesyslabs/demosdk/encryption" + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function envBool(name: string, fallback: boolean): boolean { + const raw = process.env[name] + if (!raw) return fallback + switch (raw.trim().toLowerCase()) { + case "1": + case "true": + case "yes": + case "y": + case "on": + return true + case "0": + case "false": + case "no": + case "n": + case "off": + return false + default: + return fallback + } +} + +function splitCsv(value: string | undefined): string[] { + return (value ?? "") + .split(",") + .map(s => s.trim()) + .filter(Boolean) +} + +function nowMs(): number { + return Date.now() +} + +function normalizeRpcUrl(url: string): string { + return url.replace(/\/+$/, "") + "/" +} + +async function rpcPost(rpcUrl: string, body: unknown): Promise { + const url = normalizeRpcUrl(rpcUrl) + const timeoutMs = envInt("NODECALL_FETCH_TIMEOUT_MS", 8000) + const controller = timeoutMs > 0 ? new AbortController() : null + const timer = controller ? setTimeout(() => controller.abort(), timeoutMs) : null + try { + const res = await fetch(url, { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify(body), + ...(controller ? { signal: controller.signal } : {}), + }) + const json = await res.json().catch(() => null) + return { ok: res.ok, status: res.status, json } + } catch (error: any) { + const reason = + error?.name === "AbortError" + ? `NODECALL_FETCH_TIMEOUT_MS exceeded (${timeoutMs}ms)` + : (error instanceof Error ? error.message : String(error)) + return { + ok: false, + status: 0, + json: { + result: 599, + response: `rpcPost failed: ${reason}`, + require_reply: false, + extra: null, + }, + } + } finally { + if (timer) clearTimeout(timer) + } +} + +async function nodeCallExact(rpcUrl: string, message: string, data: any, muid = "loadgen"): Promise { + const payload = { method: "nodeCall", params: [{ message, data, muid }] } + const { ok, json } = await rpcPost(rpcUrl, payload) + if (!ok) return json + return json +} + +export async function nodeCall(rpcUrl: string, message: string, data: any, muid = "loadgen"): Promise { + const toCommitted = (m: string) => { + switch (m) { + case "token.get": + return "token.getCommitted" + case "token.getBalance": + return "token.getBalanceCommitted" + case "token.callView": + return "token.callViewCommitted" + default: + return m + } + } + + const toLegacy = (m: string) => { + switch (m) { + case "token.getCommitted": + return "token.get" + case "token.getBalanceCommitted": + return "token.getBalance" + case "token.callViewCommitted": + return "token.callView" + default: + return m + } + } + + // Prefer committed-only token reads in the harness, but keep backward compatibility: + // older nodes may not have the committed aliases yet and will respond with a 200 + "Unknown message". + const primaryMessage = toCommitted(message) + const fallbackMessage = toLegacy(primaryMessage) + + async function postOnce(msg: string) { + const payload = { method: "nodeCall", params: [{ message: msg, data, muid }] } + const { ok, json } = await rpcPost(rpcUrl, payload) + if (!ok) return json + return json + } + + const isCommittedTokenRead = + primaryMessage === "token.getCommitted" || + primaryMessage === "token.getBalanceCommitted" || + primaryMessage === "token.callViewCommitted" + + // Keep this short by default to avoid stalling time-series probes; higher-level loops (settle checks, script upgrade) + // should do their own waiting if they need longer. + const inFluxTimeoutMs = isCommittedTokenRead ? envInt("NODECALL_IN_FLUX_TIMEOUT_MS", 2000) : 0 + + async function postWithStateInFluxRetry(msg: string) { + if (!isCommittedTokenRead || inFluxTimeoutMs <= 0) return await postOnce(msg) + const deadlineMs = nowMs() + inFluxTimeoutMs + let attempt = 0 + while (true) { + const res = await postOnce(msg) + const inFlux = res?.result === 409 && res?.response?.error === "STATE_IN_FLUX" + if (!inFlux) return res + if (nowMs() >= deadlineMs) return res + attempt++ + const backoffMs = Math.min(2000, 50 + attempt * 75) + await sleep(backoffMs) + } + } + + const first = await postWithStateInFluxRetry(primaryMessage) + const unknown = + typeof first?.response === "string" && + (first.response.includes("Unknown message") || first.response.includes("unknown message")) + + if (unknown && fallbackMessage !== primaryMessage) { + return await postWithStateInFluxRetry(fallbackMessage) + } + + return first +} + +async function waitForTokenExists(rpcUrl: string, tokenAddress: string, timeoutSec: number): Promise { + const deadlineMs = nowMs() + Math.max(1, timeoutSec) * 1000 + let attempt = 0 + let last: any = null + while (nowMs() < deadlineMs) { + const res = await nodeCall(rpcUrl, "token.getCommitted", { tokenAddress }, `token.getCommitted:${attempt}`) + last = res + if (res?.result === 200 && res?.response?.tokenAddress) return + const live = await nodeCallExact(rpcUrl, "token.get", { tokenAddress }, `token.get:liveFallback:${attempt}`) + last = live + if (live?.result === 200 && live?.response?.tokenAddress) return + attempt++ + const backoffMs = Math.min(2000, 100 + attempt * 100) + await sleep(backoffMs) + } + throw new Error( + `Token not visible via nodeCall token.getCommitted (or token.get fallback) after ${timeoutSec}s: ${tokenAddress}. Last=${JSON.stringify(last)}`, + ) +} + +async function waitForTokenBalanceAtLeast( + rpcUrl: string, + tokenAddress: string, + address: string, + minBalance: bigint, + timeoutSec: number, +): Promise { + const deadlineMs = nowMs() + Math.max(1, timeoutSec) * 1000 + let attempt = 0 + while (nowMs() < deadlineMs) { + const res = await nodeCall(rpcUrl, "token.getBalanceCommitted", { tokenAddress, address }, `token.getBalanceCommitted:${attempt}`) + const balRaw = res?.response?.balance + if (typeof balRaw === "string") { + try { + const bal = BigInt(balRaw) + if (bal >= minBalance) return + } catch { + // ignore + } + } + const live = await nodeCallExact(rpcUrl, "token.getBalance", { tokenAddress, address }, `token.getBalance:liveFallback:${attempt}`) + const liveBalRaw = live?.response?.balance + if (typeof liveBalRaw === "string") { + try { + const bal = BigInt(liveBalRaw) + if (bal >= minBalance) return + } catch { + // ignore + } + } + attempt++ + const backoffMs = Math.min(2000, 100 + attempt * 100) + await sleep(backoffMs) + } + throw new Error(`Token balance did not reach ${minBalance.toString()} for ${address} after ${timeoutSec}s`) +} + +export async function waitForTxReady(rpcUrl: string, timeoutSec: number): Promise { + const deadlineMs = nowMs() + Math.max(1, timeoutSec) * 1000 + let attempt = 0 + while (nowMs() < deadlineMs) { + const res = await nodeCall(rpcUrl, "crypto.getIdentity", {}, `crypto.getIdentity:${attempt}`) + if (res?.result === 200 && res?.response?.publicKeyHex) return + attempt++ + const backoffMs = Math.min(2000, 100 + attempt * 100) + await sleep(backoffMs) + } + throw new Error(`Tx pipeline not ready (crypto.getIdentity) after ${timeoutSec}s at ${rpcUrl}`) +} + +async function waitForChainReady(rpcUrl: string, timeoutSec: number): Promise { + const deadlineMs = nowMs() + Math.max(1, timeoutSec) * 1000 + let attempt = 0 + while (nowMs() < deadlineMs) { + const res = await nodeCall(rpcUrl, "getLastBlockHash", {}, `getLastBlockHash:${attempt}`) + if (res?.result === 200 && typeof res?.response === "string" && res.response.length > 0) return + attempt++ + const backoffMs = Math.min(2000, 100 + attempt * 100) + await sleep(backoffMs) + } + throw new Error(`Chain not ready (getLastBlockHash) after ${timeoutSec}s at ${rpcUrl}`) +} + +export type CrossNodeTokenConsistencyReport = { + ok: boolean + tokenAddress: string + rpcUrls: string[] + addresses: string[] + attempts: number + durationMs: number + perNode: Array<{ + rpcUrl: string + ok: boolean + snapshot: null | { + tokenAddress: string + metadata: { name: string | null; ticker: string | null; decimals: number | null } + state: { totalSupply: string | null } + balances: Record + } + error: any + }> +} + +export type CrossNodeTokenGetConsistencyReport = { + ok: boolean + tokenAddress: string + rpcUrls: string[] + attempts: number + durationMs: number + perNode: Array<{ + rpcUrl: string + ok: boolean + normalized: null | { + tokenAddress: string + accessControl: { + owner: string | null + paused: boolean + entries: Array<{ address: string; permissions: string[] }> + } + } + error: any + }> +} + +export type CrossNodeHolderPointersReport = { + ok: boolean + tokenAddress: string + rpcUrls: string[] + expectedPresent: Record + attempts: number + durationMs: number + perNode: Array<{ + rpcUrl: string + ok: boolean + perAddress: Record + error: any + }> +} + +function normalizeHexAddress(address: string): string { + const trimmed = (address ?? "").trim() + if (!trimmed) return trimmed + return trimmed.startsWith("0x") ? trimmed.toLowerCase() : ("0x" + trimmed).toLowerCase() +} + +function stableBalances(addresses: string[], balances: Record): Record { + const out: Record = {} + for (const a of addresses.map(normalizeHexAddress).sort()) out[a] = balances[a] ?? null + return out +} + +async function fetchTokenSnapshot(rpcUrl: string, tokenAddress: string, addresses: string[]) { + const addrNorm = addresses.map(normalizeHexAddress) + + const tokenRes = await nodeCall(rpcUrl, "token.getCommitted", { tokenAddress }, `token.getCommitted:${tokenAddress}`) + if (tokenRes?.result !== 200) { + return { ok: false, snapshot: null, error: tokenRes } + } + + const balances: Record = {} + for (const a of addrNorm) { + const balRes = await nodeCall(rpcUrl, "token.getBalanceCommitted", { tokenAddress, address: a }, `token.getBalanceCommitted:${a}`) + if (balRes?.result === 200) balances[a] = balRes?.response?.balance ?? null + else balances[a] = null + } + + const snapshot = { + tokenAddress, + metadata: { + name: tokenRes?.response?.metadata?.name ?? null, + ticker: tokenRes?.response?.metadata?.ticker ?? null, + decimals: typeof tokenRes?.response?.metadata?.decimals === "number" ? tokenRes.response.metadata.decimals : null, + }, + state: { + totalSupply: tokenRes?.response?.state?.totalSupply ?? null, + }, + balances: stableBalances(addrNorm, balances), + } + + return { ok: true, snapshot, error: null } +} + +function snapshotsEqual(a: any, b: any): boolean { + return JSON.stringify(a) === JSON.stringify(b) +} + +function normalizeTokenAclEntries(entries: any): Array<{ address: string; permissions: string[] }> { + const list = Array.isArray(entries) ? entries : [] + const out: Array<{ address: string; permissions: string[] }> = [] + for (const entry of list) { + const address = normalizeHexAddress(entry?.address ?? "") + if (!address) continue + const permsRaw = Array.isArray(entry?.permissions) ? entry.permissions : [] + const perms = [...new Set(permsRaw.map((p: any) => String(p)).filter(Boolean))].sort() + out.push({ address, permissions: perms }) + } + out.sort((a, b) => a.address.localeCompare(b.address)) + return out +} + +function normalizeTokenPointerEntry(entry: any): string | null { + if (!entry) return null + if (typeof entry === "string") return normalizeHexAddress(entry) + if (typeof entry === "object" && typeof entry.tokenAddress === "string") return normalizeHexAddress(entry.tokenAddress) + return null +} + +async function fetchHolderPointers(rpcUrl: string, address: string) { + const res = await nodeCall(rpcUrl, "token.getHolderPointers", { address }, `token.getHolderPointers:${address}`) + if (res?.result !== 200) return { ok: false, tokens: [], raw: res } + const tokensRaw = res?.response?.tokens + const tokensList = Array.isArray(tokensRaw) ? tokensRaw : [] + const tokens = tokensList.map(normalizeTokenPointerEntry).filter(Boolean) as string[] + return { ok: true, tokens, raw: tokensRaw } +} + +export async function waitForCrossNodeHolderPointersMatchBalances(params: { + rpcUrls: string[] + tokenAddress: string + expectedPresent: Record + timeoutSec: number + pollMs?: number +}): Promise { + const pollMs = Math.max(50, Math.floor(params.pollMs ?? 500)) + const deadlineMs = nowMs() + Math.max(1, params.timeoutSec) * 1000 + const startedAtMs = nowMs() + let attempts = 0 + const includeRaw = envBool("HOLDER_POINTER_INCLUDE_RAW", false) + + const rpcUrls = (params.rpcUrls ?? []).map(normalizeRpcUrl) + const expectedPresent: Record = {} + for (const [addr, exp] of Object.entries(params.expectedPresent ?? {})) { + expectedPresent[normalizeHexAddress(addr)] = !!exp + } + + const addresses = Object.keys(expectedPresent).sort() + + while (nowMs() < deadlineMs) { + attempts++ + const perNode: CrossNodeHolderPointersReport["perNode"] = [] + + for (const rpcUrl of rpcUrls) { + const perAddress: Record = {} + let nodeOk = true + let nodeErr: any = null + + for (const address of addresses) { + const holder = await fetchHolderPointers(rpcUrl, address) + if (!holder.ok) { + nodeOk = false + nodeErr = holder.raw + perAddress[address] = includeRaw + ? { hasPointer: false, tokenCount: null, raw: holder.raw } + : { hasPointer: false, tokenCount: null } + continue + } + const hasPointer = holder.tokens.includes(normalizeHexAddress(params.tokenAddress)) + perAddress[address] = includeRaw + ? { hasPointer, tokenCount: holder.tokens.length, raw: holder.raw } + : { hasPointer, tokenCount: holder.tokens.length } + } + + perNode.push({ rpcUrl, ok: nodeOk, perAddress, error: nodeErr }) + } + + const allNodesOk = perNode.every(n => n.ok) + if (allNodesOk) { + let allMatch = true + for (const node of perNode) { + for (const address of addresses) { + const expected = expectedPresent[address] ?? false + const actual = node.perAddress[address]?.hasPointer ?? false + if (expected !== actual) { + allMatch = false + break + } + } + if (!allMatch) break + } + + if (allMatch) { + return { + ok: true, + tokenAddress: normalizeHexAddress(params.tokenAddress), + rpcUrls, + expectedPresent, + attempts, + durationMs: nowMs() - startedAtMs, + perNode, + } + } + } + + await sleep(pollMs) + } + + const perNode: CrossNodeHolderPointersReport["perNode"] = [] + for (const rpcUrl of rpcUrls) { + const perAddress: Record = {} + let nodeOk = true + let nodeErr: any = null + for (const address of addresses) { + const holder = await fetchHolderPointers(rpcUrl, address) + if (!holder.ok) { + nodeOk = false + nodeErr = holder.raw + perAddress[address] = includeRaw + ? { hasPointer: false, tokenCount: null, raw: holder.raw } + : { hasPointer: false, tokenCount: null } + continue + } + const hasPointer = holder.tokens.includes(normalizeHexAddress(params.tokenAddress)) + perAddress[address] = includeRaw + ? { hasPointer, tokenCount: holder.tokens.length, raw: holder.raw } + : { hasPointer, tokenCount: holder.tokens.length } + } + perNode.push({ rpcUrl, ok: nodeOk, perAddress, error: nodeErr }) + } + + return { + ok: false, + tokenAddress: normalizeHexAddress(params.tokenAddress), + rpcUrls: (params.rpcUrls ?? []).map(normalizeRpcUrl), + expectedPresent, + attempts, + durationMs: nowMs() - startedAtMs, + perNode, + } +} + +export async function waitForCrossNodeTokenConsistency(params: { + rpcUrls: string[] + tokenAddress: string + addresses: string[] + timeoutSec: number + pollMs?: number +}): Promise { + const pollMs = Math.max(50, Math.floor(params.pollMs ?? 500)) + const deadlineMs = nowMs() + Math.max(1, params.timeoutSec) * 1000 + const startedAtMs = nowMs() + let attempts = 0 + + const rpcUrls = (params.rpcUrls ?? []).map(normalizeRpcUrl) + const addresses = (params.addresses ?? []).map(normalizeHexAddress).filter(Boolean) + + if (rpcUrls.length === 0) { + return { + ok: false, + tokenAddress: params.tokenAddress, + rpcUrls: [], + addresses, + attempts, + durationMs: nowMs() - startedAtMs, + perNode: [], + } + } + + while (nowMs() < deadlineMs) { + attempts++ + const perNode: CrossNodeTokenConsistencyReport["perNode"] = [] + for (const rpcUrl of rpcUrls) { + const one = await fetchTokenSnapshot(rpcUrl, params.tokenAddress, addresses) + perNode.push({ rpcUrl, ok: one.ok, snapshot: one.snapshot, error: one.error }) + } + + const okNodes = perNode.filter(n => n.ok && n.snapshot) + if (okNodes.length === perNode.length) { + const first = okNodes[0]!.snapshot + const allSame = okNodes.every(n => snapshotsEqual(n.snapshot, first)) + if (allSame) { + return { + ok: true, + tokenAddress: params.tokenAddress, + rpcUrls, + addresses, + attempts, + durationMs: nowMs() - startedAtMs, + perNode, + } + } + } + + await sleep(pollMs) + } + + const perNode: CrossNodeTokenConsistencyReport["perNode"] = [] + for (const rpcUrl of rpcUrls) { + const one = await fetchTokenSnapshot(rpcUrl, params.tokenAddress, addresses) + perNode.push({ rpcUrl, ok: one.ok, snapshot: one.snapshot, error: one.error }) + } + + return { + ok: false, + tokenAddress: params.tokenAddress, + rpcUrls, + addresses, + attempts, + durationMs: nowMs() - startedAtMs, + perNode, + } +} + +async function fetchTokenGetNormalized(rpcUrl: string, tokenAddress: string) { + const tokenRes = await nodeCall(rpcUrl, "token.getCommitted", { tokenAddress }, `token.getCommitted:${tokenAddress}`) + if (tokenRes?.result !== 200) { + return { ok: false, normalized: null, error: tokenRes } + } + + const owner = tokenRes?.response?.accessControl?.owner + const paused = !!tokenRes?.response?.accessControl?.paused + const entries = normalizeTokenAclEntries(tokenRes?.response?.accessControl?.entries) + + const normalized = { + tokenAddress: normalizeHexAddress(tokenAddress), + accessControl: { + owner: typeof owner === "string" ? normalizeHexAddress(owner) : null, + paused, + entries, + }, + } + + return { ok: true, normalized, error: null } +} + +export async function waitForCrossNodeTokenGetConsistency(params: { + rpcUrls: string[] + tokenAddress: string + timeoutSec: number + pollMs?: number +}): Promise { + const pollMs = Math.max(50, Math.floor(params.pollMs ?? 500)) + const deadlineMs = nowMs() + Math.max(1, params.timeoutSec) * 1000 + const startedAtMs = nowMs() + let attempts = 0 + + const rpcUrls = (params.rpcUrls ?? []).map(normalizeRpcUrl) + const tokenAddress = normalizeHexAddress(params.tokenAddress) + + if (rpcUrls.length === 0) { + return { ok: false, tokenAddress, rpcUrls: [], attempts, durationMs: nowMs() - startedAtMs, perNode: [] } + } + + while (nowMs() < deadlineMs) { + attempts++ + const perNode: CrossNodeTokenGetConsistencyReport["perNode"] = [] + for (const rpcUrl of rpcUrls) { + const one = await fetchTokenGetNormalized(rpcUrl, tokenAddress) + perNode.push({ rpcUrl, ok: one.ok, normalized: one.normalized, error: one.error }) + } + + const okNodes = perNode.filter(n => n.ok && n.normalized) + if (okNodes.length === perNode.length) { + const first = okNodes[0]!.normalized + const allSame = okNodes.every(n => snapshotsEqual(n.normalized, first)) + if (allSame) { + return { ok: true, tokenAddress, rpcUrls, attempts, durationMs: nowMs() - startedAtMs, perNode } + } + } + + await sleep(pollMs) + } + + const perNode: CrossNodeTokenGetConsistencyReport["perNode"] = [] + for (const rpcUrl of rpcUrls) { + const one = await fetchTokenGetNormalized(rpcUrl, tokenAddress) + perNode.push({ rpcUrl, ok: one.ok, normalized: one.normalized, error: one.error }) + } + + return { ok: false, tokenAddress, rpcUrls, attempts, durationMs: nowMs() - startedAtMs, perNode } +} + +async function isRpcReady(rpcUrl: string): Promise { + const url = normalizeRpcUrl(rpcUrl) + try { + const res = await fetch(url, { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify({ method: "ping", params: [] }), + }) + if (!res.ok) return false + const data = (await res.json().catch(() => null)) as any + return typeof data?.result === "number" && data.result >= 200 && data.result < 300 + } catch { + return false + } +} + +export async function waitForRpcReady(rpcUrl: string, timeoutSec: number): Promise { + const deadlineMs = nowMs() + Math.max(1, timeoutSec) * 1000 + let attempt = 0 + while (nowMs() < deadlineMs) { + if (await isRpcReady(rpcUrl)) return + attempt++ + const backoffMs = Math.min(2000, 100 + attempt * 100) + await sleep(backoffMs) + } + throw new Error(`RPC not ready at ${rpcUrl} after ${timeoutSec}s`) +} + +export async function readWalletMnemonics(): Promise { + const explicit = splitCsv(process.env.WALLETS) + if (explicit.length > 0) return explicit + + const dir = process.env.MNEMONICS_DIR ?? "devnet/identities" + const names = splitCsv(process.env.WALLET_FILES) + const defaultFiles = names.length > 0 ? names : ["node1.identity", "node2.identity", "node3.identity", "node4.identity"] + + const mnemonics: string[] = [] + for (const file of defaultFiles) { + const path = dir.replace(/\/+$/, "") + "/" + file + const text = await Bun.file(path).text() + const mnemonic = text.trim() + if (mnemonic.length > 0) mnemonics.push(mnemonic) + } + + return mnemonics +} + +export function maybeSilenceConsole() { + if (!envBool("QUIET", true)) return + + const allowedPrefixes = ["{", "["] + const originalLog = console.log.bind(console) + const originalWarn = console.warn.bind(console) + const originalInfo = console.info.bind(console) + const originalDebug = console.debug.bind(console) + + const filter = (...args: any[]) => { + if (args.length === 0) return + const first = args[0] + if (typeof first === "string") { + const trimmed = first.trim() + for (const p of allowedPrefixes) { + if (trimmed.startsWith(p)) return originalLog(...args) + } + return + } + return originalLog(...args) + } + + console.log = filter as any + console.info = filter as any + console.debug = () => {} + console.warn = (...args: any[]) => originalWarn(...args) + + ;(globalThis as any).__loadgenConsole = { originalLog, originalWarn, originalInfo, originalDebug } +} + +export function getTokenTargets(): string[] { + const targets = splitCsv(process.env.TARGETS).length > 0 + ? splitCsv(process.env.TARGETS) + : ["http://node-1:53551"] + return targets.map(normalizeRpcUrl) +} + +export type TokenBootstrapResult = { + tokenAddress: string + walletAddresses: string[] +} + +type GCREdit = { + type: string + [key: string]: any +} + +export async function getWalletAddresses(rpcUrl: string, mnemonics: string[]): Promise { + const addresses: string[] = [] + for (const mnemonic of mnemonics) { + const demos = new Demos() + await waitForRpcReady(rpcUrl, envInt("WAIT_FOR_RPC_SEC", 120)) + await demos.connect(rpcUrl) + await demos.connectWallet(mnemonic, { algorithm: "ed25519" }) + const sender = (await demos.crypto.getIdentity("ed25519")).publicKey + addresses.push(uint8ArrayToHex(sender)) + } + return addresses +} + +export async function withDemosWallet(params: { + rpcUrl: string + mnemonic: string + waitForRpcSec?: number + waitForTxSec?: number + fn: (demos: Demos, addressHex: string) => Promise +}): Promise { + const demos = new Demos() + await waitForRpcReady(params.rpcUrl, params.waitForRpcSec ?? envInt("WAIT_FOR_RPC_SEC", 120)) + await waitForTxReady(params.rpcUrl, params.waitForTxSec ?? envInt("WAIT_FOR_TX_SEC", 120)) + await demos.connect(params.rpcUrl) + await demos.connectWallet(params.mnemonic, { algorithm: "ed25519" }) + const { publicKey } = await demos.crypto.getIdentity("ed25519") + const addressHex = uint8ArrayToHex(publicKey) + return params.fn(demos, addressHex) +} + +function buildGasAndNonceEdits(fromEd25519Address: string): GCREdit[] { + return [ + { + type: "balance", + account: fromEd25519Address, + operation: "remove", + amount: 1, + txhash: "", + isRollback: false, + }, + { + type: "nonce", + operation: "add", + account: fromEd25519Address, + amount: 1, + txhash: "", + isRollback: false, + }, + ] +} + +async function signTxWithEdits(demos: Demos, tx: any, edits: GCREdit[]): Promise { + const { publicKey } = await demos.crypto.getIdentity("ed25519") + const fromHex = uint8ArrayToHex(publicKey) + + tx.content.from = fromHex + tx.content.from_ed25519_address = fromHex + tx.content.gcr_edits = edits + + tx.hash = Hashing.sha256(JSON.stringify(tx.content)) + const signatureBytes = Cryptography.sign(tx.hash, (demos as any).keypair.privateKey) + tx.signature = { type: "ed25519", data: uint8ArrayToHex(signatureBytes) } + return tx +} + +function deriveTokenAddress(deployer: string, deployerNonce: number, tokenObjectHash: string): string { + const addrHex = Hashing.sha256(`${deployer}:${deployerNonce}:${tokenObjectHash}`) + return "0x" + addrHex +} + +async function findReusableTokenAddress(params: { + rpcUrl: string + ownerAddress: string + excludeAddresses: string[] + minOwnerBalance: bigint + timeoutSec: number +}): Promise { + const deadlineMs = nowMs() + Math.max(1, params.timeoutSec) * 1000 + const owner = normalizeHexAddress(params.ownerAddress) + const excluded = new Set((params.excludeAddresses ?? []).map(normalizeHexAddress)) + + while (nowMs() < deadlineMs) { + const pointers = await nodeCall(params.rpcUrl, "token.getHolderPointers", { address: owner }, "token.getHolderPointers:reuse") + const tokensRaw = pointers?.response?.tokens + const list = Array.isArray(tokensRaw) ? tokensRaw : [] + const tokenAddresses = list.map(normalizeTokenPointerEntry).filter(Boolean) as string[] + + for (const tokenAddress of tokenAddresses.slice().reverse()) { + const token = await nodeCall(params.rpcUrl, "token.get", { tokenAddress }, `token.get:reuse:${tokenAddress}`) + if (token?.result !== 200) continue + const accessControl = token?.response?.accessControl + const tokenOwner = normalizeHexAddress(accessControl?.owner ?? "") + const paused = !!accessControl?.paused + const entries = Array.isArray(accessControl?.entries) ? accessControl.entries : [] + if (paused) continue + if (tokenOwner !== owner) continue + + let clean = true + for (const entry of entries) { + const addr = normalizeHexAddress(entry?.address ?? "") + if (!addr) continue + if (addr === owner) continue + if (excluded.has(addr)) { + clean = false + break + } + } + if (!clean) continue + + const balRes = await nodeCall(params.rpcUrl, "token.getBalance", { tokenAddress, address: owner }, `token.getBalance:reuse:${owner}`) + if (balRes?.result !== 200) continue + const bal = typeof balRes?.response?.balance === "string" ? BigInt(balRes.response.balance) : 0n + if (bal < params.minOwnerBalance) continue + + return normalizeHexAddress(tokenAddress) + } + + await sleep(500) + } + + return null +} + +export async function ensureTokenAndBalances( + rpcUrl: string, + deployerMnemonic: string, + walletAddresses: string[], +): Promise { + const demos = new Demos() + await waitForRpcReady(rpcUrl, envInt("WAIT_FOR_RPC_SEC", 120)) + await demos.connect(rpcUrl) + await demos.connectWallet(deployerMnemonic, { algorithm: "ed25519" }) + await waitForTxReady(rpcUrl, envInt("WAIT_FOR_TX_SEC", 120)) + await waitForChainReady(rpcUrl, envInt("WAIT_FOR_CHAIN_SEC", 120)) + + const bootstrap = envBool("TOKEN_BOOTSTRAP", true) + const distribute = envBool("TOKEN_DISTRIBUTE", true) + + const existing = (process.env.TOKEN_ADDRESS ?? "").trim() + let tokenAddress = existing + + if (!bootstrap) { + if (!tokenAddress) throw new Error("TOKEN_ADDRESS is required when TOKEN_BOOTSTRAP=false") + return { tokenAddress, walletAddresses } + } + + if (!tokenAddress) { + const name = process.env.TOKEN_NAME ?? "Perf Token" + const ticker = process.env.TOKEN_TICKER ?? "PERF" + const decimals = envInt("TOKEN_DECIMALS", 18) + const initialSupply = BigInt(process.env.TOKEN_INITIAL_SUPPLY ?? "1000000000000000000000000") + + const deployerAddress = walletAddresses[0]! + const currentNonce = await demos.getAddressNonce(deployerAddress) + const nextNonce = Number(currentNonce) + 1 + + const tokenBody = { name, ticker, decimals, initialSupply: initialSupply.toString() } + const tokenObjectHash = Hashing.sha256(JSON.stringify(tokenBody)) + tokenAddress = deriveTokenAddress(deployerAddress, nextNonce, tokenObjectHash) + + const now = Date.now() + const tokenData = { + metadata: { + name, + ticker, + decimals, + address: tokenAddress, + deployer: deployerAddress, + deployerNonce: nextNonce, + deployedAt: now, + hasScript: false, + }, + state: { + totalSupply: initialSupply.toString(), + balances: { [deployerAddress]: initialSupply.toString() }, + allowances: {}, + customState: {}, + }, + accessControl: { + owner: deployerAddress, + paused: false, + entries: [], + }, + } + + const tx = (demos as any).tx.empty() + // IMPORTANT: keep tx.content.type="native" so nodes do not try to execute the payload + // via the demosWork script engine (which expects DemoScript.operationOrder, etc.). + // Token state changes are driven by consensus-applied GCR edits (type:"token") anyway. + tx.content.type = "native" + tx.content.to = deployerAddress + tx.content.amount = 0 + tx.content.nonce = nextNonce + tx.content.timestamp = now + tx.content.data = ["token", { operation: "create", tokenAddress }] + + const tokenEdit = { + type: "token", + operation: "create", + account: deployerAddress, + txhash: "", + isRollback: false, + data: { tokenData, tokenAddress }, + } + + const edits = [...buildGasAndNonceEdits(deployerAddress), tokenEdit] + const signedTx = await signTxWithEdits(demos, tx, edits) + const validity = await (demos as any).confirm(signedTx) + if (validity?.result !== 200) { + throw new Error(`Token create confirm failed: ${JSON.stringify(validity)}`) + } + const res = await (demos as any).broadcast(validity) + if (res?.result !== 200) { + throw new Error(`Token create broadcast failed: ${JSON.stringify(res)}`) + } + + try { + await waitForTokenExists(rpcUrl, tokenAddress, envInt("TOKEN_WAIT_EXISTS_SEC", 30)) + } catch (err) { + if (!envBool("TOKEN_FALLBACK_REUSE", true)) throw err + + const distributeAmount = BigInt(process.env.TOKEN_DISTRIBUTE_AMOUNT ?? "100000000000000000000000") + const minOwnerBalance = distributeAmount * BigInt(Math.max(0, walletAddresses.length - 1)) + const reuse = await findReusableTokenAddress({ + rpcUrl, + ownerAddress: deployerAddress, + excludeAddresses: walletAddresses.slice(1), + minOwnerBalance, + timeoutSec: envInt("TOKEN_REUSE_TIMEOUT_SEC", 20), + }) + if (!reuse) throw err + tokenAddress = reuse + } + } + + if (distribute) { + await waitForTokenExists(rpcUrl, tokenAddress, envInt("TOKEN_WAIT_EXISTS_SEC", 30)) + const perWallet = BigInt(process.env.TOKEN_DISTRIBUTE_AMOUNT ?? "100000000000000000000000") + const deployerAddress = walletAddresses[0]! + const currentNonce = await demos.getAddressNonce(deployerAddress) + let nextNonce = Number(currentNonce) + 1 + for (const addr of walletAddresses) { + if (addr === deployerAddress) continue + + const tx = (demos as any).tx.empty() + tx.content.type = "native" + tx.content.to = addr + tx.content.amount = 0 + tx.content.nonce = nextNonce++ + tx.content.timestamp = Date.now() + tx.content.data = ["token", { operation: "transfer", tokenAddress, to: addr, amount: perWallet.toString() }] + + const tokenEdit = { + type: "token", + operation: "transfer", + account: deployerAddress, + tokenAddress, + txhash: "", + isRollback: false, + data: { from: deployerAddress, to: addr, amount: perWallet.toString() }, + } + + const edits = [...buildGasAndNonceEdits(deployerAddress), tokenEdit] + const signedTx = await signTxWithEdits(demos, tx, edits) + const validity = await (demos as any).confirm(signedTx) + if (validity?.result !== 200) { + throw new Error(`Token distribute confirm failed: ${JSON.stringify(validity)}`) + } + const res = await (demos as any).broadcast(validity) + if (res?.result !== 200) { + throw new Error(`Token distribute transfer failed: ${JSON.stringify(res)}`) + } + } + + const waitDist = envBool("TOKEN_WAIT_DISTRIBUTION", true) + if (waitDist) { + for (const addr of walletAddresses) { + if (addr === deployerAddress) continue + await waitForTokenBalanceAtLeast( + rpcUrl, + tokenAddress, + addr, + perWallet, + envInt("TOKEN_WAIT_DISTRIBUTION_SEC", 60), + ) + } + } + } + + return { tokenAddress, walletAddresses } +} + +export async function sendTokenTransferTxWithDemos(params: { + demos: Demos + tokenAddress: string + to: string + amount: bigint + nonce: number +}) { + const { demos } = params + const { publicKey } = await demos.crypto.getIdentity("ed25519") + const fromHex = uint8ArrayToHex(publicKey) + + const tx = (demos as any).tx.empty() + tx.content.type = "native" + tx.content.to = params.to + tx.content.amount = 0 + tx.content.nonce = params.nonce + tx.content.timestamp = Date.now() + tx.content.data = [ + "token", + { + operation: "transfer", + tokenAddress: params.tokenAddress, + to: params.to, + amount: params.amount.toString(), + }, + ] + + const tokenEdit = { + type: "token", + operation: "transfer", + account: fromHex, + tokenAddress: params.tokenAddress, + txhash: "", + isRollback: false, + data: { from: fromHex, to: params.to, amount: params.amount.toString() }, + } + + const edits = [...buildGasAndNonceEdits(fromHex), tokenEdit] + const signedTx = await signTxWithEdits(demos, tx, edits) + const validity = await (demos as any).confirm(signedTx) + const res = await (demos as any).broadcast(validity) + return { res, fromHex } +} + +export async function buildSignedTokenTransferTxWithDemos(params: { + demos: Demos + tokenAddress: string + to: string + amount: bigint + nonce: number + timestamp?: number +}) { + const { demos } = params + const { publicKey } = await demos.crypto.getIdentity("ed25519") + const fromHex = uint8ArrayToHex(publicKey) + + const tx = (demos as any).tx.empty() + tx.content.type = "native" + tx.content.to = params.to + tx.content.amount = 0 + tx.content.nonce = params.nonce + tx.content.timestamp = typeof params.timestamp === "number" ? params.timestamp : Date.now() + tx.content.data = [ + "token", + { + operation: "transfer", + tokenAddress: params.tokenAddress, + to: params.to, + amount: params.amount.toString(), + }, + ] + + const tokenEdit = { + type: "token", + operation: "transfer", + account: fromHex, + tokenAddress: params.tokenAddress, + txhash: "", + isRollback: false, + data: { from: fromHex, to: params.to, amount: params.amount.toString() }, + } + + const edits = [...buildGasAndNonceEdits(fromHex), tokenEdit] + const signedTx = await signTxWithEdits(demos, tx, edits) + return { signedTx, fromHex } +} + +export async function sendTokenMintTxWithDemos(params: { + demos: Demos + tokenAddress: string + to: string + amount: bigint + nonce: number +}) { + const { demos } = params + const { publicKey } = await demos.crypto.getIdentity("ed25519") + const fromHex = uint8ArrayToHex(publicKey) + + const tx = (demos as any).tx.empty() + tx.content.type = "native" + tx.content.to = params.to + tx.content.amount = 0 + tx.content.nonce = params.nonce + tx.content.timestamp = Date.now() + tx.content.data = [ + "token", + { + operation: "mint", + tokenAddress: params.tokenAddress, + to: params.to, + amount: params.amount.toString(), + }, + ] + + const tokenEdit = { + type: "token", + operation: "mint", + account: fromHex, + tokenAddress: params.tokenAddress, + txhash: "", + isRollback: false, + data: { to: params.to, amount: params.amount.toString() }, + } + + const edits = [...buildGasAndNonceEdits(fromHex), tokenEdit] + const signedTx = await signTxWithEdits(demos, tx, edits) + const validity = await (demos as any).confirm(signedTx) + const res = await (demos as any).broadcast(validity) + return { res, fromHex } +} + +export async function sendTokenGrantPermissionTxWithDemos(params: { + demos: Demos + tokenAddress: string + grantee: string + permissions: string[] + nonce: number +}) { + const { demos } = params + const { publicKey } = await demos.crypto.getIdentity("ed25519") + const fromHex = uint8ArrayToHex(publicKey) + + const tx = (demos as any).tx.empty() + tx.content.type = "native" + tx.content.to = params.grantee + tx.content.amount = 0 + tx.content.nonce = params.nonce + tx.content.timestamp = Date.now() + tx.content.data = [ + "token", + { + operation: "grantPermission", + tokenAddress: params.tokenAddress, + grantee: params.grantee, + permissions: params.permissions, + }, + ] + + const tokenEdit = { + type: "token", + operation: "grantPermission", + account: fromHex, + tokenAddress: params.tokenAddress, + txhash: "", + isRollback: false, + data: { grantee: params.grantee, permissions: params.permissions }, + } + + const edits = [...buildGasAndNonceEdits(fromHex), tokenEdit] + const signedTx = await signTxWithEdits(demos, tx, edits) + const validity = await (demos as any).confirm(signedTx) + const res = await (demos as any).broadcast(validity) + return { res, fromHex } +} + +export async function sendTokenRevokePermissionTxWithDemos(params: { + demos: Demos + tokenAddress: string + grantee: string + permissions: string[] + nonce: number +}) { + const { demos } = params + const { publicKey } = await demos.crypto.getIdentity("ed25519") + const fromHex = uint8ArrayToHex(publicKey) + + const tx = (demos as any).tx.empty() + tx.content.type = "native" + tx.content.to = params.grantee + tx.content.amount = 0 + tx.content.nonce = params.nonce + tx.content.timestamp = Date.now() + tx.content.data = [ + "token", + { + operation: "revokePermission", + tokenAddress: params.tokenAddress, + grantee: params.grantee, + permissions: params.permissions, + }, + ] + + const tokenEdit = { + type: "token", + operation: "revokePermission", + account: fromHex, + tokenAddress: params.tokenAddress, + txhash: "", + isRollback: false, + data: { grantee: params.grantee, permissions: params.permissions }, + } + + const edits = [...buildGasAndNonceEdits(fromHex), tokenEdit] + const signedTx = await signTxWithEdits(demos, tx, edits) + const validity = await (demos as any).confirm(signedTx) + const res = await (demos as any).broadcast(validity) + return { res, fromHex } +} + +export async function sendTokenPauseTxWithDemos(params: { + demos: Demos + tokenAddress: string + nonce: number +}) { + const { demos } = params + const { publicKey } = await demos.crypto.getIdentity("ed25519") + const fromHex = uint8ArrayToHex(publicKey) + + const tx = (demos as any).tx.empty() + tx.content.type = "native" + tx.content.to = fromHex + tx.content.amount = 0 + tx.content.nonce = params.nonce + tx.content.timestamp = Date.now() + tx.content.data = ["token", { operation: "pause", tokenAddress: params.tokenAddress }] + + const tokenEdit = { + type: "token", + operation: "pause", + account: fromHex, + tokenAddress: params.tokenAddress, + txhash: "", + isRollback: false, + data: {}, + } + + const edits = [...buildGasAndNonceEdits(fromHex), tokenEdit] + const signedTx = await signTxWithEdits(demos, tx, edits) + const validity = await (demos as any).confirm(signedTx) + const res = await (demos as any).broadcast(validity) + return { res, fromHex } +} + +export async function sendTokenUnpauseTxWithDemos(params: { + demos: Demos + tokenAddress: string + nonce: number +}) { + const { demos } = params + const { publicKey } = await demos.crypto.getIdentity("ed25519") + const fromHex = uint8ArrayToHex(publicKey) + + const tx = (demos as any).tx.empty() + tx.content.type = "native" + tx.content.to = fromHex + tx.content.amount = 0 + tx.content.nonce = params.nonce + tx.content.timestamp = Date.now() + tx.content.data = ["token", { operation: "unpause", tokenAddress: params.tokenAddress }] + + const tokenEdit = { + type: "token", + operation: "unpause", + account: fromHex, + tokenAddress: params.tokenAddress, + txhash: "", + isRollback: false, + data: {}, + } + + const edits = [...buildGasAndNonceEdits(fromHex), tokenEdit] + const signedTx = await signTxWithEdits(demos, tx, edits) + const validity = await (demos as any).confirm(signedTx) + const res = await (demos as any).broadcast(validity) + return { res, fromHex } +} + +export async function sendTokenTransferOwnershipTxWithDemos(params: { + demos: Demos + tokenAddress: string + newOwner: string + nonce: number +}) { + const { demos } = params + const { publicKey } = await demos.crypto.getIdentity("ed25519") + const fromHex = uint8ArrayToHex(publicKey) + + const tx = (demos as any).tx.empty() + tx.content.type = "native" + tx.content.to = params.newOwner + tx.content.amount = 0 + tx.content.nonce = params.nonce + tx.content.timestamp = Date.now() + tx.content.data = ["token", { operation: "transferOwnership", tokenAddress: params.tokenAddress, newOwner: params.newOwner }] + + const tokenEdit = { + type: "token", + operation: "transferOwnership", + account: fromHex, + tokenAddress: params.tokenAddress, + txhash: "", + isRollback: false, + data: { newOwner: params.newOwner }, + } + + const edits = [...buildGasAndNonceEdits(fromHex), tokenEdit] + const signedTx = await signTxWithEdits(demos, tx, edits) + const validity = await (demos as any).confirm(signedTx) + const res = await (demos as any).broadcast(validity) + return { res, fromHex } +} + +export async function sendTokenUpgradeScriptTxWithDemos(params: { + demos: Demos + tokenAddress: string + scriptCode: string + methodNames: string[] + nonce: number +}) { + const { demos } = params + const { publicKey } = await demos.crypto.getIdentity("ed25519") + const fromHex = uint8ArrayToHex(publicKey) + + const code = String(params.scriptCode ?? "") + const codeHash = Hashing.sha256(code) + + const newScript = { + version: 1, + code, + methods: (params.methodNames ?? []).map(name => ({ + name, + params: [], + returns: "any", + mutates: false, + })), + hooks: [], + codeHash, + upgradedAt: Date.now(), + } + + const tx = (demos as any).tx.empty() + tx.content.type = "native" + tx.content.to = fromHex + tx.content.amount = 0 + tx.content.nonce = params.nonce + tx.content.timestamp = Date.now() + tx.content.data = [ + "token", + { operation: "upgradeScript", tokenAddress: params.tokenAddress, newScript, upgradeReason: "better_testing scripted token smoke" }, + ] + + const tokenEdit = { + type: "token", + operation: "upgradeScript", + account: fromHex, + tokenAddress: params.tokenAddress, + txhash: "", + isRollback: false, + data: { newScript, upgradeReason: "better_testing scripted token smoke" }, + } + + const edits = [...buildGasAndNonceEdits(fromHex), tokenEdit] + const signedTx = await signTxWithEdits(demos, tx, edits) + const validity = await (demos as any).confirm(signedTx) + if (validity?.result !== 200) { + throw new Error(`Token upgradeScript confirm failed: ${JSON.stringify(validity)}`) + } + const res = await (demos as any).broadcast(validity) + if (res?.result !== 200) { + throw new Error(`Token upgradeScript broadcast failed: ${JSON.stringify(res)}`) + } + return { res, fromHex, codeHash } +} + +export async function sendTokenUpdateAclTxWithDemos(params: { + demos: Demos + tokenAddress: string + action: "grant" | "revoke" + targetAddress: string + permissions: string[] + nonce: number +}) { + const { demos } = params + const { publicKey } = await demos.crypto.getIdentity("ed25519") + const fromHex = uint8ArrayToHex(publicKey) + + const tx = (demos as any).tx.empty() + tx.content.type = "native" + tx.content.to = params.targetAddress + tx.content.amount = 0 + tx.content.nonce = params.nonce + tx.content.timestamp = Date.now() + tx.content.data = [ + "token", + { + operation: "updateACL", + tokenAddress: params.tokenAddress, + action: params.action, + targetAddress: params.targetAddress, + permissions: params.permissions, + }, + ] + + const tokenEdit = { + type: "token", + operation: "updateACL", + account: fromHex, + tokenAddress: params.tokenAddress, + txhash: "", + isRollback: false, + data: { action: params.action, targetAddress: params.targetAddress, permissions: params.permissions }, + } + + const edits = [...buildGasAndNonceEdits(fromHex), tokenEdit] + const signedTx = await signTxWithEdits(demos, tx, edits) + const validity = await (demos as any).confirm(signedTx) + const res = await (demos as any).broadcast(validity) + return { res, fromHex } +} + +export async function sendTokenBurnTxWithDemos(params: { + demos: Demos + tokenAddress: string + from: string + amount: bigint + nonce: number +}) { + const { demos } = params + const { publicKey } = await demos.crypto.getIdentity("ed25519") + const callerHex = uint8ArrayToHex(publicKey) + + const tx = (demos as any).tx.empty() + tx.content.type = "native" + tx.content.to = params.from + tx.content.amount = 0 + tx.content.nonce = params.nonce + tx.content.timestamp = Date.now() + tx.content.data = [ + "token", + { + operation: "burn", + tokenAddress: params.tokenAddress, + from: params.from, + amount: params.amount.toString(), + }, + ] + + const tokenEdit = { + type: "token", + operation: "burn", + account: callerHex, + tokenAddress: params.tokenAddress, + txhash: "", + isRollback: false, + data: { from: params.from, amount: params.amount.toString() }, + } + + const edits = [...buildGasAndNonceEdits(callerHex), tokenEdit] + const signedTx = await signTxWithEdits(demos, tx, edits) + const validity = await (demos as any).confirm(signedTx) + const res = await (demos as any).broadcast(validity) + return { res, callerHex } +} + +export function pickRecipient(recipients: string[], senderHex: string, workerId: number, avoidSelf: boolean): string { + if (!avoidSelf) return recipients[workerId % recipients.length]! + const senderNorm = normalizeHexAddress(senderHex) + for (let i = 0; i < recipients.length; i++) { + const candidate = recipients[(workerId + i) % recipients.length]! + if (normalizeHexAddress(candidate) !== senderNorm) return candidate + } + throw new Error("Recipient set only contains the sender address (self-send avoided). Provide a different recipient.") +} diff --git a/better_testing/loadgen/src/token_smoke.ts b/better_testing/loadgen/src/token_smoke.ts new file mode 100644 index 000000000..d448336e5 --- /dev/null +++ b/better_testing/loadgen/src/token_smoke.ts @@ -0,0 +1,199 @@ +import { Demos } from "@kynesyslabs/demosdk/websdk" +import { + maybeSilenceConsole, + getTokenTargets, + readWalletMnemonics, + ensureTokenAndBalances, + getWalletAddresses, + nodeCall, + sendTokenTransferTxWithDemos, + waitForCrossNodeTokenConsistency, + waitForCrossNodeHolderPointersMatchBalances, + waitForRpcReady, + waitForTxReady, +} from "./token_shared" +import { getRunConfig, writeJson } from "./run_io" + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function envBool(name: string, fallback: boolean): boolean { + const raw = process.env[name] + if (!raw) return fallback + switch (raw.trim().toLowerCase()) { + case "1": + case "true": + case "yes": + case "y": + case "on": + return true + case "0": + case "false": + case "no": + case "n": + case "off": + return false + default: + return fallback + } +} + +function expectPresentFromBalance(balance: string | null): boolean { + try { + return BigInt(balance ?? "0") > 0n + } catch { + return false + } +} + +async function waitForRecipientBalanceDelta(params: { + rpcUrl: string + tokenAddress: string + address: string + before: bigint + delta: bigint + timeoutSec: number +}) { + const deadline = Date.now() + Math.max(1, params.timeoutSec) * 1000 + let attempt = 0 + while (Date.now() < deadline) { + const res = await nodeCall( + params.rpcUrl, + "token.getBalance", + { tokenAddress: params.tokenAddress, address: params.address }, + `waitBalance:${attempt}`, + ) + const balRaw = res?.response?.balance + if (typeof balRaw === "string") { + try { + const bal = BigInt(balRaw) + if (bal >= params.before + params.delta) return bal + } catch { + // ignore + } + } + attempt++ + await new Promise(r => setTimeout(r, Math.min(2000, 100 + attempt * 100))) + } + return null +} + +export async function runTokenSmoke() { + maybeSilenceConsole() + const targets = getTokenTargets() + const rpcUrl = targets[0]! + const wallets = await readWalletMnemonics() + if (wallets.length < 2) throw new Error("token_smoke requires at least 2 wallets") + + const walletAddresses = await getWalletAddresses(rpcUrl, wallets.slice(0, 2)) + const { tokenAddress } = await ensureTokenAndBalances(rpcUrl, wallets[0]!, walletAddresses) + + const amount = BigInt(process.env.TOKEN_TRANSFER_AMOUNT ?? "1") + + const from = walletAddresses[0]! + const to = walletAddresses[1]! + + const demos = new Demos() + await waitForRpcReady(rpcUrl, envInt("WAIT_FOR_RPC_SEC", 120)) + await waitForTxReady(rpcUrl, envInt("WAIT_FOR_TX_SEC", 120)) + await demos.connect(rpcUrl) + await demos.connectWallet(wallets[0]!, { algorithm: "ed25519" }) + + const beforeFrom = await nodeCall(rpcUrl, "token.getBalance", { tokenAddress, address: from }, "beforeFrom") + const beforeTo = await nodeCall(rpcUrl, "token.getBalance", { tokenAddress, address: to }, "beforeTo") + const beforeToBig = BigInt(beforeTo?.response?.balance ?? "0") + + const currentNonce = await demos.getAddressNonce(from) + const nonce = Number(currentNonce) + 1 + + const { res } = await sendTokenTransferTxWithDemos({ + demos, + tokenAddress, + to, + amount, + nonce, + }) + + const appliedTo = await waitForRecipientBalanceDelta({ + rpcUrl, + tokenAddress, + address: to, + before: beforeToBig, + delta: amount, + timeoutSec: envInt("TOKEN_WAIT_APPLY_SEC", 30), + }) + + const afterFrom = await nodeCall(rpcUrl, "token.getBalance", { tokenAddress, address: from }, "afterFrom") + const afterTo = await nodeCall(rpcUrl, "token.getBalance", { tokenAddress, address: to }, "afterTo") + + const crossNodeCheck = envBool("CROSS_NODE_CHECK", true) + const crossNode = crossNodeCheck + ? await waitForCrossNodeTokenConsistency({ + rpcUrls: targets, + tokenAddress, + addresses: [from, to], + timeoutSec: envInt("CROSS_NODE_TIMEOUT_SEC", 120), + pollMs: envInt("CROSS_NODE_POLL_MS", 500), + }) + : null + + const holderPointerCheck = envBool("HOLDER_POINTER_CHECK", true) + const expectedPresent = + crossNode?.ok && crossNode.perNode?.[0]?.snapshot?.balances + ? { + [from]: expectPresentFromBalance(crossNode.perNode[0].snapshot.balances[from] ?? null), + [to]: expectPresentFromBalance(crossNode.perNode[0].snapshot.balances[to] ?? null), + } + : { + [from]: BigInt(afterFrom?.response?.balance ?? "0") > 0n, + [to]: BigInt(afterTo?.response?.balance ?? "0") > 0n, + } + + const holderPointers = holderPointerCheck + ? await waitForCrossNodeHolderPointersMatchBalances({ + rpcUrls: targets, + tokenAddress, + expectedPresent, + timeoutSec: envInt("HOLDER_POINTER_TIMEOUT_SEC", 120), + pollMs: envInt("HOLDER_POINTER_POLL_MS", 500), + }) + : null + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_smoke` + const summary = { + runId: run.runId, + tokenAddress, + rpcUrl, + from, + to, + amount: amount.toString(), + transferResult: res ?? null, + balances: { + before: { from: beforeFrom?.response?.balance ?? null, to: beforeTo?.response?.balance ?? null }, + after: { from: afterFrom?.response?.balance ?? null, to: afterTo?.response?.balance ?? null }, + }, + applied: { + toBalanceReached: appliedTo?.toString?.() ?? null, + waitApplySec: envInt("TOKEN_WAIT_APPLY_SEC", 30), + }, + crossNode, + holderPointers, + waitForRpcSec: envInt("WAIT_FOR_RPC_SEC", 120), + timestamp: new Date().toISOString(), + } + + writeJson(`${artifactBase}.summary.json`, summary) + console.log(JSON.stringify({ token_smoke_summary: summary }, null, 2)) + + if (crossNodeCheck && crossNode && !crossNode.ok) { + throw new Error("Cross-node token consistency check failed (token_smoke)") + } + if (holderPointerCheck && holderPointers && !holderPointers.ok) { + throw new Error("Holder-pointer check failed (token_smoke)") + } +} diff --git a/better_testing/loadgen/src/token_transfer_loadgen.ts b/better_testing/loadgen/src/token_transfer_loadgen.ts new file mode 100644 index 000000000..63c29ba6e --- /dev/null +++ b/better_testing/loadgen/src/token_transfer_loadgen.ts @@ -0,0 +1,413 @@ +import { Demos } from "@kynesyslabs/demosdk/websdk" +import { uint8ArrayToHex } from "@kynesyslabs/demosdk/encryption" +import { appendJsonl, getRunConfig, writeJson } from "./run_io" +import { + ensureTokenAndBalances, + getTokenTargets, + getWalletAddresses, + maybeSilenceConsole, + pickRecipient, + readWalletMnemonics, + sendTokenTransferTxWithDemos, + waitForCrossNodeHolderPointersMatchBalances, + waitForCrossNodeTokenConsistency, + waitForRpcReady, + waitForTxReady, +} from "./token_shared" + +type LoadgenConfig = { + targets: string[] + durationSec: number + wallets: string[] + concurrency: number + amount: bigint + sampleLimit: number + inflightPerWallet: number + avoidSelfRecipient: boolean + emitTimeseries: boolean +} + +type Counters = { + startedAtMs: number + endedAtMs: number + total: number + ok: number + error: number + errorSamples: Record +} + +type TimeseriesPoint = { + tSec: number + ok: number + total: number + error: number + tpsOk: number + latencyMs: { sampleCount: number; p50: number; p95: number; p99: number } + timestamp: string +} + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function envBool(name: string, fallback: boolean): boolean { + const raw = process.env[name] + if (!raw) return fallback + switch (raw.trim().toLowerCase()) { + case "1": + case "true": + case "yes": + case "y": + case "on": + return true + case "0": + case "false": + case "no": + case "n": + case "off": + return false + default: + return fallback + } +} + +function splitCsv(value: string | undefined): string[] { + return (value ?? "") + .split(",") + .map(s => s.trim()) + .filter(Boolean) +} + +function nowMs(): number { + return Date.now() +} + +function percentile(sorted: number[], p: number): number { + if (sorted.length === 0) return NaN + const idx = Math.min( + sorted.length - 1, + Math.max(0, Math.floor((p / 100) * (sorted.length - 1))), + ) + return sorted[idx]! +} + +function unique(values: string[]): string[] { + const out: string[] = [] + const seen = new Set() + for (const v of values) { + const key = v.toLowerCase() + if (seen.has(key)) continue + seen.add(key) + out.push(v) + } + return out +} + +class ReservoirSampler { + private seen = 0 + private readonly max: number + private readonly samples: number[] = [] + + constructor(maxSamples: number) { + this.max = Math.max(1, Math.floor(maxSamples)) + } + + add(value: number) { + this.seen++ + if (this.samples.length < this.max) { + this.samples.push(value) + return + } + const j = Math.floor(Math.random() * this.seen) + if (j < this.max) this.samples[j] = value + } + + snapshotSorted(): number[] { + const copy = this.samples.slice() + copy.sort((a, b) => a - b) + return copy + } + + size(): number { + return this.samples.length + } +} + +function getConfig(wallets: string[]): LoadgenConfig { + return { + targets: getTokenTargets(), + durationSec: envInt("DURATION_SEC", 30), + wallets, + concurrency: envInt("CONCURRENCY", wallets.length || 1), + amount: BigInt(process.env.TOKEN_TRANSFER_AMOUNT ?? process.env.AMOUNT ?? "1"), + sampleLimit: envInt("SAMPLE_LIMIT", 200_000), + inflightPerWallet: Math.max(1, envInt("INFLIGHT_PER_WALLET", 1)), + avoidSelfRecipient: envBool("AVOID_SELF_RECIPIENT", true), + emitTimeseries: envBool("EMIT_TIMESERIES", true), + } +} + +async function worker( + cfg: LoadgenConfig, + counters: Counters, + sampler: ReservoirSampler, + timeseriesSampler: ReservoirSampler, + stopAtMs: number, + walletMnemonic: string, + workerId: number, + tokenAddress: string, + recipientAddresses: string[], +) { + const rpcUrl = cfg.targets[workerId % cfg.targets.length]! + const demos = new Demos() + await waitForRpcReady(rpcUrl, envInt("WAIT_FOR_RPC_SEC", 120)) + await waitForTxReady(rpcUrl, envInt("WAIT_FOR_TX_SEC", 120)) + await demos.connect(rpcUrl) + await demos.connectWallet(walletMnemonic, { algorithm: "ed25519" }) + + const sender = (await demos.crypto.getIdentity("ed25519")).publicKey + const senderHex = uint8ArrayToHex(sender) + + const to = pickRecipient(recipientAddresses, senderHex, workerId, cfg.avoidSelfRecipient) + + // Fetch nonce once and manage locally (required for high-throughput, multi-inflight). + const currentNonce = await demos.getAddressNonce(senderHex) + let nextNonce = Number(currentNonce) + 1 + + async function sendOne() { + const start = performance.now() + counters.total++ + try { + const nonce = nextNonce++ + const { res } = await sendTokenTransferTxWithDemos({ + demos, + tokenAddress, + to, + amount: cfg.amount, + nonce, + }) + if (res?.result !== 200) { + throw new Error(`tx rejected: ${JSON.stringify(res)}`) + } + const elapsed = performance.now() - start + sampler.add(elapsed) + timeseriesSampler.add(elapsed) + counters.ok++ + } catch (err: any) { + const elapsed = performance.now() - start + sampler.add(elapsed) + timeseriesSampler.add(elapsed) + counters.error++ + const key = String(err?.message ?? err ?? "unknown").slice(0, 400) + counters.errorSamples[key] = (counters.errorSamples[key] ?? 0) + 1 + } + } + + const inflight = Math.max(1, cfg.inflightPerWallet) + const active = new Set>() + + function launchOne() { + const p = sendOne().finally(() => { + active.delete(p) + }) + active.add(p) + } + + while (nowMs() < stopAtMs) { + while (active.size < inflight && nowMs() < stopAtMs) { + launchOne() + } + if (active.size === 0) break + await Promise.race(Array.from(active)) + } + + await Promise.allSettled(Array.from(active)) +} + +export async function runTokenTransferLoadgen() { + maybeSilenceConsole() + const wallets = await readWalletMnemonics() + const cfg = getConfig(wallets) + + if (wallets.length === 0) throw new Error("No wallets found. Set WALLETS or MNEMONICS_DIR/WALLET_FILES.") + + const usedWallets = wallets.slice(0, Math.max(1, Math.min(cfg.concurrency, wallets.length))) + + const bootstrapRpc = cfg.targets[0]! + const recipientWallets = wallets.length >= 2 ? wallets : usedWallets + const recipientAddresses = await getWalletAddresses(bootstrapRpc, recipientWallets) + const usedWalletAddresses = await getWalletAddresses(bootstrapRpc, usedWallets) + const { tokenAddress } = await ensureTokenAndBalances(bootstrapRpc, wallets[0]!, recipientAddresses) + const explicitRecipients = splitCsv(process.env.RECIPIENTS) + const recipients = explicitRecipients.length > 0 ? explicitRecipients : recipientAddresses + + const startedAtMs = nowMs() + const stopAtMs = startedAtMs + cfg.durationSec * 1000 + + const counters: Counters = { + startedAtMs, + endedAtMs: 0, + total: 0, + ok: 0, + error: 0, + errorSamples: {}, + } + + const sampler = new ReservoirSampler(cfg.sampleLimit) + const timeseriesSampler = new ReservoirSampler(50_000) + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_transfer` + const artifacts = { + runId: run.runId, + runDir: run.runDir, + summaryPath: `${artifactBase}.summary.json`, + timeseriesPath: `${artifactBase}.timeseries.jsonl`, + } + + let lastPointAtMs = startedAtMs + let lastOk = 0 + let lastTotal = 0 + let lastError = 0 + + async function timeseriesLoop() { + if (!cfg.emitTimeseries) return + while (nowMs() < stopAtMs) { + await sleep(1000) + const now = nowMs() + const elapsedSinceLast = Math.max(0.001, (now - lastPointAtMs) / 1000) + lastPointAtMs = now + + const okDelta = counters.ok - lastOk + const totalDelta = counters.total - lastTotal + const errorDelta = counters.error - lastError + + lastOk = counters.ok + lastTotal = counters.total + lastError = counters.error + + const samples = timeseriesSampler.snapshotSorted() + const point: TimeseriesPoint = { + tSec: (now - startedAtMs) / 1000, + ok: okDelta, + total: totalDelta, + error: errorDelta, + tpsOk: okDelta / elapsedSinceLast, + latencyMs: { + sampleCount: timeseriesSampler.size(), + p50: percentile(samples, 50), + p95: percentile(samples, 95), + p99: percentile(samples, 99), + }, + timestamp: new Date().toISOString(), + } + + appendJsonl(artifacts.timeseriesPath, point) + } + } + + await Promise.all( + [ + ...usedWallets.map((mnemonic, idx) => + worker(cfg, counters, sampler, timeseriesSampler, stopAtMs, mnemonic, idx, tokenAddress, recipients), + ), + timeseriesLoop(), + ], + ) + + counters.endedAtMs = nowMs() + + const postRunSettleCheck = envBool("POST_RUN_SETTLE_CHECK", true) + const settleSample = unique([ + ...usedWalletAddresses, + ...recipients.slice(0, Math.min(4, recipients.length)), + ]).slice(0, envInt("POST_RUN_SETTLE_SAMPLE_ADDRESSES", 8)) + + const postRunSettle = postRunSettleCheck + ? await waitForCrossNodeTokenConsistency({ + rpcUrls: cfg.targets, + tokenAddress, + addresses: settleSample, + timeoutSec: envInt("POST_RUN_SETTLE_TIMEOUT_SEC", 120), + pollMs: envInt("POST_RUN_SETTLE_POLL_MS", 500), + }) + : null + + const holderPointerSettleCheck = envBool("POST_RUN_HOLDER_POINTER_CHECK", true) + const expectedPresent: Record = {} + if (postRunSettle?.ok && postRunSettle.perNode?.[0]?.snapshot?.balances) { + const b = postRunSettle.perNode[0].snapshot.balances + for (const addr of settleSample) { + try { + expectedPresent[addr] = BigInt(b[addr] ?? "0") > 0n + } catch { + expectedPresent[addr] = false + } + } + } + + const holderPointerSettle = + holderPointerSettleCheck && Object.keys(expectedPresent).length > 0 + ? await waitForCrossNodeHolderPointersMatchBalances({ + rpcUrls: cfg.targets, + tokenAddress, + expectedPresent, + timeoutSec: envInt("POST_RUN_HOLDER_POINTER_TIMEOUT_SEC", 120), + pollMs: envInt("POST_RUN_HOLDER_POINTER_POLL_MS", 500), + }) + : null + + const durationSec = (counters.endedAtMs - counters.startedAtMs) / 1000 + const samples = sampler.snapshotSorted() + const summary = { + scenario: "token_transfer", + tokenAddress, + ok: counters.ok, + total: counters.total, + error: counters.error, + errorSamples: counters.errorSamples, + durationSec, + okTps: counters.ok / Math.max(0.001, durationSec), + latencyMs: { + sampleCount: sampler.size(), + p50: percentile(samples, 50), + p95: percentile(samples, 95), + p99: percentile(samples, 99), + }, + config: { + targets: cfg.targets, + concurrency: usedWallets.length, + inflightPerWallet: cfg.inflightPerWallet, + amount: cfg.amount.toString(), + waitForRpcSec: envInt("WAIT_FOR_RPC_SEC", 120), + tokenBootstrap: envBool("TOKEN_BOOTSTRAP", true), + tokenDistribute: envBool("TOKEN_DISTRIBUTE", true), + }, + postRun: { + settleSample, + settle: postRunSettle, + holderPointers: holderPointerSettle, + }, + artifacts, + timestamp: new Date().toISOString(), + } + + writeJson(artifacts.summaryPath, summary) + console.log(JSON.stringify({ token_transfer_summary: summary }, null, 2)) + + const strict = envBool("POST_RUN_SETTLE_STRICT", false) + if (strict && postRunSettleCheck && postRunSettle && !postRunSettle.ok) { + throw new Error("Post-run settle check failed (token_transfer)") + } + const strictPointers = envBool("POST_RUN_HOLDER_POINTER_STRICT", false) + if (strictPointers && holderPointerSettleCheck && holderPointerSettle && !holderPointerSettle.ok) { + throw new Error("Post-run holder-pointer check failed (token_transfer)") + } +} diff --git a/better_testing/loadgen/src/token_transfer_ramp.ts b/better_testing/loadgen/src/token_transfer_ramp.ts new file mode 100644 index 000000000..f09ee6710 --- /dev/null +++ b/better_testing/loadgen/src/token_transfer_ramp.ts @@ -0,0 +1,152 @@ +import { runTokenTransferLoadgen } from "./token_transfer_loadgen" +import { getRunConfig, writeJson } from "./run_io" + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function splitCsv(value: string | undefined): string[] { + return (value ?? "") + .split(",") + .map(s => s.trim()) + .filter(Boolean) +} + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +export async function runTokenTransferRamp() { + const rampConcurrency = splitCsv(process.env.RAMP_CONCURRENCY) + .map(s => Number.parseInt(s, 10)) + .filter(n => Number.isFinite(n) && n > 0) + + const rampInflight = splitCsv(process.env.RAMP_INFLIGHT_PER_WALLET) + .map(s => Number.parseInt(s, 10)) + .filter(n => Number.isFinite(n) && n > 0) + + const mode: "concurrency" | "inflight" = rampInflight.length > 0 ? "inflight" : "concurrency" + const stepDurationSec = envInt("STEP_DURATION_SEC", 15) + const cooldownSec = envInt("COOLDOWN_SEC", 3) + + if (mode === "concurrency" && rampConcurrency.length === 0) { + throw new Error("RAMP_CONCURRENCY must be a comma-separated list of positive ints") + } + if (mode === "inflight" && rampInflight.length === 0) { + throw new Error("RAMP_INFLIGHT_PER_WALLET must be a comma-separated list of positive ints") + } + + const run = getRunConfig() + const artifactBase = `${run.runDir}/token_transfer_ramp` + const artifacts = { + runId: run.runId, + runDir: run.runDir, + summaryPath: `${artifactBase}.summary.json`, + } + + const results: any[] = [] + let reuseTokenAddress: string | null = null + + const fixedConcurrency = envInt("CONCURRENCY", 4) + const fixedInflight = envInt("INFLIGHT_PER_WALLET", 1) + + const steps = + mode === "inflight" + ? rampInflight.map(inflight => ({ concurrency: fixedConcurrency, inflightPerWallet: inflight })) + : rampConcurrency.map(concurrency => ({ concurrency, inflightPerWallet: fixedInflight })) + + for (const step of steps) { + process.env.SCENARIO = "token_transfer" + process.env.DURATION_SEC = String(stepDurationSec) + process.env.CONCURRENCY = String(step.concurrency) + process.env.INFLIGHT_PER_WALLET = String(step.inflightPerWallet) + + // Scenario hygiene: bootstrap/distribute once, then reuse the same token for subsequent ramp steps. + // This avoids long consensus waits (token visibility + distribution) inside each step and makes + // throughput comparisons less noisy. + if (reuseTokenAddress) { + process.env.TOKEN_ADDRESS = reuseTokenAddress + process.env.TOKEN_BOOTSTRAP = "false" + process.env.TOKEN_DISTRIBUTE = "false" + process.env.TOKEN_WAIT_DISTRIBUTION = "false" + } else { + // Ensure the first step can bootstrap normally if the user didn't explicitly disable it. + if (!process.env.TOKEN_BOOTSTRAP) process.env.TOKEN_BOOTSTRAP = "true" + } + + let stepSummary: any = null + let stepError: any = null + + const originalLog = console.log + const capture: any[] = [] + console.log = (...args: any[]) => { + capture.push(args) + originalLog(...args) + } + + try { + await runTokenTransferLoadgen() + for (const row of capture) { + const payload = row?.[0] + if (payload && typeof payload === "string") { + try { + const parsed = JSON.parse(payload) + if (parsed?.token_transfer_summary) stepSummary = parsed.token_transfer_summary + } catch { + // ignore + } + } else if (payload?.token_transfer_summary) { + stepSummary = payload.token_transfer_summary + } + } + if (!reuseTokenAddress && stepSummary?.tokenAddress) { + reuseTokenAddress = String(stepSummary.tokenAddress) + } + } catch (err: any) { + stepError = { message: err?.message ?? String(err) } + } finally { + console.log = originalLog + } + + results.push({ + concurrency: step.concurrency, + inflightPerWallet: step.inflightPerWallet, + stepDurationSec, + cooldownSec, + summary: stepSummary, + error: stepError, + }) + + if (cooldownSec > 0) await sleep(cooldownSec * 1000) + } + + const okSteps = results + .map(r => ({ concurrency: r.concurrency, inflightPerWallet: r.inflightPerWallet, okTps: r.summary?.okTps })) + .filter(r => typeof r.okTps === "number") + + const best = okSteps.sort((a, b) => (b.okTps ?? 0) - (a.okTps ?? 0))[0] ?? null + + const rampSummary = { + scenario: "token_transfer_ramp", + mode, + bestByOkTps: best, + steps: results, + config: { + rampConcurrency: rampConcurrency.length > 0 ? rampConcurrency : null, + rampInflightPerWallet: rampInflight.length > 0 ? rampInflight : null, + fixedConcurrency, + fixedInflightPerWallet: fixedInflight, + stepDurationSec, + cooldownSec, + tokenTransferAmount: process.env.TOKEN_TRANSFER_AMOUNT ?? process.env.AMOUNT ?? "1", + }, + artifacts, + timestamp: new Date().toISOString(), + } + + writeJson(artifacts.summaryPath, rampSummary) + console.log(JSON.stringify({ token_transfer_ramp_summary: rampSummary }, null, 2)) +} diff --git a/better_testing/loadgen/src/transfer_loadgen.ts b/better_testing/loadgen/src/transfer_loadgen.ts new file mode 100644 index 000000000..c6c408af4 --- /dev/null +++ b/better_testing/loadgen/src/transfer_loadgen.ts @@ -0,0 +1,453 @@ +import { Demos } from "@kynesyslabs/demosdk/websdk" +import { uint8ArrayToHex } from "@kynesyslabs/demosdk/encryption" +import { appendJsonl, getRunConfig, writeJson } from "./run_io" + +type LoadgenConfig = { + targets: string[] + durationSec: number + wallets: string[] + amount: number + sampleLimit: number + inflightPerWallet: number + avoidSelfRecipient: boolean + emitTimeseries: boolean +} + +type Counters = { + startedAtMs: number + endedAtMs: number + total: number + ok: number + confirmError: number + broadcastError: number + unexpectedError: number +} + +type TimeseriesPoint = { + tSec: number + ok: number + total: number + confirmError: number + broadcastError: number + unexpectedError: number + tpsOk: number + latencyMs: { sampleCount: number; p50: number; p95: number; p99: number } + timestamp: string +} + +function sleep(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)) +} + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +function envFloat(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseFloat(raw) + return Number.isFinite(value) ? value : fallback +} + +function splitCsv(value: string | undefined): string[] { + return (value ?? "") + .split(",") + .map(s => s.trim()) + .filter(Boolean) +} + +function envBool(name: string, fallback: boolean): boolean { + const raw = process.env[name] + if (!raw) return fallback + switch (raw.trim().toLowerCase()) { + case "1": + case "true": + case "yes": + case "y": + case "on": + return true + case "0": + case "false": + case "no": + case "n": + case "off": + return false + default: + return fallback + } +} + +function nowMs(): number { + return Date.now() +} + +function percentile(sorted: number[], p: number): number { + if (sorted.length === 0) return NaN + const idx = Math.min( + sorted.length - 1, + Math.max(0, Math.floor((p / 100) * (sorted.length - 1))), + ) + return sorted[idx]! +} + +class ReservoirSampler { + private seen = 0 + private readonly max: number + private readonly samples: number[] = [] + + constructor(maxSamples: number) { + this.max = Math.max(1, Math.floor(maxSamples)) + } + + add(value: number) { + this.seen++ + if (this.samples.length < this.max) { + this.samples.push(value) + return + } + const j = Math.floor(Math.random() * this.seen) + if (j < this.max) this.samples[j] = value + } + + snapshotSorted(): number[] { + const copy = this.samples.slice() + copy.sort((a, b) => a - b) + return copy + } + + size(): number { + return this.samples.length + } +} + +async function readWalletMnemonics(): Promise { + const explicit = splitCsv(process.env.WALLETS) + if (explicit.length > 0) return explicit + + const dir = process.env.MNEMONICS_DIR ?? "devnet/identities" + const names = splitCsv(process.env.WALLET_FILES) + const defaultFiles = names.length > 0 ? names : ["node1.identity", "node2.identity", "node3.identity", "node4.identity"] + + const mnemonics: string[] = [] + for (const file of defaultFiles) { + const path = dir.replace(/\/+$/, "") + "/" + file + const text = await Bun.file(path).text() + const mnemonic = text.trim() + if (mnemonic.length > 0) mnemonics.push(mnemonic) + } + + return mnemonics +} + +function maybeSilenceConsole() { + if (!envBool("QUIET", true)) return + + const allowedPrefixes = ["{", "["] + const originalLog = console.log.bind(console) + const originalWarn = console.warn.bind(console) + const originalInfo = console.info.bind(console) + const originalDebug = console.debug.bind(console) + + const filter = (...args: any[]) => { + if (args.length === 0) return + const first = args[0] + if (typeof first === "string") { + const trimmed = first.trim() + for (const p of allowedPrefixes) { + if (trimmed.startsWith(p)) return originalLog(...args) + } + return + } + return originalLog(...args) + } + + console.log = filter as any + console.info = filter as any + console.debug = () => {} + console.warn = (...args: any[]) => originalWarn(...args) + + // Keep original methods accessible if needed during debugging. + ;(globalThis as any).__loadgenConsole = { originalLog, originalWarn, originalInfo, originalDebug } +} + +function normalizeRpcUrl(url: string): string { + return url.replace(/\/+$/, "") + "/" +} + +async function isRpcReady(rpcUrl: string): Promise { + const url = normalizeRpcUrl(rpcUrl) + try { + const res = await fetch(url, { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify({ method: "ping", params: [] }), + }) + if (!res.ok) return false + const data = (await res.json().catch(() => null)) as any + return typeof data?.result === "number" && data.result >= 200 && data.result < 300 + } catch { + return false + } +} + +async function waitForRpcReady(rpcUrl: string, timeoutSec: number): Promise { + const deadlineMs = nowMs() + Math.max(1, timeoutSec) * 1000 + let attempt = 0 + while (nowMs() < deadlineMs) { + if (await isRpcReady(rpcUrl)) return + attempt++ + const backoffMs = Math.min(2000, 100 + attempt * 100) + await sleep(backoffMs) + } + throw new Error(`RPC not ready at ${rpcUrl} after ${timeoutSec}s`) +} + +function getConfig(wallets: string[]): LoadgenConfig { + const targets = splitCsv(process.env.TARGETS).length > 0 + ? splitCsv(process.env.TARGETS) + : ["http://node-1:53551"] + + const amount = envFloat("AMOUNT", 1) + + return { + targets: targets.map(normalizeRpcUrl), + durationSec: envInt("DURATION_SEC", 30), + wallets, + amount, + sampleLimit: envInt("SAMPLE_LIMIT", 200_000), + inflightPerWallet: Math.max(1, envInt("INFLIGHT_PER_WALLET", 1)), + avoidSelfRecipient: envBool("AVOID_SELF_RECIPIENT", true), + emitTimeseries: envBool("EMIT_TIMESERIES", true), + } +} + +function pickRecipient(recipients: string[], senderHex: string, workerId: number, avoidSelf: boolean): string { + if (!avoidSelf) return recipients[workerId % recipients.length]! + for (let i = 0; i < recipients.length; i++) { + const candidate = recipients[(workerId + i) % recipients.length]! + if (candidate !== senderHex) return candidate + } + throw new Error("RECIPIENTS only contains the sender address (self-send avoided). Provide a different recipient.") +} + +async function worker( + cfg: LoadgenConfig, + counters: Counters, + sampler: ReservoirSampler, + timeseriesSampler: ReservoirSampler, + stopAtMs: number, + walletMnemonic: string, + workerId: number, +) { + const rpcUrl = cfg.targets[workerId % cfg.targets.length]! + + const demos = new Demos() + await waitForRpcReady(rpcUrl, envInt("WAIT_FOR_RPC_SEC", 120)) + await demos.connect(rpcUrl) + await demos.connectWallet(walletMnemonic, { algorithm: "ed25519" }) + + const sender = (await demos.crypto.getIdentity("ed25519")).publicKey + const senderHex = uint8ArrayToHex(sender) + + const recipients = splitCsv(process.env.RECIPIENTS) + if (recipients.length === 0) { + throw new Error("RECIPIENTS is required for transfer loadgen (comma-separated 0x... addresses)") + } + + const to = pickRecipient(recipients, senderHex, workerId, cfg.avoidSelfRecipient) + + const currentNonce = await demos.getAddressNonce(senderHex) + let nextNonce = Number(currentNonce) + 1 + + async function sendOne() { + const start = performance.now() + counters.total++ + try { + const tx = demos.tx.empty() + tx.content.to = to + tx.content.nonce = nextNonce++ + tx.content.amount = cfg.amount + tx.content.type = "native" + tx.content.timestamp = Date.now() + tx.content.data = ["native", { nativeOperation: "send", args: [to, cfg.amount] }] + + const signedTx = await demos.sign(tx) + const validity = await demos.confirm(signedTx).catch((err: any) => { + counters.confirmError++ + throw err + }) + const broadcastRes = await demos.broadcast(validity).catch((err: any) => { + counters.broadcastError++ + throw err + }) + + const elapsed = performance.now() - start + sampler.add(elapsed) + timeseriesSampler.add(elapsed) + + if (broadcastRes?.result === 200) { + counters.ok++ + } else { + counters.broadcastError++ + } + } catch { + const elapsed = performance.now() - start + sampler.add(elapsed) + timeseriesSampler.add(elapsed) + counters.unexpectedError++ + } + } + + const inflight = Math.max(1, cfg.inflightPerWallet) + const active = new Set>() + + function launchOne() { + const p = sendOne().finally(() => { + active.delete(p) + }) + active.add(p) + } + + while (nowMs() < stopAtMs) { + while (active.size < inflight && nowMs() < stopAtMs) { + launchOne() + } + if (active.size === 0) break + await Promise.race(Array.from(active)) + } + + await Promise.allSettled(Array.from(active)) +} + +export async function runTransferLoadgen() { + maybeSilenceConsole() + const wallets = await readWalletMnemonics() + const cfg = getConfig(wallets) + + const maxWallets = envInt("CONCURRENCY", wallets.length || 1) + const usedWallets = wallets.slice(0, Math.max(1, Math.min(maxWallets, wallets.length))) + + if (wallets.length === 0) { + throw new Error("No wallets found. Set WALLETS or MNEMONICS_DIR/WALLET_FILES.") + } + + const startedAtMs = nowMs() + const stopAtMs = startedAtMs + cfg.durationSec * 1000 + + const counters: Counters = { + startedAtMs, + endedAtMs: 0, + total: 0, + ok: 0, + confirmError: 0, + broadcastError: 0, + unexpectedError: 0, + } + + const sampler = new ReservoirSampler(cfg.sampleLimit) + + const run = getRunConfig() + const artifactBase = `${run.runDir}/transfer` + const artifacts = { + runId: run.runId, + runDir: run.runDir, + summaryPath: `${artifactBase}.summary.json`, + timeseriesPath: `${artifactBase}.timeseries.jsonl`, + } + + const timeseriesSampler = new ReservoirSampler(50_000) + let lastPointAtMs = startedAtMs + let lastOk = 0 + let lastTotal = 0 + let lastConfirmError = 0 + let lastBroadcastError = 0 + let lastUnexpectedError = 0 + + async function timeseriesLoop() { + if (!cfg.emitTimeseries) return + while (nowMs() < stopAtMs) { + await sleep(1000) + const now = nowMs() + const elapsedSinceLast = Math.max(0.001, (now - lastPointAtMs) / 1000) + lastPointAtMs = now + + const okDelta = counters.ok - lastOk + const totalDelta = counters.total - lastTotal + const confirmDelta = counters.confirmError - lastConfirmError + const broadcastDelta = counters.broadcastError - lastBroadcastError + const unexpectedDelta = counters.unexpectedError - lastUnexpectedError + + lastOk = counters.ok + lastTotal = counters.total + lastConfirmError = counters.confirmError + lastBroadcastError = counters.broadcastError + lastUnexpectedError = counters.unexpectedError + + const samples = timeseriesSampler.snapshotSorted() + const point: TimeseriesPoint = { + tSec: (now - startedAtMs) / 1000, + ok: okDelta, + total: totalDelta, + confirmError: confirmDelta, + broadcastError: broadcastDelta, + unexpectedError: unexpectedDelta, + tpsOk: okDelta / elapsedSinceLast, + latencyMs: { + sampleCount: timeseriesSampler.size(), + p50: percentile(samples, 50), + p95: percentile(samples, 95), + p99: percentile(samples, 99), + }, + timestamp: new Date().toISOString(), + } + appendJsonl(artifacts.timeseriesPath, point) + } + } + + await Promise.all( + [ + ...usedWallets.map((mnemonic, idx) => + worker(cfg, counters, sampler, timeseriesSampler, stopAtMs, mnemonic, idx), + ), + timeseriesLoop(), + ], + ) + + counters.endedAtMs = nowMs() + + const elapsedSec = Math.max(0.001, (counters.endedAtMs - counters.startedAtMs) / 1000) + const tps = counters.ok / elapsedSec + + const samples = sampler.snapshotSorted() + const report = { + kind: "transfer_loadgen_summary", + config: { + ...cfg, + concurrency: usedWallets.length, + recipients: splitCsv(process.env.RECIPIENTS), + }, + elapsedSec, + totals: counters, + tps, + latencyMs: { + sampleCount: sampler.size(), + p50: percentile(samples, 50), + p95: percentile(samples, 95), + p99: percentile(samples, 99), + }, + timestamp: new Date().toISOString(), + artifacts, + } + + console.log(JSON.stringify(report, null, 2)) + writeJson(artifacts.summaryPath, report) + return report +} + +if (import.meta.main) { + await runTransferLoadgen() +} diff --git a/better_testing/loadgen/src/transfer_ramp.ts b/better_testing/loadgen/src/transfer_ramp.ts new file mode 100644 index 000000000..ea7ab5b77 --- /dev/null +++ b/better_testing/loadgen/src/transfer_ramp.ts @@ -0,0 +1,105 @@ +import { runTransferLoadgen } from "./transfer_loadgen" + +type RampStepResult = { + concurrency: number + inflightPerWallet: number + durationSec: number + report?: any + error?: { message: string } +} + +function splitCsv(value: string | undefined): string[] { + return (value ?? "") + .split(",") + .map(s => s.trim()) + .filter(Boolean) +} + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +async function sleep(ms: number): Promise { + await new Promise(resolve => setTimeout(resolve, ms)) +} + +function parseRampSteps(): number[] { + const raw = process.env.RAMP_CONCURRENCY ?? "1,2,4" + return splitCsv(raw) + .map(n => Number.parseInt(n, 10)) + .filter(n => Number.isFinite(n) && n > 0) +} + +export async function runTransferRamp() { + const steps = parseRampSteps() + const durationSec = envInt("STEP_DURATION_SEC", envInt("DURATION_SEC", 15)) + const cooldownSec = envInt("COOLDOWN_SEC", 3) + const inflightPerWallet = envInt("INFLIGHT_PER_WALLET", 1) + + const results: RampStepResult[] = [] + + for (const concurrency of steps) { + process.env.CONCURRENCY = String(concurrency) + process.env.DURATION_SEC = String(durationSec) + process.env.INFLIGHT_PER_WALLET = String(inflightPerWallet) + + try { + const report = await runTransferLoadgen() + results.push({ concurrency, inflightPerWallet, durationSec, report }) + } catch (err: any) { + results.push({ + concurrency, + inflightPerWallet, + durationSec, + error: { message: String(err?.message ?? err) }, + }) + } + + if (cooldownSec > 0) { + await sleep(cooldownSec * 1000) + } + } + + const best = results + .slice() + .filter(r => !r.error) + .sort((a, b) => (b.report?.tps ?? 0) - (a.report?.tps ?? 0))[0] + + const rampReport = { + kind: "transfer_ramp_summary", + config: { + rampConcurrency: steps, + stepDurationSec: durationSec, + cooldownSec, + inflightPerWallet, + }, + best: best + ? { + concurrency: best.concurrency, + inflightPerWallet: best.inflightPerWallet, + tps: best.report?.tps ?? null, + latencyMs: best.report?.latencyMs ?? null, + } + : null, + steps: results.map(r => ({ + concurrency: r.concurrency, + inflightPerWallet: r.inflightPerWallet, + durationSec: r.durationSec, + error: r.error ?? null, + tps: r.report?.tps ?? null, + latencyMs: r.report?.latencyMs ?? null, + totals: r.report?.totals ?? null, + timestamp: r.report?.timestamp ?? null, + })), + timestamp: new Date().toISOString(), + } + + console.log(JSON.stringify(rampReport, null, 2)) +} + +if (import.meta.main) { + await runTransferRamp() +} diff --git a/better_testing/research.md b/better_testing/research.md new file mode 100644 index 000000000..b177558f7 --- /dev/null +++ b/better_testing/research.md @@ -0,0 +1,653 @@ +# Research: how to run Demos Node for steady-state perf testing + +Goal: establish a repeatable way to run a **multi-node** Demos Network locally so we can measure: +- **steady-state TPS** (requests/txs/messages per second sustained without degradation) +- **message responsiveness** (end-to-end latency distribution p50/p95/p99 for “messages”) + +This document is intentionally “ops/bench harness” focused (no new tests yet). + +--- + +## 0) Current status (phased roadmap) + +We’re keeping all harness code in `better_testing/` so we can iterate without touching node runtime code. + +### Phase 1 — RPC baseline (DONE) +- Implemented a Bun load generator that POSTs JSON-RPC-style calls to the node RPC `POST /` and reports RPS + p50/p95/p99. +- Intended usage: run as a `loadgen` container inside the devnet docker network via overlay compose. + +Artifacts: +- `better_testing/loadgen/src/rpc_loadgen.ts` +- `better_testing/loadgen/src/main.ts` (`SCENARIO=rpc|transfer`) +- `better_testing/docker-compose.perf.yml` +- `better_testing/loadgen/README.md` + +### Phase 2 — Native transfer TPS (IN PROGRESS) +- Implemented a transfer load generator using the SDK path (`confirmTx` + `broadcastTx`) to exercise the real client surface. +- Current blocker: the devnet nodes are currently crashing during genesis insertion with: + - `QueryFailedError: null value in column "from_ed25519_address" of relation "transactions" violates not-null constraint` + - This makes RPC intermittently unavailable (loadgen sees `ECONNREFUSED` / high network error rates). + - Likely root cause: genesis transaction content lacks `from_ed25519_address` (see `src/libs/blockchain/chain.ts` `generateGenesisBlock()`), but the `transactions` table/entity requires it (see `src/model/entities/Transactions.ts`). + +Artifacts: +- `better_testing/loadgen/src/transfer_loadgen.ts` + +### Phase 2.1 — Ramp + hygiene (DONE) +- Added a `transfer_ramp` scenario to quickly sweep concurrency and spot the knee point. +- Added scenario hygiene knobs: + - `AVOID_SELF_RECIPIENT=true` (default) to avoid self-send skew + - `INFLIGHT_PER_WALLET` to increase load even with a small wallet pool + - `QUIET=true` (default) to suppress noisy dependency logs so results are readable +- Added run artifacts for dashboarding: + - `better_testing/runs//transfer.summary.json` + - `better_testing/runs//transfer.timeseries.jsonl` (per-second JSONL points) + +### Phase 3 — IM “message responsiveness” (NEXT) +- Add a WebSocket IM load generator (online + offline paths) using the SDK implementation so we can measure message latency distributions under load. + +### Phase 4 — Observability + dashboard (NEXT) +- Add a simple dashboard/reporting layer to compare runs (time series TPS/latency + node metrics + run metadata). + +### Note on “no node modifications” +The benchmark harness itself lives entirely in `better_testing/`, but devnet/docker tooling may still require occasional repo-level hygiene fixes to run reliably (e.g., `.dockerignore` to avoid accidentally sending local runtime state into the Docker build context). This does not change node behavior; it only prevents build failures. + +--- + +## 1) What “running the node” means in this repo + +### Primary entrypoint +- Runtime entrypoint: `src/index.ts` + - Starts the **HTTP RPC server** (`serverRpcBun()` in `src/libs/network/server_rpc.ts`) + - Bootstraps chain, peers, and background loops + - Starts additional services when conditions/config allow: + - **Signaling Server (IM WebSocket)**: `new SignalingServer(port)` in `src/features/InstantMessagingProtocol/signalingServer/signalingServer.ts` + - **OmniProtocol server**: `startOmniProtocolServer(...)` in `src/libs/omniprotocol/integration/startup` + - **Metrics server + collector**: `src/features/metrics/*` exposed at `/metrics` + - **MCP server**: `src/features/mcp` (optional; enabled by default unless `MCP_ENABLED=false`) + - **TLSNotary**: `src/features/tlsnotary` (optional; default disabled) + +### Two “runner” modes + +1) Local runner: `./run` + - High-level script that can manage local postgres, monitoring stack, etc. + - Supports `--no-tui` for non-interactive logging. + +2) Devnet (recommended for performance research): Docker Compose + - `devnet/docker-compose.yml` starts: + - 1 Postgres container with 4 DBs + - 4 node containers on a single docker bridge network + - Node containers run `./devnet/run-devnet` as entrypoint (see `devnet/Dockerfile`) + - Devnet uses **external DB** (postgres container), and disables the TUI (legacy logs). + +Why devnet for perf work: +- deterministic topology (4 nodes, shared network, shared DB) without needing 4 machines +- lets us add a **loadgen container inside the same docker network**, avoiding host NAT noise + +--- + +## 2) Runtime topology and ports (devnet) + +From `devnet/docker-compose.yml`: +- Node i: + - HTTP RPC port: `${NODEi_PORT}` (defaults 53551..53554) + - OmniProtocol port: `${NODEi_OMNI_PORT}` (defaults 53561..53564) + - `EXPOSED_URL=http://node-i:${NODEi_PORT}` inside the docker network +- Postgres: + - internal service name: `postgres:5432` + - DB names: `node1_db`, `node2_db`, `node3_db`, `node4_db` (created by `devnet/postgres-init/init-databases.sql`) + +Important service ports started by `src/index.ts`: +- **Signaling server** (IM WebSocket): defaults to 3005, and is auto-bumped to next available port + - In devnet, each container has its own network namespace, so all 4 nodes can bind to `3005` internally without collisions. + - Devnet does **not** publish `3005` to the host, so any IM benchmark should run from inside docker network (recommended) or we must expose it. +- **Metrics server**: defaults to 9090 (and is auto-bumped to next available port) + - Devnet does **not** publish metrics ports by default, so scraping should also happen from inside docker network (recommended). + +--- + +## 3) What counts as a “message” here (and how to exercise it) + +There are (at least) two relevant “message” paths: + +### A) Instant Messaging Protocol (SignalingServer over WebSocket) +- Server: `src/features/InstantMessagingProtocol/signalingServer/signalingServer.ts` +- Registers peers and forwards encrypted messages between them. +- Registration requires a cryptographic proof: + - `register` payload includes `verification: SerializedSignedObject` + - Server verifies via `ucrypto.verify(...)` + +Practical client implementation already exists in the SDK: +- `node_modules/@kynesyslabs/demosdk/build/instant_messaging/index.js` + - `registerAndWait()` builds the `SerializedSignedObject` + - `sendMessage(targetId, message)` encrypts using `ml-kem-aes` and sends `type:"message"` + +For responsiveness benchmarks, this is the cleanest “message loop” because it has: +- a single hop (client -> node signaling server -> peer client) when both online +- an offline path (store in DB + blockchain write) when recipient is offline + +### B) Node RPC (HTTP) request/response path +- Server: `src/libs/network/server_rpc.ts` +- Protocol: POST payload with `{ method, params }`, e.g. `ping`, `nodeCall`, `mempool`, etc. +- This is useful for baseline throughput/latency without WebSocket encryption overhead. + +--- + +## 4) How I plan to run the system for perf research + +### 4.1 Baseline: bring up the 4-node devnet + +```bash +cd devnet +./scripts/setup.sh # generate identities + peerlist (if needed) +docker compose up -d --build +docker compose logs -f node-1 # watch for “Signaling server started” +``` + +“Ready” signals (log-based, since compose has no node healthchecks): +- `[NETWORK] Signaling server started` +- `[METRICS] Prometheus metrics server started on http://0.0.0.0:/metrics` +- Peer bootstrap has completed and node is not stuck “listening…” + +### 4.2 Stabilize config for benchmarking (reduce noise) + +For performance runs (not correctness): +- disable features that add overhead but aren’t part of the benchmark: + - `MCP_ENABLED=false` (unless you are benchmarking MCP) + - `TLSNOTARY_ENABLED=false` (already default) +- reduce logging volume: + - pass `log-level=warning` or `log-level=error` via args (supported in `src/index.ts` argument digest) + +Note: devnet currently runs `bun start:bun` (TS entrypoint). For *benchmark stability*, a production bundle could be introduced later, but first we need repeatable measurements. + +### 4.3 Add a load generator inside the docker network (key step) + +Rationale: +- If we run load from the host, we measure host->docker NAT + scheduling noise. +- If we run load inside docker network, we measure the node + protocol path more directly. + +Plan: +- Add a `loadgen` container service attached to `demos-network`. +- The loadgen uses the existing SDK instant messaging client to: + 1) Connect N clients to `ws://node-1:3005` (or the configured signaling port) + 2) `registerAndWait()` each client + 3) Send messages at controlled rates and measure: + - time from send -> receive/ack + - sustained throughput before latency “knees” + 4) Repeat for offline path by intentionally disconnecting the receiver + +Metrics captured: +- client-side latency histogram (p50/p95/p99) +- server-side resource metrics from `/metrics` (CPU, mem, peer count, etc.) + +--- + +## 5) Benchmark scenarios (progressive) + +### Scenario 0: “is the harness stable?” +- 4 nodes running, 1 loadgen with 10 IM clients, low rate (e.g. 1 msg/sec each) +- verify no disconnect storms, no DB errors, no runaway logs + +### Scenario 1: Online IM latency vs throughput +- 2 cohorts: senders + receivers online +- ramp msg rate (step or linear) until p99 latency spikes or errors rise +- record plateau throughput and knee point + +### Scenario 2: Offline message path stress +- receivers offline +- senders enqueue messages (SignalingServer stores to DB + writes tx to blockchain path) +- measure enqueue TPS and DB growth behavior +- then bring receiver online and measure “catch-up” drain latency + +### Scenario 3: RPC baseline +- high-rate `ping` or a light `nodeCall` (no heavy crypto/DB) +- establishes upper bound for HTTP request handling throughput + +--- + +## 6) Observability plan (minimal, then richer) + +### Minimal (works immediately) +- `docker compose logs -f node-1` (watch errors, restarts, peer churn) +- client-side loadgen metrics printed periodically (QPS, p50/p95/p99) + +### Better (recommended next) +- run Prometheus/Grafana in the same docker network: + - either attach the monitoring stack to `demos-network`, or run a dedicated compose for perf experiments. +- scrape each node’s `/metrics` endpoint from within docker network (no need to publish ports). + +--- + +## 7) Known intricacies / risks for perf measurement + +- **Signaling server port is not published in devnet compose**: + - we should benchmark IM from inside docker network (loadgen service). + - if benchmarking from host, we must expose `3005` (or actual port) per node. +- **Metrics port is auto-bumped**: + - node uses “next available port” logic; in docker it’s stable, but if multiple metrics servers run in the same namespace it may drift. + - for scraping, prefer docker-network DNS + known port conventions. +- **Registration proof requirement**: + - do not hand-roll the proof; use the SDK `registerAndWait()` implementation. +- **Noise from logging/TUI**: + - TUI is already disabled in devnet; still reduce log level for perf runs. + +--- + +## 8) Next actions (not implemented yet) + +1) Make devnet RPC reachability deterministic for `loadgen` (Phase 2 unblock) + - Confirm whether RPC listens on `0.0.0.0` inside the container (not `127.0.0.1` only). + - Add “wait for RPC ready” logic in loadgen (retry/backoff + explicit diagnostics). +2) Run the first transfer baseline sweep (Phase 2 deliverable) + - Start with low concurrency and short duration, then ramp. + - Emit time-series samples (per-second TPS + p95/p99) to make the knee point obvious. +3) Decide the canonical “message responsiveness” target for the next scenario (Phase 3) + - IM WS (client ↔ node) vs OmniProtocol (node ↔ node) vs HTTP RPC. +4) Add IM loadgen (Phase 3) + - Online path: sender → signaling server → receiver. + - Offline path: sender enqueues to DB/chain, receiver later drains. +5) Add dashboard scaffolding (Phase 4) + - At minimum: a run folder with `run.json` + `timeseries.jsonl` + a small HTML plot (or Grafana). + +### Direction: an intuitive testing dashboard (recommended) + +Once the harness exists, the natural next step is a small “perf dashboard” that makes runs easy to interpret and compare: +- A Grafana dashboard (or a lightweight local HTML report) showing: + - throughput over time + - p50/p95/p99 latency over time + - error rate / disconnect rate + - queue depth / offline-message backlog (if applicable) + - CPU / memory / GC pressure (from `/metrics`) +- A “run metadata” panel (git SHA, scenario, rates, node counts, env flags) so results are reproducible. + +--- + +## [CLARIFICATION REQUIRED] + +Context: “message responsiveness to messages” +Ambiguity: Should we benchmark: +1) IM SignalingServer WebSocket messages (client->server->client), or +2) Node RPC throughput/latency, or +3) OmniProtocol P2P message latency/throughput? +Options: (1) is easiest to control + already has SDK client; (3) is closest to node-to-node but requires protocol-specific loadgen. +Blocking: NO (I can start with IM WebSocket as baseline unless you say otherwise). + +## Questions for you to answer (to lock the benchmark spec) + +1) Which path is the primary “message responsiveness” KPI? + - IM SignalingServer WS (client ↔ node) vs OmniProtocol (node ↔ node) vs HTTP RPC +2) What is the desired success metric? + - e.g. “p99 < 200ms at 1k msgs/sec”, “no message loss”, “max TPS before p99 > 1s”, etc. +3) What payload size should we use for “messages”? + - e.g. 256B / 1KB / 16KB (encrypted payload sizes matter) +4) How should we define “delivered” for measurement? + - “receiver got WS message” vs “receiver ACKed application-level receipt” vs “persisted to DB/chain” +5) Should the benchmark include the offline path (DB + blockchain write) or online-only? +6) How many nodes / peers should the harness assume by default? + - devnet 4 nodes is the baseline; do you want N configurable? +7) Do you want the harness to run fully inside docker (recommended) or from host as well? + +--- + +## Answers captured (this chat) + +These answers are recorded here so the harness can be implemented deterministically: + +1) KPI focus +- Balanced, but prioritize **TPS** (responsiveness still tracked via latency percentiles). + +2) Success metric target +- No fixed target yet; first produce baseline results, then set thresholds based on observed curves. + +3) Payload sizes +- Define **multiple tests and payload sizes per transaction type** (a small test matrix), rather than a single “message size”. + +4) “Delivered” definition +- Varies by test; choose what is appropriate per scenario (e.g., WS receive vs app-level ACK vs persistence). + +5) Offline path +- Include **both online + offline** paths (offline = DB + blockchain write path where applicable). + +6) Scale +- N configurable, **default 4** (devnet baseline). + +7) Execution environment +- Prefer running fully **inside Docker** (internal network) for stable measurements. + +General sequencing note: +- Start with core/native transaction types (e.g., **transfer**) and baseline RPC/chain paths first. +- More complex protocols/features (e.g., advanced messaging modes) come later. + +--- + +## IM WS (online) loadgen — implemented + +### Root cause (why `im_online` was 0 ok / 100% timeouts) + +The IM signaling server’s online path calls `storeMessageOnBlockchain(...)` on every message. +In devnet, it was throwing: +- `[Signaling Server] Private key not available for message signing` + +Reason: it attempted to read `getSharedState.identity.ed25519.privateKey`, which isn’t populated in the devnet runtime (even though the node can still sign via the active `ucrypto` identity / `getSharedState.keypair`). + +### Fix + +`src/features/InstantMessagingProtocol/signalingServer/signalingServer.ts` now: +- signs the IM tx with `ucrypto.sign(getSharedState.signingAlgorithm, tx.hash)` +- stores a normal `ISignature` `{ type, data }` +- uses the node’s `getSharedState.publicKeyHex` as the tx `from` signer (and records the peer `senderId` in tx `data`) + +### Scenarios + +- `SCENARIO=im_online` (steady-state latency + ok TPS) +- `SCENARIO=im_online_ramp` (sweep `IM_PAIRS` over `RAMP_PAIRS`) + +Key env: +- `IM_PAIRS` (default: 1) +- `INFLIGHT_PER_SENDER` (default: 1) +- `IM_MESSAGE_BYTES` (default: 128) +- `RATE_LIMIT_RPS` (default: 0 = no cap) +- `IM_LOG_EVENTS` (default: false; when true writes `im_online.log.jsonl`) + +### Baseline results (devnet, 4 nodes) + +Run: `im-online-fix1-20260226-154137` +- `IM_PAIRS=2`, `INFLIGHT_PER_SENDER=10`, `IM_MESSAGE_BYTES=64`, `DURATION_SEC=10` +- ok TPS: ~147.9 +- latency p50/p95/p99: ~105ms / ~196ms / ~657ms + +Ramp: `im-online-ramp-fix1-20260226-154224` (`INFLIGHT_PER_SENDER=20`, `IM_MESSAGE_BYTES=64`, step=8s) +- best ok TPS: ~262.9 @ `IM_PAIRS=4` (p95 ~395ms) + +--- + +## Token consensus consistency scenario (cross-node) + +New scenario: `SCENARIO=token_consensus_consistency` + +What it does: +- bootstraps a fresh token (unless `TOKEN_BOOTSTRAP=false`) +- executes a small token tx bundle (transfer + mint + burn) on one node +- waits for **N consensus rounds** across all nodes (`CONSENSUS_ROUNDS`, default 1) using `nodeCall getLastBlockNumber` +- polls all nodes until token snapshots match (`token.get` + `token.getBalance`) and asserts expected deltas + +Example run: +- `better_testing/runs/token-consensus-20260227-151903/token_consensus_consistency.summary.json` + +--- + +## Token read/query coverage scenario (cross-node) + +New scenario: `SCENARIO=token_query_coverage` + +What it does: +- bootstraps + distributes a token to up to 4 devnet wallets (as configured by `WALLET_FILES`) +- asserts read APIs behave consistently across *all* nodes: + - `token.get` (metadata/state) + - `token.getBalance` (for each wallet) + - `token.getHolderPointers` (presence matches balance>0) + - `token.callView` returns `NO_SCRIPT` when `hasScript=false` + - `token.get` returns 404 for a missing token address +- also runs a `waitForCrossNodeTokenConsistency` snapshot convergence poll + +Example run: +- `better_testing/runs/token-query-20260227-152442/token_query_coverage.summary.json` + +--- + +## Token ACL matrix scenario (grant/revoke + cross-node) + +New scenario: `SCENARIO=token_acl_matrix` + +What it does: +- bootstraps + distributes a token +- asserts unauthorized mint is rejected (no state change) +- owner grants `canMint` to a grantee, waits consensus, asserts ACL entry is present +- grantee mints successfully, waits consensus, asserts supply/balances update +- owner revokes `canMint`, waits consensus, asserts ACL entry removed +- asserts mint is rejected again +- asserts non-owner cannot grant permissions +- polls for cross-node convergence (`token.get` + `token.getBalance`) + +Example run: +- `better_testing/runs/token-acl-matrix-20260227-145423/token_acl_matrix.summary.json` + +Note: +- `@kynesyslabs/demosdk/websdk` appears to share wallet state across `Demos` instances inside a single process. For multi-wallet scenarios, prefer `withDemosWallet(...)` (sequential connections) rather than keeping multiple `Demos` objects alive at once. + +--- + +## Token edge-case scenario (rejects + invariants) + +New scenario: `SCENARIO=token_edge_cases` + +What it does: +- bootstraps + distributes a token +- asserts deterministic rejects: + - transfer/mint/burn with amount `0` + - transfer > balance + - burn > balance + - burn-from-other without `canBurn` + - mint without `canMint` +- asserts `totalSupply` + balances are unchanged after the rejected txs +- also asserts `token.get` returns non-200 for a missing token address + +Example run: +- `better_testing/runs/token-edge-cases-20260227-150320/token_edge_cases.summary.json` + +--- + +## Token ACL canBurn matrix scenario (burn semantics + grant/revoke) + +New scenario: `SCENARIO=token_acl_burn_matrix` + +What it does: +- bootstraps + distributes a token to (owner, grantee, outsider) +- asserts **self-burn works without `canBurn`** (by design: only burn-from-other requires `canBurn`) +- asserts burn-from-other is rejected without `canBurn` +- owner grants `canBurn`, waits consensus, asserts ACL entry is present +- grantee burns from owner successfully, waits consensus, asserts supply/balances update +- owner revokes `canBurn`, waits consensus, asserts ACL entry removed +- asserts burn-from-other is rejected again +- asserts non-owner cannot grant permissions +- polls for cross-node convergence (`token.get` + `token.getBalance`) + +Example run: +- (run after adding the scenario; output is `token_acl_burn_matrix.summary.json`) + +--- + +## Token ACL pause/unpause matrix scenario (paused blocks writes) + +New scenario: `SCENARIO=token_acl_pause_matrix` + +What it does: +- bootstraps + distributes a token to (owner, grantee, outsider) +- asserts non-owner cannot `pause`/`unpause` (expects `No pause permission`) +- owner pauses token, waits consensus, asserts `accessControl.paused=true` +- while paused, asserts `transfer`/`mint`/`burn` are rejected with `Token is paused` and state does not change +- owner unpauses token, waits consensus, asserts `accessControl.paused=false` +- asserts a post-unpause transfer applies +- polls for cross-node convergence (`token.get` + `token.getBalance`) + +Example run: +- (run after adding the scenario; output is `token_acl_pause_matrix.summary.json`) + +--- + +## Token ACL transferOwnership matrix scenario (owner rotation) + +New scenario: `SCENARIO=token_acl_transfer_ownership_matrix` + +What it does: +- bootstraps + distributes a token to (current owner, new owner, outsider) +- asserts outsider cannot `transferOwnership` (`No ownership transfer permission`) +- owner transfers ownership to `newOwner`, waits consensus, asserts `accessControl.owner` updates +- asserts **old owner loses implicit permissions**: + - pause rejected (`No pause permission`) + - ACL modification rejected (`No ACL modification permission`) +- asserts new owner can pause/unpause (implicit permissions after ownership rotation) +- polls all nodes until they agree on `{ owner, paused }` + +Example run: +- (run after adding the scenario; output is `token_acl_transfer_ownership_matrix.summary.json`) + +--- + +## Token ACL multi-permission matrix scenario (compound perms + partial revoke) + +New scenario: `SCENARIO=token_acl_multi_permission_matrix` + +What it does: +- bootstraps + distributes a token to (owner, grantee, outsider, target) +- asserts grantee is rejected for: `mint`, burn-from-other, `pause`, ACL modification, `transferOwnership` +- owner grants multiple permissions to grantee (`canMint`, `canBurn`, `canPause`, `canModifyACL`, `canTransferOwnership`) +- grantee executes: mint-to-self, burn-from-owner, pause/unpause, grants `canMint` to outsider, transfers ownership to target +- new owner revokes a subset (`canModifyACL`, `canPause`) from grantee and asserts those ops are rejected again +- cross-node convergence checks: + - balances/supply snapshot convergence (`token.get` + `token.getBalance`) + - accessControl convergence (`token.get` accessControl subset normalized) + +Example run: +- `better_testing/runs/token-acl-multi-perm-20260227-173525/token_acl_multi_permission_matrix.summary.json` + +--- + +## Token ACL updateACL compatibility scenario (updateACL grant/revoke) + +New scenario: `SCENARIO=token_acl_updateacl_compat` + +What it does: +- bootstraps + distributes a token +- exercises `updateACL` (grant/revoke) and compares behavior to `grantPermission`/`revokePermission` semantics: + - unauthorized updateACL rejected + - owner updateACL grant makes permission effective + - owner updateACL revoke removes effectiveness +- includes consensus/apply polling + cross-node convergence checks + +Example run: +- `better_testing/runs/token-acl-updateacl-compat-20260227-174121/token_acl_updateacl_compat.summary.json` + +--- + +## Token scripting smoke scenario (upgradeScript + callView) + +New scenario: `SCENARIO=token_script_smoke` + +What it does: +- bootstraps a token (unless `TOKEN_BOOTSTRAP=false`) +- asserts `token.callView` returns `NO_SCRIPT` before a script is installed +- upgrades the token script via `upgradeScript` +- polls until `token.get` shows `hasScript=true` and expected `script.codeHash` +- calls `token.callView` on **all nodes** and asserts a stable value + +Example run: +- (run after adding the scenario; output is `token_script_smoke.summary.json`) + +--- + +## Token scripting hooks correctness scenario (transfer/mint/burn) + +New scenario: `SCENARIO=token_script_hooks_correctness` + +What it does: +- bootstraps + distributes a token to (owner, other) +- installs a script with `before*/after*` hooks that increment counters in `customState` +- executes: + - `transfer` (owner -> other) + - `mint` (owner -> other) + - `burn` (other burns self) +- polls until `customState` counters match expected values +- asserts balances/supply deltas match native semantics (script does not alter mutations) +- asserts all nodes converge on the expected `customState` counters + +Example run: +- (run after adding the scenario; output is `token_script_hooks_correctness.summary.json`) + +--- + +## Token scripting rejects/invariants scenario (script-enforced reject) + +New scenario: `SCENARIO=token_script_rejects` + +What it does: +- bootstraps + distributes a token to (owner, other) +- installs a script with `beforeTransfer` that rejects transfers above a threshold (`SCRIPT_REJECT_THRESHOLD`, default 1) +- attempts an oversized transfer and asserts: + - request is rejected (error contains `rejected`) + - `totalSupply`, balances, and `customState` are unchanged after consensus + - cross-node convergence (balances/supply + `customState`) +- then performs a valid transfer at the threshold and asserts it applies + +Example run: +- (run after adding the scenario; output is `token_script_rejects.summary.json`) + +--- + +## Token scripting perf ramp scenario (scripted transfer) + +New scenarios: +- `SCENARIO=token_script_transfer` (single-step loadgen) +- `SCENARIO=token_script_transfer_ramp` (multi-step ramp) + +What it does: +- bootstraps + distributes a token (unless reused via `TOKEN_ADDRESS` / `TOKEN_BOOTSTRAP=false`) +- installs a token script (once) that runs `beforeTransfer`/`afterTransfer` hooks +- runs the same transfer loadgen loop as `token_transfer`, but with hook execution overhead +- emits: + - `token_script_transfer.summary.json` + - `token_script_transfer.timeseries.jsonl` + - `token_script_transfer_ramp.summary.json` (for ramp mode) + +Important env vars: +- `RAMP_CONCURRENCY=4,8,16` or `RAMP_INFLIGHT_PER_WALLET=1,2,4` +- `STEP_DURATION_SEC=15` / `COOLDOWN_SEC=3` +- `SCRIPT_WORK_ITERS=0` (CPU loop iterations executed inside each hook) +- `SCRIPT_SET_STORAGE=false` (if `true`, each hook writes counters into `customState`) +- `TOKEN_SCRIPT_UPGRADE=true` (set to `false` on reuse steps; ramp does this automatically) + +Example run: +- `cd devnet && RUN_ID=token-script-transfer-ramp-$(date +%Y%m%d-%H%M%S) docker compose -f docker-compose.yml -f ../better_testing/docker-compose.perf.yml run --rm -e SCENARIO=token_script_transfer_ramp -e RAMP_CONCURRENCY=4,8,16 -e STEP_DURATION_SEC=15 -e SCRIPT_WORK_ITERS=0 loadgen` + +Notes from runs: +- `RUN_ID=token-script-transfer-ramp-20260228-171640` (concurrency ramp): best `okTps≈26.75` but note effective concurrency is capped by available funded wallets. +- `RUN_ID=token-script-transfer-inflight-ramp-20260228-172100` (inflight ramp): best `okTps≈61.93` at `INFLIGHT_PER_WALLET=8`, but `INFLIGHT_PER_WALLET=16` collapses latency (`p50≈2.3s`, `p95≈9.7s`). +- `RUN_ID=token-script-transfer-storage-ramp-20260301-090210` (`SCRIPT_SET_STORAGE=true`, forced script upgrade): best `okTps≈58.12` at `INFLIGHT_PER_WALLET=16`, but latency is very high (`p50≈1.05s`, `p95≈1.45s`). + +⚠️ Important observation (potential bug): +- For `RUN_ID=token-script-transfer-storage-ramp-20260301-090210`, the per-step `postRun.settle.ok` is `false` across ramp steps, and the token balances can diverge across nodes even when `getLastBlockHash` and `getLastBlockNumber` match. +- Example snapshot (token `0x463c...`): + - `token.customState.beforeTransferCount/afterTransferCount` match across nodes + - but `token.getBalance` values differ for the same addresses across nodes + - additionally, summing `token.state.balances` could exceed `totalSupply` (self-transfer mint bug) + +Quick repro checks: +- last block: `curl -s -X POST -H 'content-type: application/json' --data '{\"method\":\"nodeCall\",\"params\":[{\"message\":\"getLastBlockHash\",\"data\":{},\"muid\":\"dbg\"}]}' http://127.0.0.1:53551/ | jq -r '.response'` +- token balances: `curl -s -X POST -H 'content-type: application/json' --data '{\"method\":\"nodeCall\",\"params\":[{\"message\":\"token.get\",\"data\":{\"tokenAddress\":\"0x463c8d0b0360518757a5d540b1fd31589fb33a3b32b6d132d77e74af1f0ddff5\"},\"muid\":\"dbg\"}]}' http://127.0.0.1:53551/ | jq '.response.state.balances'` + +Fix status (2026-03-01): +- Self-transfers now behave as a balance no-op (prevents minting). +- Consensus now validates token edits in `simulate=true`, but persists token edits deterministically at block finalization using the finalized `ordered_transactions` list (avoids token-table divergence when shard members have incomplete mempools at forge time). +- Loadgen recipient selection now normalizes addresses when avoiding self-send. + +--- + +## Token suite sanity pass (2026-03-01) + +Ran a quick “confidence sweep” on devnet (all green): +- `RUN_ID=token-edge-20260301-095600` (`SCENARIO=token_edge_cases`): includes explicit self-transfer no-op invariant (tx accepted, state unchanged). +- `RUN_ID=token-acl-smoke-20260301-100120` (`SCENARIO=token_acl_smoke`): fixed a loadgen crash (`connectWallet` missing) and verified attacker mint/burn attempts do not mutate state. +- `RUN_ID=token-script-storage-soak-20260301-100200` (`SCENARIO=token_script_transfer_ramp`, `SCRIPT_SET_STORAGE=true`, `STEP_DURATION_SEC=20`): + - `INFLIGHT_PER_WALLET=12`: `okTps≈69.55`, `p95≈884ms`, `postRun.settle.ok=true`, `holderPointers.ok=true`. + +Note: `token_query_coverage` used to emit very large stdout due to embedding full `token.getHolderPointers` token lists; it now summarizes holder pointers as `(tokenCount, hasPointer)` to keep output manageable. + +--- + +## Agent-invokable scripts + +Helpers (host-side): +- `better_testing/scripts/run-scenario.sh` (single scenario runner; supports `--build`, deterministic `RUN_ID`, and extra `--env KEY=VALUE`) +- `better_testing/scripts/token-perf-baseline.sh` (runs `token_transfer_ramp`, `token_mint_ramp`, `token_burn_ramp` sequentially) + +Perf knee heuristic (for ramp summaries): +- track `okTps` vs `latencyMs.p95` across ramp steps; the “knee” is typically the last step where `okTps` is still increasing meaningfully before latency starts climbing sharply or errors appear. diff --git a/better_testing/runs/.gitkeep b/better_testing/runs/.gitkeep new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/better_testing/runs/.gitkeep @@ -0,0 +1 @@ + diff --git a/better_testing/runs/transfer-ramp-20260223-151219/transfer.summary.json b/better_testing/runs/transfer-ramp-20260223-151219/transfer.summary.json new file mode 100644 index 000000000..f87a38e22 --- /dev/null +++ b/better_testing/runs/transfer-ramp-20260223-151219/transfer.summary.json @@ -0,0 +1,54 @@ +{ + "kind": "transfer_loadgen_summary", + "config": { + "targets": [ + "http://node-1:53551/", + "http://node-2:53552/", + "http://node-3:53553/", + "http://node-4:53554/" + ], + "durationSec": 10, + "wallets": [ + "cheese ecology rich duck media illness month reform abstract success powder execute", + "hybrid also alcohol cheap onion vital plunge avoid vital unknown sadness flag", + "creek oven come uphold return corn anchor invite worry crunch powder orange", + "guess prepare thing joke jazz cactus crucial picnic find lonely leave crack" + ], + "amount": 1, + "sampleLimit": 200000, + "inflightPerWallet": 4, + "avoidSelfRecipient": true, + "emitTimeseries": true, + "concurrency": 4, + "recipients": [ + "0x8db33f19486774dea73efbfed1175fb25fcf5a2682e1f55271207dc01670bb19", + "0x7bee59666b7ef18f648df18c4ed3677a79b30aaa6cf66dc6ab2818fd4be2dcfb", + "0xd98eabad3b7e6384355d313130314263278d5a7a7f5ab665881c54711159e760", + "0x71b0c2af6fed129df6c25dbf2b7a0d3c6b414df64980f513997be86200ef5e0e" + ] + }, + "elapsedSec": 10.283, + "totals": { + "startedAtMs": 1771856002186, + "endedAtMs": 1771856012469, + "total": 494, + "ok": 494, + "confirmError": 0, + "broadcastError": 0, + "unexpectedError": 0 + }, + "tps": 48.04045512010114, + "latencyMs": { + "sampleCount": 494, + "p50": 322.74709399999847, + "p95": 440.45602599999984, + "p99": 488.23179399999935 + }, + "timestamp": "2026-02-23T14:13:32.469Z", + "artifacts": { + "runId": "transfer-ramp-20260223-151219", + "runDir": "/runs/transfer-ramp-20260223-151219", + "summaryPath": "/runs/transfer-ramp-20260223-151219/transfer.summary.json", + "timeseriesPath": "/runs/transfer-ramp-20260223-151219/transfer.timeseries.jsonl" + } +} diff --git a/better_testing/runs/transfer-ramp-20260223-151219/transfer.timeseries.jsonl b/better_testing/runs/transfer-ramp-20260223-151219/transfer.timeseries.jsonl new file mode 100644 index 000000000..b06089c90 --- /dev/null +++ b/better_testing/runs/transfer-ramp-20260223-151219/transfer.timeseries.jsonl @@ -0,0 +1,40 @@ +{"tSec":1.002,"ok":0,"total":0,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":0,"latencyMs":{"sampleCount":0,"p50":null,"p95":null,"p99":null},"timestamp":"2026-02-23T14:12:46.704Z"} +{"tSec":2.005,"ok":0,"total":0,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":0,"latencyMs":{"sampleCount":0,"p50":null,"p95":null,"p99":null},"timestamp":"2026-02-23T14:12:47.706Z"} +{"tSec":3.005,"ok":0,"total":0,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":0,"latencyMs":{"sampleCount":0,"p50":null,"p95":null,"p99":null},"timestamp":"2026-02-23T14:12:48.706Z"} +{"tSec":4.007,"ok":0,"total":0,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":0,"latencyMs":{"sampleCount":0,"p50":null,"p95":null,"p99":null},"timestamp":"2026-02-23T14:12:49.708Z"} +{"tSec":5.009,"ok":0,"total":0,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":0,"latencyMs":{"sampleCount":0,"p50":null,"p95":null,"p99":null},"timestamp":"2026-02-23T14:12:50.710Z"} +{"tSec":6.011,"ok":0,"total":0,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":0,"latencyMs":{"sampleCount":0,"p50":null,"p95":null,"p99":null},"timestamp":"2026-02-23T14:12:51.712Z"} +{"tSec":7.013,"ok":5,"total":9,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":4.990019960079841,"latencyMs":{"sampleCount":5,"p50":295.93054200000006,"p95":302.63597799999934,"p99":302.63597799999934},"timestamp":"2026-02-23T14:12:52.714Z"} +{"tSec":8.017,"ok":17,"total":17,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":16.932270916334662,"latencyMs":{"sampleCount":22,"p50":243.44919000000027,"p95":295.93054200000006,"p99":302.63597799999934},"timestamp":"2026-02-23T14:12:53.718Z"} +{"tSec":9.017,"ok":13,"total":13,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":13,"latencyMs":{"sampleCount":35,"p50":250.81939899999998,"p95":327.6099150000009,"p99":389.87455600000067},"timestamp":"2026-02-23T14:12:54.718Z"} +{"tSec":10.017,"ok":17,"total":16,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":17,"latencyMs":{"sampleCount":52,"p50":250.17789900000025,"p95":344.9431629999999,"p99":389.87455600000067},"timestamp":"2026-02-23T14:12:55.718Z"} +{"tSec":1.002,"ok":23,"total":31,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":22.954091816367267,"latencyMs":{"sampleCount":23,"p50":313.830328,"p95":383.45782599999984,"p99":384.85827600000084},"timestamp":"2026-02-23T14:12:58.795Z"} +{"tSec":2.012,"ok":29,"total":29,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":28.712871287128714,"latencyMs":{"sampleCount":52,"p50":268.1305049999992,"p95":384.85827600000084,"p99":424.6007549999995},"timestamp":"2026-02-23T14:12:59.805Z"} +{"tSec":3.014,"ok":31,"total":31,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":30.93812375249501,"latencyMs":{"sampleCount":83,"p50":264.6433079999988,"p95":384.85827600000084,"p99":441.686737},"timestamp":"2026-02-23T14:13:00.808Z"} +{"tSec":4.016,"ok":34,"total":34,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":33.93213572854292,"latencyMs":{"sampleCount":117,"p50":252.41597000000002,"p95":384.44120999999905,"p99":424.6007549999995},"timestamp":"2026-02-23T14:13:01.809Z"} +{"tSec":5.018,"ok":35,"total":35,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":34.930139720558884,"latencyMs":{"sampleCount":152,"p50":247.30985099999998,"p95":376.82133000000067,"p99":424.6007549999995},"timestamp":"2026-02-23T14:13:02.811Z"} +{"tSec":6.018,"ok":37,"total":37,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":37,"latencyMs":{"sampleCount":189,"p50":242.4120240000011,"p95":368.3057809999991,"p99":424.6007549999995},"timestamp":"2026-02-23T14:13:03.811Z"} +{"tSec":7.018,"ok":18,"total":18,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":18,"latencyMs":{"sampleCount":207,"p50":242.84019099999932,"p95":367.21143699999993,"p99":402.615154000001},"timestamp":"2026-02-23T14:13:04.811Z"} +{"tSec":8.019,"ok":8,"total":8,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":7.992007992007993,"latencyMs":{"sampleCount":215,"p50":244.11912299999858,"p95":384.85827600000084,"p99":1032.639476999997},"timestamp":"2026-02-23T14:13:05.812Z"} +{"tSec":9.024,"ok":36,"total":36,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":35.820895522388064,"latencyMs":{"sampleCount":251,"p50":242.4120240000011,"p95":470.8947990000015,"p99":1136.939873000003},"timestamp":"2026-02-23T14:13:06.817Z"} +{"tSec":10.025,"ok":20,"total":20,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":19.980019980019982,"latencyMs":{"sampleCount":271,"p50":243.60069600000134,"p95":463.68921000000046,"p99":1136.939873000003},"timestamp":"2026-02-23T14:13:07.818Z"} +{"tSec":1.001,"ok":38,"total":54,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":37.96203796203797,"latencyMs":{"sampleCount":38,"p50":313.92357399999673,"p95":458.2234729999982,"p99":468.20241199999873},"timestamp":"2026-02-23T14:13:10.897Z"} +{"tSec":2.002,"ok":34,"total":34,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":33.96603396603397,"latencyMs":{"sampleCount":72,"p50":317.2581429999991,"p95":738.9458249999989,"p99":869.7327990000013},"timestamp":"2026-02-23T14:13:11.898Z"} +{"tSec":3.002,"ok":54,"total":54,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":54,"latencyMs":{"sampleCount":126,"p50":300.3758149999994,"p95":612.6033409999982,"p99":867.7809480000033},"timestamp":"2026-02-23T14:13:12.898Z"} +{"tSec":4.005,"ok":60,"total":60,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":59.82053838484547,"latencyMs":{"sampleCount":186,"p50":288.4999889999999,"p95":596.4531830000014,"p99":867.7809480000033},"timestamp":"2026-02-23T14:13:13.901Z"} +{"tSec":5.006,"ok":31,"total":31,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":30.96903096903097,"latencyMs":{"sampleCount":217,"p50":286.1020669999998,"p95":587.8974989999988,"p99":855.7749970000004},"timestamp":"2026-02-23T14:13:14.902Z"} +{"tSec":6.008,"ok":49,"total":49,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":48.902195608782435,"latencyMs":{"sampleCount":266,"p50":294.13264100000015,"p95":768.019562999998,"p99":1028.728702999997},"timestamp":"2026-02-23T14:13:15.904Z"} +{"tSec":7.014,"ok":55,"total":55,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":54.67196819085487,"latencyMs":{"sampleCount":321,"p50":291.3483610000003,"p95":738.9458249999989,"p99":976.1733409999979},"timestamp":"2026-02-23T14:13:16.910Z"} +{"tSec":8.021,"ok":46,"total":46,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":45.680238331678254,"latencyMs":{"sampleCount":367,"p50":300.3758149999994,"p95":699.7142389999972,"p99":976.1733409999979},"timestamp":"2026-02-23T14:13:17.917Z"} +{"tSec":9.022,"ok":52,"total":52,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":51.948051948051955,"latencyMs":{"sampleCount":419,"p50":296.5368759999983,"p95":697.7460780000001,"p99":942.3888480000023},"timestamp":"2026-02-23T14:13:18.918Z"} +{"tSec":10.023,"ok":49,"total":48,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":48.95104895104895,"latencyMs":{"sampleCount":468,"p50":301.0770780000021,"p95":612.2305779999988,"p99":942.3888480000023},"timestamp":"2026-02-23T14:13:19.919Z"} +{"tSec":1,"ok":40,"total":56,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":40,"latencyMs":{"sampleCount":40,"p50":315.213536999996,"p95":416.7578649999996,"p99":417.084941000001},"timestamp":"2026-02-23T14:13:23.186Z"} +{"tSec":2.001,"ok":51,"total":51,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":50.94905094905096,"latencyMs":{"sampleCount":91,"p50":302.15199500000017,"p95":417.084941000001,"p99":440.55694600000425},"timestamp":"2026-02-23T14:13:24.187Z"} +{"tSec":3.003,"ok":50,"total":50,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":49.9001996007984,"latencyMs":{"sampleCount":141,"p50":302.15199500000017,"p95":453.12290299999586,"p99":469.799583},"timestamp":"2026-02-23T14:13:25.189Z"} +{"tSec":4.005,"ok":52,"total":52,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":51.896207584830336,"latencyMs":{"sampleCount":193,"p50":308.7444269999978,"p95":438.75431599999865,"p99":469.799583},"timestamp":"2026-02-23T14:13:26.191Z"} +{"tSec":5.012,"ok":49,"total":49,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":48.65938430983119,"latencyMs":{"sampleCount":242,"p50":314.47752899999614,"p95":430.6196760000021,"p99":466.6112409999987},"timestamp":"2026-02-23T14:13:27.198Z"} +{"tSec":6.014,"ok":46,"total":46,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":45.908183632734534,"latencyMs":{"sampleCount":288,"p50":315.213536999996,"p95":440.55694600000425,"p99":469.799583},"timestamp":"2026-02-23T14:13:28.200Z"} +{"tSec":7.014,"ok":48,"total":48,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":48,"latencyMs":{"sampleCount":336,"p50":319.20461400000204,"p95":440.64183599999524,"p99":478.9480459999977},"timestamp":"2026-02-23T14:13:29.201Z"} +{"tSec":8.014,"ok":46,"total":46,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":46,"latencyMs":{"sampleCount":382,"p50":320.4454829999959,"p95":438.75431599999865,"p99":478.9480459999977},"timestamp":"2026-02-23T14:13:30.200Z"} +{"tSec":9.016,"ok":47,"total":47,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":46.9061876247505,"latencyMs":{"sampleCount":429,"p50":322.96272099999624,"p95":440.64183599999524,"p99":488.23179399999935},"timestamp":"2026-02-23T14:13:31.202Z"} +{"tSec":10.016,"ok":49,"total":49,"confirmError":0,"broadcastError":0,"unexpectedError":0,"tpsOk":49,"latencyMs":{"sampleCount":478,"p50":323.4355429999996,"p95":440.55694600000425,"p99":488.23179399999935},"timestamp":"2026-02-23T14:13:32.202Z"} diff --git a/better_testing/scripts/README.md b/better_testing/scripts/README.md new file mode 100644 index 000000000..ce4ec018a --- /dev/null +++ b/better_testing/scripts/README.md @@ -0,0 +1,26 @@ +# better_testing/scripts + +Small host-side helpers to run `better_testing/loadgen` scenarios against the devnet Docker network. + +Notes: +- The devnet compose files assume you run from `devnet/` so identity mounts resolve correctly. +- If you change `better_testing/loadgen/src/**`, rebuild the image with `--build` (slow). + +## Run a scenario + +```bash +./better_testing/scripts/run-scenario.sh token_edge_cases +./better_testing/scripts/run-scenario.sh token_acl_matrix --build +./better_testing/scripts/run-scenario.sh token_transfer_ramp --env RAMP_CONCURRENCY=1,2,4,8 --env STEP_DURATION_SEC=15 +``` + +Artifacts land in `better_testing/runs/$RUN_ID/`. + +## Token perf baseline + +```bash +./better_testing/scripts/token-perf-baseline.sh --build +./better_testing/scripts/token-perf-baseline.sh --with-pointers +``` + +By default, the baseline runner sets `POST_RUN_HOLDER_POINTER_CHECK=false` to reduce output/noise; use `--with-pointers` to re-enable it. diff --git a/better_testing/scripts/analyze-token-observe.ts b/better_testing/scripts/analyze-token-observe.ts new file mode 100755 index 000000000..59b65ab5a --- /dev/null +++ b/better_testing/scripts/analyze-token-observe.ts @@ -0,0 +1,146 @@ +#!/usr/bin/env bun +import { readFileSync } from "node:fs" + +type Point = { + ticks?: number + timestamp?: string + crossNode?: { + stateHashes?: Record + hookCountsHashes?: Record + mempoolCounts?: Record + blockNumbers?: Record + blockHashes?: Record + } +} + +function usage(): never { + // eslint-disable-next-line no-console + console.error( + [ + "Usage:", + " analyze-token-observe.ts [--tail ]", + "", + "Checks:", + " - For any tick where hashes are non-null, they never diverge across nodes.", + " - The last N ticks converge (all nodes return non-null hashes and match).", + ].join("\n"), + ) + process.exit(2) +} + +function parseArgs(argv: string[]) { + const args = argv.slice(2) + if (args.length === 0) usage() + const path = args[0] + if (!path || path.startsWith("-")) usage() + let tail = 5 + for (let i = 1; i < args.length; i++) { + const a = args[i] + if (a === "--tail") { + const v = Number.parseInt(args[i + 1] ?? "", 10) + if (!Number.isFinite(v) || v <= 0) usage() + tail = v + i++ + continue + } + usage() + } + return { path, tail } +} + +function nonNull(v: T | null | undefined): v is T { + return v !== null && v !== undefined +} + +function allEqual(values: string[]): boolean { + if (values.length <= 1) return true + const first = values[0]! + return values.every(v => v === first) +} + +function assertNoDivergence(points: Point[], field: "stateHashes" | "hookCountsHashes") { + const divergences: Array<{ tick: number; timestamp?: string; values: Record }> = [] + let nonNullTicks = 0 + for (let i = 0; i < points.length; i++) { + const p = points[i] ?? {} + const values = (p.crossNode?.[field] ?? {}) as Record + const nonNullValues = Object.values(values).filter(nonNull) + if (nonNullValues.length > 0) nonNullTicks++ + const uniq = Array.from(new Set(nonNullValues)) + if (uniq.length > 1) { + divergences.push({ tick: p.ticks ?? i + 1, timestamp: p.timestamp, values }) + if (divergences.length >= 3) break + } + } + return { divergences, nonNullTicks } +} + +function assertTailConverges(points: Point[], tail: number, field: "stateHashes" | "hookCountsHashes") { + if (points.length === 0) return { ok: false, reason: "no points" } + const slice = points.slice(Math.max(0, points.length - tail)) + for (const p of slice) { + const values = (p.crossNode?.[field] ?? {}) as Record + const entries = Object.entries(values) + if (entries.length === 0) return { ok: false, reason: `${field}: missing per-node map` } + const nonNullValues = entries.map(([, v]) => v).filter(nonNull) + if (nonNullValues.length !== entries.length) { + return { ok: false, reason: `${field}: tail contains null (inFlux)`, tick: p.ticks, timestamp: p.timestamp, values } + } + if (!allEqual(nonNullValues)) { + return { ok: false, reason: `${field}: tail diverged`, tick: p.ticks, timestamp: p.timestamp, values } + } + } + return { ok: true as const } +} + +function main() { + const { path, tail } = parseArgs(process.argv) + const raw = readFileSync(path, "utf8") + const lines = raw + .split("\n") + .map(l => l.trim()) + .filter(Boolean) + const points: Point[] = [] + for (const line of lines) { + try { + points.push(JSON.parse(line)) + } catch { + // eslint-disable-next-line no-console + console.error(`Invalid JSONL line in ${path}`) + process.exit(1) + } + } + + const state = assertNoDivergence(points, "stateHashes") + const hooks = assertNoDivergence(points, "hookCountsHashes") + + const stateTail = assertTailConverges(points, tail, "stateHashes") + const hooksTail = assertTailConverges(points, tail, "hookCountsHashes") + + const ok = + state.divergences.length === 0 && + hooks.divergences.length === 0 && + stateTail.ok && + hooksTail.ok + + const summary = { + ok, + points: points.length, + nonNullTicks: { stateHashes: state.nonNullTicks, hookCountsHashes: hooks.nonNullTicks }, + tail, + failures: { + state: state.divergences, + hooks: hooks.divergences, + stateTail: stateTail.ok ? null : stateTail, + hooksTail: hooksTail.ok ? null : hooksTail, + }, + } + + // eslint-disable-next-line no-console + console.log(JSON.stringify({ token_observe_analysis: summary }, null, 2)) + + if (!ok) process.exit(1) +} + +main() + diff --git a/better_testing/scripts/run-chaos-token-script-transfer.sh b/better_testing/scripts/run-chaos-token-script-transfer.sh new file mode 100755 index 000000000..1ed71c90d --- /dev/null +++ b/better_testing/scripts/run-chaos-token-script-transfer.sh @@ -0,0 +1,222 @@ +#!/usr/bin/env bash +set -euo pipefail + +usage() { + cat <<'USAGE' +Usage: + run-chaos-token-script-transfer.sh [--reset] [--build] [--node ] [--delay-sec ] [--duration-sec ] [--quiet|--verbose] [--env KEY=VALUE ...] + +What it does: + (optional) --reset: tears down devnet volumes/containers (fresh state) + 1) Runs SCENARIO=token_script_transfer for a fixed duration (POST_RUN checks disabled) + 2) Restarts one follower node mid-run (default: node-3) + 3) Runs SCENARIO=token_settle_check against the token produced in step 1 (balances + holder pointers + script counters) + +Examples: + run-chaos-token-script-transfer.sh --reset --build + run-chaos-token-script-transfer.sh --node node-2 --delay-sec 8 --duration-sec 45 --env SCRIPT_SET_STORAGE=true +USAGE +} + +if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then + usage + exit 0 +fi + +BUILD=0 +RESET=0 +QUIET=true +NODE_SERVICE="node-3" +DELAY_SEC=10 +DURATION_SEC=60 +RUN_ID="" +EXTRA_ENV=() + +while [[ $# -gt 0 ]]; do + case "$1" in + --reset) + RESET=1 + shift + ;; + --build) + BUILD=1 + shift + ;; + --quiet) + QUIET=true + shift + ;; + --verbose) + QUIET=false + shift + ;; + --node) + NODE_SERVICE="${2:-}" + shift 2 + ;; + --delay-sec) + DELAY_SEC="${2:-}" + shift 2 + ;; + --duration-sec) + DURATION_SEC="${2:-}" + shift 2 + ;; + --run-id) + RUN_ID="${2:-}" + shift 2 + ;; + --env) + EXTRA_ENV+=("${2:-}") + shift 2 + ;; + *) + echo "Unknown argument: $1" >&2 + usage >&2 + exit 2 + ;; + esac +done + +if [[ -z "$RUN_ID" ]]; then + RUN_ID="token-script-transfer-chaos-$(date -u +%Y%m%d-%H%M%S)" +fi + +SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +ROOT_DIR="$(cd -- "$SCRIPT_DIR/../.." && pwd)" + +default_targets="http://node-1:53551,http://node-2:53552,http://node-3:53553,http://node-4:53554" +full_targets="${TARGETS:-$default_targets}" +node_url="" +case "$NODE_SERVICE" in + node-1) node_url="http://node-1:53551" ;; + node-2) node_url="http://node-2:53552" ;; + node-3) node_url="http://node-3:53553" ;; + node-4) node_url="http://node-4:53554" ;; + *) node_url="" ;; +esac + +# For the load phase, avoid sending requests to the node we're about to restart, +# otherwise any worker pinned to that target can fail hard during the restart. +load_targets="$full_targets" +if [[ -n "$node_url" ]]; then + load_targets="$(echo "$full_targets" | awk -v RS=',' -v ORS=',' -v drop="$node_url" ' + { + gsub(/[[:space:]]+/, "", $0); + if ($0 == drop || $0 == drop"/") next; + if (length($0)) print $0 + } + ' | sed 's/,$//')" +fi +if [[ -z "$load_targets" ]]; then + echo "Computed empty TARGETS for load phase (full_targets=$full_targets node_url=$node_url)" >&2 + exit 2 +fi + +pushd "$ROOT_DIR/devnet" >/dev/null + +if [[ "$RESET" -eq 1 ]]; then + echo "[chaos] resetting devnet (docker compose down -v)" + docker compose down -v + if [[ "$BUILD" -eq 1 ]]; then + docker compose build node-1 + fi + docker compose up -d +fi + +if [[ "$RESET" -eq 0 && "$BUILD" -eq 1 ]]; then + docker compose build node-1 + # Ensure running nodes pick up the rebuilt image. + docker compose up -d --force-recreate node-1 node-2 node-3 node-4 +fi + +loadgen_cmd=( + docker compose + -f docker-compose.yml + -f ../better_testing/docker-compose.perf.yml + run --rm --no-deps + -e RUN_ID="$RUN_ID" + -e SCENARIO="token_script_transfer" + -e QUIET="$QUIET" + -e TARGETS="$load_targets" + -e DURATION_SEC="$DURATION_SEC" + -e POST_RUN_SETTLE_CHECK="false" + -e POST_RUN_HOLDER_POINTER_CHECK="false" +) + +for kv in "${EXTRA_ENV[@]}"; do + if [[ -z "$kv" || "$kv" != *"="* ]]; then + echo "Invalid --env value (expected KEY=VALUE): $kv" >&2 + exit 2 + fi + loadgen_cmd+=(-e "$kv") +done + +loadgen_cmd+=(loadgen) + +set +e +"${loadgen_cmd[@]}" & +LOADGEN_PID=$! +set -e + +sleep "$DELAY_SEC" +echo "[chaos] restarting $NODE_SERVICE" +docker compose restart "$NODE_SERVICE" + +wait "$LOADGEN_PID" + +popd >/dev/null + +summary_path="$ROOT_DIR/better_testing/runs/$RUN_ID/token_script_transfer.summary.json" +if [[ ! -f "$summary_path" ]]; then + echo "Missing summary: $summary_path" >&2 + exit 1 +fi + +if command -v jq >/dev/null 2>&1; then + token_address="$(jq -r '.tokenAddress // empty' "$summary_path")" +else + token_address="$(python3 -c 'import json,sys; print(json.load(open(sys.argv[1])).get(\"tokenAddress\",\"\"))' "$summary_path")" +fi + +if [[ -z "$token_address" || "$token_address" == "null" ]]; then + echo "Could not read tokenAddress from $summary_path" >&2 + exit 1 +fi + +echo "[chaos] post-check token: $token_address" + +pushd "$ROOT_DIR/devnet" >/dev/null + +check_cmd=( + docker compose + -f docker-compose.yml + -f ../better_testing/docker-compose.perf.yml + run --rm --no-deps + -e RUN_ID="$RUN_ID" + -e SCENARIO="token_settle_check" + -e QUIET="$QUIET" + -e TARGETS="$full_targets" + -e TOKEN_ADDRESS="$token_address" + -e EXPECT_SCRIPT="true" + -e WAIT_FOR_RPC_SEC="240" + # This scenario intentionally runs while the network may be busy applying committed state. + # Mempool drain can take a long time under load + follower restart; rely on committed-read retries instead. + -e MEMPOOL_DRAIN_ENABLE="0" + -e CROSS_NODE_TIMEOUT_SEC="900" + -e HOLDER_POINTER_TIMEOUT_SEC="900" + -e SCRIPT_SETTLE_TIMEOUT_SEC="900" + -e NODECALL_IN_FLUX_TIMEOUT_MS="15000" +) + +for kv in "${EXTRA_ENV[@]}"; do + check_cmd+=(-e "$kv") +done + +check_cmd+=(loadgen) + +"${check_cmd[@]}" + +popd >/dev/null + +echo "Run dir: better_testing/runs/$RUN_ID" diff --git a/better_testing/scripts/run-scenario.sh b/better_testing/scripts/run-scenario.sh new file mode 100755 index 000000000..5b358f8d2 --- /dev/null +++ b/better_testing/scripts/run-scenario.sh @@ -0,0 +1,97 @@ +#!/usr/bin/env bash +set -euo pipefail + +usage() { + cat <<'USAGE' +Usage: + run-scenario.sh [--build] [--run-id ] [--quiet|--verbose] [--env KEY=VALUE ...] + +Examples: + run-scenario.sh token_edge_cases + run-scenario.sh token_acl_matrix --build + run-scenario.sh token_transfer_ramp --env RAMP_CONCURRENCY=1,2,4,8 --env STEP_DURATION_SEC=15 +USAGE +} + +if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then + usage + exit 0 +fi + +SCENARIO="${1:-}" +if [[ -z "$SCENARIO" ]]; then + usage + exit 2 +fi +shift || true + +BUILD=0 +QUIET=true +RUN_ID="" +EXTRA_ENV=() + +while [[ $# -gt 0 ]]; do + case "$1" in + --build) + BUILD=1 + shift + ;; + --quiet) + QUIET=true + shift + ;; + --verbose) + QUIET=false + shift + ;; + --run-id) + RUN_ID="${2:-}" + shift 2 + ;; + --env) + EXTRA_ENV+=("${2:-}") + shift 2 + ;; + *) + echo "Unknown argument: $1" >&2 + usage >&2 + exit 2 + ;; + esac +done + +if [[ -z "$RUN_ID" ]]; then + RUN_ID="${SCENARIO}-$(date -u +%Y%m%d-%H%M%S)" +fi + +pushd devnet >/dev/null + +if [[ "$BUILD" -eq 1 ]]; then + docker compose build node-1 +fi + +cmd=( + docker compose + -f docker-compose.yml + -f ../better_testing/docker-compose.perf.yml + run --rm --no-deps + -e RUN_ID="$RUN_ID" + -e SCENARIO="$SCENARIO" + -e QUIET="$QUIET" +) + +for kv in "${EXTRA_ENV[@]}"; do + if [[ -z "$kv" || "$kv" != *"="* ]]; then + echo "Invalid --env value (expected KEY=VALUE): $kv" >&2 + exit 2 + fi + cmd+=(-e "$kv") +done + +cmd+=(loadgen) + +"${cmd[@]}" +popd >/dev/null + +echo "Run dir: better_testing/runs/$RUN_ID" + diff --git a/better_testing/scripts/run-token-observe-under-load.sh b/better_testing/scripts/run-token-observe-under-load.sh new file mode 100755 index 000000000..db1d193ef --- /dev/null +++ b/better_testing/scripts/run-token-observe-under-load.sh @@ -0,0 +1,207 @@ +#!/usr/bin/env bash +set -euo pipefail + +usage() { + cat <<'USAGE' +Usage: + run-token-observe-under-load.sh [--reset] [--build] [--plain|--scripted|--both] + [--observe-sec ] [--settle-sec ] [--poll-ms ] + [--load-sec ] [--concurrency ] [--inflight ] [--tail ] + +What it does (per mode): + 1) Bootstrap a token (plain: token_smoke, scripted: token_script_smoke) + 2) Run token_observe (committed reads) while running a heavy transfer load + 3) Keep observing for a settle window + 4) Analyze token_observe.timeseries.jsonl for: + - no divergence across nodes on non-null hashes + - tail convergence (last N ticks all nodes non-null + equal) + +Examples: + run-token-observe-under-load.sh --reset --build --both + run-token-observe-under-load.sh --scripted --load-sec 90 --concurrency 120 --observe-sec 360 --settle-sec 180 +USAGE +} + +if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then + usage + exit 0 +fi + +RESET=0 +BUILD=0 +MODE="both" +OBSERVE_SEC=360 +SETTLE_SEC=180 +POLL_MS=1000 +LOAD_SEC=90 +CONCURRENCY=120 +INFLIGHT_PER_WALLET=1 +TAIL=5 +OBSERVE_CONTAINER="" +LOAD_CONTAINER="" + +while [[ $# -gt 0 ]]; do + case "$1" in + --reset) RESET=1; shift ;; + --build) BUILD=1; shift ;; + --plain) MODE="plain"; shift ;; + --scripted) MODE="scripted"; shift ;; + --both) MODE="both"; shift ;; + --observe-sec) OBSERVE_SEC="${2:-}"; shift 2 ;; + --settle-sec) SETTLE_SEC="${2:-}"; shift 2 ;; + --poll-ms) POLL_MS="${2:-}"; shift 2 ;; + --load-sec) LOAD_SEC="${2:-}"; shift 2 ;; + --concurrency) CONCURRENCY="${2:-}"; shift 2 ;; + --inflight) INFLIGHT_PER_WALLET="${2:-}"; shift 2 ;; + --tail) TAIL="${2:-}"; shift 2 ;; + *) echo "Unknown arg: $1" >&2; usage >&2; exit 2 ;; + esac +done + +SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +ROOT_DIR="$(cd -- "$SCRIPT_DIR/../.." && pwd)" + +run_one() { + local mode="$1" + local now + now="$(date -u +%Y%m%d-%H%M%S)" + local RUN_ID="token-observe-under-load-${mode}-${now}" + OBSERVE_CONTAINER="${RUN_ID}-observe" + LOAD_CONTAINER="${RUN_ID}-load" + + pushd "$ROOT_DIR/devnet" >/dev/null + + cleanup() { + # Best-effort cleanup for background observer container on failure/interrupt. + docker rm -f "${OBSERVE_CONTAINER:-}" >/dev/null 2>&1 || true + docker rm -f "${LOAD_CONTAINER:-}" >/dev/null 2>&1 || true + } + trap cleanup EXIT + + if [[ "$RESET" -eq 1 ]]; then + echo "[observe-load] resetting devnet (docker compose down -v)" + docker compose down -v + fi + + if [[ "$BUILD" -eq 1 ]]; then + docker compose build node-1 + fi + + docker compose up -d + + if [[ "$BUILD" -eq 1 && "$RESET" -eq 0 ]]; then + docker compose up -d --force-recreate node-1 node-2 node-3 node-4 + fi + + popd >/dev/null + + local bootstrap_scenario="token_smoke" + local load_scenario="token_transfer" + local bootstrap_summary_name="token_smoke" + if [[ "$mode" == "scripted" ]]; then + # Use the perf-hook script used by loadgen (ping + getHookCounts), not the simple token_script_smoke script. + bootstrap_scenario="token_script_transfer" + bootstrap_summary_name="token_script_transfer" + load_scenario="token_script_transfer" + fi + + echo "[observe-load] bootstrap: $bootstrap_scenario (RUN_ID=$RUN_ID)" + if [[ "$mode" == "scripted" ]]; then + "$ROOT_DIR/better_testing/scripts/run-scenario.sh" "$bootstrap_scenario" --run-id "$RUN_ID" --quiet \ + --env DURATION_SEC=3 \ + --env CONCURRENCY=1 \ + --env TOKEN_SCRIPT_UPGRADE=true + else + "$ROOT_DIR/better_testing/scripts/run-scenario.sh" "$bootstrap_scenario" --run-id "$RUN_ID" --quiet + fi + + local bootstrap_summary="$ROOT_DIR/better_testing/runs/$RUN_ID/${bootstrap_summary_name}.summary.json" + if [[ ! -f "$bootstrap_summary" ]]; then + echo "Missing bootstrap summary: $bootstrap_summary" >&2 + exit 1 + fi + + local token_address + token_address="$(jq -r '.tokenAddress // empty' "$bootstrap_summary")" + if [[ -z "$token_address" || "$token_address" == "null" ]]; then + echo "Could not read tokenAddress from $bootstrap_summary" >&2 + exit 1 + fi + + echo "[observe-load] tokenAddress=$token_address" + + local observe_total_sec=$(( OBSERVE_SEC + SETTLE_SEC )) + + pushd "$ROOT_DIR/devnet" >/dev/null + + echo "[observe-load] starting observer (token_observe, ${observe_total_sec}s)" + docker compose \ + -f docker-compose.yml \ + -f ../better_testing/docker-compose.perf.yml \ + run --name "$OBSERVE_CONTAINER" --rm --no-deps \ + -e RUN_ID="$RUN_ID" \ + -e SCENARIO="token_observe" \ + -e QUIET="true" \ + -e TOKEN_ADDRESS="$token_address" \ + -e OBSERVE_SEC="$observe_total_sec" \ + -e OBSERVE_POLL_MS="$POLL_MS" \ + -e INCLUDE_MEMPOOL="true" \ + -e INCLUDE_TOKEN_GET="true" \ + -e INCLUDE_SCRIPT_STATE="true" \ + -e WAIT_FOR_RPC_SEC="240" \ + -e WAIT_FOR_TX_SEC="240" \ + -e NODECALL_IN_FLUX_TIMEOUT_MS="${NODECALL_IN_FLUX_TIMEOUT_MS:-2000}" \ + loadgen >/dev/null & + local OBSERVE_PID=$! + + # Give observer a moment to initialize. + sleep 2 + + echo "[observe-load] starting load ($load_scenario, ${LOAD_SEC}s, concurrency=$CONCURRENCY inflight=$INFLIGHT_PER_WALLET)" + docker compose \ + -f docker-compose.yml \ + -f ../better_testing/docker-compose.perf.yml \ + run --name "$LOAD_CONTAINER" --rm --no-deps \ + -e RUN_ID="$RUN_ID" \ + -e SCENARIO="$load_scenario" \ + -e QUIET="true" \ + -e TOKEN_ADDRESS="$token_address" \ + -e TOKEN_BOOTSTRAP="false" \ + -e TOKEN_DISTRIBUTE="false" \ + -e TOKEN_SCRIPT_UPGRADE="false" \ + -e DURATION_SEC="$LOAD_SEC" \ + -e CONCURRENCY="$CONCURRENCY" \ + -e INFLIGHT_PER_WALLET="$INFLIGHT_PER_WALLET" \ + -e WAIT_FOR_RPC_SEC="240" \ + -e WAIT_FOR_TX_SEC="240" \ + loadgen >/dev/null + + echo "[observe-load] waiting observer to finish..." + wait "$OBSERVE_PID" + + popd >/dev/null + + local ts_path="$ROOT_DIR/better_testing/runs/$RUN_ID/token_observe.timeseries.jsonl" + if [[ ! -f "$ts_path" ]]; then + echo "Missing observer timeseries: $ts_path" >&2 + exit 1 + fi + + echo "[observe-load] analyzing: $ts_path" + bun "$ROOT_DIR/better_testing/scripts/analyze-token-observe.ts" "$ts_path" --tail "$TAIL" + + echo "Run dir: better_testing/runs/$RUN_ID" + + trap - EXIT + cleanup +} + +case "$MODE" in + plain) run_one "plain" ;; + scripted) run_one "scripted" ;; + both) + run_one "plain" + run_one "scripted" + ;; + *) echo "Invalid MODE: $MODE" >&2; exit 2 ;; +esac diff --git a/better_testing/scripts/token-perf-baseline.sh b/better_testing/scripts/token-perf-baseline.sh new file mode 100755 index 000000000..60bf053b1 --- /dev/null +++ b/better_testing/scripts/token-perf-baseline.sh @@ -0,0 +1,79 @@ +#!/usr/bin/env bash +set -euo pipefail + +usage() { + cat <<'USAGE' +Usage: + token-perf-baseline.sh [--build] [--quiet|--verbose] [--with-pointers] [--env KEY=VALUE ...] + +Runs: + - token_transfer_ramp + - token_mint_ramp + - token_burn_ramp + +Examples: + token-perf-baseline.sh --build + token-perf-baseline.sh --env STEP_DURATION_SEC=10 --env RAMP_CONCURRENCY=1,2,4 + token-perf-baseline.sh --with-pointers +USAGE +} + +if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then + usage + exit 0 +fi + +BUILD=0 +QUIET=true +WITH_POINTERS=0 +EXTRA_ENV=() + +while [[ $# -gt 0 ]]; do + case "$1" in + --build) + BUILD=1 + shift + ;; + --quiet) + QUIET=true + shift + ;; + --verbose) + QUIET=false + shift + ;; + --with-pointers) + WITH_POINTERS=1 + shift + ;; + --env) + EXTRA_ENV+=("${2:-}") + shift 2 + ;; + *) + echo "Unknown argument: $1" >&2 + usage >&2 + exit 2 + ;; + esac +done + +SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" + +common_args=() +if [[ "$QUIET" == "true" ]]; then common_args+=(--quiet); else common_args+=(--verbose); fi + +env_args=() +if [[ "$WITH_POINTERS" -eq 0 ]]; then + env_args+=(--env POST_RUN_HOLDER_POINTER_CHECK=false) +fi +for kv in "${EXTRA_ENV[@]}"; do + env_args+=(--env "$kv") +done + +build_first_args=() +if [[ "$BUILD" -eq 1 ]]; then build_first_args+=(--build); fi + +"$SCRIPT_DIR/run-scenario.sh" token_transfer_ramp "${common_args[@]}" "${build_first_args[@]}" "${env_args[@]}" +"$SCRIPT_DIR/run-scenario.sh" token_mint_ramp "${common_args[@]}" "${env_args[@]}" +"$SCRIPT_DIR/run-scenario.sh" token_burn_ramp "${common_args[@]}" "${env_args[@]}" diff --git a/documentation/ipfs-reference/01-overview.mdx b/documentation/ipfs-reference/01-overview.mdx new file mode 100644 index 000000000..937914cbd --- /dev/null +++ b/documentation/ipfs-reference/01-overview.mdx @@ -0,0 +1,110 @@ +--- +title: "IPFS Overview" +description: "Introduction to IPFS integration in the Demos Network" +--- + +# IPFS Overview + +The Demos Network integrates the InterPlanetary File System (IPFS) to provide decentralized, content-addressed storage with blockchain-backed economic incentives. + +## What is IPFS? + +IPFS is a peer-to-peer distributed file system that identifies content by its cryptographic hash (Content Identifier or CID) rather than by location. This enables: + +- **Immutability** - Content cannot be modified without changing its CID +- **Deduplication** - Identical content shares the same CID network-wide +- **Resilience** - Content persists as long as at least one node pins it +- **Verifiability** - Clients can cryptographically verify received content + +## Demos Integration + +The Demos Network extends IPFS with: + +| Feature | Description | +|---------|-------------| +| **Economic Model** | Token-based payments (DEM) incentivize storage providers | +| **Account Integration** | Storage linked to Demos identity system | +| **Quota Enforcement** | Consensus-level limits prevent abuse | +| **Time-Limited Pins** | Flexible pricing for temporary content | +| **Private Network** | Isolated swarm for performance optimization | + +## Key Concepts + +### Content Identifiers (CIDs) + +Every piece of content is identified by a unique CID derived from its cryptographic hash: + +``` +CIDv0: QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG +CIDv1: bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi +``` + +### Pinning + +Pinning marks content to prevent garbage collection. When you pin content: + +1. The content is stored locally on your node +2. Your account state records the pin +3. Storage fees are charged based on size and duration +4. Content remains available as long as pinned + +### Account State + +Each Demos account maintains IPFS state including: + +- List of pinned content with metadata +- Total storage usage +- Free tier allocation (genesis accounts) +- Cumulative costs and rewards + +## Quick Start + +### Add Content + +```typescript +// Add content and pin it to your account +const result = await demosClient.ipfsAdd({ + content: Buffer.from("Hello, Demos!").toString("base64"), + duration: "month" // Pin for 1 month +}) + +console.log(result.cid) // QmHash... +``` + +### Retrieve Content + +```typescript +// Get content by CID +const content = await demosClient.ipfsGet({ + cid: "QmYwAPJzv5CZsnA..." +}) +``` + +### Check Quota + +```typescript +// Check your storage usage +const quota = await demosClient.ipfsQuota({ + address: "your-demos-address" +}) + +console.log(`Used: ${quota.usedBytes} / ${quota.maxBytes}`) +``` + +## Account Tiers + +Storage limits vary by account type: + +| Tier | Max Storage | Max Pins | Free Tier | +|------|-------------|----------|-----------| +| Regular | 1 GB | 1,000 | None | +| Genesis | 10 GB | 10,000 | 1 GB | + +Genesis accounts are those with balances in the network's genesis block. + +## Next Steps + +- [Architecture](/ipfs-reference/architecture) - System design and components +- [Transactions](/ipfs-reference/transactions) - IPFS transaction types +- [Pricing](/ipfs-reference/pricing) - Cost calculation and fee structure +- [RPC Reference](/ipfs-reference/rpc-endpoints) - Complete API documentation diff --git a/documentation/ipfs-reference/02-architecture.mdx b/documentation/ipfs-reference/02-architecture.mdx new file mode 100644 index 000000000..fded35e9a --- /dev/null +++ b/documentation/ipfs-reference/02-architecture.mdx @@ -0,0 +1,210 @@ +--- +title: "Architecture" +description: "IPFS system architecture and component design" +--- + +# Architecture + +The IPFS integration follows a layered architecture with clear separation of concerns. + +## System Diagram + +``` + ┌─────────────────────┐ + │ Client / DApp │ + └──────────┬──────────┘ + │ + ▼ +┌─────────────────────────────────────────────────────────────────────┐ +│ Demos Node │ +│ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────┐ │ +│ │ RPC Layer │───▶│ Transaction │───▶│ GCR State │ │ +│ │ (NodeCalls) │ │ Processing │ │ Management │ │ +│ └──────────────────┘ └──────────────────┘ └──────────────┘ │ +│ │ │ │ +│ ▼ ▼ │ +│ ┌──────────────────────────────────────────────────────────────┐ │ +│ │ IPFSManager │ │ +│ │ - Content operations (add, get, pin, unpin) │ │ +│ │ - Streaming support for large files │ │ +│ │ - Swarm peer management │ │ +│ │ - Health monitoring │ │ +│ └──────────────────────────────────────────────────────────────┘ │ +│ │ │ +└──────────────────────────────────┼──────────────────────────────────┘ + │ + ▼ + ┌──────────────────────────────┐ + │ Kubo IPFS Daemon │ + │ (Docker Container) │ + │ - Kubo v0.26.0 │ + │ - Private swarm mode │ + │ - HTTP API :54550 │ + │ - Swarm :4001 │ + └──────────────────────────────┘ +``` + +## Components + +### RPC Layer (NodeCalls) + +The RPC layer exposes IPFS operations to clients via the Demos RPC protocol: + +- Validates incoming requests +- Enforces rate limits +- Routes to appropriate handlers +- Returns structured responses + +**Location:** `src/libs/network/routines/nodecalls/ipfs/` + +### Transaction Processing + +Blockchain transactions modify account state through consensus: + +- Validates signatures and permissions +- Checks quotas and balances +- Calculates and deducts fees +- Updates account IPFS state + +**Location:** `src/libs/blockchain/routines/ipfsOperations.ts` + +### GCR State Management + +The Global Consensus Registry stores account IPFS state: + +```typescript +interface AccountIPFSState { + pins: PinnedContent[] + totalPinnedBytes: number + earnedRewards: string + paidCosts: string + freeAllocationBytes: number + usedFreeBytes: number + lastUpdated?: number +} +``` + +**Location:** `src/libs/blockchain/gcr/gcr_routines/GCRIPFSRoutines.ts` + +### IPFSManager + +The core interface to the Kubo IPFS daemon: + +```typescript +class IPFSManager { + // Content operations + add(content: Buffer): Promise + get(cid: string): Promise + pin(cid: string): Promise + unpin(cid: string): Promise + + // Streaming for large files + addStream(stream: ReadableStream): Promise + getStream(cid: string): Promise + + // Status and health + healthCheck(): Promise + getNodeInfo(): Promise + + // Swarm management + swarmPeers(): Promise + swarmConnect(multiaddr: string): Promise +} +``` + +**Location:** `src/features/ipfs/IPFSManager.ts` + +### Kubo IPFS Daemon + +Each Demos node runs an isolated Kubo instance in Docker: + +| Setting | Value | Purpose | +|---------|-------|---------| +| Image | `ipfs/kubo:v0.26.0` | IPFS implementation | +| IPFS_PROFILE | `server` | Always-on optimization | +| LIBP2P_FORCE_PNET | `1` | Private network mode | +| API Port | `54550` | HTTP API (internal) | +| Gateway Port | `58080` | Read-only gateway | +| Swarm Port | `4001` | P2P communication | + +## Data Flow + +### Adding Content + +``` +1. Client sends base64 content via RPC +2. NodeCall validates request format +3. Transaction processor: + a. Decodes content + b. Validates quota + c. Calculates cost + d. Checks balance + e. Deducts fee +4. IPFSManager.add() stores in Kubo +5. GCR updates account state with pin +6. CID returned to client +``` + +### Retrieving Content + +``` +1. Client requests CID via RPC +2. NodeCall validates CID format +3. IPFSManager.get() fetches from Kubo +4. Content returned (base64 encoded) +``` + +## State Schema + +### PinnedContent + +```typescript +interface PinnedContent { + cid: string // Content Identifier + size: number // Size in bytes + timestamp: number // Pin creation time (Unix ms) + expiresAt?: number // Optional expiration (Unix ms) + duration?: number // Original duration in seconds + metadata?: object // User-defined metadata + wasFree?: boolean // Used free tier flag + freeBytes?: number // Bytes covered by free tier + costPaid?: string // Cost paid in DEM +} +``` + +## Connection Management + +### Retry Logic + +IPFSManager implements exponential backoff for resilience: + +- Maximum retries: 5 +- Initial delay: 1 second +- Maximum delay: 30 seconds +- Backoff multiplier: 2x + +### Health Monitoring + +```typescript +interface HealthStatus { + healthy: boolean + peerId?: string + peerCount?: number + repoSize?: number + timestamp: number + error?: string +} +``` + +## File Locations + +| Component | Path | +|-----------|------| +| IPFSManager | `src/features/ipfs/IPFSManager.ts` | +| ExpirationWorker | `src/features/ipfs/ExpirationWorker.ts` | +| Types | `src/features/ipfs/types.ts` | +| Errors | `src/features/ipfs/errors.ts` | +| Swarm Key | `src/features/ipfs/swarmKey.ts` | +| Transaction Handlers | `src/libs/blockchain/routines/ipfsOperations.ts` | +| Tokenomics | `src/libs/blockchain/routines/ipfsTokenomics.ts` | +| RPC Endpoints | `src/libs/network/routines/nodecalls/ipfs/` | diff --git a/documentation/ipfs-reference/03-transactions.mdx b/documentation/ipfs-reference/03-transactions.mdx new file mode 100644 index 000000000..4d659ac12 --- /dev/null +++ b/documentation/ipfs-reference/03-transactions.mdx @@ -0,0 +1,241 @@ +--- +title: "Transactions" +description: "IPFS blockchain transaction types and execution flow" +--- + +# Transactions + +IPFS operations that modify state are executed as blockchain transactions, ensuring consensus across all nodes. + +## Transaction Types + +| Type | Description | +|------|-------------| +| `IPFS_ADD` | Upload and pin new content | +| `IPFS_PIN` | Pin existing content by CID | +| `IPFS_UNPIN` | Remove a pin from account | +| `IPFS_EXTEND_PIN` | Extend pin expiration time | + +## IPFS_ADD + +Uploads content to IPFS and automatically pins it to the sender's account. + +### Payload + +```typescript +{ + type: "ipfs_add", + content: string, // Base64-encoded content + filename?: string, // Optional filename hint + duration?: PinDuration, // Pin duration (default: "permanent") + metadata?: object // Optional user metadata +} +``` + +### Execution Flow + +1. **Decode** - Base64 content decoded, size calculated +2. **Tier Detection** - Determine if sender is genesis account +3. **Quota Validation** - Check byte limit and pin count +4. **Cost Calculation** - Apply tier pricing and duration multiplier +5. **Balance Check** - Verify sufficient DEM balance +6. **Fee Deduction** - Transfer fee to hosting RPC +7. **IPFS Add** - Store content via Kubo daemon +8. **State Update** - Record pin in account state + +### Response + +```typescript +{ + cid: string, // Content Identifier + size: number, // Size in bytes + cost: string, // Cost charged in DEM + expiresAt?: number, // Expiration timestamp (if not permanent) + duration?: number // Duration in seconds +} +``` + +### Example + +```typescript +const tx = { + type: "ipfs_add", + content: Buffer.from("Hello, World!").toString("base64"), + duration: "month", + metadata: { name: "greeting.txt" } +} + +// Result: +// { +// cid: "QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u", +// size: 13, +// cost: "1", +// expiresAt: 1706745600000, +// duration: 2592000 +// } +``` + +## IPFS_PIN + +Pins an existing CID to the sender's account. The content must already exist on the IPFS network (pinned by another account or available via the swarm). + +### Payload + +```typescript +{ + type: "ipfs_pin", + cid: string, // Content Identifier to pin + duration?: PinDuration, // Pin duration (default: "permanent") + metadata?: object // Optional metadata +} +``` + +### Execution Flow + +1. **CID Validation** - Verify CID format is valid +2. **Content Check** - Fetch content size from IPFS (must exist) +3. **Duplicate Check** - Verify not already pinned by account +4. **Quota Validation** - Check limits not exceeded +5. **Cost Calculation** - Based on content size and duration +6. **Payment Processing** - Deduct fee from balance +7. **Local Pin** - Pin content on this node +8. **State Update** - Record in account state + +### Response + +```typescript +{ + cid: string, + size: number, + cost: string, + expiresAt?: number +} +``` + +## IPFS_UNPIN + +Removes a pin from the sender's account. The content may persist if pinned by other accounts. + +### Payload + +```typescript +{ + type: "ipfs_unpin", + cid: string // Content Identifier to unpin +} +``` + +### Execution Flow + +1. **CID Validation** - Verify CID format +2. **Pin Verification** - Confirm pin exists in account state +3. **State Update** - Remove pin from account +4. **Local Unpin** - Unpin from IPFS node + +### Important Notes + +- **No refunds** - Payment is final, unpinning does not refund fees +- **Content persistence** - Content remains if pinned by others +- **Garbage collection** - Unpinned content eventually removed by GC + +### Response + +```typescript +{ + cid: string, + unpinned: true +} +``` + +## IPFS_EXTEND_PIN + +Extends the expiration time of an existing pin. + +### Payload + +```typescript +{ + type: "ipfs_extend_pin", + cid: string, // Content Identifier + additionalDuration: PinDuration // Duration to add +} +``` + +### Execution Flow + +1. **Pin Lookup** - Find existing pin in account state +2. **Duration Validation** - Verify extension is valid +3. **Expiration Calculation** - New expiration from current (or now if expired) +4. **Cost Calculation** - Based on size and additional duration +5. **Payment Processing** - Deduct extension fee +6. **State Update** - Update pin with new expiration + +### Response + +```typescript +{ + cid: string, + newExpiresAt: number, + cost: string, + duration: number +} +``` + +### Notes + +- **No free tier** - Extensions always cost DEM (free tier only for initial pin) +- **Expired pins** - Can be extended; new expiration calculated from current time +- **Permanent upgrade** - Can extend temporary pin to permanent + +## Pin Duration + +Duration can be specified as preset names or custom seconds: + +### Preset Durations + +| Name | Seconds | Price Multiplier | +|------|---------|------------------| +| `permanent` | - | 1.00 | +| `week` | 604,800 | 0.10 | +| `month` | 2,592,000 | 0.25 | +| `quarter` | 7,776,000 | 0.50 | +| `year` | 31,536,000 | 0.80 | + +### Custom Duration + +```typescript +duration: 172800 // 2 days in seconds +``` + +- Minimum: 86,400 seconds (1 day) +- Maximum: 315,360,000 seconds (10 years) + +## Custom Charges + +For operations with variable costs, clients can specify a maximum cost: + +```typescript +{ + type: "ipfs_add", + content: "...", + custom_charges: { + ipfs: { + max_cost_dem: "10.5" // Maximum willing to pay + } + } +} +``` + +The node charges actual cost up to the specified maximum. Transaction fails if actual cost exceeds `max_cost_dem`. + +## Error Conditions + +| Error | Description | +|-------|-------------| +| `IPFS_QUOTA_EXCEEDED` | Storage or pin count limit reached | +| `IPFS_INVALID_CID` | Malformed CID format | +| `IPFS_NOT_FOUND` | Content not found (for pin) | +| `IPFS_ALREADY_PINNED` | CID already pinned by account | +| `IPFS_PIN_NOT_FOUND` | Pin doesn't exist (for unpin/extend) | +| `INSUFFICIENT_BALANCE` | Not enough DEM for operation | +| `INVALID_DURATION` | Duration out of valid range | diff --git a/documentation/ipfs-reference/04-pricing.mdx b/documentation/ipfs-reference/04-pricing.mdx new file mode 100644 index 000000000..b0e767c38 --- /dev/null +++ b/documentation/ipfs-reference/04-pricing.mdx @@ -0,0 +1,241 @@ +--- +title: "Pricing" +description: "IPFS storage costs, fee structure, and tokenomics" +--- + +# Pricing + +IPFS storage costs are determined by content size, account tier, and pin duration. + +## Account Tiers + +### Regular Accounts + +| Metric | Value | +|--------|-------| +| Base Rate | 1 DEM per 100 MB | +| Minimum Cost | 1 DEM per operation | +| Free Allocation | None | + +### Genesis Accounts + +Genesis accounts (those with balances in the genesis block) receive preferential pricing: + +| Metric | Value | +|--------|-------| +| Free Allocation | 1 GB | +| Post-Free Rate | 1 DEM per 1 GB | +| Minimum Cost | 0 DEM (within free tier) | + +### Genesis Detection + +```typescript +async function isGenesisAccount(address: string): Promise { + const genesisBlock = await Chain.getGenesisBlock() + const balances = genesisBlock.content.extra.genesisData.balances + return balances.some( + ([addr]) => addr.toLowerCase() === address.toLowerCase() + ) +} +``` + +## Duration Pricing + +Pin duration affects cost through multipliers: + +| Duration | Seconds | Multiplier | Discount | +|----------|---------|------------|----------| +| `week` | 604,800 | 0.10 | 90% off | +| `month` | 2,592,000 | 0.25 | 75% off | +| `quarter` | 7,776,000 | 0.50 | 50% off | +| `year` | 31,536,000 | 0.80 | 20% off | +| `permanent` | - | 1.00 | Full price | + +### Custom Duration Formula + +For durations specified in seconds: + +``` +multiplier = 0.1 + (duration / MAX_DURATION) * 0.9 +``` + +Where `MAX_DURATION = 315,360,000` (10 years). + +## Cost Calculation + +### Formula + +``` +finalCost = baseCost × durationMultiplier +``` + +### Regular Account Calculation + +```typescript +function calculateRegularCost(sizeBytes: number): bigint { + const BYTES_PER_UNIT = 104_857_600n // 100 MB + const COST_PER_UNIT = 1n // 1 DEM + + const units = BigInt(Math.ceil(sizeBytes / Number(BYTES_PER_UNIT))) + return units > 0n ? units * COST_PER_UNIT : COST_PER_UNIT +} +``` + +### Genesis Account Calculation + +```typescript +function calculateGenesisCost( + sizeBytes: number, + usedFreeBytes: number +): bigint { + const FREE_BYTES = 1_073_741_824 // 1 GB + const BYTES_PER_UNIT = 1_073_741_824n // 1 GB + + const remainingFree = FREE_BYTES - usedFreeBytes + + if (sizeBytes <= remainingFree) { + return 0n // Fully covered by free tier + } + + const chargeableBytes = sizeBytes - remainingFree + return BigInt(Math.ceil(chargeableBytes / Number(BYTES_PER_UNIT))) +} +``` + +## Examples + +### Regular Account + +| Size | Duration | Base Cost | Multiplier | Final Cost | +|------|----------|-----------|------------|------------| +| 50 MB | permanent | 1 DEM | 1.00 | 1 DEM | +| 150 MB | permanent | 2 DEM | 1.00 | 2 DEM | +| 500 MB | month | 5 DEM | 0.25 | 1.25 DEM | +| 1 GB | week | 10 DEM | 0.10 | 1 DEM | + +### Genesis Account + +| Size | Used Free | Duration | Base Cost | Final Cost | +|------|-----------|----------|-----------|------------| +| 500 MB | 0 | permanent | 0 DEM | 0 DEM | +| 500 MB | 800 MB | permanent | 0 DEM | 0 DEM | +| 1 GB | 500 MB | permanent | 0 DEM | 0 DEM | +| 2 GB | 0 | permanent | 1 DEM | 1 DEM | +| 2 GB | 500 MB | permanent | 1 DEM | 1 DEM | +| 5 GB | 1 GB | month | 4 DEM | 1 DEM | + +## Free Tier Tracking + +Genesis accounts have their free allocation tracked: + +```typescript +interface AccountIPFSState { + freeAllocationBytes: number // 1 GB for genesis + usedFreeBytes: number // Cumulative usage + // ... +} +``` + +When pinning: + +```typescript +const freeRemaining = freeAllocation - usedFreeBytes +const bytesFromFree = Math.min(size, freeRemaining) +const chargeableBytes = size - bytesFromFree + +// Update state +state.usedFreeBytes += bytesFromFree +``` + +**Note:** Free tier is only consumed on initial pins, not extensions. + +## Fee Distribution + +Current distribution (MVP phase): + +| Recipient | Share | +|-----------|-------| +| Hosting RPC | 100% | +| Treasury | 0% | +| Consensus | 0% | + +### Future Distribution + +Target distribution after mainnet: + +| Recipient | Share | +|-----------|-------| +| Hosting RPC | 70% | +| Treasury | 20% | +| Consensus | 10% | + +## Custom Charges + +Clients can cap costs for variable-size operations: + +```typescript +{ + type: "ipfs_add", + content: largeContent, + custom_charges: { + ipfs: { + max_cost_dem: "10.5" + } + } +} +``` + +### Behavior + +- Node calculates actual cost +- If `actualCost <= max_cost_dem`: Transaction succeeds, charges actual cost +- If `actualCost > max_cost_dem`: Transaction fails with error + +### Use Case + +Useful when content size isn't known upfront (e.g., user uploads via UI). + +## Cost Estimation + +Use the `ipfs_quote` RPC to estimate costs before transacting: + +```typescript +const quote = await client.ipfsQuote({ + size: 1048576, // 1 MB + duration: "month", + address: "your-address" +}) + +console.log(quote) +// { +// cost: "1", +// durationSeconds: 2592000, +// multiplier: 0.25, +// withinFreeTier: false +// } +``` + +## Pricing Constants + +```typescript +// Regular accounts +const REGULAR_MIN_COST = 1n // 1 DEM minimum +const REGULAR_BYTES_PER_UNIT = 104_857_600 // 100 MB + +// Genesis accounts +const GENESIS_FREE_BYTES = 1_073_741_824 // 1 GB free +const GENESIS_BYTES_PER_UNIT = 1_073_741_824 // 1 GB per DEM + +// Duration multipliers +const DURATION_MULTIPLIERS = { + week: 0.10, + month: 0.25, + quarter: 0.50, + year: 0.80, + permanent: 1.00 +} + +// Duration bounds +const MIN_CUSTOM_DURATION = 86_400 // 1 day +const MAX_CUSTOM_DURATION = 315_360_000 // 10 years +``` diff --git a/documentation/ipfs-reference/05-quotas.mdx b/documentation/ipfs-reference/05-quotas.mdx new file mode 100644 index 000000000..4748159ce --- /dev/null +++ b/documentation/ipfs-reference/05-quotas.mdx @@ -0,0 +1,263 @@ +--- +title: "Storage Quotas" +description: "Account storage limits and quota enforcement" +--- + +# Storage Quotas + +Storage quotas prevent abuse and ensure fair resource allocation across the network. + +## Quota Tiers + +| Tier | Max Storage | Max Pins | +|------|-------------|----------| +| Regular | 1 GB | 1,000 | +| Genesis | 10 GB | 10,000 | +| Premium | 100 GB | 100,000 | + +**Note:** Premium tier is reserved for future implementation. + +## Quota Values + +```typescript +const IPFS_QUOTA_LIMITS = { + regular: { + maxPinnedBytes: 1_073_741_824, // 1 GB + maxPinCount: 1_000 + }, + genesis: { + maxPinnedBytes: 10_737_418_240, // 10 GB + maxPinCount: 10_000 + }, + premium: { + maxPinnedBytes: 107_374_182_400, // 100 GB + maxPinCount: 100_000 + } +} +``` + +## Consensus Enforcement + +Quotas are enforced at the consensus level: + +- All nodes use identical quota values +- Quota checks are part of transaction validation +- Transactions exceeding quotas are rejected by consensus +- Quota values are protocol constants (changes require upgrade) + +### Why Consensus-Critical? + +Quota enforcement must be deterministic: + +``` +Node A validates TX with limit 1GB → VALID +Node B validates TX with limit 2GB → VALID (different limit!) +``` + +This would cause consensus failure. All nodes must agree on limits. + +## Quota Check + +Before any pin operation: + +```typescript +function checkQuota( + state: AccountIPFSState, + additionalBytes: number, + tier: QuotaTier +): QuotaCheckResult { + const quota = IPFS_QUOTA_LIMITS[tier] + + const newTotalBytes = state.totalPinnedBytes + additionalBytes + const newPinCount = state.pins.length + 1 + + if (newTotalBytes > quota.maxPinnedBytes) { + return { + allowed: false, + error: "IPFS_QUOTA_EXCEEDED", + message: "Storage limit exceeded", + current: state.totalPinnedBytes, + limit: quota.maxPinnedBytes, + requested: additionalBytes + } + } + + if (newPinCount > quota.maxPinCount) { + return { + allowed: false, + error: "IPFS_QUOTA_EXCEEDED", + message: "Pin count limit exceeded", + current: state.pins.length, + limit: quota.maxPinCount + } + } + + return { allowed: true } +} +``` + +## Checking Your Quota + +Use the `ipfs_quota` RPC endpoint: + +```typescript +const quota = await client.ipfsQuota({ + address: "your-demos-address" +}) + +console.log(quota) +// { +// tier: "genesis", +// usedBytes: 524288000, // 500 MB +// maxBytes: 10737418240, // 10 GB +// usedPins: 42, +// maxPins: 10000, +// freeAllocation: 1073741824, // 1 GB +// usedFreeBytes: 524288000, // 500 MB +// percentUsed: 4.88 +// } +``` + +## Quota Response Schema + +```typescript +interface QuotaResponse { + tier: "regular" | "genesis" | "premium" + + // Storage quota + usedBytes: number + maxBytes: number + availableBytes: number + + // Pin count quota + usedPins: number + maxPins: number + availablePins: number + + // Free tier (genesis only) + freeAllocation: number + usedFreeBytes: number + remainingFreeBytes: number + + // Computed + percentUsed: number +} +``` + +## Tier Determination + +Account tier is determined by genesis status: + +```typescript +async function getAccountTier(address: string): Promise { + const isGenesis = await isGenesisAccount(address) + + if (isGenesis) { + return "genesis" + } + + // Future: check premium subscription + // if (await hasPremiumSubscription(address)) { + // return "premium" + // } + + return "regular" +} +``` + +## Quota and Expiration + +Expired pins still count against quota until cleaned up: + +``` +1. Pin expires at timestamp T +2. Grace period: T + 24 hours +3. Cleanup runs (hourly scan) +4. Pin removed from state → quota freed +``` + +To immediately free quota, explicitly unpin expired content. + +## Error Handling + +When quota is exceeded: + +```typescript +// Transaction response +{ + success: false, + error: { + code: "IPFS_QUOTA_EXCEEDED", + message: "Storage limit exceeded", + details: { + current: 1073741824, + limit: 1073741824, + requested: 52428800 + } + } +} +``` + +## Best Practices + +### Monitor Usage + +```typescript +// Set up alerts at thresholds +async function checkQuotaHealth(address: string) { + const quota = await client.ipfsQuota({ address }) + + if (quota.percentUsed > 90) { + console.warn("Quota usage above 90%") + } + + if (quota.availablePins < 10) { + console.warn("Less than 10 pins remaining") + } +} +``` + +### Use Time-Limited Pins + +Temporary content should use shorter durations: + +```typescript +// Temporary files +await client.ipfsAdd({ + content: tempData, + duration: "week" // Auto-cleanup after expiration +}) + +// Important files +await client.ipfsAdd({ + content: importantData, + duration: "permanent" +}) +``` + +### Clean Up Unused Pins + +Regularly review and unpin unused content: + +```typescript +const pins = await client.ipfsPins({ address }) + +for (const pin of pins) { + if (shouldRemove(pin)) { + await client.ipfsUnpin({ cid: pin.cid }) + } +} +``` + +## Future: Premium Tier + +The premium tier is planned for accounts with enhanced storage needs: + +| Feature | Premium | +|---------|---------| +| Max Storage | 100 GB | +| Max Pins | 100,000 | +| Activation | Subscription (TBD) | +| Cost | TBD | + +Premium tier activation mechanism is under development. diff --git a/documentation/ipfs-reference/06-pin-expiration.mdx b/documentation/ipfs-reference/06-pin-expiration.mdx new file mode 100644 index 000000000..7539367f0 --- /dev/null +++ b/documentation/ipfs-reference/06-pin-expiration.mdx @@ -0,0 +1,290 @@ +--- +title: "Pin Expiration" +description: "Time-limited pins and automatic cleanup" +--- + +# Pin Expiration + +The pin expiration system enables time-limited storage with automatic cleanup. + +## Overview + +Pins can have an optional expiration time: + +- **Permanent pins** - Never expire, stored indefinitely +- **Time-limited pins** - Expire after specified duration, then cleaned up + +Benefits: +- Lower cost for temporary content (duration pricing) +- Automatic quota reclamation +- No manual cleanup required + +## Specifying Duration + +### Preset Durations + +| Name | Duration | Multiplier | +|------|----------|------------| +| `permanent` | Forever | 1.00 | +| `week` | 7 days | 0.10 | +| `month` | 30 days | 0.25 | +| `quarter` | 90 days | 0.50 | +| `year` | 365 days | 0.80 | + +### Custom Duration + +Specify seconds directly: + +```typescript +// 2 days +await client.ipfsAdd({ + content: data, + duration: 172800 +}) + +// 6 months +await client.ipfsAdd({ + content: data, + duration: 15768000 +}) +``` + +**Bounds:** +- Minimum: 86,400 seconds (1 day) +- Maximum: 315,360,000 seconds (10 years) + +## Pin State + +Pins with expiration include timestamp fields: + +```typescript +interface PinnedContent { + cid: string + size: number + timestamp: number // Creation time (Unix ms) + expiresAt?: number // Expiration time (Unix ms) + duration?: number // Original duration (seconds) + // ... +} +``` + +## Expiration Worker + +A background service manages expired pins: + +### Configuration + +| Parameter | Default | Description | +|-----------|---------|-------------| +| `checkIntervalMs` | 3,600,000 | Check interval (1 hour) | +| `gracePeriodMs` | 86,400,000 | Grace period (24 hours) | +| `batchSize` | 100 | Pins per cleanup cycle | +| `enableUnpin` | true | Actually unpin content | + +### Cleanup Process + +``` +1. Worker wakes up (hourly) +2. Scan all accounts for expired pins +3. For each expired pin: + a. Check if past grace period + b. If yes: unpin from IPFS, remove from state + c. If no: skip (still in grace period) +4. Log cleanup statistics +5. Sleep until next interval +``` + +### Grace Period + +Content isn't immediately removed upon expiration: + +``` +T = expiresAt → Pin expires +T + 24h = grace end → Eligible for cleanup +T + 25h (next scan) → Actually removed +``` + +This provides buffer for: +- Users to extend before removal +- Network clock differences +- Prevent accidental data loss + +## Extending Pins + +Use `IPFS_EXTEND_PIN` to add time: + +```typescript +await client.ipfsExtendPin({ + cid: "Qm...", + additionalDuration: "month" +}) +``` + +### Extension Rules + +- **From current expiration** - If not yet expired, adds to existing expiration +- **From now** - If already expired, calculates from current time +- **No free tier** - Extensions always cost DEM +- **Upgrade to permanent** - Can extend temporary to permanent + +### Examples + +```typescript +// Pin expires in 7 days, extend by 1 month +// New expiration: 7 + 30 = 37 days from now + +// Pin expired 2 days ago, extend by 1 week +// New expiration: 7 days from now (not 7 - 2 = 5) +``` + +## Checking Expiration + +Query pin status: + +```typescript +const pins = await client.ipfsPins({ address }) + +for (const pin of pins) { + if (pin.expiresAt) { + const remaining = pin.expiresAt - Date.now() + + if (remaining < 0) { + console.log(`${pin.cid}: EXPIRED (in grace period)`) + } else if (remaining < 86400000) { + console.log(`${pin.cid}: Expires in < 24h`) + } else { + const days = Math.floor(remaining / 86400000) + console.log(`${pin.cid}: Expires in ${days} days`) + } + } else { + console.log(`${pin.cid}: Permanent`) + } +} +``` + +## Expiration Calculation + +```typescript +function calculateExpiration( + duration: PinDuration, + timestamp: number +): { expiresAt?: number; durationSeconds: number } { + + if (duration === "permanent") { + return { expiresAt: undefined, durationSeconds: 0 } + } + + const seconds = typeof duration === "number" + ? duration + : PIN_DURATION_SECONDS[duration] + + return { + expiresAt: timestamp + (seconds * 1000), + durationSeconds: seconds + } +} +``` + +## Duration Validation + +```typescript +function validateDuration(duration: PinDuration): void { + if (duration === "permanent") return + + if (typeof duration === "string") { + if (!PIN_DURATION_SECONDS[duration]) { + throw new Error(`Invalid duration preset: ${duration}`) + } + return + } + + if (typeof duration === "number") { + if (duration < MIN_CUSTOM_DURATION) { + throw new Error(`Duration must be at least ${MIN_CUSTOM_DURATION}s (1 day)`) + } + if (duration > MAX_CUSTOM_DURATION) { + throw new Error(`Duration cannot exceed ${MAX_CUSTOM_DURATION}s (10 years)`) + } + return + } + + throw new Error("Invalid duration type") +} +``` + +## Constants + +```typescript +// Duration presets (seconds) +const PIN_DURATION_SECONDS = { + permanent: 0, + week: 604_800, + month: 2_592_000, + quarter: 7_776_000, + year: 31_536_000 +} + +// Custom duration bounds +const MIN_CUSTOM_DURATION = 86_400 // 1 day +const MAX_CUSTOM_DURATION = 315_360_000 // 10 years + +// Worker configuration +const EXPIRATION_CHECK_INTERVAL = 3_600_000 // 1 hour +const EXPIRATION_GRACE_PERIOD = 86_400_000 // 24 hours +const EXPIRATION_BATCH_SIZE = 100 +``` + +## Best Practices + +### Choose Appropriate Durations + +```typescript +// Temporary uploads, previews +duration: "week" + +// Monthly reports, invoices +duration: "month" + +// Quarterly archives +duration: "quarter" + +// Annual records +duration: "year" + +// Permanent assets (logos, contracts) +duration: "permanent" +``` + +### Set Up Expiration Alerts + +```typescript +async function checkExpiringPins(address: string) { + const pins = await client.ipfsPins({ address }) + const now = Date.now() + const weekMs = 7 * 24 * 60 * 60 * 1000 + + const expiringSoon = pins.filter(pin => + pin.expiresAt && + pin.expiresAt - now < weekMs && + pin.expiresAt > now + ) + + if (expiringSoon.length > 0) { + console.warn(`${expiringSoon.length} pins expiring within 1 week`) + } +} +``` + +### Extend Before Expiration + +Don't wait until the grace period: + +```typescript +// Good: Extend well before expiration +if (pin.expiresAt - Date.now() < 7 * 86400000) { + await client.ipfsExtendPin({ cid: pin.cid, additionalDuration: "month" }) +} + +// Risky: Waiting until grace period +// Content could be cleaned up before you extend +``` diff --git a/documentation/ipfs-reference/07-private-network.mdx b/documentation/ipfs-reference/07-private-network.mdx new file mode 100644 index 000000000..309e4e52c --- /dev/null +++ b/documentation/ipfs-reference/07-private-network.mdx @@ -0,0 +1,291 @@ +--- +title: "Private Network" +description: "Demos IPFS private swarm configuration" +--- + +# Private Network + +The Demos network operates a private IPFS swarm, isolated from the public IPFS network. + +## Overview + +By default, all Demos nodes join a private IPFS network defined by a shared swarm key. This provides: + +- **Performance isolation** - No traffic from public IPFS network +- **Dedicated peer discovery** - Only connect to other Demos nodes +- **Reduced latency** - Smaller, focused network + +## Swarm Key + +### Official Demos Swarm Key + +``` +1d8b2cfa0ee76011ab655cec98be549f3f5cd81199b1670003ec37c0db0592e4 +``` + +### File Format + +The swarm key is stored in `~/.ipfs/swarm.key`: + +``` +/key/swarm/psk/1.0.0/ +/base16/ +1d8b2cfa0ee76011ab655cec98be549f3f5cd81199b1670003ec37c0db0592e4 +``` + +### Automatic Configuration + +The Demos node automatically configures the swarm key: + +```typescript +import { DEMOS_IPFS_SWARM_KEY_FILE } from "./swarmKey" + +// Written to ~/.ipfs/swarm.key on container init +``` + +## Security Model + +### What the Swarm Key Provides + +| Feature | Provided | +|---------|----------| +| Performance isolation | Yes | +| Dedicated peer discovery | Yes | +| Network membership control | Partial | + +### What the Swarm Key Does NOT Provide + +| Feature | Provided | Why | +|---------|----------|-----| +| Access control | No | Blockchain auth handles this | +| Content encryption | No | IPFS content is public by design | +| Write protection | No | Requires DEM tokens via transactions | + +### Security Guarantees + +Actual security is provided by: + +1. **Transaction signing** - All writes require signed Demos transactions +2. **Token requirement** - Pinning costs DEM tokens +3. **Consensus validation** - All operations verified by network +4. **Identity system** - Demos blockchain identity + +### Why Public Key? + +The swarm key is intentionally public because: + +- It only isolates IPFS traffic, not blockchain operations +- Write access still requires DEM tokens +- Content on IPFS is inherently public (no encryption) +- Allows anyone to run a Demos IPFS node + +## Private Network Mode + +### Environment Variables + +```bash +# Use custom swarm key (optional) +DEMOS_IPFS_SWARM_KEY=your64characterhexkey + +# Force private network (default: enabled) +LIBP2P_FORCE_PNET=1 + +# Disable private network (join public IPFS) +DEMOS_IPFS_PUBLIC_MODE=true +``` + +### Checking Mode + +```typescript +import { isPrivateNetworkEnabled, getSwarmKey } from "./swarmKey" + +if (isPrivateNetworkEnabled()) { + const key = getSwarmKey() + console.log(`Private network: ${key.slice(0, 8)}...`) +} else { + console.log("Public IPFS mode") +} +``` + +## Bootstrap Nodes + +### Configuration + +Bootstrap nodes are used for initial peer discovery: + +```bash +DEMOS_IPFS_BOOTSTRAP_NODES="/ip4/1.2.3.4/tcp/4001/p2p/QmPeer1...,/ip4/5.6.7.8/tcp/4001/p2p/QmPeer2..." +``` + +### Multiaddr Format + +``` +/ip4//tcp//p2p/ +/ip6//tcp//p2p/ +/dns4//tcp//p2p/ +``` + +### Default Bootstrap + +If no bootstrap nodes configured, the node relies on: + +1. Local peer discovery (mDNS) +2. Peers shared via Demos OmniProtocol +3. Manual peer connection + +## Peer Management + +### Configuration + +| Variable | Default | Description | +|----------|---------|-------------| +| `DEMOS_IPFS_MAX_PEERS` | 100 | Maximum peer connections | +| `DEMOS_IPFS_MIN_PEERS` | 4 | Minimum peers to maintain | + +### Peer Discovery + +Peers are discovered through: + +1. **Bootstrap nodes** - Initial connection points +2. **DHT** - Distributed hash table (within private network) +3. **OmniProtocol** - Demos P2P layer shares IPFS addresses +4. **Manual connection** - Via RPC endpoints + +### Managing Peers + +```typescript +// List connected peers +const peers = await client.ipfsSwarmPeers() + +// Connect to specific peer +await client.ipfsSwarmConnect({ + multiaddr: "/ip4/1.2.3.4/tcp/4001/p2p/QmPeerId..." +}) + +// Disconnect from peer +await client.ipfsSwarmDisconnect({ + peerId: "QmPeerId..." +}) + +// List Demos network peers +const demosPeers = await client.ipfsDemosPeers() +``` + +## Generating Custom Swarm Key + +For test networks or private deployments: + +```typescript +import { generateSwarmKey, formatSwarmKeyFile } from "./swarmKey" + +// Generate new 256-bit key +const key = generateSwarmKey() +console.log(key) // 64 hex characters + +// Format for swarm.key file +const fileContent = formatSwarmKeyFile(key) +``` + +### CLI Generation + +```bash +# Using go-ipfs-swarm-key-gen +go install github.com/Kubuxu/go-ipfs-swarm-key-gen/ipfs-swarm-key-gen@latest +ipfs-swarm-key-gen > swarm.key + +# Or using openssl +echo -e "/key/swarm/psk/1.0.0/\n/base16/\n$(openssl rand -hex 32)" +``` + +## Swarm Key Validation + +```typescript +import { isValidSwarmKey, swarmKeysMatch } from "./swarmKey" + +// Validate format +isValidSwarmKey("1d8b2cfa...") // true +isValidSwarmKey("invalid") // false + +// Compare keys +swarmKeysMatch(key1, key2) // true if identical +``` + +## Docker Configuration + +The Kubo container is configured for private network: + +```yaml +services: + ipfs: + image: ipfs/kubo:v0.26.0 + environment: + LIBP2P_FORCE_PNET: "1" + volumes: + - ./data/ipfs:/data/ipfs + # swarm.key is injected during init +``` + +### Init Script + +```bash +#!/bin/bash +# init-ipfs.sh + +# Write swarm key +cat > /data/ipfs/swarm.key << 'EOF' +/key/swarm/psk/1.0.0/ +/base16/ +1d8b2cfa0ee76011ab655cec98be549f3f5cd81199b1670003ec37c0db0592e4 +EOF + +# Remove public bootstrap +ipfs bootstrap rm --all + +# Add private bootstrap (if configured) +if [ -n "$DEMOS_IPFS_BOOTSTRAP_NODES" ]; then + IFS=',' read -ra NODES <<< "$DEMOS_IPFS_BOOTSTRAP_NODES" + for node in "${NODES[@]}"; do + ipfs bootstrap add "$node" + done +fi +``` + +## Troubleshooting + +### No Peers Connecting + +1. **Check swarm key** - All nodes must have identical keys +2. **Check firewall** - Port 4001 must be open (TCP/UDP) +3. **Check bootstrap** - At least one reachable bootstrap node +4. **Check logs** - Look for connection errors + +```bash +# Check IPFS logs +docker logs ipfs_53550 2>&1 | grep -i "swarm\|peer" +``` + +### Wrong Network + +If accidentally connecting to public IPFS: + +```bash +# Verify swarm key exists +docker exec ipfs_53550 cat /data/ipfs/swarm.key + +# Verify LIBP2P_FORCE_PNET +docker exec ipfs_53550 env | grep LIBP2P +``` + +### Key Mismatch + +```typescript +// Parse and compare keys +import { parseSwarmKeyFile, swarmKeysMatch } from "./swarmKey" + +const localKey = parseSwarmKeyFile(localKeyContent) +const expectedKey = DEMOS_IPFS_SWARM_KEY + +if (!swarmKeysMatch(localKey, expectedKey)) { + console.error("Swarm key mismatch!") +} +``` diff --git a/documentation/ipfs-reference/08-rpc-endpoints.mdx b/documentation/ipfs-reference/08-rpc-endpoints.mdx new file mode 100644 index 000000000..46d4471d3 --- /dev/null +++ b/documentation/ipfs-reference/08-rpc-endpoints.mdx @@ -0,0 +1,572 @@ +--- +title: "RPC Endpoints" +description: "Complete IPFS RPC API reference" +--- + +# RPC Endpoints + +Complete reference for all IPFS-related RPC endpoints. + +## Content Operations + +### ipfs_add + +Add content to IPFS and pin it to your account. + +```typescript +// Request +{ + method: "ipfs_add", + params: { + content: string, // Base64-encoded content + filename?: string, // Optional filename + duration?: PinDuration, // Pin duration (default: "permanent") + metadata?: object // Optional metadata + } +} + +// Response +{ + cid: string, + size: number, + cost: string, + expiresAt?: number, + duration?: number +} +``` + +### ipfs_get + +Retrieve content by CID. + +```typescript +// Request +{ + method: "ipfs_get", + params: { + cid: string // Content Identifier + } +} + +// Response +{ + content: string, // Base64-encoded content + size: number +} +``` + +### ipfs_pin + +Pin existing content to your account. + +```typescript +// Request +{ + method: "ipfs_pin", + params: { + cid: string, + duration?: PinDuration, + metadata?: object + } +} + +// Response +{ + cid: string, + size: number, + cost: string, + expiresAt?: number +} +``` + +### ipfs_unpin + +Remove a pin from your account. + +```typescript +// Request +{ + method: "ipfs_unpin", + params: { + cid: string + } +} + +// Response +{ + cid: string, + unpinned: true +} +``` + +### ipfs_list_pins + +List all CIDs pinned on this node. + +```typescript +// Request +{ + method: "ipfs_list_pins", + params: {} +} + +// Response +{ + pins: string[] // Array of CIDs +} +``` + +### ipfs_pins + +List pins for a specific account. + +```typescript +// Request +{ + method: "ipfs_pins", + params: { + address: string // Demos address + } +} + +// Response +{ + pins: PinnedContent[] +} + +// PinnedContent +{ + cid: string, + size: number, + timestamp: number, + expiresAt?: number, + duration?: number, + metadata?: object, + costPaid?: string +} +``` + +## Streaming Operations + +### ipfs_add_stream + +Stream upload for large files. + +```typescript +// Request +{ + method: "ipfs_add_stream", + params: { + chunks: string[], // Array of base64 chunks + filename?: string, + duration?: PinDuration, + metadata?: object + } +} + +// Response +{ + cid: string, + size: number, + cost: string, + expiresAt?: number +} +``` + +**Configuration:** +- Chunk size: 256 KB recommended +- Timeout: 10x normal (300s default) + +### ipfs_get_stream + +Stream download for large files. + +```typescript +// Request +{ + method: "ipfs_get_stream", + params: { + cid: string, + chunkSize?: number // Bytes per chunk (default: 262144) + } +} + +// Response (streamed) +{ + chunk: string, // Base64-encoded chunk + index: number, // Chunk index + total: number, // Total chunks + done: boolean // Last chunk flag +} +``` + +## Status & Quota + +### ipfs_status + +Get IPFS node health status. + +```typescript +// Request +{ + method: "ipfs_status", + params: {} +} + +// Response +{ + healthy: boolean, + peerId: string, + peerCount: number, + repoSize: number, + version: string, + timestamp: number +} +``` + +### ipfs_quota + +Get account storage quota. + +```typescript +// Request +{ + method: "ipfs_quota", + params: { + address: string + } +} + +// Response +{ + tier: "regular" | "genesis" | "premium", + usedBytes: number, + maxBytes: number, + availableBytes: number, + usedPins: number, + maxPins: number, + availablePins: number, + freeAllocation: number, + usedFreeBytes: number, + remainingFreeBytes: number, + percentUsed: number +} +``` + +### ipfs_quote + +Get cost estimate for an operation. + +```typescript +// Request +{ + method: "ipfs_quote", + params: { + size: number, // Content size in bytes + duration?: PinDuration, // Pin duration + address: string // Account address + } +} + +// Response +{ + cost: string, + durationSeconds: number, + multiplier: number, + withinFreeTier: boolean, + freeBytes: number, + chargeableBytes: number +} +``` + +## Swarm Management + +### ipfs_swarm_peers + +List connected IPFS peers. + +```typescript +// Request +{ + method: "ipfs_swarm_peers", + params: {} +} + +// Response +{ + peers: Peer[] +} + +// Peer +{ + peerId: string, + multiaddrs: string[], + latency?: string, + direction: "inbound" | "outbound" +} +``` + +### ipfs_swarm_connect + +Connect to a specific peer. + +```typescript +// Request +{ + method: "ipfs_swarm_connect", + params: { + multiaddr: string // e.g., "/ip4/1.2.3.4/tcp/4001/p2p/QmPeer..." + } +} + +// Response +{ + connected: true, + peerId: string +} +``` + +### ipfs_swarm_disconnect + +Disconnect from a peer. + +```typescript +// Request +{ + method: "ipfs_swarm_disconnect", + params: { + peerId: string + } +} + +// Response +{ + disconnected: true +} +``` + +### ipfs_bootstrap_list + +List bootstrap nodes. + +```typescript +// Request +{ + method: "ipfs_bootstrap_list", + params: {} +} + +// Response +{ + nodes: string[] // Multiaddresses +} +``` + +### ipfs_demos_peers + +List Demos network peers with IPFS info. + +```typescript +// Request +{ + method: "ipfs_demos_peers", + params: {} +} + +// Response +{ + peers: DemosPeer[] +} + +// DemosPeer +{ + demosAddress: string, + ipfsPeerId?: string, + ipfsMultiaddrs?: string[], + connected: boolean +} +``` + +### ipfs_cluster_pin + +Pin content across multiple nodes. + +```typescript +// Request +{ + method: "ipfs_cluster_pin", + params: { + cid: string, + replicationFactor?: number // Target node count + } +} + +// Response +{ + cid: string, + pinnedOn: string[], // Peer IDs + errors: ClusterError[] +} + +// ClusterError +{ + peerId: string, + error: string +} +``` + +## Public Bridge + +### ipfs_public_fetch + +Fetch content from public IPFS gateway. + +```typescript +// Request +{ + method: "ipfs_public_fetch", + params: { + cid: string, + gateway?: string // Override gateway URL + } +} + +// Response +{ + content: string, // Base64-encoded + size: number, + gateway: string // Gateway used +} +``` + +### ipfs_public_publish + +Publish content to public IPFS network. + +```typescript +// Request +{ + method: "ipfs_public_publish", + params: { + cid: string + } +} + +// Response +{ + published: boolean, + cid: string, + gateways: string[] // Where published +} +``` + +**Note:** Requires `DEMOS_IPFS_ALLOW_PUBLIC_PUBLISH=true` + +### ipfs_public_check + +Check if content is available on public IPFS. + +```typescript +// Request +{ + method: "ipfs_public_check", + params: { + cid: string, + gateways?: string[] // Gateways to check + } +} + +// Response +{ + cid: string, + available: boolean, + gateways: GatewayStatus[] +} + +// GatewayStatus +{ + url: string, + available: boolean, + latency?: number +} +``` + +### ipfs_rate_limit_status + +Get public bridge rate limit status. + +```typescript +// Request +{ + method: "ipfs_rate_limit_status", + params: {} +} + +// Response +{ + requestsUsed: number, + requestsLimit: number, + bytesUsed: number, + bytesLimit: number, + resetAt: number, // Unix timestamp + throttled: boolean +} +``` + +## Error Responses + +All endpoints may return errors: + +```typescript +{ + error: { + code: string, + message: string, + details?: object + } +} +``` + +### Common Error Codes + +| Code | Description | +|------|-------------| +| `IPFS_INVALID_CID` | Malformed CID format | +| `IPFS_NOT_FOUND` | Content not found | +| `IPFS_QUOTA_EXCEEDED` | Storage limit reached | +| `IPFS_CONNECTION_ERROR` | Cannot reach IPFS daemon | +| `IPFS_TIMEOUT_ERROR` | Operation timed out | +| `IPFS_ALREADY_PINNED` | Already pinned by account | +| `IPFS_PIN_NOT_FOUND` | Pin doesn't exist | +| `INSUFFICIENT_BALANCE` | Not enough DEM | +| `INVALID_DURATION` | Invalid pin duration | + +## Type Definitions + +### PinDuration + +```typescript +type PinDuration = + | "permanent" + | "week" + | "month" + | "quarter" + | "year" + | number // Custom seconds (86400 - 315360000) +``` + +### PinnedContent + +```typescript +interface PinnedContent { + cid: string + size: number + timestamp: number + expiresAt?: number + duration?: number + metadata?: object + wasFree?: boolean + freeBytes?: number + costPaid?: string +} +``` diff --git a/documentation/ipfs-reference/09-errors.mdx b/documentation/ipfs-reference/09-errors.mdx new file mode 100644 index 000000000..6f0b52ccb --- /dev/null +++ b/documentation/ipfs-reference/09-errors.mdx @@ -0,0 +1,375 @@ +--- +title: "Error Handling" +description: "IPFS error types, codes, and handling" +--- + +# Error Handling + +Comprehensive guide to IPFS error handling. + +## Error Hierarchy + +``` +IPFSError (base) +├── IPFSConnectionError +├── IPFSTimeoutError +├── IPFSNotFoundError +├── IPFSInvalidCIDError +└── IPFSAPIError +``` + +## Error Classes + +### IPFSError + +Base class for all IPFS errors. + +```typescript +class IPFSError extends Error { + code: string + cause?: Error + + constructor(message: string, code: string, cause?: Error) +} +``` + +### IPFSConnectionError + +Thrown when the IPFS daemon is unreachable. + +```typescript +class IPFSConnectionError extends IPFSError { + // code: "IPFS_CONNECTION_ERROR" +} + +// Example +throw new IPFSConnectionError( + "Cannot connect to IPFS daemon at localhost:54550" +) +``` + +**Common Causes:** +- IPFS container not running +- Wrong port configuration +- Network issues +- Container startup delay + +### IPFSTimeoutError + +Thrown when an operation exceeds timeout. + +```typescript +class IPFSTimeoutError extends IPFSError { + timeoutMs: number + // code: "IPFS_TIMEOUT_ERROR" +} + +// Example +throw new IPFSTimeoutError("get", 30000) +// "IPFS operation 'get' timed out after 30000ms" +``` + +**Common Causes:** +- Large file operations +- Network congestion +- Content not available +- Slow peers + +### IPFSNotFoundError + +Thrown when content is not found. + +```typescript +class IPFSNotFoundError extends IPFSError { + cid: string + // code: "IPFS_NOT_FOUND" +} + +// Example +throw new IPFSNotFoundError("QmInvalidOrMissing...") +// "Content not found for CID: QmInvalidOrMissing..." +``` + +**Common Causes:** +- Content never existed +- Content unpinned everywhere +- Garbage collected +- CID typo + +### IPFSInvalidCIDError + +Thrown when CID format is invalid. + +```typescript +class IPFSInvalidCIDError extends IPFSError { + cid: string + // code: "IPFS_INVALID_CID" +} + +// Example +throw new IPFSInvalidCIDError("not-a-valid-cid") +// "Invalid CID format: not-a-valid-cid" +``` + +**Valid CID Formats:** +- CIDv0: `Qm[base58]{44}` (46 chars total) +- CIDv1: `bafy[base32]{50+}` + +### IPFSAPIError + +Thrown when Kubo API returns an error. + +```typescript +class IPFSAPIError extends IPFSError { + statusCode?: number + apiMessage?: string + // code: "IPFS_API_ERROR" +} + +// Example +throw new IPFSAPIError("pin failed", 500, "already pinned") +``` + +## Error Codes + +| Code | Description | Recoverable | +|------|-------------|-------------| +| `IPFS_CONNECTION_ERROR` | Daemon unreachable | Retry with backoff | +| `IPFS_TIMEOUT_ERROR` | Operation timeout | Retry, increase timeout | +| `IPFS_NOT_FOUND` | Content not found | No | +| `IPFS_INVALID_CID` | Bad CID format | No (fix input) | +| `IPFS_API_ERROR` | Kubo error | Depends on cause | +| `IPFS_QUOTA_EXCEEDED` | Account limit | No (unpin or upgrade) | +| `IPFS_ALREADY_PINNED` | Duplicate pin | No (already done) | +| `IPFS_PIN_NOT_FOUND` | Pin doesn't exist | No | +| `IPFS_INVALID_DURATION` | Bad duration | No (fix input) | +| `INSUFFICIENT_BALANCE` | No funds | No (add funds) | + +## CID Validation + +### Valid Formats + +```typescript +// CIDv0 - starts with Qm, 46 characters +const cidv0Pattern = /^Qm[1-9A-HJ-NP-Za-km-z]{44}$/ + +// CIDv1 - starts with bafy/bafk/bafz/bafb +const cidv1Pattern = /^(bafy|bafk|bafz|bafb)[a-z2-7]{50,}$/ +``` + +### Validation Function + +```typescript +function isValidCID(cid: string): boolean { + if (!cid || typeof cid !== "string") { + return false + } + + // CIDv0: Qm + 44 base58 characters + if (cid.startsWith("Qm") && cid.length === 46) { + return /^Qm[1-9A-HJ-NP-Za-km-z]{44}$/.test(cid) + } + + // CIDv1: bafy/bafk/bafz/bafb prefix + if (/^(bafy|bafk|bafz|bafb)/.test(cid)) { + return /^(bafy|bafk|bafz|bafb)[a-z2-7]{50,}$/.test(cid) + } + + return false +} +``` + +## Input Validation + +### Numeric Validation + +All numeric inputs are checked for: + +```typescript +function validateNumericInput(value: number, field: string): void { + if (typeof value !== "number" || Number.isNaN(value)) { + throw new Error(`${field} must be a valid number`) + } + + if (value < 0) { + throw new Error(`${field} cannot be negative`) + } + + if (!Number.isFinite(value)) { + throw new Error(`${field} must be finite`) + } +} +``` + +### Duration Validation + +```typescript +function validateDuration(duration: PinDuration): void { + if (duration === "permanent") return + + const presets = ["week", "month", "quarter", "year"] + if (typeof duration === "string" && presets.includes(duration)) { + return + } + + if (typeof duration === "number") { + if (duration < 86400) { + throw new Error("Duration must be at least 1 day (86400 seconds)") + } + if (duration > 315360000) { + throw new Error("Duration cannot exceed 10 years") + } + return + } + + throw new Error("Invalid duration format") +} +``` + +## Error Handling Examples + +### Basic Try-Catch + +```typescript +try { + const result = await client.ipfsAdd({ + content: data, + duration: "month" + }) +} catch (error) { + if (error instanceof IPFSQuotaExceededError) { + console.error("Storage limit reached. Unpin some content.") + } else if (error instanceof IPFSConnectionError) { + console.error("IPFS service unavailable. Retrying...") + await retry(() => client.ipfsAdd({ content: data })) + } else { + throw error + } +} +``` + +### Retry with Backoff + +```typescript +async function withRetry( + operation: () => Promise, + maxRetries: number = 5 +): Promise { + let lastError: Error + + for (let attempt = 0; attempt < maxRetries; attempt++) { + try { + return await operation() + } catch (error) { + lastError = error + + // Only retry connection/timeout errors + if (error instanceof IPFSConnectionError || + error instanceof IPFSTimeoutError) { + const delay = Math.min(1000 * Math.pow(2, attempt), 30000) + await sleep(delay) + continue + } + + // Don't retry other errors + throw error + } + } + + throw lastError +} +``` + +### Error Response Handling + +```typescript +const response = await client.ipfsAdd(params) + +if (response.error) { + switch (response.error.code) { + case "IPFS_QUOTA_EXCEEDED": + const { current, limit } = response.error.details + console.log(`Quota: ${current}/${limit} bytes`) + break + + case "INSUFFICIENT_BALANCE": + const { required, available } = response.error.details + console.log(`Need ${required} DEM, have ${available}`) + break + + default: + console.error(response.error.message) + } +} +``` + +## Best Practices + +### Validate Before Sending + +```typescript +function prepareIPFSAdd(content: string, duration?: PinDuration) { + // Validate content + if (!content || content.length === 0) { + throw new Error("Content cannot be empty") + } + + // Validate size (16 MB limit for NodeCalls) + const size = Buffer.from(content, "base64").length + if (size > 16 * 1024 * 1024) { + throw new Error("Content exceeds 16 MB limit. Use streaming.") + } + + // Validate duration + if (duration) { + validateDuration(duration) + } + + return { content, duration } +} +``` + +### Check Quota Before Large Operations + +```typescript +async function safeAdd(address: string, content: string) { + const size = Buffer.from(content, "base64").length + + // Check quota first + const quota = await client.ipfsQuota({ address }) + if (quota.availableBytes < size) { + throw new Error(`Insufficient quota: need ${size}, have ${quota.availableBytes}`) + } + + // Check balance + const quote = await client.ipfsQuote({ size, address }) + const balance = await client.getBalance(address) + if (BigInt(balance) < BigInt(quote.cost)) { + throw new Error(`Insufficient balance: need ${quote.cost} DEM`) + } + + // Proceed with add + return client.ipfsAdd({ content }) +} +``` + +### Log Errors Appropriately + +```typescript +function handleIPFSError(error: Error, context: object) { + if (error instanceof IPFSError) { + logger.error({ + code: error.code, + message: error.message, + ...context, + cause: error.cause?.message + }) + } else { + logger.error({ + message: error.message, + stack: error.stack, + ...context + }) + } +} +``` diff --git a/documentation/ipfs-reference/10-configuration.mdx b/documentation/ipfs-reference/10-configuration.mdx new file mode 100644 index 000000000..5d8858a0a --- /dev/null +++ b/documentation/ipfs-reference/10-configuration.mdx @@ -0,0 +1,304 @@ +--- +title: "Configuration" +description: "IPFS environment variables and settings" +--- + +# Configuration + +Complete reference for IPFS configuration options. + +## Environment Variables + +### Core Settings + +| Variable | Default | Description | +|----------|---------|-------------| +| `IPFS_API_PORT` | `54550` | Kubo HTTP API port | +| `IPFS_VERBOSE_LOGGING` | `false` | Enable debug logging | + +### Private Network + +| Variable | Default | Description | +|----------|---------|-------------| +| `DEMOS_IPFS_SWARM_KEY` | Built-in | 64-char hex swarm key | +| `LIBP2P_FORCE_PNET` | `1` | Force private network mode | +| `DEMOS_IPFS_PUBLIC_MODE` | `false` | Join public IPFS instead | +| `DEMOS_IPFS_BOOTSTRAP_NODES` | - | Comma-separated multiaddrs | + +### Peer Management + +| Variable | Default | Description | +|----------|---------|-------------| +| `DEMOS_IPFS_MAX_PEERS` | `100` | Maximum peer connections | +| `DEMOS_IPFS_MIN_PEERS` | `4` | Minimum peers to maintain | + +### Public Bridge + +| Variable | Default | Description | +|----------|---------|-------------| +| `DEMOS_IPFS_PUBLIC_BRIDGE_ENABLED` | `false` | Enable public gateway access | +| `DEMOS_IPFS_PUBLIC_GATEWAY` | `https://ipfs.io` | Primary gateway URL | +| `DEMOS_IPFS_ALLOW_PUBLIC_PUBLISH` | `false` | Allow publishing to public | +| `DEMOS_IPFS_PUBLIC_TIMEOUT` | `30000` | Gateway timeout (ms) | +| `DEMOS_IPFS_PUBLIC_MAX_REQUESTS` | `30` | Max requests per minute | +| `DEMOS_IPFS_PUBLIC_MAX_BYTES` | `104857600` | Max bytes per minute (100 MB) | + +## Docker Configuration + +### docker-compose.yml + +```yaml +services: + ipfs: + image: ipfs/kubo:v0.26.0 + container_name: ipfs_${PORT:-53550} + environment: + IPFS_PROFILE: server + IPFS_GATEWAY_WRITABLE: "false" + LIBP2P_FORCE_PNET: "1" + ports: + - "4001:4001" # Swarm (TCP/UDP) + - "54550:5001" # API + - "58080:8080" # Gateway (optional) + volumes: + - ./data_${PORT:-53550}/ipfs:/data/ipfs + - ./init-ipfs.sh:/container-init.d/init-ipfs.sh:ro + restart: unless-stopped + healthcheck: + test: ["CMD", "ipfs", "id"] + interval: 30s + timeout: 10s + retries: 3 +``` + +### Port Mapping + +| Internal | External | Purpose | +|----------|----------|---------| +| 4001 | 4001 | Swarm (P2P) | +| 5001 | 54550 | HTTP API | +| 8080 | 58080 | Gateway | + +### Volume Structure + +``` +data_53550/ +└── ipfs/ + ├── blocks/ # Content storage + ├── datastore/ # Internal database + ├── keystore/ # Node keys + └── swarm.key # Private network key +``` + +## Initialization Script + +### init-ipfs.sh + +```bash +#!/bin/bash +set -e + +# Initialize IPFS if needed +if [ ! -f /data/ipfs/config ]; then + ipfs init --profile=server +fi + +# Write swarm key for private network +cat > /data/ipfs/swarm.key << 'EOF' +/key/swarm/psk/1.0.0/ +/base16/ +1d8b2cfa0ee76011ab655cec98be549f3f5cd81199b1670003ec37c0db0592e4 +EOF + +# Clear default bootstrap for private network +ipfs bootstrap rm --all + +# Add custom bootstrap if configured +if [ -n "$DEMOS_IPFS_BOOTSTRAP_NODES" ]; then + IFS=',' read -ra NODES <<< "$DEMOS_IPFS_BOOTSTRAP_NODES" + for node in "${NODES[@]}"; do + ipfs bootstrap add "$node" || true + done +fi + +# Configure API access +ipfs config Addresses.API /ip4/0.0.0.0/tcp/5001 +ipfs config Addresses.Gateway /ip4/0.0.0.0/tcp/8080 + +# Set connection limits +ipfs config --json Swarm.ConnMgr.LowWater ${DEMOS_IPFS_MIN_PEERS:-4} +ipfs config --json Swarm.ConnMgr.HighWater ${DEMOS_IPFS_MAX_PEERS:-100} + +echo "IPFS initialized successfully" +``` + +## Constants + +### Quota Limits + +```typescript +const IPFS_QUOTA_LIMITS = { + regular: { + maxPinnedBytes: 1_073_741_824, // 1 GB + maxPinCount: 1_000 + }, + genesis: { + maxPinnedBytes: 10_737_418_240, // 10 GB + maxPinCount: 10_000 + }, + premium: { + maxPinnedBytes: 107_374_182_400, // 100 GB + maxPinCount: 100_000 + } +} +``` + +### Pricing + +```typescript +// Regular accounts +const REGULAR_MIN_COST = 1n // 1 DEM minimum +const REGULAR_BYTES_PER_UNIT = 104857600 // 100 MB + +// Genesis accounts +const GENESIS_FREE_BYTES = 1073741824 // 1 GB free +const GENESIS_BYTES_PER_UNIT = 1073741824 // 1 GB per DEM + +// Duration multipliers +const PIN_DURATION_PRICING = { + week: 0.10, + month: 0.25, + quarter: 0.50, + year: 0.80, + permanent: 1.00 +} +``` + +### Durations + +```typescript +const PIN_DURATION_SECONDS = { + permanent: 0, + week: 604_800, + month: 2_592_000, + quarter: 7_776_000, + year: 31_536_000 +} + +const MIN_CUSTOM_DURATION = 86_400 // 1 day +const MAX_CUSTOM_DURATION = 315_360_000 // 10 years +``` + +### Timeouts + +```typescript +const DEFAULT_TIMEOUT = 30_000 // 30 seconds +const STREAM_TIMEOUT_MULTIPLIER = 10 // 10x for streaming +const STREAM_CHUNK_SIZE = 262_144 // 256 KB +``` + +### Expiration Worker + +```typescript +const EXPIRATION_CHECK_INTERVAL = 3_600_000 // 1 hour +const EXPIRATION_GRACE_PERIOD = 86_400_000 // 24 hours +const EXPIRATION_BATCH_SIZE = 100 +``` + +## Example Configurations + +### Development + +```bash +# .env.development +PORT=53550 +IPFS_API_PORT=54550 +IPFS_VERBOSE_LOGGING=true +DEMOS_IPFS_PUBLIC_MODE=true # Use public IPFS for testing +``` + +### Production (Private Network) + +```bash +# .env.production +PORT=53550 +IPFS_API_PORT=54550 +IPFS_VERBOSE_LOGGING=false +LIBP2P_FORCE_PNET=1 +DEMOS_IPFS_BOOTSTRAP_NODES=/ip4/prod1.demos.network/tcp/4001/p2p/QmPeer1,/ip4/prod2.demos.network/tcp/4001/p2p/QmPeer2 +DEMOS_IPFS_MAX_PEERS=200 +DEMOS_IPFS_MIN_PEERS=10 +``` + +### With Public Bridge + +```bash +# Enable public gateway access +DEMOS_IPFS_PUBLIC_BRIDGE_ENABLED=true +DEMOS_IPFS_PUBLIC_GATEWAY=https://ipfs.io +DEMOS_IPFS_ALLOW_PUBLIC_PUBLISH=false +DEMOS_IPFS_PUBLIC_MAX_REQUESTS=60 +DEMOS_IPFS_PUBLIC_MAX_BYTES=209715200 # 200 MB +``` + +### Custom Swarm Key (Test Network) + +```bash +# Generate with: openssl rand -hex 32 +DEMOS_IPFS_SWARM_KEY=abc123...your64characterhexkey... +DEMOS_IPFS_BOOTSTRAP_NODES=/ip4/testnet.local/tcp/4001/p2p/QmTestPeer +``` + +## Troubleshooting + +### Check IPFS Status + +```bash +# Container status +docker ps | grep ipfs + +# IPFS health +docker exec ipfs_53550 ipfs id + +# Peer count +docker exec ipfs_53550 ipfs swarm peers | wc -l + +# Repo stats +docker exec ipfs_53550 ipfs repo stat +``` + +### View Logs + +```bash +# Docker logs +docker logs ipfs_53550 --tail 100 -f + +# Filter errors +docker logs ipfs_53550 2>&1 | grep -i error +``` + +### Reset IPFS + +```bash +# Stop container +docker stop ipfs_53550 + +# Remove data (WARNING: deletes all content) +rm -rf data_53550/ipfs + +# Restart +docker start ipfs_53550 +``` + +### Connection Issues + +```bash +# Check firewall +sudo ufw status | grep 4001 + +# Test connectivity +nc -zv node.demos.network 4001 + +# Check swarm key +docker exec ipfs_53550 cat /data/ipfs/swarm.key +``` diff --git a/documentation/ipfs-reference/11-public-bridge.mdx b/documentation/ipfs-reference/11-public-bridge.mdx new file mode 100644 index 000000000..7722607b4 --- /dev/null +++ b/documentation/ipfs-reference/11-public-bridge.mdx @@ -0,0 +1,330 @@ +--- +title: "Public Bridge" +description: "Optional public IPFS gateway integration" +--- + +# Public Bridge + +The public bridge provides optional access to the public IPFS network for content retrieval and publishing. + +## Overview + +By default, Demos nodes operate in a private IPFS network. The public bridge enables: + +- **Fetching** content from public gateways +- **Publishing** content to the public network (optional) +- **Availability checks** across multiple gateways + +**Status:** Disabled by default. Enable explicitly if needed. + +## Configuration + +### Enable Public Bridge + +```bash +DEMOS_IPFS_PUBLIC_BRIDGE_ENABLED=true +``` + +### Full Configuration + +```bash +# Enable the bridge +DEMOS_IPFS_PUBLIC_BRIDGE_ENABLED=true + +# Primary gateway (fallbacks available) +DEMOS_IPFS_PUBLIC_GATEWAY=https://ipfs.io + +# Allow publishing to public network +DEMOS_IPFS_ALLOW_PUBLIC_PUBLISH=false + +# Timeout for gateway requests (ms) +DEMOS_IPFS_PUBLIC_TIMEOUT=30000 + +# Rate limiting +DEMOS_IPFS_PUBLIC_MAX_REQUESTS=30 # Per minute +DEMOS_IPFS_PUBLIC_MAX_BYTES=104857600 # 100 MB per minute +``` + +## Gateway List + +When the primary gateway fails, fallbacks are tried in order: + +| Gateway | URL | +|---------|-----| +| Primary (configurable) | `https://ipfs.io` | +| Fallback 1 | `https://dweb.link` | +| Fallback 2 | `https://cloudflare-ipfs.com` | +| Fallback 3 | `https://gateway.pinata.cloud` | + +## Operations + +### Fetch from Public Network + +Retrieve content from public IPFS via gateways: + +```typescript +const result = await client.ipfsPublicFetch({ + cid: "QmPublicContent...", + gateway: "https://ipfs.io" // Optional, uses default +}) + +console.log(result) +// { +// content: "base64...", +// size: 1024, +// gateway: "https://ipfs.io" +// } +``` + +### Check Public Availability + +Verify content availability across gateways: + +```typescript +const result = await client.ipfsPublicCheck({ + cid: "QmContent...", + gateways: [ + "https://ipfs.io", + "https://dweb.link", + "https://cloudflare-ipfs.com" + ] +}) + +console.log(result) +// { +// cid: "QmContent...", +// available: true, +// gateways: [ +// { url: "https://ipfs.io", available: true, latency: 245 }, +// { url: "https://dweb.link", available: true, latency: 312 }, +// { url: "https://cloudflare-ipfs.com", available: false } +// ] +// } +``` + +### Publish to Public Network + +Make Demos content available on public IPFS: + +```typescript +// Requires: DEMOS_IPFS_ALLOW_PUBLIC_PUBLISH=true + +const result = await client.ipfsPublicPublish({ + cid: "QmDemosContent..." +}) + +console.log(result) +// { +// published: true, +// cid: "QmDemosContent...", +// gateways: ["https://ipfs.io", "https://dweb.link"] +// } +``` + +**Warning:** Publishing exposes content to the public internet. Only publish content intended for public access. + +## Rate Limiting + +Public bridge access is rate-limited to prevent abuse: + +### Limits + +| Metric | Default | Description | +|--------|---------|-------------| +| Requests | 30/min | Maximum requests per minute | +| Bytes | 100 MB/min | Maximum data transfer per minute | + +### Check Status + +```typescript +const status = await client.ipfsRateLimitStatus() + +console.log(status) +// { +// requestsUsed: 12, +// requestsLimit: 30, +// bytesUsed: 52428800, +// bytesLimit: 104857600, +// resetAt: 1704067260000, +// throttled: false +// } +``` + +### Throttling Behavior + +When limits are exceeded: + +1. New requests return `RATE_LIMIT_EXCEEDED` error +2. Wait until `resetAt` timestamp +3. Limits reset automatically after 1 minute + +```typescript +if (status.throttled) { + const waitMs = status.resetAt - Date.now() + console.log(`Rate limited. Retry in ${waitMs}ms`) +} +``` + +## Use Cases + +### Import from Public IPFS + +Fetch and pin public content to your Demos account: + +```typescript +// 1. Fetch from public network +const publicContent = await client.ipfsPublicFetch({ + cid: "QmPublicData..." +}) + +// 2. Add to Demos (creates local copy with pin) +const result = await client.ipfsAdd({ + content: publicContent.content, + duration: "permanent" +}) + +console.log(`Imported as ${result.cid}`) +``` + +### Verify External Availability + +Check if Demos content is accessible externally: + +```typescript +async function ensurePubliclyAvailable(cid: string) { + // First, pin in Demos + await client.ipfsPin({ cid, duration: "permanent" }) + + // Publish to public network + if (process.env.DEMOS_IPFS_ALLOW_PUBLIC_PUBLISH === "true") { + await client.ipfsPublicPublish({ cid }) + } + + // Verify availability + const check = await client.ipfsPublicCheck({ cid }) + + if (!check.available) { + console.warn("Content not yet available on public gateways") + } + + return check +} +``` + +### Gateway Fallback + +Implement robust fetching with fallbacks: + +```typescript +const GATEWAYS = [ + "https://ipfs.io", + "https://dweb.link", + "https://cloudflare-ipfs.com", + "https://gateway.pinata.cloud" +] + +async function fetchWithFallback(cid: string) { + for (const gateway of GATEWAYS) { + try { + return await client.ipfsPublicFetch({ cid, gateway }) + } catch (error) { + console.warn(`${gateway} failed, trying next...`) + } + } + throw new Error("All gateways failed") +} +``` + +## Security Considerations + +### Data Exposure + +Content published to public IPFS is accessible to anyone: + +- No access control on public gateways +- Content may be cached by third parties +- Cannot "unpublish" from public network + +### Gateway Trust + +Public gateways are third-party services: + +- May have different privacy policies +- Could modify or censor content +- Subject to their rate limits + +### Best Practices + +```typescript +// DO: Verify content integrity after fetch +const content = await client.ipfsPublicFetch({ cid }) +const verified = verifyCID(content.content, cid) + +// DO: Use timeouts for gateway requests +const result = await Promise.race([ + client.ipfsPublicFetch({ cid }), + timeout(30000) +]) + +// DON'T: Publish sensitive data +// await client.ipfsPublicPublish({ cid: sensitiveDataCid }) +``` + +## Troubleshooting + +### Gateway Timeouts + +```typescript +// Increase timeout for slow gateways +DEMOS_IPFS_PUBLIC_TIMEOUT=60000 +``` + +### Rate Limit Issues + +```typescript +// Check current usage +const status = await client.ipfsRateLimitStatus() + +// Increase limits if needed +DEMOS_IPFS_PUBLIC_MAX_REQUESTS=60 +DEMOS_IPFS_PUBLIC_MAX_BYTES=209715200 // 200 MB +``` + +### Gateway Errors + +```bash +# Test gateway directly +curl -I "https://ipfs.io/ipfs/QmTest..." + +# Check DNS resolution +nslookup ipfs.io +``` + +## Type Definitions + +```typescript +interface PublicBridgeConfig { + enabled: boolean + gatewayUrl: string + allowPublish: boolean + timeout: number + maxRequestsPerMinute: number + maxBytesPerMinute: number +} + +interface GatewayStatus { + url: string + available: boolean + latency?: number + error?: string +} + +interface RateLimitStatus { + requestsUsed: number + requestsLimit: number + bytesUsed: number + bytesLimit: number + resetAt: number + throttled: boolean +} +``` diff --git a/documentation/ipfs-reference/_index.mdx b/documentation/ipfs-reference/_index.mdx new file mode 100644 index 000000000..bc6920680 --- /dev/null +++ b/documentation/ipfs-reference/_index.mdx @@ -0,0 +1,160 @@ +--- +title: "IPFS Technical Reference" +description: "Complete technical reference for IPFS integration in the Demos Network" +--- + +# IPFS Technical Reference + +Complete technical documentation for the IPFS integration in the Demos Network. + +## Quick Navigation + +| Section | Description | +|---------|-------------| +| [Overview](./01-overview) | Introduction and quick start | +| [Architecture](./02-architecture) | System design and components | +| [Transactions](./03-transactions) | Blockchain transaction types | +| [Pricing](./04-pricing) | Cost calculation and tokenomics | +| [Quotas](./05-quotas) | Storage limits and enforcement | +| [Pin Expiration](./06-pin-expiration) | Time-limited pins and cleanup | +| [Private Network](./07-private-network) | Swarm key and network isolation | +| [RPC Endpoints](./08-rpc-endpoints) | Complete API reference | +| [Errors](./09-errors) | Error handling and codes | +| [Configuration](./10-configuration) | Environment variables and settings | +| [Public Bridge](./11-public-bridge) | Optional public gateway access | + +## Feature Summary + +### Core Features + +- **Content-addressed storage** - Data identified by cryptographic hash (CID) +- **Blockchain integration** - Storage operations as consensus transactions +- **Account-based quotas** - Per-account storage limits +- **Token payments** - DEM tokens for storage costs + +### Storage Options + +- **Permanent pins** - Content stored indefinitely +- **Time-limited pins** - Automatic expiration with pricing discounts +- **Duration presets** - week, month, quarter, year +- **Custom durations** - 1 day to 10 years + +### Account Tiers + +| Tier | Storage | Pins | Free Tier | +|------|---------|------|-----------| +| Regular | 1 GB | 1,000 | None | +| Genesis | 10 GB | 10,000 | 1 GB | + +### Pricing + +| Account | Rate | Minimum | +|---------|------|---------| +| Regular | 1 DEM / 100 MB | 1 DEM | +| Genesis | 1 DEM / 1 GB (after free tier) | 0 DEM | + +## Quick Start + +### Add Content + +```typescript +import { DemosClient } from "@anthropic/demos-sdk" + +const client = new DemosClient() + +// Add and pin content +const result = await client.ipfsAdd({ + content: Buffer.from("Hello, Demos!").toString("base64"), + duration: "month" +}) + +console.log(`CID: ${result.cid}`) +console.log(`Cost: ${result.cost} DEM`) +``` + +### Retrieve Content + +```typescript +const content = await client.ipfsGet({ + cid: "QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG" +}) + +const data = Buffer.from(content.content, "base64") +console.log(data.toString()) +``` + +### Check Quota + +```typescript +const quota = await client.ipfsQuota({ + address: "your-demos-address" +}) + +console.log(`Used: ${quota.usedBytes} / ${quota.maxBytes} bytes`) +console.log(`Pins: ${quota.usedPins} / ${quota.maxPins}`) +``` + +## Key Concepts + +### Content Identifier (CID) + +Every piece of content has a unique identifier derived from its hash: + +``` +CIDv0: QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG +CIDv1: bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi +``` + +### Pinning + +Pinning marks content to prevent garbage collection: + +1. Content stored on your node +2. Recorded in your account state +3. Costs DEM based on size and duration +4. Counts against your quota + +### Private Network + +Demos operates a private IPFS swarm: + +- Isolated from public IPFS network +- All Demos nodes share the same swarm key +- Optimized for network performance +- Optional public bridge for external access + +## File Structure + +``` +ipfs-reference/ +├── _index.mdx # This file +├── 01-overview.mdx # Introduction +├── 02-architecture.mdx # System design +├── 03-transactions.mdx # Transaction types +├── 04-pricing.mdx # Cost calculation +├── 05-quotas.mdx # Storage limits +├── 06-pin-expiration.mdx # Expiration system +├── 07-private-network.mdx # Swarm configuration +├── 08-rpc-endpoints.mdx # API reference +├── 09-errors.mdx # Error handling +├── 10-configuration.mdx # Settings +└── 11-public-bridge.mdx # Public gateway +``` + +## Source Code + +| Component | Path | +|-----------|------| +| IPFSManager | `src/features/ipfs/IPFSManager.ts` | +| ExpirationWorker | `src/features/ipfs/ExpirationWorker.ts` | +| Types | `src/features/ipfs/types.ts` | +| Errors | `src/features/ipfs/errors.ts` | +| Transaction Handlers | `src/libs/blockchain/routines/ipfsOperations.ts` | +| Tokenomics | `src/libs/blockchain/routines/ipfsTokenomics.ts` | +| RPC Handlers | `src/libs/network/routines/nodecalls/ipfs/` | + +## Related Documentation + +- [Demos SDK Documentation](https://docs.demos.network/sdk) +- [IPFS Protocol Specification](https://specs.ipfs.tech/) +- [Kubo Documentation](https://docs.ipfs.tech/reference/kubo/) diff --git a/documentation/tokens.md b/documentation/tokens.md new file mode 100644 index 000000000..39b9d5c50 --- /dev/null +++ b/documentation/tokens.md @@ -0,0 +1,4 @@ +# Tokens + +See `documentation/tokens/README.md`. + diff --git a/documentation/tokens/README.md b/documentation/tokens/README.md new file mode 100644 index 000000000..30fa692af --- /dev/null +++ b/documentation/tokens/README.md @@ -0,0 +1,261 @@ +# Token System (Demos Node) + +This document explains the **native fungible token system** implemented in this node, including: + +- Storage model (DB/GCR) +- Native operations (create/transfer/mint/burn/pause/ACL/script upgrade/ownership transfer) +- Read RPC APIs (`token.*`) +- Token scripting (hooks + views, execution model, determinism constraints) + +It also includes diagrams (Mermaid) to make the flow easier to understand. + +--- + +## 1) Storage model + +### 1.1 Primary source of truth: `gcr_tokens` (`GCRToken`) + +Tokens are stored in Postgres as rows in `gcr_tokens`. The ORM entity is `src/model/entities/GCRv2/GCR_Token.ts`. + +Core fields: + +- **Identity** + - `address`: token address (derived from deployer + nonce + hash) + - `deployer`, `deployerNonce`, `deployTxHash`, `deployedAt` +- **Metadata** + - `name`, `ticker`, `decimals` + - `hasScript` (boolean) +- **State** + - `totalSupply` (string, bigint-like) + - `balances` (`jsonb`: address → string amount) + - `allowances` (`jsonb`: owner → spender → string amount) *(present in schema; native approve/transferFrom are not currently implemented as first-class operations)* + - `customState` (`jsonb`: arbitrary object used by scripts) +- **Access control** + - `owner` (address) + - `paused` (boolean) + - `aclEntries` (`jsonb`: list of `{ address, permissions[], grantedAt, grantedBy }`) +- **Script** + - `script` (`jsonb`: `TokenScript` with code + ABI-like method metadata) + - `scriptVersion`, `lastScriptUpdate` + +### 1.2 Holder pointers: `GCRMain.extended.tokens` + +For UX-friendly token discovery, each holder also has lightweight “token pointers” stored on their `GCRMain` record: + +- `GCRMain.extended.tokens[]` contains `{ tokenAddress, ticker, name, decimals, firstAcquiredAt, lastUpdatedAt }` +- `GCRTokenRoutines` adds/removes these pointers when balances move from/to zero. + +--- + +## 2) Native operations (write path) + +Native token operations are represented as **GCR edits** of type `"token"` (see `src/libs/blockchain/gcr/types/token/GCREditToken.ts`), and are applied by: + +- `src/libs/blockchain/gcr/handleGCR.ts` (`HandleGCR.apply`) +- `src/libs/blockchain/gcr/gcr_routines/GCRTokenRoutines.ts` (`GCRTokenRoutines.apply`) + +Operations: + +- `create`: create a new token row + initial balances/ACL +- `transfer`: move balances and update holder pointers +- `mint`: increase `totalSupply` and recipient balance (permission-gated) +- `burn`: decrease `totalSupply` and burn-from balance (permission-gated when burning others) +- `pause` / `unpause`: toggles `paused` (permission-gated) +- `updateACL` / `grantPermission` / `revokePermission`: manage ACL entries (permission-gated) +- `upgradeScript`: replace script code and metadata (permission-gated) +- `transferOwnership`: set new owner (permission-gated) +- `custom`: invoke a script-defined write method (Phase 5.2; see “Custom methods” notes in §4.4) + +### 2.1 Permissions (ACL) + +Permissions are string-literals defined in `src/libs/blockchain/gcr/types/token/TokenPermissions.ts`: + +- `canMint`, `canBurn`, `canUpgrade`, `canPause`, `canTransferOwnership`, `canModifyACL`, `canExecuteScript` + +Rules of thumb: + +- **Owner** implicitly has all permissions. +- Other addresses must appear in `aclEntries` with the relevant permission(s). + +### 2.2 Pause semantics + +When `paused = true`, operations like `transfer/mint/burn` are rejected (except when the routine is applying a rollback). + +--- + +## 3) Read RPC APIs (`token.*`) + +Node calls are handled in `src/libs/network/manageNodeCall.ts`. + +### 3.1 “Committed” vs “live” + +Many read APIs have a `*Committed` variant. During sync/consensus apply, the node can reject committed reads with: + +- HTTP-like code `409` +- error `"STATE_IN_FLUX"` + +This is guarded by an `inGcrApply` flag and a watchdog timeout (`COMMITTED_READ_IN_FLUX_MAX_MS`). + +### 3.2 Available endpoints + +- `token.get` / `token.getCommitted` + - Returns metadata, full state (`totalSupply/balances/allowances/customState`), and ACL. +- `token.getBalance` / `token.getBalanceCommitted` + - Returns balance for one address. +- `token.getHolderPointers` + - Returns `GCRMain.extended.tokens` for an address. +- `token.callView` / `token.callViewCommitted` + - Executes a **script view** method (`module.exports.views[name]`) and returns `{ value, executionTimeMs, gasUsed }`. + +--- + +## 4) Token scripting + +Token scripts are executed in-process using Node’s `vm` sandbox (`src/libs/scripting/index.ts`). + +### 4.1 Script shape + +A script is a CommonJS module: + +- `module.exports.hooks`: `{ beforeTransfer, afterTransfer, beforeMint, afterMint, beforeBurn, afterBurn, ... }` +- `module.exports.views`: pure read methods callable via `token.callView` +- `module.exports.methods`: custom write methods (see §4.4) + +### 4.2 Hook execution model (transfer/mint/burn) + +When a scripted token receives a native operation, the node: + +1. Builds `tokenData` from the DB entity (`GCRTokenRoutines.tokenToGCRTokenData`) +2. Creates the **native mutations** (transfer/mint/burn) unless it is a self-transfer +3. Executes `before*` hook (if present) + - can `reject` + - can replace `mutations` + - can `setStorage` (writes to `customState`) +4. Applies mutations to balances/supply +5. Executes `after*` hook (if present) + - can `reject` (after mutations) + - can apply additional mutations + - can `setStorage` + +Important invariant: + +- **Self-transfer is a no-op** in the native mutation layer (prevents accidental minting). Scripts can still implement special self-transfer behavior by returning explicit mutations. + +### 4.3 Hook context (`ctx`) and determinism + +The hook context object passed to scripts contains: + +```ts +{ + operation: "transfer" | "mint" | "burn" + operationData: { ... } // e.g. { from, to, amount } + tokenAddress: string + token: tokenData // balances/totalSupply/customState (as BigInts + objects) + txContext: { + caller: string + txHash: string + timestamp: number + blockHeight: number + prevBlockHash: string + } + mutations: TokenMutation[] // current mutation list +} +``` + +Determinism expectations: + +- Hooks must behave deterministically across all validators given the same `(token state, operationData, txContext)`. +- Avoid non-deterministic sources (system time, randomness, I/O). Use `ctx.txContext.timestamp` rather than `Date.now()`. + +Notes on current implementation details: + +- `prevBlockHash` is currently passed as an empty string in token hook requests from `GCRTokenRoutines`. +- `blockHeight` is taken from `tx.blockNumber` (or `0` if missing). +- `timestamp` is `tx.content.timestamp` or `Date.now()` as fallback in some paths. +- Script execution is time-bounded in the VM to reduce risk of a malicious/buggy infinite loop blocking RPC or consensus/sync apply. Defaults can be overridden via env: + - `TOKEN_SCRIPT_COMPILE_TIMEOUT_MS` + - `TOKEN_SCRIPT_VIEW_TIMEOUT_MS` + - `TOKEN_SCRIPT_HOOK_TIMEOUT_MS` + - `TOKEN_SCRIPT_METHOD_TIMEOUT_MS` + - `TOKEN_SCRIPT_ASYNC_TIMEOUT_MS` (best-effort for thenables; cannot preempt a CPU-bound loop after an `await`) + +### 4.4 Custom methods (Phase 5.2 / WIP) + +`GCRTokenRoutines` supports a `"custom"` token operation meant to invoke `module.exports.methods[method]` for scripted tokens. + +This path now passes `scriptCode` to `scriptExecutor.executeMethod`, so custom method dispatch works as intended (subject to the limitations below). + +Current limitations: +- Rollbacks for `"custom"` are intentionally skipped (script state is opaque unless we log/replay mutations). +- `executeMethod` currently returns no mutations (hook-based mutations are for transfer/mint/burn; custom-method mutation plumbing can be added later). + +--- + +## 5) Diagrams + +### 5.1 High-level component flow + +```mermaid +flowchart LR + Client[Client / Wallet] -->|tx with GCR edits| Node[Node / Consensus] + Node -->|HandleGCR.apply| HandleGCR[HandleGCR] + HandleGCR -->|token edit| TokenR[GCRTokenRoutines] + TokenR -->|read/write| DB[(Postgres)] + TokenR -->|hooks/views| Script[ScriptExecutor + HookExecutor] + Script -->|mutations + setStorage| TokenR + TokenR -->|holder pointers| GCRMain[(gcr_main.extended.tokens)] + TokenR -->|token state| GCRTokens[(gcr_tokens)] +``` + +### 5.2 Transfer with hooks (sequence) + +```mermaid +sequenceDiagram + autonumber + participant C as Client + participant N as Node + participant H as HandleGCR + participant R as GCRTokenRoutines + participant S as HookExecutor/ScriptExecutor + participant DB as Postgres + + C->>N: Submit tx (token.transfer) + N->>H: apply(tx) + H->>R: apply(token edit, tx) + R->>DB: SELECT ... FOR UPDATE gcr_tokens + R->>S: executeWithHooks(beforeTransfer) + alt beforeTransfer.reject + S-->>R: rejection + R-->>H: fail + H-->>N: reject tx + else ok + S-->>R: (mutations?, setStorage?) + R->>R: applyMutations(native + script mutations) + R->>S: executeWithHooks(afterTransfer) + S-->>R: (mutations?, setStorage?) + R->>DB: UPDATE gcr_tokens (balances/supply/customState) + R->>DB: update gcr_main.extended.tokens pointers + R-->>H: success + H-->>N: apply ok + end +``` + +### 5.3 Token pause state (simplified) + +```mermaid +stateDiagram-v2 + [*] --> Unpaused + Unpaused --> Paused: pause (canPause) + Paused --> Unpaused: unpause (canPause) + + note right of Paused + transfers/mints/burns rejected + (except rollback apply) + end note +``` + +--- + +## 6) Practical verification (better_testing) + +The `better_testing/` harness contains scenarios that exercised and verified this system end-to-end (across multiple nodes, consensus rounds, and committed reads). See `better_testing/README.md` for runnable scenarios and verified RUN_IDs. diff --git a/documentation/tokens/TEST_RESULTS.md b/documentation/tokens/TEST_RESULTS.md new file mode 100644 index 000000000..6731be41f --- /dev/null +++ b/documentation/tokens/TEST_RESULTS.md @@ -0,0 +1,56 @@ +# Token test runs (better_testing) — results + +This file summarizes **token-related** test runs executed via `better_testing/` and the observed result status. + +Scope: +- Runs are from the multi-node **devnet** harness (4 nodes + postgres). +- Each RUN_ID has artifacts under `better_testing/runs//` (typically `*.summary.json` and sometimes `*.timeseries.jsonl`). +- “Committed” read endpoints (`*Committed`) may transiently return `409 STATE_IN_FLUX` during sync/consensus apply; scenarios treat those as retryable unless stated otherwise. + +If you add new runs, append them here **and** keep `better_testing/README.md` updated. + +--- + +## Verified runs (PASS) + +### token_observe under load (committed read probe) + +These runs produced `token_observe.timeseries.jsonl` and passed local analysis (no divergence on non-null hashes; tail convergence). + +- `token-observe-under-load-plain-20260302-130537` — PASS +- `token-observe-under-load-scripted-20260302-132018` — PASS + +### Complex/branchy token scripts (“complex policy” suite) + +These runs validate deterministic script behavior across nodes (cross-node state convergence and deterministic rejects where applicable): + +- `token_script_complex_policy_smoke-20260303-130602` — PASS + Exercises allowlist/denylist/quota/fees branches, plus invariants like `totalSupply == sum(balances)` and script storage convergence. +- `token_script_complex_policy_smoke-20260303-132251` — PASS +- `token_script_complex_policy_smoke-20260303-150133` — PASS + +- `token_script_complex_policy_ramp-20260303-130724` — PASS + Ramps transfers while complex policy is configured to avoid rejects (useful to catch convergence/perf regressions). + +- `token_script_complex_policy_dynamic_updates-20260303-134836` — PASS + In-band admin updates (owner “command” self-transfers) updating `customState.policyOverride`; validates deterministic reject/accept outcomes and state convergence. + +- `token_script_complex_policy_vesting_lockup-20260303-151227` — PASS + Vesting/lockup gates implemented via **admin-controlled releases** (no time/height-based vesting in the current hook ctx); validates deterministic `vesting_locked` rejects and convergence. + +- `token_script_complex_policy_escrow_state_machine-20260303-153800` — PASS + Escrow-like state machine in `customState` (deposit → pending → approve release/refund → claimed/refunded); validates deterministic `escrow_no_entry` rejects and convergence. + +### Scripted mint/burn ramps (hooks on every op) + +- `token_script_mint_ramp-20260303-112435` — PASS +- `token_script_burn-20260303-123048` — PASS +- `token_script_burn_ramp-20260303-123438` — PASS + +--- + +## Notes / caveats + +- This file only lists runs that have a concrete, recorded RUN_ID in `better_testing/README.md` (i.e. something we can point to and reproduce/inspect). +- Additional token scenarios exist in `better_testing/loadgen/src/`, but should only be marked “Verified” here once a RUN_ID is recorded and artifacts are present. + diff --git a/dtr_implementation/DTR_MINIMAL_IMPLEMENTATION.md b/dtr_implementation/DTR_MINIMAL_IMPLEMENTATION.md deleted file mode 100644 index 7637ad6c4..000000000 --- a/dtr_implementation/DTR_MINIMAL_IMPLEMENTATION.md +++ /dev/null @@ -1,354 +0,0 @@ -# DTR - Minimal Implementation Plan - -## Core Philosophy: Leverage Everything, Add Almost Nothing - -Instead of creating new services, we'll add DTR logic directly into existing flow with minimal code additions. - -## Single Point of Modification - -**File**: `src/libs/network/endpointHandlers.ts` -**Location**: After transaction validation, before mempool storage -**Addition**: ~20 lines of DTR logic - -## Implementation Strategy - -### Step 1: Add DTR Check Function (Minimal) ✅ **COMPLETED** - -**File**: `src/libs/consensus/v2/routines/isValidator.ts` (NEW - 15 lines) - -```typescript -import getShard from "./getShard" -import getCommonValidatorSeed from "./getCommonValidatorSeed" -import { getSharedState } from "../../../utilities/sharedState" - -// Single function - reuses existing logic -export default async function isValidatorForNextBlock(): Promise { - try { - const { commonValidatorSeed } = await getCommonValidatorSeed() - const validators = await getShard(commonValidatorSeed) - const ourIdentity = getSharedState.identity.ed25519.publicKey.toString("hex") - return validators.some(peer => peer.identity === ourIdentity) - } catch { - return false // Conservative fallback - } -} -``` - -### Step 2: Enhanced Transaction Processing with Multi-Validator Retry ✅ **COMPLETED** - -**File**: `src/libs/network/endpointHandlers.ts` -**Modification**: Add comprehensive DTR logic with all-validator retry and fallback - -```typescript -// DTR: Check if we should relay instead of storing locally (Production only) -if (getSharedState.PROD) { - const isValidator = await isValidatorForNextBlock() - - if (!isValidator) { - console.log("[DTR] Non-validator node: attempting relay to all validators") - try { - const { commonValidatorSeed } = await getCommonValidatorSeed() - const validators = await getShard(commonValidatorSeed) - const availableValidators = validators - .filter(v => v.status.online && v.sync.status) - .sort(() => Math.random() - 0.5) // Random order for load balancing - - // Try ALL validators in random order - for (const validator of availableValidators) { - try { - const relayResult = await validator.call({ - method: "nodeCall", - params: [{ type: "RELAY_TX", data: { transaction, validityData } }] - }, true) - - if (relayResult.result === 200) { - return { success: true, response: "Transaction relayed to validator" } - } - } catch (error) { - continue // Try next validator - } - } - - console.log("[DTR] All validators failed, storing locally for background retry") - } catch (relayError) { - console.log("[DTR] Relay system error, storing locally:", relayError) - } - - // Store ValidityData for retry service - getSharedState.validityDataCache.set(transaction.hash, validityData) - } -} - -// Continue with mempool.addTransaction() (validators or fallback) -``` - -### Step 3: Handle Relayed Transactions (Extend Existing) ✅ **COMPLETED** - -**File**: `src/libs/network/manageNodeCall.ts` -**Modification**: Add relay message handling with comprehensive validation - -```typescript -case "RELAY_TX": - // Verify we are actually a validator for next block - const isValidator = await isValidatorForNextBlock() - if (!isValidator) { - response.result = 403 - response.response = "Node is not a validator for next block" - break - } - - const relayData = data as { transaction: Transaction; validityData: ValidityData } - const { transaction, validityData } = relayData - - // Validate transaction coherence (hash matches content) - const isCoherent = TxUtils.isCoherent(transaction) - if (!isCoherent) { - response.result = 400 - response.response = "Transaction coherence validation failed" - break - } - - // Validate transaction signature - const signatureValid = TxUtils.validateSignature(transaction) - if (!signatureValid) { - response.result = 400 - response.response = "Transaction signature validation failed" - break - } - - // Add validated transaction to mempool - await Mempool.addTransaction({ - ...transaction, - reference_block: validityData.data.reference_block, - }) - break -``` - -## Complete Implementation - -### Total New Files: 2 -- `src/libs/consensus/v2/routines/isValidator.ts` (15 lines) -- `src/libs/network/dtr/dtrmanager.ts` (240 lines) - Background retry service - -### Total Modified Files: 4 -- `src/libs/network/endpointHandlers.ts` (+50 lines) - Enhanced DTR logic with multi-validator retry -- `src/libs/network/manageNodeCall.ts` (+55 lines) - RELAY_TX handler with validation -- `src/libs/blockchain/mempool_v2.ts` (+20 lines) - removeTransaction method -- `src/utilities/sharedState.ts` (+3 lines) - ValidityData cache -- `src/index.ts` (+25 lines) - Service startup and graceful shutdown - -### Total Code Addition: ~400 lines - -## Configuration - -**Activation**: Automatically enabled when `PROD=true` in production mode -**Development**: Disabled in development mode for testing flexibility -**Default**: Controlled by existing `PROD` environment variable - -## How It Works - -### Immediate Relay (Real-time) -1. **Transaction arrives** → `manageExecution.ts` → `endpointHandlers.ts` -2. **Validation happens** (existing code) -3. **DTR check**: If `PROD=true` and not validator → attempt relay to ALL validators -4. **Multi-validator relay**: Try all available validators in random order -5. **Success**: Return immediately if any validator accepts -6. **Fallback**: Store locally with ValidityData cache if all validators fail - -### Background Retry (Continuous) -1. **Service runs**: Every 10 seconds on non-validator nodes after sync -2. **Block-aware**: Recalculates validator set only when block number changes -3. **Mempool scan**: Processes all transactions in local mempool -4. **Retry logic**: Attempts relay with fresh validator set, gives up after 10 attempts -5. **Cleanup**: Removes successfully relayed transactions from local mempool - -## Leverages Existing Infrastructure - -- ✅ **Validator Selection**: Uses `getShard()` + `getCommonValidatorSeed()` -- ✅ **P2P Communication**: Uses `peer.call()` -- ✅ **Transaction Storage**: Uses `Mempool.addTransaction()` -- ✅ **Message Handling**: Extends existing peer message system -- ✅ **Error Handling**: Existing try/catch and logging -- ✅ **Configuration**: Existing environment variable system - -## Zero New Dependencies - -All functionality uses existing imports and patterns. - -## Enhanced Fallback Strategy - -### Immediate Fallback -- **All validators fail** → Store in local mempool with ValidityData cache -- **Network issues** → Graceful degradation to local storage -- **Service errors** → Continue with existing transaction processing - -### Continuous Retry -- **Background service** → Continuously attempts to relay cached transactions -- **Block-aware optimization** → Only recalculates validators when block changes -- **Bounded retries** → Gives up after 10 attempts to prevent infinite loops -- **Memory management** → Cleans up ValidityData cache on success/failure - -## Testing - -Since we're reusing existing functions: -- **Unit Test**: Only test the 15-line `isValidator.ts` -- **Integration Test**: Test the relay message handling -- **Everything else**: Already tested in existing consensus system - -This approach provides production-ready DTR functionality with comprehensive retry mechanisms and robust fallback strategies. - -## Key Improvements Implemented - -### Enhanced Reliability -- **Multi-validator retry**: Attempts relay to ALL available validators in random order -- **Background retry service**: Continuously retries failed transactions every 10 seconds -- **Block-aware optimization**: Only recalculates validators when block number changes -- **Graceful fallback**: Maintains local storage as safety net without undermining DTR goals - -### Load Balancing & Performance -- **Random validator selection**: Distributes load evenly across validator set -- **ValidityData caching**: Stores validation data in memory for retry attempts -- **Bounded retry logic**: Prevents infinite retry loops with 10-attempt limit -- **Sync-aware processing**: Only processes when node is fully synchronized - -### Memory & Resource Management -- **Automatic cleanup**: Removes ValidityData cache on successful relay or max attempts -- **Service lifecycle**: Proper startup after sync and graceful shutdown handling -- **Production-only activation**: DTR only runs in production mode (`PROD=true`) -- **Mempool integration**: Seamlessly removes relayed transactions from local storage - -## Enhanced DTR Flow Diagram - -### Production Implementation Flow - -``` - Client Transaction - │ - ▼ - ┌─────────────────┐ - │ RPC Endpoint │ - │ server_rpc.ts │ - └─────────┬───────┘ - │ - ▼ - ┌─────────────────┐ - │ Transaction │ - │ Validation │ - │ confirmTx │ - └─────────┬───────┘ - │ - ▼ - ┌─────────────────┐ - │ Execute Handler │ - │ broadcastTx │ - │ endpointHandlers│ - └─────────┬───────┘ - │ - ▼ - ┌─────────────────┐ - │ PROD=true? │ - └─────┬─────┬─────┘ - NO│ │YES - │ ▼ - │ ┌─────────────────┐ - │ │ isValidator()? │ - │ └─────┬─────┬─────┘ - │ YES│ │NO - │ │ ▼ - │ │ ┌─────────────────┐ - │ │ │ Get ALL │ - │ │ │ Validators │ - │ │ │ getShard() │ - │ │ └─────────┬───────┘ - │ │ │ - │ │ ▼ - │ │ ┌─────────────────┐ - │ │ │ Try ALL │ - │ │ │ Validators │ - │ │ │ (Random Order) │ - │ │ └─────────┬───────┘ - │ │ │ - │ │ ▼ - │ │ ┌─────────────────┐ - │ │ │ Any Success? │ - │ │ └─────┬─────┬─────┘ - │ │ YES│ │NO - │ │ │ ▼ - │ │ │ ┌─────────────────┐ - │ │ │ │ Store ValidData │ - │ │ │ │ in Cache │ - │ │ │ └─────────┬───────┘ - │ │ │ │ - │ │ ▼ ▼ - │ │ ┌─────────────────────────────┐ - │ │ │ Return Success or Continue │ - │ │ │ to Local Mempool │ - │ │ └─────────┬───────────────────┘ - │ │ │ - ▼ ▼ ▼ - ┌─────────────────────────────┐ - │ Add to Local Mempool │ - │ mempool.addTransaction() │ - └─────────────┬───────────────┘ - │ - ┌─────────────────────┼─────────────────────┐ - ▼ ▼ ▼ - ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ - │ Consensus │ │ Background │ │ RELAY_TX │ - │ Process │ │ Retry Service │ │ Handler │ - │ (unchanged) │ │ (every 10s) │ │ (validators) │ - └─────────────────┘ └─────────┬───────┘ └─────────┬───────┘ - │ │ - ▼ ▼ - ┌─────────────────┐ ┌─────────────────┐ - │ Synced & │ │ Validate Relay: │ - │ Non-validator? │ │ • isValidator() │ - └─────────┬───────┘ │ • isCoherent() │ - │ YES │ • validateSig() │ - ▼ └─────────┬───────┘ - ┌─────────────────┐ │ - │ Process Entire │ ▼ - │ Local Mempool │ ┌─────────────────┐ - └─────────┬───────┘ │ Add to Validator│ - │ │ Mempool │ - ▼ └─────────────────┘ - ┌─────────────────┐ - │ Block Changed? │ - │ Recalc Validators│ - └─────────┬───────┘ - │ - ▼ - ┌─────────────────┐ - │ Try Relay Each │ - │ Transaction │ - │ (Max 10 attempts)│ - └─────────┬───────┘ - │ - ▼ - ┌─────────────────┐ - │ Success? │ - │ Remove from │ - │ Local Mempool │ - └─────────────────┘ - -Legend: -┌─────┐ Process/Function -│ │ -└─────┘ - -▼ Flow Direction -│ -─ - -┬─┐ Decision Branch - │ -─┘ - -Production Mode (PROD=true): -• Non-validators: Immediate multi-validator relay + background retry -• Validators: Store transactions locally (existing behavior) -• Background service: Continuous retry with block-aware optimization - -Development Mode (PROD=false): -• All nodes: Store transactions locally (existing behavior) -``` \ No newline at end of file diff --git a/dtr_implementation/README.md b/dtr_implementation/README.md deleted file mode 100644 index cbe8facc7..000000000 --- a/dtr_implementation/README.md +++ /dev/null @@ -1,273 +0,0 @@ -# DTR (Distributed Transaction Routing) - -## Overview - -**DTR (Distributed Transaction Routing)** is a production-ready enhancement to the Demos Network that optimizes transaction processing by intelligently routing transactions based on node validator status. Instead of every node storing every transaction in their local mempool, DTR ensures that only validator nodes maintain transaction pools, while non-validator nodes act as efficient relay points. - -## Problem Statement - -In traditional blockchain networks, including the base Demos implementation, every node maintains a full mempool regardless of their validator status. This approach leads to several inefficiencies: - -- **Resource Waste**: Non-validator nodes store transactions they will never process -- **Network Redundancy**: Identical transactions are stored across hundreds of nodes -- **Consensus Complexity**: Validators must sync mempools from numerous non-validator nodes -- **Memory Overhead**: Each node allocates significant memory for transaction storage - -## DTR Solution - -DTR implements a **two-tier transaction architecture**: - -### **Tier 1: Validator Nodes** -- Maintain full transaction mempools -- Process and include transactions in blocks -- Receive transactions from non-validator nodes via relay - -### **Tier 2: Non-Validator Nodes** -- Act as transaction relay points -- Forward transactions to validator nodes immediately -- Maintain minimal local cache only for retry scenarios -- Continuously attempt to relay failed transactions - -## Security Advantages - -### **1. Reduced Attack Surface** -- **Mempool Attacks**: Only validator nodes maintain full mempools, reducing targets for mempool flooding -- **Storage DoS**: Non-validators cannot be overwhelmed with transaction storage attacks -- **Network Efficiency**: Eliminates redundant transaction storage across the network - -### **2. Enhanced Validation Security** -- **Relay Validation**: Multiple validation layers ensure only legitimate transactions reach validators -- **Identity Verification**: Relay messages include cryptographic validation -- **Coherence Checks**: Transaction integrity verified at both relay and reception points - -### **3. Robust Fallback Mechanisms** -- **Network Partition Tolerance**: Graceful degradation when validators are unreachable -- **Byzantine Fault Tolerance**: System remains functional with malicious or offline validators -- **Conservative Safety**: Falls back to traditional behavior when DTR cannot operate safely - -## Technical Advantages - -### **1. Optimized Resource Utilization** -``` -Traditional Demos Network: -├── Validator Node A: Full Mempool (1000 transactions) -├── Validator Node B: Full Mempool (1000 transactions) -├── Non-Validator C: Full Mempool (1000 transactions) -├── Non-Validator D: Full Mempool (1000 transactions) -└── ... (hundreds more nodes with full mempools) - -DTR-Enabled Network: -├── Validator Node A: Full Mempool (1000 transactions) -├── Validator Node B: Full Mempool (1000 transactions) -├── Non-Validator C: Relay Cache (5-10 pending transactions) -├── Non-Validator D: Relay Cache (5-10 pending transactions) -└── ... (hundreds more nodes with minimal caches) -``` - -### **2. Improved Network Performance** -- **Reduced Memory Usage**: 80-90% reduction in total network memory consumption -- **Faster Consensus**: Validators sync smaller, more focused transaction sets -- **Lower Bandwidth**: Eliminates redundant transaction propagation -- **Optimized Sync**: New nodes sync faster without massive mempool downloads - -### **3. Enhanced Scalability** -- **Linear Scaling**: Memory usage scales with validator count, not total node count -- **Dynamic Adaptation**: Automatically adjusts to changing validator sets -- **Load Distribution**: Random validator selection prevents bottlenecks - -## DTR Flow Architecture - -### **Phase 1: Immediate Relay (Real-time)** - -```mermaid -graph TD - A[Client submits transaction] --> B[Non-validator receives transaction] - B --> C{Validate transaction} - C -->|Valid| D[Attempt relay to ALL validators] - C -->|Invalid| E[Reject transaction] - D --> F{Any validator accepts?} - F -->|Yes| G[Return success to client] - F -->|No| H[Store in local cache + ValidityData] - H --> I[Return provisional acceptance] -``` - -### **Phase 2: Background Retry (Continuous)** - -```mermaid -graph TD - A[Every 10 seconds] --> B{Node synced & non-validator?} - B -->|Yes| C[Scan local mempool] - B -->|No| D[Skip cycle] - C --> E{Block number changed?} - E -->|Yes| F[Recalculate validator set] - E -->|No| G[Use cached validators] - F --> G - G --> H[For each cached transaction] - H --> I{Retry attempts < 10?} - I -->|Yes| J[Attempt relay to validators] - I -->|No| K[Abandon transaction + cleanup] - J --> L{Relay successful?} - L -->|Yes| M[Remove from local mempool] - L -->|No| N[Increment retry counter] -``` - -### **Security Validation Pipeline** - -Each transaction undergoes multiple validation stages: - -#### **Stage 1: Initial Validation (Non-validator)** -- Signature verification -- Transaction coherence (hash matches content) -- Gas calculation and balance checks -- GCR edit validation - -#### **Stage 2: Relay Validation (Network)** -- Multi-validator attempt with random selection -- Network partition detection -- Validator availability checking -- Cryptographic relay message validation - -#### **Stage 3: Reception Validation (Validator)** -- Validator status verification -- Duplicate transaction checks -- Re-validation of all Stage 1 checks -- Mempool capacity protection - -## Implementation Details - -### **Configuration** -```typescript -// DTR automatically activates in production mode -const dtrEnabled = getSharedState.PROD // true in production - -// No additional configuration required -// Backward compatible with existing setups -``` - -### **Validator Detection** -DTR uses the existing **CVSA (Common Validator Seed Algorithm)** for deterministic validator selection: - -```typescript -// Cryptographically secure validator determination -const { commonValidatorSeed } = await getCommonValidatorSeed() // Based on last 3 blocks + genesis -const validators = await getShard(commonValidatorSeed) // Up to 10 validators -const isValidator = validators.some(peer => peer.identity === ourIdentity) -``` - -### **Load Balancing Strategy** -```typescript -// Random validator selection for even load distribution -const availableValidators = validators - .filter(v => v.status.online && v.sync.status) - .sort(() => Math.random() - 0.5) // Randomize order - -// Try ALL validators (not just first available) -for (const validator of availableValidators) { - const result = await attemptRelay(transaction, validator) - if (result.success) return result // Success on first acceptance -} -``` - -## Use Cases & Scenarios - -### **Scenario 1: High-Traffic DApp** -A popular DApp generates 1000 transactions per minute: - -**Without DTR:** -- 500 network nodes each store 1000 transactions = 500,000 total storage operations -- Memory usage: ~50GB across network -- Sync time for new nodes: 10+ minutes - -**With DTR:** -- 10 validator nodes store 1000 transactions = 10,000 total storage operations -- Memory usage: ~1GB across network -- Sync time for new nodes: 30 seconds - -### **Scenario 2: Network Partition** -Validators become temporarily unreachable: - -**DTR Response:** -1. Non-validators detect validator unavailability -2. Gracefully fall back to local mempool storage -3. Background service continuously retries validator connections -4. Automatically resume DTR when validators return -5. Seamlessly migrate cached transactions to validators - -### **Scenario 3: Validator Set Changes** -Network consensus selects new validators: - -**DTR Adaptation:** -1. Detects block number change (new validator selection) -2. Recalculates validator set using updated CVSA seed -3. Redirects new transactions to updated validator set -4. Maintains backward compatibility with existing mempools - -## Security Considerations - -### **Attack Vectors & Mitigations** - -#### **1. Relay Flooding** -**Risk**: Malicious nodes flooding validators with fake relay messages -**Mitigation**: -- Cryptographic validation of relay messages -- Validator status verification before processing -- Coherence and signature checks on relayed transactions - -#### **2. Network Partition Attacks** -**Risk**: Isolating validators to force fallback mode -**Mitigation**: -- Conservative fallback to traditional behavior -- Multiple validator attempts with different network paths -- Timeout-based retry mechanisms - -#### **3. Selective Relay Blocking** -**Risk**: Malicious non-validators blocking specific transactions -**Mitigation**: -- Multiple relay paths through different non-validators -- Client can connect to multiple entry points -- Fallback to direct validator connections - -## Performance Metrics - -### **Memory Optimization** -- **Traditional Network**: O(N × T) where N = total nodes, T = transactions -- **DTR Network**: O(V × T + N × C) where V = validators, C = cache size -- **Improvement**: ~85% reduction in network-wide memory usage - -### **Network Efficiency** -- **Transaction Propagation**: Reduced from O(N²) to O(N) -- **Consensus Sync**: 10x faster validator mempool synchronization -- **New Node Onboarding**: 20x faster initial sync times - -### **Scalability Benefits** -- **Linear Scaling**: Memory grows with validator count, not total network size -- **Bandwidth Optimization**: Eliminates redundant transaction broadcasts -- **Storage Efficiency**: Non-validators require minimal persistent storage - -## Future Enhancements - -### **Phase 2: Advanced Load Balancing** -- Validator performance metrics integration -- Geographic relay optimization -- Quality-of-service based routing - -### **Phase 3: Incentive Mechanisms** -- Relay reward structures for non-validators -- Economic incentives for efficient transaction routing -- Anti-spam mechanisms with micro-fees - -### **Phase 4: Cross-Shard Optimization** -- Inter-shard transaction routing -- Specialized relay nodes for cross-chain operations -- Advanced caching strategies for multi-chain transactions - -## Conclusion - -DTR represents a significant evolution in blockchain transaction management, bringing enterprise-grade efficiency to the Demos Network while maintaining its core security guarantees. By intelligently separating transaction storage responsibilities between validators and non-validators, DTR enables: - -- **Massive Resource Savings**: 85% reduction in network memory usage -- **Enhanced Performance**: 10x faster consensus and sync operations -- **Improved Security**: Reduced attack surface and enhanced validation -- **Future-Proof Scalability**: Linear scaling with validator count - -DTR is production-ready and activates automatically in production environments, providing immediate benefits with zero configuration changes required. \ No newline at end of file diff --git a/dtr_implementation/validator_status_minimal.md b/dtr_implementation/validator_status_minimal.md deleted file mode 100644 index ce616dd86..000000000 --- a/dtr_implementation/validator_status_minimal.md +++ /dev/null @@ -1,88 +0,0 @@ -# Validator Status - Minimal Implementation - -## Single Function Approach - -Instead of a complex service, we create one simple function that leverages existing consensus routines. - -## Implementation - -**File**: `src/libs/consensus/v2/routines/isValidator.ts` - -```typescript -import getShard from "./getShard" -import getCommonValidatorSeed from "./getCommonValidatorSeed" -import { getSharedState } from "../../../utilities/sharedState" - -/** - * Determines if current node will be validator for next block - * Reuses existing consensus logic with zero modifications - */ -export default async function isValidatorForNextBlock(): Promise { - try { - // Use existing seed generation (unchanged) - const { commonValidatorSeed } = await getCommonValidatorSeed() - - // Use existing shard selection (unchanged) - const validators = await getShard(commonValidatorSeed) - - // Use existing identity access (unchanged) - const ourIdentity = getSharedState.identity.ed25519.publicKey.toString("hex") - - // Simple check if we're in the validator list - return validators.some(peer => peer.identity === ourIdentity) - - } catch (error) { - // Conservative fallback - assume we're not validator - return false - } -} - -/** - * Gets validator list for relay targets (optional helper) - */ -export async function getValidatorsForRelay(): Promise { - try { - const { commonValidatorSeed } = await getCommonValidatorSeed() - const validators = await getShard(commonValidatorSeed) - - // Return only online, synced validators for relay - return validators.filter(v => v.status.online && v.sync.status) - } catch { - return [] - } -} -``` - -## Usage Pattern - -```typescript -// In manageExecution.ts -import isValidatorForNextBlock, { getValidatorsForRelay } from "../consensus/v2/routines/isValidator" - -// Simple check -if (await isValidatorForNextBlock()) { - // Store locally (existing behavior) - await mempool.addTransaction(transaction) -} else { - // Relay to validators - const validators = await getValidatorsForRelay() - // ... relay logic -} -``` - -## Why This Works - -1. **Reuses Existing Logic**: Same algorithm consensus uses -2. **No State Management**: Stateless function calls -3. **No Caching Needed**: Functions are fast enough for real-time use -4. **No Error Complexity**: Simple try/catch with safe fallback -5. **Zero Dependencies**: Uses existing imports only - -## Total Implementation - -- **Lines of Code**: 15 -- **New Dependencies**: 0 -- **Modified Files**: 0 (all new) -- **Testing Complexity**: Minimal (just test the boolean return) - -This gives us everything we need for DTR with the absolute minimum code footprint. \ No newline at end of file diff --git a/git-town.toml b/git-town.toml deleted file mode 100644 index 94332718c..000000000 --- a/git-town.toml +++ /dev/null @@ -1,9 +0,0 @@ -# See https://www.git-town.com/configuration-file for details - -[branches] -main = "testnet" -perennials = ["beads-sync"] - -[hosting] -forge-type = "github" -github-connector = "gh" diff --git a/omniprotocol_fixtures_scripts/auth_ping_demos.ts b/omniprotocol_fixtures_scripts/auth_ping_demos.ts deleted file mode 100644 index 9f1babc08..000000000 --- a/omniprotocol_fixtures_scripts/auth_ping_demos.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { readFile } from "fs/promises" -import { resolve } from "path" -import { Demos } from "@kynesyslabs/demosdk/websdk" - -const DEFAULT_NODE_URL = process.env.DEMOS_NODE_URL || "https://node2.demos.sh" -const IDENTITY_FILE = process.env.IDENTITY_FILE || resolve(".demos_identity") - -async function main() { - const mnemonic = (await readFile(IDENTITY_FILE, "utf8")).trim() - if (!mnemonic) { - throw new Error(`Mnemonic not found in ${IDENTITY_FILE}`) - } - - const demos = new Demos() - demos.rpc_url = DEFAULT_NODE_URL - demos.connected = true - - const address = await demos.connectWallet(mnemonic, { algorithm: "ed25519" }) - console.log("Connected wallet:", address) - - const response = await demos.rpcCall({ method: "ping", params: [] }, true) - console.log("Ping response:", response) -} - -main().catch(error => { - console.error("Failed to execute authenticated ping via Demos SDK:", error) - process.exitCode = 1 -}) diff --git a/omniprotocol_fixtures_scripts/capture_consensus.sh b/omniprotocol_fixtures_scripts/capture_consensus.sh deleted file mode 100755 index 685ff7549..000000000 --- a/omniprotocol_fixtures_scripts/capture_consensus.sh +++ /dev/null @@ -1,121 +0,0 @@ -#!/usr/bin/env bash -# Simple helper to capture consensus_routine HTTP responses from a local node. -# Usage: -# NODE_URL=http://127.0.0.1:53550 ./omniprotocol_fixtures_scripts/capture_consensus.sh getCommonValidatorSeed -# ./omniprotocol_fixtures_scripts/capture_consensus.sh getValidatorTimestamp --blockRef 123 --outfile fixtures/consensus/getValidatorTimestamp.json -# -# The script writes the raw JSON response to the requested outfile (defaults to fixtures/consensus/.json) -# and pretty-prints it if jq is available. - -set -euo pipefail - -NODE_URL=${NODE_URL:-http://127.0.0.1:53550} -OUT_DIR=${OUT_DIR:-fixtures/consensus} -mkdir -p "$OUT_DIR" - -if [[ $# -lt 1 ]]; then - echo "Usage: NODE_URL=http://... $0 [--blockRef ] [--timestamp ] [--phase ] [--outfile ]" >&2 - echo "Supported read-only methods: getCommonValidatorSeed, getValidatorTimestamp, getBlockTimestamp" >&2 - echo "Interactive methods (require additional params): proposeBlockHash, setValidatorPhase, greenlight" >&2 - exit 1 -fi - -METHOD="$1" -shift - -BLOCK_REF="" -TIMESTAMP="" -PHASE="" -BLOCK_HASH="" -VALIDATION_DATA="" -PROPOSER="" -OUTFILE="" - -while [[ $# -gt 0 ]]; do - case "$1" in - --blockRef) - BLOCK_REF="$2" - shift 2 - ;; - --timestamp) - TIMESTAMP="$2" - shift 2 - ;; - --phase) - PHASE="$2" - shift 2 - ;; - --blockHash) - BLOCK_HASH="$2" - shift 2 - ;; - --validationData) - VALIDATION_DATA="$2" - shift 2 - ;; - --proposer) - PROPOSER="$2" - shift 2 - ;; - --outfile) - OUTFILE="$2" - shift 2 - ;; - *) - echo "Unknown option: $1" >&2 - exit 1 - ;; - esac -done - -if [[ -z "$OUTFILE" ]]; then - OUTFILE="$OUT_DIR/${METHOD}.json" -fi - -build_payload() { - case "$METHOD" in - getCommonValidatorSeed|getValidatorTimestamp|getBlockTimestamp) - printf '{"method":"consensus_routine","params":[{"method":"%s","params":[]}]}' "$METHOD" - ;; - proposeBlockHash) - if [[ -z "$BLOCK_HASH" || -z "$VALIDATION_DATA" || -z "$PROPOSER" ]]; then - echo "proposeBlockHash requires --blockHash, --validationData, and --proposer" >&2 - exit 1 - fi - printf '{"method":"consensus_routine","params":[{"method":"proposeBlockHash","params":["%s",%s,"%s"]}]}' \ - "$BLOCK_HASH" "$VALIDATION_DATA" "$PROPOSER" - ;; - setValidatorPhase) - if [[ -z "$PHASE" || -z "$BLOCK_REF" ]]; then - echo "setValidatorPhase requires --phase and --blockRef" >&2 - exit 1 - fi - printf '{"method":"consensus_routine","params":[{"method":"setValidatorPhase","params":[%s,null,%s]}]}' \ - "$PHASE" "$BLOCK_REF" - ;; - greenlight) - if [[ -z "$BLOCK_REF" || -z "$TIMESTAMP" || -z "$PHASE" ]]; then - echo "greenlight requires --blockRef, --timestamp, and --phase" >&2 - exit 1 - fi - printf '{"method":"consensus_routine","params":[{"method":"greenlight","params":[%s,%s,%s]}]}' \ - "$BLOCK_REF" "$TIMESTAMP" "$PHASE" - ;; - *) - echo "Unsupported method: $METHOD" >&2 - exit 1 - ;; - esac -} - -PAYLOAD="$(build_payload)" - -echo "[capture_consensus] Sending ${METHOD} to ${NODE_URL}" -curl -sS -H "Content-Type: application/json" -d "$PAYLOAD" "$NODE_URL" | tee "$OUTFILE" >/dev/null - -if command -v jq >/dev/null 2>&1; then - echo "[capture_consensus] Response (pretty):" - jq . "$OUTFILE" -else - echo "[capture_consensus] jq not found, raw response saved to $OUTFILE" -fi diff --git a/package.json b/package.json index bffd780e8..5bb12c197 100644 --- a/package.json +++ b/package.json @@ -9,8 +9,12 @@ "scripts": { "lint": "eslint . --ignore-pattern 'local_tests' --ignore-pattern 'aptos_tests' --ext .ts", "lint:fix": "eslint . --ignore-pattern 'local_tests' --ignore-pattern 'aptos_tests' --fix --ext .ts", - "type-check": "bun build src/index.ts --target=bun --no-emit", - "type-check-ts": "tsc --noEmit", + "type-check": "tsc --noEmit -p tsconfig.check.json", + "type-check:full": "tsc --noEmit", + "type-check-ts": "bun run type-check:full", + "build-check": "bun build src/index.ts --target=bun --no-emit > /dev/null", + "check": "bun run type-check && bun run build-check", + "check:full": "bun run type-check:full && bun run build-check", "prettier-format": "prettier --config .prettierrc.json modules/**/*.ts --write", "format": "prettier --plugin-search-dir . --write .", "start": "tsx -r tsconfig-paths/register src/index.ts", @@ -69,7 +73,7 @@ "@fastify/cors": "^9.0.1", "@fastify/swagger": "^8.15.0", "@fastify/swagger-ui": "^4.1.0", - "@kynesyslabs/demosdk": "^2.10.2", + "@kynesyslabs/demosdk": "^2.11.0", "@metaplex-foundation/js": "^0.20.1", "@modelcontextprotocol/sdk": "^1.13.3", "@noble/ed25519": "^3.0.0", @@ -118,6 +122,7 @@ "rollup-plugin-polyfill-node": "^0.12.0", "rubic-sdk": "^5.57.4", "seedrandom": "^3.0.5", + "ses": "^1.14.0", "snarkjs": "^0.7.5", "socket.io": "^4.7.1", "socket.io-client": "^4.7.2", diff --git a/repository-semantic-map/code-graph.json b/repository-semantic-map/code-graph.json new file mode 100644 index 000000000..d13374b91 --- /dev/null +++ b/repository-semantic-map/code-graph.json @@ -0,0 +1,45979 @@ +{ + "generated_at": "2026-02-22T19:12:05.352Z", + "git_ref": "a454f37e", + "nodes": [ + { + "uuid": "repo-de99fc85f0e0189637618ce6", + "level": "L0", + "label": "repository", + "file_path": null, + "symbol_name": null, + "line_range": null, + "centrality": 0 + }, + { + "uuid": "mod-30226d79668e34a62a286090", + "level": "L1", + "label": "devnet/scripts/generate-identity-helper.ts", + "file_path": "devnet/scripts/generate-identity-helper.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 0 + }, + { + "uuid": "mod-4f240da290d74961db3018c1", + "level": "L1", + "label": "jest.config.ts", + "file_path": "jest.config.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 1 + }, + { + "uuid": "mod-b339b6e2d177dff30e54ad47", + "level": "L1", + "label": "scripts/generate-test-wallets.ts", + "file_path": "scripts/generate-test-wallets.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 0 + }, + { + "uuid": "mod-2546b562762a3da08a65696c", + "level": "L1", + "label": "scripts/l2ps-load-test.ts", + "file_path": "scripts/l2ps-load-test.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 1 + }, + { + "uuid": "mod-840f81eb11629800896bc68c", + "level": "L1", + "label": "scripts/l2ps-stress-test.ts", + "file_path": "scripts/l2ps-stress-test.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 1 + }, + { + "uuid": "mod-e4f5fbdce58ae4c9460982f1", + "level": "L1", + "label": "scripts/semantic-map/generate.ts", + "file_path": "scripts/semantic-map/generate.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 0 + }, + { + "uuid": "mod-a11e8e55a0387f976794ebc2", + "level": "L1", + "label": "scripts/send-l2-batch.ts", + "file_path": "scripts/send-l2-batch.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 1 + }, + { + "uuid": "mod-2c27076bd0cea424b3f31b08", + "level": "L1", + "label": "scripts/setup-zk-all.ts", + "file_path": "scripts/setup-zk-all.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 0 + }, + { + "uuid": "mod-5616093476c766ebb88973fc", + "level": "L1", + "label": "src/benchmark.ts", + "file_path": "src/benchmark.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 1 + }, + { + "uuid": "mod-8199ebab294ab6b8aa0e2c60", + "level": "L1", + "label": "src/client/client.ts", + "file_path": "src/client/client.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 1 + }, + { + "uuid": "mod-61ec49ba22d46e7eeff82d2c", + "level": "L1", + "label": "src/client/libs/client_class.ts", + "file_path": "src/client/libs/client_class.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 3 + }, + { + "uuid": "mod-5fd74e18c62882ed9c84a4c4", + "level": "L1", + "label": "src/client/libs/network.ts", + "file_path": "src/client/libs/network.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-4f82a94b1d6cb4bf9aed1178", + "level": "L1", + "label": "src/exceptions/index.ts", + "file_path": "src/exceptions/index.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 7 + }, + { + "uuid": "mod-c49fd7aa51f86aec35688868", + "level": "L1", + "label": "src/features/InstantMessagingProtocol/index.ts", + "file_path": "src/features/InstantMessagingProtocol/index.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-38ca26657f3ebd4b61cbc829", + "level": "L1", + "label": "src/features/InstantMessagingProtocol/old/instantMessagingProtocol.ts", + "file_path": "src/features/InstantMessagingProtocol/old/instantMessagingProtocol.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 1 + }, + { + "uuid": "mod-0a687d4a8de66750c8ed59f7", + "level": "L1", + "label": "src/features/InstantMessagingProtocol/old/types/IMSession.ts", + "file_path": "src/features/InstantMessagingProtocol/old/types/IMSession.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 8 + }, + { + "uuid": "mod-d9efcaa28359a29a24e998ca", + "level": "L1", + "label": "src/features/InstantMessagingProtocol/old/types/IMStorage.ts", + "file_path": "src/features/InstantMessagingProtocol/old/types/IMStorage.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 5 + }, + { + "uuid": "mod-e0ccf1cd36e1b4bd9f23a160", + "level": "L1", + "label": "src/features/InstantMessagingProtocol/signalingServer/ImPeers.ts", + "file_path": "src/features/InstantMessagingProtocol/signalingServer/ImPeers.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-900742fc8a97706a00e06129", + "level": "L1", + "label": "src/features/InstantMessagingProtocol/signalingServer/signalingServer.ts", + "file_path": "src/features/InstantMessagingProtocol/signalingServer/signalingServer.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 14 + }, + { + "uuid": "mod-3653cf91ec233fdbb23d4d78", + "level": "L1", + "label": "src/features/InstantMessagingProtocol/signalingServer/types/Errors.ts", + "file_path": "src/features/InstantMessagingProtocol/signalingServer/types/Errors.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-a0a399c17b09d2d59cb4c8a4", + "level": "L1", + "label": "src/features/InstantMessagingProtocol/signalingServer/types/IMMessage.ts", + "file_path": "src/features/InstantMessagingProtocol/signalingServer/types/IMMessage.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 6 + }, + { + "uuid": "mod-7b49c1b727b9aee8612f7ada", + "level": "L1", + "label": "src/features/activitypub/fedistore.ts", + "file_path": "src/features/activitypub/fedistore.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 3 + }, + { + "uuid": "mod-8dfd4cfe7c92238e8a295176", + "level": "L1", + "label": "src/features/activitypub/feditypes.ts", + "file_path": "src/features/activitypub/feditypes.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 18 + }, + { + "uuid": "mod-0fc27af2e03da13014e76beb", + "level": "L1", + "label": "src/features/activitypub/fediverse.ts", + "file_path": "src/features/activitypub/fediverse.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-dba449d7aefb98c5518cd61d", + "level": "L1", + "label": "src/features/bridges/bridgeUtils.ts", + "file_path": "src/features/bridges/bridgeUtils.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 9 + }, + { + "uuid": "mod-5284e69a41b77e33ceb347d7", + "level": "L1", + "label": "src/features/bridges/bridges.ts", + "file_path": "src/features/bridges/bridges.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 5 + }, + { + "uuid": "mod-0bdba6781d714c651de05352", + "level": "L1", + "label": "src/features/bridges/rubic.ts", + "file_path": "src/features/bridges/rubic.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-966e17be37a66604fed3722e", + "level": "L1", + "label": "src/features/fhe/FHE.ts", + "file_path": "src/features/fhe/FHE.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 3 + }, + { + "uuid": "mod-fedfa2f8f2d69ea52cabd065", + "level": "L1", + "label": "src/features/fhe/fhe_test.ts", + "file_path": "src/features/fhe/fhe_test.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-09e939d9272236688a28974a", + "level": "L1", + "label": "src/features/incentive/PointSystem.ts", + "file_path": "src/features/incentive/PointSystem.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 13 + }, + { + "uuid": "mod-08315e6901cb53376d13cc70", + "level": "L1", + "label": "src/features/incentive/referrals.ts", + "file_path": "src/features/incentive/referrals.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 9 + }, + { + "uuid": "mod-cb6612b0371b0a6c53802c79", + "level": "L1", + "label": "src/features/mcp/MCPServer.ts", + "file_path": "src/features/mcp/MCPServer.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 8 + }, + { + "uuid": "mod-462ce83c6905bcaa92b4f893", + "level": "L1", + "label": "src/features/mcp/examples/remoteExample.ts", + "file_path": "src/features/mcp/examples/remoteExample.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 5 + }, + { + "uuid": "mod-b826ecdcb08532bf626dec5e", + "level": "L1", + "label": "src/features/mcp/examples/simpleExample.ts", + "file_path": "src/features/mcp/examples/simpleExample.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 5 + }, + { + "uuid": "mod-dc90a845649336ae35fd57a4", + "level": "L1", + "label": "src/features/mcp/index.ts", + "file_path": "src/features/mcp/index.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 15 + }, + { + "uuid": "mod-26a73e0f3287d341c809bbb6", + "level": "L1", + "label": "src/features/mcp/tools/demosTools.ts", + "file_path": "src/features/mcp/tools/demosTools.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 7 + }, + { + "uuid": "mod-e97de8ffbc5205710572c9db", + "level": "L1", + "label": "src/features/metrics/MetricsCollector.ts", + "file_path": "src/features/metrics/MetricsCollector.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 7 + }, + { + "uuid": "mod-73734de2bfb341ec8ba4023b", + "level": "L1", + "label": "src/features/metrics/MetricsServer.ts", + "file_path": "src/features/metrics/MetricsServer.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 7 + }, + { + "uuid": "mod-3f28b6264133cacdcde0f639", + "level": "L1", + "label": "src/features/metrics/MetricsService.ts", + "file_path": "src/features/metrics/MetricsService.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 8 + }, + { + "uuid": "mod-7446738bdaf5f0b85a43ab05", + "level": "L1", + "label": "src/features/metrics/index.ts", + "file_path": "src/features/metrics/index.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 12 + }, + { + "uuid": "mod-6ecc959af33bffdcf9b125ac", + "level": "L1", + "label": "src/features/multichain/XMDispatcher.ts", + "file_path": "src/features/multichain/XMDispatcher.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 6 + }, + { + "uuid": "mod-bd407f0c01e58fd2d40eb1c3", + "level": "L1", + "label": "src/features/multichain/assetWrapping.ts", + "file_path": "src/features/multichain/assetWrapping.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 1 + }, + { + "uuid": "mod-ff7a988dbc672250517763db", + "level": "L1", + "label": "src/features/multichain/routines/XMParser.ts", + "file_path": "src/features/multichain/routines/XMParser.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 7 + }, + { + "uuid": "mod-a722cbd7e6a0808c95591ad6", + "level": "L1", + "label": "src/features/multichain/routines/executors/aptos_balance_query.ts", + "file_path": "src/features/multichain/routines/executors/aptos_balance_query.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 3 + }, + { + "uuid": "mod-6b0f117020c528624559fc33", + "level": "L1", + "label": "src/features/multichain/routines/executors/aptos_contract_read.ts", + "file_path": "src/features/multichain/routines/executors/aptos_contract_read.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-3940e5b1c6e49d5c3f17fd5e", + "level": "L1", + "label": "src/features/multichain/routines/executors/aptos_contract_write.ts", + "file_path": "src/features/multichain/routines/executors/aptos_contract_write.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-52fc6e5b8ec086dcc9f4237e", + "level": "L1", + "label": "src/features/multichain/routines/executors/aptos_pay_rest.ts", + "file_path": "src/features/multichain/routines/executors/aptos_pay_rest.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 3 + }, + { + "uuid": "mod-f57990696544256723fdd185", + "level": "L1", + "label": "src/features/multichain/routines/executors/balance_query.ts", + "file_path": "src/features/multichain/routines/executors/balance_query.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-ace15f11a231cf8b7077f58e", + "level": "L1", + "label": "src/features/multichain/routines/executors/contract_read.ts", + "file_path": "src/features/multichain/routines/executors/contract_read.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-116da4b57fafe340c5775211", + "level": "L1", + "label": "src/features/multichain/routines/executors/contract_write.ts", + "file_path": "src/features/multichain/routines/executors/contract_write.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 5 + }, + { + "uuid": "mod-374a312e43c2c9f2d7013463", + "level": "L1", + "label": "src/features/multichain/routines/executors/pay.ts", + "file_path": "src/features/multichain/routines/executors/pay.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 8 + }, + { + "uuid": "mod-293d53ea089a85fc8fe53c13", + "level": "L1", + "label": "src/features/tlsnotary/TLSNotaryService.ts", + "file_path": "src/features/tlsnotary/TLSNotaryService.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 18 + }, + { + "uuid": "mod-0b89d77ed9ae905feafbc9e1", + "level": "L1", + "label": "src/features/tlsnotary/ffi.ts", + "file_path": "src/features/tlsnotary/ffi.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 8 + }, + { + "uuid": "mod-6468589b59a97501083efac5", + "level": "L1", + "label": "src/features/tlsnotary/index.ts", + "file_path": "src/features/tlsnotary/index.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 25 + }, + { + "uuid": "mod-d890484b676af2e8fe7bd2b6", + "level": "L1", + "label": "src/features/tlsnotary/portAllocator.ts", + "file_path": "src/features/tlsnotary/portAllocator.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 9 + }, + { + "uuid": "mod-94f67b12c658d567d29471e0", + "level": "L1", + "label": "src/features/tlsnotary/proxyManager.ts", + "file_path": "src/features/tlsnotary/proxyManager.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 17 + }, + { + "uuid": "mod-7913910232f2f61a1d86ca8d", + "level": "L1", + "label": "src/features/tlsnotary/routes.ts", + "file_path": "src/features/tlsnotary/routes.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 7 + }, + { + "uuid": "mod-de2778e7582cc783d0c02163", + "level": "L1", + "label": "src/features/tlsnotary/tokenManager.ts", + "file_path": "src/features/tlsnotary/tokenManager.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 20 + }, + { + "uuid": "mod-3dc939e68aaf71174e695f9e", + "level": "L1", + "label": "src/features/web2/dahr/DAHR.ts", + "file_path": "src/features/web2/dahr/DAHR.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 10 + }, + { + "uuid": "mod-6efee936b845d34104bac46c", + "level": "L1", + "label": "src/features/web2/dahr/DAHRFactory.ts", + "file_path": "src/features/web2/dahr/DAHRFactory.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 5 + }, + { + "uuid": "mod-7866a2e46802b656e108eb43", + "level": "L1", + "label": "src/features/web2/handleWeb2.ts", + "file_path": "src/features/web2/handleWeb2.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 6 + }, + { + "uuid": "mod-ea8114d37c6855f0420f3753", + "level": "L1", + "label": "src/features/web2/proxy/Proxy.ts", + "file_path": "src/features/web2/proxy/Proxy.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 7 + }, + { + "uuid": "mod-f7793bcd210b9ccdb36c1561", + "level": "L1", + "label": "src/features/web2/proxy/ProxyFactory.ts", + "file_path": "src/features/web2/proxy/ProxyFactory.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 3 + }, + { + "uuid": "mod-30ed0e66ac618e803ffb888b", + "level": "L1", + "label": "src/features/web2/sanitizeWeb2Request.ts", + "file_path": "src/features/web2/sanitizeWeb2Request.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 6 + }, + { + "uuid": "mod-0a6b71b6c837c68c08998d7b", + "level": "L1", + "label": "src/features/web2/validator.ts", + "file_path": "src/features/web2/validator.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-825d778a3cf48930d8e88db3", + "level": "L1", + "label": "src/features/zk/iZKP/test.ts", + "file_path": "src/features/zk/iZKP/test.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-2ac3497f7072a203f8c62d92", + "level": "L1", + "label": "src/features/zk/iZKP/zk.ts", + "file_path": "src/features/zk/iZKP/zk.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-fbf651cd0a1f5d59d8f3f9b2", + "level": "L1", + "label": "src/features/zk/iZKP/zkPrimer.ts", + "file_path": "src/features/zk/iZKP/zkPrimer.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 3 + }, + { + "uuid": "mod-b4ad305201d7e6c9d3b649db", + "level": "L1", + "label": "src/features/zk/merkle/MerkleTreeManager.ts", + "file_path": "src/features/zk/merkle/MerkleTreeManager.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 3 + }, + { + "uuid": "mod-ad645bf9d23cc4e8c30848fc", + "level": "L1", + "label": "src/features/zk/merkle/updateMerkleTreeAfterBlock.ts", + "file_path": "src/features/zk/merkle/updateMerkleTreeAfterBlock.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 9 + }, + { + "uuid": "mod-508ea55e640ac463afeb7e81", + "level": "L1", + "label": "src/features/zk/proof/BunSnarkjsWrapper.ts", + "file_path": "src/features/zk/proof/BunSnarkjsWrapper.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-292e8f8c5a666fd4318d4859", + "level": "L1", + "label": "src/features/zk/proof/ProofVerifier.ts", + "file_path": "src/features/zk/proof/ProofVerifier.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 8 + }, + { + "uuid": "mod-4d1bc1d25c03a3c9c82135b1", + "level": "L1", + "label": "src/features/zk/scripts/ceremony.ts", + "file_path": "src/features/zk/scripts/ceremony.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 0 + }, + { + "uuid": "mod-db9458152523ec94914f1b7c", + "level": "L1", + "label": "src/features/zk/scripts/setup-zk.ts", + "file_path": "src/features/zk/scripts/setup-zk.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 0 + }, + { + "uuid": "mod-001692bb5454fe9b0d78d445", + "level": "L1", + "label": "src/features/zk/tests/merkle.test.ts", + "file_path": "src/features/zk/tests/merkle.test.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 0 + }, + { + "uuid": "mod-a9d75338e497f9b16630d4cf", + "level": "L1", + "label": "src/features/zk/tests/proof-verifier.test.ts", + "file_path": "src/features/zk/tests/proof-verifier.test.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 0 + }, + { + "uuid": "mod-99cb8cee8d94ff0cda253153", + "level": "L1", + "label": "src/features/zk/types/index.ts", + "file_path": "src/features/zk/types/index.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 8 + }, + { + "uuid": "mod-327512c4dc701f9a29037e12", + "level": "L1", + "label": "src/index.ts", + "file_path": "src/index.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 19 + }, + { + "uuid": "mod-b14fd27b1e26707d72c1730a", + "level": "L1", + "label": "src/libs/abstraction/index.ts", + "file_path": "src/libs/abstraction/index.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 11 + }, + { + "uuid": "mod-4e4680ebab441dcef21432ff", + "level": "L1", + "label": "src/libs/abstraction/web2/discord.ts", + "file_path": "src/libs/abstraction/web2/discord.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-3b62039e7459fe4199077784", + "level": "L1", + "label": "src/libs/abstraction/web2/github.ts", + "file_path": "src/libs/abstraction/web2/github.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 3 + }, + { + "uuid": "mod-f30737840d94511712dda889", + "level": "L1", + "label": "src/libs/abstraction/web2/parsers.ts", + "file_path": "src/libs/abstraction/web2/parsers.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 6 + }, + { + "uuid": "mod-36fe55884844248a7ff73159", + "level": "L1", + "label": "src/libs/abstraction/web2/twitter.ts", + "file_path": "src/libs/abstraction/web2/twitter.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-cd472ca23fca8b4aead577c4", + "level": "L1", + "label": "src/libs/assets/FungibleToken.ts", + "file_path": "src/libs/assets/FungibleToken.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-d6a62d75526a851c966f7b84", + "level": "L1", + "label": "src/libs/assets/NonFungibleToken.ts", + "file_path": "src/libs/assets/NonFungibleToken.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 1 + }, + { + "uuid": "mod-9a663bc106327e8422201a95", + "level": "L1", + "label": "src/libs/blockchain/UDTypes/uns_sol.ts", + "file_path": "src/libs/blockchain/UDTypes/uns_sol.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-12d77c813504670328c9b4f1", + "level": "L1", + "label": "src/libs/blockchain/block.ts", + "file_path": "src/libs/blockchain/block.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 13 + }, + { + "uuid": "mod-d0e009681585b57776f6a187", + "level": "L1", + "label": "src/libs/blockchain/chain.ts", + "file_path": "src/libs/blockchain/chain.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 57 + }, + { + "uuid": "mod-91c215ca923f83144b68d625", + "level": "L1", + "label": "src/libs/blockchain/gcr/gcr.ts", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 27 + }, + { + "uuid": "mod-8786c56780e501016b92f408", + "level": "L1", + "label": "src/libs/blockchain/gcr/gcr_routines/GCRBalanceRoutines.ts", + "file_path": "src/libs/blockchain/gcr/gcr_routines/GCRBalanceRoutines.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 7 + }, + { + "uuid": "mod-056bc15608f58b9ec7451fc4", + "level": "L1", + "label": "src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts", + "file_path": "src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 13 + }, + { + "uuid": "mod-ce3b72f0515cac2e2fe5ca15", + "level": "L1", + "label": "src/libs/blockchain/gcr/gcr_routines/GCRNonceRoutines.ts", + "file_path": "src/libs/blockchain/gcr/gcr_routines/GCRNonceRoutines.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 6 + }, + { + "uuid": "mod-d0734ff72a9c8934deea7846", + "level": "L1", + "label": "src/libs/blockchain/gcr/gcr_routines/GCRTLSNotaryRoutines.ts", + "file_path": "src/libs/blockchain/gcr/gcr_routines/GCRTLSNotaryRoutines.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 5 + }, + { + "uuid": "mod-c5d542bba68467e14e67638a", + "level": "L1", + "label": "src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts", + "file_path": "src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-a2f8e9a3ce2f5a58e00df674", + "level": "L1", + "label": "src/libs/blockchain/gcr/gcr_routines/applyGCROperation.ts", + "file_path": "src/libs/blockchain/gcr/gcr_routines/applyGCROperation.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 9 + }, + { + "uuid": "mod-291d062f1bd46af2d595f119", + "level": "L1", + "label": "src/libs/blockchain/gcr/gcr_routines/assignWeb2.ts", + "file_path": "src/libs/blockchain/gcr/gcr_routines/assignWeb2.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-fe44c1bccd2633149d023f55", + "level": "L1", + "label": "src/libs/blockchain/gcr/gcr_routines/assignXM.ts", + "file_path": "src/libs/blockchain/gcr/gcr_routines/assignXM.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-1d4743119cc890fadab85fb7", + "level": "L1", + "label": "src/libs/blockchain/gcr/gcr_routines/ensureGCRForUser.ts", + "file_path": "src/libs/blockchain/gcr/gcr_routines/ensureGCRForUser.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 13 + }, + { + "uuid": "mod-37b5ef5203b8d54dbbc526c9", + "level": "L1", + "label": "src/libs/blockchain/gcr/gcr_routines/gcrJSONBHandler.ts", + "file_path": "src/libs/blockchain/gcr/gcr_routines/gcrJSONBHandler.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 5 + }, + { + "uuid": "mod-652e9394671c2c32cc57b508", + "level": "L1", + "label": "src/libs/blockchain/gcr/gcr_routines/gcrStateSaverHelper.ts", + "file_path": "src/libs/blockchain/gcr/gcr_routines/gcrStateSaverHelper.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 9 + }, + { + "uuid": "mod-8d16d859c035fc1372e07e06", + "level": "L1", + "label": "src/libs/blockchain/gcr/gcr_routines/handleNativeOperations.ts", + "file_path": "src/libs/blockchain/gcr/gcr_routines/handleNativeOperations.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 3 + }, + { + "uuid": "mod-43a22fa504defe4ae499272f", + "level": "L1", + "label": "src/libs/blockchain/gcr/gcr_routines/hashGCR.ts", + "file_path": "src/libs/blockchain/gcr/gcr_routines/hashGCR.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 16 + }, + { + "uuid": "mod-525c86f0484f1a8328f90e21", + "level": "L1", + "label": "src/libs/blockchain/gcr/gcr_routines/identityManager.ts", + "file_path": "src/libs/blockchain/gcr/gcr_routines/identityManager.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 11 + }, + { + "uuid": "mod-f33c364cc30d4c989aabb467", + "level": "L1", + "label": "src/libs/blockchain/gcr/gcr_routines/index.ts", + "file_path": "src/libs/blockchain/gcr/gcr_routines/index.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-c31ff6a7377bd2e29ce07160", + "level": "L1", + "label": "src/libs/blockchain/gcr/gcr_routines/manageNative.ts", + "file_path": "src/libs/blockchain/gcr/gcr_routines/manageNative.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 6 + }, + { + "uuid": "mod-60ac739c2c89b2f73e69a278", + "level": "L1", + "label": "src/libs/blockchain/gcr/gcr_routines/registerIMPData.ts", + "file_path": "src/libs/blockchain/gcr/gcr_routines/registerIMPData.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 6 + }, + { + "uuid": "mod-e15b2a203e781bad5f15394f", + "level": "L1", + "label": "src/libs/blockchain/gcr/gcr_routines/signatureDetector.ts", + "file_path": "src/libs/blockchain/gcr/gcr_routines/signatureDetector.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-ea8ac339723e29cb2a2446ee", + "level": "L1", + "label": "src/libs/blockchain/gcr/gcr_routines/txToGCROperation.ts", + "file_path": "src/libs/blockchain/gcr/gcr_routines/txToGCROperation.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 5 + }, + { + "uuid": "mod-be7b10b7e34156b0bae273f7", + "level": "L1", + "label": "src/libs/blockchain/gcr/gcr_routines/udIdentityManager.ts", + "file_path": "src/libs/blockchain/gcr/gcr_routines/udIdentityManager.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 10 + }, + { + "uuid": "mod-b989c7daa266d9b652abd067", + "level": "L1", + "label": "src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts", + "file_path": "src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 10 + }, + { + "uuid": "mod-e395bfa94e646748f1e3298e", + "level": "L1", + "label": "src/libs/blockchain/gcr/handleGCR.ts", + "file_path": "src/libs/blockchain/gcr/handleGCR.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 44 + }, + { + "uuid": "mod-8fb910e5659126b322f9fe29", + "level": "L1", + "label": "src/libs/blockchain/gcr/types/GCROperations.ts", + "file_path": "src/libs/blockchain/gcr/types/GCROperations.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 3 + }, + { + "uuid": "mod-77a2526a89e7700a956a35e1", + "level": "L1", + "label": "src/libs/blockchain/gcr/types/NFT.ts", + "file_path": "src/libs/blockchain/gcr/types/NFT.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 1 + }, + { + "uuid": "mod-b46f47672e387229e73f22e6", + "level": "L1", + "label": "src/libs/blockchain/gcr/types/Token.ts", + "file_path": "src/libs/blockchain/gcr/types/Token.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 1 + }, + { + "uuid": "mod-9389bad564e097d75994d5f8", + "level": "L1", + "label": "src/libs/blockchain/l2ps_hashes.ts", + "file_path": "src/libs/blockchain/l2ps_hashes.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 5 + }, + { + "uuid": "mod-c8450797917dfb54fe43ca86", + "level": "L1", + "label": "src/libs/blockchain/l2ps_mempool.ts", + "file_path": "src/libs/blockchain/l2ps_mempool.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 14 + }, + { + "uuid": "mod-8aef488fb2fc78414791967a", + "level": "L1", + "label": "src/libs/blockchain/mempool_v2.ts", + "file_path": "src/libs/blockchain/mempool_v2.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 18 + }, + { + "uuid": "mod-9e6a68c87b4e5c31d84a70f2", + "level": "L1", + "label": "src/libs/blockchain/routines/Sync.ts", + "file_path": "src/libs/blockchain/routines/Sync.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 20 + }, + { + "uuid": "mod-df9148ab5ce0a5a5115bead1", + "level": "L1", + "label": "src/libs/blockchain/routines/beforeFindGenesisHooks.ts", + "file_path": "src/libs/blockchain/routines/beforeFindGenesisHooks.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 8 + }, + { + "uuid": "mod-457939e5e7481c4a6a17e7a3", + "level": "L1", + "label": "src/libs/blockchain/routines/calculateCurrentGas.ts", + "file_path": "src/libs/blockchain/routines/calculateCurrentGas.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 9 + }, + { + "uuid": "mod-7fbfbfcf1e85d7ef732d27ea", + "level": "L1", + "label": "src/libs/blockchain/routines/executeNativeTransaction.ts", + "file_path": "src/libs/blockchain/routines/executeNativeTransaction.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 5 + }, + { + "uuid": "mod-996772d8748b5664e367c6c6", + "level": "L1", + "label": "src/libs/blockchain/routines/executeOperations.ts", + "file_path": "src/libs/blockchain/routines/executeOperations.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 6 + }, + { + "uuid": "mod-52aa016deaac90f2f1067844", + "level": "L1", + "label": "src/libs/blockchain/routines/findGenesisBlock.ts", + "file_path": "src/libs/blockchain/routines/findGenesisBlock.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 5 + }, + { + "uuid": "mod-f87e42bd9aa4eebfae23dbd1", + "level": "L1", + "label": "src/libs/blockchain/routines/loadGenesisIdentities.ts", + "file_path": "src/libs/blockchain/routines/loadGenesisIdentities.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-5758817d6b816e39b8e7e4b3", + "level": "L1", + "label": "src/libs/blockchain/routines/subOperations.ts", + "file_path": "src/libs/blockchain/routines/subOperations.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 9 + }, + { + "uuid": "mod-20f30418ca95fd46594075af", + "level": "L1", + "label": "src/libs/blockchain/routines/validateTransaction.ts", + "file_path": "src/libs/blockchain/routines/validateTransaction.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 14 + }, + { + "uuid": "mod-2f8fcf8b410da0c1f6892901", + "level": "L1", + "label": "src/libs/blockchain/routines/validatorsManagement.ts", + "file_path": "src/libs/blockchain/routines/validatorsManagement.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 3 + }, + { + "uuid": "mod-1de8a1fb6a48c6a931549f30", + "level": "L1", + "label": "src/libs/blockchain/transaction.ts", + "file_path": "src/libs/blockchain/transaction.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 24 + }, + { + "uuid": "mod-3d5f49cf64c24935d34290c4", + "level": "L1", + "label": "src/libs/blockchain/types/confirmation.ts", + "file_path": "src/libs/blockchain/types/confirmation.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-7f4649fc39674866ce6591cc", + "level": "L1", + "label": "src/libs/blockchain/types/genesisTypes.ts", + "file_path": "src/libs/blockchain/types/genesisTypes.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-892576d596aa8b40bed3d2f9", + "level": "L1", + "label": "src/libs/communications/broadcastManager.ts", + "file_path": "src/libs/communications/broadcastManager.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 10 + }, + { + "uuid": "mod-6f74719a94e9135573217051", + "level": "L1", + "label": "src/libs/communications/index.ts", + "file_path": "src/libs/communications/index.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-a5c28a9abc4da2bd27d3cbb4", + "level": "L1", + "label": "src/libs/communications/transmission.ts", + "file_path": "src/libs/communications/transmission.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 8 + }, + { + "uuid": "mod-a365b7714dec16f0bf79621e", + "level": "L1", + "label": "src/libs/consensus/routines/consensusTime.ts", + "file_path": "src/libs/consensus/routines/consensusTime.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 7 + }, + { + "uuid": "mod-0fabbf7facc4e7b4b62c59ae", + "level": "L1", + "label": "src/libs/consensus/v2/PoRBFT.ts", + "file_path": "src/libs/consensus/v2/PoRBFT.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 27 + }, + { + "uuid": "mod-5a3b55b43394de7f8c762546", + "level": "L1", + "label": "src/libs/consensus/v2/interfaces.ts", + "file_path": "src/libs/consensus/v2/interfaces.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 5 + }, + { + "uuid": "mod-eafbd86811c7222ae0334af1", + "level": "L1", + "label": "src/libs/consensus/v2/routines/averageTimestamp.ts", + "file_path": "src/libs/consensus/v2/routines/averageTimestamp.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 3 + }, + { + "uuid": "mod-a9472d145601bd72b2b81e65", + "level": "L1", + "label": "src/libs/consensus/v2/routines/broadcastBlockHash.ts", + "file_path": "src/libs/consensus/v2/routines/broadcastBlockHash.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 6 + }, + { + "uuid": "mod-128ee1689e701accb1643b15", + "level": "L1", + "label": "src/libs/consensus/v2/routines/createBlock.ts", + "file_path": "src/libs/consensus/v2/routines/createBlock.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 10 + }, + { + "uuid": "mod-b348b25ed5a5571412a85da0", + "level": "L1", + "label": "src/libs/consensus/v2/routines/ensureCandidateBlockFormed.ts", + "file_path": "src/libs/consensus/v2/routines/ensureCandidateBlockFormed.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 5 + }, + { + "uuid": "mod-91454010a0aa78f3ef28bd69", + "level": "L1", + "label": "src/libs/consensus/v2/routines/getCommonValidatorSeed.ts", + "file_path": "src/libs/consensus/v2/routines/getCommonValidatorSeed.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 16 + }, + { + "uuid": "mod-1f38e75fd9b9f51f96a2d975", + "level": "L1", + "label": "src/libs/consensus/v2/routines/getShard.ts", + "file_path": "src/libs/consensus/v2/routines/getShard.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 11 + }, + { + "uuid": "mod-77aac2da6c6f0fbc37663544", + "level": "L1", + "label": "src/libs/consensus/v2/routines/isValidator.ts", + "file_path": "src/libs/consensus/v2/routines/isValidator.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 7 + }, + { + "uuid": "mod-43e420b038a56638079168bc", + "level": "L1", + "label": "src/libs/consensus/v2/routines/manageProposeBlockHash.ts", + "file_path": "src/libs/consensus/v2/routines/manageProposeBlockHash.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 10 + }, + { + "uuid": "mod-4abf6009e6ef176fec251259", + "level": "L1", + "label": "src/libs/consensus/v2/routines/mergeMempools.ts", + "file_path": "src/libs/consensus/v2/routines/mergeMempools.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-0265f572c93b5fdc1506bdda", + "level": "L1", + "label": "src/libs/consensus/v2/routines/mergePeerlist.ts", + "file_path": "src/libs/consensus/v2/routines/mergePeerlist.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-1b966da09e8eebb2af4ea0ae", + "level": "L1", + "label": "src/libs/consensus/v2/routines/orderTransactions.ts", + "file_path": "src/libs/consensus/v2/routines/orderTransactions.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-fcbaaa2e6fedeb87a2dc2d8e", + "level": "L1", + "label": "src/libs/consensus/v2/types/secretaryManager.ts", + "file_path": "src/libs/consensus/v2/types/secretaryManager.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 13 + }, + { + "uuid": "mod-ecaffe079222e4664d98655f", + "level": "L1", + "label": "src/libs/consensus/v2/types/shardTypes.ts", + "file_path": "src/libs/consensus/v2/types/shardTypes.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 3 + }, + { + "uuid": "mod-523a32046a2c4caccecf050d", + "level": "L1", + "label": "src/libs/consensus/v2/types/validationStatusTypes.ts", + "file_path": "src/libs/consensus/v2/types/validationStatusTypes.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 5 + }, + { + "uuid": "mod-3a3b7b050c56c146875c18fb", + "level": "L1", + "label": "src/libs/crypto/cryptography.ts", + "file_path": "src/libs/crypto/cryptography.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 18 + }, + { + "uuid": "mod-b2c7d957ae05ce535d8f8e2e", + "level": "L1", + "label": "src/libs/crypto/forgeUtils.ts", + "file_path": "src/libs/crypto/forgeUtils.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 14 + }, + { + "uuid": "mod-84552d58b6743daab10f83b3", + "level": "L1", + "label": "src/libs/crypto/hashing.ts", + "file_path": "src/libs/crypto/hashing.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 27 + }, + { + "uuid": "mod-d1ccb3f2c31e96f4ad5dab3f", + "level": "L1", + "label": "src/libs/crypto/index.ts", + "file_path": "src/libs/crypto/index.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 6 + }, + { + "uuid": "mod-04e38e9e7bbb7be0a3e4dce7", + "level": "L1", + "label": "src/libs/crypto/rsa.ts", + "file_path": "src/libs/crypto/rsa.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-b5a2bbfcc551f4a8277420d0", + "level": "L1", + "label": "src/libs/identity/identity.ts", + "file_path": "src/libs/identity/identity.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 6 + }, + { + "uuid": "mod-995b3971c802fa33d1e8772a", + "level": "L1", + "label": "src/libs/identity/index.ts", + "file_path": "src/libs/identity/index.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-92957ee0de7980fc9c719d03", + "level": "L1", + "label": "src/libs/identity/providers/nomisIdentityProvider.ts", + "file_path": "src/libs/identity/providers/nomisIdentityProvider.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 10 + }, + { + "uuid": "mod-1b44d7490c1bab1a28faf13b", + "level": "L1", + "label": "src/libs/identity/tools/crosschain.ts", + "file_path": "src/libs/identity/tools/crosschain.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 3 + }, + { + "uuid": "mod-7656cd8b9f3c2f0776a9aaa8", + "level": "L1", + "label": "src/libs/identity/tools/discord.ts", + "file_path": "src/libs/identity/tools/discord.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 5 + }, + { + "uuid": "mod-49040f43d8c17532e83ed67d", + "level": "L1", + "label": "src/libs/identity/tools/nomis.ts", + "file_path": "src/libs/identity/tools/nomis.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 6 + }, + { + "uuid": "mod-a1bb18b05142b623b9fb8be4", + "level": "L1", + "label": "src/libs/identity/tools/twitter.ts", + "file_path": "src/libs/identity/tools/twitter.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 7 + }, + { + "uuid": "mod-9b1b89cd5b264f022df908d4", + "level": "L1", + "label": "src/libs/l2ps/L2PSBatchAggregator.ts", + "file_path": "src/libs/l2ps/L2PSBatchAggregator.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 12 + }, + { + "uuid": "mod-3f601c90582b585a8d9b6d4b", + "level": "L1", + "label": "src/libs/l2ps/L2PSConcurrentSync.ts", + "file_path": "src/libs/l2ps/L2PSConcurrentSync.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 9 + }, + { + "uuid": "mod-0f4a4cd8bc5da602adf2a2fa", + "level": "L1", + "label": "src/libs/l2ps/L2PSConsensus.ts", + "file_path": "src/libs/l2ps/L2PSConsensus.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 10 + }, + { + "uuid": "mod-cee54b249e5709ba015c9342", + "level": "L1", + "label": "src/libs/l2ps/L2PSHashService.ts", + "file_path": "src/libs/l2ps/L2PSHashService.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 13 + }, + { + "uuid": "mod-c096e9d35a0fa633ff44cda0", + "level": "L1", + "label": "src/libs/l2ps/L2PSProofManager.ts", + "file_path": "src/libs/l2ps/L2PSProofManager.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 11 + }, + { + "uuid": "mod-3be22133d78983422a1da0d9", + "level": "L1", + "label": "src/libs/l2ps/L2PSTransactionExecutor.ts", + "file_path": "src/libs/l2ps/L2PSTransactionExecutor.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 10 + }, + { + "uuid": "mod-ec09ae3ca7a100b5fa55556d", + "level": "L1", + "label": "src/libs/l2ps/parallelNetworks.ts", + "file_path": "src/libs/l2ps/parallelNetworks.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 7 + }, + { + "uuid": "mod-df3c25d58c0f2295ea451896", + "level": "L1", + "label": "src/libs/l2ps/types.ts", + "file_path": "src/libs/l2ps/types.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-f9348034f6db4a0cbf002ce1", + "level": "L1", + "label": "src/libs/l2ps/zk/BunPlonkWrapper.ts", + "file_path": "src/libs/l2ps/zk/BunPlonkWrapper.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-ffe258ffef0cb8215e2647fe", + "level": "L1", + "label": "src/libs/l2ps/zk/L2PSBatchProver.ts", + "file_path": "src/libs/l2ps/zk/L2PSBatchProver.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 7 + }, + { + "uuid": "mod-2fded54dba25de314f5f89fc", + "level": "L1", + "label": "src/libs/l2ps/zk/circomlibjs.d.ts", + "file_path": "src/libs/l2ps/zk/circomlibjs.d.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 0 + }, + { + "uuid": "mod-7e2f3258e284cbd5d3adac6d", + "level": "L1", + "label": "src/libs/l2ps/zk/snarkjs.d.ts", + "file_path": "src/libs/l2ps/zk/snarkjs.d.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 0 + }, + { + "uuid": "mod-60eb69f9fe1fbcab27fafb79", + "level": "L1", + "label": "src/libs/l2ps/zk/zkProofProcess.ts", + "file_path": "src/libs/l2ps/zk/zkProofProcess.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 0 + }, + { + "uuid": "mod-38cb481227a16780e055daf9", + "level": "L1", + "label": "src/libs/network/authContext.ts", + "file_path": "src/libs/network/authContext.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 5 + }, + { + "uuid": "mod-93380aca3aab056f0dd2e4e0", + "level": "L1", + "label": "src/libs/network/bunServer.ts", + "file_path": "src/libs/network/bunServer.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 13 + }, + { + "uuid": "mod-a8a39a4fb87704dbcb720225", + "level": "L1", + "label": "src/libs/network/dtr/dtrmanager.ts", + "file_path": "src/libs/network/dtr/dtrmanager.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 15 + }, + { + "uuid": "mod-455d4fbaf89d273aa029864d", + "level": "L1", + "label": "src/libs/network/endpointHandlers.ts", + "file_path": "src/libs/network/endpointHandlers.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 26 + }, + { + "uuid": "mod-4e2125f21e95a0201a05fc85", + "level": "L1", + "label": "src/libs/network/index.ts", + "file_path": "src/libs/network/index.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 3 + }, + { + "uuid": "mod-efd6ff5fba09516480c9e2e4", + "level": "L1", + "label": "src/libs/network/manageAuth.ts", + "file_path": "src/libs/network/manageAuth.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 5 + }, + { + "uuid": "mod-2b2cb5f2f246c796e349f6aa", + "level": "L1", + "label": "src/libs/network/manageBridge.ts", + "file_path": "src/libs/network/manageBridge.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-2e55150ffa8226bdba0597cc", + "level": "L1", + "label": "src/libs/network/manageConsensusRoutines.ts", + "file_path": "src/libs/network/manageConsensusRoutines.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 16 + }, + { + "uuid": "mod-f1c149177b4fb9bc2b7ee080", + "level": "L1", + "label": "src/libs/network/manageExecution.ts", + "file_path": "src/libs/network/manageExecution.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 6 + }, + { + "uuid": "mod-60e11fd9921263398a239451", + "level": "L1", + "label": "src/libs/network/manageGCRRoutines.ts", + "file_path": "src/libs/network/manageGCRRoutines.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 10 + }, + { + "uuid": "mod-5dd7573d658ce3d7ea74353a", + "level": "L1", + "label": "src/libs/network/manageHelloPeer.ts", + "file_path": "src/libs/network/manageHelloPeer.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 10 + }, + { + "uuid": "mod-025199ea4543cbbe2ddf79a8", + "level": "L1", + "label": "src/libs/network/manageLogin.ts", + "file_path": "src/libs/network/manageLogin.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 6 + }, + { + "uuid": "mod-e09bbf55f33f0d36061b2348", + "level": "L1", + "label": "src/libs/network/manageNativeBridge.ts", + "file_path": "src/libs/network/manageNativeBridge.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 3 + }, + { + "uuid": "mod-3f71e0e4e5c692c7690b3c86", + "level": "L1", + "label": "src/libs/network/manageNodeCall.ts", + "file_path": "src/libs/network/manageNodeCall.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 35 + }, + { + "uuid": "mod-22a231e7e2a8fa48e00405d7", + "level": "L1", + "label": "src/libs/network/manageP2P.ts", + "file_path": "src/libs/network/manageP2P.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 5 + }, + { + "uuid": "mod-f215e43fe388f34d276e0935", + "level": "L1", + "label": "src/libs/network/methodListing.ts", + "file_path": "src/libs/network/methodListing.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-5f1b8ed2b401d728855c038c", + "level": "L1", + "label": "src/libs/network/middleware/rateLimiter.ts", + "file_path": "src/libs/network/middleware/rateLimiter.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 7 + }, + { + "uuid": "mod-7b8929603b5d94f3dafe9dea", + "level": "L1", + "label": "src/libs/network/openApiSpec.ts", + "file_path": "src/libs/network/openApiSpec.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-6a73c250ca0d545930026d4a", + "level": "L1", + "label": "src/libs/network/routines/checkGasPriorOperation.ts", + "file_path": "src/libs/network/routines/checkGasPriorOperation.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 1 + }, + { + "uuid": "mod-c996d6d5043c881bd6ad5b03", + "level": "L1", + "label": "src/libs/network/routines/determineGasForOperation.ts", + "file_path": "src/libs/network/routines/determineGasForOperation.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 3 + }, + { + "uuid": "mod-2d8e2ee0779d753dbf529ccf", + "level": "L1", + "label": "src/libs/network/routines/eggs.ts", + "file_path": "src/libs/network/routines/eggs.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-d438c33c3d72df9bd7dd472a", + "level": "L1", + "label": "src/libs/network/routines/gasDeal.ts", + "file_path": "src/libs/network/routines/gasDeal.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 6 + }, + { + "uuid": "mod-f235c77fff58b93b0ef4a745", + "level": "L1", + "label": "src/libs/network/routines/getRemoteIP.ts", + "file_path": "src/libs/network/routines/getRemoteIP.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-6e27fb3b8c84e1baeea2a944", + "level": "L1", + "label": "src/libs/network/routines/nodecalls/getBlockByHash.ts", + "file_path": "src/libs/network/routines/nodecalls/getBlockByHash.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-587a0dac663054ccdc90b2bc", + "level": "L1", + "label": "src/libs/network/routines/nodecalls/getBlockByNumber.ts", + "file_path": "src/libs/network/routines/nodecalls/getBlockByNumber.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 5 + }, + { + "uuid": "mod-5d68d5d1029351abd62fa157", + "level": "L1", + "label": "src/libs/network/routines/nodecalls/getBlockHeaderByHash.ts", + "file_path": "src/libs/network/routines/nodecalls/getBlockHeaderByHash.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-eeb3f53b29866be8d2cb970f", + "level": "L1", + "label": "src/libs/network/routines/nodecalls/getBlockHeaderByNumber.ts", + "file_path": "src/libs/network/routines/nodecalls/getBlockHeaderByNumber.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-1a126c017b2b7dd41d6846f0", + "level": "L1", + "label": "src/libs/network/routines/nodecalls/getBlocks.ts", + "file_path": "src/libs/network/routines/nodecalls/getBlocks.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-82b6a522914548c8fd24479a", + "level": "L1", + "label": "src/libs/network/routines/nodecalls/getPeerInfo.ts", + "file_path": "src/libs/network/routines/nodecalls/getPeerInfo.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 3 + }, + { + "uuid": "mod-303258444053b0a43538b62b", + "level": "L1", + "label": "src/libs/network/routines/nodecalls/getPeerlist.ts", + "file_path": "src/libs/network/routines/nodecalls/getPeerlist.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 5 + }, + { + "uuid": "mod-4608ef549e373e94702c2215", + "level": "L1", + "label": "src/libs/network/routines/nodecalls/getPreviousHashFromBlockHash.ts", + "file_path": "src/libs/network/routines/nodecalls/getPreviousHashFromBlockHash.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-ea8a0a466499b8a4e9d2b2fd", + "level": "L1", + "label": "src/libs/network/routines/nodecalls/getPreviousHashFromBlockNumber.ts", + "file_path": "src/libs/network/routines/nodecalls/getPreviousHashFromBlockNumber.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-a25839dd6ba039a8c958583f", + "level": "L1", + "label": "src/libs/network/routines/nodecalls/getTransactions.ts", + "file_path": "src/libs/network/routines/nodecalls/getTransactions.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-00cbdca09e56b6109b846e9b", + "level": "L1", + "label": "src/libs/network/routines/nodecalls/getTxsByHashes.ts", + "file_path": "src/libs/network/routines/nodecalls/getTxsByHashes.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-fab341be779110d20904d642", + "level": "L1", + "label": "src/libs/network/routines/normalizeWebBuffers.ts", + "file_path": "src/libs/network/routines/normalizeWebBuffers.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 3 + }, + { + "uuid": "mod-be77f5db5117aff014090a24", + "level": "L1", + "label": "src/libs/network/routines/sessionManager.ts", + "file_path": "src/libs/network/routines/sessionManager.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 5 + }, + { + "uuid": "mod-5269202219af5585cb61f564", + "level": "L1", + "label": "src/libs/network/routines/timeSync.ts", + "file_path": "src/libs/network/routines/timeSync.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 7 + }, + { + "uuid": "mod-c44377cbc773462d72dd13fa", + "level": "L1", + "label": "src/libs/network/routines/timeSyncUtils.ts", + "file_path": "src/libs/network/routines/timeSyncUtils.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 10 + }, + { + "uuid": "mod-dc9656310d022085b2936dcc", + "level": "L1", + "label": "src/libs/network/routines/transactions/demosWork/handleDemosWorkRequest.ts", + "file_path": "src/libs/network/routines/transactions/demosWork/handleDemosWorkRequest.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 10 + }, + { + "uuid": "mod-b1d30e1636da57dbf8144fd7", + "level": "L1", + "label": "src/libs/network/routines/transactions/demosWork/handleStep.ts", + "file_path": "src/libs/network/routines/transactions/demosWork/handleStep.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 8 + }, + { + "uuid": "mod-a66773add774e134dc55fb9c", + "level": "L1", + "label": "src/libs/network/routines/transactions/demosWork/processOperations.ts", + "file_path": "src/libs/network/routines/transactions/demosWork/processOperations.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 5 + }, + { + "uuid": "mod-bc30cadc96b2e14f87980a9c", + "level": "L1", + "label": "src/libs/network/routines/transactions/handleIdentityRequest.ts", + "file_path": "src/libs/network/routines/transactions/handleIdentityRequest.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 6 + }, + { + "uuid": "mod-efae4e57fd7a4c96e3e2b085", + "level": "L1", + "label": "src/libs/network/routines/transactions/handleL2PS.ts", + "file_path": "src/libs/network/routines/transactions/handleL2PS.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 10 + }, + { + "uuid": "mod-1159d5b65cc6179495dba86e", + "level": "L1", + "label": "src/libs/network/routines/transactions/handleNativeBridgeTx.ts", + "file_path": "src/libs/network/routines/transactions/handleNativeBridgeTx.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-3adb0b7ff3ed55bc318f2ce4", + "level": "L1", + "label": "src/libs/network/routines/transactions/handleNativeRequest.ts", + "file_path": "src/libs/network/routines/transactions/handleNativeRequest.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 3 + }, + { + "uuid": "mod-55764c2c659740ce445946f7", + "level": "L1", + "label": "src/libs/network/routines/transactions/handleWeb2ProxyRequest.ts", + "file_path": "src/libs/network/routines/transactions/handleWeb2ProxyRequest.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 9 + }, + { + "uuid": "mod-a152cd44db7715c440d48dda", + "level": "L1", + "label": "src/libs/network/securityModule.ts", + "file_path": "src/libs/network/securityModule.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-8178eae36aec57f1b202e180", + "level": "L1", + "label": "src/libs/network/server_rpc.ts", + "file_path": "src/libs/network/server_rpc.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 41 + }, + { + "uuid": "mod-8eb2e47a2e706233783e8ea4", + "level": "L1", + "label": "src/libs/network/verifySignature.ts", + "file_path": "src/libs/network/verifySignature.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 5 + }, + { + "uuid": "mod-0f688ec55978b6cd5ecd4803", + "level": "L1", + "label": "src/libs/omniprotocol/auth/parser.ts", + "file_path": "src/libs/omniprotocol/auth/parser.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 5 + }, + { + "uuid": "mod-28ff727efa5c0915d4fbfbe9", + "level": "L1", + "label": "src/libs/omniprotocol/auth/types.ts", + "file_path": "src/libs/omniprotocol/auth/types.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 11 + }, + { + "uuid": "mod-e421d8434312ee89ef377735", + "level": "L1", + "label": "src/libs/omniprotocol/auth/verifier.ts", + "file_path": "src/libs/omniprotocol/auth/verifier.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 6 + }, + { + "uuid": "mod-0d23e37fd3828b9a02bf3b23", + "level": "L1", + "label": "src/libs/omniprotocol/index.ts", + "file_path": "src/libs/omniprotocol/index.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 31 + }, + { + "uuid": "mod-cf03366f5eef469f1f9abae5", + "level": "L1", + "label": "src/libs/omniprotocol/integration/BaseAdapter.ts", + "file_path": "src/libs/omniprotocol/integration/BaseAdapter.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 10 + }, + { + "uuid": "mod-eef3b769fd906f6d2e387d17", + "level": "L1", + "label": "src/libs/omniprotocol/integration/consensusAdapter.ts", + "file_path": "src/libs/omniprotocol/integration/consensusAdapter.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 10 + }, + { + "uuid": "mod-520483a8a175e4c376a6fc66", + "level": "L1", + "label": "src/libs/omniprotocol/integration/index.ts", + "file_path": "src/libs/omniprotocol/integration/index.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 17 + }, + { + "uuid": "mod-88c1741b3b46fa02af202651", + "level": "L1", + "label": "src/libs/omniprotocol/integration/keys.ts", + "file_path": "src/libs/omniprotocol/integration/keys.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 10 + }, + { + "uuid": "mod-d3bd2f24c047572fef2bb57d", + "level": "L1", + "label": "src/libs/omniprotocol/integration/peerAdapter.ts", + "file_path": "src/libs/omniprotocol/integration/peerAdapter.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 9 + }, + { + "uuid": "mod-ba811634639e67c5ad6dad6a", + "level": "L1", + "label": "src/libs/omniprotocol/integration/startup.ts", + "file_path": "src/libs/omniprotocol/integration/startup.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 13 + }, + { + "uuid": "mod-8040973db91efbca29bd5a3f", + "level": "L1", + "label": "src/libs/omniprotocol/protocol/dispatcher.ts", + "file_path": "src/libs/omniprotocol/protocol/dispatcher.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 8 + }, + { + "uuid": "mod-9b81da9944f3e64f4bb36898", + "level": "L1", + "label": "src/libs/omniprotocol/protocol/handlers/consensus.ts", + "file_path": "src/libs/omniprotocol/protocol/handlers/consensus.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 11 + }, + { + "uuid": "mod-81df5ad5e23b1f5a430705f8", + "level": "L1", + "label": "src/libs/omniprotocol/protocol/handlers/control.ts", + "file_path": "src/libs/omniprotocol/protocol/handlers/control.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 11 + }, + { + "uuid": "mod-62ff6356c1ab42c00fe12c14", + "level": "L1", + "label": "src/libs/omniprotocol/protocol/handlers/gcr.ts", + "file_path": "src/libs/omniprotocol/protocol/handlers/gcr.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 16 + }, + { + "uuid": "mod-8fe5e92214e16e3971d40e48", + "level": "L1", + "label": "src/libs/omniprotocol/protocol/handlers/l2ps.ts", + "file_path": "src/libs/omniprotocol/protocol/handlers/l2ps.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 15 + }, + { + "uuid": "mod-b986d7806992d6c650aa2abc", + "level": "L1", + "label": "src/libs/omniprotocol/protocol/handlers/meta.ts", + "file_path": "src/libs/omniprotocol/protocol/handlers/meta.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 9 + }, + { + "uuid": "mod-a7c0beb3ec427a0c7c2c3f7f", + "level": "L1", + "label": "src/libs/omniprotocol/protocol/handlers/sync.ts", + "file_path": "src/libs/omniprotocol/protocol/handlers/sync.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 14 + }, + { + "uuid": "mod-c3ac921e455e2c85a68228e4", + "level": "L1", + "label": "src/libs/omniprotocol/protocol/handlers/transaction.ts", + "file_path": "src/libs/omniprotocol/protocol/handlers/transaction.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 11 + }, + { + "uuid": "mod-8a38038e04d5bed97a843cbd", + "level": "L1", + "label": "src/libs/omniprotocol/protocol/handlers/utils.ts", + "file_path": "src/libs/omniprotocol/protocol/handlers/utils.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 8 + }, + { + "uuid": "mod-0e059ca33e0c78acb79559e8", + "level": "L1", + "label": "src/libs/omniprotocol/protocol/opcodes.ts", + "file_path": "src/libs/omniprotocol/protocol/opcodes.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 9 + }, + { + "uuid": "mod-2c0f4f3afaaec106ad82bf77", + "level": "L1", + "label": "src/libs/omniprotocol/protocol/registry.ts", + "file_path": "src/libs/omniprotocol/protocol/registry.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 15 + }, + { + "uuid": "mod-88b203dbc16db3025123970b", + "level": "L1", + "label": "src/libs/omniprotocol/ratelimit/RateLimiter.ts", + "file_path": "src/libs/omniprotocol/ratelimit/RateLimiter.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 3 + }, + { + "uuid": "mod-7ff977b2cc6a6dde99d1c4a1", + "level": "L1", + "label": "src/libs/omniprotocol/ratelimit/index.ts", + "file_path": "src/libs/omniprotocol/ratelimit/index.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-c2ea467ec2d317289746a260", + "level": "L1", + "label": "src/libs/omniprotocol/ratelimit/types.ts", + "file_path": "src/libs/omniprotocol/ratelimit/types.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 7 + }, + { + "uuid": "mod-7a54f789433ac1b88a2975b0", + "level": "L1", + "label": "src/libs/omniprotocol/serialization/consensus.ts", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 30 + }, + { + "uuid": "mod-fda58e5568b7fcba96a8a55c", + "level": "L1", + "label": "src/libs/omniprotocol/serialization/control.ts", + "file_path": "src/libs/omniprotocol/serialization/control.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 25 + }, + { + "uuid": "mod-318b87a4c520cdb8c42c50c8", + "level": "L1", + "label": "src/libs/omniprotocol/serialization/gcr.ts", + "file_path": "src/libs/omniprotocol/serialization/gcr.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 6 + }, + { + "uuid": "mod-da04ef1eca622af1ef3664c3", + "level": "L1", + "label": "src/libs/omniprotocol/serialization/jsonEnvelope.ts", + "file_path": "src/libs/omniprotocol/serialization/jsonEnvelope.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 14 + }, + { + "uuid": "mod-10774a0b5dd2473051df0fad", + "level": "L1", + "label": "src/libs/omniprotocol/serialization/l2ps.ts", + "file_path": "src/libs/omniprotocol/serialization/l2ps.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 19 + }, + { + "uuid": "mod-b08e6ddaebbb67ea6d37877c", + "level": "L1", + "label": "src/libs/omniprotocol/serialization/meta.ts", + "file_path": "src/libs/omniprotocol/serialization/meta.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 22 + }, + { + "uuid": "mod-f2ed72921c23c1fc451fd89c", + "level": "L1", + "label": "src/libs/omniprotocol/serialization/primitives.ts", + "file_path": "src/libs/omniprotocol/serialization/primitives.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 12 + }, + { + "uuid": "mod-60762ca0d2e77317b47957f2", + "level": "L1", + "label": "src/libs/omniprotocol/serialization/sync.ts", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 39 + }, + { + "uuid": "mod-51a57a3bb204ec45b2b3f614", + "level": "L1", + "label": "src/libs/omniprotocol/serialization/transaction.ts", + "file_path": "src/libs/omniprotocol/serialization/transaction.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 9 + }, + { + "uuid": "mod-c7ad59fd02de9e38e55f238d", + "level": "L1", + "label": "src/libs/omniprotocol/server/InboundConnection.ts", + "file_path": "src/libs/omniprotocol/server/InboundConnection.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 10 + }, + { + "uuid": "mod-21706187666573b14b262650", + "level": "L1", + "label": "src/libs/omniprotocol/server/OmniProtocolServer.ts", + "file_path": "src/libs/omniprotocol/server/OmniProtocolServer.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 6 + }, + { + "uuid": "mod-ca241437dd7ea992b976eec8", + "level": "L1", + "label": "src/libs/omniprotocol/server/ServerConnectionManager.ts", + "file_path": "src/libs/omniprotocol/server/ServerConnectionManager.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 7 + }, + { + "uuid": "mod-bee55878a628d2e61003c5cc", + "level": "L1", + "label": "src/libs/omniprotocol/server/TLSServer.ts", + "file_path": "src/libs/omniprotocol/server/TLSServer.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 9 + }, + { + "uuid": "mod-992e96869304ba6455a502bd", + "level": "L1", + "label": "src/libs/omniprotocol/server/index.ts", + "file_path": "src/libs/omniprotocol/server/index.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 8 + }, + { + "uuid": "mod-ee32d301b857ba4c7de679c2", + "level": "L1", + "label": "src/libs/omniprotocol/tls/certificates.ts", + "file_path": "src/libs/omniprotocol/tls/certificates.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 14 + }, + { + "uuid": "mod-f34f89c5406499b05c630026", + "level": "L1", + "label": "src/libs/omniprotocol/tls/index.ts", + "file_path": "src/libs/omniprotocol/tls/index.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 6 + }, + { + "uuid": "mod-f6f853a3f874d365c69ba912", + "level": "L1", + "label": "src/libs/omniprotocol/tls/initialize.ts", + "file_path": "src/libs/omniprotocol/tls/initialize.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 7 + }, + { + "uuid": "mod-eff94816a8124a44948e1724", + "level": "L1", + "label": "src/libs/omniprotocol/tls/types.ts", + "file_path": "src/libs/omniprotocol/tls/types.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 11 + }, + { + "uuid": "mod-0dd8c1befae8423fcc7d4fcd", + "level": "L1", + "label": "src/libs/omniprotocol/transport/ConnectionFactory.ts", + "file_path": "src/libs/omniprotocol/transport/ConnectionFactory.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 6 + }, + { + "uuid": "mod-a5b4a44206cc0f3e39469a88", + "level": "L1", + "label": "src/libs/omniprotocol/transport/ConnectionPool.ts", + "file_path": "src/libs/omniprotocol/transport/ConnectionPool.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 7 + }, + { + "uuid": "mod-28add79b36597a8f639320cc", + "level": "L1", + "label": "src/libs/omniprotocol/transport/MessageFramer.ts", + "file_path": "src/libs/omniprotocol/transport/MessageFramer.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 9 + }, + { + "uuid": "mod-a877268ad21d1ba59035ea1f", + "level": "L1", + "label": "src/libs/omniprotocol/transport/PeerConnection.ts", + "file_path": "src/libs/omniprotocol/transport/PeerConnection.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 13 + }, + { + "uuid": "mod-a65de7b43b60edb96e04a5d1", + "level": "L1", + "label": "src/libs/omniprotocol/transport/TLSConnection.ts", + "file_path": "src/libs/omniprotocol/transport/TLSConnection.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 7 + }, + { + "uuid": "mod-eac0ec2113f231fdec114b7c", + "level": "L1", + "label": "src/libs/omniprotocol/transport/types.ts", + "file_path": "src/libs/omniprotocol/transport/types.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 17 + }, + { + "uuid": "mod-f486beaedaf6d01b3f5574b4", + "level": "L1", + "label": "src/libs/omniprotocol/types/config.ts", + "file_path": "src/libs/omniprotocol/types/config.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 9 + }, + { + "uuid": "mod-0ec41645e6ad231f2006c934", + "level": "L1", + "label": "src/libs/omniprotocol/types/errors.ts", + "file_path": "src/libs/omniprotocol/types/errors.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 17 + }, + { + "uuid": "mod-fa9dc053ab761e9fa1b23eca", + "level": "L1", + "label": "src/libs/omniprotocol/types/message.ts", + "file_path": "src/libs/omniprotocol/types/message.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 23 + }, + { + "uuid": "mod-21be8fb976449bbe3589ce47", + "level": "L1", + "label": "src/libs/peer/Peer.ts", + "file_path": "src/libs/peer/Peer.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 21 + }, + { + "uuid": "mod-074e7c12d54384c86eabf721", + "level": "L1", + "label": "src/libs/peer/PeerManager.ts", + "file_path": "src/libs/peer/PeerManager.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 15 + }, + { + "uuid": "mod-f6d94e4d95aaab72efaa757c", + "level": "L1", + "label": "src/libs/peer/index.ts", + "file_path": "src/libs/peer/index.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-94b639d8e332eed46da2f8af", + "level": "L1", + "label": "src/libs/peer/routines/broadcast.ts", + "file_path": "src/libs/peer/routines/broadcast.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-c16d69bfcfaea5546b2859a7", + "level": "L1", + "label": "src/libs/peer/routines/checkOfflinePeers.ts", + "file_path": "src/libs/peer/routines/checkOfflinePeers.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 5 + }, + { + "uuid": "mod-570eac54a9d81c36302eb6d0", + "level": "L1", + "label": "src/libs/peer/routines/getPeerConnectionString.ts", + "file_path": "src/libs/peer/routines/getPeerConnectionString.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 5 + }, + { + "uuid": "mod-a216d9e19ade66b2cdd92076", + "level": "L1", + "label": "src/libs/peer/routines/getPeerIdentity.ts", + "file_path": "src/libs/peer/routines/getPeerIdentity.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 7 + }, + { + "uuid": "mod-33ee18e613fc6fedad6673e0", + "level": "L1", + "label": "src/libs/peer/routines/isPeerInList.ts", + "file_path": "src/libs/peer/routines/isPeerInList.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 3 + }, + { + "uuid": "mod-c85a25b09fa10c16a8188ca0", + "level": "L1", + "label": "src/libs/peer/routines/peerBootstrap.ts", + "file_path": "src/libs/peer/routines/peerBootstrap.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 8 + }, + { + "uuid": "mod-dcce6518be2af59c2b776acc", + "level": "L1", + "label": "src/libs/peer/routines/peerGossip.ts", + "file_path": "src/libs/peer/routines/peerGossip.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 7 + }, + { + "uuid": "mod-90e071af56fbf11e5911520b", + "level": "L1", + "label": "src/libs/tlsnotary/index.ts", + "file_path": "src/libs/tlsnotary/index.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 15 + }, + { + "uuid": "mod-52720c35cbea3e8d81ae7a70", + "level": "L1", + "label": "src/libs/tlsnotary/verifier.ts", + "file_path": "src/libs/tlsnotary/verifier.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 17 + }, + { + "uuid": "mod-f67afbbcc2c394e0b6549ff8", + "level": "L1", + "label": "src/libs/utils/calibrateTime.ts", + "file_path": "src/libs/utils/calibrateTime.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 9 + }, + { + "uuid": "mod-1275104cbadf8ae764bfc2cd", + "level": "L1", + "label": "src/libs/utils/demostdlib/NodeStorage.ts", + "file_path": "src/libs/utils/demostdlib/NodeStorage.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-4dda3c12aae4a0b02bbb9bc6", + "level": "L1", + "label": "src/libs/utils/demostdlib/deriveMempoolOperation.ts", + "file_path": "src/libs/utils/demostdlib/deriveMempoolOperation.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 10 + }, + { + "uuid": "mod-01f50a9581dc3e727fc130d5", + "level": "L1", + "label": "src/libs/utils/demostdlib/encodecode.ts", + "file_path": "src/libs/utils/demostdlib/encodecode.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 1 + }, + { + "uuid": "mod-7450e07dbc1823bd1d8e3fe2", + "level": "L1", + "label": "src/libs/utils/demostdlib/groundControl.ts", + "file_path": "src/libs/utils/demostdlib/groundControl.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-8d759e4c7b88f1b808059f1c", + "level": "L1", + "label": "src/libs/utils/demostdlib/index.ts", + "file_path": "src/libs/utils/demostdlib/index.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 6 + }, + { + "uuid": "mod-3a5d1ce49d5562fbff9b9306", + "level": "L1", + "label": "src/libs/utils/demostdlib/payloadSize.ts", + "file_path": "src/libs/utils/demostdlib/payloadSize.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 5 + }, + { + "uuid": "mod-9acd412d29faec50fbeccd6a", + "level": "L1", + "label": "src/libs/utils/demostdlib/peerOperations.ts", + "file_path": "src/libs/utils/demostdlib/peerOperations.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 3 + }, + { + "uuid": "mod-495a8cfd97cb61dc39d6d45a", + "level": "L1", + "label": "src/libs/utils/index.ts", + "file_path": "src/libs/utils/index.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 0 + }, + { + "uuid": "mod-e89fa4423bde3e1df39acf0e", + "level": "L1", + "label": "src/libs/utils/keyMaker.ts", + "file_path": "src/libs/utils/keyMaker.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 1 + }, + { + "uuid": "mod-106e970ac525b6ac06d425f6", + "level": "L1", + "label": "src/libs/utils/showPubkey.ts", + "file_path": "src/libs/utils/showPubkey.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 0 + }, + { + "uuid": "mod-80ff82c43058ee3abb67247d", + "level": "L1", + "label": "src/libs/utils/web2RequestUtils.ts", + "file_path": "src/libs/utils/web2RequestUtils.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-3672cbce400c58600f903b87", + "level": "L1", + "label": "src/migrations/AddReferralSupport.ts", + "file_path": "src/migrations/AddReferralSupport.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 0 + }, + { + "uuid": "mod-16a76d1c87dfcbecec53d1e0", + "level": "L1", + "label": "src/model/datasource.ts", + "file_path": "src/model/datasource.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 24 + }, + { + "uuid": "mod-c20c965c5562cff684a7448f", + "level": "L1", + "label": "src/model/entities/Blocks.ts", + "file_path": "src/model/entities/Blocks.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 5 + }, + { + "uuid": "mod-81f4b7f4c2872e1255eeab2b", + "level": "L1", + "label": "src/model/entities/Consensus.ts", + "file_path": "src/model/entities/Consensus.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 1 + }, + { + "uuid": "mod-9e7f56ec932ce908db2b6d6e", + "level": "L1", + "label": "src/model/entities/GCR/GCRTracker.ts", + "file_path": "src/model/entities/GCR/GCRTracker.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 6 + }, + { + "uuid": "mod-786d72f288c1067b50b58d19", + "level": "L1", + "label": "src/model/entities/GCR/GlobalChangeRegistry.ts", + "file_path": "src/model/entities/GCR/GlobalChangeRegistry.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 13 + }, + { + "uuid": "mod-dc4c1cf1104faf408e942485", + "level": "L1", + "label": "src/model/entities/GCRv2/GCRHashes.ts", + "file_path": "src/model/entities/GCRv2/GCRHashes.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 6 + }, + { + "uuid": "mod-db1374491b6a82aa10a4e2f5", + "level": "L1", + "label": "src/model/entities/GCRv2/GCRSubnetsTxs.ts", + "file_path": "src/model/entities/GCRv2/GCRSubnetsTxs.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-e3c2dc56fd38d656d5235000", + "level": "L1", + "label": "src/model/entities/GCRv2/GCR_Main.ts", + "file_path": "src/model/entities/GCRv2/GCR_Main.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 16 + }, + { + "uuid": "mod-f070f31fd907efb13c1863dc", + "level": "L1", + "label": "src/model/entities/GCRv2/GCR_TLSNotary.ts", + "file_path": "src/model/entities/GCRv2/GCR_TLSNotary.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-4700c8f714ccf0e905a08548", + "level": "L1", + "label": "src/model/entities/GCRv2/IdentityCommitment.ts", + "file_path": "src/model/entities/GCRv2/IdentityCommitment.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 3 + }, + { + "uuid": "mod-7b1b348ef9728f14361d546b", + "level": "L1", + "label": "src/model/entities/GCRv2/MerkleTreeState.ts", + "file_path": "src/model/entities/GCRv2/MerkleTreeState.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-08bf03fa93f7e9b593a27d85", + "level": "L1", + "label": "src/model/entities/GCRv2/UsedNullifier.ts", + "file_path": "src/model/entities/GCRv2/UsedNullifier.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-0ccdf7c27874394c1e667fec", + "level": "L1", + "label": "src/model/entities/L2PSHashes.ts", + "file_path": "src/model/entities/L2PSHashes.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-7421cc24ed6c5406e86d1752", + "level": "L1", + "label": "src/model/entities/L2PSMempool.ts", + "file_path": "src/model/entities/L2PSMempool.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 3 + }, + { + "uuid": "mod-fdc4ea4eee14d55af206496c", + "level": "L1", + "label": "src/model/entities/L2PSProofs.ts", + "file_path": "src/model/entities/L2PSProofs.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-193629267f30c2895ef15b17", + "level": "L1", + "label": "src/model/entities/L2PSTransactions.ts", + "file_path": "src/model/entities/L2PSTransactions.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-fbadd87a5bc2c6b89edc84bf", + "level": "L1", + "label": "src/model/entities/Mempool.ts", + "file_path": "src/model/entities/Mempool.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-edb169ce79c580ad64535bf1", + "level": "L1", + "label": "src/model/entities/OfflineMessages.ts", + "file_path": "src/model/entities/OfflineMessages.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 3 + }, + { + "uuid": "mod-97abb7050d49b46b468439ff", + "level": "L1", + "label": "src/model/entities/PgpKeyServer.ts", + "file_path": "src/model/entities/PgpKeyServer.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 1 + }, + { + "uuid": "mod-205c88f6af728bd7b4ebc280", + "level": "L1", + "label": "src/model/entities/Transactions.ts", + "file_path": "src/model/entities/Transactions.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 3 + }, + { + "uuid": "mod-81f929d30b493e5a0e7c38e7", + "level": "L1", + "label": "src/model/entities/Validators.ts", + "file_path": "src/model/entities/Validators.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-24557f0b00a0d628de80e5eb", + "level": "L1", + "label": "src/model/entities/types/IdentityTypes.ts", + "file_path": "src/model/entities/types/IdentityTypes.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 19 + }, + { + "uuid": "mod-f02071779c134bf1f3cd986f", + "level": "L1", + "label": "src/tests/test_bun_wrapper.ts", + "file_path": "src/tests/test_bun_wrapper.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 1 + }, + { + "uuid": "mod-7934829c1407caf63ff17dbb", + "level": "L1", + "label": "src/tests/test_identity_verification.ts", + "file_path": "src/tests/test_identity_verification.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 1 + }, + { + "uuid": "mod-8205b641d5e954ae76b97abb", + "level": "L1", + "label": "src/tests/test_production_verification.ts", + "file_path": "src/tests/test_production_verification.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 1 + }, + { + "uuid": "mod-bd690c0739e6d69fef5168df", + "level": "L1", + "label": "src/tests/test_snarkjs_bun.ts", + "file_path": "src/tests/test_snarkjs_bun.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 0 + }, + { + "uuid": "mod-eb0874681a80fb675aa35fa9", + "level": "L1", + "label": "src/tests/test_zk_no_node.ts", + "file_path": "src/tests/test_zk_no_node.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 0 + }, + { + "uuid": "mod-3656e78dc552244814365733", + "level": "L1", + "label": "src/tests/test_zk_simple.ts", + "file_path": "src/tests/test_zk_simple.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 0 + }, + { + "uuid": "mod-5e2ab8dff60a96c7ee548337", + "level": "L1", + "label": "src/tests/transactionTester.ts", + "file_path": "src/tests/transactionTester.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 3 + }, + { + "uuid": "mod-d46e3dca63550b5d88963cef", + "level": "L1", + "label": "src/tests/types/testingEnvironment.ts", + "file_path": "src/tests/types/testingEnvironment.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 9 + }, + { + "uuid": "mod-e2398716441b49081c77cc4b", + "level": "L1", + "label": "src/types/nomis-augmentations.d.ts", + "file_path": "src/types/nomis-augmentations.d.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 0 + }, + { + "uuid": "mod-aedcf7cff384ad96bb4dd624", + "level": "L1", + "label": "src/utilities/Diagnostic.ts", + "file_path": "src/utilities/Diagnostic.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 5 + }, + { + "uuid": "mod-ed207ef8c636062a5e6b4824", + "level": "L1", + "label": "src/utilities/backupAndRestore.ts", + "file_path": "src/utilities/backupAndRestore.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 0 + }, + { + "uuid": "mod-aec11f5957298897d75000d1", + "level": "L1", + "label": "src/utilities/checkSignedPayloads.ts", + "file_path": "src/utilities/checkSignedPayloads.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-9efb2c33ee124a3e24fea523", + "level": "L1", + "label": "src/utilities/cli_libraries/cryptography.ts", + "file_path": "src/utilities/cli_libraries/cryptography.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 3 + }, + { + "uuid": "mod-8b99d278a4bd1dda5f119d4b", + "level": "L1", + "label": "src/utilities/cli_libraries/wallet.ts", + "file_path": "src/utilities/cli_libraries/wallet.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-7411cdffb6063d8aa54dc02d", + "level": "L1", + "label": "src/utilities/commandLine.ts", + "file_path": "src/utilities/commandLine.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 3 + }, + { + "uuid": "mod-7a1941c482905a159b7f2f46", + "level": "L1", + "label": "src/utilities/errorMessage.ts", + "file_path": "src/utilities/errorMessage.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 11 + }, + { + "uuid": "mod-fed8e983d33351c85dd25540", + "level": "L1", + "label": "src/utilities/evmInfo.ts", + "file_path": "src/utilities/evmInfo.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-719cd7393843802b8bff160e", + "level": "L1", + "label": "src/utilities/generateUniqueId.ts", + "file_path": "src/utilities/generateUniqueId.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 3 + }, + { + "uuid": "mod-199bee3bfdf8ff3ae8ddfb47", + "level": "L1", + "label": "src/utilities/getPublicIP.ts", + "file_path": "src/utilities/getPublicIP.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 1 + }, + { + "uuid": "mod-804948765f192d7a33e792cb", + "level": "L1", + "label": "src/utilities/index.ts", + "file_path": "src/utilities/index.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 0 + }, + { + "uuid": "mod-54aa1c38c91b1598c048b7e1", + "level": "L1", + "label": "src/utilities/logger.ts", + "file_path": "src/utilities/logger.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 166 + }, + { + "uuid": "mod-7fc4f2fefdc6a8526f0d89e7", + "level": "L1", + "label": "src/utilities/mainLoop.ts", + "file_path": "src/utilities/mainLoop.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 11 + }, + { + "uuid": "mod-ff98cde0370b2a3126edc022", + "level": "L1", + "label": "src/utilities/required.ts", + "file_path": "src/utilities/required.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 7 + }, + { + "uuid": "mod-afcd806760f135d6236304f7", + "level": "L1", + "label": "src/utilities/selfCheckPort.ts", + "file_path": "src/utilities/selfCheckPort.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 1 + }, + { + "uuid": "mod-79fbe6e699a260de286c1916", + "level": "L1", + "label": "src/utilities/selfPeer.ts", + "file_path": "src/utilities/selfPeer.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 1 + }, + { + "uuid": "mod-59e682c774f84720b4dbee26", + "level": "L1", + "label": "src/utilities/sharedState.ts", + "file_path": "src/utilities/sharedState.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 70 + }, + { + "uuid": "mod-1b2ebbc2a937e6ac49f4abba", + "level": "L1", + "label": "src/utilities/sizeOf.ts", + "file_path": "src/utilities/sizeOf.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-af922777bca2943d44bdba1f", + "level": "L1", + "label": "src/utilities/tui/CategorizedLogger.ts", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 13 + }, + { + "uuid": "mod-481b5289c108ab245dd3ad27", + "level": "L1", + "label": "src/utilities/tui/LegacyLoggerAdapter.ts", + "file_path": "src/utilities/tui/LegacyLoggerAdapter.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 7 + }, + { + "uuid": "mod-9066efb52e5f511aa3343c63", + "level": "L1", + "label": "src/utilities/tui/TUIManager.ts", + "file_path": "src/utilities/tui/TUIManager.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 8 + }, + { + "uuid": "mod-afb8062b9c4d4f2ec0da49a0", + "level": "L1", + "label": "src/utilities/tui/index.ts", + "file_path": "src/utilities/tui/index.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 16 + }, + { + "uuid": "mod-d9d28659a6e092680fe7bfe4", + "level": "L1", + "label": "src/utilities/tui/tagCategories.ts", + "file_path": "src/utilities/tui/tagCategories.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 6 + }, + { + "uuid": "mod-8e3a02ebf4990dac5ac1f328", + "level": "L1", + "label": "src/utilities/validateUint8Array.ts", + "file_path": "src/utilities/validateUint8Array.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-eb0798295c928ba399632ae3", + "level": "L1", + "label": "src/utilities/waiter.ts", + "file_path": "src/utilities/waiter.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 10 + }, + { + "uuid": "mod-877c0c159531ba36f25904bc", + "level": "L1", + "label": "tests/mocks/demosdk-abstraction.ts", + "file_path": "tests/mocks/demosdk-abstraction.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-b4394327e0a18b4da4f0b23a", + "level": "L1", + "label": "tests/mocks/demosdk-build.ts", + "file_path": "tests/mocks/demosdk-build.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 1 + }, + { + "uuid": "mod-97a0284402c885a38947f96c", + "level": "L1", + "label": "tests/mocks/demosdk-encryption.ts", + "file_path": "tests/mocks/demosdk-encryption.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 3 + }, + { + "uuid": "mod-bd7e6bb16e1ad3ce391d135f", + "level": "L1", + "label": "tests/mocks/demosdk-types.ts", + "file_path": "tests/mocks/demosdk-types.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 17 + }, + { + "uuid": "mod-78abcf74349b520bc900b4b4", + "level": "L1", + "label": "tests/mocks/demosdk-websdk.ts", + "file_path": "tests/mocks/demosdk-websdk.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "mod-39dd430c0afde7c4cff40e35", + "level": "L1", + "label": "tests/mocks/demosdk-xm-localsdk.ts", + "file_path": "tests/mocks/demosdk-xm-localsdk.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 4 + }, + { + "uuid": "mod-a7ed1878dc1aee852010d3b6", + "level": "L1", + "label": "tests/omniprotocol/consensus.test.ts", + "file_path": "tests/omniprotocol/consensus.test.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 1 + }, + { + "uuid": "mod-0d61128881019eb50babac8d", + "level": "L1", + "label": "tests/omniprotocol/dispatcher.test.ts", + "file_path": "tests/omniprotocol/dispatcher.test.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 0 + }, + { + "uuid": "mod-bc1007721c3fa6b589fb67e6", + "level": "L1", + "label": "tests/omniprotocol/fixtures.test.ts", + "file_path": "tests/omniprotocol/fixtures.test.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 0 + }, + { + "uuid": "mod-e54e69b88583bdd6e9367055", + "level": "L1", + "label": "tests/omniprotocol/gcr.test.ts", + "file_path": "tests/omniprotocol/gcr.test.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 1 + }, + { + "uuid": "mod-b5400cea84fe87579754fb90", + "level": "L1", + "label": "tests/omniprotocol/handlers.test.ts", + "file_path": "tests/omniprotocol/handlers.test.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 0 + }, + { + "uuid": "mod-945ca38aa8afc3373e859950", + "level": "L1", + "label": "tests/omniprotocol/peerOmniAdapter.test.ts", + "file_path": "tests/omniprotocol/peerOmniAdapter.test.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 0 + }, + { + "uuid": "mod-6df30845bc1a45d2d4602890", + "level": "L1", + "label": "tests/omniprotocol/registry.test.ts", + "file_path": "tests/omniprotocol/registry.test.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 1 + }, + { + "uuid": "mod-937d387706a55ae219092722", + "level": "L1", + "label": "tests/omniprotocol/transaction.test.ts", + "file_path": "tests/omniprotocol/transaction.test.ts", + "symbol_name": null, + "line_range": [ + 1, + 1 + ], + "centrality": 1 + }, + { + "uuid": "sym-4ed35d165f49e04872c7e4c4", + "level": "L3", + "label": "default", + "file_path": "jest.config.ts", + "symbol_name": "default", + "line_range": [ + 40, + 40 + ], + "centrality": 1 + }, + { + "uuid": "sym-a3457454de6108179f1ec8da", + "level": "L3", + "label": "Client::api", + "file_path": "src/client/libs/client_class.ts", + "symbol_name": "Client::api", + "line_range": [ + 7, + 49 + ], + "centrality": 1 + }, + { + "uuid": "sym-aaf45e8b9a20d0605c7b9457", + "level": "L3", + "label": "Client.connect", + "file_path": "src/client/libs/client_class.ts", + "symbol_name": "Client.connect", + "line_range": [ + 26, + 38 + ], + "centrality": 1 + }, + { + "uuid": "sym-021316b8a7f0f31c1deb509c", + "level": "L3", + "label": "Client.disconnect", + "file_path": "src/client/libs/client_class.ts", + "symbol_name": "Client.disconnect", + "line_range": [ + 40, + 46 + ], + "centrality": 1 + }, + { + "uuid": "sym-4c758022ba1409f727162ccd", + "level": "L2", + "label": "Client", + "file_path": "src/client/libs/client_class.ts", + "symbol_name": "Client", + "line_range": [ + 7, + 49 + ], + "centrality": 4 + }, + { + "uuid": "sym-ba61b2da568a8430957bebda", + "level": "L3", + "label": "Network::api", + "file_path": "src/client/libs/network.ts", + "symbol_name": "Network::api", + "line_range": [ + 3, + 29 + ], + "centrality": 1 + }, + { + "uuid": "sym-e900ebe76ecce43aaf5d24f2", + "level": "L3", + "label": "Network.rpcConnect", + "file_path": "src/client/libs/network.ts", + "symbol_name": "Network.rpcConnect", + "line_range": [ + 4, + 28 + ], + "centrality": 1 + }, + { + "uuid": "sym-901bc277fa06e0174b43ba7b", + "level": "L2", + "label": "Network", + "file_path": "src/client/libs/network.ts", + "symbol_name": "Network", + "line_range": [ + 3, + 29 + ], + "centrality": 3 + }, + { + "uuid": "sym-3f4bb30871f440aa6fe225dd", + "level": "L3", + "label": "TimeoutError::api", + "file_path": "src/exceptions/index.ts", + "symbol_name": "TimeoutError::api", + "line_range": [ + 4, + 9 + ], + "centrality": 1 + }, + { + "uuid": "sym-6504c0a9f99e4155e106ee87", + "level": "L2", + "label": "TimeoutError", + "file_path": "src/exceptions/index.ts", + "symbol_name": "TimeoutError", + "line_range": [ + 4, + 9 + ], + "centrality": 2 + }, + { + "uuid": "sym-391cd0ad29e526ec762b9e17", + "level": "L3", + "label": "AbortError::api", + "file_path": "src/exceptions/index.ts", + "symbol_name": "AbortError::api", + "line_range": [ + 14, + 19 + ], + "centrality": 1 + }, + { + "uuid": "sym-f635182864f3ac12fd146b08", + "level": "L2", + "label": "AbortError", + "file_path": "src/exceptions/index.ts", + "symbol_name": "AbortError", + "line_range": [ + 14, + 19 + ], + "centrality": 2 + }, + { + "uuid": "sym-1b784c11203f8434f7a7b422", + "level": "L3", + "label": "BlockNotFoundError::api", + "file_path": "src/exceptions/index.ts", + "symbol_name": "BlockNotFoundError::api", + "line_range": [ + 21, + 26 + ], + "centrality": 1 + }, + { + "uuid": "sym-c0866f4c8525a7cda3643511", + "level": "L2", + "label": "BlockNotFoundError", + "file_path": "src/exceptions/index.ts", + "symbol_name": "BlockNotFoundError", + "line_range": [ + 21, + 26 + ], + "centrality": 2 + }, + { + "uuid": "sym-330150d457066afcda5b7a46", + "level": "L3", + "label": "PeerUnreachableError::api", + "file_path": "src/exceptions/index.ts", + "symbol_name": "PeerUnreachableError::api", + "line_range": [ + 28, + 33 + ], + "centrality": 1 + }, + { + "uuid": "sym-03745b230e975b586dc777a1", + "level": "L2", + "label": "PeerUnreachableError", + "file_path": "src/exceptions/index.ts", + "symbol_name": "PeerUnreachableError", + "line_range": [ + 28, + 33 + ], + "centrality": 2 + }, + { + "uuid": "sym-b1dca79c5b291f8dd61a833d", + "level": "L3", + "label": "NotInShardError::api", + "file_path": "src/exceptions/index.ts", + "symbol_name": "NotInShardError::api", + "line_range": [ + 35, + 40 + ], + "centrality": 1 + }, + { + "uuid": "sym-df323420a40015574b5089aa", + "level": "L2", + "label": "NotInShardError", + "file_path": "src/exceptions/index.ts", + "symbol_name": "NotInShardError", + "line_range": [ + 35, + 40 + ], + "centrality": 2 + }, + { + "uuid": "sym-9ccdf92e4adf9fa07a7e377e", + "level": "L3", + "label": "ForgingEndedError::api", + "file_path": "src/exceptions/index.ts", + "symbol_name": "ForgingEndedError::api", + "line_range": [ + 42, + 47 + ], + "centrality": 1 + }, + { + "uuid": "sym-c3502e1f3d90c7c26761f5f4", + "level": "L2", + "label": "ForgingEndedError", + "file_path": "src/exceptions/index.ts", + "symbol_name": "ForgingEndedError", + "line_range": [ + 42, + 47 + ], + "centrality": 2 + }, + { + "uuid": "sym-ad0e77bff9ee77397c79a3fa", + "level": "L3", + "label": "BlockInvalidError::api", + "file_path": "src/exceptions/index.ts", + "symbol_name": "BlockInvalidError::api", + "line_range": [ + 49, + 54 + ], + "centrality": 1 + }, + { + "uuid": "sym-06f0bf4480d67cccc3add52b", + "level": "L2", + "label": "BlockInvalidError", + "file_path": "src/exceptions/index.ts", + "symbol_name": "BlockInvalidError", + "line_range": [ + 49, + 54 + ], + "centrality": 2 + }, + { + "uuid": "sym-95dd67d0cd361cb5f2b88afa", + "level": "L3", + "label": "SignalingServer", + "file_path": "src/features/InstantMessagingProtocol/index.ts", + "symbol_name": "SignalingServer", + "line_range": [ + 3, + 3 + ], + "centrality": 1 + }, + { + "uuid": "sym-2b40125fbedf0cb6fba89e95", + "level": "L3", + "label": "ImHandshake::api", + "file_path": "src/features/InstantMessagingProtocol/old/types/IMSession.ts", + "symbol_name": "ImHandshake::api", + "line_range": [ + 18, + 26 + ], + "centrality": 1 + }, + { + "uuid": "sym-f3028da883261e86359dccc8", + "level": "L2", + "label": "ImHandshake", + "file_path": "src/features/InstantMessagingProtocol/old/types/IMSession.ts", + "symbol_name": "ImHandshake", + "line_range": [ + 18, + 26 + ], + "centrality": 2 + }, + { + "uuid": "sym-4d24e52bc3a5c0bdcd452d4c", + "level": "L3", + "label": "ImMessage::api", + "file_path": "src/features/InstantMessagingProtocol/old/types/IMSession.ts", + "symbol_name": "ImMessage::api", + "line_range": [ + 30, + 38 + ], + "centrality": 1 + }, + { + "uuid": "sym-1139b73552af9d40288f4c90", + "level": "L2", + "label": "ImMessage", + "file_path": "src/features/InstantMessagingProtocol/old/types/IMSession.ts", + "symbol_name": "ImMessage", + "line_range": [ + 30, + 38 + ], + "centrality": 2 + }, + { + "uuid": "sym-1d808b63fbf2c67fb439c095", + "level": "L3", + "label": "IMSession::api", + "file_path": "src/features/InstantMessagingProtocol/old/types/IMSession.ts", + "symbol_name": "IMSession::api", + "line_range": [ + 40, + 170 + ], + "centrality": 1 + }, + { + "uuid": "sym-e32e44bfcebdf49d9a969318", + "level": "L3", + "label": "IMSession.doHandshake", + "file_path": "src/features/InstantMessagingProtocol/old/types/IMSession.ts", + "symbol_name": "IMSession.doHandshake", + "line_range": [ + 56, + 81 + ], + "centrality": 1 + }, + { + "uuid": "sym-1ec5df753d7d6df2a3c0b665", + "level": "L3", + "label": "IMSession.hasHandshaked", + "file_path": "src/features/InstantMessagingProtocol/old/types/IMSession.ts", + "symbol_name": "IMSession.hasHandshaked", + "line_range": [ + 84, + 92 + ], + "centrality": 1 + }, + { + "uuid": "sym-0d9241c6cb29dc51ca2476e4", + "level": "L3", + "label": "IMSession.addMessage", + "file_path": "src/features/InstantMessagingProtocol/old/types/IMSession.ts", + "symbol_name": "IMSession.addMessage", + "line_range": [ + 125, + 143 + ], + "centrality": 1 + }, + { + "uuid": "sym-916fdcbe410020e10dd53012", + "level": "L3", + "label": "IMSession.retrieveMessages", + "file_path": "src/features/InstantMessagingProtocol/old/types/IMSession.ts", + "symbol_name": "IMSession.retrieveMessages", + "line_range": [ + 146, + 169 + ], + "centrality": 1 + }, + { + "uuid": "sym-313f38ec2adc5733ed48c0e8", + "level": "L2", + "label": "IMSession", + "file_path": "src/features/InstantMessagingProtocol/old/types/IMSession.ts", + "symbol_name": "IMSession", + "line_range": [ + 40, + 170 + ], + "centrality": 6 + }, + { + "uuid": "sym-68ad200c1f9a7b73f1767104", + "level": "L3", + "label": "ImStorage::api", + "file_path": "src/features/InstantMessagingProtocol/old/types/IMStorage.ts", + "symbol_name": "ImStorage::api", + "line_range": [ + 13, + 16 + ], + "centrality": 1 + }, + { + "uuid": "sym-7f0e02118f2b037cac8e5b61", + "level": "L2", + "label": "ImStorage", + "file_path": "src/features/InstantMessagingProtocol/old/types/IMStorage.ts", + "symbol_name": "ImStorage", + "line_range": [ + 13, + 16 + ], + "centrality": 2 + }, + { + "uuid": "sym-896653dd09ecab6ef18eeafb", + "level": "L3", + "label": "IMStorageInstance::api", + "file_path": "src/features/InstantMessagingProtocol/old/types/IMStorage.ts", + "symbol_name": "IMStorageInstance::api", + "line_range": [ + 18, + 109 + ], + "centrality": 1 + }, + { + "uuid": "sym-ce6b65968084be2fc0039e97", + "level": "L3", + "label": "IMStorageInstance.getOutboxes", + "file_path": "src/features/InstantMessagingProtocol/old/types/IMStorage.ts", + "symbol_name": "IMStorageInstance.getOutboxes", + "line_range": [ + 61, + 69 + ], + "centrality": 1 + }, + { + "uuid": "sym-92037a825e30d024067d8c76", + "level": "L3", + "label": "IMStorageInstance.writeToOutbox", + "file_path": "src/features/InstantMessagingProtocol/old/types/IMStorage.ts", + "symbol_name": "IMStorageInstance.writeToOutbox", + "line_range": [ + 70, + 83 + ], + "centrality": 1 + }, + { + "uuid": "sym-c401ae9aee36cb4f36786f2f", + "level": "L3", + "label": "IMStorageInstance.getInboxes", + "file_path": "src/features/InstantMessagingProtocol/old/types/IMStorage.ts", + "symbol_name": "IMStorageInstance.getInboxes", + "line_range": [ + 86, + 96 + ], + "centrality": 1 + }, + { + "uuid": "sym-96977030f2cd4aa7455c21d3", + "level": "L3", + "label": "IMStorageInstance.writeToInbox", + "file_path": "src/features/InstantMessagingProtocol/old/types/IMStorage.ts", + "symbol_name": "IMStorageInstance.writeToInbox", + "line_range": [ + 97, + 108 + ], + "centrality": 1 + }, + { + "uuid": "sym-c016626e9c331280cdb4d8fc", + "level": "L2", + "label": "IMStorageInstance", + "file_path": "src/features/InstantMessagingProtocol/old/types/IMStorage.ts", + "symbol_name": "IMStorageInstance", + "line_range": [ + 18, + 109 + ], + "centrality": 6 + }, + { + "uuid": "sym-d740cb976f6edd060dd118c8", + "level": "L3", + "label": "ImPeer::api", + "file_path": "src/features/InstantMessagingProtocol/signalingServer/ImPeers.ts", + "symbol_name": "ImPeer::api", + "line_range": [ + 4, + 9 + ], + "centrality": 1 + }, + { + "uuid": "sym-7f843674679cf60bbd6f5a72", + "level": "L2", + "label": "ImPeer", + "file_path": "src/features/InstantMessagingProtocol/signalingServer/ImPeers.ts", + "symbol_name": "ImPeer", + "line_range": [ + 4, + 9 + ], + "centrality": 2 + }, + { + "uuid": "sym-87c14fd05b89eaba4fbda8d2", + "level": "L3", + "label": "SignalingServer::api", + "file_path": "src/features/InstantMessagingProtocol/signalingServer/signalingServer.ts", + "symbol_name": "SignalingServer::api", + "line_range": [ + 77, + 880 + ], + "centrality": 1 + }, + { + "uuid": "sym-73c5d831e416f436360bae24", + "level": "L3", + "label": "SignalingServer.disconnect", + "file_path": "src/features/InstantMessagingProtocol/signalingServer/signalingServer.ts", + "symbol_name": "SignalingServer.disconnect", + "line_range": [ + 862, + 879 + ], + "centrality": 1 + }, + { + "uuid": "sym-38287d16f095005b0eb7a36e", + "level": "L2", + "label": "SignalingServer", + "file_path": "src/features/InstantMessagingProtocol/signalingServer/signalingServer.ts", + "symbol_name": "SignalingServer", + "line_range": [ + 77, + 880 + ], + "centrality": 3 + }, + { + "uuid": "sym-f7735d839019e173ccdd3e4f", + "level": "L3", + "label": "ImErrorType::api", + "file_path": "src/features/InstantMessagingProtocol/signalingServer/types/Errors.ts", + "symbol_name": "ImErrorType::api", + "line_range": [ + 4, + 12 + ], + "centrality": 1 + }, + { + "uuid": "sym-e39ea46175ad44de17c9efe4", + "level": "L2", + "label": "ImErrorType", + "file_path": "src/features/InstantMessagingProtocol/signalingServer/types/Errors.ts", + "symbol_name": "ImErrorType", + "line_range": [ + 4, + 12 + ], + "centrality": 2 + }, + { + "uuid": "sym-8bc60a2dd19a6fdb5e3076e8", + "level": "L3", + "label": "ImBaseMessage::api", + "file_path": "src/features/InstantMessagingProtocol/signalingServer/types/IMMessage.ts", + "symbol_name": "ImBaseMessage::api", + "line_range": [ + 3, + 6 + ], + "centrality": 1 + }, + { + "uuid": "sym-2b5fdb6334800012c0c21e0a", + "level": "L2", + "label": "ImBaseMessage", + "file_path": "src/features/InstantMessagingProtocol/signalingServer/types/IMMessage.ts", + "symbol_name": "ImBaseMessage", + "line_range": [ + 3, + 6 + ], + "centrality": 2 + }, + { + "uuid": "sym-4bc719fa7ed33d0c0fb06639", + "level": "L3", + "label": "ImRegisterMessage::api", + "file_path": "src/features/InstantMessagingProtocol/signalingServer/types/IMMessage.ts", + "symbol_name": "ImRegisterMessage::api", + "line_range": [ + 8, + 15 + ], + "centrality": 1 + }, + { + "uuid": "sym-e192f30b074d1edf17119667", + "level": "L2", + "label": "ImRegisterMessage", + "file_path": "src/features/InstantMessagingProtocol/signalingServer/types/IMMessage.ts", + "symbol_name": "ImRegisterMessage", + "line_range": [ + 8, + 15 + ], + "centrality": 2 + }, + { + "uuid": "sym-b8035411223e72d7f64883ff", + "level": "L3", + "label": "ImDiscoverMessage::api", + "file_path": "src/features/InstantMessagingProtocol/signalingServer/types/IMMessage.ts", + "symbol_name": "ImDiscoverMessage::api", + "line_range": [ + 17, + 20 + ], + "centrality": 1 + }, + { + "uuid": "sym-09396517c2f92c1491430417", + "level": "L2", + "label": "ImDiscoverMessage", + "file_path": "src/features/InstantMessagingProtocol/signalingServer/types/IMMessage.ts", + "symbol_name": "ImDiscoverMessage", + "line_range": [ + 17, + 20 + ], + "centrality": 2 + }, + { + "uuid": "sym-e19a1b0efe47dafc170c58ba", + "level": "L3", + "label": "ImPeerMessage::api", + "file_path": "src/features/InstantMessagingProtocol/signalingServer/types/IMMessage.ts", + "symbol_name": "ImPeerMessage::api", + "line_range": [ + 23, + 29 + ], + "centrality": 1 + }, + { + "uuid": "sym-715811d58eff5b235d047fe4", + "level": "L2", + "label": "ImPeerMessage", + "file_path": "src/features/InstantMessagingProtocol/signalingServer/types/IMMessage.ts", + "symbol_name": "ImPeerMessage", + "line_range": [ + 23, + 29 + ], + "centrality": 2 + }, + { + "uuid": "sym-29cdb4a3679630a0358d0bb9", + "level": "L3", + "label": "ImPublicKeyRequestMessage::api", + "file_path": "src/features/InstantMessagingProtocol/signalingServer/types/IMMessage.ts", + "symbol_name": "ImPublicKeyRequestMessage::api", + "line_range": [ + 31, + 36 + ], + "centrality": 1 + }, + { + "uuid": "sym-e7f1193634eb6a1432bab90e", + "level": "L2", + "label": "ImPublicKeyRequestMessage", + "file_path": "src/features/InstantMessagingProtocol/signalingServer/types/IMMessage.ts", + "symbol_name": "ImPublicKeyRequestMessage", + "line_range": [ + 31, + 36 + ], + "centrality": 2 + }, + { + "uuid": "sym-39ad83de6dbc734ee6f2eae9", + "level": "L3", + "label": "ActivityPubStorage::api", + "file_path": "src/features/activitypub/fedistore.ts", + "symbol_name": "ActivityPubStorage::api", + "line_range": [ + 4, + 90 + ], + "centrality": 1 + }, + { + "uuid": "sym-b24fcbb1e6da7606d5ab956d", + "level": "L3", + "label": "ActivityPubStorage.createTables", + "file_path": "src/features/activitypub/fedistore.ts", + "symbol_name": "ActivityPubStorage.createTables", + "line_range": [ + 45, + 50 + ], + "centrality": 1 + }, + { + "uuid": "sym-a97260d74feb8d40b8159924", + "level": "L3", + "label": "ActivityPubStorage.saveItem", + "file_path": "src/features/activitypub/fedistore.ts", + "symbol_name": "ActivityPubStorage.saveItem", + "line_range": [ + 52, + 61 + ], + "centrality": 1 + }, + { + "uuid": "sym-3d6be09763d2fc4d2f20bd02", + "level": "L3", + "label": "ActivityPubStorage.getItem", + "file_path": "src/features/activitypub/fedistore.ts", + "symbol_name": "ActivityPubStorage.getItem", + "line_range": [ + 63, + 78 + ], + "centrality": 1 + }, + { + "uuid": "sym-da8ad413c16f675f9c1bd0db", + "level": "L3", + "label": "ActivityPubStorage.deleteItem", + "file_path": "src/features/activitypub/fedistore.ts", + "symbol_name": "ActivityPubStorage.deleteItem", + "line_range": [ + 80, + 89 + ], + "centrality": 1 + }, + { + "uuid": "sym-044c0cd881405407920926a2", + "level": "L2", + "label": "ActivityPubStorage", + "file_path": "src/features/activitypub/fedistore.ts", + "symbol_name": "ActivityPubStorage", + "line_range": [ + 4, + 90 + ], + "centrality": 6 + }, + { + "uuid": "sym-f9fd6387097446254eb935c8", + "level": "L3", + "label": "ActivityPubObject::api", + "file_path": "src/features/activitypub/feditypes.ts", + "symbol_name": "ActivityPubObject::api", + "line_range": [ + 2, + 8 + ], + "centrality": 1 + }, + { + "uuid": "sym-e22d61e07c82d37fa1f79792", + "level": "L2", + "label": "ActivityPubObject", + "file_path": "src/features/activitypub/feditypes.ts", + "symbol_name": "ActivityPubObject", + "line_range": [ + 2, + 8 + ], + "centrality": 2 + }, + { + "uuid": "sym-64f05073eb8b63e0b34daf41", + "level": "L3", + "label": "Actor::api", + "file_path": "src/features/activitypub/feditypes.ts", + "symbol_name": "Actor::api", + "line_range": [ + 10, + 17 + ], + "centrality": 1 + }, + { + "uuid": "sym-dbefc3247e30a5823c8b43ce", + "level": "L2", + "label": "Actor", + "file_path": "src/features/activitypub/feditypes.ts", + "symbol_name": "Actor", + "line_range": [ + 10, + 17 + ], + "centrality": 2 + }, + { + "uuid": "sym-c4370920fdeb465ef17c8b21", + "level": "L3", + "label": "Collection::api", + "file_path": "src/features/activitypub/feditypes.ts", + "symbol_name": "Collection::api", + "line_range": [ + 19, + 23 + ], + "centrality": 1 + }, + { + "uuid": "sym-7188ccb0ba83016cd3801872", + "level": "L2", + "label": "Collection", + "file_path": "src/features/activitypub/feditypes.ts", + "symbol_name": "Collection", + "line_range": [ + 19, + 23 + ], + "centrality": 2 + }, + { + "uuid": "sym-6d351d10f2f5649ab968f2b2", + "level": "L3", + "label": "initializeActivityPubObject", + "file_path": "src/features/activitypub/feditypes.ts", + "symbol_name": "initializeActivityPubObject", + "line_range": [ + 26, + 32 + ], + "centrality": 3 + }, + { + "uuid": "sym-883a5cc83569ae7c58e412a3", + "level": "L3", + "label": "initializeCollection", + "file_path": "src/features/activitypub/feditypes.ts", + "symbol_name": "initializeCollection", + "line_range": [ + 35, + 41 + ], + "centrality": 12 + }, + { + "uuid": "sym-8372518a1ed84643b175aa1f", + "level": "L3", + "label": "activityPubObject", + "file_path": "src/features/activitypub/feditypes.ts", + "symbol_name": "activityPubObject", + "line_range": [ + 44, + 44 + ], + "centrality": 2 + }, + { + "uuid": "sym-a51c939dff4a5e40a1fec4f4", + "level": "L3", + "label": "actor", + "file_path": "src/features/activitypub/feditypes.ts", + "symbol_name": "actor", + "line_range": [ + 45, + 53 + ], + "centrality": 2 + }, + { + "uuid": "sym-f6143006b5bb02e58d1cdfd1", + "level": "L3", + "label": "collection", + "file_path": "src/features/activitypub/feditypes.ts", + "symbol_name": "collection", + "line_range": [ + 54, + 54 + ], + "centrality": 2 + }, + { + "uuid": "sym-93b583f25b39dd5043a57609", + "level": "L3", + "label": "inbox", + "file_path": "src/features/activitypub/feditypes.ts", + "symbol_name": "inbox", + "line_range": [ + 55, + 55 + ], + "centrality": 2 + }, + { + "uuid": "sym-6a61ddc900f83502ce966c87", + "level": "L3", + "label": "outbox", + "file_path": "src/features/activitypub/feditypes.ts", + "symbol_name": "outbox", + "line_range": [ + 56, + 56 + ], + "centrality": 2 + }, + { + "uuid": "sym-1dc16c4d97767da5a8ba92df", + "level": "L3", + "label": "followers", + "file_path": "src/features/activitypub/feditypes.ts", + "symbol_name": "followers", + "line_range": [ + 57, + 57 + ], + "centrality": 2 + }, + { + "uuid": "sym-8a36fd0bc7a6c7246c94552d", + "level": "L3", + "label": "following", + "file_path": "src/features/activitypub/feditypes.ts", + "symbol_name": "following", + "line_range": [ + 58, + 58 + ], + "centrality": 2 + }, + { + "uuid": "sym-b1ecce6dd13426331f10ff7a", + "level": "L3", + "label": "liked", + "file_path": "src/features/activitypub/feditypes.ts", + "symbol_name": "liked", + "line_range": [ + 59, + 59 + ], + "centrality": 2 + }, + { + "uuid": "sym-3ccaac6d613ab621d48c1bd6", + "level": "L3", + "label": "blocked", + "file_path": "src/features/activitypub/feditypes.ts", + "symbol_name": "blocked", + "line_range": [ + 60, + 60 + ], + "centrality": 2 + }, + { + "uuid": "sym-03d2f03f466628c99110c9fe", + "level": "L3", + "label": "rejections", + "file_path": "src/features/activitypub/feditypes.ts", + "symbol_name": "rejections", + "line_range": [ + 61, + 61 + ], + "centrality": 2 + }, + { + "uuid": "sym-e301425e702840c7c452eb5a", + "level": "L3", + "label": "rejected", + "file_path": "src/features/activitypub/feditypes.ts", + "symbol_name": "rejected", + "line_range": [ + 62, + 62 + ], + "centrality": 2 + }, + { + "uuid": "sym-65612d35e155d68ea523c22f", + "level": "L3", + "label": "shares", + "file_path": "src/features/activitypub/feditypes.ts", + "symbol_name": "shares", + "line_range": [ + 63, + 63 + ], + "centrality": 2 + }, + { + "uuid": "sym-94068717fb4cbb8a20aef4a9", + "level": "L3", + "label": "likes", + "file_path": "src/features/activitypub/feditypes.ts", + "symbol_name": "likes", + "line_range": [ + 64, + 64 + ], + "centrality": 2 + }, + { + "uuid": "sym-73813058cbafe75d8bc014cb", + "level": "L3", + "label": "BRIDGE_PROTOCOLS", + "file_path": "src/features/bridges/bridgeUtils.ts", + "symbol_name": "BRIDGE_PROTOCOLS", + "line_range": [ + 4, + 11 + ], + "centrality": 1 + }, + { + "uuid": "sym-72b80bba0d6d6f79a03804c0", + "level": "L3", + "label": "RUBIC_API_REFERRER_ADDRESS", + "file_path": "src/features/bridges/bridgeUtils.ts", + "symbol_name": "RUBIC_API_REFERRER_ADDRESS", + "line_range": [ + 13, + 14 + ], + "centrality": 1 + }, + { + "uuid": "sym-6e63a24523fe42cfb5e7eb17", + "level": "L3", + "label": "RUBIC_API_INTEGRATOR_ADDRESS", + "file_path": "src/features/bridges/bridgeUtils.ts", + "symbol_name": "RUBIC_API_INTEGRATOR_ADDRESS", + "line_range": [ + 15, + 17 + ], + "centrality": 1 + }, + { + "uuid": "sym-593116d1b2ae359f4e87ea11", + "level": "L3", + "label": "RUBIC_API_V2_BASE_URL", + "file_path": "src/features/bridges/bridgeUtils.ts", + "symbol_name": "RUBIC_API_V2_BASE_URL", + "line_range": [ + 18, + 18 + ], + "centrality": 1 + }, + { + "uuid": "sym-435a8eb4599ff7a416f89497", + "level": "L3", + "label": "RUBIC_API_V2_ROUTES", + "file_path": "src/features/bridges/bridgeUtils.ts", + "symbol_name": "RUBIC_API_V2_ROUTES", + "line_range": [ + 19, + 22 + ], + "centrality": 1 + }, + { + "uuid": "sym-f87642844d289130eabd697d", + "level": "L3", + "label": "ExtendedCrossChainManagerCalculationOptions::api", + "file_path": "src/features/bridges/bridgeUtils.ts", + "symbol_name": "ExtendedCrossChainManagerCalculationOptions::api", + "line_range": [ + 24, + 27 + ], + "centrality": 1 + }, + { + "uuid": "sym-dedd79d84d7229103a1ddb7a", + "level": "L2", + "label": "ExtendedCrossChainManagerCalculationOptions", + "file_path": "src/features/bridges/bridgeUtils.ts", + "symbol_name": "ExtendedCrossChainManagerCalculationOptions", + "line_range": [ + 24, + 27 + ], + "centrality": 2 + }, + { + "uuid": "sym-7adc23abf4e8a8acec688f93", + "level": "L3", + "label": "BlockchainName::api", + "file_path": "src/features/bridges/bridgeUtils.ts", + "symbol_name": "BlockchainName::api", + "line_range": [ + 29, + 30 + ], + "centrality": 1 + }, + { + "uuid": "sym-7f14f88347bcca244cf8a411", + "level": "L2", + "label": "BlockchainName", + "file_path": "src/features/bridges/bridgeUtils.ts", + "symbol_name": "BlockchainName", + "line_range": [ + 29, + 30 + ], + "centrality": 2 + }, + { + "uuid": "sym-c982f2f82f706d9d86aea680", + "level": "L3", + "label": "BridgeProtocol::api", + "file_path": "src/features/bridges/bridgeUtils.ts", + "symbol_name": "BridgeProtocol::api", + "line_range": [ + 32, + 32 + ], + "centrality": 1 + }, + { + "uuid": "sym-3a341cd97aa6d9e263ab4efe", + "level": "L2", + "label": "BridgeProtocol", + "file_path": "src/features/bridges/bridgeUtils.ts", + "symbol_name": "BridgeProtocol", + "line_range": [ + 32, + 32 + ], + "centrality": 2 + }, + { + "uuid": "sym-05e822a8c9768075cd3112d1", + "level": "L3", + "label": "BridgeContext::api", + "file_path": "src/features/bridges/bridges.ts", + "symbol_name": "BridgeContext::api", + "line_range": [ + 3, + 13 + ], + "centrality": 1 + }, + { + "uuid": "sym-55f1e23922682c986d5e78a8", + "level": "L2", + "label": "BridgeContext", + "file_path": "src/features/bridges/bridges.ts", + "symbol_name": "BridgeContext", + "line_range": [ + 3, + 13 + ], + "centrality": 2 + }, + { + "uuid": "sym-75bce596d3a3b20b32eae3a9", + "level": "L3", + "label": "BridgeOperation::api", + "file_path": "src/features/bridges/bridges.ts", + "symbol_name": "BridgeOperation::api", + "line_range": [ + 16, + 26 + ], + "centrality": 1 + }, + { + "uuid": "sym-f8a68c982e390715737b8a34", + "level": "L2", + "label": "BridgeOperation", + "file_path": "src/features/bridges/bridges.ts", + "symbol_name": "BridgeOperation", + "line_range": [ + 16, + 26 + ], + "centrality": 2 + }, + { + "uuid": "sym-2d3d0f8001aa1e3e157f6635", + "level": "L3", + "label": "BridgeOperationResult::api", + "file_path": "src/features/bridges/bridges.ts", + "symbol_name": "BridgeOperationResult::api", + "line_range": [ + 30, + 35 + ], + "centrality": 1 + }, + { + "uuid": "sym-04bc154da92633243986d7b2", + "level": "L2", + "label": "BridgeOperationResult", + "file_path": "src/features/bridges/bridges.ts", + "symbol_name": "BridgeOperationResult", + "line_range": [ + 30, + 35 + ], + "centrality": 2 + }, + { + "uuid": "sym-9ec9d14b420c136f2ad055ab", + "level": "L3", + "label": "Bridge", + "file_path": "src/features/bridges/bridges.ts", + "symbol_name": "Bridge", + "line_range": [ + 113, + 113 + ], + "centrality": 1 + }, + { + "uuid": "sym-22888f94aabf4d19027aa29a", + "level": "L3", + "label": "BridgesControls", + "file_path": "src/features/bridges/bridges.ts", + "symbol_name": "BridgesControls", + "line_range": [ + 113, + 113 + ], + "centrality": 1 + }, + { + "uuid": "sym-476f58f0f712fc1238cd3339", + "level": "L3", + "label": "RubicService::api", + "file_path": "src/features/bridges/rubic.ts", + "symbol_name": "RubicService::api", + "line_range": [ + 21, + 212 + ], + "centrality": 1 + }, + { + "uuid": "sym-c24ee6e9b89588b68d37c5a7", + "level": "L3", + "label": "RubicService.getTokenAddress", + "file_path": "src/features/bridges/rubic.ts", + "symbol_name": "RubicService.getTokenAddress", + "line_range": [ + 22, + 28 + ], + "centrality": 1 + }, + { + "uuid": "sym-b058a864b0147b40ef22dc34", + "level": "L3", + "label": "RubicService.getQuoteFromApi", + "file_path": "src/features/bridges/rubic.ts", + "symbol_name": "RubicService.getQuoteFromApi", + "line_range": [ + 36, + 79 + ], + "centrality": 1 + }, + { + "uuid": "sym-182e4b2c4ed82c4649e788c8", + "level": "L3", + "label": "RubicService.getSwapDataFromApi", + "file_path": "src/features/bridges/rubic.ts", + "symbol_name": "RubicService.getSwapDataFromApi", + "line_range": [ + 87, + 150 + ], + "centrality": 1 + }, + { + "uuid": "sym-8189287fafe28f1a29259bb6", + "level": "L3", + "label": "RubicService.sendRawTransaction", + "file_path": "src/features/bridges/rubic.ts", + "symbol_name": "RubicService.sendRawTransaction", + "line_range": [ + 158, + 186 + ], + "centrality": 1 + }, + { + "uuid": "sym-2fb5f502d3c62d4198da0ce5", + "level": "L3", + "label": "RubicService.getBlockchainName", + "file_path": "src/features/bridges/rubic.ts", + "symbol_name": "RubicService.getBlockchainName", + "line_range": [ + 188, + 211 + ], + "centrality": 1 + }, + { + "uuid": "sym-28727c3b132db5057f5a96ec", + "level": "L2", + "label": "RubicService", + "file_path": "src/features/bridges/rubic.ts", + "symbol_name": "RubicService", + "line_range": [ + 21, + 212 + ], + "centrality": 7 + }, + { + "uuid": "sym-cde4ce83d38070c40a1ce899", + "level": "L3", + "label": "FHE::api", + "file_path": "src/features/fhe/FHE.ts", + "symbol_name": "FHE::api", + "line_range": [ + 15, + 195 + ], + "centrality": 1 + }, + { + "uuid": "sym-5d646fd1cfe0e17cb51346f1", + "level": "L3", + "label": "FHE.getInstance", + "file_path": "src/features/fhe/FHE.ts", + "symbol_name": "FHE.getInstance", + "line_range": [ + 44, + 51 + ], + "centrality": 1 + }, + { + "uuid": "sym-b9b90d82b944c88c1ab58de0", + "level": "L3", + "label": "FHE.call", + "file_path": "src/features/fhe/FHE.ts", + "symbol_name": "FHE.call", + "line_range": [ + 187, + 194 + ], + "centrality": 1 + }, + { + "uuid": "sym-31c33be12d870d49abebd5fa", + "level": "L2", + "label": "FHE", + "file_path": "src/features/fhe/FHE.ts", + "symbol_name": "FHE", + "line_range": [ + 15, + 195 + ], + "centrality": 4 + }, + { + "uuid": "sym-d0d64d4fc8e8d4b4ec31835f", + "level": "L3", + "label": "PointSystem::api", + "file_path": "src/features/incentive/PointSystem.ts", + "symbol_name": "PointSystem::api", + "line_range": [ + 26, + 1649 + ], + "centrality": 1 + }, + { + "uuid": "sym-7bf629517168329e74c2bd32", + "level": "L3", + "label": "PointSystem.getInstance", + "file_path": "src/features/incentive/PointSystem.ts", + "symbol_name": "PointSystem.getInstance", + "line_range": [ + 31, + 36 + ], + "centrality": 1 + }, + { + "uuid": "sym-b29e811fe491350308ac06b8", + "level": "L3", + "label": "PointSystem.getUserPoints", + "file_path": "src/features/incentive/PointSystem.ts", + "symbol_name": "PointSystem.getUserPoints", + "line_range": [ + 367, + 388 + ], + "centrality": 1 + }, + { + "uuid": "sym-ff86ceaf6364a62d78d53ed6", + "level": "L3", + "label": "PointSystem.awardWeb3WalletPoints", + "file_path": "src/features/incentive/PointSystem.ts", + "symbol_name": "PointSystem.awardWeb3WalletPoints", + "line_range": [ + 398, + 486 + ], + "centrality": 1 + }, + { + "uuid": "sym-6995a8f5087f01da57510a6e", + "level": "L3", + "label": "PointSystem.awardTwitterPoints", + "file_path": "src/features/incentive/PointSystem.ts", + "symbol_name": "PointSystem.awardTwitterPoints", + "line_range": [ + 494, + 550 + ], + "centrality": 1 + }, + { + "uuid": "sym-0555c3e21f71d512bf2aa06d", + "level": "L3", + "label": "PointSystem.awardGithubPoints", + "file_path": "src/features/incentive/PointSystem.ts", + "symbol_name": "PointSystem.awardGithubPoints", + "line_range": [ + 559, + 637 + ], + "centrality": 1 + }, + { + "uuid": "sym-088e4feca2d65625730710af", + "level": "L3", + "label": "PointSystem.deductWeb3WalletPoints", + "file_path": "src/features/incentive/PointSystem.ts", + "symbol_name": "PointSystem.deductWeb3WalletPoints", + "line_range": [ + 647, + 685 + ], + "centrality": 1 + }, + { + "uuid": "sym-ff403e1dfce4c56345763593", + "level": "L3", + "label": "PointSystem.deductTwitterPoints", + "file_path": "src/features/incentive/PointSystem.ts", + "symbol_name": "PointSystem.deductTwitterPoints", + "line_range": [ + 693, + 757 + ], + "centrality": 1 + }, + { + "uuid": "sym-9b067f8328467594edb11d13", + "level": "L3", + "label": "PointSystem.deductGithubPoints", + "file_path": "src/features/incentive/PointSystem.ts", + "symbol_name": "PointSystem.deductGithubPoints", + "line_range": [ + 765, + 820 + ], + "centrality": 1 + }, + { + "uuid": "sym-abd0fb38bc1e2e1d78131296", + "level": "L3", + "label": "PointSystem.awardTelegramPoints", + "file_path": "src/features/incentive/PointSystem.ts", + "symbol_name": "PointSystem.awardTelegramPoints", + "line_range": [ + 830, + 933 + ], + "centrality": 1 + }, + { + "uuid": "sym-4b53ce0334c9ff70017d9dc3", + "level": "L3", + "label": "PointSystem.awardTelegramTLSNPoints", + "file_path": "src/features/incentive/PointSystem.ts", + "symbol_name": "PointSystem.awardTelegramTLSNPoints", + "line_range": [ + 942, + 1022 + ], + "centrality": 1 + }, + { + "uuid": "sym-bc3b3eca912b76099c1af0ea", + "level": "L3", + "label": "PointSystem.deductTelegramPoints", + "file_path": "src/features/incentive/PointSystem.ts", + "symbol_name": "PointSystem.deductTelegramPoints", + "line_range": [ + 1030, + 1082 + ], + "centrality": 1 + }, + { + "uuid": "sym-77782c5a42eb69b7fd33faae", + "level": "L3", + "label": "PointSystem.awardDiscordPoints", + "file_path": "src/features/incentive/PointSystem.ts", + "symbol_name": "PointSystem.awardDiscordPoints", + "line_range": [ + 1090, + 1164 + ], + "centrality": 1 + }, + { + "uuid": "sym-f9cb8e510b8cba2d08e78e80", + "level": "L3", + "label": "PointSystem.deductDiscordPoints", + "file_path": "src/features/incentive/PointSystem.ts", + "symbol_name": "PointSystem.deductDiscordPoints", + "line_range": [ + 1171, + 1223 + ], + "centrality": 1 + }, + { + "uuid": "sym-bc376883c47b9974b3f9b40c", + "level": "L3", + "label": "PointSystem.awardUdDomainPoints", + "file_path": "src/features/incentive/PointSystem.ts", + "symbol_name": "PointSystem.awardUdDomainPoints", + "line_range": [ + 1232, + 1347 + ], + "centrality": 1 + }, + { + "uuid": "sym-9385a1b99111b59f02ea3be7", + "level": "L3", + "label": "PointSystem.deductUdDomainPoints", + "file_path": "src/features/incentive/PointSystem.ts", + "symbol_name": "PointSystem.deductUdDomainPoints", + "line_range": [ + 1355, + 1430 + ], + "centrality": 1 + }, + { + "uuid": "sym-0f0d4600642782084b3b828a", + "level": "L3", + "label": "PointSystem.awardNomisScorePoints", + "file_path": "src/features/incentive/PointSystem.ts", + "symbol_name": "PointSystem.awardNomisScorePoints", + "line_range": [ + 1439, + 1561 + ], + "centrality": 1 + }, + { + "uuid": "sym-2ee3f05cec0b12fa40875f34", + "level": "L3", + "label": "PointSystem.deductNomisScorePoints", + "file_path": "src/features/incentive/PointSystem.ts", + "symbol_name": "PointSystem.deductNomisScorePoints", + "line_range": [ + 1570, + 1639 + ], + "centrality": 1 + }, + { + "uuid": "sym-3f102a31789c1c42742dd190", + "level": "L2", + "label": "PointSystem", + "file_path": "src/features/incentive/PointSystem.ts", + "symbol_name": "PointSystem", + "line_range": [ + 26, + 1649 + ], + "centrality": 19 + }, + { + "uuid": "sym-209ff12f41847b166015e17c", + "level": "L3", + "label": "Referrals::api", + "file_path": "src/features/incentive/referrals.ts", + "symbol_name": "Referrals::api", + "line_range": [ + 6, + 237 + ], + "centrality": 1 + }, + { + "uuid": "sym-94e5bb176f153bde3b6b48f1", + "level": "L3", + "label": "Referrals.generateReferralCode", + "file_path": "src/features/incentive/referrals.ts", + "symbol_name": "Referrals.generateReferralCode", + "line_range": [ + 47, + 89 + ], + "centrality": 1 + }, + { + "uuid": "sym-d5346fe3bb91b90eb51eb9fa", + "level": "L3", + "label": "Referrals.findAccountByReferralCode", + "file_path": "src/features/incentive/referrals.ts", + "symbol_name": "Referrals.findAccountByReferralCode", + "line_range": [ + 94, + 108 + ], + "centrality": 1 + }, + { + "uuid": "sym-6ca98de3ad27618164209729", + "level": "L3", + "label": "Referrals.isAlreadyReferred", + "file_path": "src/features/incentive/referrals.ts", + "symbol_name": "Referrals.isAlreadyReferred", + "line_range": [ + 113, + 124 + ], + "centrality": 1 + }, + { + "uuid": "sym-b2460ed9e3b163b181092bcc", + "level": "L3", + "label": "Referrals.isEligibleForReferral", + "file_path": "src/features/incentive/referrals.ts", + "symbol_name": "Referrals.isEligibleForReferral", + "line_range": [ + 129, + 150 + ], + "centrality": 1 + }, + { + "uuid": "sym-b87588e88bbf56a9c070e278", + "level": "L3", + "label": "Referrals.processReferral", + "file_path": "src/features/incentive/referrals.ts", + "symbol_name": "Referrals.processReferral", + "line_range": [ + 155, + 184 + ], + "centrality": 1 + }, + { + "uuid": "sym-755339ce0913bac7334bd721", + "level": "L2", + "label": "Referrals", + "file_path": "src/features/incentive/referrals.ts", + "symbol_name": "Referrals", + "line_range": [ + 6, + 237 + ], + "centrality": 7 + }, + { + "uuid": "sym-6a818f9fd5c21fcf47ae40c4", + "level": "L3", + "label": "MCPTransportType::api", + "file_path": "src/features/mcp/MCPServer.ts", + "symbol_name": "MCPTransportType::api", + "line_range": [ + 25, + 25 + ], + "centrality": 1 + }, + { + "uuid": "sym-df496a4e47a52c356dd44bd2", + "level": "L2", + "label": "MCPTransportType", + "file_path": "src/features/mcp/MCPServer.ts", + "symbol_name": "MCPTransportType", + "line_range": [ + 25, + 25 + ], + "centrality": 2 + }, + { + "uuid": "sym-b06a527d10cdb09ebee088fe", + "level": "L3", + "label": "MCPServerConfig::api", + "file_path": "src/features/mcp/MCPServer.ts", + "symbol_name": "MCPServerConfig::api", + "line_range": [ + 27, + 37 + ], + "centrality": 1 + }, + { + "uuid": "sym-64c02007f5239e713862e1db", + "level": "L2", + "label": "MCPServerConfig", + "file_path": "src/features/mcp/MCPServer.ts", + "symbol_name": "MCPServerConfig", + "line_range": [ + 27, + 37 + ], + "centrality": 2 + }, + { + "uuid": "sym-339a2a1eb569d6c4680bbda8", + "level": "L3", + "label": "MCPTool::api", + "file_path": "src/features/mcp/MCPServer.ts", + "symbol_name": "MCPTool::api", + "line_range": [ + 39, + 44 + ], + "centrality": 1 + }, + { + "uuid": "sym-9f409942f5777e727bcd79d0", + "level": "L2", + "label": "MCPTool", + "file_path": "src/features/mcp/MCPServer.ts", + "symbol_name": "MCPTool", + "line_range": [ + 39, + 44 + ], + "centrality": 2 + }, + { + "uuid": "sym-a2fe879a8fff114fb29f5cdb", + "level": "L3", + "label": "MCPServerManager::api", + "file_path": "src/features/mcp/MCPServer.ts", + "symbol_name": "MCPServerManager::api", + "line_range": [ + 55, + 417 + ], + "centrality": 1 + }, + { + "uuid": "sym-067794a5bdac5eb41b6783ce", + "level": "L3", + "label": "MCPServerManager.registerTool", + "file_path": "src/features/mcp/MCPServer.ts", + "symbol_name": "MCPServerManager.registerTool", + "line_range": [ + 169, + 176 + ], + "centrality": 1 + }, + { + "uuid": "sym-e2d757f6294a7b7db7835f28", + "level": "L3", + "label": "MCPServerManager.unregisterTool", + "file_path": "src/features/mcp/MCPServer.ts", + "symbol_name": "MCPServerManager.unregisterTool", + "line_range": [ + 183, + 193 + ], + "centrality": 1 + }, + { + "uuid": "sym-f4915d23263a4a38cda16b6f", + "level": "L3", + "label": "MCPServerManager.start", + "file_path": "src/features/mcp/MCPServer.ts", + "symbol_name": "MCPServerManager.start", + "line_range": [ + 200, + 238 + ], + "centrality": 1 + }, + { + "uuid": "sym-4dd122b47d1fafd381209f0f", + "level": "L3", + "label": "MCPServerManager.stop", + "file_path": "src/features/mcp/MCPServer.ts", + "symbol_name": "MCPServerManager.stop", + "line_range": [ + 336, + 376 + ], + "centrality": 1 + }, + { + "uuid": "sym-5ec4994d7fb7b6b3ae9a0569", + "level": "L3", + "label": "MCPServerManager.getStatus", + "file_path": "src/features/mcp/MCPServer.ts", + "symbol_name": "MCPServerManager.getStatus", + "line_range": [ + 381, + 393 + ], + "centrality": 1 + }, + { + "uuid": "sym-723d9c080f5c28442e40a92a", + "level": "L3", + "label": "MCPServerManager.getRegisteredTools", + "file_path": "src/features/mcp/MCPServer.ts", + "symbol_name": "MCPServerManager.getRegisteredTools", + "line_range": [ + 398, + 400 + ], + "centrality": 1 + }, + { + "uuid": "sym-ac52cb0edf8f80fa1d5943d9", + "level": "L3", + "label": "MCPServerManager.shutdown", + "file_path": "src/features/mcp/MCPServer.ts", + "symbol_name": "MCPServerManager.shutdown", + "line_range": [ + 405, + 416 + ], + "centrality": 1 + }, + { + "uuid": "sym-ff5862c98f8ad4262dd9f150", + "level": "L2", + "label": "MCPServerManager", + "file_path": "src/features/mcp/MCPServer.ts", + "symbol_name": "MCPServerManager", + "line_range": [ + 55, + 417 + ], + "centrality": 9 + }, + { + "uuid": "sym-718e6d8d70f9f926e9064096", + "level": "L3", + "label": "createDemosMCPServer", + "file_path": "src/features/mcp/MCPServer.ts", + "symbol_name": "createDemosMCPServer", + "line_range": [ + 422, + 446 + ], + "centrality": 4 + }, + { + "uuid": "sym-3e3fab842036c0147cdb56ee", + "level": "L3", + "label": "setupRemoteMCPServer", + "file_path": "src/features/mcp/examples/remoteExample.ts", + "symbol_name": "setupRemoteMCPServer", + "line_range": [ + 33, + 67 + ], + "centrality": 2 + }, + { + "uuid": "sym-b1b117fa3a6d894bb68dbdfb", + "level": "L3", + "label": "setupLocalMCPServer", + "file_path": "src/features/mcp/examples/remoteExample.ts", + "symbol_name": "setupLocalMCPServer", + "line_range": [ + 86, + 112 + ], + "centrality": 2 + }, + { + "uuid": "sym-6518ddb5bf692e5dc79df999", + "level": "L3", + "label": "default", + "file_path": "src/features/mcp/examples/remoteExample.ts", + "symbol_name": "default", + "line_range": [ + 114, + 114 + ], + "centrality": 1 + }, + { + "uuid": "sym-4a3d8ad1a77f9be2e1f5855d", + "level": "L3", + "label": "setupDemosMCPServer", + "file_path": "src/features/mcp/examples/simpleExample.ts", + "symbol_name": "setupDemosMCPServer", + "line_range": [ + 35, + 72 + ], + "centrality": 2 + }, + { + "uuid": "sym-dbb2421ec5e12a04cb4554bf", + "level": "L3", + "label": "shutdownDemosMCPServer", + "file_path": "src/features/mcp/examples/simpleExample.ts", + "symbol_name": "shutdownDemosMCPServer", + "line_range": [ + 92, + 100 + ], + "centrality": 1 + }, + { + "uuid": "sym-a405536da4e1154d16dd67dd", + "level": "L3", + "label": "default", + "file_path": "src/features/mcp/examples/simpleExample.ts", + "symbol_name": "default", + "line_range": [ + 102, + 102 + ], + "centrality": 1 + }, + { + "uuid": "sym-34946fb6c2cc5dbd7ae1d6d1", + "level": "L3", + "label": "MCPServerManager", + "file_path": "src/features/mcp/index.ts", + "symbol_name": "MCPServerManager", + "line_range": [ + 39, + 39 + ], + "centrality": 1 + }, + { + "uuid": "sym-a5f718702300aa3a1b6e9670", + "level": "L3", + "label": "createDemosMCPServer", + "file_path": "src/features/mcp/index.ts", + "symbol_name": "createDemosMCPServer", + "line_range": [ + 40, + 40 + ], + "centrality": 1 + }, + { + "uuid": "sym-120689569dff13e791a616c8", + "level": "L3", + "label": "MCPServerConfig", + "file_path": "src/features/mcp/index.ts", + "symbol_name": "MCPServerConfig", + "line_range": [ + 41, + 41 + ], + "centrality": 1 + }, + { + "uuid": "sym-b76ea08541bcf547d731520d", + "level": "L3", + "label": "MCPTool", + "file_path": "src/features/mcp/index.ts", + "symbol_name": "MCPTool", + "line_range": [ + 42, + 42 + ], + "centrality": 1 + }, + { + "uuid": "sym-c8bc37824a3f00b4db708df5", + "level": "L3", + "label": "MCPTransportType", + "file_path": "src/features/mcp/index.ts", + "symbol_name": "MCPTransportType", + "line_range": [ + 43, + 43 + ], + "centrality": 1 + }, + { + "uuid": "sym-b497e588d7117800565edd70", + "level": "L3", + "label": "createDemosNetworkTools", + "file_path": "src/features/mcp/index.ts", + "symbol_name": "createDemosNetworkTools", + "line_range": [ + 48, + 48 + ], + "centrality": 1 + }, + { + "uuid": "sym-9686ef766bebe88367bd5a98", + "level": "L3", + "label": "DemosNetworkToolsConfig", + "file_path": "src/features/mcp/index.ts", + "symbol_name": "DemosNetworkToolsConfig", + "line_range": [ + 49, + 49 + ], + "centrality": 1 + }, + { + "uuid": "sym-43560768d664ccc48d7626ef", + "level": "L3", + "label": "Tool", + "file_path": "src/features/mcp/index.ts", + "symbol_name": "Tool", + "line_range": [ + 54, + 54 + ], + "centrality": 1 + }, + { + "uuid": "sym-b93468135cbb23c483ae9407", + "level": "L3", + "label": "ServerCapabilities", + "file_path": "src/features/mcp/index.ts", + "symbol_name": "ServerCapabilities", + "line_range": [ + 55, + 55 + ], + "centrality": 1 + }, + { + "uuid": "sym-6961c3ce5bea80c5e10fcfe9", + "level": "L3", + "label": "CallToolRequest", + "file_path": "src/features/mcp/index.ts", + "symbol_name": "CallToolRequest", + "line_range": [ + 56, + 56 + ], + "centrality": 1 + }, + { + "uuid": "sym-0e90fe9ca3e727a8bdbb6299", + "level": "L3", + "label": "ListToolsRequest", + "file_path": "src/features/mcp/index.ts", + "symbol_name": "ListToolsRequest", + "line_range": [ + 57, + 57 + ], + "centrality": 1 + }, + { + "uuid": "sym-b78e473ee66613e6c4a99edd", + "level": "L3", + "label": "DemosNetworkToolsConfig::api", + "file_path": "src/features/mcp/tools/demosTools.ts", + "symbol_name": "DemosNetworkToolsConfig::api", + "line_range": [ + 20, + 27 + ], + "centrality": 1 + }, + { + "uuid": "sym-65c1fbabdc4bea0ce4367edf", + "level": "L2", + "label": "DemosNetworkToolsConfig", + "file_path": "src/features/mcp/tools/demosTools.ts", + "symbol_name": "DemosNetworkToolsConfig", + "line_range": [ + 20, + 27 + ], + "centrality": 2 + }, + { + "uuid": "sym-2e9114061b17b842b34526c6", + "level": "L3", + "label": "createDemosNetworkTools", + "file_path": "src/features/mcp/tools/demosTools.ts", + "symbol_name": "createDemosNetworkTools", + "line_range": [ + 53, + 77 + ], + "centrality": 1 + }, + { + "uuid": "sym-85147fb17e218d35bff6a383", + "level": "L3", + "label": "MetricsCollectorConfig::api", + "file_path": "src/features/metrics/MetricsCollector.ts", + "symbol_name": "MetricsCollectorConfig::api", + "line_range": [ + 19, + 24 + ], + "centrality": 1 + }, + { + "uuid": "sym-edb7ecfb5537fdae3d513479", + "level": "L2", + "label": "MetricsCollectorConfig", + "file_path": "src/features/metrics/MetricsCollector.ts", + "symbol_name": "MetricsCollectorConfig", + "line_range": [ + 19, + 24 + ], + "centrality": 2 + }, + { + "uuid": "sym-11f7a29a146a7fdb768afe1a", + "level": "L3", + "label": "MetricsCollector::api", + "file_path": "src/features/metrics/MetricsCollector.ts", + "symbol_name": "MetricsCollector::api", + "line_range": [ + 39, + 725 + ], + "centrality": 1 + }, + { + "uuid": "sym-667af0a47dceb57dbcf36f54", + "level": "L3", + "label": "MetricsCollector.getInstance", + "file_path": "src/features/metrics/MetricsCollector.ts", + "symbol_name": "MetricsCollector.getInstance", + "line_range": [ + 61, + 68 + ], + "centrality": 1 + }, + { + "uuid": "sym-a208d8b1bc05ca8277e67bee", + "level": "L3", + "label": "MetricsCollector.start", + "file_path": "src/features/metrics/MetricsCollector.ts", + "symbol_name": "MetricsCollector.start", + "line_range": [ + 73, + 104 + ], + "centrality": 1 + }, + { + "uuid": "sym-23c18a98f6390b1fbd465c26", + "level": "L3", + "label": "MetricsCollector.stop", + "file_path": "src/features/metrics/MetricsCollector.ts", + "symbol_name": "MetricsCollector.stop", + "line_range": [ + 109, + 116 + ], + "centrality": 1 + }, + { + "uuid": "sym-6c526fdd4a4360870f257f57", + "level": "L3", + "label": "MetricsCollector.isRunning", + "file_path": "src/features/metrics/MetricsCollector.ts", + "symbol_name": "MetricsCollector.isRunning", + "line_range": [ + 722, + 724 + ], + "centrality": 1 + }, + { + "uuid": "sym-ed8c8ef93f74a3c81ea0d113", + "level": "L2", + "label": "MetricsCollector", + "file_path": "src/features/metrics/MetricsCollector.ts", + "symbol_name": "MetricsCollector", + "line_range": [ + 39, + 725 + ], + "centrality": 6 + }, + { + "uuid": "sym-e274f79c394eebcbf37f069e", + "level": "L3", + "label": "getMetricsCollector", + "file_path": "src/features/metrics/MetricsCollector.ts", + "symbol_name": "getMetricsCollector", + "line_range": [ + 728, + 730 + ], + "centrality": 1 + }, + { + "uuid": "sym-55751e8a0705973956c52eff", + "level": "L3", + "label": "default", + "file_path": "src/features/metrics/MetricsCollector.ts", + "symbol_name": "default", + "line_range": [ + 732, + 732 + ], + "centrality": 1 + }, + { + "uuid": "sym-7d347d343f5583f3108ef749", + "level": "L3", + "label": "MetricsServerConfig::api", + "file_path": "src/features/metrics/MetricsServer.ts", + "symbol_name": "MetricsServerConfig::api", + "line_range": [ + 15, + 19 + ], + "centrality": 1 + }, + { + "uuid": "sym-814fc78d247f82dc6129930b", + "level": "L2", + "label": "MetricsServerConfig", + "file_path": "src/features/metrics/MetricsServer.ts", + "symbol_name": "MetricsServerConfig", + "line_range": [ + 15, + 19 + ], + "centrality": 2 + }, + { + "uuid": "sym-0871aa6e102abda94617af19", + "level": "L3", + "label": "MetricsServer::api", + "file_path": "src/features/metrics/MetricsServer.ts", + "symbol_name": "MetricsServer::api", + "line_range": [ + 37, + 154 + ], + "centrality": 1 + }, + { + "uuid": "sym-c3e4b175ff01e1f274c41db5", + "level": "L3", + "label": "MetricsServer.start", + "file_path": "src/features/metrics/MetricsServer.ts", + "symbol_name": "MetricsServer.start", + "line_range": [ + 50, + 73 + ], + "centrality": 1 + }, + { + "uuid": "sym-5a244f6ce76a00ba0de25fcd", + "level": "L3", + "label": "MetricsServer.stop", + "file_path": "src/features/metrics/MetricsServer.ts", + "symbol_name": "MetricsServer.stop", + "line_range": [ + 133, + 139 + ], + "centrality": 1 + }, + { + "uuid": "sym-1f47eb8005b28cb7189d3c8f", + "level": "L3", + "label": "MetricsServer.isRunning", + "file_path": "src/features/metrics/MetricsServer.ts", + "symbol_name": "MetricsServer.isRunning", + "line_range": [ + 144, + 146 + ], + "centrality": 1 + }, + { + "uuid": "sym-13e86d885df58c87136c464c", + "level": "L3", + "label": "MetricsServer.getPort", + "file_path": "src/features/metrics/MetricsServer.ts", + "symbol_name": "MetricsServer.getPort", + "line_range": [ + 151, + 153 + ], + "centrality": 1 + }, + { + "uuid": "sym-50a6eecae9b02798eedd15b0", + "level": "L2", + "label": "MetricsServer", + "file_path": "src/features/metrics/MetricsServer.ts", + "symbol_name": "MetricsServer", + "line_range": [ + 37, + 154 + ], + "centrality": 6 + }, + { + "uuid": "sym-86f1c2ba6df80c3462f73386", + "level": "L3", + "label": "getMetricsServer", + "file_path": "src/features/metrics/MetricsServer.ts", + "symbol_name": "getMetricsServer", + "line_range": [ + 159, + 166 + ], + "centrality": 1 + }, + { + "uuid": "sym-5419cc7c70d6dc28ede67184", + "level": "L3", + "label": "default", + "file_path": "src/features/metrics/MetricsServer.ts", + "symbol_name": "default", + "line_range": [ + 168, + 168 + ], + "centrality": 1 + }, + { + "uuid": "sym-e1b45754c758f023c3a5e76e", + "level": "L3", + "label": "MetricsConfig::api", + "file_path": "src/features/metrics/MetricsService.ts", + "symbol_name": "MetricsConfig::api", + "line_range": [ + 21, + 27 + ], + "centrality": 1 + }, + { + "uuid": "sym-e6743ad14bcf55d20f8632e3", + "level": "L2", + "label": "MetricsConfig", + "file_path": "src/features/metrics/MetricsService.ts", + "symbol_name": "MetricsConfig", + "line_range": [ + 21, + 27 + ], + "centrality": 2 + }, + { + "uuid": "sym-4dd84807257cb62b4ac704ff", + "level": "L3", + "label": "MetricsService::api", + "file_path": "src/features/metrics/MetricsService.ts", + "symbol_name": "MetricsService::api", + "line_range": [ + 46, + 525 + ], + "centrality": 1 + }, + { + "uuid": "sym-8b3c2bd15265d305e67cb209", + "level": "L3", + "label": "MetricsService.getInstance", + "file_path": "src/features/metrics/MetricsService.ts", + "symbol_name": "MetricsService.getInstance", + "line_range": [ + 73, + 78 + ], + "centrality": 1 + }, + { + "uuid": "sym-645d9fff4e883a5deccf2de4", + "level": "L3", + "label": "MetricsService.initialize", + "file_path": "src/features/metrics/MetricsService.ts", + "symbol_name": "MetricsService.initialize", + "line_range": [ + 84, + 112 + ], + "centrality": 1 + }, + { + "uuid": "sym-31a2691b3ced1d256bc49903", + "level": "L3", + "label": "MetricsService.createCounter", + "file_path": "src/features/metrics/MetricsService.ts", + "symbol_name": "MetricsService.createCounter", + "line_range": [ + 225, + 244 + ], + "centrality": 1 + }, + { + "uuid": "sym-2da70688fa2715a568e76a1f", + "level": "L3", + "label": "MetricsService.createGauge", + "file_path": "src/features/metrics/MetricsService.ts", + "symbol_name": "MetricsService.createGauge", + "line_range": [ + 249, + 268 + ], + "centrality": 1 + }, + { + "uuid": "sym-a0930292275c225961600b94", + "level": "L3", + "label": "MetricsService.createHistogram", + "file_path": "src/features/metrics/MetricsService.ts", + "symbol_name": "MetricsService.createHistogram", + "line_range": [ + 273, + 294 + ], + "centrality": 1 + }, + { + "uuid": "sym-a1a6438fb523e84b0d6a5acf", + "level": "L3", + "label": "MetricsService.createSummary", + "file_path": "src/features/metrics/MetricsService.ts", + "symbol_name": "MetricsService.createSummary", + "line_range": [ + 299, + 320 + ], + "centrality": 1 + }, + { + "uuid": "sym-a1c65ad34d586b28bb063b79", + "level": "L3", + "label": "MetricsService.incrementCounter", + "file_path": "src/features/metrics/MetricsService.ts", + "symbol_name": "MetricsService.incrementCounter", + "line_range": [ + 327, + 342 + ], + "centrality": 1 + }, + { + "uuid": "sym-64d2a4f2172c14753f59c989", + "level": "L3", + "label": "MetricsService.setGauge", + "file_path": "src/features/metrics/MetricsService.ts", + "symbol_name": "MetricsService.setGauge", + "line_range": [ + 347, + 362 + ], + "centrality": 1 + }, + { + "uuid": "sym-907f082ef9ac5c2229ea0ade", + "level": "L3", + "label": "MetricsService.incrementGauge", + "file_path": "src/features/metrics/MetricsService.ts", + "symbol_name": "MetricsService.incrementGauge", + "line_range": [ + 367, + 382 + ], + "centrality": 1 + }, + { + "uuid": "sym-f84154f8b969f50e418d2285", + "level": "L3", + "label": "MetricsService.decrementGauge", + "file_path": "src/features/metrics/MetricsService.ts", + "symbol_name": "MetricsService.decrementGauge", + "line_range": [ + 387, + 402 + ], + "centrality": 1 + }, + { + "uuid": "sym-932261b29f07de11300dfdcf", + "level": "L3", + "label": "MetricsService.observeHistogram", + "file_path": "src/features/metrics/MetricsService.ts", + "symbol_name": "MetricsService.observeHistogram", + "line_range": [ + 407, + 422 + ], + "centrality": 1 + }, + { + "uuid": "sym-5f5d6e223d521c533f38067a", + "level": "L3", + "label": "MetricsService.startHistogramTimer", + "file_path": "src/features/metrics/MetricsService.ts", + "symbol_name": "MetricsService.startHistogramTimer", + "line_range": [ + 427, + 442 + ], + "centrality": 1 + }, + { + "uuid": "sym-56374d4ad2ef16c38050375a", + "level": "L3", + "label": "MetricsService.observeSummary", + "file_path": "src/features/metrics/MetricsService.ts", + "symbol_name": "MetricsService.observeSummary", + "line_range": [ + 447, + 462 + ], + "centrality": 1 + }, + { + "uuid": "sym-ddbf97b6be2197cf825559bf", + "level": "L3", + "label": "MetricsService.getRegistry", + "file_path": "src/features/metrics/MetricsService.ts", + "symbol_name": "MetricsService.getRegistry", + "line_range": [ + 469, + 471 + ], + "centrality": 1 + }, + { + "uuid": "sym-70953d217354d6fc5f8b32fb", + "level": "L3", + "label": "MetricsService.getMetrics", + "file_path": "src/features/metrics/MetricsService.ts", + "symbol_name": "MetricsService.getMetrics", + "line_range": [ + 476, + 480 + ], + "centrality": 1 + }, + { + "uuid": "sym-4ef8918153352cb83bb60850", + "level": "L3", + "label": "MetricsService.getContentType", + "file_path": "src/features/metrics/MetricsService.ts", + "symbol_name": "MetricsService.getContentType", + "line_range": [ + 485, + 487 + ], + "centrality": 1 + }, + { + "uuid": "sym-0ebd17d9651bf9b3835ff6af", + "level": "L3", + "label": "MetricsService.isEnabled", + "file_path": "src/features/metrics/MetricsService.ts", + "symbol_name": "MetricsService.isEnabled", + "line_range": [ + 500, + 502 + ], + "centrality": 1 + }, + { + "uuid": "sym-dc33aec7c6d3c82fd7bd0a4f", + "level": "L3", + "label": "MetricsService.getPort", + "file_path": "src/features/metrics/MetricsService.ts", + "symbol_name": "MetricsService.getPort", + "line_range": [ + 507, + 509 + ], + "centrality": 1 + }, + { + "uuid": "sym-dda40d6be392e4d7e2dd40d2", + "level": "L3", + "label": "MetricsService.reset", + "file_path": "src/features/metrics/MetricsService.ts", + "symbol_name": "MetricsService.reset", + "line_range": [ + 514, + 516 + ], + "centrality": 1 + }, + { + "uuid": "sym-f8d8b4330b78b1b42308a5c2", + "level": "L3", + "label": "MetricsService.shutdown", + "file_path": "src/features/metrics/MetricsService.ts", + "symbol_name": "MetricsService.shutdown", + "line_range": [ + 521, + 524 + ], + "centrality": 1 + }, + { + "uuid": "sym-76a4b520bf86dde1eb2b6c88", + "level": "L2", + "label": "MetricsService", + "file_path": "src/features/metrics/MetricsService.ts", + "symbol_name": "MetricsService", + "line_range": [ + 46, + 525 + ], + "centrality": 22 + }, + { + "uuid": "sym-0bf6b255d48cad9282284e39", + "level": "L3", + "label": "getMetricsService", + "file_path": "src/features/metrics/MetricsService.ts", + "symbol_name": "getMetricsService", + "line_range": [ + 528, + 530 + ], + "centrality": 1 + }, + { + "uuid": "sym-d44e2bcce98f6909553185c0", + "level": "L3", + "label": "default", + "file_path": "src/features/metrics/MetricsService.ts", + "symbol_name": "default", + "line_range": [ + 532, + 532 + ], + "centrality": 1 + }, + { + "uuid": "sym-f4ce6b69642416527938b724", + "level": "L3", + "label": "MetricsService", + "file_path": "src/features/metrics/index.ts", + "symbol_name": "MetricsService", + "line_range": [ + 11, + 11 + ], + "centrality": 1 + }, + { + "uuid": "sym-150f5307db44a90b224f17d4", + "level": "L3", + "label": "getMetricsService", + "file_path": "src/features/metrics/index.ts", + "symbol_name": "getMetricsService", + "line_range": [ + 12, + 12 + ], + "centrality": 1 + }, + { + "uuid": "sym-0ec81c1dcbfd47ac209657f9", + "level": "L3", + "label": "MetricsConfig", + "file_path": "src/features/metrics/index.ts", + "symbol_name": "MetricsConfig", + "line_range": [ + 13, + 13 + ], + "centrality": 1 + }, + { + "uuid": "sym-06248a66cb4f78f1d5eb3312", + "level": "L3", + "label": "MetricsServer", + "file_path": "src/features/metrics/index.ts", + "symbol_name": "MetricsServer", + "line_range": [ + 17, + 17 + ], + "centrality": 1 + }, + { + "uuid": "sym-b41d4e0f6a11ac4ee0968d86", + "level": "L3", + "label": "getMetricsServer", + "file_path": "src/features/metrics/index.ts", + "symbol_name": "getMetricsServer", + "line_range": [ + 18, + 18 + ], + "centrality": 1 + }, + { + "uuid": "sym-b0da639ac5f946767bab1148", + "level": "L3", + "label": "MetricsServerConfig", + "file_path": "src/features/metrics/index.ts", + "symbol_name": "MetricsServerConfig", + "line_range": [ + 19, + 19 + ], + "centrality": 1 + }, + { + "uuid": "sym-d1e74c9c937cbfe8354cb820", + "level": "L3", + "label": "MetricsCollector", + "file_path": "src/features/metrics/index.ts", + "symbol_name": "MetricsCollector", + "line_range": [ + 23, + 23 + ], + "centrality": 1 + }, + { + "uuid": "sym-dfffa627fdec4d63848c4107", + "level": "L3", + "label": "getMetricsCollector", + "file_path": "src/features/metrics/index.ts", + "symbol_name": "getMetricsCollector", + "line_range": [ + 24, + 24 + ], + "centrality": 1 + }, + { + "uuid": "sym-280dbc4ff098279a68fc5bc2", + "level": "L3", + "label": "MetricsCollectorConfig", + "file_path": "src/features/metrics/index.ts", + "symbol_name": "MetricsCollectorConfig", + "line_range": [ + 25, + 25 + ], + "centrality": 1 + }, + { + "uuid": "sym-abdb3236602cdc869ad06b13", + "level": "L3", + "label": "MultichainDispatcher::api", + "file_path": "src/features/multichain/XMDispatcher.ts", + "symbol_name": "MultichainDispatcher::api", + "line_range": [ + 8, + 71 + ], + "centrality": 1 + }, + { + "uuid": "sym-0d501f564f166a8a56829af5", + "level": "L3", + "label": "MultichainDispatcher.digest", + "file_path": "src/features/multichain/XMDispatcher.ts", + "symbol_name": "MultichainDispatcher.digest", + "line_range": [ + 10, + 35 + ], + "centrality": 1 + }, + { + "uuid": "sym-bcc166dd7435c0d06d00377c", + "level": "L3", + "label": "MultichainDispatcher.load", + "file_path": "src/features/multichain/XMDispatcher.ts", + "symbol_name": "MultichainDispatcher.load", + "line_range": [ + 38, + 41 + ], + "centrality": 1 + }, + { + "uuid": "sym-2931981d6814493aa9f3b614", + "level": "L3", + "label": "MultichainDispatcher.execute", + "file_path": "src/features/multichain/XMDispatcher.ts", + "symbol_name": "MultichainDispatcher.execute", + "line_range": [ + 44, + 70 + ], + "centrality": 1 + }, + { + "uuid": "sym-fea639e9aff6c5a0e542aa41", + "level": "L2", + "label": "MultichainDispatcher", + "file_path": "src/features/multichain/XMDispatcher.ts", + "symbol_name": "MultichainDispatcher", + "line_range": [ + 8, + 71 + ], + "centrality": 5 + }, + { + "uuid": "sym-8945ebc15041ef139fd5f4a7", + "level": "L3", + "label": "AssetWrapping::api", + "file_path": "src/features/multichain/assetWrapping.ts", + "symbol_name": "AssetWrapping::api", + "line_range": [ + 4, + 6 + ], + "centrality": 1 + }, + { + "uuid": "sym-36a378064a0ed4fb5a6da40f", + "level": "L2", + "label": "AssetWrapping", + "file_path": "src/features/multichain/assetWrapping.ts", + "symbol_name": "AssetWrapping", + "line_range": [ + 4, + 6 + ], + "centrality": 2 + }, + { + "uuid": "sym-79e697a24600f39d08905f79", + "level": "L3", + "label": "default", + "file_path": "src/features/multichain/routines/XMParser.ts", + "symbol_name": "default", + "line_range": [ + 156, + 156 + ], + "centrality": 1 + }, + { + "uuid": "sym-93adcb2760142502f3e2b5e0", + "level": "L3", + "label": "handleAptosBalanceQuery", + "file_path": "src/features/multichain/routines/executors/aptos_balance_query.ts", + "symbol_name": "handleAptosBalanceQuery", + "line_range": [ + 7, + 98 + ], + "centrality": 2 + }, + { + "uuid": "sym-fbd5550518428a5f3c1d429d", + "level": "L3", + "label": "handleAptosContractReadRest", + "file_path": "src/features/multichain/routines/executors/aptos_contract_read.ts", + "symbol_name": "handleAptosContractReadRest", + "line_range": [ + 13, + 123 + ], + "centrality": 2 + }, + { + "uuid": "sym-776bf1dc921966d24ee32cbd", + "level": "L3", + "label": "handleAptosContractRead", + "file_path": "src/features/multichain/routines/executors/aptos_contract_read.ts", + "symbol_name": "handleAptosContractRead", + "line_range": [ + 125, + 257 + ], + "centrality": 1 + }, + { + "uuid": "sym-c9635b7880669c0bb6c6b77e", + "level": "L3", + "label": "handleAptosContractWrite", + "file_path": "src/features/multichain/routines/executors/aptos_contract_write.ts", + "symbol_name": "handleAptosContractWrite", + "line_range": [ + 8, + 81 + ], + "centrality": 2 + }, + { + "uuid": "sym-e99088c9d2a798506405e322", + "level": "L3", + "label": "handleAptosPayRest", + "file_path": "src/features/multichain/routines/executors/aptos_pay_rest.ts", + "symbol_name": "handleAptosPayRest", + "line_range": [ + 12, + 93 + ], + "centrality": 2 + }, + { + "uuid": "sym-aff2e2fa35c9fd1deaa22c77", + "level": "L3", + "label": "handleBalanceQuery", + "file_path": "src/features/multichain/routines/executors/balance_query.ts", + "symbol_name": "handleBalanceQuery", + "line_range": [ + 5, + 35 + ], + "centrality": 2 + }, + { + "uuid": "sym-80e15d6a392a3396e9a9cddd", + "level": "L3", + "label": "handleContractRead", + "file_path": "src/features/multichain/routines/executors/contract_read.ts", + "symbol_name": "handleContractRead", + "line_range": [ + 8, + 80 + ], + "centrality": 2 + }, + { + "uuid": "sym-b6804e6844dd104bd67125b2", + "level": "L3", + "label": "handleContractWrite", + "file_path": "src/features/multichain/routines/executors/contract_write.ts", + "symbol_name": "handleContractWrite", + "line_range": [ + 35, + 54 + ], + "centrality": 2 + }, + { + "uuid": "sym-e197ea41443939ee72ecb053", + "level": "L3", + "label": "handlePayOperation", + "file_path": "src/features/multichain/routines/executors/pay.ts", + "symbol_name": "handlePayOperation", + "line_range": [ + 19, + 111 + ], + "centrality": 2 + }, + { + "uuid": "sym-4af6c1457b565dcbdb9ae1ec", + "level": "L3", + "label": "genericJsonRpcPay", + "file_path": "src/features/multichain/routines/executors/pay.ts", + "symbol_name": "genericJsonRpcPay", + "line_range": [ + 118, + 155 + ], + "centrality": 1 + }, + { + "uuid": "sym-13ba93caee7dafdc0a34cf8f", + "level": "L3", + "label": "TLSNotaryMode::api", + "file_path": "src/features/tlsnotary/TLSNotaryService.ts", + "symbol_name": "TLSNotaryMode::api", + "line_range": [ + 28, + 28 + ], + "centrality": 1 + }, + { + "uuid": "sym-64773d11ed0dc075e88451fd", + "level": "L2", + "label": "TLSNotaryMode", + "file_path": "src/features/tlsnotary/TLSNotaryService.ts", + "symbol_name": "TLSNotaryMode", + "line_range": [ + 28, + 28 + ], + "centrality": 2 + }, + { + "uuid": "sym-bff46c872aa7a5d5524729d8", + "level": "L3", + "label": "TLSNotaryServiceConfig::api", + "file_path": "src/features/tlsnotary/TLSNotaryService.ts", + "symbol_name": "TLSNotaryServiceConfig::api", + "line_range": [ + 33, + 46 + ], + "centrality": 1 + }, + { + "uuid": "sym-b886e68b7cb3206a20572929", + "level": "L2", + "label": "TLSNotaryServiceConfig", + "file_path": "src/features/tlsnotary/TLSNotaryService.ts", + "symbol_name": "TLSNotaryServiceConfig", + "line_range": [ + 33, + 46 + ], + "centrality": 2 + }, + { + "uuid": "sym-f0ecd914d2af1f74266eb89f", + "level": "L3", + "label": "TLSNotaryServiceStatus::api", + "file_path": "src/features/tlsnotary/TLSNotaryService.ts", + "symbol_name": "TLSNotaryServiceStatus::api", + "line_range": [ + 51, + 62 + ], + "centrality": 1 + }, + { + "uuid": "sym-353b1994007d3e786d57e4a5", + "level": "L2", + "label": "TLSNotaryServiceStatus", + "file_path": "src/features/tlsnotary/TLSNotaryService.ts", + "symbol_name": "TLSNotaryServiceStatus", + "line_range": [ + 51, + 62 + ], + "centrality": 2 + }, + { + "uuid": "sym-33ad11cf35db2f305b0f2502", + "level": "L3", + "label": "isTLSNotaryFatal", + "file_path": "src/features/tlsnotary/TLSNotaryService.ts", + "symbol_name": "isTLSNotaryFatal", + "line_range": [ + 126, + 128 + ], + "centrality": 2 + }, + { + "uuid": "sym-744ab442808467ce063eecd8", + "level": "L3", + "label": "isTLSNotaryDebug", + "file_path": "src/features/tlsnotary/TLSNotaryService.ts", + "symbol_name": "isTLSNotaryDebug", + "line_range": [ + 134, + 136 + ], + "centrality": 2 + }, + { + "uuid": "sym-466b012a63df499de8b9409f", + "level": "L3", + "label": "isTLSNotaryProxy", + "file_path": "src/features/tlsnotary/TLSNotaryService.ts", + "symbol_name": "isTLSNotaryProxy", + "line_range": [ + 143, + 145 + ], + "centrality": 2 + }, + { + "uuid": "sym-58d4853a8ea7f7468daf5394", + "level": "L3", + "label": "getConfigFromEnv", + "file_path": "src/features/tlsnotary/TLSNotaryService.ts", + "symbol_name": "getConfigFromEnv", + "line_range": [ + 169, + 197 + ], + "centrality": 2 + }, + { + "uuid": "sym-4ce553c86e8336504c8eb620", + "level": "L3", + "label": "TLSNotaryService::api", + "file_path": "src/features/tlsnotary/TLSNotaryService.ts", + "symbol_name": "TLSNotaryService::api", + "line_range": [ + 229, + 807 + ], + "centrality": 1 + }, + { + "uuid": "sym-c2a6707fd089bf08cac9cc30", + "level": "L3", + "label": "TLSNotaryService.getMode", + "file_path": "src/features/tlsnotary/TLSNotaryService.ts", + "symbol_name": "TLSNotaryService.getMode", + "line_range": [ + 250, + 252 + ], + "centrality": 1 + }, + { + "uuid": "sym-53a5db12c86a79f27769e3ca", + "level": "L3", + "label": "TLSNotaryService.fromEnvironment", + "file_path": "src/features/tlsnotary/TLSNotaryService.ts", + "symbol_name": "TLSNotaryService.fromEnvironment", + "line_range": [ + 258, + 264 + ], + "centrality": 1 + }, + { + "uuid": "sym-dfde38af76c341720d753903", + "level": "L3", + "label": "TLSNotaryService.initialize", + "file_path": "src/features/tlsnotary/TLSNotaryService.ts", + "symbol_name": "TLSNotaryService.initialize", + "line_range": [ + 270, + 296 + ], + "centrality": 1 + }, + { + "uuid": "sym-5647f82a940e1e86a9d6bf3b", + "level": "L3", + "label": "TLSNotaryService.start", + "file_path": "src/features/tlsnotary/TLSNotaryService.ts", + "symbol_name": "TLSNotaryService.start", + "line_range": [ + 383, + 396 + ], + "centrality": 1 + }, + { + "uuid": "sym-f3b88c82370c15bc11afbc17", + "level": "L3", + "label": "TLSNotaryService.stop", + "file_path": "src/features/tlsnotary/TLSNotaryService.ts", + "symbol_name": "TLSNotaryService.stop", + "line_range": [ + 584, + 617 + ], + "centrality": 1 + }, + { + "uuid": "sym-08acd048f40a94dcfb5034b2", + "level": "L3", + "label": "TLSNotaryService.shutdown", + "file_path": "src/features/tlsnotary/TLSNotaryService.ts", + "symbol_name": "TLSNotaryService.shutdown", + "line_range": [ + 624, + 642 + ], + "centrality": 1 + }, + { + "uuid": "sym-0a3a10f403b5b77d947e96cf", + "level": "L3", + "label": "TLSNotaryService.verify", + "file_path": "src/features/tlsnotary/TLSNotaryService.ts", + "symbol_name": "TLSNotaryService.verify", + "line_range": [ + 650, + 680 + ], + "centrality": 1 + }, + { + "uuid": "sym-e3fa5fe2f1165ee2f85b2da0", + "level": "L3", + "label": "TLSNotaryService.getPublicKey", + "file_path": "src/features/tlsnotary/TLSNotaryService.ts", + "symbol_name": "TLSNotaryService.getPublicKey", + "line_range": [ + 687, + 703 + ], + "centrality": 1 + }, + { + "uuid": "sym-7a74034dc52098492d0b71dc", + "level": "L3", + "label": "TLSNotaryService.getPublicKeyHex", + "file_path": "src/features/tlsnotary/TLSNotaryService.ts", + "symbol_name": "TLSNotaryService.getPublicKeyHex", + "line_range": [ + 710, + 725 + ], + "centrality": 1 + }, + { + "uuid": "sym-d5a0e6506cccbcfea1745132", + "level": "L3", + "label": "TLSNotaryService.getPort", + "file_path": "src/features/tlsnotary/TLSNotaryService.ts", + "symbol_name": "TLSNotaryService.getPort", + "line_range": [ + 730, + 732 + ], + "centrality": 1 + }, + { + "uuid": "sym-cbd20435eb5b4e9750787653", + "level": "L3", + "label": "TLSNotaryService.isRunning", + "file_path": "src/features/tlsnotary/TLSNotaryService.ts", + "symbol_name": "TLSNotaryService.isRunning", + "line_range": [ + 737, + 739 + ], + "centrality": 1 + }, + { + "uuid": "sym-b219d03ed055f1f7b729a6a7", + "level": "L3", + "label": "TLSNotaryService.isInitialized", + "file_path": "src/features/tlsnotary/TLSNotaryService.ts", + "symbol_name": "TLSNotaryService.isInitialized", + "line_range": [ + 744, + 752 + ], + "centrality": 1 + }, + { + "uuid": "sym-4b8d14a11dda7e8103b0d44a", + "level": "L3", + "label": "TLSNotaryService.getStatus", + "file_path": "src/features/tlsnotary/TLSNotaryService.ts", + "symbol_name": "TLSNotaryService.getStatus", + "line_range": [ + 758, + 788 + ], + "centrality": 1 + }, + { + "uuid": "sym-6b75b0851a7f9511ae3bdd20", + "level": "L3", + "label": "TLSNotaryService.isHealthy", + "file_path": "src/features/tlsnotary/TLSNotaryService.ts", + "symbol_name": "TLSNotaryService.isHealthy", + "line_range": [ + 794, + 806 + ], + "centrality": 1 + }, + { + "uuid": "sym-338b16ec8f5b69d81a074d2d", + "level": "L2", + "label": "TLSNotaryService", + "file_path": "src/features/tlsnotary/TLSNotaryService.ts", + "symbol_name": "TLSNotaryService", + "line_range": [ + 229, + 807 + ], + "centrality": 20 + }, + { + "uuid": "sym-1026fbb4213fe879c3de7679", + "level": "L3", + "label": "getTLSNotaryService", + "file_path": "src/features/tlsnotary/TLSNotaryService.ts", + "symbol_name": "getTLSNotaryService", + "line_range": [ + 817, + 822 + ], + "centrality": 2 + }, + { + "uuid": "sym-5c0261c1abb8cef11691bfe3", + "level": "L3", + "label": "initializeTLSNotaryService", + "file_path": "src/features/tlsnotary/TLSNotaryService.ts", + "symbol_name": "initializeTLSNotaryService", + "line_range": [ + 828, + 834 + ], + "centrality": 3 + }, + { + "uuid": "sym-ae7b21a626aad5c215c5336b", + "level": "L3", + "label": "shutdownTLSNotaryService", + "file_path": "src/features/tlsnotary/TLSNotaryService.ts", + "symbol_name": "shutdownTLSNotaryService", + "line_range": [ + 839, + 844 + ], + "centrality": 2 + }, + { + "uuid": "sym-c0d7489cdd6eb46002210ed9", + "level": "L3", + "label": "default", + "file_path": "src/features/tlsnotary/TLSNotaryService.ts", + "symbol_name": "default", + "line_range": [ + 846, + 846 + ], + "centrality": 1 + }, + { + "uuid": "sym-8da3ea034cf83decf1f3a0ab", + "level": "L3", + "label": "NotaryConfig::api", + "file_path": "src/features/tlsnotary/ffi.ts", + "symbol_name": "NotaryConfig::api", + "line_range": [ + 21, + 28 + ], + "centrality": 1 + }, + { + "uuid": "sym-bd1b00d8d06df07a62457168", + "level": "L2", + "label": "NotaryConfig", + "file_path": "src/features/tlsnotary/ffi.ts", + "symbol_name": "NotaryConfig", + "line_range": [ + 21, + 28 + ], + "centrality": 2 + }, + { + "uuid": "sym-449dc953195e16bbfb9147ce", + "level": "L3", + "label": "VerificationResult::api", + "file_path": "src/features/tlsnotary/ffi.ts", + "symbol_name": "VerificationResult::api", + "line_range": [ + 33, + 46 + ], + "centrality": 1 + }, + { + "uuid": "sym-4081da70b1188501521a21dc", + "level": "L2", + "label": "VerificationResult", + "file_path": "src/features/tlsnotary/ffi.ts", + "symbol_name": "VerificationResult", + "line_range": [ + 33, + 46 + ], + "centrality": 2 + }, + { + "uuid": "sym-7ef5dea300b4021b74264879", + "level": "L3", + "label": "NotaryHealthStatus::api", + "file_path": "src/features/tlsnotary/ffi.ts", + "symbol_name": "NotaryHealthStatus::api", + "line_range": [ + 51, + 62 + ], + "centrality": 1 + }, + { + "uuid": "sym-758f05405496c1c7b69159ea", + "level": "L2", + "label": "NotaryHealthStatus", + "file_path": "src/features/tlsnotary/ffi.ts", + "symbol_name": "NotaryHealthStatus", + "line_range": [ + 51, + 62 + ], + "centrality": 2 + }, + { + "uuid": "sym-758256edbb484a330fd44fbb", + "level": "L3", + "label": "TLSNotaryFFI::api", + "file_path": "src/features/tlsnotary/ffi.ts", + "symbol_name": "TLSNotaryFFI::api", + "line_range": [ + 166, + 483 + ], + "centrality": 1 + }, + { + "uuid": "sym-93c4622ced07c39637c1e143", + "level": "L3", + "label": "TLSNotaryFFI.startServer", + "file_path": "src/features/tlsnotary/ffi.ts", + "symbol_name": "TLSNotaryFFI.startServer", + "line_range": [ + 253, + 270 + ], + "centrality": 1 + }, + { + "uuid": "sym-93205ff0d514f7be865d6def", + "level": "L3", + "label": "TLSNotaryFFI.stopServer", + "file_path": "src/features/tlsnotary/ffi.ts", + "symbol_name": "TLSNotaryFFI.stopServer", + "line_range": [ + 275, + 287 + ], + "centrality": 1 + }, + { + "uuid": "sym-720f8262db55a416213d05d7", + "level": "L3", + "label": "TLSNotaryFFI.verifyAttestation", + "file_path": "src/features/tlsnotary/ffi.ts", + "symbol_name": "TLSNotaryFFI.verifyAttestation", + "line_range": [ + 294, + 372 + ], + "centrality": 1 + }, + { + "uuid": "sym-2403c7117e90a27729574deb", + "level": "L3", + "label": "TLSNotaryFFI.getPublicKey", + "file_path": "src/features/tlsnotary/ffi.ts", + "symbol_name": "TLSNotaryFFI.getPublicKey", + "line_range": [ + 380, + 400 + ], + "centrality": 1 + }, + { + "uuid": "sym-873410bea0fdf1494ec40a5b", + "level": "L3", + "label": "TLSNotaryFFI.getPublicKeyHex", + "file_path": "src/features/tlsnotary/ffi.ts", + "symbol_name": "TLSNotaryFFI.getPublicKeyHex", + "line_range": [ + 406, + 409 + ], + "centrality": 1 + }, + { + "uuid": "sym-0a358f0bf6c9d69cb6cf6a65", + "level": "L3", + "label": "TLSNotaryFFI.getHealthStatus", + "file_path": "src/features/tlsnotary/ffi.ts", + "symbol_name": "TLSNotaryFFI.getHealthStatus", + "line_range": [ + 415, + 441 + ], + "centrality": 1 + }, + { + "uuid": "sym-f8da7f288f0c8f5d8a43e672", + "level": "L3", + "label": "TLSNotaryFFI.destroy", + "file_path": "src/features/tlsnotary/ffi.ts", + "symbol_name": "TLSNotaryFFI.destroy", + "line_range": [ + 447, + 468 + ], + "centrality": 1 + }, + { + "uuid": "sym-4d25122117d46c00f28b41c7", + "level": "L3", + "label": "TLSNotaryFFI.isInitialized", + "file_path": "src/features/tlsnotary/ffi.ts", + "symbol_name": "TLSNotaryFFI.isInitialized", + "line_range": [ + 473, + 475 + ], + "centrality": 1 + }, + { + "uuid": "sym-d954c9ed7804d9c7e265b086", + "level": "L3", + "label": "TLSNotaryFFI.isServerRunning", + "file_path": "src/features/tlsnotary/ffi.ts", + "symbol_name": "TLSNotaryFFI.isServerRunning", + "line_range": [ + 480, + 482 + ], + "centrality": 1 + }, + { + "uuid": "sym-929fb3ff8a3cf6d97191a8fc", + "level": "L2", + "label": "TLSNotaryFFI", + "file_path": "src/features/tlsnotary/ffi.ts", + "symbol_name": "TLSNotaryFFI", + "line_range": [ + 166, + 483 + ], + "centrality": 11 + }, + { + "uuid": "sym-2bff24216394c4d238452642", + "level": "L3", + "label": "default", + "file_path": "src/features/tlsnotary/ffi.ts", + "symbol_name": "default", + "line_range": [ + 485, + 485 + ], + "centrality": 1 + }, + { + "uuid": "sym-a850bd115879fbb3dfd1c754", + "level": "L3", + "label": "TLSNotaryService", + "file_path": "src/features/tlsnotary/index.ts", + "symbol_name": "TLSNotaryService", + "line_range": [ + 63, + 63 + ], + "centrality": 1 + }, + { + "uuid": "sym-cc16259785e538472afb2878", + "level": "L3", + "label": "getTLSNotaryService", + "file_path": "src/features/tlsnotary/index.ts", + "symbol_name": "getTLSNotaryService", + "line_range": [ + 63, + 63 + ], + "centrality": 3 + }, + { + "uuid": "sym-5d4d5843ec2f6746187582cb", + "level": "L3", + "label": "getConfigFromEnv", + "file_path": "src/features/tlsnotary/index.ts", + "symbol_name": "getConfigFromEnv", + "line_range": [ + 63, + 63 + ], + "centrality": 3 + }, + { + "uuid": "sym-758c7ae0108c14cea2c81f77", + "level": "L3", + "label": "isTLSNotaryFatal", + "file_path": "src/features/tlsnotary/index.ts", + "symbol_name": "isTLSNotaryFatal", + "line_range": [ + 63, + 63 + ], + "centrality": 1 + }, + { + "uuid": "sym-3a737e2cbc5ab28709b77f2f", + "level": "L3", + "label": "isTLSNotaryDebug", + "file_path": "src/features/tlsnotary/index.ts", + "symbol_name": "isTLSNotaryDebug", + "line_range": [ + 63, + 63 + ], + "centrality": 1 + }, + { + "uuid": "sym-0c7adeaa8d4e009a44877ca9", + "level": "L3", + "label": "isTLSNotaryProxy", + "file_path": "src/features/tlsnotary/index.ts", + "symbol_name": "isTLSNotaryProxy", + "line_range": [ + 63, + 63 + ], + "centrality": 1 + }, + { + "uuid": "sym-d17cdfb4aef3087444b3b0a5", + "level": "L3", + "label": "TLSNotaryFFI", + "file_path": "src/features/tlsnotary/index.ts", + "symbol_name": "TLSNotaryFFI", + "line_range": [ + 64, + 64 + ], + "centrality": 1 + }, + { + "uuid": "sym-1e9d4d2f1ab5748a2c1c1613", + "level": "L3", + "label": "NotaryConfig", + "file_path": "src/features/tlsnotary/index.ts", + "symbol_name": "NotaryConfig", + "line_range": [ + 65, + 65 + ], + "centrality": 1 + }, + { + "uuid": "sym-1f2728924b585fa470a24818", + "level": "L3", + "label": "VerificationResult", + "file_path": "src/features/tlsnotary/index.ts", + "symbol_name": "VerificationResult", + "line_range": [ + 65, + 65 + ], + "centrality": 1 + }, + { + "uuid": "sym-65cd5481814fe9600aa05460", + "level": "L3", + "label": "NotaryHealthStatus", + "file_path": "src/features/tlsnotary/index.ts", + "symbol_name": "NotaryHealthStatus", + "line_range": [ + 65, + 65 + ], + "centrality": 1 + }, + { + "uuid": "sym-b3c4e54a35894e6f75f582f8", + "level": "L3", + "label": "TLSNotaryServiceConfig", + "file_path": "src/features/tlsnotary/index.ts", + "symbol_name": "TLSNotaryServiceConfig", + "line_range": [ + 66, + 66 + ], + "centrality": 1 + }, + { + "uuid": "sym-3263681afc7b0a4a70999632", + "level": "L3", + "label": "TLSNotaryServiceStatus", + "file_path": "src/features/tlsnotary/index.ts", + "symbol_name": "TLSNotaryServiceStatus", + "line_range": [ + 66, + 66 + ], + "centrality": 1 + }, + { + "uuid": "sym-db7de0d1f554c5e6d55d2b56", + "level": "L3", + "label": "initializeTLSNotary", + "file_path": "src/features/tlsnotary/index.ts", + "symbol_name": "initializeTLSNotary", + "line_range": [ + 77, + 109 + ], + "centrality": 3 + }, + { + "uuid": "sym-363a8258c584c40b62a678fd", + "level": "L3", + "label": "shutdownTLSNotary", + "file_path": "src/features/tlsnotary/index.ts", + "symbol_name": "shutdownTLSNotary", + "line_range": [ + 116, + 123 + ], + "centrality": 2 + }, + { + "uuid": "sym-e3c02dbe29b87117fa9b04db", + "level": "L3", + "label": "isTLSNotaryEnabled", + "file_path": "src/features/tlsnotary/index.ts", + "symbol_name": "isTLSNotaryEnabled", + "line_range": [ + 129, + 131 + ], + "centrality": 2 + }, + { + "uuid": "sym-e32897b8d4bc13fd2ec355c3", + "level": "L3", + "label": "getTLSNotaryStatus", + "file_path": "src/features/tlsnotary/index.ts", + "symbol_name": "getTLSNotaryStatus", + "line_range": [ + 137, + 143 + ], + "centrality": 2 + }, + { + "uuid": "sym-7e6112dd781d795b89a0d740", + "level": "L3", + "label": "default", + "file_path": "src/features/tlsnotary/index.ts", + "symbol_name": "default", + "line_range": [ + 145, + 151 + ], + "centrality": 1 + }, + { + "uuid": "sym-9a8e120674ffb3d5976882cd", + "level": "L3", + "label": "PORT_CONFIG", + "file_path": "src/features/tlsnotary/portAllocator.ts", + "symbol_name": "PORT_CONFIG", + "line_range": [ + 17, + 23 + ], + "centrality": 1 + }, + { + "uuid": "sym-266f75531942cf49359b72a4", + "level": "L3", + "label": "PortPoolState::api", + "file_path": "src/features/tlsnotary/portAllocator.ts", + "symbol_name": "PortPoolState::api", + "line_range": [ + 28, + 32 + ], + "centrality": 1 + }, + { + "uuid": "sym-4c6ce39e98ae4ab81939824f", + "level": "L2", + "label": "PortPoolState", + "file_path": "src/features/tlsnotary/portAllocator.ts", + "symbol_name": "PortPoolState", + "line_range": [ + 28, + 32 + ], + "centrality": 2 + }, + { + "uuid": "sym-dc90f4d9772ae4e497b4d0fb", + "level": "L3", + "label": "initPortPool", + "file_path": "src/features/tlsnotary/portAllocator.ts", + "symbol_name": "initPortPool", + "line_range": [ + 38, + 44 + ], + "centrality": 1 + }, + { + "uuid": "sym-15181e6b0024657af6420bb3", + "level": "L3", + "label": "isPortAvailable", + "file_path": "src/features/tlsnotary/portAllocator.ts", + "symbol_name": "isPortAvailable", + "line_range": [ + 51, + 85 + ], + "centrality": 2 + }, + { + "uuid": "sym-f22d728c52d0e3f559ffbb8a", + "level": "L3", + "label": "allocatePort", + "file_path": "src/features/tlsnotary/portAllocator.ts", + "symbol_name": "allocatePort", + "line_range": [ + 93, + 125 + ], + "centrality": 3 + }, + { + "uuid": "sym-17663c6ac3e09ee99af6cbfc", + "level": "L3", + "label": "releasePort", + "file_path": "src/features/tlsnotary/portAllocator.ts", + "symbol_name": "releasePort", + "line_range": [ + 132, + 141 + ], + "centrality": 4 + }, + { + "uuid": "sym-a9c92d2af5e8dba2d840eb22", + "level": "L3", + "label": "getPoolStats", + "file_path": "src/features/tlsnotary/portAllocator.ts", + "symbol_name": "getPoolStats", + "line_range": [ + 148, + 164 + ], + "centrality": 1 + }, + { + "uuid": "sym-fc707a99e6953bbe1224a9c7", + "level": "L3", + "label": "ProxyError::api", + "file_path": "src/features/tlsnotary/proxyManager.ts", + "symbol_name": "ProxyError::api", + "line_range": [ + 51, + 56 + ], + "centrality": 1 + }, + { + "uuid": "sym-26cbeaf8371240e40a439ffd", + "level": "L2", + "label": "ProxyError", + "file_path": "src/features/tlsnotary/proxyManager.ts", + "symbol_name": "ProxyError", + "line_range": [ + 51, + 56 + ], + "centrality": 2 + }, + { + "uuid": "sym-907710b9e6031b27ee27d792", + "level": "L3", + "label": "ProxyInfo::api", + "file_path": "src/features/tlsnotary/proxyManager.ts", + "symbol_name": "ProxyInfo::api", + "line_range": [ + 61, + 70 + ], + "centrality": 1 + }, + { + "uuid": "sym-297ca357cdc84e9e674a3d04", + "level": "L2", + "label": "ProxyInfo", + "file_path": "src/features/tlsnotary/proxyManager.ts", + "symbol_name": "ProxyInfo", + "line_range": [ + 61, + 70 + ], + "centrality": 2 + }, + { + "uuid": "sym-62a7a1c4aacf761c94364b47", + "level": "L3", + "label": "TLSNotaryState::api", + "file_path": "src/features/tlsnotary/proxyManager.ts", + "symbol_name": "TLSNotaryState::api", + "line_range": [ + 75, + 78 + ], + "centrality": 1 + }, + { + "uuid": "sym-3db558af1680fcbc9c209696", + "level": "L2", + "label": "TLSNotaryState", + "file_path": "src/features/tlsnotary/proxyManager.ts", + "symbol_name": "TLSNotaryState", + "line_range": [ + 75, + 78 + ], + "centrality": 2 + }, + { + "uuid": "sym-c591da5cf9fd5033796fad52", + "level": "L3", + "label": "ProxyRequestSuccess::api", + "file_path": "src/features/tlsnotary/proxyManager.ts", + "symbol_name": "ProxyRequestSuccess::api", + "line_range": [ + 83, + 88 + ], + "centrality": 1 + }, + { + "uuid": "sym-f16008b8cfe1c5b3dc8f9be0", + "level": "L2", + "label": "ProxyRequestSuccess", + "file_path": "src/features/tlsnotary/proxyManager.ts", + "symbol_name": "ProxyRequestSuccess", + "line_range": [ + 83, + 88 + ], + "centrality": 2 + }, + { + "uuid": "sym-0235109d7d5578b7564492f0", + "level": "L3", + "label": "ProxyRequestError::api", + "file_path": "src/features/tlsnotary/proxyManager.ts", + "symbol_name": "ProxyRequestError::api", + "line_range": [ + 93, + 98 + ], + "centrality": 1 + }, + { + "uuid": "sym-7983e9e5facf67e208691a4a", + "level": "L2", + "label": "ProxyRequestError", + "file_path": "src/features/tlsnotary/proxyManager.ts", + "symbol_name": "ProxyRequestError", + "line_range": [ + 93, + 98 + ], + "centrality": 2 + }, + { + "uuid": "sym-af4dfd683d1a5aaafa97f71b", + "level": "L3", + "label": "ensureWstcp", + "file_path": "src/features/tlsnotary/proxyManager.ts", + "symbol_name": "ensureWstcp", + "line_range": [ + 126, + 143 + ], + "centrality": 2 + }, + { + "uuid": "sym-b20154660e4ffdb468116aa2", + "level": "L3", + "label": "extractDomainAndPort", + "file_path": "src/features/tlsnotary/proxyManager.ts", + "symbol_name": "extractDomainAndPort", + "line_range": [ + 150, + 169 + ], + "centrality": 2 + }, + { + "uuid": "sym-b4012c771eba259cf8dd4592", + "level": "L3", + "label": "getPublicUrl", + "file_path": "src/features/tlsnotary/proxyManager.ts", + "symbol_name": "getPublicUrl", + "line_range": [ + 177, + 210 + ], + "centrality": 1 + }, + { + "uuid": "sym-4435b2ba48da9de578ec8950", + "level": "L3", + "label": "cleanupStaleProxies", + "file_path": "src/features/tlsnotary/proxyManager.ts", + "symbol_name": "cleanupStaleProxies", + "line_range": [ + 377, + 401 + ], + "centrality": 3 + }, + { + "uuid": "sym-5d2517b043286dce6d6847d7", + "level": "L3", + "label": "requestProxy", + "file_path": "src/features/tlsnotary/proxyManager.ts", + "symbol_name": "requestProxy", + "line_range": [ + 423, + 521 + ], + "centrality": 7 + }, + { + "uuid": "sym-1d9d546626598e46d80a33e3", + "level": "L3", + "label": "killProxy", + "file_path": "src/features/tlsnotary/proxyManager.ts", + "symbol_name": "killProxy", + "line_range": [ + 528, + 546 + ], + "centrality": 2 + }, + { + "uuid": "sym-30522ef6077dd999b7f172c6", + "level": "L3", + "label": "killAllProxies", + "file_path": "src/features/tlsnotary/proxyManager.ts", + "symbol_name": "killAllProxies", + "line_range": [ + 551, + 565 + ], + "centrality": 1 + }, + { + "uuid": "sym-debcbb487e8f163b6358c170", + "level": "L3", + "label": "getProxyManagerStatus", + "file_path": "src/features/tlsnotary/proxyManager.ts", + "symbol_name": "getProxyManagerStatus", + "line_range": [ + 570, + 611 + ], + "centrality": 1 + }, + { + "uuid": "sym-c40d1a0a528d0efe34d893f0", + "level": "L3", + "label": "registerTLSNotaryRoutes", + "file_path": "src/features/tlsnotary/routes.ts", + "symbol_name": "registerTLSNotaryRoutes", + "line_range": [ + 213, + 224 + ], + "centrality": 2 + }, + { + "uuid": "sym-719fa881592657d7ae9efe07", + "level": "L3", + "label": "default", + "file_path": "src/features/tlsnotary/routes.ts", + "symbol_name": "default", + "line_range": [ + 226, + 226 + ], + "centrality": 1 + }, + { + "uuid": "sym-433666f8a3a3ca195a6c43b9", + "level": "L3", + "label": "TOKEN_CONFIG", + "file_path": "src/features/tlsnotary/tokenManager.ts", + "symbol_name": "TOKEN_CONFIG", + "line_range": [ + 18, + 22 + ], + "centrality": 1 + }, + { + "uuid": "sym-3bf1037e30906da22b26b10b", + "level": "L3", + "label": "TokenStatus::api", + "file_path": "src/features/tlsnotary/tokenManager.ts", + "symbol_name": "TokenStatus::api", + "line_range": [ + 27, + 34 + ], + "centrality": 1 + }, + { + "uuid": "sym-1bc6f773d7c81a2ab06a3280", + "level": "L2", + "label": "TokenStatus", + "file_path": "src/features/tlsnotary/tokenManager.ts", + "symbol_name": "TokenStatus", + "line_range": [ + 27, + 34 + ], + "centrality": 2 + }, + { + "uuid": "sym-d8616b9f73c4507701982752", + "level": "L3", + "label": "AttestationToken::api", + "file_path": "src/features/tlsnotary/tokenManager.ts", + "symbol_name": "AttestationToken::api", + "line_range": [ + 39, + 49 + ], + "centrality": 1 + }, + { + "uuid": "sym-c40372def081f07b71bd4712", + "level": "L2", + "label": "AttestationToken", + "file_path": "src/features/tlsnotary/tokenManager.ts", + "symbol_name": "AttestationToken", + "line_range": [ + 39, + 49 + ], + "centrality": 2 + }, + { + "uuid": "sym-c6c98cc6d0c52307aa196164", + "level": "L3", + "label": "TokenStoreState::api", + "file_path": "src/features/tlsnotary/tokenManager.ts", + "symbol_name": "TokenStoreState::api", + "line_range": [ + 54, + 57 + ], + "centrality": 1 + }, + { + "uuid": "sym-33df031e22a2d073aff29d0a", + "level": "L2", + "label": "TokenStoreState", + "file_path": "src/features/tlsnotary/tokenManager.ts", + "symbol_name": "TokenStoreState", + "line_range": [ + 54, + 57 + ], + "centrality": 2 + }, + { + "uuid": "sym-adc4065dd1b3ac679d5ba2f9", + "level": "L3", + "label": "extractDomain", + "file_path": "src/features/tlsnotary/tokenManager.ts", + "symbol_name": "extractDomain", + "line_range": [ + 98, + 105 + ], + "centrality": 5 + }, + { + "uuid": "sym-4e80afaf50ee6162c65e2622", + "level": "L3", + "label": "createToken", + "file_path": "src/features/tlsnotary/tokenManager.ts", + "symbol_name": "createToken", + "line_range": [ + 115, + 139 + ], + "centrality": 3 + }, + { + "uuid": "sym-2e9af8ad888cbeef0ea5caea", + "level": "L3", + "label": "TokenValidationResult::api", + "file_path": "src/features/tlsnotary/tokenManager.ts", + "symbol_name": "TokenValidationResult::api", + "line_range": [ + 144, + 148 + ], + "centrality": 1 + }, + { + "uuid": "sym-ad0f36d2976eaf60bf419c15", + "level": "L2", + "label": "TokenValidationResult", + "file_path": "src/features/tlsnotary/tokenManager.ts", + "symbol_name": "TokenValidationResult", + "line_range": [ + 144, + 148 + ], + "centrality": 2 + }, + { + "uuid": "sym-0115c78857a4e5f525339e2d", + "level": "L3", + "label": "validateToken", + "file_path": "src/features/tlsnotary/tokenManager.ts", + "symbol_name": "validateToken", + "line_range": [ + 158, + 205 + ], + "centrality": 3 + }, + { + "uuid": "sym-5057526194c060d19120572f", + "level": "L3", + "label": "consumeRetry", + "file_path": "src/features/tlsnotary/tokenManager.ts", + "symbol_name": "consumeRetry", + "line_range": [ + 214, + 233 + ], + "centrality": 2 + }, + { + "uuid": "sym-fb41addf4b834b1cd33edc92", + "level": "L3", + "label": "markCompleted", + "file_path": "src/features/tlsnotary/tokenManager.ts", + "symbol_name": "markCompleted", + "line_range": [ + 241, + 253 + ], + "centrality": 1 + }, + { + "uuid": "sym-9281614f452adafc3cae1183", + "level": "L3", + "label": "markStored", + "file_path": "src/features/tlsnotary/tokenManager.ts", + "symbol_name": "markStored", + "line_range": [ + 261, + 273 + ], + "centrality": 2 + }, + { + "uuid": "sym-b4ef38925e03b3181e41e353", + "level": "L3", + "label": "getToken", + "file_path": "src/features/tlsnotary/tokenManager.ts", + "symbol_name": "getToken", + "line_range": [ + 281, + 284 + ], + "centrality": 3 + }, + { + "uuid": "sym-814eb4802fa432ff5ff8bc82", + "level": "L3", + "label": "getTokenByTxHash", + "file_path": "src/features/tlsnotary/tokenManager.ts", + "symbol_name": "getTokenByTxHash", + "line_range": [ + 292, + 300 + ], + "centrality": 2 + }, + { + "uuid": "sym-f954c7b798e4f9310812532d", + "level": "L3", + "label": "cleanupExpiredTokens", + "file_path": "src/features/tlsnotary/tokenManager.ts", + "symbol_name": "cleanupExpiredTokens", + "line_range": [ + 305, + 322 + ], + "centrality": 1 + }, + { + "uuid": "sym-7a7c3a1eb526becc41e434a1", + "level": "L3", + "label": "getTokenStats", + "file_path": "src/features/tlsnotary/tokenManager.ts", + "symbol_name": "getTokenStats", + "line_range": [ + 327, + 349 + ], + "centrality": 2 + }, + { + "uuid": "sym-4722e7f6cce02aa7a45c0ca8", + "level": "L3", + "label": "DAHR::api", + "file_path": "src/features/web2/dahr/DAHR.ts", + "symbol_name": "DAHR::api", + "line_range": [ + 17, + 130 + ], + "centrality": 1 + }, + { + "uuid": "sym-8e6fb1c5edb7ed62e201d405", + "level": "L3", + "label": "DAHR.web2Request", + "file_path": "src/features/web2/dahr/DAHR.ts", + "symbol_name": "DAHR.web2Request", + "line_range": [ + 49, + 51 + ], + "centrality": 1 + }, + { + "uuid": "sym-954b96385b9de9e9207933cc", + "level": "L3", + "label": "DAHR.sessionId", + "file_path": "src/features/web2/dahr/DAHR.ts", + "symbol_name": "DAHR.sessionId", + "line_range": [ + 57, + 59 + ], + "centrality": 1 + }, + { + "uuid": "sym-0e15f799bb0693f0511b578d", + "level": "L3", + "label": "DAHR.startProxy", + "file_path": "src/features/web2/dahr/DAHR.ts", + "symbol_name": "DAHR.startProxy", + "line_range": [ + 65, + 101 + ], + "centrality": 1 + }, + { + "uuid": "sym-3d6899724c0d41cfd6f474f0", + "level": "L3", + "label": "DAHR.stopProxy", + "file_path": "src/features/web2/dahr/DAHR.ts", + "symbol_name": "DAHR.stopProxy", + "line_range": [ + 106, + 108 + ], + "centrality": 1 + }, + { + "uuid": "sym-7cfb9cd62ef3a3bcba6133d6", + "level": "L3", + "label": "DAHR.toSerializable", + "file_path": "src/features/web2/dahr/DAHR.ts", + "symbol_name": "DAHR.toSerializable", + "line_range": [ + 114, + 129 + ], + "centrality": 1 + }, + { + "uuid": "sym-e627965d04649dc42cc45b54", + "level": "L2", + "label": "DAHR", + "file_path": "src/features/web2/dahr/DAHR.ts", + "symbol_name": "DAHR", + "line_range": [ + 17, + 130 + ], + "centrality": 7 + }, + { + "uuid": "sym-5115d455ff0b3f7736ab7b40", + "level": "L3", + "label": "DAHRFactory::api", + "file_path": "src/features/web2/dahr/DAHRFactory.ts", + "symbol_name": "DAHRFactory::api", + "line_range": [ + 8, + 74 + ], + "centrality": 1 + }, + { + "uuid": "sym-646106dbb39ff99ccb6a16d6", + "level": "L3", + "label": "DAHRFactory.instance", + "file_path": "src/features/web2/dahr/DAHRFactory.ts", + "symbol_name": "DAHRFactory.instance", + "line_range": [ + 35, + 41 + ], + "centrality": 1 + }, + { + "uuid": "sym-29dba20c5dbe8beee9ac139b", + "level": "L3", + "label": "DAHRFactory.createDAHR", + "file_path": "src/features/web2/dahr/DAHRFactory.ts", + "symbol_name": "DAHRFactory.createDAHR", + "line_range": [ + 48, + 56 + ], + "centrality": 1 + }, + { + "uuid": "sym-c876049c95a83447cb3011f5", + "level": "L3", + "label": "DAHRFactory.getDAHR", + "file_path": "src/features/web2/dahr/DAHRFactory.ts", + "symbol_name": "DAHRFactory.getDAHR", + "line_range": [ + 63, + 73 + ], + "centrality": 1 + }, + { + "uuid": "sym-d37277bb65ea84e12d02d020", + "level": "L2", + "label": "DAHRFactory", + "file_path": "src/features/web2/dahr/DAHRFactory.ts", + "symbol_name": "DAHRFactory", + "line_range": [ + 8, + 74 + ], + "centrality": 5 + }, + { + "uuid": "sym-c0b505bebd5393a5e4195eff", + "level": "L3", + "label": "handleWeb2", + "file_path": "src/features/web2/handleWeb2.ts", + "symbol_name": "handleWeb2", + "line_range": [ + 19, + 47 + ], + "centrality": 2 + }, + { + "uuid": "sym-abf9a552e1b6a1741fd89eea", + "level": "L3", + "label": "Proxy::api", + "file_path": "src/features/web2/proxy/Proxy.ts", + "symbol_name": "Proxy::api", + "line_range": [ + 24, + 529 + ], + "centrality": 1 + }, + { + "uuid": "sym-9b202e46a4d2e18367b66d73", + "level": "L3", + "label": "Proxy.sendHTTPRequest", + "file_path": "src/features/web2/proxy/Proxy.ts", + "symbol_name": "Proxy.sendHTTPRequest", + "line_range": [ + 51, + 152 + ], + "centrality": 1 + }, + { + "uuid": "sym-aca57b52879b4144d90ddf08", + "level": "L3", + "label": "Proxy.stopProxy", + "file_path": "src/features/web2/proxy/Proxy.ts", + "symbol_name": "Proxy.stopProxy", + "line_range": [ + 160, + 176 + ], + "centrality": 1 + }, + { + "uuid": "sym-bfe9e935a34dd0614090ce99", + "level": "L2", + "label": "Proxy", + "file_path": "src/features/web2/proxy/Proxy.ts", + "symbol_name": "Proxy", + "line_range": [ + 24, + 529 + ], + "centrality": 4 + }, + { + "uuid": "sym-a3370fbc057c5e1c22e7793b", + "level": "L3", + "label": "ProxyFactory::api", + "file_path": "src/features/web2/proxy/ProxyFactory.ts", + "symbol_name": "ProxyFactory::api", + "line_range": [ + 6, + 15 + ], + "centrality": 1 + }, + { + "uuid": "sym-7694c211fe907466d8273a7e", + "level": "L3", + "label": "ProxyFactory.createProxy", + "file_path": "src/features/web2/proxy/ProxyFactory.ts", + "symbol_name": "ProxyFactory.createProxy", + "line_range": [ + 12, + 14 + ], + "centrality": 1 + }, + { + "uuid": "sym-2fbba88417d7be653ece3499", + "level": "L2", + "label": "ProxyFactory", + "file_path": "src/features/web2/proxy/ProxyFactory.ts", + "symbol_name": "ProxyFactory", + "line_range": [ + 6, + 15 + ], + "centrality": 3 + }, + { + "uuid": "sym-329d6cd73bd648317027d590", + "level": "L3", + "label": "stripSensitiveWeb2Headers", + "file_path": "src/features/web2/sanitizeWeb2Request.ts", + "symbol_name": "stripSensitiveWeb2Headers", + "line_range": [ + 20, + 38 + ], + "centrality": 2 + }, + { + "uuid": "sym-355d9ea302b96d2ada7be226", + "level": "L3", + "label": "redactSensitiveWeb2Headers", + "file_path": "src/features/web2/sanitizeWeb2Request.ts", + "symbol_name": "redactSensitiveWeb2Headers", + "line_range": [ + 40, + 62 + ], + "centrality": 2 + }, + { + "uuid": "sym-d85124f8888456a01864d0d7", + "level": "L3", + "label": "sanitizeWeb2RequestForStorage", + "file_path": "src/features/web2/sanitizeWeb2Request.ts", + "symbol_name": "sanitizeWeb2RequestForStorage", + "line_range": [ + 64, + 82 + ], + "centrality": 2 + }, + { + "uuid": "sym-01250ff7b457022d57f75b23", + "level": "L3", + "label": "sanitizeWeb2RequestForLogging", + "file_path": "src/features/web2/sanitizeWeb2Request.ts", + "symbol_name": "sanitizeWeb2RequestForLogging", + "line_range": [ + 84, + 102 + ], + "centrality": 2 + }, + { + "uuid": "sym-7bc468f24d0bd68c3716ca14", + "level": "L3", + "label": "UrlValidationResult::api", + "file_path": "src/features/web2/validator.ts", + "symbol_name": "UrlValidationResult::api", + "line_range": [ + 1, + 3 + ], + "centrality": 1 + }, + { + "uuid": "sym-27a071409a6448a327c75916", + "level": "L2", + "label": "UrlValidationResult", + "file_path": "src/features/web2/validator.ts", + "symbol_name": "UrlValidationResult", + "line_range": [ + 1, + 3 + ], + "centrality": 2 + }, + { + "uuid": "sym-df74c42f1d0883c0ac4ea037", + "level": "L3", + "label": "validateAndNormalizeHttpUrl", + "file_path": "src/features/web2/validator.ts", + "symbol_name": "validateAndNormalizeHttpUrl", + "line_range": [ + 17, + 146 + ], + "centrality": 2 + }, + { + "uuid": "sym-30f023b8001b0d2954548e94", + "level": "L3", + "label": "Prover::api", + "file_path": "src/features/zk/iZKP/zk.ts", + "symbol_name": "Prover::api", + "line_range": [ + 5, + 25 + ], + "centrality": 1 + }, + { + "uuid": "sym-a6fa2da71477acd8ca019d69", + "level": "L3", + "label": "Prover.generateCommitment", + "file_path": "src/features/zk/iZKP/zk.ts", + "symbol_name": "Prover.generateCommitment", + "line_range": [ + 15, + 18 + ], + "centrality": 1 + }, + { + "uuid": "sym-fa476f03eef817925c888ff3", + "level": "L3", + "label": "Prover.respondToChallenge", + "file_path": "src/features/zk/iZKP/zk.ts", + "symbol_name": "Prover.respondToChallenge", + "line_range": [ + 20, + 24 + ], + "centrality": 1 + }, + { + "uuid": "sym-890d84899d1bd8ff66074d19", + "level": "L2", + "label": "Prover", + "file_path": "src/features/zk/iZKP/zk.ts", + "symbol_name": "Prover", + "line_range": [ + 5, + 25 + ], + "centrality": 4 + }, + { + "uuid": "sym-8ac635c37f1b1f7426a5dcec", + "level": "L3", + "label": "Verifier::api", + "file_path": "src/features/zk/iZKP/zk.ts", + "symbol_name": "Verifier::api", + "line_range": [ + 27, + 48 + ], + "centrality": 1 + }, + { + "uuid": "sym-5a46c4d2478308967a03a599", + "level": "L3", + "label": "Verifier.generateChallenge", + "file_path": "src/features/zk/iZKP/zk.ts", + "symbol_name": "Verifier.generateChallenge", + "line_range": [ + 35, + 38 + ], + "centrality": 1 + }, + { + "uuid": "sym-87e02332b5d839c8021e1d17", + "level": "L3", + "label": "Verifier.verifyResponse", + "file_path": "src/features/zk/iZKP/zk.ts", + "symbol_name": "Verifier.verifyResponse", + "line_range": [ + 40, + 47 + ], + "centrality": 1 + }, + { + "uuid": "sym-10c6bfb19ea88d09f9c7c87a", + "level": "L2", + "label": "Verifier", + "file_path": "src/features/zk/iZKP/zk.ts", + "symbol_name": "Verifier", + "line_range": [ + 27, + 48 + ], + "centrality": 4 + }, + { + "uuid": "sym-8246e2dd08e08f2ea2f20be6", + "level": "L3", + "label": "generateLargePrime", + "file_path": "src/features/zk/iZKP/zkPrimer.ts", + "symbol_name": "generateLargePrime", + "line_range": [ + 55, + 71 + ], + "centrality": 1 + }, + { + "uuid": "sym-495cf45bc0377d9a5afbc045", + "level": "L3", + "label": "MerkleTreeManager::api", + "file_path": "src/features/zk/merkle/MerkleTreeManager.ts", + "symbol_name": "MerkleTreeManager::api", + "line_range": [ + 21, + 301 + ], + "centrality": 1 + }, + { + "uuid": "sym-d5c01fc2a6daf358ad0614de", + "level": "L3", + "label": "MerkleTreeManager.initialize", + "file_path": "src/features/zk/merkle/MerkleTreeManager.ts", + "symbol_name": "MerkleTreeManager.initialize", + "line_range": [ + 52, + 91 + ], + "centrality": 1 + }, + { + "uuid": "sym-447a5e701a52a48725db1804", + "level": "L3", + "label": "MerkleTreeManager.addCommitment", + "file_path": "src/features/zk/merkle/MerkleTreeManager.ts", + "symbol_name": "MerkleTreeManager.addCommitment", + "line_range": [ + 99, + 129 + ], + "centrality": 1 + }, + { + "uuid": "sym-59da84ea7c765c8210c5f666", + "level": "L3", + "label": "MerkleTreeManager.getRoot", + "file_path": "src/features/zk/merkle/MerkleTreeManager.ts", + "symbol_name": "MerkleTreeManager.getRoot", + "line_range": [ + 136, + 138 + ], + "centrality": 1 + }, + { + "uuid": "sym-e1df23cfd63cd30cd63d4a24", + "level": "L3", + "label": "MerkleTreeManager.getLeafCount", + "file_path": "src/features/zk/merkle/MerkleTreeManager.ts", + "symbol_name": "MerkleTreeManager.getLeafCount", + "line_range": [ + 145, + 147 + ], + "centrality": 1 + }, + { + "uuid": "sym-fc7baad9b538d0a808c7d220", + "level": "L3", + "label": "MerkleTreeManager.generateProof", + "file_path": "src/features/zk/merkle/MerkleTreeManager.ts", + "symbol_name": "MerkleTreeManager.generateProof", + "line_range": [ + 155, + 174 + ], + "centrality": 1 + }, + { + "uuid": "sym-02558c28bb9eb59cc31e9119", + "level": "L3", + "label": "MerkleTreeManager.getProofForCommitment", + "file_path": "src/features/zk/merkle/MerkleTreeManager.ts", + "symbol_name": "MerkleTreeManager.getProofForCommitment", + "line_range": [ + 182, + 210 + ], + "centrality": 1 + }, + { + "uuid": "sym-fddea2d2d61e84b8456298b3", + "level": "L3", + "label": "MerkleTreeManager.saveToDatabase", + "file_path": "src/features/zk/merkle/MerkleTreeManager.ts", + "symbol_name": "MerkleTreeManager.saveToDatabase", + "line_range": [ + 218, + 251 + ], + "centrality": 1 + }, + { + "uuid": "sym-93274c44efff4b1f949f3bb9", + "level": "L3", + "label": "MerkleTreeManager.verifyProof", + "file_path": "src/features/zk/merkle/MerkleTreeManager.ts", + "symbol_name": "MerkleTreeManager.verifyProof", + "line_range": [ + 261, + 274 + ], + "centrality": 1 + }, + { + "uuid": "sym-259ac048cb816234ef7ada5b", + "level": "L3", + "label": "MerkleTreeManager.getStats", + "file_path": "src/features/zk/merkle/MerkleTreeManager.ts", + "symbol_name": "MerkleTreeManager.getStats", + "line_range": [ + 281, + 300 + ], + "centrality": 1 + }, + { + "uuid": "sym-622da0c12aaa7a83367c4b2e", + "level": "L2", + "label": "MerkleTreeManager", + "file_path": "src/features/zk/merkle/MerkleTreeManager.ts", + "symbol_name": "MerkleTreeManager", + "line_range": [ + 21, + 301 + ], + "centrality": 11 + }, + { + "uuid": "sym-4404f892d433afa5b82ed3f4", + "level": "L3", + "label": "updateMerkleTreeAfterBlock", + "file_path": "src/features/zk/merkle/updateMerkleTreeAfterBlock.ts", + "symbol_name": "updateMerkleTreeAfterBlock", + "line_range": [ + 30, + 44 + ], + "centrality": 2 + }, + { + "uuid": "sym-ab44157beed9a9398173d77c", + "level": "L3", + "label": "getCurrentMerkleTreeState", + "file_path": "src/features/zk/merkle/updateMerkleTreeAfterBlock.ts", + "symbol_name": "getCurrentMerkleTreeState", + "line_range": [ + 126, + 137 + ], + "centrality": 2 + }, + { + "uuid": "sym-537af0b9d6bfcbb6032397db", + "level": "L3", + "label": "rollbackMerkleTreeToBlock", + "file_path": "src/features/zk/merkle/updateMerkleTreeAfterBlock.ts", + "symbol_name": "rollbackMerkleTreeToBlock", + "line_range": [ + 145, + 208 + ], + "centrality": 1 + }, + { + "uuid": "sym-5dbe5cd27b7f059f8e4f033b", + "level": "L3", + "label": "ZKProof::api", + "file_path": "src/features/zk/proof/BunSnarkjsWrapper.ts", + "symbol_name": "ZKProof::api", + "line_range": [ + 27, + 32 + ], + "centrality": 1 + }, + { + "uuid": "sym-e090776af88c5be10aba4a68", + "level": "L2", + "label": "ZKProof", + "file_path": "src/features/zk/proof/BunSnarkjsWrapper.ts", + "symbol_name": "ZKProof", + "line_range": [ + 27, + 32 + ], + "centrality": 2 + }, + { + "uuid": "sym-cc0c03550be8730b76e8f71d", + "level": "L3", + "label": "groth16VerifyBun", + "file_path": "src/features/zk/proof/BunSnarkjsWrapper.ts", + "symbol_name": "groth16VerifyBun", + "line_range": [ + 42, + 160 + ], + "centrality": 2 + }, + { + "uuid": "sym-c83faa9c46614bf7cebaca16", + "level": "L3", + "label": "ZKProof::api", + "file_path": "src/features/zk/proof/ProofVerifier.ts", + "symbol_name": "ZKProof::api", + "line_range": [ + 29, + 34 + ], + "centrality": 1 + }, + { + "uuid": "sym-051d763051b0c844395392cd", + "level": "L2", + "label": "ZKProof", + "file_path": "src/features/zk/proof/ProofVerifier.ts", + "symbol_name": "ZKProof", + "line_range": [ + 29, + 34 + ], + "centrality": 2 + }, + { + "uuid": "sym-49a8ade963ef62d280f2e848", + "level": "L3", + "label": "IdentityAttestationProof::api", + "file_path": "src/features/zk/proof/ProofVerifier.ts", + "symbol_name": "IdentityAttestationProof::api", + "line_range": [ + 36, + 39 + ], + "centrality": 1 + }, + { + "uuid": "sym-0548e973988513ade19763cd", + "level": "L2", + "label": "IdentityAttestationProof", + "file_path": "src/features/zk/proof/ProofVerifier.ts", + "symbol_name": "IdentityAttestationProof", + "line_range": [ + 36, + 39 + ], + "centrality": 2 + }, + { + "uuid": "sym-bdbcff3b286cf731b94f76b2", + "level": "L3", + "label": "ProofVerificationResult::api", + "file_path": "src/features/zk/proof/ProofVerifier.ts", + "symbol_name": "ProofVerificationResult::api", + "line_range": [ + 41, + 47 + ], + "centrality": 1 + }, + { + "uuid": "sym-f400625db879f3f88d41393b", + "level": "L2", + "label": "ProofVerificationResult", + "file_path": "src/features/zk/proof/ProofVerifier.ts", + "symbol_name": "ProofVerificationResult", + "line_range": [ + 41, + 47 + ], + "centrality": 2 + }, + { + "uuid": "sym-6cdfa0f864c81211de3ff9b0", + "level": "L3", + "label": "ProofVerifier::api", + "file_path": "src/features/zk/proof/ProofVerifier.ts", + "symbol_name": "ProofVerifier::api", + "line_range": [ + 49, + 357 + ], + "centrality": 1 + }, + { + "uuid": "sym-294062945c7711d95b133b38", + "level": "L3", + "label": "ProofVerifier.isNullifierUsed", + "file_path": "src/features/zk/proof/ProofVerifier.ts", + "symbol_name": "ProofVerifier.isNullifierUsed", + "line_range": [ + 118, + 123 + ], + "centrality": 1 + }, + { + "uuid": "sym-9dbf2f45df69dc411b69a2a8", + "level": "L3", + "label": "ProofVerifier.verifyIdentityAttestation", + "file_path": "src/features/zk/proof/ProofVerifier.ts", + "symbol_name": "ProofVerifier.verifyIdentityAttestation", + "line_range": [ + 168, + 308 + ], + "centrality": 1 + }, + { + "uuid": "sym-81336d6a9eb6d22a151740f1", + "level": "L3", + "label": "ProofVerifier.markNullifierUsed", + "file_path": "src/features/zk/proof/ProofVerifier.ts", + "symbol_name": "ProofVerifier.markNullifierUsed", + "line_range": [ + 318, + 344 + ], + "centrality": 1 + }, + { + "uuid": "sym-1d174f658713e92a4c259443", + "level": "L3", + "label": "ProofVerifier.verifyProofOnly", + "file_path": "src/features/zk/proof/ProofVerifier.ts", + "symbol_name": "ProofVerifier.verifyProofOnly", + "line_range": [ + 354, + 356 + ], + "centrality": 1 + }, + { + "uuid": "sym-f7a2710d38cf71bc22ff1334", + "level": "L2", + "label": "ProofVerifier", + "file_path": "src/features/zk/proof/ProofVerifier.ts", + "symbol_name": "ProofVerifier", + "line_range": [ + 49, + 357 + ], + "centrality": 7 + }, + { + "uuid": "sym-d8cf8b69f000df4cc6351d0b", + "level": "L3", + "label": "IdentityCommitmentPayload::api", + "file_path": "src/features/zk/types/index.ts", + "symbol_name": "IdentityCommitmentPayload::api", + "line_range": [ + 9, + 16 + ], + "centrality": 1 + }, + { + "uuid": "sym-5a2acc2e51e49fbeb95ef067", + "level": "L2", + "label": "IdentityCommitmentPayload", + "file_path": "src/features/zk/types/index.ts", + "symbol_name": "IdentityCommitmentPayload", + "line_range": [ + 9, + 16 + ], + "centrality": 2 + }, + { + "uuid": "sym-c78e678099c0210e59787676", + "level": "L3", + "label": "Groth16Proof::api", + "file_path": "src/features/zk/types/index.ts", + "symbol_name": "Groth16Proof::api", + "line_range": [ + 22, + 28 + ], + "centrality": 1 + }, + { + "uuid": "sym-24f5eddf8ece217b1a33972f", + "level": "L2", + "label": "Groth16Proof", + "file_path": "src/features/zk/types/index.ts", + "symbol_name": "Groth16Proof", + "line_range": [ + 22, + 28 + ], + "centrality": 2 + }, + { + "uuid": "sym-692898daf907a5b9e4c65204", + "level": "L3", + "label": "IdentityAttestationPayload::api", + "file_path": "src/features/zk/types/index.ts", + "symbol_name": "IdentityAttestationPayload::api", + "line_range": [ + 34, + 45 + ], + "centrality": 1 + }, + { + "uuid": "sym-d3832144a7e9a4bf0fcb5986", + "level": "L2", + "label": "IdentityAttestationPayload", + "file_path": "src/features/zk/types/index.ts", + "symbol_name": "IdentityAttestationPayload", + "line_range": [ + 34, + 45 + ], + "centrality": 2 + }, + { + "uuid": "sym-c8868bf639c69391eaf998e9", + "level": "L3", + "label": "MerkleProofResponse::api", + "file_path": "src/features/zk/types/index.ts", + "symbol_name": "MerkleProofResponse::api", + "line_range": [ + 51, + 65 + ], + "centrality": 1 + }, + { + "uuid": "sym-935a4eb2274a87e70e7dd352", + "level": "L2", + "label": "MerkleProofResponse", + "file_path": "src/features/zk/types/index.ts", + "symbol_name": "MerkleProofResponse", + "line_range": [ + 51, + 65 + ], + "centrality": 2 + }, + { + "uuid": "sym-21ea3e3d8b21f47296fc535a", + "level": "L3", + "label": "MerkleRootResponse::api", + "file_path": "src/features/zk/types/index.ts", + "symbol_name": "MerkleRootResponse::api", + "line_range": [ + 71, + 78 + ], + "centrality": 1 + }, + { + "uuid": "sym-2a9103f7b96eefd857128feb", + "level": "L2", + "label": "MerkleRootResponse", + "file_path": "src/features/zk/types/index.ts", + "symbol_name": "MerkleRootResponse", + "line_range": [ + 71, + 78 + ], + "centrality": 2 + }, + { + "uuid": "sym-5f0e7aef4f1b0d5922abb716", + "level": "L3", + "label": "NullifierCheckResponse::api", + "file_path": "src/features/zk/types/index.ts", + "symbol_name": "NullifierCheckResponse::api", + "line_range": [ + 84, + 89 + ], + "centrality": 1 + }, + { + "uuid": "sym-18b97e86025bc97b9979076c", + "level": "L2", + "label": "NullifierCheckResponse", + "file_path": "src/features/zk/types/index.ts", + "symbol_name": "NullifierCheckResponse", + "line_range": [ + 84, + 89 + ], + "centrality": 2 + }, + { + "uuid": "sym-b4f763e263a51bb1a1e12bb8", + "level": "L3", + "label": "IdentityProofCircuitInput::api", + "file_path": "src/features/zk/types/index.ts", + "symbol_name": "IdentityProofCircuitInput::api", + "line_range": [ + 100, + 125 + ], + "centrality": 1 + }, + { + "uuid": "sym-c7dffab7af29280725182e57", + "level": "L2", + "label": "IdentityProofCircuitInput", + "file_path": "src/features/zk/types/index.ts", + "symbol_name": "IdentityProofCircuitInput", + "line_range": [ + 100, + 125 + ], + "centrality": 2 + }, + { + "uuid": "sym-a37ce98dfcb48ac1f5fcaba5", + "level": "L3", + "label": "ProofGenerationResult::api", + "file_path": "src/features/zk/types/index.ts", + "symbol_name": "ProofGenerationResult::api", + "line_range": [ + 130, + 135 + ], + "centrality": 1 + }, + { + "uuid": "sym-699ee11061314e7641979d09", + "level": "L2", + "label": "ProofGenerationResult", + "file_path": "src/features/zk/types/index.ts", + "symbol_name": "ProofGenerationResult", + "line_range": [ + 130, + 135 + ], + "centrality": 2 + }, + { + "uuid": "sym-e9ff6a51fed52302f183f9ff", + "level": "L3", + "label": "verifyWeb2Proof", + "file_path": "src/libs/abstraction/index.ts", + "symbol_name": "verifyWeb2Proof", + "line_range": [ + 173, + 259 + ], + "centrality": 3 + }, + { + "uuid": "sym-e1860aeb3770058ff3c3984d", + "level": "L3", + "label": "TwitterProofParser", + "file_path": "src/libs/abstraction/index.ts", + "symbol_name": "TwitterProofParser", + "line_range": [ + 261, + 261 + ], + "centrality": 1 + }, + { + "uuid": "sym-969cec081b320862dec672b7", + "level": "L3", + "label": "Web2ProofParser", + "file_path": "src/libs/abstraction/index.ts", + "symbol_name": "Web2ProofParser", + "line_range": [ + 261, + 261 + ], + "centrality": 1 + }, + { + "uuid": "sym-a5aa69428632eb5ff35c24d2", + "level": "L3", + "label": "DiscordProofParser::api", + "file_path": "src/libs/abstraction/web2/discord.ts", + "symbol_name": "DiscordProofParser::api", + "line_range": [ + 5, + 54 + ], + "centrality": 1 + }, + { + "uuid": "sym-16f750165c16e7c1feabd3d1", + "level": "L3", + "label": "DiscordProofParser.getMessageFromUrl", + "file_path": "src/libs/abstraction/web2/discord.ts", + "symbol_name": "DiscordProofParser.getMessageFromUrl", + "line_range": [ + 23, + 25 + ], + "centrality": 1 + }, + { + "uuid": "sym-d579b50fddb19045a7bbd220", + "level": "L3", + "label": "DiscordProofParser.readData", + "file_path": "src/libs/abstraction/web2/discord.ts", + "symbol_name": "DiscordProofParser.readData", + "line_range": [ + 27, + 45 + ], + "centrality": 1 + }, + { + "uuid": "sym-e1d9c0b271d533213f995550", + "level": "L3", + "label": "DiscordProofParser.getInstance", + "file_path": "src/libs/abstraction/web2/discord.ts", + "symbol_name": "DiscordProofParser.getInstance", + "line_range": [ + 47, + 53 + ], + "centrality": 1 + }, + { + "uuid": "sym-b922f1d9098d7a4cd4f8028e", + "level": "L2", + "label": "DiscordProofParser", + "file_path": "src/libs/abstraction/web2/discord.ts", + "symbol_name": "DiscordProofParser", + "line_range": [ + 5, + 54 + ], + "centrality": 5 + }, + { + "uuid": "sym-7052061179401b661022a562", + "level": "L3", + "label": "GithubProofParser::api", + "file_path": "src/libs/abstraction/web2/github.ts", + "symbol_name": "GithubProofParser::api", + "line_range": [ + 6, + 98 + ], + "centrality": 1 + }, + { + "uuid": "sym-4ce023944953633a4e0dc5a5", + "level": "L3", + "label": "GithubProofParser.parseGistDetails", + "file_path": "src/libs/abstraction/web2/github.ts", + "symbol_name": "GithubProofParser.parseGistDetails", + "line_range": [ + 14, + 28 + ], + "centrality": 1 + }, + { + "uuid": "sym-02de4cc64467c6c1e46ff17a", + "level": "L3", + "label": "GithubProofParser.login", + "file_path": "src/libs/abstraction/web2/github.ts", + "symbol_name": "GithubProofParser.login", + "line_range": [ + 30, + 38 + ], + "centrality": 1 + }, + { + "uuid": "sym-f63492b60547693ff5a625f1", + "level": "L3", + "label": "GithubProofParser.readData", + "file_path": "src/libs/abstraction/web2/github.ts", + "symbol_name": "GithubProofParser.readData", + "line_range": [ + 40, + 88 + ], + "centrality": 1 + }, + { + "uuid": "sym-a7ec4c6121891fe7bdda936f", + "level": "L3", + "label": "GithubProofParser.getInstance", + "file_path": "src/libs/abstraction/web2/github.ts", + "symbol_name": "GithubProofParser.getInstance", + "line_range": [ + 90, + 97 + ], + "centrality": 1 + }, + { + "uuid": "sym-1ac6951f1be4ce316fd98a61", + "level": "L2", + "label": "GithubProofParser", + "file_path": "src/libs/abstraction/web2/github.ts", + "symbol_name": "GithubProofParser", + "line_range": [ + 6, + 98 + ], + "centrality": 6 + }, + { + "uuid": "sym-eae3b686b7a78c12fefd52e2", + "level": "L3", + "label": "Web2ProofParser::api", + "file_path": "src/libs/abstraction/web2/parsers.ts", + "symbol_name": "Web2ProofParser::api", + "line_range": [ + 4, + 71 + ], + "centrality": 1 + }, + { + "uuid": "sym-e322a0df9bf74f4fc0c0f861", + "level": "L3", + "label": "Web2ProofParser.verifyProofFormat", + "file_path": "src/libs/abstraction/web2/parsers.ts", + "symbol_name": "Web2ProofParser.verifyProofFormat", + "line_range": [ + 22, + 34 + ], + "centrality": 1 + }, + { + "uuid": "sym-d3e903adb164fb871dcb44a5", + "level": "L3", + "label": "Web2ProofParser.parsePayload", + "file_path": "src/libs/abstraction/web2/parsers.ts", + "symbol_name": "Web2ProofParser.parsePayload", + "line_range": [ + 41, + 57 + ], + "centrality": 1 + }, + { + "uuid": "sym-fbe78285d0072abe0aacde74", + "level": "L3", + "label": "Web2ProofParser.readData", + "file_path": "src/libs/abstraction/web2/parsers.ts", + "symbol_name": "Web2ProofParser.readData", + "line_range": [ + 62, + 66 + ], + "centrality": 1 + }, + { + "uuid": "sym-1c44d24073f117db03f1ba50", + "level": "L3", + "label": "Web2ProofParser.getInstance", + "file_path": "src/libs/abstraction/web2/parsers.ts", + "symbol_name": "Web2ProofParser.getInstance", + "line_range": [ + 68, + 70 + ], + "centrality": 1 + }, + { + "uuid": "sym-9cff97c1d186e2f747cdfad7", + "level": "L2", + "label": "Web2ProofParser", + "file_path": "src/libs/abstraction/web2/parsers.ts", + "symbol_name": "Web2ProofParser", + "line_range": [ + 4, + 71 + ], + "centrality": 6 + }, + { + "uuid": "sym-1ca6e2211ead3ab2a1f77cb6", + "level": "L3", + "label": "TwitterProofParser::api", + "file_path": "src/libs/abstraction/web2/twitter.ts", + "symbol_name": "TwitterProofParser::api", + "line_range": [ + 5, + 49 + ], + "centrality": 1 + }, + { + "uuid": "sym-484103a36838ad3f5a38b96b", + "level": "L3", + "label": "TwitterProofParser.readData", + "file_path": "src/libs/abstraction/web2/twitter.ts", + "symbol_name": "TwitterProofParser.readData", + "line_range": [ + 14, + 40 + ], + "centrality": 1 + }, + { + "uuid": "sym-736b0e99fea148f91d2a7afa", + "level": "L3", + "label": "TwitterProofParser.getInstance", + "file_path": "src/libs/abstraction/web2/twitter.ts", + "symbol_name": "TwitterProofParser.getInstance", + "line_range": [ + 42, + 48 + ], + "centrality": 1 + }, + { + "uuid": "sym-6b2c9e3fd8b741225f43d659", + "level": "L2", + "label": "TwitterProofParser", + "file_path": "src/libs/abstraction/web2/twitter.ts", + "symbol_name": "TwitterProofParser", + "line_range": [ + 5, + 49 + ], + "centrality": 4 + }, + { + "uuid": "sym-764a18253934fb84aa1790b3", + "level": "L3", + "label": "FungibleToken::api", + "file_path": "src/libs/assets/FungibleToken.ts", + "symbol_name": "FungibleToken::api", + "line_range": [ + 8, + 94 + ], + "centrality": 1 + }, + { + "uuid": "sym-e865be04c5b176c2fcef284f", + "level": "L3", + "label": "FungibleToken.getToken", + "file_path": "src/libs/assets/FungibleToken.ts", + "symbol_name": "FungibleToken.getToken", + "line_range": [ + 29, + 33 + ], + "centrality": 1 + }, + { + "uuid": "sym-9a5684d731dd1248da6a21ef", + "level": "L3", + "label": "FungibleToken.createNewToken", + "file_path": "src/libs/assets/FungibleToken.ts", + "symbol_name": "FungibleToken.createNewToken", + "line_range": [ + 36, + 51 + ], + "centrality": 1 + }, + { + "uuid": "sym-aa719229bc39cea907aee9db", + "level": "L3", + "label": "FungibleToken.hookTransfer", + "file_path": "src/libs/assets/FungibleToken.ts", + "symbol_name": "FungibleToken.hookTransfer", + "line_range": [ + 63, + 65 + ], + "centrality": 1 + }, + { + "uuid": "sym-60cc3956d6e6308983108861", + "level": "L3", + "label": "FungibleToken.transfer", + "file_path": "src/libs/assets/FungibleToken.ts", + "symbol_name": "FungibleToken.transfer", + "line_range": [ + 70, + 76 + ], + "centrality": 1 + }, + { + "uuid": "sym-139e5258c47864afabf7e515", + "level": "L3", + "label": "FungibleToken.deploy", + "file_path": "src/libs/assets/FungibleToken.ts", + "symbol_name": "FungibleToken.deploy", + "line_range": [ + 81, + 93 + ], + "centrality": 1 + }, + { + "uuid": "sym-1eb50452b11e15d996e1a4c6", + "level": "L2", + "label": "FungibleToken", + "file_path": "src/libs/assets/FungibleToken.ts", + "symbol_name": "FungibleToken", + "line_range": [ + 8, + 94 + ], + "centrality": 7 + }, + { + "uuid": "sym-f9714bf135b96cbdf541c7b1", + "level": "L3", + "label": "NonFungibleToken::api", + "file_path": "src/libs/assets/NonFungibleToken.ts", + "symbol_name": "NonFungibleToken::api", + "line_range": [ + 17, + 25 + ], + "centrality": 1 + }, + { + "uuid": "sym-98437ac92e6266fc78125452", + "level": "L2", + "label": "NonFungibleToken", + "file_path": "src/libs/assets/NonFungibleToken.ts", + "symbol_name": "NonFungibleToken", + "line_range": [ + 17, + 25 + ], + "centrality": 2 + }, + { + "uuid": "sym-53c3f376c6ca6c8b45db6354", + "level": "L3", + "label": "UnsSol::api", + "file_path": "src/libs/blockchain/UDTypes/uns_sol.ts", + "symbol_name": "UnsSol::api", + "line_range": [ + 7, + 2403 + ], + "centrality": 1 + }, + { + "uuid": "sym-76003dd5d7d3e16989e7df26", + "level": "L2", + "label": "UnsSol", + "file_path": "src/libs/blockchain/UDTypes/uns_sol.ts", + "symbol_name": "UnsSol", + "line_range": [ + 7, + 2403 + ], + "centrality": 2 + }, + { + "uuid": "sym-bde7808e4f3ae52d972170ba", + "level": "L3", + "label": "Block::api", + "file_path": "src/libs/blockchain/block.ts", + "symbol_name": "Block::api", + "line_range": [ + 18, + 75 + ], + "centrality": 1 + }, + { + "uuid": "sym-6ec12fe00dacd7937033485a", + "level": "L3", + "label": "Block.getHeader", + "file_path": "src/libs/blockchain/block.ts", + "symbol_name": "Block.getHeader", + "line_range": [ + 58, + 67 + ], + "centrality": 1 + }, + { + "uuid": "sym-3dca5e0bf1988930dfd34eae", + "level": "L3", + "label": "Block.getEncryptedTransactions", + "file_path": "src/libs/blockchain/block.ts", + "symbol_name": "Block.getEncryptedTransactions", + "line_range": [ + 70, + 72 + ], + "centrality": 1 + }, + { + "uuid": "sym-3531a9f3d8f1352b9d2dec84", + "level": "L2", + "label": "Block", + "file_path": "src/libs/blockchain/block.ts", + "symbol_name": "Block", + "line_range": [ + 18, + 75 + ], + "centrality": 4 + }, + { + "uuid": "sym-25f02bcbe29f875ab76aae3c", + "level": "L3", + "label": "Chain::api", + "file_path": "src/libs/blockchain/chain.ts", + "symbol_name": "Chain::api", + "line_range": [ + 42, + 728 + ], + "centrality": 1 + }, + { + "uuid": "sym-92a40a270894c02b37cf69d0", + "level": "L3", + "label": "Chain.setup", + "file_path": "src/libs/blockchain/chain.ts", + "symbol_name": "Chain.setup", + "line_range": [ + 46, + 51 + ], + "centrality": 1 + }, + { + "uuid": "sym-1ba1c6a5034cc8145e2aae35", + "level": "L3", + "label": "Chain.read", + "file_path": "src/libs/blockchain/chain.ts", + "symbol_name": "Chain.read", + "line_range": [ + 53, + 61 + ], + "centrality": 1 + }, + { + "uuid": "sym-8c2ac5f81d00901af3bea463", + "level": "L3", + "label": "Chain.write", + "file_path": "src/libs/blockchain/chain.ts", + "symbol_name": "Chain.write", + "line_range": [ + 63, + 71 + ], + "centrality": 1 + }, + { + "uuid": "sym-da62bb050091ee1e534103ae", + "level": "L3", + "label": "Chain.getTxByHash", + "file_path": "src/libs/blockchain/chain.ts", + "symbol_name": "Chain.getTxByHash", + "line_range": [ + 75, + 90 + ], + "centrality": 1 + }, + { + "uuid": "sym-97ec0c30212c73ea6d44f41e", + "level": "L3", + "label": "Chain.getTransactionHistory", + "file_path": "src/libs/blockchain/chain.ts", + "symbol_name": "Chain.getTransactionHistory", + "line_range": [ + 92, + 115 + ], + "centrality": 1 + }, + { + "uuid": "sym-ed793153e81f7ff7f544c330", + "level": "L3", + "label": "Chain.getBlockTransactions", + "file_path": "src/libs/blockchain/chain.ts", + "symbol_name": "Chain.getBlockTransactions", + "line_range": [ + 117, + 124 + ], + "centrality": 1 + }, + { + "uuid": "sym-bcd8d64230b3e4e1e4710afe", + "level": "L3", + "label": "Chain.getLastBlockNumber", + "file_path": "src/libs/blockchain/chain.ts", + "symbol_name": "Chain.getLastBlockNumber", + "line_range": [ + 127, + 134 + ], + "centrality": 1 + }, + { + "uuid": "sym-d5003da50d926831961f0d79", + "level": "L3", + "label": "Chain.getLastBlockHash", + "file_path": "src/libs/blockchain/chain.ts", + "symbol_name": "Chain.getLastBlockHash", + "line_range": [ + 137, + 144 + ], + "centrality": 1 + }, + { + "uuid": "sym-bc129c1aa7fc1f9a707643a5", + "level": "L3", + "label": "Chain.getLastBlockTransactionSet", + "file_path": "src/libs/blockchain/chain.ts", + "symbol_name": "Chain.getLastBlockTransactionSet", + "line_range": [ + 151, + 154 + ], + "centrality": 1 + }, + { + "uuid": "sym-62b1324f20925569af0c7d94", + "level": "L3", + "label": "Chain.getBlocks", + "file_path": "src/libs/blockchain/chain.ts", + "symbol_name": "Chain.getBlocks", + "line_range": [ + 164, + 183 + ], + "centrality": 1 + }, + { + "uuid": "sym-c98b14652a71a92d31cc89cf", + "level": "L3", + "label": "Chain.getBlockByNumber", + "file_path": "src/libs/blockchain/chain.ts", + "symbol_name": "Chain.getBlockByNumber", + "line_range": [ + 186, + 188 + ], + "centrality": 1 + }, + { + "uuid": "sym-1dcc44eb77d700302113243c", + "level": "L3", + "label": "Chain.getBlockByHash", + "file_path": "src/libs/blockchain/chain.ts", + "symbol_name": "Chain.getBlockByHash", + "line_range": [ + 191, + 193 + ], + "centrality": 1 + }, + { + "uuid": "sym-d6281bdc047c4680a97d4794", + "level": "L3", + "label": "Chain.getGenesisBlock", + "file_path": "src/libs/blockchain/chain.ts", + "symbol_name": "Chain.getGenesisBlock", + "line_range": [ + 195, + 197 + ], + "centrality": 1 + }, + { + "uuid": "sym-bce8660b398095386155235c", + "level": "L3", + "label": "Chain.getGenesisBlockHash", + "file_path": "src/libs/blockchain/chain.ts", + "symbol_name": "Chain.getGenesisBlockHash", + "line_range": [ + 199, + 206 + ], + "centrality": 1 + }, + { + "uuid": "sym-eba7e3ffe54ed291bd2c48ef", + "level": "L3", + "label": "Chain.getTransactionFromHash", + "file_path": "src/libs/blockchain/chain.ts", + "symbol_name": "Chain.getTransactionFromHash", + "line_range": [ + 209, + 215 + ], + "centrality": 1 + }, + { + "uuid": "sym-66abca7c0a890c9eff451b94", + "level": "L3", + "label": "Chain.getTransactionsFromHashes", + "file_path": "src/libs/blockchain/chain.ts", + "symbol_name": "Chain.getTransactionsFromHashes", + "line_range": [ + 218, + 228 + ], + "centrality": 1 + }, + { + "uuid": "sym-666e0dd7d88cb6983b6be662", + "level": "L3", + "label": "Chain.getTransactions", + "file_path": "src/libs/blockchain/chain.ts", + "symbol_name": "Chain.getTransactions", + "line_range": [ + 238, + 255 + ], + "centrality": 1 + }, + { + "uuid": "sym-5d90512dbf8aa5778c6bcb7c", + "level": "L3", + "label": "Chain.checkTxExists", + "file_path": "src/libs/blockchain/chain.ts", + "symbol_name": "Chain.checkTxExists", + "line_range": [ + 257, + 259 + ], + "centrality": 1 + }, + { + "uuid": "sym-3646a67443f9f0c3b575a67d", + "level": "L3", + "label": "Chain.isGenesis", + "file_path": "src/libs/blockchain/chain.ts", + "symbol_name": "Chain.isGenesis", + "line_range": [ + 263, + 268 + ], + "centrality": 1 + }, + { + "uuid": "sym-e70e7db0a823a91830f5515e", + "level": "L3", + "label": "Chain.getLastBlock", + "file_path": "src/libs/blockchain/chain.ts", + "symbol_name": "Chain.getLastBlock", + "line_range": [ + 270, + 280 + ], + "centrality": 1 + }, + { + "uuid": "sym-5914e64d0b069cf170aa5576", + "level": "L3", + "label": "Chain.getOnlinePeersForLastThreeBlocks", + "file_path": "src/libs/blockchain/chain.ts", + "symbol_name": "Chain.getOnlinePeersForLastThreeBlocks", + "line_range": [ + 283, + 334 + ], + "centrality": 1 + }, + { + "uuid": "sym-36d98395c44ece7890fcce75", + "level": "L3", + "label": "Chain.insertBlock", + "file_path": "src/libs/blockchain/chain.ts", + "symbol_name": "Chain.insertBlock", + "line_range": [ + 342, + 475 + ], + "centrality": 1 + }, + { + "uuid": "sym-c9875c12cbfb75e4c02e4966", + "level": "L3", + "label": "Chain.generateGenesisBlock", + "file_path": "src/libs/blockchain/chain.ts", + "symbol_name": "Chain.generateGenesisBlock", + "line_range": [ + 478, + 612 + ], + "centrality": 1 + }, + { + "uuid": "sym-f3eb9527e8be9c0e06a5c391", + "level": "L3", + "label": "Chain.generateGenesisBlocks", + "file_path": "src/libs/blockchain/chain.ts", + "symbol_name": "Chain.generateGenesisBlocks", + "line_range": [ + 615, + 619 + ], + "centrality": 1 + }, + { + "uuid": "sym-0d6db2c721dcdb828685335c", + "level": "L3", + "label": "Chain.getGenesisUniqueBlock", + "file_path": "src/libs/blockchain/chain.ts", + "symbol_name": "Chain.getGenesisUniqueBlock", + "line_range": [ + 622, + 624 + ], + "centrality": 1 + }, + { + "uuid": "sym-c0e0b82cf3d383210e3687ac", + "level": "L3", + "label": "Chain.insertTransaction", + "file_path": "src/libs/blockchain/chain.ts", + "symbol_name": "Chain.insertTransaction", + "line_range": [ + 627, + 649 + ], + "centrality": 1 + }, + { + "uuid": "sym-2ce5be0b32faebf63b290138", + "level": "L3", + "label": "Chain.insertTransactionsFromSync", + "file_path": "src/libs/blockchain/chain.ts", + "symbol_name": "Chain.insertTransactionsFromSync", + "line_range": [ + 652, + 664 + ], + "centrality": 1 + }, + { + "uuid": "sym-e6abead0194cd02f0495cc2a", + "level": "L3", + "label": "Chain.statusOf", + "file_path": "src/libs/blockchain/chain.ts", + "symbol_name": "Chain.statusOf", + "line_range": [ + 669, + 693 + ], + "centrality": 1 + }, + { + "uuid": "sym-20e212251cc34622794072f2", + "level": "L3", + "label": "Chain.statusHashAt", + "file_path": "src/libs/blockchain/chain.ts", + "symbol_name": "Chain.statusHashAt", + "line_range": [ + 695, + 703 + ], + "centrality": 1 + }, + { + "uuid": "sym-5aa3e772485150f93b70d58d", + "level": "L3", + "label": "Chain.pruneBlocksToGenesisBlock", + "file_path": "src/libs/blockchain/chain.ts", + "symbol_name": "Chain.pruneBlocksToGenesisBlock", + "line_range": [ + 706, + 709 + ], + "centrality": 1 + }, + { + "uuid": "sym-0675df5dd09d0c94ec327bd0", + "level": "L3", + "label": "Chain.nukeGenesis", + "file_path": "src/libs/blockchain/chain.ts", + "symbol_name": "Chain.nukeGenesis", + "line_range": [ + 711, + 714 + ], + "centrality": 1 + }, + { + "uuid": "sym-44b266c5d9c712e8283c7e0a", + "level": "L3", + "label": "Chain.updateGenesisTimestamp", + "file_path": "src/libs/blockchain/chain.ts", + "symbol_name": "Chain.updateGenesisTimestamp", + "line_range": [ + 716, + 727 + ], + "centrality": 1 + }, + { + "uuid": "sym-00e4d2471550dbf3aeb68901", + "level": "L2", + "label": "Chain", + "file_path": "src/libs/blockchain/chain.ts", + "symbol_name": "Chain", + "line_range": [ + 42, + 728 + ], + "centrality": 35 + }, + { + "uuid": "sym-38c603195178db449d516fac", + "level": "L3", + "label": "OperationsRegistry::api", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": "OperationsRegistry::api", + "line_range": [ + 76, + 104 + ], + "centrality": 1 + }, + { + "uuid": "sym-dc57bdd896327ec1e9ace624", + "level": "L3", + "label": "OperationsRegistry.add", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": "OperationsRegistry.add", + "line_range": [ + 87, + 98 + ], + "centrality": 1 + }, + { + "uuid": "sym-5b8a041e0679bdedd910d034", + "level": "L3", + "label": "OperationsRegistry.get", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": "OperationsRegistry.get", + "line_range": [ + 101, + 103 + ], + "centrality": 1 + }, + { + "uuid": "sym-6ee2446f641e808bde4e7235", + "level": "L2", + "label": "OperationsRegistry", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": "OperationsRegistry", + "line_range": [ + 76, + 104 + ], + "centrality": 4 + }, + { + "uuid": "sym-c5f31d9588601c7bab55a778", + "level": "L3", + "label": "AccountParams::api", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": "AccountParams::api", + "line_range": [ + 120, + 126 + ], + "centrality": 1 + }, + { + "uuid": "sym-e26838f941e0e2ede79144b1", + "level": "L2", + "label": "AccountParams", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": "AccountParams", + "line_range": [ + 120, + 126 + ], + "centrality": 2 + }, + { + "uuid": "sym-9facbddf56f375064f7a6f13", + "level": "L3", + "label": "GCR::api", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": "GCR::api", + "line_range": [ + 148, + 1435 + ], + "centrality": 1 + }, + { + "uuid": "sym-e40519bd11de5db85a5cb89d", + "level": "L3", + "label": "GCR.getInstance", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": "GCR.getInstance", + "line_range": [ + 157, + 162 + ], + "centrality": 1 + }, + { + "uuid": "sym-e7dfd5110b562e97bbacd645", + "level": "L3", + "label": "GCR.executeOperations", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": "GCR.executeOperations", + "line_range": [ + 167, + 170 + ], + "centrality": 1 + }, + { + "uuid": "sym-46c88a0a592f6967e7590a25", + "level": "L3", + "label": "GCR.getGCRStatusNativeTable", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": "GCR.getGCRStatusNativeTable", + "line_range": [ + 172, + 178 + ], + "centrality": 1 + }, + { + "uuid": "sym-79addca49dd8649fdbf169e0", + "level": "L3", + "label": "GCR.getGCRStatusPropertiesTable", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": "GCR.getGCRStatusPropertiesTable", + "line_range": [ + 180, + 188 + ], + "centrality": 1 + }, + { + "uuid": "sym-d5490f6681fcd2db391197c1", + "level": "L3", + "label": "GCR.getGCRNativeFor", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": "GCR.getGCRNativeFor", + "line_range": [ + 190, + 198 + ], + "centrality": 1 + }, + { + "uuid": "sym-71e6bd4c4b0b02a86349faca", + "level": "L3", + "label": "GCR.getGCRPropertiesFor", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": "GCR.getGCRPropertiesFor", + "line_range": [ + 200, + 213 + ], + "centrality": 1 + }, + { + "uuid": "sym-33d96de548fdd8cbeb509c35", + "level": "L3", + "label": "GCR.getGCRNativeBalance", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": "GCR.getGCRNativeBalance", + "line_range": [ + 217, + 233 + ], + "centrality": 1 + }, + { + "uuid": "sym-6aaff080377fc70f4d63df08", + "level": "L3", + "label": "GCR.getGCRTokenBalance", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": "GCR.getGCRTokenBalance", + "line_range": [ + 235, + 252 + ], + "centrality": 1 + }, + { + "uuid": "sym-2debecab24f2b4a86f852c86", + "level": "L3", + "label": "GCR.getGCRNFTBalance", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": "GCR.getGCRNFTBalance", + "line_range": [ + 254, + 271 + ], + "centrality": 1 + }, + { + "uuid": "sym-58aa0f8f51351fe7591fa958", + "level": "L3", + "label": "GCR.getGCRLastBlockBaseGas", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": "GCR.getGCRLastBlockBaseGas", + "line_range": [ + 273, + 278 + ], + "centrality": 1 + }, + { + "uuid": "sym-d626f382c8dc9af8ff69319d", + "level": "L3", + "label": "GCR.getGCRChainProperties", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": "GCR.getGCRChainProperties", + "line_range": [ + 283, + 299 + ], + "centrality": 1 + }, + { + "uuid": "sym-9e475c95e17f39691c4974b4", + "level": "L3", + "label": "GCR.getGCRHashedStakes", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": "GCR.getGCRHashedStakes", + "line_range": [ + 304, + 330 + ], + "centrality": 1 + }, + { + "uuid": "sym-c2708b5bd2aec74c2b5a2047", + "level": "L3", + "label": "GCR.getGCRValidatorsAtBlock", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": "GCR.getGCRValidatorsAtBlock", + "line_range": [ + 333, + 361 + ], + "centrality": 1 + }, + { + "uuid": "sym-8c622b66d95fc98d1e9153c6", + "level": "L3", + "label": "GCR.getGCRValidatorStatus", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": "GCR.getGCRValidatorStatus", + "line_range": [ + 365, + 391 + ], + "centrality": 1 + }, + { + "uuid": "sym-71219d9d011df90af21998ce", + "level": "L3", + "label": "GCR.addToGCRXM", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": "GCR.addToGCRXM", + "line_range": [ + 399, + 444 + ], + "centrality": 1 + }, + { + "uuid": "sym-b3c9530fe6bc8214a0c89a12", + "level": "L3", + "label": "GCR.addToGCRWeb2", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": "GCR.addToGCRWeb2", + "line_range": [ + 447, + 493 + ], + "centrality": 1 + }, + { + "uuid": "sym-1c40d34e39b9c81e9db2fb4d", + "level": "L3", + "label": "GCR.addToGCRIMPData", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": "GCR.addToGCRIMPData", + "line_range": [ + 496, + 509 + ], + "centrality": 1 + }, + { + "uuid": "sym-2e345d314823f39a48dd8f08", + "level": "L3", + "label": "GCR.setGCRNativeBalance", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": "GCR.setGCRNativeBalance", + "line_range": [ + 511, + 575 + ], + "centrality": 1 + }, + { + "uuid": "sym-83027ebbdbde9ac6fbde981f", + "level": "L3", + "label": "GCR.getAccountByTwitterUsername", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": "GCR.getAccountByTwitterUsername", + "line_range": [ + 577, + 608 + ], + "centrality": 1 + }, + { + "uuid": "sym-af61311de9bd1fdf4fd2d6b1", + "level": "L3", + "label": "GCR.getAccountByIdentity", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": "GCR.getAccountByIdentity", + "line_range": [ + 609, + 679 + ], + "centrality": 1 + }, + { + "uuid": "sym-5cb1d1e9703f8d0bc245e88c", + "level": "L3", + "label": "GCR.getCampaignData", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": "GCR.getCampaignData", + "line_range": [ + 714, + 806 + ], + "centrality": 1 + }, + { + "uuid": "sym-092836808af7c49bfd955197", + "level": "L3", + "label": "GCR.getAddressesByWeb2Usernames", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": "GCR.getAddressesByWeb2Usernames", + "line_range": [ + 808, + 877 + ], + "centrality": 1 + }, + { + "uuid": "sym-fca070294aa37d9e0f563512", + "level": "L3", + "label": "GCR.getAddressesByNativeAddresses", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": "GCR.getAddressesByNativeAddresses", + "line_range": [ + 879, + 904 + ], + "centrality": 1 + }, + { + "uuid": "sym-072403f79fd59ab5fd6649f5", + "level": "L3", + "label": "GCR.getAddressesByXmAccounts", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": "GCR.getAddressesByXmAccounts", + "line_range": [ + 906, + 1026 + ], + "centrality": 1 + }, + { + "uuid": "sym-ce7e617516b8387a1aebc005", + "level": "L3", + "label": "GCR.createAwardPointsTransaction", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": "GCR.createAwardPointsTransaction", + "line_range": [ + 1033, + 1138 + ], + "centrality": 1 + }, + { + "uuid": "sym-85c3a202917ef7026c598fdc", + "level": "L3", + "label": "GCR.getTopAccountsByPoints", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": "GCR.getTopAccountsByPoints", + "line_range": [ + 1145, + 1213 + ], + "centrality": 1 + }, + { + "uuid": "sym-5f6e92560d939affa395fc90", + "level": "L3", + "label": "GCR.awardPoints", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": "GCR.awardPoints", + "line_range": [ + 1219, + 1402 + ], + "centrality": 1 + }, + { + "uuid": "sym-18f330aab1779d66eb306b08", + "level": "L2", + "label": "GCR", + "file_path": "src/libs/blockchain/gcr/gcr.ts", + "symbol_name": "GCR", + "line_range": [ + 148, + 1435 + ], + "centrality": 29 + }, + { + "uuid": "sym-e5cfd57efcf98523e19e1b24", + "level": "L3", + "label": "GCRBalanceRoutines::api", + "file_path": "src/libs/blockchain/gcr/gcr_routines/GCRBalanceRoutines.ts", + "symbol_name": "GCRBalanceRoutines::api", + "line_range": [ + 9, + 91 + ], + "centrality": 1 + }, + { + "uuid": "sym-c9e0be9fb331c15638c40e0f", + "level": "L3", + "label": "GCRBalanceRoutines.apply", + "file_path": "src/libs/blockchain/gcr/gcr_routines/GCRBalanceRoutines.ts", + "symbol_name": "GCRBalanceRoutines.apply", + "line_range": [ + 10, + 90 + ], + "centrality": 1 + }, + { + "uuid": "sym-4cf081c8a0e72521c880cd6f", + "level": "L2", + "label": "GCRBalanceRoutines", + "file_path": "src/libs/blockchain/gcr/gcr_routines/GCRBalanceRoutines.ts", + "symbol_name": "GCRBalanceRoutines", + "line_range": [ + 9, + 91 + ], + "centrality": 3 + }, + { + "uuid": "sym-2366b9c6fa0a3077410d401b", + "level": "L3", + "label": "GCRIdentityRoutines::api", + "file_path": "src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts", + "symbol_name": "GCRIdentityRoutines::api", + "line_range": [ + 37, + 1760 + ], + "centrality": 1 + }, + { + "uuid": "sym-4aafd6328a7adcebef014576", + "level": "L3", + "label": "GCRIdentityRoutines.applyXmIdentityAdd", + "file_path": "src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts", + "symbol_name": "GCRIdentityRoutines.applyXmIdentityAdd", + "line_range": [ + 39, + 131 + ], + "centrality": 1 + }, + { + "uuid": "sym-22c7330c7c1a06c23dc4e1f3", + "level": "L3", + "label": "GCRIdentityRoutines.applyXmIdentityRemove", + "file_path": "src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts", + "symbol_name": "GCRIdentityRoutines.applyXmIdentityRemove", + "line_range": [ + 133, + 201 + ], + "centrality": 1 + }, + { + "uuid": "sym-92423687c06f0129bca83956", + "level": "L3", + "label": "GCRIdentityRoutines.applyWeb2IdentityAdd", + "file_path": "src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts", + "symbol_name": "GCRIdentityRoutines.applyWeb2IdentityAdd", + "line_range": [ + 204, + 354 + ], + "centrality": 1 + }, + { + "uuid": "sym-197d1722f57cdf3a40c2ab0a", + "level": "L3", + "label": "GCRIdentityRoutines.applyWeb2IdentityRemove", + "file_path": "src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts", + "symbol_name": "GCRIdentityRoutines.applyWeb2IdentityRemove", + "line_range": [ + 356, + 421 + ], + "centrality": 1 + }, + { + "uuid": "sym-c1c65f4dc014c86b200864ee", + "level": "L3", + "label": "GCRIdentityRoutines.applyPqcIdentityAdd", + "file_path": "src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts", + "symbol_name": "GCRIdentityRoutines.applyPqcIdentityAdd", + "line_range": [ + 424, + 479 + ], + "centrality": 1 + }, + { + "uuid": "sym-4f027c742788729961e93bf3", + "level": "L3", + "label": "GCRIdentityRoutines.applyPqcIdentityRemove", + "file_path": "src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts", + "symbol_name": "GCRIdentityRoutines.applyPqcIdentityRemove", + "line_range": [ + 481, + 556 + ], + "centrality": 1 + }, + { + "uuid": "sym-bff0ecde2776dec95ee3c547", + "level": "L3", + "label": "GCRIdentityRoutines.applyUdIdentityAdd", + "file_path": "src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts", + "symbol_name": "GCRIdentityRoutines.applyUdIdentityAdd", + "line_range": [ + 559, + 660 + ], + "centrality": 1 + }, + { + "uuid": "sym-8c05083af24170fddc969ba7", + "level": "L3", + "label": "GCRIdentityRoutines.applyUdIdentityRemove", + "file_path": "src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts", + "symbol_name": "GCRIdentityRoutines.applyUdIdentityRemove", + "line_range": [ + 662, + 712 + ], + "centrality": 1 + }, + { + "uuid": "sym-d8f944d79e3dc0016610f86f", + "level": "L3", + "label": "GCRIdentityRoutines.applyAwardPoints", + "file_path": "src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts", + "symbol_name": "GCRIdentityRoutines.applyAwardPoints", + "line_range": [ + 714, + 740 + ], + "centrality": 1 + }, + { + "uuid": "sym-edfadc288a1910878e5c329b", + "level": "L3", + "label": "GCRIdentityRoutines.applyAwardPointsRollback", + "file_path": "src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts", + "symbol_name": "GCRIdentityRoutines.applyAwardPointsRollback", + "line_range": [ + 742, + 769 + ], + "centrality": 1 + }, + { + "uuid": "sym-346648c4e9d12febf4429bca", + "level": "L3", + "label": "GCRIdentityRoutines.applyZkCommitmentAdd", + "file_path": "src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts", + "symbol_name": "GCRIdentityRoutines.applyZkCommitmentAdd", + "line_range": [ + 777, + 876 + ], + "centrality": 1 + }, + { + "uuid": "sym-2fe54b5d30a79b4770f2eb01", + "level": "L3", + "label": "GCRIdentityRoutines.applyZkAttestationAdd", + "file_path": "src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts", + "symbol_name": "GCRIdentityRoutines.applyZkAttestationAdd", + "line_range": [ + 882, + 1046 + ], + "centrality": 1 + }, + { + "uuid": "sym-5a6c9940cb34d31053bf3690", + "level": "L3", + "label": "GCRIdentityRoutines.apply", + "file_path": "src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts", + "symbol_name": "GCRIdentityRoutines.apply", + "line_range": [ + 1048, + 1199 + ], + "centrality": 1 + }, + { + "uuid": "sym-b9f92856c72f6227bbc63082", + "level": "L3", + "label": "GCRIdentityRoutines.applyNomisIdentityUpsert", + "file_path": "src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts", + "symbol_name": "GCRIdentityRoutines.applyNomisIdentityUpsert", + "line_range": [ + 1302, + 1379 + ], + "centrality": 1 + }, + { + "uuid": "sym-265b48bf8b8cdc9d09019aa2", + "level": "L3", + "label": "GCRIdentityRoutines.applyNomisIdentityRemove", + "file_path": "src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts", + "symbol_name": "GCRIdentityRoutines.applyNomisIdentityRemove", + "line_range": [ + 1381, + 1443 + ], + "centrality": 1 + }, + { + "uuid": "sym-73c8ae8986354a28b97fbf4c", + "level": "L3", + "label": "GCRIdentityRoutines.applyTLSNIdentityAdd", + "file_path": "src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts", + "symbol_name": "GCRIdentityRoutines.applyTLSNIdentityAdd", + "line_range": [ + 1465, + 1674 + ], + "centrality": 1 + }, + { + "uuid": "sym-b5cf3e2f5dc01ee8991f324a", + "level": "L3", + "label": "GCRIdentityRoutines.applyTLSNIdentityRemove", + "file_path": "src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts", + "symbol_name": "GCRIdentityRoutines.applyTLSNIdentityRemove", + "line_range": [ + 1681, + 1759 + ], + "centrality": 1 + }, + { + "uuid": "sym-d9261695c20f2db1c1c7a30d", + "level": "L2", + "label": "GCRIdentityRoutines", + "file_path": "src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts", + "symbol_name": "GCRIdentityRoutines", + "line_range": [ + 37, + 1760 + ], + "centrality": 20 + }, + { + "uuid": "sym-205554026dce7da322f2ba6b", + "level": "L3", + "label": "GCRNonceRoutines::api", + "file_path": "src/libs/blockchain/gcr/gcr_routines/GCRNonceRoutines.ts", + "symbol_name": "GCRNonceRoutines::api", + "line_range": [ + 8, + 66 + ], + "centrality": 1 + }, + { + "uuid": "sym-65c1018c321675804e2e81bb", + "level": "L3", + "label": "GCRNonceRoutines.apply", + "file_path": "src/libs/blockchain/gcr/gcr_routines/GCRNonceRoutines.ts", + "symbol_name": "GCRNonceRoutines.apply", + "line_range": [ + 9, + 65 + ], + "centrality": 1 + }, + { + "uuid": "sym-5eb556c7155bbf9a5c0934b6", + "level": "L2", + "label": "GCRNonceRoutines", + "file_path": "src/libs/blockchain/gcr/gcr_routines/GCRNonceRoutines.ts", + "symbol_name": "GCRNonceRoutines", + "line_range": [ + 8, + 66 + ], + "centrality": 3 + }, + { + "uuid": "sym-8ba03001bd95dd23e0d18bd3", + "level": "L3", + "label": "GCRTLSNotaryRoutines::api", + "file_path": "src/libs/blockchain/gcr/gcr_routines/GCRTLSNotaryRoutines.ts", + "symbol_name": "GCRTLSNotaryRoutines::api", + "line_range": [ + 15, + 130 + ], + "centrality": 1 + }, + { + "uuid": "sym-c466293ba66477debca41064", + "level": "L3", + "label": "GCRTLSNotaryRoutines.apply", + "file_path": "src/libs/blockchain/gcr/gcr_routines/GCRTLSNotaryRoutines.ts", + "symbol_name": "GCRTLSNotaryRoutines.apply", + "line_range": [ + 22, + 93 + ], + "centrality": 1 + }, + { + "uuid": "sym-8bc3042db4e035701f845913", + "level": "L3", + "label": "GCRTLSNotaryRoutines.getProof", + "file_path": "src/libs/blockchain/gcr/gcr_routines/GCRTLSNotaryRoutines.ts", + "symbol_name": "GCRTLSNotaryRoutines.getProof", + "line_range": [ + 100, + 105 + ], + "centrality": 1 + }, + { + "uuid": "sym-b3f2856c4eddd3ad35183479", + "level": "L3", + "label": "GCRTLSNotaryRoutines.getProofsByOwner", + "file_path": "src/libs/blockchain/gcr/gcr_routines/GCRTLSNotaryRoutines.ts", + "symbol_name": "GCRTLSNotaryRoutines.getProofsByOwner", + "line_range": [ + 112, + 117 + ], + "centrality": 1 + }, + { + "uuid": "sym-60b1dcfccd7d912d62f07c4c", + "level": "L3", + "label": "GCRTLSNotaryRoutines.getProofsByDomain", + "file_path": "src/libs/blockchain/gcr/gcr_routines/GCRTLSNotaryRoutines.ts", + "symbol_name": "GCRTLSNotaryRoutines.getProofsByDomain", + "line_range": [ + 124, + 129 + ], + "centrality": 1 + }, + { + "uuid": "sym-269e4fbb61c177255aec3579", + "level": "L2", + "label": "GCRTLSNotaryRoutines", + "file_path": "src/libs/blockchain/gcr/gcr_routines/GCRTLSNotaryRoutines.ts", + "symbol_name": "GCRTLSNotaryRoutines", + "line_range": [ + 15, + 130 + ], + "centrality": 6 + }, + { + "uuid": "sym-1cc5ed15187d2a43e127dda5", + "level": "L3", + "label": "IncentiveManager::api", + "file_path": "src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts", + "symbol_name": "IncentiveManager::api", + "line_range": [ + 9, + 209 + ], + "centrality": 1 + }, + { + "uuid": "sym-b46342d64e2d554a6c0b65c8", + "level": "L3", + "label": "IncentiveManager.walletLinked", + "file_path": "src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts", + "symbol_name": "IncentiveManager.walletLinked", + "line_range": [ + 14, + 26 + ], + "centrality": 1 + }, + { + "uuid": "sym-c495996d00ba846d0fe68da8", + "level": "L3", + "label": "IncentiveManager.twitterLinked", + "file_path": "src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts", + "symbol_name": "IncentiveManager.twitterLinked", + "line_range": [ + 31, + 41 + ], + "centrality": 1 + }, + { + "uuid": "sym-34935ef1df53fbbf8e5b3d33", + "level": "L3", + "label": "IncentiveManager.walletUnlinked", + "file_path": "src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts", + "symbol_name": "IncentiveManager.walletUnlinked", + "line_range": [ + 46, + 56 + ], + "centrality": 1 + }, + { + "uuid": "sym-750a05a8d88d303c2cdb0313", + "level": "L3", + "label": "IncentiveManager.twitterUnlinked", + "file_path": "src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts", + "symbol_name": "IncentiveManager.twitterUnlinked", + "line_range": [ + 61, + 63 + ], + "centrality": 1 + }, + { + "uuid": "sym-c26fe2934565e589fa3d57da", + "level": "L3", + "label": "IncentiveManager.githubLinked", + "file_path": "src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts", + "symbol_name": "IncentiveManager.githubLinked", + "line_range": [ + 68, + 78 + ], + "centrality": 1 + }, + { + "uuid": "sym-871a354ffe05d3ed57c9cf48", + "level": "L3", + "label": "IncentiveManager.githubUnlinked", + "file_path": "src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts", + "symbol_name": "IncentiveManager.githubUnlinked", + "line_range": [ + 83, + 88 + ], + "centrality": 1 + }, + { + "uuid": "sym-c7515a5b3bc3b3ae64b20549", + "level": "L3", + "label": "IncentiveManager.telegramLinked", + "file_path": "src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts", + "symbol_name": "IncentiveManager.telegramLinked", + "line_range": [ + 93, + 105 + ], + "centrality": 1 + }, + { + "uuid": "sym-f4182f20b12ea5995aa8f2b3", + "level": "L3", + "label": "IncentiveManager.telegramTLSNLinked", + "file_path": "src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts", + "symbol_name": "IncentiveManager.telegramTLSNLinked", + "line_range": [ + 110, + 120 + ], + "centrality": 1 + }, + { + "uuid": "sym-a9f646772777a0cb950cc16a", + "level": "L3", + "label": "IncentiveManager.telegramUnlinked", + "file_path": "src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts", + "symbol_name": "IncentiveManager.telegramUnlinked", + "line_range": [ + 125, + 127 + ], + "centrality": 1 + }, + { + "uuid": "sym-9ccdee42c05c560def083e01", + "level": "L3", + "label": "IncentiveManager.getPoints", + "file_path": "src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts", + "symbol_name": "IncentiveManager.getPoints", + "line_range": [ + 132, + 134 + ], + "centrality": 1 + }, + { + "uuid": "sym-a71913c481b711116ffa657b", + "level": "L3", + "label": "IncentiveManager.discordLinked", + "file_path": "src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts", + "symbol_name": "IncentiveManager.discordLinked", + "line_range": [ + 139, + 144 + ], + "centrality": 1 + }, + { + "uuid": "sym-aeb49a4780bd3f40ca3cece4", + "level": "L3", + "label": "IncentiveManager.discordUnlinked", + "file_path": "src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts", + "symbol_name": "IncentiveManager.discordUnlinked", + "line_range": [ + 149, + 151 + ], + "centrality": 1 + }, + { + "uuid": "sym-71784c490210b3b11901f352", + "level": "L3", + "label": "IncentiveManager.udDomainLinked", + "file_path": "src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts", + "symbol_name": "IncentiveManager.udDomainLinked", + "line_range": [ + 156, + 168 + ], + "centrality": 1 + }, + { + "uuid": "sym-a0b60f97b33a82757e742ac5", + "level": "L3", + "label": "IncentiveManager.udDomainUnlinked", + "file_path": "src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts", + "symbol_name": "IncentiveManager.udDomainUnlinked", + "line_range": [ + 173, + 178 + ], + "centrality": 1 + }, + { + "uuid": "sym-d418522a11310eb0211f7dbf", + "level": "L3", + "label": "IncentiveManager.nomisLinked", + "file_path": "src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts", + "symbol_name": "IncentiveManager.nomisLinked", + "line_range": [ + 183, + 195 + ], + "centrality": 1 + }, + { + "uuid": "sym-ca42b4774377bb461e4e6398", + "level": "L3", + "label": "IncentiveManager.nomisUnlinked", + "file_path": "src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts", + "symbol_name": "IncentiveManager.nomisUnlinked", + "line_range": [ + 200, + 208 + ], + "centrality": 1 + }, + { + "uuid": "sym-605d3a415b8b3b5bf34196c3", + "level": "L2", + "label": "IncentiveManager", + "file_path": "src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts", + "symbol_name": "IncentiveManager", + "line_range": [ + 9, + 209 + ], + "centrality": 18 + }, + { + "uuid": "sym-68bcd93b16922175db1b5cbf", + "level": "L3", + "label": "applyGCROperation", + "file_path": "src/libs/blockchain/gcr/gcr_routines/applyGCROperation.ts", + "symbol_name": "applyGCROperation", + "line_range": [ + 13, + 35 + ], + "centrality": 1 + }, + { + "uuid": "sym-aff919f6ec93563946a19be3", + "level": "L3", + "label": "assignWeb2", + "file_path": "src/libs/blockchain/gcr/gcr_routines/assignWeb2.ts", + "symbol_name": "assignWeb2", + "line_range": [ + 4, + 9 + ], + "centrality": 1 + }, + { + "uuid": "sym-768b3d2e609c7a7d9e7e123f", + "level": "L3", + "label": "assignXM", + "file_path": "src/libs/blockchain/gcr/gcr_routines/assignXM.ts", + "symbol_name": "assignXM", + "line_range": [ + 5, + 8 + ], + "centrality": 1 + }, + { + "uuid": "sym-fcae6dca65ab92ce6e8c43b0", + "level": "L3", + "label": "ensureGCRForUser", + "file_path": "src/libs/blockchain/gcr/gcr_routines/ensureGCRForUser.ts", + "symbol_name": "ensureGCRForUser", + "line_range": [ + 8, + 33 + ], + "centrality": 7 + }, + { + "uuid": "sym-791e472cf07c678ab89547f5", + "level": "L3", + "label": "getJSONBValue", + "file_path": "src/libs/blockchain/gcr/gcr_routines/gcrJSONBHandler.ts", + "symbol_name": "getJSONBValue", + "line_range": [ + 26, + 44 + ], + "centrality": 1 + }, + { + "uuid": "sym-2476c69d26521df4fa998292", + "level": "L3", + "label": "updateJSONBValue", + "file_path": "src/libs/blockchain/gcr/gcr_routines/gcrJSONBHandler.ts", + "symbol_name": "updateJSONBValue", + "line_range": [ + 72, + 96 + ], + "centrality": 1 + }, + { + "uuid": "sym-89d3088a75cd27ac95940da2", + "level": "L3", + "label": "GCRStateSaverHelper::api", + "file_path": "src/libs/blockchain/gcr/gcr_routines/gcrStateSaverHelper.ts", + "symbol_name": "GCRStateSaverHelper::api", + "line_range": [ + 17, + 52 + ], + "centrality": 1 + }, + { + "uuid": "sym-882a6fe5739f28b6209f2a29", + "level": "L3", + "label": "GCRStateSaverHelper.getLastConsenusStateHash", + "file_path": "src/libs/blockchain/gcr/gcr_routines/gcrStateSaverHelper.ts", + "symbol_name": "GCRStateSaverHelper.getLastConsenusStateHash", + "line_range": [ + 20, + 22 + ], + "centrality": 1 + }, + { + "uuid": "sym-04c11175ee7e0898d4e3e531", + "level": "L3", + "label": "GCRStateSaverHelper.updateGCRTracker", + "file_path": "src/libs/blockchain/gcr/gcr_routines/gcrStateSaverHelper.ts", + "symbol_name": "GCRStateSaverHelper.updateGCRTracker", + "line_range": [ + 25, + 51 + ], + "centrality": 1 + }, + { + "uuid": "sym-f1ad2eeaf85b22aebcfd1d0b", + "level": "L2", + "label": "GCRStateSaverHelper", + "file_path": "src/libs/blockchain/gcr/gcr_routines/gcrStateSaverHelper.ts", + "symbol_name": "GCRStateSaverHelper", + "line_range": [ + 17, + 52 + ], + "centrality": 4 + }, + { + "uuid": "sym-34489faeacbf50c7bc09dbf1", + "level": "L3", + "label": "HandleNativeOperations::api", + "file_path": "src/libs/blockchain/gcr/gcr_routines/handleNativeOperations.ts", + "symbol_name": "HandleNativeOperations::api", + "line_range": [ + 14, + 160 + ], + "centrality": 1 + }, + { + "uuid": "sym-382b32b7744f4a1bcddc6aaa", + "level": "L3", + "label": "HandleNativeOperations.handle", + "file_path": "src/libs/blockchain/gcr/gcr_routines/handleNativeOperations.ts", + "symbol_name": "HandleNativeOperations.handle", + "line_range": [ + 15, + 159 + ], + "centrality": 1 + }, + { + "uuid": "sym-951698e6c9f720f735f0bfe3", + "level": "L2", + "label": "HandleNativeOperations", + "file_path": "src/libs/blockchain/gcr/gcr_routines/handleNativeOperations.ts", + "symbol_name": "HandleNativeOperations", + "line_range": [ + 14, + 160 + ], + "centrality": 6 + }, + { + "uuid": "sym-56ec447a61bf949ac32f434b", + "level": "L3", + "label": "hashPublicKeyTable", + "file_path": "src/libs/blockchain/gcr/gcr_routines/hashGCR.ts", + "symbol_name": "hashPublicKeyTable", + "line_range": [ + 22, + 36 + ], + "centrality": 2 + }, + { + "uuid": "sym-8ae7289bebb399343fb0af1e", + "level": "L3", + "label": "hashSubnetsTxsTable", + "file_path": "src/libs/blockchain/gcr/gcr_routines/hashGCR.ts", + "symbol_name": "hashSubnetsTxsTable", + "line_range": [ + 45, + 57 + ], + "centrality": 2 + }, + { + "uuid": "sym-c860224b0e2990892c904249", + "level": "L3", + "label": "hashTLSNotaryTable", + "file_path": "src/libs/blockchain/gcr/gcr_routines/hashGCR.ts", + "symbol_name": "hashTLSNotaryTable", + "line_range": [ + 66, + 89 + ], + "centrality": 2 + }, + { + "uuid": "sym-a09e4498f797e281ad451c42", + "level": "L3", + "label": "hashGCRTables", + "file_path": "src/libs/blockchain/gcr/gcr_routines/hashGCR.ts", + "symbol_name": "hashGCRTables", + "line_range": [ + 103, + 115 + ], + "centrality": 6 + }, + { + "uuid": "sym-27459666e0f28d8c21b10cf3", + "level": "L3", + "label": "insertGCRHash", + "file_path": "src/libs/blockchain/gcr/gcr_routines/hashGCR.ts", + "symbol_name": "insertGCRHash", + "line_range": [ + 124, + 139 + ], + "centrality": 2 + }, + { + "uuid": "sym-f5e1dae1fda06177bf332cd5", + "level": "L3", + "label": "IdentityManager::api", + "file_path": "src/libs/blockchain/gcr/gcr_routines/identityManager.ts", + "symbol_name": "IdentityManager::api", + "line_range": [ + 54, + 371 + ], + "centrality": 1 + }, + { + "uuid": "sym-250be326bd2cf87c0c3c55a3", + "level": "L3", + "label": "IdentityManager.inferIdentityFromWrite", + "file_path": "src/libs/blockchain/gcr/gcr_routines/identityManager.ts", + "symbol_name": "IdentityManager.inferIdentityFromWrite", + "line_range": [ + 58, + 63 + ], + "centrality": 1 + }, + { + "uuid": "sym-37d7e586ec06993e0e47be67", + "level": "L3", + "label": "IdentityManager.filterConnections", + "file_path": "src/libs/blockchain/gcr/gcr_routines/identityManager.ts", + "symbol_name": "IdentityManager.filterConnections", + "line_range": [ + 71, + 174 + ], + "centrality": 1 + }, + { + "uuid": "sym-624aefaae7c50cc48d1d7856", + "level": "L3", + "label": "IdentityManager.verifyPayload", + "file_path": "src/libs/blockchain/gcr/gcr_routines/identityManager.ts", + "symbol_name": "IdentityManager.verifyPayload", + "line_range": [ + 183, + 250 + ], + "centrality": 1 + }, + { + "uuid": "sym-6453b4a51f77b0e33e0871f2", + "level": "L3", + "label": "IdentityManager.verifyPqcPayload", + "file_path": "src/libs/blockchain/gcr/gcr_routines/identityManager.ts", + "symbol_name": "IdentityManager.verifyPqcPayload", + "line_range": [ + 260, + 288 + ], + "centrality": 1 + }, + { + "uuid": "sym-be8ac4ac4c6f736c62f19940", + "level": "L3", + "label": "IdentityManager.verifyNomisPayload", + "file_path": "src/libs/blockchain/gcr/gcr_routines/identityManager.ts", + "symbol_name": "IdentityManager.verifyNomisPayload", + "line_range": [ + 297, + 312 + ], + "centrality": 1 + }, + { + "uuid": "sym-ce51cedbbc722d871e574c34", + "level": "L3", + "label": "IdentityManager.getXmIdentities", + "file_path": "src/libs/blockchain/gcr/gcr_routines/identityManager.ts", + "symbol_name": "IdentityManager.getXmIdentities", + "line_range": [ + 322, + 333 + ], + "centrality": 1 + }, + { + "uuid": "sym-eb769a327d251102c9539621", + "level": "L3", + "label": "IdentityManager.getWeb2Identities", + "file_path": "src/libs/blockchain/gcr/gcr_routines/identityManager.ts", + "symbol_name": "IdentityManager.getWeb2Identities", + "line_range": [ + 341, + 344 + ], + "centrality": 1 + }, + { + "uuid": "sym-ed231c11ba266752dca686de", + "level": "L3", + "label": "IdentityManager.getPQCIdentity", + "file_path": "src/libs/blockchain/gcr/gcr_routines/identityManager.ts", + "symbol_name": "IdentityManager.getPQCIdentity", + "line_range": [ + 346, + 348 + ], + "centrality": 1 + }, + { + "uuid": "sym-621907ad30456ba7db233704", + "level": "L3", + "label": "IdentityManager.getIdentities", + "file_path": "src/libs/blockchain/gcr/gcr_routines/identityManager.ts", + "symbol_name": "IdentityManager.getIdentities", + "line_range": [ + 356, + 366 + ], + "centrality": 1 + }, + { + "uuid": "sym-c65207b5ded1f6d2eb1bf90d", + "level": "L3", + "label": "IdentityManager.getUDIdentities", + "file_path": "src/libs/blockchain/gcr/gcr_routines/identityManager.ts", + "symbol_name": "IdentityManager.getUDIdentities", + "line_range": [ + 368, + 370 + ], + "centrality": 1 + }, + { + "uuid": "sym-2fb8ea47d77841cb1c9c723d", + "level": "L2", + "label": "IdentityManager", + "file_path": "src/libs/blockchain/gcr/gcr_routines/identityManager.ts", + "symbol_name": "IdentityManager", + "line_range": [ + 54, + 371 + ], + "centrality": 13 + }, + { + "uuid": "sym-8b770fac114c0bea3fceb66d", + "level": "L3", + "label": "default", + "file_path": "src/libs/blockchain/gcr/gcr_routines/index.ts", + "symbol_name": "default", + "line_range": [ + 13, + 13 + ], + "centrality": 1 + }, + { + "uuid": "sym-949988062e958db45bd9006c", + "level": "L3", + "label": "default", + "file_path": "src/libs/blockchain/gcr/gcr_routines/manageNative.ts", + "symbol_name": "default", + "line_range": [ + 95, + 95 + ], + "centrality": 1 + }, + { + "uuid": "sym-e55d97a832aabc5025e3f6b8", + "level": "L3", + "label": "registerIMPData", + "file_path": "src/libs/blockchain/gcr/gcr_routines/registerIMPData.ts", + "symbol_name": "registerIMPData", + "line_range": [ + 10, + 40 + ], + "centrality": 1 + }, + { + "uuid": "sym-c1ce5d44ff631ef5243e34d8", + "level": "L3", + "label": "detectSignatureType", + "file_path": "src/libs/blockchain/gcr/gcr_routines/signatureDetector.ts", + "symbol_name": "detectSignatureType", + "line_range": [ + 23, + 46 + ], + "centrality": 4 + }, + { + "uuid": "sym-e137071690ac87c5a393b765", + "level": "L3", + "label": "validateAddressType", + "file_path": "src/libs/blockchain/gcr/gcr_routines/signatureDetector.ts", + "symbol_name": "validateAddressType", + "line_range": [ + 59, + 65 + ], + "centrality": 2 + }, + { + "uuid": "sym-434133fb66b01eec771c868b", + "level": "L3", + "label": "isSignableAddress", + "file_path": "src/libs/blockchain/gcr/gcr_routines/signatureDetector.ts", + "symbol_name": "isSignableAddress", + "line_range": [ + 73, + 75 + ], + "centrality": 2 + }, + { + "uuid": "sym-4ceb05e530a44839153ae9e8", + "level": "L3", + "label": "txToGCROperation", + "file_path": "src/libs/blockchain/gcr/gcr_routines/txToGCROperation.ts", + "symbol_name": "txToGCROperation", + "line_range": [ + 17, + 37 + ], + "centrality": 1 + }, + { + "uuid": "sym-b0b72ec0c9b1eac0e797bc45", + "level": "L3", + "label": "UDIdentityManager::api", + "file_path": "src/libs/blockchain/gcr/gcr_routines/udIdentityManager.ts", + "symbol_name": "UDIdentityManager::api", + "line_range": [ + 64, + 698 + ], + "centrality": 1 + }, + { + "uuid": "sym-790b8d8a6e814aaf6a4e7c7d", + "level": "L3", + "label": "UDIdentityManager.resolveUDDomain", + "file_path": "src/libs/blockchain/gcr/gcr_routines/udIdentityManager.ts", + "symbol_name": "UDIdentityManager.resolveUDDomain", + "line_range": [ + 280, + 360 + ], + "centrality": 1 + }, + { + "uuid": "sym-8a9ddd5405a61cd9a4baf5d6", + "level": "L3", + "label": "UDIdentityManager.verifyPayload", + "file_path": "src/libs/blockchain/gcr/gcr_routines/udIdentityManager.ts", + "symbol_name": "UDIdentityManager.verifyPayload", + "line_range": [ + 374, + 539 + ], + "centrality": 1 + }, + { + "uuid": "sym-7df1dc85869fbbaf76a62503", + "level": "L3", + "label": "UDIdentityManager.checkOwnerLinkedWallets", + "file_path": "src/libs/blockchain/gcr/gcr_routines/udIdentityManager.ts", + "symbol_name": "UDIdentityManager.checkOwnerLinkedWallets", + "line_range": [ + 616, + 669 + ], + "centrality": 1 + }, + { + "uuid": "sym-74dbc4492d4bf45e8d689b5b", + "level": "L3", + "label": "UDIdentityManager.getUdIdentities", + "file_path": "src/libs/blockchain/gcr/gcr_routines/udIdentityManager.ts", + "symbol_name": "UDIdentityManager.getUdIdentities", + "line_range": [ + 677, + 681 + ], + "centrality": 1 + }, + { + "uuid": "sym-1854d72579a983ba0293a4d3", + "level": "L3", + "label": "UDIdentityManager.getIdentities", + "file_path": "src/libs/blockchain/gcr/gcr_routines/udIdentityManager.ts", + "symbol_name": "UDIdentityManager.getIdentities", + "line_range": [ + 690, + 697 + ], + "centrality": 1 + }, + { + "uuid": "sym-86dad8a3cc937e2681c558d1", + "level": "L2", + "label": "UDIdentityManager", + "file_path": "src/libs/blockchain/gcr/gcr_routines/udIdentityManager.ts", + "symbol_name": "UDIdentityManager", + "line_range": [ + 64, + 698 + ], + "centrality": 9 + }, + { + "uuid": "sym-7c8b1e597e24b16c3006ca81", + "level": "L3", + "label": "ResolverConfig::api", + "file_path": "src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts", + "symbol_name": "ResolverConfig::api", + "line_range": [ + 17, + 22 + ], + "centrality": 1 + }, + { + "uuid": "sym-ebadf897a746e8a865087841", + "level": "L2", + "label": "ResolverConfig", + "file_path": "src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts", + "symbol_name": "ResolverConfig", + "line_range": [ + 17, + 22 + ], + "centrality": 2 + }, + { + "uuid": "sym-5e11387ff92f6c4d914dc0a4", + "level": "L3", + "label": "RecordResult::api", + "file_path": "src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts", + "symbol_name": "RecordResult::api", + "line_range": [ + 27, + 36 + ], + "centrality": 1 + }, + { + "uuid": "sym-ee20da2e2f815cdc3b697b6e", + "level": "L2", + "label": "RecordResult", + "file_path": "src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts", + "symbol_name": "RecordResult", + "line_range": [ + 27, + 36 + ], + "centrality": 2 + }, + { + "uuid": "sym-3494444d4459b825581393ef", + "level": "L3", + "label": "DomainResolutionResult::api", + "file_path": "src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts", + "symbol_name": "DomainResolutionResult::api", + "line_range": [ + 41, + 58 + ], + "centrality": 1 + }, + { + "uuid": "sym-3a5a479984dc5cd0445c8e8e", + "level": "L2", + "label": "DomainResolutionResult", + "file_path": "src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts", + "symbol_name": "DomainResolutionResult", + "line_range": [ + 41, + 58 + ], + "centrality": 2 + }, + { + "uuid": "sym-869301cbf3cb641733e83260", + "level": "L3", + "label": "DomainNotFoundError::api", + "file_path": "src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts", + "symbol_name": "DomainNotFoundError::api", + "line_range": [ + 65, + 74 + ], + "centrality": 1 + }, + { + "uuid": "sym-f4fba0d8454b5e6491208b81", + "level": "L2", + "label": "DomainNotFoundError", + "file_path": "src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts", + "symbol_name": "DomainNotFoundError", + "line_range": [ + 65, + 74 + ], + "centrality": 2 + }, + { + "uuid": "sym-342fb500933a92e19d17cffe", + "level": "L3", + "label": "RecordNotFoundError::api", + "file_path": "src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts", + "symbol_name": "RecordNotFoundError::api", + "line_range": [ + 81, + 90 + ], + "centrality": 1 + }, + { + "uuid": "sym-e3db749d53d156363a30b86b", + "level": "L2", + "label": "RecordNotFoundError", + "file_path": "src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts", + "symbol_name": "RecordNotFoundError", + "line_range": [ + 81, + 90 + ], + "centrality": 2 + }, + { + "uuid": "sym-adf9d9496a3cfec4c94b94cd", + "level": "L3", + "label": "ConnectionError::api", + "file_path": "src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts", + "symbol_name": "ConnectionError::api", + "line_range": [ + 97, + 106 + ], + "centrality": 1 + }, + { + "uuid": "sym-16c80f6db3121ece6476e5d7", + "level": "L2", + "label": "ConnectionError", + "file_path": "src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts", + "symbol_name": "ConnectionError", + "line_range": [ + 97, + 106 + ], + "centrality": 2 + }, + { + "uuid": "sym-861f69933d806c3abd4e18b8", + "level": "L3", + "label": "SolanaDomainResolver::api", + "file_path": "src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts", + "symbol_name": "SolanaDomainResolver::api", + "line_range": [ + 146, + 759 + ], + "centrality": 1 + }, + { + "uuid": "sym-75ec46fc47366c9b781406cd", + "level": "L3", + "label": "SolanaDomainResolver.resolveRecord", + "file_path": "src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts", + "symbol_name": "SolanaDomainResolver.resolveRecord", + "line_range": [ + 422, + 480 + ], + "centrality": 1 + }, + { + "uuid": "sym-da76f11367328a93d87c800b", + "level": "L3", + "label": "SolanaDomainResolver.resolve", + "file_path": "src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts", + "symbol_name": "SolanaDomainResolver.resolve", + "line_range": [ + 513, + 620 + ], + "centrality": 1 + }, + { + "uuid": "sym-76104fafaed374671547faa6", + "level": "L3", + "label": "SolanaDomainResolver.resolveDomain", + "file_path": "src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts", + "symbol_name": "SolanaDomainResolver.resolveDomain", + "line_range": [ + 644, + 668 + ], + "centrality": 1 + }, + { + "uuid": "sym-91c078071cf3bd44fed43181", + "level": "L3", + "label": "SolanaDomainResolver.domainExists", + "file_path": "src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts", + "symbol_name": "SolanaDomainResolver.domainExists", + "line_range": [ + 692, + 703 + ], + "centrality": 1 + }, + { + "uuid": "sym-ae10579f5cd0544e81866e48", + "level": "L3", + "label": "SolanaDomainResolver.getDomainInfo", + "file_path": "src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts", + "symbol_name": "SolanaDomainResolver.getDomainInfo", + "line_range": [ + 725, + 758 + ], + "centrality": 1 + }, + { + "uuid": "sym-4f3ca06d30e0c5991ed7ee43", + "level": "L2", + "label": "SolanaDomainResolver", + "file_path": "src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts", + "symbol_name": "SolanaDomainResolver", + "line_range": [ + 146, + 759 + ], + "centrality": 7 + }, + { + "uuid": "sym-43d111e11c00d152f6d456d3", + "level": "L3", + "label": "GetNativeStatusOptions::api", + "file_path": "src/libs/blockchain/gcr/handleGCR.ts", + "symbol_name": "GetNativeStatusOptions::api", + "line_range": [ + 58, + 64 + ], + "centrality": 1 + }, + { + "uuid": "sym-b76986452634811c854b7bcd", + "level": "L2", + "label": "GetNativeStatusOptions", + "file_path": "src/libs/blockchain/gcr/handleGCR.ts", + "symbol_name": "GetNativeStatusOptions", + "line_range": [ + 58, + 64 + ], + "centrality": 2 + }, + { + "uuid": "sym-19c9fcac0f3773a6015cff76", + "level": "L3", + "label": "GetNativePropertiesOptions::api", + "file_path": "src/libs/blockchain/gcr/handleGCR.ts", + "symbol_name": "GetNativePropertiesOptions::api", + "line_range": [ + 66, + 72 + ], + "centrality": 1 + }, + { + "uuid": "sym-11ffa0ff4b9cbe0463fa3f26", + "level": "L2", + "label": "GetNativePropertiesOptions", + "file_path": "src/libs/blockchain/gcr/handleGCR.ts", + "symbol_name": "GetNativePropertiesOptions", + "line_range": [ + 66, + 72 + ], + "centrality": 2 + }, + { + "uuid": "sym-23c0251ed3d19e6d489193fd", + "level": "L3", + "label": "GetNativeSubnetsTxsOptions::api", + "file_path": "src/libs/blockchain/gcr/handleGCR.ts", + "symbol_name": "GetNativeSubnetsTxsOptions::api", + "line_range": [ + 74, + 76 + ], + "centrality": 1 + }, + { + "uuid": "sym-547a9804abe78ff64ea33519", + "level": "L2", + "label": "GetNativeSubnetsTxsOptions", + "file_path": "src/libs/blockchain/gcr/handleGCR.ts", + "symbol_name": "GetNativeSubnetsTxsOptions", + "line_range": [ + 74, + 76 + ], + "centrality": 2 + }, + { + "uuid": "sym-696e1561c1a2c5179fbe7b8c", + "level": "L3", + "label": "GCRResult::api", + "file_path": "src/libs/blockchain/gcr/handleGCR.ts", + "symbol_name": "GCRResult::api", + "line_range": [ + 78, + 82 + ], + "centrality": 1 + }, + { + "uuid": "sym-c287354ee92d5c615d89cc43", + "level": "L2", + "label": "GCRResult", + "file_path": "src/libs/blockchain/gcr/handleGCR.ts", + "symbol_name": "GCRResult", + "line_range": [ + 78, + 82 + ], + "centrality": 2 + }, + { + "uuid": "sym-23e295063ad4930534a984bc", + "level": "L3", + "label": "HandleGCR::api", + "file_path": "src/libs/blockchain/gcr/handleGCR.ts", + "symbol_name": "HandleGCR::api", + "line_range": [ + 85, + 621 + ], + "centrality": 1 + }, + { + "uuid": "sym-afa009c6b098d9d3d6e87a8f", + "level": "L3", + "label": "HandleGCR.getNativeStatus", + "file_path": "src/libs/blockchain/gcr/handleGCR.ts", + "symbol_name": "HandleGCR.getNativeStatus", + "line_range": [ + 88, + 144 + ], + "centrality": 1 + }, + { + "uuid": "sym-07c3526c86f89eb7b7bdf796", + "level": "L3", + "label": "HandleGCR.getNativeProperties", + "file_path": "src/libs/blockchain/gcr/handleGCR.ts", + "symbol_name": "HandleGCR.getNativeProperties", + "line_range": [ + 146, + 195 + ], + "centrality": 1 + }, + { + "uuid": "sym-7ead72cfe057bb368a414faf", + "level": "L3", + "label": "HandleGCR.getNativeSubnetsTxs", + "file_path": "src/libs/blockchain/gcr/handleGCR.ts", + "symbol_name": "HandleGCR.getNativeSubnetsTxs", + "line_range": [ + 197, + 228 + ], + "centrality": 1 + }, + { + "uuid": "sym-80ccf4dd54906ba3c0fef014", + "level": "L3", + "label": "HandleGCR.apply", + "file_path": "src/libs/blockchain/gcr/handleGCR.ts", + "symbol_name": "HandleGCR.apply", + "line_range": [ + 245, + 303 + ], + "centrality": 1 + }, + { + "uuid": "sym-ac3c393c58273c4f0ed0a42d", + "level": "L3", + "label": "HandleGCR.applyToTx", + "file_path": "src/libs/blockchain/gcr/handleGCR.ts", + "symbol_name": "HandleGCR.applyToTx", + "line_range": [ + 313, + 405 + ], + "centrality": 1 + }, + { + "uuid": "sym-2efee4d3250f8fd80bccd9cf", + "level": "L3", + "label": "HandleGCR.rollback", + "file_path": "src/libs/blockchain/gcr/handleGCR.ts", + "symbol_name": "HandleGCR.rollback", + "line_range": [ + 468, + 505 + ], + "centrality": 1 + }, + { + "uuid": "sym-96eda9bc4b46c54fa62b2965", + "level": "L2", + "label": "HandleGCR", + "file_path": "src/libs/blockchain/gcr/handleGCR.ts", + "symbol_name": "HandleGCR", + "line_range": [ + 85, + 621 + ], + "centrality": 10 + }, + { + "uuid": "sym-41baf1407ad0beab3507733a", + "level": "L3", + "label": "GCROperation::api", + "file_path": "src/libs/blockchain/gcr/types/GCROperations.ts", + "symbol_name": "GCROperation::api", + "line_range": [ + 3, + 7 + ], + "centrality": 1 + }, + { + "uuid": "sym-97870c7cba45e51609b21522", + "level": "L2", + "label": "GCROperation", + "file_path": "src/libs/blockchain/gcr/types/GCROperations.ts", + "symbol_name": "GCROperation", + "line_range": [ + 3, + 7 + ], + "centrality": 2 + }, + { + "uuid": "sym-734e3a5727ae21fda3a09a43", + "level": "L3", + "label": "NFT::api", + "file_path": "src/libs/blockchain/gcr/types/NFT.ts", + "symbol_name": "NFT::api", + "line_range": [ + 32, + 54 + ], + "centrality": 1 + }, + { + "uuid": "sym-6950382b643e36b7ebb9e97f", + "level": "L3", + "label": "NFT.setItem", + "file_path": "src/libs/blockchain/gcr/types/NFT.ts", + "symbol_name": "NFT.setItem", + "line_range": [ + 50, + 53 + ], + "centrality": 1 + }, + { + "uuid": "sym-05f548e455547493427a1712", + "level": "L2", + "label": "NFT", + "file_path": "src/libs/blockchain/gcr/types/NFT.ts", + "symbol_name": "NFT", + "line_range": [ + 32, + 54 + ], + "centrality": 3 + }, + { + "uuid": "sym-e55d437bced177f411a9e0ba", + "level": "L3", + "label": "Token::api", + "file_path": "src/libs/blockchain/gcr/types/Token.ts", + "symbol_name": "Token::api", + "line_range": [ + 14, + 19 + ], + "centrality": 1 + }, + { + "uuid": "sym-99d0edcde347cde287d80898", + "level": "L2", + "label": "Token", + "file_path": "src/libs/blockchain/gcr/types/Token.ts", + "symbol_name": "Token", + "line_range": [ + 14, + 19 + ], + "centrality": 2 + }, + { + "uuid": "sym-464d5a8a8386571779a75764", + "level": "L3", + "label": "L2PSHashes::api", + "file_path": "src/libs/blockchain/l2ps_hashes.ts", + "symbol_name": "L2PSHashes::api", + "line_range": [ + 22, + 234 + ], + "centrality": 1 + }, + { + "uuid": "sym-3ad962db5915e15e9b5a34a2", + "level": "L3", + "label": "L2PSHashes.init", + "file_path": "src/libs/blockchain/l2ps_hashes.ts", + "symbol_name": "L2PSHashes.init", + "line_range": [ + 33, + 42 + ], + "centrality": 1 + }, + { + "uuid": "sym-21c2ed26a4fe3b789e89579a", + "level": "L3", + "label": "L2PSHashes.updateHash", + "file_path": "src/libs/blockchain/l2ps_hashes.ts", + "symbol_name": "L2PSHashes.updateHash", + "line_range": [ + 74, + 104 + ], + "centrality": 1 + }, + { + "uuid": "sym-8aedcb314a95fff296cdbfe5", + "level": "L3", + "label": "L2PSHashes.getHash", + "file_path": "src/libs/blockchain/l2ps_hashes.ts", + "symbol_name": "L2PSHashes.getHash", + "line_range": [ + 121, + 134 + ], + "centrality": 1 + }, + { + "uuid": "sym-cfd4e7bab70a3d76e52bd76b", + "level": "L3", + "label": "L2PSHashes.getAll", + "file_path": "src/libs/blockchain/l2ps_hashes.ts", + "symbol_name": "L2PSHashes.getAll", + "line_range": [ + 154, + 171 + ], + "centrality": 1 + }, + { + "uuid": "sym-609c86d82fe4ba01bc8c6426", + "level": "L3", + "label": "L2PSHashes.getStats", + "file_path": "src/libs/blockchain/l2ps_hashes.ts", + "symbol_name": "L2PSHashes.getStats", + "line_range": [ + 187, + 233 + ], + "centrality": 1 + }, + { + "uuid": "sym-b96188aba996df22075f02f0", + "level": "L2", + "label": "L2PSHashes", + "file_path": "src/libs/blockchain/l2ps_hashes.ts", + "symbol_name": "L2PSHashes", + "line_range": [ + 22, + 234 + ], + "centrality": 7 + }, + { + "uuid": "sym-9034b49b1dbb743c13ce4423", + "level": "L3", + "label": "L2PS_STATUS", + "file_path": "src/libs/blockchain/l2ps_mempool.ts", + "symbol_name": "L2PS_STATUS", + "line_range": [ + 16, + 29 + ], + "centrality": 1 + }, + { + "uuid": "sym-716fbb6f4698e042f41b8e8e", + "level": "L3", + "label": "L2PSStatus::api", + "file_path": "src/libs/blockchain/l2ps_mempool.ts", + "symbol_name": "L2PSStatus::api", + "line_range": [ + 31, + 31 + ], + "centrality": 1 + }, + { + "uuid": "sym-02b934d8e3081f0cfdd54829", + "level": "L2", + "label": "L2PSStatus", + "file_path": "src/libs/blockchain/l2ps_mempool.ts", + "symbol_name": "L2PSStatus", + "line_range": [ + 31, + 31 + ], + "centrality": 2 + }, + { + "uuid": "sym-ff641b5d8ca6f513a4d3b737", + "level": "L3", + "label": "L2PSMempool::api", + "file_path": "src/libs/blockchain/l2ps_mempool.ts", + "symbol_name": "L2PSMempool::api", + "line_range": [ + 48, + 809 + ], + "centrality": 1 + }, + { + "uuid": "sym-b7922ddeb799711e40b0fb1d", + "level": "L3", + "label": "L2PSMempool.init", + "file_path": "src/libs/blockchain/l2ps_mempool.ts", + "symbol_name": "L2PSMempool.init", + "line_range": [ + 61, + 70 + ], + "centrality": 1 + }, + { + "uuid": "sym-b1e9c1eea121146321e34dcb", + "level": "L3", + "label": "L2PSMempool.addTransaction", + "file_path": "src/libs/blockchain/l2ps_mempool.ts", + "symbol_name": "L2PSMempool.addTransaction", + "line_range": [ + 109, + 153 + ], + "centrality": 1 + }, + { + "uuid": "sym-9ca99ef032d7812c7bce60d9", + "level": "L3", + "label": "L2PSMempool.getByUID", + "file_path": "src/libs/blockchain/l2ps_mempool.ts", + "symbol_name": "L2PSMempool.getByUID", + "line_range": [ + 292, + 313 + ], + "centrality": 1 + }, + { + "uuid": "sym-9503de3abf0ca0864a61689e", + "level": "L3", + "label": "L2PSMempool.getLastTransaction", + "file_path": "src/libs/blockchain/l2ps_mempool.ts", + "symbol_name": "L2PSMempool.getLastTransaction", + "line_range": [ + 322, + 334 + ], + "centrality": 1 + }, + { + "uuid": "sym-214822ec9f3accdab1355b01", + "level": "L3", + "label": "L2PSMempool.getHashForL2PS", + "file_path": "src/libs/blockchain/l2ps_mempool.ts", + "symbol_name": "L2PSMempool.getHashForL2PS", + "line_range": [ + 356, + 404 + ], + "centrality": 1 + }, + { + "uuid": "sym-c8fe10042fae0cfa98b678d7", + "level": "L3", + "label": "L2PSMempool.getConsolidatedHash", + "file_path": "src/libs/blockchain/l2ps_mempool.ts", + "symbol_name": "L2PSMempool.getConsolidatedHash", + "line_range": [ + 410, + 412 + ], + "centrality": 1 + }, + { + "uuid": "sym-a6206915db8c9da96c5a41bc", + "level": "L3", + "label": "L2PSMempool.updateStatus", + "file_path": "src/libs/blockchain/l2ps_mempool.ts", + "symbol_name": "L2PSMempool.updateStatus", + "line_range": [ + 421, + 440 + ], + "centrality": 1 + }, + { + "uuid": "sym-c4dca8104a7e770f5b14889a", + "level": "L3", + "label": "L2PSMempool.updateGCREdits", + "file_path": "src/libs/blockchain/l2ps_mempool.ts", + "symbol_name": "L2PSMempool.updateGCREdits", + "line_range": [ + 451, + 479 + ], + "centrality": 1 + }, + { + "uuid": "sym-d24a5f5062450cc9e53222c7", + "level": "L3", + "label": "L2PSMempool.updateStatusBatch", + "file_path": "src/libs/blockchain/l2ps_mempool.ts", + "symbol_name": "L2PSMempool.updateStatusBatch", + "line_range": [ + 497, + 520 + ], + "centrality": 1 + }, + { + "uuid": "sym-7e44ecf471155de43ccdb015", + "level": "L3", + "label": "L2PSMempool.getByStatus", + "file_path": "src/libs/blockchain/l2ps_mempool.ts", + "symbol_name": "L2PSMempool.getByStatus", + "line_range": [ + 535, + 556 + ], + "centrality": 1 + }, + { + "uuid": "sym-a992f1d60a32575155de14ac", + "level": "L3", + "label": "L2PSMempool.getByUIDAndStatus", + "file_path": "src/libs/blockchain/l2ps_mempool.ts", + "symbol_name": "L2PSMempool.getByUIDAndStatus", + "line_range": [ + 566, + 591 + ], + "centrality": 1 + }, + { + "uuid": "sym-0efb93278b37aa89e05f1dc5", + "level": "L3", + "label": "L2PSMempool.deleteByHashes", + "file_path": "src/libs/blockchain/l2ps_mempool.ts", + "symbol_name": "L2PSMempool.deleteByHashes", + "line_range": [ + 599, + 619 + ], + "centrality": 1 + }, + { + "uuid": "sym-3a4f17c210e5304b6f3f01be", + "level": "L3", + "label": "L2PSMempool.cleanupByStatus", + "file_path": "src/libs/blockchain/l2ps_mempool.ts", + "symbol_name": "L2PSMempool.cleanupByStatus", + "line_range": [ + 628, + 652 + ], + "centrality": 1 + }, + { + "uuid": "sym-eb28186a18ca7a82b4739ee5", + "level": "L3", + "label": "L2PSMempool.existsByOriginalHash", + "file_path": "src/libs/blockchain/l2ps_mempool.ts", + "symbol_name": "L2PSMempool.existsByOriginalHash", + "line_range": [ + 661, + 670 + ], + "centrality": 1 + }, + { + "uuid": "sym-fd9b1cfd830532f47e6eb66b", + "level": "L3", + "label": "L2PSMempool.existsByHash", + "file_path": "src/libs/blockchain/l2ps_mempool.ts", + "symbol_name": "L2PSMempool.existsByHash", + "line_range": [ + 678, + 687 + ], + "centrality": 1 + }, + { + "uuid": "sym-a0dfc671381543a24d283735", + "level": "L3", + "label": "L2PSMempool.getByHash", + "file_path": "src/libs/blockchain/l2ps_mempool.ts", + "symbol_name": "L2PSMempool.getByHash", + "line_range": [ + 695, + 704 + ], + "centrality": 1 + }, + { + "uuid": "sym-856b604c8ffcc654e328cd6e", + "level": "L3", + "label": "L2PSMempool.cleanup", + "file_path": "src/libs/blockchain/l2ps_mempool.ts", + "symbol_name": "L2PSMempool.cleanup", + "line_range": [ + 719, + 743 + ], + "centrality": 1 + }, + { + "uuid": "sym-c8933ccebe7118591c8afcc1", + "level": "L3", + "label": "L2PSMempool.getStats", + "file_path": "src/libs/blockchain/l2ps_mempool.ts", + "symbol_name": "L2PSMempool.getStats", + "line_range": [ + 758, + 808 + ], + "centrality": 1 + }, + { + "uuid": "sym-a16b3eeaac4eb18401aa51da", + "level": "L2", + "label": "L2PSMempool", + "file_path": "src/libs/blockchain/l2ps_mempool.ts", + "symbol_name": "L2PSMempool", + "line_range": [ + 48, + 809 + ], + "centrality": 20 + }, + { + "uuid": "sym-bb965537d23959dfc7d6d13b", + "level": "L3", + "label": "Mempool::api", + "file_path": "src/libs/blockchain/mempool_v2.ts", + "symbol_name": "Mempool::api", + "line_range": [ + 19, + 256 + ], + "centrality": 1 + }, + { + "uuid": "sym-954857d9de43b16abb5dbaf4", + "level": "L3", + "label": "Mempool.init", + "file_path": "src/libs/blockchain/mempool_v2.ts", + "symbol_name": "Mempool.init", + "line_range": [ + 21, + 24 + ], + "centrality": 1 + }, + { + "uuid": "sym-078110cfc9aa1e4ba9ed2e56", + "level": "L3", + "label": "Mempool.getMempool", + "file_path": "src/libs/blockchain/mempool_v2.ts", + "symbol_name": "Mempool.getMempool", + "line_range": [ + 32, + 50 + ], + "centrality": 1 + }, + { + "uuid": "sym-f790c0e252480bc29cb40414", + "level": "L3", + "label": "Mempool.getMempoolHashMap", + "file_path": "src/libs/blockchain/mempool_v2.ts", + "symbol_name": "Mempool.getMempoolHashMap", + "line_range": [ + 55, + 65 + ], + "centrality": 1 + }, + { + "uuid": "sym-2319ce1d3ed21356066c5192", + "level": "L3", + "label": "Mempool.getTransactionsByHashes", + "file_path": "src/libs/blockchain/mempool_v2.ts", + "symbol_name": "Mempool.getTransactionsByHashes", + "line_range": [ + 67, + 69 + ], + "centrality": 1 + }, + { + "uuid": "sym-f099526ff753bd09914f1de8", + "level": "L3", + "label": "Mempool.checkTransactionByHash", + "file_path": "src/libs/blockchain/mempool_v2.ts", + "symbol_name": "Mempool.checkTransactionByHash", + "line_range": [ + 71, + 73 + ], + "centrality": 1 + }, + { + "uuid": "sym-7f5da43a0d477c46a19e3abd", + "level": "L3", + "label": "Mempool.addTransaction", + "file_path": "src/libs/blockchain/mempool_v2.ts", + "symbol_name": "Mempool.addTransaction", + "line_range": [ + 75, + 132 + ], + "centrality": 1 + }, + { + "uuid": "sym-c0c210d0df565b16c8d0d80c", + "level": "L3", + "label": "Mempool.removeTransactionsByHashes", + "file_path": "src/libs/blockchain/mempool_v2.ts", + "symbol_name": "Mempool.removeTransactionsByHashes", + "line_range": [ + 134, + 144 + ], + "centrality": 1 + }, + { + "uuid": "sym-c018307d8cc1e259cefb154e", + "level": "L3", + "label": "Mempool.receive", + "file_path": "src/libs/blockchain/mempool_v2.ts", + "symbol_name": "Mempool.receive", + "line_range": [ + 146, + 215 + ], + "centrality": 1 + }, + { + "uuid": "sym-d7b517c2414088a4904aeb3a", + "level": "L3", + "label": "Mempool.getDifference", + "file_path": "src/libs/blockchain/mempool_v2.ts", + "symbol_name": "Mempool.getDifference", + "line_range": [ + 223, + 227 + ], + "centrality": 1 + }, + { + "uuid": "sym-e3c670f7e35fe6bf834577f9", + "level": "L3", + "label": "Mempool.removeTransaction", + "file_path": "src/libs/blockchain/mempool_v2.ts", + "symbol_name": "Mempool.removeTransaction", + "line_range": [ + 235, + 255 + ], + "centrality": 1 + }, + { + "uuid": "sym-2b93335a7e40dc75286de672", + "level": "L2", + "label": "Mempool", + "file_path": "src/libs/blockchain/mempool_v2.ts", + "symbol_name": "Mempool", + "line_range": [ + 19, + 256 + ], + "centrality": 12 + }, + { + "uuid": "sym-3b8254889d32edf4470206ea", + "level": "L3", + "label": "syncBlock", + "file_path": "src/libs/blockchain/routines/Sync.ts", + "symbol_name": "syncBlock", + "line_range": [ + 288, + 326 + ], + "centrality": 2 + }, + { + "uuid": "sym-6a24a4d06666621c7d17bc44", + "level": "L3", + "label": "askTxsForBlocksBatch", + "file_path": "src/libs/blockchain/routines/Sync.ts", + "symbol_name": "askTxsForBlocksBatch", + "line_range": [ + 386, + 432 + ], + "centrality": 1 + }, + { + "uuid": "sym-2c09ca6eda3f95ab06c68035", + "level": "L3", + "label": "syncGCRTables", + "file_path": "src/libs/blockchain/routines/Sync.ts", + "symbol_name": "syncGCRTables", + "line_range": [ + 719, + 742 + ], + "centrality": 1 + }, + { + "uuid": "sym-c246a28d0970ec7dbe8f3a09", + "level": "L3", + "label": "askTxsForBlock", + "file_path": "src/libs/blockchain/routines/Sync.ts", + "symbol_name": "askTxsForBlock", + "line_range": [ + 745, + 799 + ], + "centrality": 1 + }, + { + "uuid": "sym-54918e7606a7cc1733327a2c", + "level": "L3", + "label": "mergePeerlist", + "file_path": "src/libs/blockchain/routines/Sync.ts", + "symbol_name": "mergePeerlist", + "line_range": [ + 802, + 840 + ], + "centrality": 1 + }, + { + "uuid": "sym-000374b63ff352aab2d82df4", + "level": "L3", + "label": "fastSync", + "file_path": "src/libs/blockchain/routines/Sync.ts", + "symbol_name": "fastSync", + "line_range": [ + 883, + 911 + ], + "centrality": 1 + }, + { + "uuid": "sym-1ef8169e505fee687e3ba380", + "level": "L3", + "label": "BeforeFindGenesisHooks::api", + "file_path": "src/libs/blockchain/routines/beforeFindGenesisHooks.ts", + "symbol_name": "BeforeFindGenesisHooks::api", + "line_range": [ + 15, + 379 + ], + "centrality": 1 + }, + { + "uuid": "sym-c0903a5a6dd9e6b8196aa9a4", + "level": "L3", + "label": "BeforeFindGenesisHooks.awardDemosFollowPoints", + "file_path": "src/libs/blockchain/routines/beforeFindGenesisHooks.ts", + "symbol_name": "BeforeFindGenesisHooks.awardDemosFollowPoints", + "line_range": [ + 20, + 71 + ], + "centrality": 1 + }, + { + "uuid": "sym-05f009619889c37708311d81", + "level": "L3", + "label": "BeforeFindGenesisHooks.awardDemosFollowPointsToSingleAccount", + "file_path": "src/libs/blockchain/routines/beforeFindGenesisHooks.ts", + "symbol_name": "BeforeFindGenesisHooks.awardDemosFollowPointsToSingleAccount", + "line_range": [ + 76, + 145 + ], + "centrality": 1 + }, + { + "uuid": "sym-a5aede25adb18f1972bc6c14", + "level": "L3", + "label": "BeforeFindGenesisHooks.reviewSingleAccount", + "file_path": "src/libs/blockchain/routines/beforeFindGenesisHooks.ts", + "symbol_name": "BeforeFindGenesisHooks.reviewSingleAccount", + "line_range": [ + 150, + 264 + ], + "centrality": 1 + }, + { + "uuid": "sym-d13e4e1829f9414ddb93be5a", + "level": "L3", + "label": "BeforeFindGenesisHooks.reviewAccounts", + "file_path": "src/libs/blockchain/routines/beforeFindGenesisHooks.ts", + "symbol_name": "BeforeFindGenesisHooks.reviewAccounts", + "line_range": [ + 269, + 305 + ], + "centrality": 1 + }, + { + "uuid": "sym-58e1cdee015b7eeec5aaadbe", + "level": "L3", + "label": "BeforeFindGenesisHooks.removeInvalidAccounts", + "file_path": "src/libs/blockchain/routines/beforeFindGenesisHooks.ts", + "symbol_name": "BeforeFindGenesisHooks.removeInvalidAccounts", + "line_range": [ + 307, + 378 + ], + "centrality": 1 + }, + { + "uuid": "sym-04aa1e473c32e444df8b274d", + "level": "L2", + "label": "BeforeFindGenesisHooks", + "file_path": "src/libs/blockchain/routines/beforeFindGenesisHooks.ts", + "symbol_name": "BeforeFindGenesisHooks", + "line_range": [ + 15, + 379 + ], + "centrality": 7 + }, + { + "uuid": "sym-d0b2b2174c96ce5833cd9592", + "level": "L3", + "label": "calculateCurrentGas", + "file_path": "src/libs/blockchain/routines/calculateCurrentGas.ts", + "symbol_name": "calculateCurrentGas", + "line_range": [ + 52, + 59 + ], + "centrality": 2 + }, + { + "uuid": "sym-b989cdce3dc1128fb557122f", + "level": "L3", + "label": "executeNativeTransaction", + "file_path": "src/libs/blockchain/routines/executeNativeTransaction.ts", + "symbol_name": "executeNativeTransaction", + "line_range": [ + 34, + 96 + ], + "centrality": 2 + }, + { + "uuid": "sym-46722d97026838058df81e45", + "level": "L3", + "label": "Actor::api", + "file_path": "src/libs/blockchain/routines/executeOperations.ts", + "symbol_name": "Actor::api", + "line_range": [ + 43, + 45 + ], + "centrality": 1 + }, + { + "uuid": "sym-0c7b5305038aa0a21c205aa4", + "level": "L2", + "label": "Actor", + "file_path": "src/libs/blockchain/routines/executeOperations.ts", + "symbol_name": "Actor", + "line_range": [ + 43, + 45 + ], + "centrality": 2 + }, + { + "uuid": "sym-812eb740fd13dd1b77c10a32", + "level": "L3", + "label": "executeOperations", + "file_path": "src/libs/blockchain/routines/executeOperations.ts", + "symbol_name": "executeOperations", + "line_range": [ + 48, + 73 + ], + "centrality": 1 + }, + { + "uuid": "sym-26b6a576d6b118ccfe6cf8ec", + "level": "L3", + "label": "findGenesisBlock", + "file_path": "src/libs/blockchain/routines/findGenesisBlock.ts", + "symbol_name": "findGenesisBlock", + "line_range": [ + 39, + 86 + ], + "centrality": 1 + }, + { + "uuid": "sym-847bb4ee8faf0a5fc4c39e92", + "level": "L3", + "label": "loadGenesisIdentities", + "file_path": "src/libs/blockchain/routines/loadGenesisIdentities.ts", + "symbol_name": "loadGenesisIdentities", + "line_range": [ + 7, + 19 + ], + "centrality": 1 + }, + { + "uuid": "sym-1891e05e8289e29a05504569", + "level": "L3", + "label": "SubOperations::api", + "file_path": "src/libs/blockchain/routines/subOperations.ts", + "symbol_name": "SubOperations::api", + "line_range": [ + 16, + 173 + ], + "centrality": 1 + }, + { + "uuid": "sym-f9cb4b9053f2905d6ab0609b", + "level": "L3", + "label": "SubOperations.genesis", + "file_path": "src/libs/blockchain/routines/subOperations.ts", + "symbol_name": "SubOperations.genesis", + "line_range": [ + 26, + 76 + ], + "centrality": 1 + }, + { + "uuid": "sym-51e8384bb9ab40ce0e10f672", + "level": "L3", + "label": "SubOperations.transferNative", + "file_path": "src/libs/blockchain/routines/subOperations.ts", + "symbol_name": "SubOperations.transferNative", + "line_range": [ + 79, + 119 + ], + "centrality": 1 + }, + { + "uuid": "sym-3af7a4ef926ee336982d7cd9", + "level": "L3", + "label": "SubOperations.addNative", + "file_path": "src/libs/blockchain/routines/subOperations.ts", + "symbol_name": "SubOperations.addNative", + "line_range": [ + 122, + 138 + ], + "centrality": 1 + }, + { + "uuid": "sym-e20f8a059946a439843cfada", + "level": "L3", + "label": "SubOperations.removeNative", + "file_path": "src/libs/blockchain/routines/subOperations.ts", + "symbol_name": "SubOperations.removeNative", + "line_range": [ + 141, + 162 + ], + "centrality": 1 + }, + { + "uuid": "sym-77b8585e6d04e0016f59f728", + "level": "L3", + "label": "SubOperations.addAsset", + "file_path": "src/libs/blockchain/routines/subOperations.ts", + "symbol_name": "SubOperations.addAsset", + "line_range": [ + 164, + 167 + ], + "centrality": 1 + }, + { + "uuid": "sym-eb639a43a4aecf119bf79cb0", + "level": "L3", + "label": "SubOperations.removeAsset", + "file_path": "src/libs/blockchain/routines/subOperations.ts", + "symbol_name": "SubOperations.removeAsset", + "line_range": [ + 169, + 172 + ], + "centrality": 1 + }, + { + "uuid": "sym-349de95fe57411b99b41c921", + "level": "L2", + "label": "SubOperations", + "file_path": "src/libs/blockchain/routines/subOperations.ts", + "symbol_name": "SubOperations", + "line_range": [ + 16, + 173 + ], + "centrality": 8 + }, + { + "uuid": "sym-a1714406759fda051e877a2e", + "level": "L3", + "label": "confirmTransaction", + "file_path": "src/libs/blockchain/routines/validateTransaction.ts", + "symbol_name": "confirmTransaction", + "line_range": [ + 29, + 106 + ], + "centrality": 2 + }, + { + "uuid": "sym-95a959d434bd68d26c7ba5e6", + "level": "L3", + "label": "assignNonce", + "file_path": "src/libs/blockchain/routines/validateTransaction.ts", + "symbol_name": "assignNonce", + "line_range": [ + 232, + 237 + ], + "centrality": 1 + }, + { + "uuid": "sym-4128cc9e2fa3688777c26247", + "level": "L3", + "label": "broadcastVerifiedNativeTransaction", + "file_path": "src/libs/blockchain/routines/validateTransaction.ts", + "symbol_name": "broadcastVerifiedNativeTransaction", + "line_range": [ + 240, + 271 + ], + "centrality": 2 + }, + { + "uuid": "sym-a9cd5796f950012d75eae69d", + "level": "L3", + "label": "ValidatorsManagement::api", + "file_path": "src/libs/blockchain/routines/validatorsManagement.ts", + "symbol_name": "ValidatorsManagement::api", + "line_range": [ + 10, + 42 + ], + "centrality": 1 + }, + { + "uuid": "sym-48770c393e18cf8b765fc100", + "level": "L3", + "label": "ValidatorsManagement.manageValidatorEntranceTx", + "file_path": "src/libs/blockchain/routines/validatorsManagement.ts", + "symbol_name": "ValidatorsManagement.manageValidatorEntranceTx", + "line_range": [ + 13, + 24 + ], + "centrality": 1 + }, + { + "uuid": "sym-2b28a6196b9e548ce3950f99", + "level": "L3", + "label": "ValidatorsManagement.manageValidatorOnlineStatus", + "file_path": "src/libs/blockchain/routines/validatorsManagement.ts", + "symbol_name": "ValidatorsManagement.manageValidatorOnlineStatus", + "line_range": [ + 27, + 34 + ], + "centrality": 1 + }, + { + "uuid": "sym-4e2725aab0d0a1de18f1eac1", + "level": "L3", + "label": "ValidatorsManagement.isValidatorActive", + "file_path": "src/libs/blockchain/routines/validatorsManagement.ts", + "symbol_name": "ValidatorsManagement.isValidatorActive", + "line_range": [ + 36, + 41 + ], + "centrality": 1 + }, + { + "uuid": "sym-093389e29bebd11b68e47fb3", + "level": "L2", + "label": "ValidatorsManagement", + "file_path": "src/libs/blockchain/routines/validatorsManagement.ts", + "symbol_name": "ValidatorsManagement", + "line_range": [ + 10, + 42 + ], + "centrality": 5 + }, + { + "uuid": "sym-6fdb260c63552dd4e0a7cecf", + "level": "L3", + "label": "Transaction::api", + "file_path": "src/libs/blockchain/transaction.ts", + "symbol_name": "Transaction::api", + "line_range": [ + 45, + 510 + ], + "centrality": 1 + }, + { + "uuid": "sym-4e9414a938ee627a77f20b4d", + "level": "L3", + "label": "Transaction.sign", + "file_path": "src/libs/blockchain/transaction.ts", + "symbol_name": "Transaction.sign", + "line_range": [ + 84, + 104 + ], + "centrality": 1 + }, + { + "uuid": "sym-cdee53ddf59cf3090aa22853", + "level": "L3", + "label": "Transaction.hash", + "file_path": "src/libs/blockchain/transaction.ts", + "symbol_name": "Transaction.hash", + "line_range": [ + 107, + 115 + ], + "centrality": 1 + }, + { + "uuid": "sym-972af425d3e9bcdfc778ff00", + "level": "L3", + "label": "Transaction.confirmTx", + "file_path": "src/libs/blockchain/transaction.ts", + "symbol_name": "Transaction.confirmTx", + "line_range": [ + 118, + 168 + ], + "centrality": 1 + }, + { + "uuid": "sym-2cd44b8eac8f99115ec71079", + "level": "L3", + "label": "Transaction.validateSignature", + "file_path": "src/libs/blockchain/transaction.ts", + "symbol_name": "Transaction.validateSignature", + "line_range": [ + 171, + 262 + ], + "centrality": 1 + }, + { + "uuid": "sym-e409f5ac53d90fb28708d5f5", + "level": "L3", + "label": "Transaction.isCoherent", + "file_path": "src/libs/blockchain/transaction.ts", + "symbol_name": "Transaction.isCoherent", + "line_range": [ + 265, + 271 + ], + "centrality": 1 + }, + { + "uuid": "sym-ca3b7bc9b989c0d74884a2c5", + "level": "L3", + "label": "Transaction.structured", + "file_path": "src/libs/blockchain/transaction.ts", + "symbol_name": "Transaction.structured", + "line_range": [ + 404, + 429 + ], + "centrality": 1 + }, + { + "uuid": "sym-aa005302b41d0195a5db344b", + "level": "L3", + "label": "Transaction.toRawTransaction", + "file_path": "src/libs/blockchain/transaction.ts", + "symbol_name": "Transaction.toRawTransaction", + "line_range": [ + 431, + 468 + ], + "centrality": 1 + }, + { + "uuid": "sym-87340b6f42c579b19095fad3", + "level": "L3", + "label": "Transaction.fromRawTransaction", + "file_path": "src/libs/blockchain/transaction.ts", + "symbol_name": "Transaction.fromRawTransaction", + "line_range": [ + 470, + 509 + ], + "centrality": 1 + }, + { + "uuid": "sym-feb77422b7084f0c4d2e3c5e", + "level": "L2", + "label": "Transaction", + "file_path": "src/libs/blockchain/transaction.ts", + "symbol_name": "Transaction", + "line_range": [ + 45, + 510 + ], + "centrality": 10 + }, + { + "uuid": "sym-e4e428838d58a143a243cba6", + "level": "L3", + "label": "Confirmation::api", + "file_path": "src/libs/blockchain/types/confirmation.ts", + "symbol_name": "Confirmation::api", + "line_range": [ + 14, + 31 + ], + "centrality": 1 + }, + { + "uuid": "sym-0728b731cfd7b6fb01abfe3f", + "level": "L2", + "label": "Confirmation", + "file_path": "src/libs/blockchain/types/confirmation.ts", + "symbol_name": "Confirmation", + "line_range": [ + 14, + 31 + ], + "centrality": 2 + }, + { + "uuid": "sym-2f9e3c7322b2c5d917683f2e", + "level": "L3", + "label": "Genesis::api", + "file_path": "src/libs/blockchain/types/genesisTypes.ts", + "symbol_name": "Genesis::api", + "line_range": [ + 15, + 35 + ], + "centrality": 1 + }, + { + "uuid": "sym-1e031fa7cd7911f05bf22195", + "level": "L3", + "label": "Genesis.getGenesisBlock", + "file_path": "src/libs/blockchain/types/genesisTypes.ts", + "symbol_name": "Genesis.getGenesisBlock", + "line_range": [ + 25, + 27 + ], + "centrality": 1 + }, + { + "uuid": "sym-1d0d5e7cf7a7292ad57f24e7", + "level": "L3", + "label": "Genesis.deriveGenesisStatus", + "file_path": "src/libs/blockchain/types/genesisTypes.ts", + "symbol_name": "Genesis.deriveGenesisStatus", + "line_range": [ + 32, + 34 + ], + "centrality": 1 + }, + { + "uuid": "sym-8f8a5ab65ba4325bb48884e5", + "level": "L2", + "label": "Genesis", + "file_path": "src/libs/blockchain/types/genesisTypes.ts", + "symbol_name": "Genesis", + "line_range": [ + 15, + 35 + ], + "centrality": 4 + }, + { + "uuid": "sym-a64f1ca18e821cc20c7e5b5f", + "level": "L3", + "label": "BroadcastManager::api", + "file_path": "src/libs/communications/broadcastManager.ts", + "symbol_name": "BroadcastManager::api", + "line_range": [ + 13, + 211 + ], + "centrality": 1 + }, + { + "uuid": "sym-8903c8beb154afaae29ce04c", + "level": "L3", + "label": "BroadcastManager.broadcastNewBlock", + "file_path": "src/libs/communications/broadcastManager.ts", + "symbol_name": "BroadcastManager.broadcastNewBlock", + "line_range": [ + 19, + 61 + ], + "centrality": 1 + }, + { + "uuid": "sym-321f64e73c58c62ef0ee1efc", + "level": "L3", + "label": "BroadcastManager.handleNewBlock", + "file_path": "src/libs/communications/broadcastManager.ts", + "symbol_name": "BroadcastManager.handleNewBlock", + "line_range": [ + 68, + 123 + ], + "centrality": 1 + }, + { + "uuid": "sym-4653da5df6ecfbce9a04f0ee", + "level": "L3", + "label": "BroadcastManager.broadcastOurSyncData", + "file_path": "src/libs/communications/broadcastManager.ts", + "symbol_name": "BroadcastManager.broadcastOurSyncData", + "line_range": [ + 128, + 170 + ], + "centrality": 1 + }, + { + "uuid": "sym-24358b3224fd4341ab81efa6", + "level": "L3", + "label": "BroadcastManager.handleUpdatePeerSyncData", + "file_path": "src/libs/communications/broadcastManager.ts", + "symbol_name": "BroadcastManager.handleUpdatePeerSyncData", + "line_range": [ + 178, + 210 + ], + "centrality": 1 + }, + { + "uuid": "sym-bc830ddff78494264067c796", + "level": "L2", + "label": "BroadcastManager", + "file_path": "src/libs/communications/broadcastManager.ts", + "symbol_name": "BroadcastManager", + "line_range": [ + 13, + 211 + ], + "centrality": 7 + }, + { + "uuid": "sym-fb3ceadeb84c52d53d5da1a5", + "level": "L3", + "label": "transmit", + "file_path": "src/libs/communications/index.ts", + "symbol_name": "transmit", + "line_range": [ + 12, + 12 + ], + "centrality": 1 + }, + { + "uuid": "sym-5c6b366e18862aea757080c5", + "level": "L3", + "label": "Transmission::api", + "file_path": "src/libs/communications/transmission.ts", + "symbol_name": "Transmission::api", + "line_range": [ + 22, + 76 + ], + "centrality": 1 + }, + { + "uuid": "sym-4183c8c8ba4c87b3ac71efcf", + "level": "L3", + "label": "Transmission.initialize", + "file_path": "src/libs/communications/transmission.ts", + "symbol_name": "Transmission.initialize", + "line_range": [ + 46, + 57 + ], + "centrality": 1 + }, + { + "uuid": "sym-d902b89c70bfdaef1e7ec63c", + "level": "L3", + "label": "Transmission.finalize", + "file_path": "src/libs/communications/transmission.ts", + "symbol_name": "Transmission.finalize", + "line_range": [ + 60, + 75 + ], + "centrality": 1 + }, + { + "uuid": "sym-48a3b6b4e214dbf05a884bdd", + "level": "L2", + "label": "Transmission", + "file_path": "src/libs/communications/transmission.ts", + "symbol_name": "Transmission", + "line_range": [ + 22, + 76 + ], + "centrality": 4 + }, + { + "uuid": "sym-98c4295951482a3e982049bb", + "level": "L3", + "label": "checkConsensusTime", + "file_path": "src/libs/consensus/routines/consensusTime.ts", + "symbol_name": "checkConsensusTime", + "line_range": [ + 9, + 69 + ], + "centrality": 2 + }, + { + "uuid": "sym-ab85b50fe1b89f2116b32b8e", + "level": "L3", + "label": "consensusRoutine", + "file_path": "src/libs/consensus/v2/PoRBFT.ts", + "symbol_name": "consensusRoutine", + "line_range": [ + 59, + 263 + ], + "centrality": 3 + }, + { + "uuid": "sym-9ff2092936295dca05e0edb7", + "level": "L3", + "label": "isConsensusAlreadyRunning", + "file_path": "src/libs/consensus/v2/PoRBFT.ts", + "symbol_name": "isConsensusAlreadyRunning", + "line_range": [ + 272, + 278 + ], + "centrality": 2 + }, + { + "uuid": "sym-6f65f0a6507ebc9370500240", + "level": "L3", + "label": "ValidationData::api", + "file_path": "src/libs/consensus/v2/interfaces.ts", + "symbol_name": "ValidationData::api", + "line_range": [ + 2, + 4 + ], + "centrality": 1 + }, + { + "uuid": "sym-ca05c53ed6f6f579ada9bc57", + "level": "L2", + "label": "ValidationData", + "file_path": "src/libs/consensus/v2/interfaces.ts", + "symbol_name": "ValidationData", + "line_range": [ + 2, + 4 + ], + "centrality": 2 + }, + { + "uuid": "sym-f18eee79205c6745588c2717", + "level": "L3", + "label": "ConsensusHashResponse::api", + "file_path": "src/libs/consensus/v2/interfaces.ts", + "symbol_name": "ConsensusHashResponse::api", + "line_range": [ + 6, + 10 + ], + "centrality": 1 + }, + { + "uuid": "sym-49e2485b99dd47aa7a15a28f", + "level": "L2", + "label": "ConsensusHashResponse", + "file_path": "src/libs/consensus/v2/interfaces.ts", + "symbol_name": "ConsensusHashResponse", + "line_range": [ + 6, + 10 + ], + "centrality": 2 + }, + { + "uuid": "sym-337135b7799d55bf38a2d6a9", + "level": "L3", + "label": "averageTimestamps", + "file_path": "src/libs/consensus/v2/routines/averageTimestamp.ts", + "symbol_name": "averageTimestamps", + "line_range": [ + 5, + 30 + ], + "centrality": 1 + }, + { + "uuid": "sym-c6ac07d6b729b12884d9b167", + "level": "L3", + "label": "broadcastBlockHash", + "file_path": "src/libs/consensus/v2/routines/broadcastBlockHash.ts", + "symbol_name": "broadcastBlockHash", + "line_range": [ + 9, + 129 + ], + "centrality": 1 + }, + { + "uuid": "sym-631364af116d4a86562c04f9", + "level": "L3", + "label": "createBlock", + "file_path": "src/libs/consensus/v2/routines/createBlock.ts", + "symbol_name": "createBlock", + "line_range": [ + 12, + 65 + ], + "centrality": 1 + }, + { + "uuid": "sym-1a7e0225b76935e084fa2329", + "level": "L3", + "label": "hashNativeTables", + "file_path": "src/libs/consensus/v2/routines/createBlock.ts", + "symbol_name": "hashNativeTables", + "line_range": [ + 68, + 73 + ], + "centrality": 2 + }, + { + "uuid": "sym-9ccc28bee226a93586ef7b1d", + "level": "L3", + "label": "ensureCandidateBlockFormed", + "file_path": "src/libs/consensus/v2/routines/ensureCandidateBlockFormed.ts", + "symbol_name": "ensureCandidateBlockFormed", + "line_range": [ + 6, + 33 + ], + "centrality": 3 + }, + { + "uuid": "sym-6680f554fcb4ede4631e60b2", + "level": "L3", + "label": "getCommonValidatorSeed", + "file_path": "src/libs/consensus/v2/routines/getCommonValidatorSeed.ts", + "symbol_name": "getCommonValidatorSeed", + "line_range": [ + 58, + 132 + ], + "centrality": 7 + }, + { + "uuid": "sym-304eaa4f7c51cf3fdbf89bb0", + "level": "L3", + "label": "getShard", + "file_path": "src/libs/consensus/v2/routines/getShard.ts", + "symbol_name": "getShard", + "line_range": [ + 14, + 65 + ], + "centrality": 7 + }, + { + "uuid": "sym-45a76b1716a67708f11a0909", + "level": "L3", + "label": "isValidatorForNextBlock", + "file_path": "src/libs/consensus/v2/routines/isValidator.ts", + "symbol_name": "isValidatorForNextBlock", + "line_range": [ + 13, + 26 + ], + "centrality": 5 + }, + { + "uuid": "sym-4a436dd527be338afbf98bdb", + "level": "L3", + "label": "manageProposeBlockHash", + "file_path": "src/libs/consensus/v2/routines/manageProposeBlockHash.ts", + "symbol_name": "manageProposeBlockHash", + "line_range": [ + 13, + 119 + ], + "centrality": 5 + }, + { + "uuid": "sym-b2276d6a6402e65f56fd09ad", + "level": "L3", + "label": "mergeMempools", + "file_path": "src/libs/consensus/v2/routines/mergeMempools.ts", + "symbol_name": "mergeMempools", + "line_range": [ + 6, + 33 + ], + "centrality": 1 + }, + { + "uuid": "sym-717b0f06032fce2890d123ea", + "level": "L3", + "label": "mergePeerlist", + "file_path": "src/libs/consensus/v2/routines/mergePeerlist.ts", + "symbol_name": "mergePeerlist", + "line_range": [ + 9, + 29 + ], + "centrality": 1 + }, + { + "uuid": "sym-a70b0054aa7a6bdc502006e3", + "level": "L3", + "label": "orderTransactions", + "file_path": "src/libs/consensus/v2/routines/orderTransactions.ts", + "symbol_name": "orderTransactions", + "line_range": [ + 9, + 32 + ], + "centrality": 1 + }, + { + "uuid": "sym-ae84450ca16ec2017225c6e2", + "level": "L3", + "label": "SecretaryManager::api", + "file_path": "src/libs/consensus/v2/types/secretaryManager.ts", + "symbol_name": "SecretaryManager::api", + "line_range": [ + 15, + 1003 + ], + "centrality": 1 + }, + { + "uuid": "sym-248d2e44333f70a7724dfab9", + "level": "L3", + "label": "SecretaryManager.lastBlockRef", + "file_path": "src/libs/consensus/v2/types/secretaryManager.ts", + "symbol_name": "SecretaryManager.lastBlockRef", + "line_range": [ + 21, + 27 + ], + "centrality": 1 + }, + { + "uuid": "sym-3ea29e1b08ecca0739db484a", + "level": "L3", + "label": "SecretaryManager.secretary", + "file_path": "src/libs/consensus/v2/types/secretaryManager.ts", + "symbol_name": "SecretaryManager.secretary", + "line_range": [ + 31, + 33 + ], + "centrality": 1 + }, + { + "uuid": "sym-57d373cba5ebbb373b4dc896", + "level": "L3", + "label": "SecretaryManager.initializeShard", + "file_path": "src/libs/consensus/v2/types/secretaryManager.ts", + "symbol_name": "SecretaryManager.initializeShard", + "line_range": [ + 49, + 102 + ], + "centrality": 1 + }, + { + "uuid": "sym-f78a8502a164052f35675687", + "level": "L3", + "label": "SecretaryManager.initializeValidationPhases", + "file_path": "src/libs/consensus/v2/types/secretaryManager.ts", + "symbol_name": "SecretaryManager.initializeValidationPhases", + "line_range": [ + 110, + 118 + ], + "centrality": 1 + }, + { + "uuid": "sym-641d0700ddf43915ffca5d6b", + "level": "L3", + "label": "SecretaryManager.checkIfWeAreSecretary", + "file_path": "src/libs/consensus/v2/types/secretaryManager.ts", + "symbol_name": "SecretaryManager.checkIfWeAreSecretary", + "line_range": [ + 123, + 125 + ], + "centrality": 1 + }, + { + "uuid": "sym-f61ba3716295ceca715defb3", + "level": "L3", + "label": "SecretaryManager.secretaryRoutine", + "file_path": "src/libs/consensus/v2/types/secretaryManager.ts", + "symbol_name": "SecretaryManager.secretaryRoutine", + "line_range": [ + 144, + 239 + ], + "centrality": 1 + }, + { + "uuid": "sym-18d8719d39f12759faddaf08", + "level": "L3", + "label": "SecretaryManager.handleNodesGoneOffline", + "file_path": "src/libs/consensus/v2/types/secretaryManager.ts", + "symbol_name": "SecretaryManager.handleNodesGoneOffline", + "line_range": [ + 250, + 285 + ], + "centrality": 1 + }, + { + "uuid": "sym-71eec5a8e8af51150f452fff", + "level": "L3", + "label": "SecretaryManager.handleSecretaryGoneOffline", + "file_path": "src/libs/consensus/v2/types/secretaryManager.ts", + "symbol_name": "SecretaryManager.handleSecretaryGoneOffline", + "line_range": [ + 293, + 375 + ], + "centrality": 1 + }, + { + "uuid": "sym-daa32cea34b9049e4b060311", + "level": "L3", + "label": "SecretaryManager.simulateSecretaryGoingOffline", + "file_path": "src/libs/consensus/v2/types/secretaryManager.ts", + "symbol_name": "SecretaryManager.simulateSecretaryGoingOffline", + "line_range": [ + 381, + 390 + ], + "centrality": 1 + }, + { + "uuid": "sym-7b62ffb16704e1d6d9ec6baf", + "level": "L3", + "label": "SecretaryManager.simulateNormalNodeGoingOffline", + "file_path": "src/libs/consensus/v2/types/secretaryManager.ts", + "symbol_name": "SecretaryManager.simulateNormalNodeGoingOffline", + "line_range": [ + 397, + 406 + ], + "centrality": 1 + }, + { + "uuid": "sym-3ad7b7a5210718d38b4ba00d", + "level": "L3", + "label": "SecretaryManager.simulateNodeBeingLate", + "file_path": "src/libs/consensus/v2/types/secretaryManager.ts", + "symbol_name": "SecretaryManager.simulateNodeBeingLate", + "line_range": [ + 408, + 412 + ], + "centrality": 1 + }, + { + "uuid": "sym-69b2fc8c4e62020ca15890f1", + "level": "L3", + "label": "SecretaryManager.receiveValidatorPhase", + "file_path": "src/libs/consensus/v2/types/secretaryManager.ts", + "symbol_name": "SecretaryManager.receiveValidatorPhase", + "line_range": [ + 414, + 473 + ], + "centrality": 1 + }, + { + "uuid": "sym-5311b846d2f0732639ef5fd5", + "level": "L3", + "label": "SecretaryManager.releaseWaitingRoutine", + "file_path": "src/libs/consensus/v2/types/secretaryManager.ts", + "symbol_name": "SecretaryManager.releaseWaitingRoutine", + "line_range": [ + 478, + 502 + ], + "centrality": 1 + }, + { + "uuid": "sym-0534ba9f686cfc223b17d309", + "level": "L3", + "label": "SecretaryManager.shouldReleaseWaitingMembers", + "file_path": "src/libs/consensus/v2/types/secretaryManager.ts", + "symbol_name": "SecretaryManager.shouldReleaseWaitingMembers", + "line_range": [ + 509, + 521 + ], + "centrality": 1 + }, + { + "uuid": "sym-3cf158bf5511b0f35b37c016", + "level": "L3", + "label": "SecretaryManager.releaseWaitingMembers", + "file_path": "src/libs/consensus/v2/types/secretaryManager.ts", + "symbol_name": "SecretaryManager.releaseWaitingMembers", + "line_range": [ + 528, + 616 + ], + "centrality": 1 + }, + { + "uuid": "sym-10211a30b965f147b9b74ec5", + "level": "L3", + "label": "SecretaryManager.receiveGreenLight", + "file_path": "src/libs/consensus/v2/types/secretaryManager.ts", + "symbol_name": "SecretaryManager.receiveGreenLight", + "line_range": [ + 624, + 689 + ], + "centrality": 1 + }, + { + "uuid": "sym-768bb4fdd7199b0134c39dfb", + "level": "L3", + "label": "SecretaryManager.getWaitingMembers", + "file_path": "src/libs/consensus/v2/types/secretaryManager.ts", + "symbol_name": "SecretaryManager.getWaitingMembers", + "line_range": [ + 696, + 709 + ], + "centrality": 1 + }, + { + "uuid": "sym-48e4099783c4eb841ccd2f70", + "level": "L3", + "label": "SecretaryManager.sendOurValidatorPhaseToSecretary", + "file_path": "src/libs/consensus/v2/types/secretaryManager.ts", + "symbol_name": "SecretaryManager.sendOurValidatorPhaseToSecretary", + "line_range": [ + 715, + 878 + ], + "centrality": 1 + }, + { + "uuid": "sym-bb91b975550883cfdd44eb71", + "level": "L3", + "label": "SecretaryManager.endConsensusRoutine", + "file_path": "src/libs/consensus/v2/types/secretaryManager.ts", + "symbol_name": "SecretaryManager.endConsensusRoutine", + "line_range": [ + 880, + 940 + ], + "centrality": 1 + }, + { + "uuid": "sym-d6f03b0c7bdecce24c1a8b1d", + "level": "L3", + "label": "SecretaryManager.setOurValidatorPhase", + "file_path": "src/libs/consensus/v2/types/secretaryManager.ts", + "symbol_name": "SecretaryManager.setOurValidatorPhase", + "line_range": [ + 949, + 955 + ], + "centrality": 1 + }, + { + "uuid": "sym-e9eeedb988fa9f0d93d85898", + "level": "L3", + "label": "SecretaryManager.getInstance", + "file_path": "src/libs/consensus/v2/types/secretaryManager.ts", + "symbol_name": "SecretaryManager.getInstance", + "line_range": [ + 958, + 977 + ], + "centrality": 1 + }, + { + "uuid": "sym-a726f0c8a505dca89d7112eb", + "level": "L3", + "label": "SecretaryManager.getSecretaryBlockTimestamp", + "file_path": "src/libs/consensus/v2/types/secretaryManager.ts", + "symbol_name": "SecretaryManager.getSecretaryBlockTimestamp", + "line_range": [ + 984, + 1002 + ], + "centrality": 1 + }, + { + "uuid": "sym-fb2870f850b894405cc6b6f4", + "level": "L2", + "label": "SecretaryManager", + "file_path": "src/libs/consensus/v2/types/secretaryManager.ts", + "symbol_name": "SecretaryManager", + "line_range": [ + 15, + 1003 + ], + "centrality": 26 + }, + { + "uuid": "sym-c06b4d496f43bc591932905d", + "level": "L3", + "label": "Shard::api", + "file_path": "src/libs/consensus/v2/types/shardTypes.ts", + "symbol_name": "Shard::api", + "line_range": [ + 4, + 10 + ], + "centrality": 1 + }, + { + "uuid": "sym-e4b8097a5ba3819fbeaf9658", + "level": "L2", + "label": "Shard", + "file_path": "src/libs/consensus/v2/types/shardTypes.ts", + "symbol_name": "Shard", + "line_range": [ + 4, + 10 + ], + "centrality": 2 + }, + { + "uuid": "sym-268e622d0ec0e2c563283be3", + "level": "L3", + "label": "ValidationPhaseStatus::api", + "file_path": "src/libs/consensus/v2/types/validationStatusTypes.ts", + "symbol_name": "ValidationPhaseStatus::api", + "line_range": [ + 20, + 27 + ], + "centrality": 1 + }, + { + "uuid": "sym-8450a6eb559ca4627e196e23", + "level": "L2", + "label": "ValidationPhaseStatus", + "file_path": "src/libs/consensus/v2/types/validationStatusTypes.ts", + "symbol_name": "ValidationPhaseStatus", + "line_range": [ + 20, + 27 + ], + "centrality": 2 + }, + { + "uuid": "sym-c2ac5bb71bdb602bdd9aa98b", + "level": "L3", + "label": "ValidationPhase::api", + "file_path": "src/libs/consensus/v2/types/validationStatusTypes.ts", + "symbol_name": "ValidationPhase::api", + "line_range": [ + 30, + 37 + ], + "centrality": 1 + }, + { + "uuid": "sym-c01d178ff00381d6e5d2c43d", + "level": "L2", + "label": "ValidationPhase", + "file_path": "src/libs/consensus/v2/types/validationStatusTypes.ts", + "symbol_name": "ValidationPhase", + "line_range": [ + 30, + 37 + ], + "centrality": 2 + }, + { + "uuid": "sym-ca3dbc3c56cb1055cd0a0a89", + "level": "L3", + "label": "emptyValidationPhase", + "file_path": "src/libs/consensus/v2/types/validationStatusTypes.ts", + "symbol_name": "emptyValidationPhase", + "line_range": [ + 40, + 55 + ], + "centrality": 1 + }, + { + "uuid": "sym-e5d0b42c6f9912d4ac96df07", + "level": "L3", + "label": "Cryptography::api", + "file_path": "src/libs/crypto/cryptography.ts", + "symbol_name": "Cryptography::api", + "line_range": [ + 19, + 252 + ], + "centrality": 1 + }, + { + "uuid": "sym-c94aaedf877b31be4784c658", + "level": "L3", + "label": "Cryptography.new", + "file_path": "src/libs/crypto/cryptography.ts", + "symbol_name": "Cryptography.new", + "line_range": [ + 20, + 25 + ], + "centrality": 1 + }, + { + "uuid": "sym-6ad07b078d049901d4ccfed5", + "level": "L3", + "label": "Cryptography.newFromSeed", + "file_path": "src/libs/crypto/cryptography.ts", + "symbol_name": "Cryptography.newFromSeed", + "line_range": [ + 28, + 30 + ], + "centrality": 1 + }, + { + "uuid": "sym-1db75ffac09598cb3cfb34c1", + "level": "L3", + "label": "Cryptography.save", + "file_path": "src/libs/crypto/cryptography.ts", + "symbol_name": "Cryptography.save", + "line_range": [ + 33, + 41 + ], + "centrality": 1 + }, + { + "uuid": "sym-3e07be48eec727726678254a", + "level": "L3", + "label": "Cryptography.saveToHex", + "file_path": "src/libs/crypto/cryptography.ts", + "symbol_name": "Cryptography.saveToHex", + "line_range": [ + 43, + 50 + ], + "centrality": 1 + }, + { + "uuid": "sym-5fdfacd14d17871a556566d7", + "level": "L3", + "label": "Cryptography.load", + "file_path": "src/libs/crypto/cryptography.ts", + "symbol_name": "Cryptography.load", + "line_range": [ + 52, + 65 + ], + "centrality": 1 + }, + { + "uuid": "sym-4d5e1dcfb557a12f53357826", + "level": "L3", + "label": "Cryptography.loadFromHex", + "file_path": "src/libs/crypto/cryptography.ts", + "symbol_name": "Cryptography.loadFromHex", + "line_range": [ + 67, + 90 + ], + "centrality": 1 + }, + { + "uuid": "sym-45cd1de4f2eb8d8a20b32d8d", + "level": "L3", + "label": "Cryptography.loadFromBufferString", + "file_path": "src/libs/crypto/cryptography.ts", + "symbol_name": "Cryptography.loadFromBufferString", + "line_range": [ + 92, + 99 + ], + "centrality": 1 + }, + { + "uuid": "sym-5087892a29105232bc1c95bb", + "level": "L3", + "label": "Cryptography.sign", + "file_path": "src/libs/crypto/cryptography.ts", + "symbol_name": "Cryptography.sign", + "line_range": [ + 101, + 117 + ], + "centrality": 1 + }, + { + "uuid": "sym-3d9c34a3fca6e49261b71c65", + "level": "L3", + "label": "Cryptography.verify", + "file_path": "src/libs/crypto/cryptography.ts", + "symbol_name": "Cryptography.verify", + "line_range": [ + 119, + 183 + ], + "centrality": 1 + }, + { + "uuid": "sym-1447dd6a4335c05fb5ed3cb2", + "level": "L2", + "label": "Cryptography", + "file_path": "src/libs/crypto/cryptography.ts", + "symbol_name": "Cryptography", + "line_range": [ + 19, + 252 + ], + "centrality": 11 + }, + { + "uuid": "sym-b62136244c8ea0814eedab1d", + "level": "L3", + "label": "forgeToHex", + "file_path": "src/libs/crypto/forgeUtils.ts", + "symbol_name": "forgeToHex", + "line_range": [ + 4, + 16 + ], + "centrality": 1 + }, + { + "uuid": "sym-2a8fb09cf87c7ed8b2e472f7", + "level": "L3", + "label": "hexToForge", + "file_path": "src/libs/crypto/forgeUtils.ts", + "symbol_name": "hexToForge", + "line_range": [ + 20, + 50 + ], + "centrality": 1 + }, + { + "uuid": "sym-e4ce5a5590c74675e5d0843d", + "level": "L3", + "label": "Hashing::api", + "file_path": "src/libs/crypto/hashing.ts", + "symbol_name": "Hashing::api", + "line_range": [ + 15, + 26 + ], + "centrality": 1 + }, + { + "uuid": "sym-71f146aad1749b8d9048fdb9", + "level": "L3", + "label": "Hashing.sha256", + "file_path": "src/libs/crypto/hashing.ts", + "symbol_name": "Hashing.sha256", + "line_range": [ + 16, + 20 + ], + "centrality": 1 + }, + { + "uuid": "sym-e932c1609a686ad5f6432fa2", + "level": "L3", + "label": "Hashing.sha256Bytes", + "file_path": "src/libs/crypto/hashing.ts", + "symbol_name": "Hashing.sha256Bytes", + "line_range": [ + 23, + 25 + ], + "centrality": 1 + }, + { + "uuid": "sym-3435e923dc5c81930b0c8a24", + "level": "L2", + "label": "Hashing", + "file_path": "src/libs/crypto/hashing.ts", + "symbol_name": "Hashing", + "line_range": [ + 15, + 26 + ], + "centrality": 4 + }, + { + "uuid": "sym-478e8ddcf7388b01c25418b2", + "level": "L3", + "label": "cryptography", + "file_path": "src/libs/crypto/index.ts", + "symbol_name": "cryptography", + "line_range": [ + 12, + 12 + ], + "centrality": 1 + }, + { + "uuid": "sym-7ffbcc1ce07d7b3b23916771", + "level": "L3", + "label": "hashing", + "file_path": "src/libs/crypto/index.ts", + "symbol_name": "hashing", + "line_range": [ + 13, + 13 + ], + "centrality": 1 + }, + { + "uuid": "sym-a066fcb7bd034599296b5c63", + "level": "L3", + "label": "rsa", + "file_path": "src/libs/crypto/index.ts", + "symbol_name": "rsa", + "line_range": [ + 14, + 14 + ], + "centrality": 1 + }, + { + "uuid": "sym-00cbbbcdb0b955db9f940293", + "level": "L3", + "label": "RSA::api", + "file_path": "src/libs/crypto/rsa.ts", + "symbol_name": "RSA::api", + "line_range": [ + 14, + 63 + ], + "centrality": 1 + }, + { + "uuid": "sym-80491bfd51e3d62b35bc137c", + "level": "L3", + "label": "RSA.new", + "file_path": "src/libs/crypto/rsa.ts", + "symbol_name": "RSA.new", + "line_range": [ + 16, + 27 + ], + "centrality": 1 + }, + { + "uuid": "sym-3510b71d5489f9c401a9dc5e", + "level": "L3", + "label": "RSA.sign", + "file_path": "src/libs/crypto/rsa.ts", + "symbol_name": "RSA.sign", + "line_range": [ + 30, + 35 + ], + "centrality": 1 + }, + { + "uuid": "sym-8c4521928e9d317614012781", + "level": "L3", + "label": "RSA.verify", + "file_path": "src/libs/crypto/rsa.ts", + "symbol_name": "RSA.verify", + "line_range": [ + 38, + 47 + ], + "centrality": 1 + }, + { + "uuid": "sym-30eead59051be586144da020", + "level": "L3", + "label": "RSA.encrypt", + "file_path": "src/libs/crypto/rsa.ts", + "symbol_name": "RSA.encrypt", + "line_range": [ + 50, + 53 + ], + "centrality": 1 + }, + { + "uuid": "sym-0c100fc39b8f04913905c496", + "level": "L3", + "label": "RSA.decrypt", + "file_path": "src/libs/crypto/rsa.ts", + "symbol_name": "RSA.decrypt", + "line_range": [ + 56, + 62 + ], + "centrality": 1 + }, + { + "uuid": "sym-de79dd64a40f89fbb6d128ae", + "level": "L2", + "label": "RSA", + "file_path": "src/libs/crypto/rsa.ts", + "symbol_name": "RSA", + "line_range": [ + 14, + 63 + ], + "centrality": 7 + }, + { + "uuid": "sym-a2ae8aabb26ee6c4a5dcd1f1", + "level": "L3", + "label": "Identity::api", + "file_path": "src/libs/identity/identity.ts", + "symbol_name": "Identity::api", + "line_range": [ + 28, + 159 + ], + "centrality": 1 + }, + { + "uuid": "sym-d96c31998797e41a6b848c0d", + "level": "L3", + "label": "Identity.getInstance", + "file_path": "src/libs/identity/identity.ts", + "symbol_name": "Identity.getInstance", + "line_range": [ + 52, + 57 + ], + "centrality": 1 + }, + { + "uuid": "sym-a6adf2f17e7583aff2cc5411", + "level": "L3", + "label": "Identity.ensureIdentity", + "file_path": "src/libs/identity/identity.ts", + "symbol_name": "Identity.ensureIdentity", + "line_range": [ + 62, + 83 + ], + "centrality": 1 + }, + { + "uuid": "sym-86e7b8627dd8998cff427159", + "level": "L3", + "label": "Identity.getPublicIP", + "file_path": "src/libs/identity/identity.ts", + "symbol_name": "Identity.getPublicIP", + "line_range": [ + 85, + 88 + ], + "centrality": 1 + }, + { + "uuid": "sym-a03cefb08d5d832286f18983", + "level": "L3", + "label": "Identity.getPublicKeyHex", + "file_path": "src/libs/identity/identity.ts", + "symbol_name": "Identity.getPublicKeyHex", + "line_range": [ + 90, + 92 + ], + "centrality": 1 + }, + { + "uuid": "sym-bc81dd6cd59401b6fd78323a", + "level": "L3", + "label": "Identity.setPublicPort", + "file_path": "src/libs/identity/identity.ts", + "symbol_name": "Identity.setPublicPort", + "line_range": [ + 94, + 96 + ], + "centrality": 1 + }, + { + "uuid": "sym-66305b056cc80ae18d7fb7ac", + "level": "L3", + "label": "Identity.getConnectionString", + "file_path": "src/libs/identity/identity.ts", + "symbol_name": "Identity.getConnectionString", + "line_range": [ + 98, + 100 + ], + "centrality": 1 + }, + { + "uuid": "sym-f30624819d473bf882e23852", + "level": "L3", + "label": "Identity.mnemonicToSeed", + "file_path": "src/libs/identity/identity.ts", + "symbol_name": "Identity.mnemonicToSeed", + "line_range": [ + 115, + 130 + ], + "centrality": 1 + }, + { + "uuid": "sym-499b75c3978caaaad3d70456", + "level": "L3", + "label": "Identity.loadIdentity", + "file_path": "src/libs/identity/identity.ts", + "symbol_name": "Identity.loadIdentity", + "line_range": [ + 138, + 158 + ], + "centrality": 1 + }, + { + "uuid": "sym-9246344e2f07f04e26846059", + "level": "L2", + "label": "Identity", + "file_path": "src/libs/identity/identity.ts", + "symbol_name": "Identity", + "line_range": [ + 28, + 159 + ], + "centrality": 10 + }, + { + "uuid": "sym-6e936872ac6e08ef9265f7e6", + "level": "L3", + "label": "Identity", + "file_path": "src/libs/identity/index.ts", + "symbol_name": "Identity", + "line_range": [ + 12, + 12 + ], + "centrality": 1 + }, + { + "uuid": "sym-5ae8aed9695985bfe76de157", + "level": "L3", + "label": "NomisIdentitySummary::api", + "file_path": "src/libs/identity/providers/nomisIdentityProvider.ts", + "symbol_name": "NomisIdentitySummary::api", + "line_range": [ + 14, + 14 + ], + "centrality": 1 + }, + { + "uuid": "sym-e7651dee3e697e21bb4b173e", + "level": "L2", + "label": "NomisIdentitySummary", + "file_path": "src/libs/identity/providers/nomisIdentityProvider.ts", + "symbol_name": "NomisIdentitySummary", + "line_range": [ + 14, + 14 + ], + "centrality": 2 + }, + { + "uuid": "sym-08f815d80cefd75cb3778d5c", + "level": "L3", + "label": "NomisImportOptions::api", + "file_path": "src/libs/identity/providers/nomisIdentityProvider.ts", + "symbol_name": "NomisImportOptions::api", + "line_range": [ + 16, + 21 + ], + "centrality": 1 + }, + { + "uuid": "sym-70cd0342713e391c581bfdc1", + "level": "L2", + "label": "NomisImportOptions", + "file_path": "src/libs/identity/providers/nomisIdentityProvider.ts", + "symbol_name": "NomisImportOptions", + "line_range": [ + 16, + 21 + ], + "centrality": 2 + }, + { + "uuid": "sym-d27bb0ecc07e0edfbb45db98", + "level": "L3", + "label": "NomisIdentityProvider::api", + "file_path": "src/libs/identity/providers/nomisIdentityProvider.ts", + "symbol_name": "NomisIdentityProvider::api", + "line_range": [ + 23, + 156 + ], + "centrality": 1 + }, + { + "uuid": "sym-4a18dbc9ae74cfc715acef2e", + "level": "L3", + "label": "NomisIdentityProvider.getWalletScore", + "file_path": "src/libs/identity/providers/nomisIdentityProvider.ts", + "symbol_name": "NomisIdentityProvider.getWalletScore", + "line_range": [ + 24, + 61 + ], + "centrality": 1 + }, + { + "uuid": "sym-cfd05571ce888587707fdf21", + "level": "L3", + "label": "NomisIdentityProvider.listIdentities", + "file_path": "src/libs/identity/providers/nomisIdentityProvider.ts", + "symbol_name": "NomisIdentityProvider.listIdentities", + "line_range": [ + 63, + 68 + ], + "centrality": 1 + }, + { + "uuid": "sym-02bb643864b28ec54f6bd102", + "level": "L2", + "label": "NomisIdentityProvider", + "file_path": "src/libs/identity/providers/nomisIdentityProvider.ts", + "symbol_name": "NomisIdentityProvider", + "line_range": [ + 23, + 156 + ], + "centrality": 5 + }, + { + "uuid": "sym-4c50bd826d82ec0f9d3122d5", + "level": "L3", + "label": "CrossChainTools::api", + "file_path": "src/libs/identity/tools/crosschain.ts", + "symbol_name": "CrossChainTools::api", + "line_range": [ + 8, + 185 + ], + "centrality": 1 + }, + { + "uuid": "sym-ae837a9398f38a1b4ff93d6f", + "level": "L3", + "label": "CrossChainTools.getEthTransactionsByAddress", + "file_path": "src/libs/identity/tools/crosschain.ts", + "symbol_name": "CrossChainTools.getEthTransactionsByAddress", + "line_range": [ + 23, + 79 + ], + "centrality": 1 + }, + { + "uuid": "sym-d893e963526d03d160b5c0be", + "level": "L3", + "label": "CrossChainTools.countEthTransactionsByAddress", + "file_path": "src/libs/identity/tools/crosschain.ts", + "symbol_name": "CrossChainTools.countEthTransactionsByAddress", + "line_range": [ + 87, + 105 + ], + "centrality": 1 + }, + { + "uuid": "sym-79fe6fcef068226cd66a69bb", + "level": "L3", + "label": "CrossChainTools.getSolanaTransactionsByAddress", + "file_path": "src/libs/identity/tools/crosschain.ts", + "symbol_name": "CrossChainTools.getSolanaTransactionsByAddress", + "line_range": [ + 115, + 162 + ], + "centrality": 1 + }, + { + "uuid": "sym-6725cb4ea48529df75fd1445", + "level": "L3", + "label": "CrossChainTools.countSolanaTransactionsByAddress", + "file_path": "src/libs/identity/tools/crosschain.ts", + "symbol_name": "CrossChainTools.countSolanaTransactionsByAddress", + "line_range": [ + 169, + 184 + ], + "centrality": 1 + }, + { + "uuid": "sym-0d364798a0a06efaa91eb9d1", + "level": "L2", + "label": "CrossChainTools", + "file_path": "src/libs/identity/tools/crosschain.ts", + "symbol_name": "CrossChainTools", + "line_range": [ + 8, + 185 + ], + "centrality": 6 + }, + { + "uuid": "sym-3c9b9e66f6b1610394863a31", + "level": "L3", + "label": "DiscordMessage::api", + "file_path": "src/libs/identity/tools/discord.ts", + "symbol_name": "DiscordMessage::api", + "line_range": [ + 5, + 30 + ], + "centrality": 1 + }, + { + "uuid": "sym-8aee505c10e81a828d772a8f", + "level": "L2", + "label": "DiscordMessage", + "file_path": "src/libs/identity/tools/discord.ts", + "symbol_name": "DiscordMessage", + "line_range": [ + 5, + 30 + ], + "centrality": 2 + }, + { + "uuid": "sym-2a25f06310b2ac9c6ba22a9a", + "level": "L3", + "label": "Discord::api", + "file_path": "src/libs/identity/tools/discord.ts", + "symbol_name": "Discord::api", + "line_range": [ + 32, + 167 + ], + "centrality": 1 + }, + { + "uuid": "sym-8c33d38f419fe8a74c58fbe1", + "level": "L3", + "label": "Discord.extractMessageDetails", + "file_path": "src/libs/identity/tools/discord.ts", + "symbol_name": "Discord.extractMessageDetails", + "line_range": [ + 66, + 114 + ], + "centrality": 1 + }, + { + "uuid": "sym-d1c3b22359c1e904c5548b0c", + "level": "L3", + "label": "Discord.getMessageById", + "file_path": "src/libs/identity/tools/discord.ts", + "symbol_name": "Discord.getMessageById", + "line_range": [ + 144, + 153 + ], + "centrality": 1 + }, + { + "uuid": "sym-cafb910907543389ada5a5f8", + "level": "L3", + "label": "Discord.getMessageByUrl", + "file_path": "src/libs/identity/tools/discord.ts", + "symbol_name": "Discord.getMessageByUrl", + "line_range": [ + 156, + 159 + ], + "centrality": 1 + }, + { + "uuid": "sym-dacd66cc49bfa3589fd39daf", + "level": "L3", + "label": "Discord.getInstance", + "file_path": "src/libs/identity/tools/discord.ts", + "symbol_name": "Discord.getInstance", + "line_range": [ + 161, + 166 + ], + "centrality": 1 + }, + { + "uuid": "sym-1251f543b194078832e93227", + "level": "L2", + "label": "Discord", + "file_path": "src/libs/identity/tools/discord.ts", + "symbol_name": "Discord", + "line_range": [ + 32, + 167 + ], + "centrality": 6 + }, + { + "uuid": "sym-624bf6cdfe56ca8483217b9a", + "level": "L3", + "label": "NomisWalletScorePayload::api", + "file_path": "src/libs/identity/tools/nomis.ts", + "symbol_name": "NomisWalletScorePayload::api", + "line_range": [ + 5, + 34 + ], + "centrality": 1 + }, + { + "uuid": "sym-35058dc9401f299a3ecafdd9", + "level": "L2", + "label": "NomisWalletScorePayload", + "file_path": "src/libs/identity/tools/nomis.ts", + "symbol_name": "NomisWalletScorePayload", + "line_range": [ + 5, + 34 + ], + "centrality": 2 + }, + { + "uuid": "sym-dcff225a257a375406e03bd6", + "level": "L3", + "label": "NomisScoreRequestOptions::api", + "file_path": "src/libs/identity/tools/nomis.ts", + "symbol_name": "NomisScoreRequestOptions::api", + "line_range": [ + 36, + 40 + ], + "centrality": 1 + }, + { + "uuid": "sym-a6d2f8c35523341aeef50317", + "level": "L2", + "label": "NomisScoreRequestOptions", + "file_path": "src/libs/identity/tools/nomis.ts", + "symbol_name": "NomisScoreRequestOptions", + "line_range": [ + 36, + 40 + ], + "centrality": 2 + }, + { + "uuid": "sym-f7284b2c87bedd3283d87b7c", + "level": "L3", + "label": "NomisApiClient::api", + "file_path": "src/libs/identity/tools/nomis.ts", + "symbol_name": "NomisApiClient::api", + "line_range": [ + 55, + 159 + ], + "centrality": 1 + }, + { + "uuid": "sym-ca6bb0b08dd15d039112edce", + "level": "L3", + "label": "NomisApiClient.getInstance", + "file_path": "src/libs/identity/tools/nomis.ts", + "symbol_name": "NomisApiClient.getInstance", + "line_range": [ + 85, + 91 + ], + "centrality": 1 + }, + { + "uuid": "sym-ebc7f1171082535469f04f37", + "level": "L3", + "label": "NomisApiClient.getWalletScore", + "file_path": "src/libs/identity/tools/nomis.ts", + "symbol_name": "NomisApiClient.getWalletScore", + "line_range": [ + 93, + 154 + ], + "centrality": 1 + }, + { + "uuid": "sym-918f122ab3c74c4aed33144c", + "level": "L2", + "label": "NomisApiClient", + "file_path": "src/libs/identity/tools/nomis.ts", + "symbol_name": "NomisApiClient", + "line_range": [ + 55, + 159 + ], + "centrality": 4 + }, + { + "uuid": "sym-67a715a261c2e12742293927", + "level": "L3", + "label": "Twitter::api", + "file_path": "src/libs/identity/tools/twitter.ts", + "symbol_name": "Twitter::api", + "line_range": [ + 407, + 589 + ], + "centrality": 1 + }, + { + "uuid": "sym-3006ba9f0477eb57baf64679", + "level": "L3", + "label": "Twitter.extractTweetDetails", + "file_path": "src/libs/identity/tools/twitter.ts", + "symbol_name": "Twitter.extractTweetDetails", + "line_range": [ + 420, + 465 + ], + "centrality": 1 + }, + { + "uuid": "sym-20016088f1d08b5e28873771", + "level": "L3", + "label": "Twitter.makeRequest", + "file_path": "src/libs/identity/tools/twitter.ts", + "symbol_name": "Twitter.makeRequest", + "line_range": [ + 473, + 485 + ], + "centrality": 1 + }, + { + "uuid": "sym-69f096bbd5c10a59ec215101", + "level": "L3", + "label": "Twitter.getTweetById", + "file_path": "src/libs/identity/tools/twitter.ts", + "symbol_name": "Twitter.getTweetById", + "line_range": [ + 487, + 497 + ], + "centrality": 1 + }, + { + "uuid": "sym-584d8c1e5facf721d03d3b31", + "level": "L3", + "label": "Twitter.getTweetByUrl", + "file_path": "src/libs/identity/tools/twitter.ts", + "symbol_name": "Twitter.getTweetByUrl", + "line_range": [ + 499, + 502 + ], + "centrality": 1 + }, + { + "uuid": "sym-d5c23b7e0348db000e139ff7", + "level": "L3", + "label": "Twitter.checkFollow", + "file_path": "src/libs/identity/tools/twitter.ts", + "symbol_name": "Twitter.checkFollow", + "line_range": [ + 504, + 516 + ], + "centrality": 1 + }, + { + "uuid": "sym-ac5e1756fdf78068d6983990", + "level": "L3", + "label": "Twitter.getTimeline", + "file_path": "src/libs/identity/tools/twitter.ts", + "symbol_name": "Twitter.getTimeline", + "line_range": [ + 518, + 535 + ], + "centrality": 1 + }, + { + "uuid": "sym-c4426882c67f5c79e389ae4e", + "level": "L3", + "label": "Twitter.getFollowers", + "file_path": "src/libs/identity/tools/twitter.ts", + "symbol_name": "Twitter.getFollowers", + "line_range": [ + 537, + 554 + ], + "centrality": 1 + }, + { + "uuid": "sym-9eaab80712308d2527f57103", + "level": "L3", + "label": "Twitter.checkIsBot", + "file_path": "src/libs/identity/tools/twitter.ts", + "symbol_name": "Twitter.checkIsBot", + "line_range": [ + 556, + 575 + ], + "centrality": 1 + }, + { + "uuid": "sym-df06fb01fc8a797579c8ff4c", + "level": "L3", + "label": "Twitter.getInstance", + "file_path": "src/libs/identity/tools/twitter.ts", + "symbol_name": "Twitter.getInstance", + "line_range": [ + 577, + 588 + ], + "centrality": 1 + }, + { + "uuid": "sym-d70e965fb2fa15cbae8e28f6", + "level": "L2", + "label": "Twitter", + "file_path": "src/libs/identity/tools/twitter.ts", + "symbol_name": "Twitter", + "line_range": [ + 407, + 589 + ], + "centrality": 11 + }, + { + "uuid": "sym-e5cb9daa8949710c5b7c5ece", + "level": "L3", + "label": "L2PSBatchPayload::api", + "file_path": "src/libs/l2ps/L2PSBatchAggregator.ts", + "symbol_name": "L2PSBatchPayload::api", + "line_range": [ + 19, + 40 + ], + "centrality": 1 + }, + { + "uuid": "sym-a80634c6150e4ca0c1ff8c8e", + "level": "L2", + "label": "L2PSBatchPayload", + "file_path": "src/libs/l2ps/L2PSBatchAggregator.ts", + "symbol_name": "L2PSBatchPayload", + "line_range": [ + 19, + 40 + ], + "centrality": 2 + }, + { + "uuid": "sym-d8d437339e4ab9fc5178e4e3", + "level": "L3", + "label": "L2PSBatchAggregator::api", + "file_path": "src/libs/l2ps/L2PSBatchAggregator.ts", + "symbol_name": "L2PSBatchAggregator::api", + "line_range": [ + 60, + 877 + ], + "centrality": 1 + }, + { + "uuid": "sym-2c271a791fcb37bd28c35865", + "level": "L3", + "label": "L2PSBatchAggregator.getInstance", + "file_path": "src/libs/l2ps/L2PSBatchAggregator.ts", + "symbol_name": "L2PSBatchAggregator.getInstance", + "line_range": [ + 126, + 131 + ], + "centrality": 1 + }, + { + "uuid": "sym-4c05f83ad9df2e0a4bf4345b", + "level": "L3", + "label": "L2PSBatchAggregator.start", + "file_path": "src/libs/l2ps/L2PSBatchAggregator.ts", + "symbol_name": "L2PSBatchAggregator.start", + "line_range": [ + 141, + 163 + ], + "centrality": 1 + }, + { + "uuid": "sym-a02371360ecb1b189e94f7f7", + "level": "L3", + "label": "L2PSBatchAggregator.stop", + "file_path": "src/libs/l2ps/L2PSBatchAggregator.ts", + "symbol_name": "L2PSBatchAggregator.stop", + "line_range": [ + 193, + 220 + ], + "centrality": 1 + }, + { + "uuid": "sym-9b3d5d43fddffa465a2e6e3a", + "level": "L3", + "label": "L2PSBatchAggregator.getStatistics", + "file_path": "src/libs/l2ps/L2PSBatchAggregator.ts", + "symbol_name": "L2PSBatchAggregator.getStatistics", + "line_range": [ + 837, + 839 + ], + "centrality": 1 + }, + { + "uuid": "sym-ad193a03f24f1159ca71a32f", + "level": "L3", + "label": "L2PSBatchAggregator.getStatus", + "file_path": "src/libs/l2ps/L2PSBatchAggregator.ts", + "symbol_name": "L2PSBatchAggregator.getStatus", + "line_range": [ + 846, + 858 + ], + "centrality": 1 + }, + { + "uuid": "sym-1c98b6e9b9a0b4ef1cd0ecbc", + "level": "L3", + "label": "L2PSBatchAggregator.forceAggregation", + "file_path": "src/libs/l2ps/L2PSBatchAggregator.ts", + "symbol_name": "L2PSBatchAggregator.forceAggregation", + "line_range": [ + 865, + 876 + ], + "centrality": 1 + }, + { + "uuid": "sym-e3f654b992e0b0bf06a68abf", + "level": "L2", + "label": "L2PSBatchAggregator", + "file_path": "src/libs/l2ps/L2PSBatchAggregator.ts", + "symbol_name": "L2PSBatchAggregator", + "line_range": [ + 60, + 877 + ], + "centrality": 8 + }, + { + "uuid": "sym-a0e1be197d6920a4bf0e1a91", + "level": "L3", + "label": "discoverL2PSParticipants", + "file_path": "src/libs/l2ps/L2PSConcurrentSync.ts", + "symbol_name": "discoverL2PSParticipants", + "line_range": [ + 26, + 82 + ], + "centrality": 2 + }, + { + "uuid": "sym-a21c13338ed84dbc2259e0be", + "level": "L3", + "label": "addL2PSParticipant", + "file_path": "src/libs/l2ps/L2PSConcurrentSync.ts", + "symbol_name": "addL2PSParticipant", + "line_range": [ + 87, + 92 + ], + "centrality": 1 + }, + { + "uuid": "sym-43c1406a11c590e987931561", + "level": "L3", + "label": "clearL2PSCache", + "file_path": "src/libs/l2ps/L2PSConcurrentSync.ts", + "symbol_name": "clearL2PSCache", + "line_range": [ + 97, + 99 + ], + "centrality": 1 + }, + { + "uuid": "sym-172932487433d3ea2b7e938b", + "level": "L3", + "label": "syncL2PSWithPeer", + "file_path": "src/libs/l2ps/L2PSConcurrentSync.ts", + "symbol_name": "syncL2PSWithPeer", + "line_range": [ + 105, + 137 + ], + "centrality": 1 + }, + { + "uuid": "sym-45c0e0b348a5d87bab178a86", + "level": "L3", + "label": "exchangeL2PSParticipation", + "file_path": "src/libs/l2ps/L2PSConcurrentSync.ts", + "symbol_name": "exchangeL2PSParticipation", + "line_range": [ + 142, + 145 + ], + "centrality": 2 + }, + { + "uuid": "sym-17bce899312ef74e6bda04cf", + "level": "L3", + "label": "L2PSConsensusResult::api", + "file_path": "src/libs/l2ps/L2PSConsensus.ts", + "symbol_name": "L2PSConsensusResult::api", + "line_range": [ + 40, + 55 + ], + "centrality": 1 + }, + { + "uuid": "sym-7f56f2e032400167794c5cde", + "level": "L2", + "label": "L2PSConsensusResult", + "file_path": "src/libs/l2ps/L2PSConsensus.ts", + "symbol_name": "L2PSConsensusResult", + "line_range": [ + 40, + 55 + ], + "centrality": 2 + }, + { + "uuid": "sym-8bdfa293ce52a42f7652c988", + "level": "L3", + "label": "L2PSConsensus::api", + "file_path": "src/libs/l2ps/L2PSConsensus.ts", + "symbol_name": "L2PSConsensus::api", + "line_range": [ + 62, + 494 + ], + "centrality": 1 + }, + { + "uuid": "sym-831248ff23fbc8a042573d3d", + "level": "L3", + "label": "L2PSConsensus.applyPendingProofs", + "file_path": "src/libs/l2ps/L2PSConsensus.ts", + "symbol_name": "L2PSConsensus.applyPendingProofs", + "line_range": [ + 130, + 187 + ], + "centrality": 1 + }, + { + "uuid": "sym-fd41948d7ef0926f2abbef25", + "level": "L3", + "label": "L2PSConsensus.rollbackProofsForBlock", + "file_path": "src/libs/l2ps/L2PSConsensus.ts", + "symbol_name": "L2PSConsensus.rollbackProofsForBlock", + "line_range": [ + 417, + 475 + ], + "centrality": 1 + }, + { + "uuid": "sym-8e801cfbfaba0ef3a4bfc08d", + "level": "L3", + "label": "L2PSConsensus.getBlockStats", + "file_path": "src/libs/l2ps/L2PSConsensus.ts", + "symbol_name": "L2PSConsensus.getBlockStats", + "line_range": [ + 480, + 493 + ], + "centrality": 1 + }, + { + "uuid": "sym-dfc05adc455d203de748b3a8", + "level": "L2", + "label": "L2PSConsensus", + "file_path": "src/libs/l2ps/L2PSConsensus.ts", + "symbol_name": "L2PSConsensus", + "line_range": [ + 62, + 494 + ], + "centrality": 5 + }, + { + "uuid": "sym-47afbbc071054930760a71ec", + "level": "L3", + "label": "L2PSHashService::api", + "file_path": "src/libs/l2ps/L2PSHashService.ts", + "symbol_name": "L2PSHashService::api", + "line_range": [ + 29, + 525 + ], + "centrality": 1 + }, + { + "uuid": "sym-fa7bdf8575acec072c44d87e", + "level": "L3", + "label": "L2PSHashService.getInstance", + "file_path": "src/libs/l2ps/L2PSHashService.ts", + "symbol_name": "L2PSHashService.getInstance", + "line_range": [ + 72, + 77 + ], + "centrality": 1 + }, + { + "uuid": "sym-5806cf014947d56b477072cf", + "level": "L3", + "label": "L2PSHashService.start", + "file_path": "src/libs/l2ps/L2PSHashService.ts", + "symbol_name": "L2PSHashService.start", + "line_range": [ + 87, + 130 + ], + "centrality": 1 + }, + { + "uuid": "sym-ed3191a6a92de3cca3eca041", + "level": "L3", + "label": "L2PSHashService.stop", + "file_path": "src/libs/l2ps/L2PSHashService.ts", + "symbol_name": "L2PSHashService.stop", + "line_range": [ + 139, + 166 + ], + "centrality": 1 + }, + { + "uuid": "sym-c99cdd731f091e7b6eede0a4", + "level": "L3", + "label": "L2PSHashService.getStatistics", + "file_path": "src/libs/l2ps/L2PSHashService.ts", + "symbol_name": "L2PSHashService.getStatistics", + "line_range": [ + 485, + 487 + ], + "centrality": 1 + }, + { + "uuid": "sym-08d4f6621e5868c2e7298761", + "level": "L3", + "label": "L2PSHashService.getStatus", + "file_path": "src/libs/l2ps/L2PSHashService.ts", + "symbol_name": "L2PSHashService.getStatus", + "line_range": [ + 494, + 506 + ], + "centrality": 1 + }, + { + "uuid": "sym-ac3b2be1cf2aa6ae932b5ca3", + "level": "L3", + "label": "L2PSHashService.forceGeneration", + "file_path": "src/libs/l2ps/L2PSHashService.ts", + "symbol_name": "L2PSHashService.forceGeneration", + "line_range": [ + 513, + 524 + ], + "centrality": 1 + }, + { + "uuid": "sym-4b898ed7fd8e376c3dcc0fa4", + "level": "L2", + "label": "L2PSHashService", + "file_path": "src/libs/l2ps/L2PSHashService.ts", + "symbol_name": "L2PSHashService", + "line_range": [ + 29, + 525 + ], + "centrality": 10 + }, + { + "uuid": "sym-ab9e1f208621fd5510cbde8d", + "level": "L3", + "label": "ProofCreationResult::api", + "file_path": "src/libs/l2ps/L2PSProofManager.ts", + "symbol_name": "ProofCreationResult::api", + "line_range": [ + 50, + 55 + ], + "centrality": 1 + }, + { + "uuid": "sym-4291220b529d489dd8c2c906", + "level": "L2", + "label": "ProofCreationResult", + "file_path": "src/libs/l2ps/L2PSProofManager.ts", + "symbol_name": "ProofCreationResult", + "line_range": [ + 50, + 55 + ], + "centrality": 2 + }, + { + "uuid": "sym-e6ccef4d3d370fbaa7572337", + "level": "L3", + "label": "ProofApplicationResult::api", + "file_path": "src/libs/l2ps/L2PSProofManager.ts", + "symbol_name": "ProofApplicationResult::api", + "line_range": [ + 60, + 65 + ], + "centrality": 1 + }, + { + "uuid": "sym-1589a1e584764f6eb8336b5a", + "level": "L2", + "label": "ProofApplicationResult", + "file_path": "src/libs/l2ps/L2PSProofManager.ts", + "symbol_name": "ProofApplicationResult", + "line_range": [ + 60, + 65 + ], + "centrality": 2 + }, + { + "uuid": "sym-26ec3e6a23b13e6a7ed0966e", + "level": "L3", + "label": "L2PSProofManager::api", + "file_path": "src/libs/l2ps/L2PSProofManager.ts", + "symbol_name": "L2PSProofManager::api", + "line_range": [ + 72, + 362 + ], + "centrality": 1 + }, + { + "uuid": "sym-0b71fee0d1ec6d5a74be7f4c", + "level": "L3", + "label": "L2PSProofManager.createProof", + "file_path": "src/libs/l2ps/L2PSProofManager.ts", + "symbol_name": "L2PSProofManager.createProof", + "line_range": [ + 112, + 173 + ], + "centrality": 1 + }, + { + "uuid": "sym-daa74c90db8a33dcb0ec2371", + "level": "L3", + "label": "L2PSProofManager.getPendingProofs", + "file_path": "src/libs/l2ps/L2PSProofManager.ts", + "symbol_name": "L2PSProofManager.getPendingProofs", + "line_range": [ + 182, + 194 + ], + "centrality": 1 + }, + { + "uuid": "sym-2e2e66ddafbee3d7888773eb", + "level": "L3", + "label": "L2PSProofManager.getProofsForBlock", + "file_path": "src/libs/l2ps/L2PSProofManager.ts", + "symbol_name": "L2PSProofManager.getProofsForBlock", + "line_range": [ + 202, + 213 + ], + "centrality": 1 + }, + { + "uuid": "sym-8044943db3ed1935a237d515", + "level": "L3", + "label": "L2PSProofManager.verifyProof", + "file_path": "src/libs/l2ps/L2PSProofManager.ts", + "symbol_name": "L2PSProofManager.verifyProof", + "line_range": [ + 221, + 258 + ], + "centrality": 1 + }, + { + "uuid": "sym-6bb546b5a3ede7b2f84229b9", + "level": "L3", + "label": "L2PSProofManager.markProofApplied", + "file_path": "src/libs/l2ps/L2PSProofManager.ts", + "symbol_name": "L2PSProofManager.markProofApplied", + "line_range": [ + 266, + 276 + ], + "centrality": 1 + }, + { + "uuid": "sym-11e0c9793af13b02d531305d", + "level": "L3", + "label": "L2PSProofManager.markProofRejected", + "file_path": "src/libs/l2ps/L2PSProofManager.ts", + "symbol_name": "L2PSProofManager.markProofRejected", + "line_range": [ + 284, + 294 + ], + "centrality": 1 + }, + { + "uuid": "sym-bf14541c9f03ae606b9284e0", + "level": "L3", + "label": "L2PSProofManager.getProofByBatchHash", + "file_path": "src/libs/l2ps/L2PSProofManager.ts", + "symbol_name": "L2PSProofManager.getProofByBatchHash", + "line_range": [ + 302, + 305 + ], + "centrality": 1 + }, + { + "uuid": "sym-1c0cc65675b8167e5c4294e5", + "level": "L3", + "label": "L2PSProofManager.getProofs", + "file_path": "src/libs/l2ps/L2PSProofManager.ts", + "symbol_name": "L2PSProofManager.getProofs", + "line_range": [ + 315, + 335 + ], + "centrality": 1 + }, + { + "uuid": "sym-5db43f643de4a8334d9a9238", + "level": "L3", + "label": "L2PSProofManager.getStats", + "file_path": "src/libs/l2ps/L2PSProofManager.ts", + "symbol_name": "L2PSProofManager.getStats", + "line_range": [ + 340, + 361 + ], + "centrality": 1 + }, + { + "uuid": "sym-b21a801e0939b0bf2b33d962", + "level": "L2", + "label": "L2PSProofManager", + "file_path": "src/libs/l2ps/L2PSProofManager.ts", + "symbol_name": "L2PSProofManager", + "line_range": [ + 72, + 362 + ], + "centrality": 11 + }, + { + "uuid": "sym-27f8cb315a1d5f9c24544f69", + "level": "L3", + "label": "L2PSExecutionResult::api", + "file_path": "src/libs/l2ps/L2PSTransactionExecutor.ts", + "symbol_name": "L2PSExecutionResult::api", + "line_range": [ + 38, + 49 + ], + "centrality": 1 + }, + { + "uuid": "sym-2de50e452bfe268a492fe5f9", + "level": "L2", + "label": "L2PSExecutionResult", + "file_path": "src/libs/l2ps/L2PSTransactionExecutor.ts", + "symbol_name": "L2PSExecutionResult", + "line_range": [ + 38, + 49 + ], + "centrality": 2 + }, + { + "uuid": "sym-19d36c36107e8655af5d7fd3", + "level": "L3", + "label": "L2PSTransactionExecutor::api", + "file_path": "src/libs/l2ps/L2PSTransactionExecutor.ts", + "symbol_name": "L2PSTransactionExecutor::api", + "line_range": [ + 57, + 476 + ], + "centrality": 1 + }, + { + "uuid": "sym-93b168eacf2c938baa400513", + "level": "L3", + "label": "L2PSTransactionExecutor.execute", + "file_path": "src/libs/l2ps/L2PSTransactionExecutor.ts", + "symbol_name": "L2PSTransactionExecutor.execute", + "line_range": [ + 120, + 157 + ], + "centrality": 1 + }, + { + "uuid": "sym-c307df6cb4b1b232420fa6c0", + "level": "L3", + "label": "L2PSTransactionExecutor.recordTransaction", + "file_path": "src/libs/l2ps/L2PSTransactionExecutor.ts", + "symbol_name": "L2PSTransactionExecutor.recordTransaction", + "line_range": [ + 317, + 350 + ], + "centrality": 1 + }, + { + "uuid": "sym-35fba28731561b9bc332a14a", + "level": "L3", + "label": "L2PSTransactionExecutor.updateTransactionStatus", + "file_path": "src/libs/l2ps/L2PSTransactionExecutor.ts", + "symbol_name": "L2PSTransactionExecutor.updateTransactionStatus", + "line_range": [ + 355, + 385 + ], + "centrality": 1 + }, + { + "uuid": "sym-3f63d6b16b75553b0e99c85d", + "level": "L3", + "label": "L2PSTransactionExecutor.getAccountTransactions", + "file_path": "src/libs/l2ps/L2PSTransactionExecutor.ts", + "symbol_name": "L2PSTransactionExecutor.getAccountTransactions", + "line_range": [ + 390, + 412 + ], + "centrality": 1 + }, + { + "uuid": "sym-c1f5d92afff2b3686df79483", + "level": "L3", + "label": "L2PSTransactionExecutor.getTransactionByHash", + "file_path": "src/libs/l2ps/L2PSTransactionExecutor.ts", + "symbol_name": "L2PSTransactionExecutor.getTransactionByHash", + "line_range": [ + 417, + 429 + ], + "centrality": 1 + }, + { + "uuid": "sym-954b6ffd923957113b0c728a", + "level": "L3", + "label": "L2PSTransactionExecutor.getBalance", + "file_path": "src/libs/l2ps/L2PSTransactionExecutor.ts", + "symbol_name": "L2PSTransactionExecutor.getBalance", + "line_range": [ + 435, + 438 + ], + "centrality": 1 + }, + { + "uuid": "sym-a4a1620ae3de23766ad15ad4", + "level": "L3", + "label": "L2PSTransactionExecutor.getNonce", + "file_path": "src/libs/l2ps/L2PSTransactionExecutor.ts", + "symbol_name": "L2PSTransactionExecutor.getNonce", + "line_range": [ + 443, + 446 + ], + "centrality": 1 + }, + { + "uuid": "sym-a822d74085d8f72397857b15", + "level": "L3", + "label": "L2PSTransactionExecutor.getAccountState", + "file_path": "src/libs/l2ps/L2PSTransactionExecutor.ts", + "symbol_name": "L2PSTransactionExecutor.getAccountState", + "line_range": [ + 451, + 453 + ], + "centrality": 1 + }, + { + "uuid": "sym-997a716aa0bbfede4eceda6a", + "level": "L3", + "label": "L2PSTransactionExecutor.getNetworkStats", + "file_path": "src/libs/l2ps/L2PSTransactionExecutor.ts", + "symbol_name": "L2PSTransactionExecutor.getNetworkStats", + "line_range": [ + 458, + 475 + ], + "centrality": 1 + }, + { + "uuid": "sym-c9ceccc766be21a537a05305", + "level": "L2", + "label": "L2PSTransactionExecutor", + "file_path": "src/libs/l2ps/L2PSTransactionExecutor.ts", + "symbol_name": "L2PSTransactionExecutor", + "line_range": [ + 57, + 476 + ], + "centrality": 11 + }, + { + "uuid": "sym-4de4b6def4e23443eeffc542", + "level": "L3", + "label": "ParallelNetworks::api", + "file_path": "src/libs/l2ps/parallelNetworks.ts", + "symbol_name": "ParallelNetworks::api", + "line_range": [ + 83, + 451 + ], + "centrality": 1 + }, + { + "uuid": "sym-29a2b1c7f0a8a39cdffe219b", + "level": "L3", + "label": "ParallelNetworks.getInstance", + "file_path": "src/libs/l2ps/parallelNetworks.ts", + "symbol_name": "ParallelNetworks.getInstance", + "line_range": [ + 96, + 101 + ], + "centrality": 1 + }, + { + "uuid": "sym-aafd9c6d9db98cc7c5c0ea56", + "level": "L3", + "label": "ParallelNetworks.loadL2PS", + "file_path": "src/libs/l2ps/parallelNetworks.ts", + "symbol_name": "ParallelNetworks.loadL2PS", + "line_range": [ + 109, + 134 + ], + "centrality": 1 + }, + { + "uuid": "sym-aeaa314f6b50142cc32f9c3d", + "level": "L3", + "label": "ParallelNetworks.getL2PS", + "file_path": "src/libs/l2ps/parallelNetworks.ts", + "symbol_name": "ParallelNetworks.getL2PS", + "line_range": [ + 213, + 221 + ], + "centrality": 1 + }, + { + "uuid": "sym-36b6cff10252161c12781dc3", + "level": "L3", + "label": "ParallelNetworks.getAllL2PSIds", + "file_path": "src/libs/l2ps/parallelNetworks.ts", + "symbol_name": "ParallelNetworks.getAllL2PSIds", + "line_range": [ + 227, + 229 + ], + "centrality": 1 + }, + { + "uuid": "sym-8f7c95d1f4cf847566e547d8", + "level": "L3", + "label": "ParallelNetworks.loadAllL2PS", + "file_path": "src/libs/l2ps/parallelNetworks.ts", + "symbol_name": "ParallelNetworks.loadAllL2PS", + "line_range": [ + 235, + 261 + ], + "centrality": 1 + }, + { + "uuid": "sym-4d0cd68dc95fdba20ca8881e", + "level": "L3", + "label": "ParallelNetworks.encryptTransaction", + "file_path": "src/libs/l2ps/parallelNetworks.ts", + "symbol_name": "ParallelNetworks.encryptTransaction", + "line_range": [ + 270, + 293 + ], + "centrality": 1 + }, + { + "uuid": "sym-f1abc6862b1d0b36440db04a", + "level": "L3", + "label": "ParallelNetworks.decryptTransaction", + "file_path": "src/libs/l2ps/parallelNetworks.ts", + "symbol_name": "ParallelNetworks.decryptTransaction", + "line_range": [ + 301, + 324 + ], + "centrality": 1 + }, + { + "uuid": "sym-8536e2d1ed488580c2710e4b", + "level": "L3", + "label": "ParallelNetworks.isL2PSTransaction", + "file_path": "src/libs/l2ps/parallelNetworks.ts", + "symbol_name": "ParallelNetworks.isL2PSTransaction", + "line_range": [ + 331, + 333 + ], + "centrality": 1 + }, + { + "uuid": "sym-7dff1b0065281e707833c23b", + "level": "L3", + "label": "ParallelNetworks.getL2PSUidFromTransaction", + "file_path": "src/libs/l2ps/parallelNetworks.ts", + "symbol_name": "ParallelNetworks.getL2PSUidFromTransaction", + "line_range": [ + 340, + 363 + ], + "centrality": 1 + }, + { + "uuid": "sym-0cabe6285a709ea15e0bd36d", + "level": "L3", + "label": "ParallelNetworks.processL2PSTransaction", + "file_path": "src/libs/l2ps/parallelNetworks.ts", + "symbol_name": "ParallelNetworks.processL2PSTransaction", + "line_range": [ + 370, + 422 + ], + "centrality": 1 + }, + { + "uuid": "sym-5b8f00d966b8ca663f148d64", + "level": "L3", + "label": "ParallelNetworks.getL2PSConfig", + "file_path": "src/libs/l2ps/parallelNetworks.ts", + "symbol_name": "ParallelNetworks.getL2PSConfig", + "line_range": [ + 429, + 431 + ], + "centrality": 1 + }, + { + "uuid": "sym-c41905143e6699f28eb26389", + "level": "L3", + "label": "ParallelNetworks.isL2PSLoaded", + "file_path": "src/libs/l2ps/parallelNetworks.ts", + "symbol_name": "ParallelNetworks.isL2PSLoaded", + "line_range": [ + 438, + 440 + ], + "centrality": 1 + }, + { + "uuid": "sym-a21b4ff1c04b9173c57ae18b", + "level": "L3", + "label": "ParallelNetworks.unloadL2PS", + "file_path": "src/libs/l2ps/parallelNetworks.ts", + "symbol_name": "ParallelNetworks.unloadL2PS", + "line_range": [ + 447, + 450 + ], + "centrality": 1 + }, + { + "uuid": "sym-c6e8e3bf5cc44336d4a53bdd", + "level": "L2", + "label": "ParallelNetworks", + "file_path": "src/libs/l2ps/parallelNetworks.ts", + "symbol_name": "ParallelNetworks", + "line_range": [ + 83, + 451 + ], + "centrality": 15 + }, + { + "uuid": "sym-53d1518d6dfc17a1e9e5918d", + "level": "L3", + "label": "EncryptedTransaction::api", + "file_path": "src/libs/l2ps/types.ts", + "symbol_name": "EncryptedTransaction::api", + "line_range": [ + 14, + 20 + ], + "centrality": 1 + }, + { + "uuid": "sym-890d5872f24fa2a22e27e2e3", + "level": "L2", + "label": "EncryptedTransaction", + "file_path": "src/libs/l2ps/types.ts", + "symbol_name": "EncryptedTransaction", + "line_range": [ + 14, + 20 + ], + "centrality": 2 + }, + { + "uuid": "sym-b2396a7fda447bd25860da35", + "level": "L3", + "label": "SubnetPayload::api", + "file_path": "src/libs/l2ps/types.ts", + "symbol_name": "SubnetPayload::api", + "line_range": [ + 25, + 28 + ], + "centrality": 1 + }, + { + "uuid": "sym-10a3e239cb14bdadf9258ee2", + "level": "L2", + "label": "SubnetPayload", + "file_path": "src/libs/l2ps/types.ts", + "symbol_name": "SubnetPayload", + "line_range": [ + 25, + 28 + ], + "centrality": 2 + }, + { + "uuid": "sym-b626e437b5fab56729c32df4", + "level": "L3", + "label": "plonkVerifyBun", + "file_path": "src/libs/l2ps/zk/BunPlonkWrapper.ts", + "symbol_name": "plonkVerifyBun", + "line_range": [ + 150, + 197 + ], + "centrality": 2 + }, + { + "uuid": "sym-bf0f461e046c6b3eda7156b6", + "level": "L3", + "label": "L2PSTransaction::api", + "file_path": "src/libs/l2ps/zk/L2PSBatchProver.ts", + "symbol_name": "L2PSTransaction::api", + "line_range": [ + 44, + 50 + ], + "centrality": 1 + }, + { + "uuid": "sym-7bf31afd65c0bef1041e40b9", + "level": "L2", + "label": "L2PSTransaction", + "file_path": "src/libs/l2ps/zk/L2PSBatchProver.ts", + "symbol_name": "L2PSTransaction", + "line_range": [ + 44, + 50 + ], + "centrality": 2 + }, + { + "uuid": "sym-d253e7602287f9539e290e65", + "level": "L3", + "label": "BatchProofInput::api", + "file_path": "src/libs/l2ps/zk/L2PSBatchProver.ts", + "symbol_name": "BatchProofInput::api", + "line_range": [ + 52, + 55 + ], + "centrality": 1 + }, + { + "uuid": "sym-dc56c00366f404d1f5b2217d", + "level": "L2", + "label": "BatchProofInput", + "file_path": "src/libs/l2ps/zk/L2PSBatchProver.ts", + "symbol_name": "BatchProofInput", + "line_range": [ + 52, + 55 + ], + "centrality": 2 + }, + { + "uuid": "sym-d8c9048521b2143c9e36d13a", + "level": "L3", + "label": "BatchProof::api", + "file_path": "src/libs/l2ps/zk/L2PSBatchProver.ts", + "symbol_name": "BatchProof::api", + "line_range": [ + 57, + 64 + ], + "centrality": 1 + }, + { + "uuid": "sym-5609925abe4d5877637c4336", + "level": "L2", + "label": "BatchProof", + "file_path": "src/libs/l2ps/zk/L2PSBatchProver.ts", + "symbol_name": "BatchProof", + "line_range": [ + 57, + 64 + ], + "centrality": 2 + }, + { + "uuid": "sym-d072989f47ace9a63dc8d63d", + "level": "L3", + "label": "L2PSBatchProver::api", + "file_path": "src/libs/l2ps/zk/L2PSBatchProver.ts", + "symbol_name": "L2PSBatchProver::api", + "line_range": [ + 66, + 583 + ], + "centrality": 1 + }, + { + "uuid": "sym-d0d37acf5a0af3d63226596c", + "level": "L3", + "label": "L2PSBatchProver.initialize", + "file_path": "src/libs/l2ps/zk/L2PSBatchProver.ts", + "symbol_name": "L2PSBatchProver.initialize", + "line_range": [ + 92, + 113 + ], + "centrality": 1 + }, + { + "uuid": "sym-cabfa6d9d630de5d0e430372", + "level": "L3", + "label": "L2PSBatchProver.terminate", + "file_path": "src/libs/l2ps/zk/L2PSBatchProver.ts", + "symbol_name": "L2PSBatchProver.terminate", + "line_range": [ + 276, + 283 + ], + "centrality": 1 + }, + { + "uuid": "sym-6335fab8f96515814167954f", + "level": "L3", + "label": "L2PSBatchProver.getAvailableBatchSizes", + "file_path": "src/libs/l2ps/zk/L2PSBatchProver.ts", + "symbol_name": "L2PSBatchProver.getAvailableBatchSizes", + "line_range": [ + 288, + 293 + ], + "centrality": 1 + }, + { + "uuid": "sym-8b01cc920d0bd06a1193a9a1", + "level": "L3", + "label": "L2PSBatchProver.getMaxBatchSize", + "file_path": "src/libs/l2ps/zk/L2PSBatchProver.ts", + "symbol_name": "L2PSBatchProver.getMaxBatchSize", + "line_range": [ + 298, + 300 + ], + "centrality": 1 + }, + { + "uuid": "sym-b1241e07fa5cdef9ba64f091", + "level": "L3", + "label": "L2PSBatchProver.generateProof", + "file_path": "src/libs/l2ps/zk/L2PSBatchProver.ts", + "symbol_name": "L2PSBatchProver.generateProof", + "line_range": [ + 409, + 466 + ], + "centrality": 1 + }, + { + "uuid": "sym-bf445a40231c525d7586d079", + "level": "L3", + "label": "L2PSBatchProver.verifyProof", + "file_path": "src/libs/l2ps/zk/L2PSBatchProver.ts", + "symbol_name": "L2PSBatchProver.verifyProof", + "line_range": [ + 531, + 563 + ], + "centrality": 1 + }, + { + "uuid": "sym-370aa540920a40ace242b281", + "level": "L3", + "label": "L2PSBatchProver.exportCalldata", + "file_path": "src/libs/l2ps/zk/L2PSBatchProver.ts", + "symbol_name": "L2PSBatchProver.exportCalldata", + "line_range": [ + 568, + 582 + ], + "centrality": 1 + }, + { + "uuid": "sym-734f496461dee58b5b6c7d3c", + "level": "L2", + "label": "L2PSBatchProver", + "file_path": "src/libs/l2ps/zk/L2PSBatchProver.ts", + "symbol_name": "L2PSBatchProver", + "line_range": [ + 66, + 583 + ], + "centrality": 10 + }, + { + "uuid": "sym-8b528a851f77e9286724f6be", + "level": "L3", + "label": "default", + "file_path": "src/libs/l2ps/zk/L2PSBatchProver.ts", + "symbol_name": "default", + "line_range": [ + 585, + 585 + ], + "centrality": 1 + }, + { + "uuid": "sym-4c7db004c865013fef5a7c4e", + "level": "L3", + "label": "AuthContext::api", + "file_path": "src/libs/network/authContext.ts", + "symbol_name": "AuthContext::api", + "line_range": [ + 9, + 29 + ], + "centrality": 1 + }, + { + "uuid": "sym-f4b66f329402ad34d35ebc2a", + "level": "L2", + "label": "AuthContext", + "file_path": "src/libs/network/authContext.ts", + "symbol_name": "AuthContext", + "line_range": [ + 9, + 29 + ], + "centrality": 2 + }, + { + "uuid": "sym-b3b5244d7b171c0138f12fd5", + "level": "L3", + "label": "setAuthContext", + "file_path": "src/libs/network/authContext.ts", + "symbol_name": "setAuthContext", + "line_range": [ + 41, + 43 + ], + "centrality": 2 + }, + { + "uuid": "sym-f4fdde41deaab86f8d60b115", + "level": "L3", + "label": "getAuthContext", + "file_path": "src/libs/network/authContext.ts", + "symbol_name": "getAuthContext", + "line_range": [ + 49, + 59 + ], + "centrality": 2 + }, + { + "uuid": "sym-0e15393966ef0943f000daf9", + "level": "L3", + "label": "Handler::api", + "file_path": "src/libs/network/bunServer.ts", + "symbol_name": "Handler::api", + "line_range": [ + 5, + 5 + ], + "centrality": 1 + }, + { + "uuid": "sym-8d3749fede2b2e386f981c1a", + "level": "L2", + "label": "Handler", + "file_path": "src/libs/network/bunServer.ts", + "symbol_name": "Handler", + "line_range": [ + 5, + 5 + ], + "centrality": 2 + }, + { + "uuid": "sym-95ba42084419317913e1ccd7", + "level": "L3", + "label": "Middleware::api", + "file_path": "src/libs/network/bunServer.ts", + "symbol_name": "Middleware::api", + "line_range": [ + 6, + 10 + ], + "centrality": 1 + }, + { + "uuid": "sym-7e71f23db4caf3a7432f457e", + "level": "L2", + "label": "Middleware", + "file_path": "src/libs/network/bunServer.ts", + "symbol_name": "Middleware", + "line_range": [ + 6, + 10 + ], + "centrality": 2 + }, + { + "uuid": "sym-9410a1ad8409298493e17d5f", + "level": "L3", + "label": "BunServer::api", + "file_path": "src/libs/network/bunServer.ts", + "symbol_name": "BunServer::api", + "line_range": [ + 12, + 94 + ], + "centrality": 1 + }, + { + "uuid": "sym-2d6c4188b92343e2456b5d18", + "level": "L3", + "label": "BunServer.use", + "file_path": "src/libs/network/bunServer.ts", + "symbol_name": "BunServer.use", + "line_range": [ + 24, + 27 + ], + "centrality": 1 + }, + { + "uuid": "sym-a90e5e15eae22fe4adc31f37", + "level": "L3", + "label": "BunServer.get", + "file_path": "src/libs/network/bunServer.ts", + "symbol_name": "BunServer.get", + "line_range": [ + 29, + 32 + ], + "centrality": 1 + }, + { + "uuid": "sym-f3a8a6f36f83d6d9e247d7f2", + "level": "L3", + "label": "BunServer.post", + "file_path": "src/libs/network/bunServer.ts", + "symbol_name": "BunServer.post", + "line_range": [ + 34, + 37 + ], + "centrality": 1 + }, + { + "uuid": "sym-04c2ceef4c3f8944beac82f1", + "level": "L3", + "label": "BunServer.start", + "file_path": "src/libs/network/bunServer.ts", + "symbol_name": "BunServer.start", + "line_range": [ + 77, + 86 + ], + "centrality": 1 + }, + { + "uuid": "sym-38b02a91ae9879e5549dc089", + "level": "L3", + "label": "BunServer.stop", + "file_path": "src/libs/network/bunServer.ts", + "symbol_name": "BunServer.stop", + "line_range": [ + 88, + 93 + ], + "centrality": 1 + }, + { + "uuid": "sym-e7d959bae3d0df1109f3601a", + "level": "L2", + "label": "BunServer", + "file_path": "src/libs/network/bunServer.ts", + "symbol_name": "BunServer", + "line_range": [ + 12, + 94 + ], + "centrality": 7 + }, + { + "uuid": "sym-7a01cccc7236812081d5703b", + "level": "L3", + "label": "cors", + "file_path": "src/libs/network/bunServer.ts", + "symbol_name": "cors", + "line_range": [ + 97, + 116 + ], + "centrality": 2 + }, + { + "uuid": "sym-08c52ead6283b6512a19e7b9", + "level": "L3", + "label": "json", + "file_path": "src/libs/network/bunServer.ts", + "symbol_name": "json", + "line_range": [ + 118, + 124 + ], + "centrality": 2 + }, + { + "uuid": "sym-929c634b12a7aa1ec2481909", + "level": "L3", + "label": "text", + "file_path": "src/libs/network/bunServer.ts", + "symbol_name": "text", + "line_range": [ + 127, + 129 + ], + "centrality": 1 + }, + { + "uuid": "sym-37bb8c7ba0ff239db9cba19f", + "level": "L3", + "label": "jsonResponse", + "file_path": "src/libs/network/bunServer.ts", + "symbol_name": "jsonResponse", + "line_range": [ + 131, + 138 + ], + "centrality": 2 + }, + { + "uuid": "sym-4b139176b9d6042ba0754489", + "level": "L3", + "label": "DTRManager::api", + "file_path": "src/libs/network/dtr/dtrmanager.ts", + "symbol_name": "DTRManager::api", + "line_range": [ + 39, + 733 + ], + "centrality": 1 + }, + { + "uuid": "sym-7c3e7a7f3f7f86ea2a9dbd52", + "level": "L3", + "label": "DTRManager.getInstance", + "file_path": "src/libs/network/dtr/dtrmanager.ts", + "symbol_name": "DTRManager.getInstance", + "line_range": [ + 53, + 58 + ], + "centrality": 1 + }, + { + "uuid": "sym-5c7189605b0469a06fc45888", + "level": "L3", + "label": "DTRManager.poolSize", + "file_path": "src/libs/network/dtr/dtrmanager.ts", + "symbol_name": "DTRManager.poolSize", + "line_range": [ + 60, + 62 + ], + "centrality": 1 + }, + { + "uuid": "sym-57f1e8814b776abf7cfcb369", + "level": "L3", + "label": "DTRManager.isWaitingForBlock", + "file_path": "src/libs/network/dtr/dtrmanager.ts", + "symbol_name": "DTRManager.isWaitingForBlock", + "line_range": [ + 64, + 66 + ], + "centrality": 1 + }, + { + "uuid": "sym-328f9da16ee12c0b54814b90", + "level": "L3", + "label": "DTRManager.releaseDTRWaiter", + "file_path": "src/libs/network/dtr/dtrmanager.ts", + "symbol_name": "DTRManager.releaseDTRWaiter", + "line_range": [ + 74, + 80 + ], + "centrality": 1 + }, + { + "uuid": "sym-2b3c856a5d7167c51953c23a", + "level": "L3", + "label": "DTRManager.start", + "file_path": "src/libs/network/dtr/dtrmanager.ts", + "symbol_name": "DTRManager.start", + "line_range": [ + 88, + 101 + ], + "centrality": 1 + }, + { + "uuid": "sym-810d19a7dd2eb70806b98d41", + "level": "L3", + "label": "DTRManager.stop", + "file_path": "src/libs/network/dtr/dtrmanager.ts", + "symbol_name": "DTRManager.stop", + "line_range": [ + 109, + 125 + ], + "centrality": 1 + }, + { + "uuid": "sym-c2ac65367e7703953b94bddc", + "level": "L3", + "label": "DTRManager.relayTransactions", + "file_path": "src/libs/network/dtr/dtrmanager.ts", + "symbol_name": "DTRManager.relayTransactions", + "line_range": [ + 234, + 283 + ], + "centrality": 1 + }, + { + "uuid": "sym-4324855c7c8b5a00929d7aca", + "level": "L3", + "label": "DTRManager.receiveRelayedTransactions", + "file_path": "src/libs/network/dtr/dtrmanager.ts", + "symbol_name": "DTRManager.receiveRelayedTransactions", + "line_range": [ + 391, + 404 + ], + "centrality": 1 + }, + { + "uuid": "sym-6fbeed409b0c14bea654142d", + "level": "L3", + "label": "DTRManager.inConsensusHandler", + "file_path": "src/libs/network/dtr/dtrmanager.ts", + "symbol_name": "DTRManager.inConsensusHandler", + "line_range": [ + 413, + 442 + ], + "centrality": 1 + }, + { + "uuid": "sym-3ef5edcc5ab93bfdbb6ea4ce", + "level": "L3", + "label": "DTRManager.receiveRelayedTransaction", + "file_path": "src/libs/network/dtr/dtrmanager.ts", + "symbol_name": "DTRManager.receiveRelayedTransaction", + "line_range": [ + 451, + 656 + ], + "centrality": 1 + }, + { + "uuid": "sym-cdfca17855f38ef00b83818e", + "level": "L3", + "label": "DTRManager.waitForBlockThenRelay", + "file_path": "src/libs/network/dtr/dtrmanager.ts", + "symbol_name": "DTRManager.waitForBlockThenRelay", + "line_range": [ + 658, + 732 + ], + "centrality": 1 + }, + { + "uuid": "sym-f1d990a68c25fa7a7816bc3f", + "level": "L2", + "label": "DTRManager", + "file_path": "src/libs/network/dtr/dtrmanager.ts", + "symbol_name": "DTRManager", + "line_range": [ + 39, + 733 + ], + "centrality": 16 + }, + { + "uuid": "sym-1040e8086b2451ce433c4283", + "level": "L3", + "label": "ServerHandlers::api", + "file_path": "src/libs/network/endpointHandlers.ts", + "symbol_name": "ServerHandlers::api", + "line_range": [ + 87, + 890 + ], + "centrality": 1 + }, + { + "uuid": "sym-935db248e7fb60e78c118a28", + "level": "L3", + "label": "ServerHandlers.handleValidateTransaction", + "file_path": "src/libs/network/endpointHandlers.ts", + "symbol_name": "ServerHandlers.handleValidateTransaction", + "line_range": [ + 89, + 180 + ], + "centrality": 1 + }, + { + "uuid": "sym-1716ce2cda401faf8f60ca09", + "level": "L3", + "label": "ServerHandlers.handleExecuteTransaction", + "file_path": "src/libs/network/endpointHandlers.ts", + "symbol_name": "ServerHandlers.handleExecuteTransaction", + "line_range": [ + 185, + 600 + ], + "centrality": 1 + }, + { + "uuid": "sym-d654ce4f484f119070a59599", + "level": "L3", + "label": "ServerHandlers.handleWeb2Request", + "file_path": "src/libs/network/endpointHandlers.ts", + "symbol_name": "ServerHandlers.handleWeb2Request", + "line_range": [ + 603, + 609 + ], + "centrality": 1 + }, + { + "uuid": "sym-29ad19f6194b9d5dc5b3d151", + "level": "L3", + "label": "ServerHandlers.handleXMChainOperation", + "file_path": "src/libs/network/endpointHandlers.ts", + "symbol_name": "ServerHandlers.handleXMChainOperation", + "line_range": [ + 612, + 627 + ], + "centrality": 1 + }, + { + "uuid": "sym-b3e914af9f4c1670dfd90569", + "level": "L3", + "label": "ServerHandlers.handleXMChainSignedPayload", + "file_path": "src/libs/network/endpointHandlers.ts", + "symbol_name": "ServerHandlers.handleXMChainSignedPayload", + "line_range": [ + 630, + 632 + ], + "centrality": 1 + }, + { + "uuid": "sym-885fad8121718032d1888dc8", + "level": "L3", + "label": "ServerHandlers.handleDemosWorkRequest", + "file_path": "src/libs/network/endpointHandlers.ts", + "symbol_name": "ServerHandlers.handleDemosWorkRequest", + "line_range": [ + 635, + 639 + ], + "centrality": 1 + }, + { + "uuid": "sym-598cda53c818b18f719f656d", + "level": "L3", + "label": "ServerHandlers.handleSubnetTx", + "file_path": "src/libs/network/endpointHandlers.ts", + "symbol_name": "ServerHandlers.handleSubnetTx", + "line_range": [ + 642, + 646 + ], + "centrality": 1 + }, + { + "uuid": "sym-9dbdd68a5833762c291f7b28", + "level": "L3", + "label": "ServerHandlers.handleL2PS", + "file_path": "src/libs/network/endpointHandlers.ts", + "symbol_name": "ServerHandlers.handleL2PS", + "line_range": [ + 649, + 651 + ], + "centrality": 1 + }, + { + "uuid": "sym-0fa95cdb5dcb0b9e6f103b95", + "level": "L3", + "label": "ServerHandlers.handleConsensusRequest", + "file_path": "src/libs/network/endpointHandlers.ts", + "symbol_name": "ServerHandlers.handleConsensusRequest", + "line_range": [ + 653, + 725 + ], + "centrality": 1 + }, + { + "uuid": "sym-51083b6c8157d81641a32e99", + "level": "L3", + "label": "ServerHandlers.handleMessage", + "file_path": "src/libs/network/endpointHandlers.ts", + "symbol_name": "ServerHandlers.handleMessage", + "line_range": [ + 727, + 734 + ], + "centrality": 1 + }, + { + "uuid": "sym-b1daa6c5d31676598fdc9c3c", + "level": "L3", + "label": "ServerHandlers.handleStorage", + "file_path": "src/libs/network/endpointHandlers.ts", + "symbol_name": "ServerHandlers.handleStorage", + "line_range": [ + 736, + 743 + ], + "centrality": 1 + }, + { + "uuid": "sym-2a10d01fea3eaadd6e2bc6d7", + "level": "L3", + "label": "ServerHandlers.handleMempool", + "file_path": "src/libs/network/endpointHandlers.ts", + "symbol_name": "ServerHandlers.handleMempool", + "line_range": [ + 745, + 770 + ], + "centrality": 1 + }, + { + "uuid": "sym-d0b0e6f4f8117ae02923de11", + "level": "L3", + "label": "ServerHandlers.handlePeerlist", + "file_path": "src/libs/network/endpointHandlers.ts", + "symbol_name": "ServerHandlers.handlePeerlist", + "line_range": [ + 773, + 793 + ], + "centrality": 1 + }, + { + "uuid": "sym-3e7ea7f35aa9b839723b2c1c", + "level": "L3", + "label": "ServerHandlers.handleL2PSHashUpdate", + "file_path": "src/libs/network/endpointHandlers.ts", + "symbol_name": "ServerHandlers.handleL2PSHashUpdate", + "line_range": [ + 805, + 889 + ], + "centrality": 1 + }, + { + "uuid": "sym-7fe7aed70ba7c171a10dce16", + "level": "L2", + "label": "ServerHandlers", + "file_path": "src/libs/network/endpointHandlers.ts", + "symbol_name": "ServerHandlers", + "line_range": [ + 87, + 890 + ], + "centrality": 18 + }, + { + "uuid": "sym-cf9b266780ee9759d2183fdb", + "level": "L3", + "label": "serverRpcBun", + "file_path": "src/libs/network/index.ts", + "symbol_name": "serverRpcBun", + "line_range": [ + 12, + 12 + ], + "centrality": 1 + }, + { + "uuid": "sym-fc2927a008b8b003e851d59c", + "level": "L3", + "label": "emptyResponse", + "file_path": "src/libs/network/index.ts", + "symbol_name": "emptyResponse", + "line_range": [ + 12, + 12 + ], + "centrality": 1 + }, + { + "uuid": "sym-c2223eb98e7971a5a84a534e", + "level": "L3", + "label": "AuthMessage::api", + "file_path": "src/libs/network/manageAuth.ts", + "symbol_name": "AuthMessage::api", + "line_range": [ + 7, + 7 + ], + "centrality": 1 + }, + { + "uuid": "sym-3cf8c47572a9e0e64d4a2a13", + "level": "L2", + "label": "AuthMessage", + "file_path": "src/libs/network/manageAuth.ts", + "symbol_name": "AuthMessage", + "line_range": [ + 7, + 7 + ], + "centrality": 2 + }, + { + "uuid": "sym-813e158b993d299057988303", + "level": "L3", + "label": "manageAuth", + "file_path": "src/libs/network/manageAuth.ts", + "symbol_name": "manageAuth", + "line_range": [ + 9, + 58 + ], + "centrality": 1 + }, + { + "uuid": "sym-8df316cdf3ef951ce8023630", + "level": "L3", + "label": "manageBridges", + "file_path": "src/libs/network/manageBridge.ts", + "symbol_name": "manageBridges", + "line_range": [ + 13, + 43 + ], + "centrality": 2 + }, + { + "uuid": "sym-187664cf6efeb1c5567ce3c8", + "level": "L3", + "label": "ConsensusMethod::api", + "file_path": "src/libs/network/manageConsensusRoutines.ts", + "symbol_name": "ConsensusMethod::api", + "line_range": [ + 21, + 35 + ], + "centrality": 1 + }, + { + "uuid": "sym-45104794847951b00f5a9bbe", + "level": "L2", + "label": "ConsensusMethod", + "file_path": "src/libs/network/manageConsensusRoutines.ts", + "symbol_name": "ConsensusMethod", + "line_range": [ + 21, + 35 + ], + "centrality": 2 + }, + { + "uuid": "sym-0d658d44d5b23dfd5829fc4f", + "level": "L3", + "label": "manageConsensusRoutines", + "file_path": "src/libs/network/manageConsensusRoutines.ts", + "symbol_name": "manageConsensusRoutines", + "line_range": [ + 37, + 417 + ], + "centrality": 15 + }, + { + "uuid": "sym-235384a3d4f36552d55ac7ef", + "level": "L3", + "label": "manageExecution", + "file_path": "src/libs/network/manageExecution.ts", + "symbol_name": "manageExecution", + "line_range": [ + 11, + 118 + ], + "centrality": 3 + }, + { + "uuid": "sym-bfa8af7e83408600dde29446", + "level": "L3", + "label": "manageGCRRoutines", + "file_path": "src/libs/network/manageGCRRoutines.ts", + "symbol_name": "manageGCRRoutines", + "line_range": [ + 17, + 192 + ], + "centrality": 11 + }, + { + "uuid": "sym-8d8d40dad8d622f8cc5bbd11", + "level": "L3", + "label": "HelloPeerRequest::api", + "file_path": "src/libs/network/manageHelloPeer.ts", + "symbol_name": "HelloPeerRequest::api", + "line_range": [ + 11, + 19 + ], + "centrality": 1 + }, + { + "uuid": "sym-68a8ebbbf4a944b94d5fce23", + "level": "L2", + "label": "HelloPeerRequest", + "file_path": "src/libs/network/manageHelloPeer.ts", + "symbol_name": "HelloPeerRequest", + "line_range": [ + 11, + 19 + ], + "centrality": 2 + }, + { + "uuid": "sym-1d7e1deea80d0d5c35cc1961", + "level": "L3", + "label": "manageHelloPeer", + "file_path": "src/libs/network/manageHelloPeer.ts", + "symbol_name": "manageHelloPeer", + "line_range": [ + 23, + 134 + ], + "centrality": 2 + }, + { + "uuid": "sym-54c2cfe0e786dfb0aa4c1a30", + "level": "L3", + "label": "handleLoginResponse", + "file_path": "src/libs/network/manageLogin.ts", + "symbol_name": "handleLoginResponse", + "line_range": [ + 8, + 34 + ], + "centrality": 1 + }, + { + "uuid": "sym-ea53351a3682c209afbecd62", + "level": "L3", + "label": "handleLoginRequest", + "file_path": "src/libs/network/manageLogin.ts", + "symbol_name": "handleLoginRequest", + "line_range": [ + 36, + 56 + ], + "centrality": 1 + }, + { + "uuid": "sym-ac7d7af06ace8e5f7480d85e", + "level": "L3", + "label": "manageNativeBridge", + "file_path": "src/libs/network/manageNativeBridge.ts", + "symbol_name": "manageNativeBridge", + "line_range": [ + 11, + 36 + ], + "centrality": 2 + }, + { + "uuid": "sym-278000824c34267ba77ed2e4", + "level": "L3", + "label": "NodeCall::api", + "file_path": "src/libs/network/manageNodeCall.ts", + "symbol_name": "NodeCall::api", + "line_range": [ + 39, + 43 + ], + "centrality": 1 + }, + { + "uuid": "sym-3157118d1e9c323aab1ad5d4", + "level": "L2", + "label": "NodeCall", + "file_path": "src/libs/network/manageNodeCall.ts", + "symbol_name": "NodeCall", + "line_range": [ + 39, + 43 + ], + "centrality": 2 + }, + { + "uuid": "sym-5639767a6380b54d939d3083", + "level": "L3", + "label": "manageNodeCall", + "file_path": "src/libs/network/manageNodeCall.ts", + "symbol_name": "manageNodeCall", + "line_range": [ + 51, + 1005 + ], + "centrality": 11 + }, + { + "uuid": "sym-effd5e53e1c955d375aee994", + "level": "L3", + "label": "Message::api", + "file_path": "src/libs/network/manageP2P.ts", + "symbol_name": "Message::api", + "line_range": [ + 14, + 19 + ], + "centrality": 1 + }, + { + "uuid": "sym-340c7ae28f4661acc40c644e", + "level": "L2", + "label": "Message", + "file_path": "src/libs/network/manageP2P.ts", + "symbol_name": "Message", + "line_range": [ + 14, + 19 + ], + "centrality": 2 + }, + { + "uuid": "sym-1949526bac7e354d12c4d919", + "level": "L3", + "label": "DemosP2P::api", + "file_path": "src/libs/network/manageP2P.ts", + "symbol_name": "DemosP2P::api", + "line_range": [ + 22, + 81 + ], + "centrality": 1 + }, + { + "uuid": "sym-e6dc4654d0467d8dcb6d5230", + "level": "L3", + "label": "DemosP2P.getInstance", + "file_path": "src/libs/network/manageP2P.ts", + "symbol_name": "DemosP2P.getInstance", + "line_range": [ + 42, + 48 + ], + "centrality": 1 + }, + { + "uuid": "sym-72b8022bd1a30f87bde3c08e", + "level": "L3", + "label": "DemosP2P.getInstanceFromSessionId", + "file_path": "src/libs/network/manageP2P.ts", + "symbol_name": "DemosP2P.getInstanceFromSessionId", + "line_range": [ + 50, + 52 + ], + "centrality": 1 + }, + { + "uuid": "sym-f8403c44d50f0ee7817f9858", + "level": "L3", + "label": "DemosP2P.getSessionId", + "file_path": "src/libs/network/manageP2P.ts", + "symbol_name": "DemosP2P.getSessionId", + "line_range": [ + 57, + 59 + ], + "centrality": 1 + }, + { + "uuid": "sym-2970b8afa8e36b134fa79b40", + "level": "L3", + "label": "DemosP2P.relayMessage", + "file_path": "src/libs/network/manageP2P.ts", + "symbol_name": "DemosP2P.relayMessage", + "line_range": [ + 66, + 69 + ], + "centrality": 1 + }, + { + "uuid": "sym-364dcbfe78e7ff74ebd1b118", + "level": "L3", + "label": "DemosP2P.getMessagesForPartecipant", + "file_path": "src/libs/network/manageP2P.ts", + "symbol_name": "DemosP2P.getMessagesForPartecipant", + "line_range": [ + 72, + 78 + ], + "centrality": 1 + }, + { + "uuid": "sym-5b7e48554055803b885c211a", + "level": "L2", + "label": "DemosP2P", + "file_path": "src/libs/network/manageP2P.ts", + "symbol_name": "DemosP2P", + "line_range": [ + 22, + 81 + ], + "centrality": 7 + }, + { + "uuid": "sym-f5a0b179a238fe0393fde5cf", + "level": "L3", + "label": "registerMethodListingEndpoint", + "file_path": "src/libs/network/methodListing.ts", + "symbol_name": "registerMethodListingEndpoint", + "line_range": [ + 20, + 30 + ], + "centrality": 1 + }, + { + "uuid": "sym-23ad4039ecded53df33512a5", + "level": "L3", + "label": "RateLimiter::api", + "file_path": "src/libs/network/middleware/rateLimiter.ts", + "symbol_name": "RateLimiter::api", + "line_range": [ + 40, + 467 + ], + "centrality": 1 + }, + { + "uuid": "sym-0a51a789ef7d435fac22776a", + "level": "L3", + "label": "RateLimiter.getClientIP", + "file_path": "src/libs/network/middleware/rateLimiter.ts", + "symbol_name": "RateLimiter.getClientIP", + "line_range": [ + 130, + 154 + ], + "centrality": 1 + }, + { + "uuid": "sym-b38886cc276ae1b280c9e69b", + "level": "L3", + "label": "RateLimiter.createMiddleware", + "file_path": "src/libs/network/middleware/rateLimiter.ts", + "symbol_name": "RateLimiter.createMiddleware", + "line_range": [ + 244, + 405 + ], + "centrality": 1 + }, + { + "uuid": "sym-c1ea911292523868bd72a57e", + "level": "L3", + "label": "RateLimiter.getStats", + "file_path": "src/libs/network/middleware/rateLimiter.ts", + "symbol_name": "RateLimiter.getStats", + "line_range": [ + 407, + 430 + ], + "centrality": 1 + }, + { + "uuid": "sym-e49e87255ece0a5317b1d1db", + "level": "L3", + "label": "RateLimiter.unblockIP", + "file_path": "src/libs/network/middleware/rateLimiter.ts", + "symbol_name": "RateLimiter.unblockIP", + "line_range": [ + 432, + 451 + ], + "centrality": 1 + }, + { + "uuid": "sym-b824be730682f6d1b926c57e", + "level": "L3", + "label": "RateLimiter.destroy", + "file_path": "src/libs/network/middleware/rateLimiter.ts", + "symbol_name": "RateLimiter.destroy", + "line_range": [ + 453, + 458 + ], + "centrality": 1 + }, + { + "uuid": "sym-043ab78b6f507bf4ae48ea53", + "level": "L3", + "label": "RateLimiter.getInstance", + "file_path": "src/libs/network/middleware/rateLimiter.ts", + "symbol_name": "RateLimiter.getInstance", + "line_range": [ + 460, + 466 + ], + "centrality": 1 + }, + { + "uuid": "sym-a30c004044ed694e7dd2baa2", + "level": "L2", + "label": "RateLimiter", + "file_path": "src/libs/network/middleware/rateLimiter.ts", + "symbol_name": "RateLimiter", + "line_range": [ + 40, + 467 + ], + "centrality": 9 + }, + { + "uuid": "sym-91661b3c5c62bff622a981db", + "level": "L3", + "label": "setupOpenAPI", + "file_path": "src/libs/network/openApiSpec.ts", + "symbol_name": "setupOpenAPI", + "line_range": [ + 11, + 27 + ], + "centrality": 1 + }, + { + "uuid": "sym-5c346fb8b4864942959afa56", + "level": "L3", + "label": "rpcSchema", + "file_path": "src/libs/network/openApiSpec.ts", + "symbol_name": "rpcSchema", + "line_range": [ + 29, + 49 + ], + "centrality": 1 + }, + { + "uuid": "sym-c03360033ff46d621cf2ae17", + "level": "L3", + "label": "checkGasPriorOperation", + "file_path": "src/libs/network/routines/checkGasPriorOperation.ts", + "symbol_name": "checkGasPriorOperation", + "line_range": [ + 1, + 8 + ], + "centrality": 1 + }, + { + "uuid": "sym-62051722bb59e097df10746e", + "level": "L3", + "label": "determineGasForOperation", + "file_path": "src/libs/network/routines/determineGasForOperation.ts", + "symbol_name": "determineGasForOperation", + "line_range": [ + 4, + 18 + ], + "centrality": 3 + }, + { + "uuid": "sym-f732c52bdfb53b3c7c57e6c1", + "level": "L3", + "label": "default", + "file_path": "src/libs/network/routines/eggs.ts", + "symbol_name": "default", + "line_range": [ + 7, + 7 + ], + "centrality": 1 + }, + { + "uuid": "sym-c3a520c376d94fdc7518bf55", + "level": "L3", + "label": "GasDeal::api", + "file_path": "src/libs/network/routines/gasDeal.ts", + "symbol_name": "GasDeal::api", + "line_range": [ + 4, + 10 + ], + "centrality": 1 + }, + { + "uuid": "sym-b5118eb6e684507b140dc13e", + "level": "L2", + "label": "GasDeal", + "file_path": "src/libs/network/routines/gasDeal.ts", + "symbol_name": "GasDeal", + "line_range": [ + 4, + 10 + ], + "centrality": 2 + }, + { + "uuid": "sym-60b2be41818640ffc764cb35", + "level": "L3", + "label": "gasDeal", + "file_path": "src/libs/network/routines/gasDeal.ts", + "symbol_name": "gasDeal", + "line_range": [ + 12, + 43 + ], + "centrality": 2 + }, + { + "uuid": "sym-3c18c93e1cb855e2917ca012", + "level": "L3", + "label": "getChainReferenceCurrency", + "file_path": "src/libs/network/routines/gasDeal.ts", + "symbol_name": "getChainReferenceCurrency", + "line_range": [ + 45, + 50 + ], + "centrality": 1 + }, + { + "uuid": "sym-0714329610278a49d4d896b8", + "level": "L3", + "label": "getChainNativeToReferenceConversionRate", + "file_path": "src/libs/network/routines/gasDeal.ts", + "symbol_name": "getChainNativeToReferenceConversionRate", + "line_range": [ + 52, + 57 + ], + "centrality": 1 + }, + { + "uuid": "sym-4de139d75083bce9f07d0bf5", + "level": "L3", + "label": "getChainNativeToDEMOSConversionRate", + "file_path": "src/libs/network/routines/gasDeal.ts", + "symbol_name": "getChainNativeToDEMOSConversionRate", + "line_range": [ + 59, + 64 + ], + "centrality": 1 + }, + { + "uuid": "sym-5c77c8e8605a322c4a8105e9", + "level": "L3", + "label": "getRemoteIP", + "file_path": "src/libs/network/routines/getRemoteIP.ts", + "symbol_name": "getRemoteIP", + "line_range": [ + 3, + 12 + ], + "centrality": 1 + }, + { + "uuid": "sym-00a687dd7a4ac80ec046b1d9", + "level": "L3", + "label": "getBlockByHash", + "file_path": "src/libs/network/routines/nodecalls/getBlockByHash.ts", + "symbol_name": "getBlockByHash", + "line_range": [ + 4, + 22 + ], + "centrality": 1 + }, + { + "uuid": "sym-911a2d4197fac2defef73b40", + "level": "L3", + "label": "getBlockByNumber", + "file_path": "src/libs/network/routines/nodecalls/getBlockByNumber.ts", + "symbol_name": "getBlockByNumber", + "line_range": [ + 6, + 48 + ], + "centrality": 2 + }, + { + "uuid": "sym-f4c921bd7789b2105a73e6fa", + "level": "L3", + "label": "getBlockHeaderByHash", + "file_path": "src/libs/network/routines/nodecalls/getBlockHeaderByHash.ts", + "symbol_name": "getBlockHeaderByHash", + "line_range": [ + 4, + 19 + ], + "centrality": 1 + }, + { + "uuid": "sym-e1ba932ee6b752b90eafb76c", + "level": "L3", + "label": "getBlockHeaderByNumber", + "file_path": "src/libs/network/routines/nodecalls/getBlockHeaderByNumber.ts", + "symbol_name": "getBlockHeaderByNumber", + "line_range": [ + 4, + 23 + ], + "centrality": 1 + }, + { + "uuid": "sym-1965f9efde68a4394122285f", + "level": "L3", + "label": "getBlocks", + "file_path": "src/libs/network/routines/nodecalls/getBlocks.ts", + "symbol_name": "getBlocks", + "line_range": [ + 10, + 53 + ], + "centrality": 1 + }, + { + "uuid": "sym-4830c08718fcd7f4335a117d", + "level": "L3", + "label": "getPeerInfo", + "file_path": "src/libs/network/routines/nodecalls/getPeerInfo.ts", + "symbol_name": "getPeerInfo", + "line_range": [ + 3, + 5 + ], + "centrality": 1 + }, + { + "uuid": "sym-97320893d204cc7d476e3fde", + "level": "L3", + "label": "getPeerlist", + "file_path": "src/libs/network/routines/nodecalls/getPeerlist.ts", + "symbol_name": "getPeerlist", + "line_range": [ + 7, + 35 + ], + "centrality": 1 + }, + { + "uuid": "sym-c4344bea317284338ea29949", + "level": "L3", + "label": "getPreviousHashFromBlockHash", + "file_path": "src/libs/network/routines/nodecalls/getPreviousHashFromBlockHash.ts", + "symbol_name": "getPreviousHashFromBlockHash", + "line_range": [ + 4, + 19 + ], + "centrality": 1 + }, + { + "uuid": "sym-d2e86475bdb3136bd4dbbdef", + "level": "L3", + "label": "getPreviousHashFromBlockNumber", + "file_path": "src/libs/network/routines/nodecalls/getPreviousHashFromBlockNumber.ts", + "symbol_name": "getPreviousHashFromBlockNumber", + "line_range": [ + 4, + 17 + ], + "centrality": 1 + }, + { + "uuid": "sym-6595be3b08ea5be4fbcb7009", + "level": "L3", + "label": "getTransactions", + "file_path": "src/libs/network/routines/nodecalls/getTransactions.ts", + "symbol_name": "getTransactions", + "line_range": [ + 10, + 56 + ], + "centrality": 1 + }, + { + "uuid": "sym-364a66b2b44b55df33318f93", + "level": "L3", + "label": "getTxsByHashes", + "file_path": "src/libs/network/routines/nodecalls/getTxsByHashes.ts", + "symbol_name": "getTxsByHashes", + "line_range": [ + 9, + 69 + ], + "centrality": 1 + }, + { + "uuid": "sym-444d637aead560497f9078f4", + "level": "L3", + "label": "normalizeWebBuffers", + "file_path": "src/libs/network/routines/normalizeWebBuffers.ts", + "symbol_name": "normalizeWebBuffers", + "line_range": [ + 1, + 30 + ], + "centrality": 2 + }, + { + "uuid": "sym-7f62f790c5ca3020d63c5547", + "level": "L3", + "label": "InterfaceSession::api", + "file_path": "src/libs/network/routines/sessionManager.ts", + "symbol_name": "InterfaceSession::api", + "line_range": [ + 29, + 38 + ], + "centrality": 1 + }, + { + "uuid": "sym-16320e5dfefd4484bf04a2b1", + "level": "L2", + "label": "InterfaceSession", + "file_path": "src/libs/network/routines/sessionManager.ts", + "symbol_name": "InterfaceSession", + "line_range": [ + 29, + 38 + ], + "centrality": 2 + }, + { + "uuid": "sym-a0665fbdedc04f490c5c1ee5", + "level": "L3", + "label": "Sessions::api", + "file_path": "src/libs/network/routines/sessionManager.ts", + "symbol_name": "Sessions::api", + "line_range": [ + 40, + 121 + ], + "centrality": 1 + }, + { + "uuid": "sym-ff34e80e38862f26f8542d67", + "level": "L3", + "label": "Sessions.getInstance", + "file_path": "src/libs/network/routines/sessionManager.ts", + "symbol_name": "Sessions.getInstance", + "line_range": [ + 45, + 50 + ], + "centrality": 1 + }, + { + "uuid": "sym-6efc9acf51b6852ebb17b0a3", + "level": "L3", + "label": "Sessions.getSession", + "file_path": "src/libs/network/routines/sessionManager.ts", + "symbol_name": "Sessions.getSession", + "line_range": [ + 57, + 59 + ], + "centrality": 1 + }, + { + "uuid": "sym-898018ea10de7c9592a89604", + "level": "L3", + "label": "Sessions.isSessionValid", + "file_path": "src/libs/network/routines/sessionManager.ts", + "symbol_name": "Sessions.isSessionValid", + "line_range": [ + 62, + 73 + ], + "centrality": 1 + }, + { + "uuid": "sym-1be242ae8eea8ce44d3ac248", + "level": "L3", + "label": "Sessions.newSession", + "file_path": "src/libs/network/routines/sessionManager.ts", + "symbol_name": "Sessions.newSession", + "line_range": [ + 76, + 90 + ], + "centrality": 1 + }, + { + "uuid": "sym-cf46caf250429c89dc5b39e9", + "level": "L3", + "label": "Sessions.validateSignature", + "file_path": "src/libs/network/routines/sessionManager.ts", + "symbol_name": "Sessions.validateSignature", + "line_range": [ + 94, + 118 + ], + "centrality": 1 + }, + { + "uuid": "sym-3d14e568424b742a642a1957", + "level": "L2", + "label": "Sessions", + "file_path": "src/libs/network/routines/sessionManager.ts", + "symbol_name": "Sessions", + "line_range": [ + 40, + 121 + ], + "centrality": 8 + }, + { + "uuid": "sym-b3dbfe3fa6d39217fc5d4f7d", + "level": "L3", + "label": "getPeerTime", + "file_path": "src/libs/network/routines/timeSync.ts", + "symbol_name": "getPeerTime", + "line_range": [ + 22, + 55 + ], + "centrality": 1 + }, + { + "uuid": "sym-4c471c5372546d33ace71bb3", + "level": "L3", + "label": "calculatePeerTimeOffset", + "file_path": "src/libs/network/routines/timeSync.ts", + "symbol_name": "calculatePeerTimeOffset", + "line_range": [ + 57, + 98 + ], + "centrality": 1 + }, + { + "uuid": "sym-9b8195b95964c2a498993290", + "level": "L3", + "label": "compare", + "file_path": "src/libs/network/routines/timeSyncUtils.ts", + "symbol_name": "compare", + "line_range": [ + 1, + 3 + ], + "centrality": 1 + }, + { + "uuid": "sym-2ad003ec730706f8e7afa93c", + "level": "L3", + "label": "add", + "file_path": "src/libs/network/routines/timeSyncUtils.ts", + "symbol_name": "add", + "line_range": [ + 5, + 7 + ], + "centrality": 1 + }, + { + "uuid": "sym-f06d0734196eba459ef68266", + "level": "L3", + "label": "sum", + "file_path": "src/libs/network/routines/timeSyncUtils.ts", + "symbol_name": "sum", + "line_range": [ + 9, + 11 + ], + "centrality": 2 + }, + { + "uuid": "sym-0d1dcfcac0642bf15d871302", + "level": "L3", + "label": "mean", + "file_path": "src/libs/network/routines/timeSyncUtils.ts", + "symbol_name": "mean", + "line_range": [ + 13, + 15 + ], + "centrality": 3 + }, + { + "uuid": "sym-a24cd6be8abd3b0215b2880d", + "level": "L3", + "label": "std", + "file_path": "src/libs/network/routines/timeSyncUtils.ts", + "symbol_name": "std", + "line_range": [ + 17, + 19 + ], + "centrality": 1 + }, + { + "uuid": "sym-afb6526449d86d945cdb2452", + "level": "L3", + "label": "variance", + "file_path": "src/libs/network/routines/timeSyncUtils.ts", + "symbol_name": "variance", + "line_range": [ + 21, + 26 + ], + "centrality": 2 + }, + { + "uuid": "sym-7c70e690b7433ebb78afddca", + "level": "L3", + "label": "calculateIQR", + "file_path": "src/libs/network/routines/timeSyncUtils.ts", + "symbol_name": "calculateIQR", + "line_range": [ + 28, + 34 + ], + "centrality": 2 + }, + { + "uuid": "sym-0ab6649bd8566881a8ffa026", + "level": "L3", + "label": "filterOutliers", + "file_path": "src/libs/network/routines/timeSyncUtils.ts", + "symbol_name": "filterOutliers", + "line_range": [ + 36, + 39 + ], + "centrality": 2 + }, + { + "uuid": "sym-cef374c0e9418a45db67507b", + "level": "L3", + "label": "median", + "file_path": "src/libs/network/routines/timeSyncUtils.ts", + "symbol_name": "median", + "line_range": [ + 41, + 52 + ], + "centrality": 1 + }, + { + "uuid": "sym-5bdeb8b177e513df30db0c8f", + "level": "L3", + "label": "StepResult::api", + "file_path": "src/libs/network/routines/transactions/demosWork/handleDemosWorkRequest.ts", + "symbol_name": "StepResult::api", + "line_range": [ + 82, + 86 + ], + "centrality": 1 + }, + { + "uuid": "sym-dd2bf0489df3b5728b851e75", + "level": "L2", + "label": "StepResult", + "file_path": "src/libs/network/routines/transactions/demosWork/handleDemosWorkRequest.ts", + "symbol_name": "StepResult", + "line_range": [ + 82, + 86 + ], + "centrality": 2 + }, + { + "uuid": "sym-2014db7e46724586aa33968e", + "level": "L3", + "label": "OperationResult::api", + "file_path": "src/libs/network/routines/transactions/demosWork/handleDemosWorkRequest.ts", + "symbol_name": "OperationResult::api", + "line_range": [ + 88, + 92 + ], + "centrality": 1 + }, + { + "uuid": "sym-873aa7dadb9fae6f13424d90", + "level": "L2", + "label": "OperationResult", + "file_path": "src/libs/network/routines/transactions/demosWork/handleDemosWorkRequest.ts", + "symbol_name": "OperationResult", + "line_range": [ + 88, + 92 + ], + "centrality": 2 + }, + { + "uuid": "sym-3d8045d8ce322957d53c5a4f", + "level": "L3", + "label": "handleDemosWorkRequest", + "file_path": "src/libs/network/routines/transactions/demosWork/handleDemosWorkRequest.ts", + "symbol_name": "handleDemosWorkRequest", + "line_range": [ + 95, + 130 + ], + "centrality": 1 + }, + { + "uuid": "sym-eb71a8dd3518c88cba790695", + "level": "L3", + "label": "handleStep", + "file_path": "src/libs/network/routines/transactions/demosWork/handleStep.ts", + "symbol_name": "handleStep", + "line_range": [ + 19, + 67 + ], + "centrality": 2 + }, + { + "uuid": "sym-fb863731199cef86f8981fbe", + "level": "L3", + "label": "processOperations", + "file_path": "src/libs/network/routines/transactions/demosWork/processOperations.ts", + "symbol_name": "processOperations", + "line_range": [ + 9, + 62 + ], + "centrality": 2 + }, + { + "uuid": "sym-af1c37237a37962494d06df0", + "level": "L3", + "label": "handleIdentityRequest", + "file_path": "src/libs/network/routines/transactions/handleIdentityRequest.ts", + "symbol_name": "handleIdentityRequest", + "line_range": [ + 28, + 123 + ], + "centrality": 2 + }, + { + "uuid": "sym-87aeaf45d3ccc3eda2f7754f", + "level": "L3", + "label": "handleL2PS", + "file_path": "src/libs/network/routines/transactions/handleL2PS.ts", + "symbol_name": "handleL2PS", + "line_range": [ + 75, + 116 + ], + "centrality": 2 + }, + { + "uuid": "sym-1047da550cdd7c7818b318f5", + "level": "L3", + "label": "handleNativeBridgeTx", + "file_path": "src/libs/network/routines/transactions/handleNativeBridgeTx.ts", + "symbol_name": "handleNativeBridgeTx", + "line_range": [ + 3, + 8 + ], + "centrality": 1 + }, + { + "uuid": "sym-d6c1efb7fd3f747e6336fa5c", + "level": "L3", + "label": "handleNativeRequest", + "file_path": "src/libs/network/routines/transactions/handleNativeRequest.ts", + "symbol_name": "handleNativeRequest", + "line_range": [ + 10, + 22 + ], + "centrality": 1 + }, + { + "uuid": "sym-7e7c43222ce7463a1dcc2533", + "level": "L3", + "label": "handleWeb2ProxyRequest", + "file_path": "src/libs/network/routines/transactions/handleWeb2ProxyRequest.ts", + "symbol_name": "handleWeb2ProxyRequest", + "line_range": [ + 23, + 106 + ], + "centrality": 3 + }, + { + "uuid": "sym-804bb364f18a73fb39945cba", + "level": "L3", + "label": "modules", + "file_path": "src/libs/network/securityModule.ts", + "symbol_name": "modules", + "line_range": [ + 4, + 14 + ], + "centrality": 1 + }, + { + "uuid": "sym-d6b52ce184f5b4b4464e72a9", + "level": "L3", + "label": "emptyResponse", + "file_path": "src/libs/network/server_rpc.ts", + "symbol_name": "emptyResponse", + "line_range": [ + 135, + 140 + ], + "centrality": 1 + }, + { + "uuid": "sym-8851eae25a7755afe330f85c", + "level": "L3", + "label": "serverRpcBun", + "file_path": "src/libs/network/server_rpc.ts", + "symbol_name": "serverRpcBun", + "line_range": [ + 420, + 661 + ], + "centrality": 7 + }, + { + "uuid": "sym-849aec43b27a066eb7146591", + "level": "L3", + "label": "VerificationResult::api", + "file_path": "src/libs/network/verifySignature.ts", + "symbol_name": "VerificationResult::api", + "line_range": [ + 12, + 37 + ], + "centrality": 1 + }, + { + "uuid": "sym-eacdd884e39f2f675fcacdd6", + "level": "L2", + "label": "VerificationResult", + "file_path": "src/libs/network/verifySignature.ts", + "symbol_name": "VerificationResult", + "line_range": [ + 12, + 37 + ], + "centrality": 2 + }, + { + "uuid": "sym-0cff4cfd0a8b9a5024c1680a", + "level": "L3", + "label": "verifySignature", + "file_path": "src/libs/network/verifySignature.ts", + "symbol_name": "verifySignature", + "line_range": [ + 53, + 135 + ], + "centrality": 1 + }, + { + "uuid": "sym-3e2cd2e59eb550fbfb626bcc", + "level": "L3", + "label": "isKeyWhitelisted", + "file_path": "src/libs/network/verifySignature.ts", + "symbol_name": "isKeyWhitelisted", + "line_range": [ + 144, + 158 + ], + "centrality": 1 + }, + { + "uuid": "sym-d90ac9be913c03f89de49a6a", + "level": "L3", + "label": "AuthBlockParser::api", + "file_path": "src/libs/omniprotocol/auth/parser.ts", + "symbol_name": "AuthBlockParser::api", + "line_range": [ + 4, + 109 + ], + "centrality": 1 + }, + { + "uuid": "sym-51b1658664a464a28add7d39", + "level": "L3", + "label": "AuthBlockParser.parse", + "file_path": "src/libs/omniprotocol/auth/parser.ts", + "symbol_name": "AuthBlockParser.parse", + "line_range": [ + 11, + 63 + ], + "centrality": 1 + }, + { + "uuid": "sym-dd055a2b7be616db227088cd", + "level": "L3", + "label": "AuthBlockParser.encode", + "file_path": "src/libs/omniprotocol/auth/parser.ts", + "symbol_name": "AuthBlockParser.encode", + "line_range": [ + 68, + 93 + ], + "centrality": 1 + }, + { + "uuid": "sym-df685b6a9983f7afd60ba389", + "level": "L3", + "label": "AuthBlockParser.calculateSize", + "file_path": "src/libs/omniprotocol/auth/parser.ts", + "symbol_name": "AuthBlockParser.calculateSize", + "line_range": [ + 98, + 108 + ], + "centrality": 1 + }, + { + "uuid": "sym-98134ecd770aae6dcbec90ab", + "level": "L2", + "label": "AuthBlockParser", + "file_path": "src/libs/omniprotocol/auth/parser.ts", + "symbol_name": "AuthBlockParser", + "line_range": [ + 4, + 109 + ], + "centrality": 5 + }, + { + "uuid": "sym-1ddfb88e111a1fc510113fb2", + "level": "L3", + "label": "SignatureAlgorithm::api", + "file_path": "src/libs/omniprotocol/auth/types.ts", + "symbol_name": "SignatureAlgorithm::api", + "line_range": [ + 1, + 6 + ], + "centrality": 1 + }, + { + "uuid": "sym-8daeceb7337326d9572adf7f", + "level": "L2", + "label": "SignatureAlgorithm", + "file_path": "src/libs/omniprotocol/auth/types.ts", + "symbol_name": "SignatureAlgorithm", + "line_range": [ + 1, + 6 + ], + "centrality": 2 + }, + { + "uuid": "sym-12af65c030a64890b7bdd5c5", + "level": "L3", + "label": "SignatureMode::api", + "file_path": "src/libs/omniprotocol/auth/types.ts", + "symbol_name": "SignatureMode::api", + "line_range": [ + 8, + 14 + ], + "centrality": 1 + }, + { + "uuid": "sym-c906e076f2017c51d5f17ad9", + "level": "L2", + "label": "SignatureMode", + "file_path": "src/libs/omniprotocol/auth/types.ts", + "symbol_name": "SignatureMode", + "line_range": [ + 8, + 14 + ], + "centrality": 2 + }, + { + "uuid": "sym-7536e2fefc44da98f1f245f0", + "level": "L3", + "label": "AuthBlock::api", + "file_path": "src/libs/omniprotocol/auth/types.ts", + "symbol_name": "AuthBlock::api", + "line_range": [ + 16, + 22 + ], + "centrality": 1 + }, + { + "uuid": "sym-7481da4d2551622256f79c34", + "level": "L2", + "label": "AuthBlock", + "file_path": "src/libs/omniprotocol/auth/types.ts", + "symbol_name": "AuthBlock", + "line_range": [ + 16, + 22 + ], + "centrality": 2 + }, + { + "uuid": "sym-57cc691568b21b3800bc42b8", + "level": "L3", + "label": "VerificationResult::api", + "file_path": "src/libs/omniprotocol/auth/types.ts", + "symbol_name": "VerificationResult::api", + "line_range": [ + 24, + 28 + ], + "centrality": 1 + }, + { + "uuid": "sym-9d0b831a20db10611cc45fb1", + "level": "L2", + "label": "VerificationResult", + "file_path": "src/libs/omniprotocol/auth/types.ts", + "symbol_name": "VerificationResult", + "line_range": [ + 24, + 28 + ], + "centrality": 2 + }, + { + "uuid": "sym-5262afb38ed02f6e62f0d091", + "level": "L3", + "label": "SignatureVerifier::api", + "file_path": "src/libs/omniprotocol/auth/verifier.ts", + "symbol_name": "SignatureVerifier::api", + "line_range": [ + 7, + 207 + ], + "centrality": 1 + }, + { + "uuid": "sym-990cc459ace9fb6d1eb373ea", + "level": "L3", + "label": "SignatureVerifier.verify", + "file_path": "src/libs/omniprotocol/auth/verifier.ts", + "symbol_name": "SignatureVerifier.verify", + "line_range": [ + 18, + 71 + ], + "centrality": 1 + }, + { + "uuid": "sym-734d63d64bf5b1e1a55b41ae", + "level": "L2", + "label": "SignatureVerifier", + "file_path": "src/libs/omniprotocol/auth/verifier.ts", + "symbol_name": "SignatureVerifier", + "line_range": [ + 7, + 207 + ], + "centrality": 3 + }, + { + "uuid": "sym-0258ae2808ceacc5e5c7daf6", + "level": "L3", + "label": "*", + "file_path": "src/libs/omniprotocol/index.ts", + "symbol_name": "*", + "line_range": [ + 1, + 1 + ], + "centrality": 1 + }, + { + "uuid": "sym-748b9ac5e4eefbb8f1c662db", + "level": "L3", + "label": "*", + "file_path": "src/libs/omniprotocol/index.ts", + "symbol_name": "*", + "line_range": [ + 2, + 2 + ], + "centrality": 1 + }, + { + "uuid": "sym-905c4a303dc09878f445885a", + "level": "L3", + "label": "*", + "file_path": "src/libs/omniprotocol/index.ts", + "symbol_name": "*", + "line_range": [ + 3, + 3 + ], + "centrality": 1 + }, + { + "uuid": "sym-13f054ebc0ac09ce91489435", + "level": "L3", + "label": "*", + "file_path": "src/libs/omniprotocol/index.ts", + "symbol_name": "*", + "line_range": [ + 4, + 4 + ], + "centrality": 1 + }, + { + "uuid": "sym-9234875151f1a7f0cf31b9e7", + "level": "L3", + "label": "*", + "file_path": "src/libs/omniprotocol/index.ts", + "symbol_name": "*", + "line_range": [ + 5, + 5 + ], + "centrality": 1 + }, + { + "uuid": "sym-daabbda2f57bbfdba83b8e83", + "level": "L3", + "label": "*", + "file_path": "src/libs/omniprotocol/index.ts", + "symbol_name": "*", + "line_range": [ + 6, + 6 + ], + "centrality": 1 + }, + { + "uuid": "sym-733e1ea545c75abf365916d0", + "level": "L3", + "label": "*", + "file_path": "src/libs/omniprotocol/index.ts", + "symbol_name": "*", + "line_range": [ + 7, + 7 + ], + "centrality": 1 + }, + { + "uuid": "sym-30146865aa7ee601c7c84c2c", + "level": "L3", + "label": "*", + "file_path": "src/libs/omniprotocol/index.ts", + "symbol_name": "*", + "line_range": [ + 8, + 8 + ], + "centrality": 1 + }, + { + "uuid": "sym-babb5160904dfa15d9efffde", + "level": "L3", + "label": "*", + "file_path": "src/libs/omniprotocol/index.ts", + "symbol_name": "*", + "line_range": [ + 9, + 9 + ], + "centrality": 1 + }, + { + "uuid": "sym-76bd6ff260e8e858c0a13b22", + "level": "L3", + "label": "*", + "file_path": "src/libs/omniprotocol/index.ts", + "symbol_name": "*", + "line_range": [ + 10, + 10 + ], + "centrality": 1 + }, + { + "uuid": "sym-267418c45b8286ee4f1c6f22", + "level": "L3", + "label": "*", + "file_path": "src/libs/omniprotocol/index.ts", + "symbol_name": "*", + "line_range": [ + 11, + 11 + ], + "centrality": 1 + }, + { + "uuid": "sym-718d0f88adf207171e198984", + "level": "L3", + "label": "*", + "file_path": "src/libs/omniprotocol/index.ts", + "symbol_name": "*", + "line_range": [ + 12, + 12 + ], + "centrality": 1 + }, + { + "uuid": "sym-335b3635e60265c0f047f94a", + "level": "L3", + "label": "*", + "file_path": "src/libs/omniprotocol/index.ts", + "symbol_name": "*", + "line_range": [ + 13, + 13 + ], + "centrality": 1 + }, + { + "uuid": "sym-47e8e5e81e562513babffa84", + "level": "L3", + "label": "*", + "file_path": "src/libs/omniprotocol/index.ts", + "symbol_name": "*", + "line_range": [ + 14, + 14 + ], + "centrality": 1 + }, + { + "uuid": "sym-65fd4ae8ff6b4e80cd8e7ddf", + "level": "L3", + "label": "*", + "file_path": "src/libs/omniprotocol/index.ts", + "symbol_name": "*", + "line_range": [ + 15, + 15 + ], + "centrality": 1 + }, + { + "uuid": "sym-9e392e3be1bb8e80b9d8eca0", + "level": "L3", + "label": "*", + "file_path": "src/libs/omniprotocol/index.ts", + "symbol_name": "*", + "line_range": [ + 16, + 16 + ], + "centrality": 1 + }, + { + "uuid": "sym-4b548d9bad1a3f7b3b804545", + "level": "L3", + "label": "*", + "file_path": "src/libs/omniprotocol/index.ts", + "symbol_name": "*", + "line_range": [ + 17, + 17 + ], + "centrality": 1 + }, + { + "uuid": "sym-8270be34adad1236a1768639", + "level": "L3", + "label": "BaseAdapterOptions::api", + "file_path": "src/libs/omniprotocol/integration/BaseAdapter.ts", + "symbol_name": "BaseAdapterOptions::api", + "line_range": [ + 23, + 25 + ], + "centrality": 1 + }, + { + "uuid": "sym-906fc1a6f627adb682f73f69", + "level": "L2", + "label": "BaseAdapterOptions", + "file_path": "src/libs/omniprotocol/integration/BaseAdapter.ts", + "symbol_name": "BaseAdapterOptions", + "line_range": [ + 23, + 25 + ], + "centrality": 2 + }, + { + "uuid": "sym-98bddcf841a7edde32258eff", + "level": "L3", + "label": "BaseOmniAdapter::api", + "file_path": "src/libs/omniprotocol/integration/BaseAdapter.ts", + "symbol_name": "BaseOmniAdapter::api", + "line_range": [ + 44, + 251 + ], + "centrality": 1 + }, + { + "uuid": "sym-eeda3f868c196fe0d908da30", + "level": "L3", + "label": "BaseOmniAdapter.migrationMode", + "file_path": "src/libs/omniprotocol/integration/BaseAdapter.ts", + "symbol_name": "BaseOmniAdapter.migrationMode", + "line_range": [ + 67, + 69 + ], + "centrality": 1 + }, + { + "uuid": "sym-ef6157dcde41199793a2f652", + "level": "L3", + "label": "BaseOmniAdapter.migrationMode", + "file_path": "src/libs/omniprotocol/integration/BaseAdapter.ts", + "symbol_name": "BaseOmniAdapter.migrationMode", + "line_range": [ + 71, + 73 + ], + "centrality": 1 + }, + { + "uuid": "sym-b3a77b32f73fa2f8e5b6eb38", + "level": "L3", + "label": "BaseOmniAdapter.omniPeers", + "file_path": "src/libs/omniprotocol/integration/BaseAdapter.ts", + "symbol_name": "BaseOmniAdapter.omniPeers", + "line_range": [ + 75, + 77 + ], + "centrality": 1 + }, + { + "uuid": "sym-28b62a49592cfcedda7995b5", + "level": "L3", + "label": "BaseOmniAdapter.shouldUseOmni", + "file_path": "src/libs/omniprotocol/integration/BaseAdapter.ts", + "symbol_name": "BaseOmniAdapter.shouldUseOmni", + "line_range": [ + 82, + 95 + ], + "centrality": 1 + }, + { + "uuid": "sym-0c27439debe25460e5640c81", + "level": "L3", + "label": "BaseOmniAdapter.markOmniPeer", + "file_path": "src/libs/omniprotocol/integration/BaseAdapter.ts", + "symbol_name": "BaseOmniAdapter.markOmniPeer", + "line_range": [ + 100, + 102 + ], + "centrality": 1 + }, + { + "uuid": "sym-da8dcc5ae3bdb357233500ed", + "level": "L3", + "label": "BaseOmniAdapter.markHttpPeer", + "file_path": "src/libs/omniprotocol/integration/BaseAdapter.ts", + "symbol_name": "BaseOmniAdapter.markHttpPeer", + "line_range": [ + 107, + 109 + ], + "centrality": 1 + }, + { + "uuid": "sym-fe29ef8358240f8b5d0efb67", + "level": "L3", + "label": "BaseOmniAdapter.httpToTcpConnectionString", + "file_path": "src/libs/omniprotocol/integration/BaseAdapter.ts", + "symbol_name": "BaseOmniAdapter.httpToTcpConnectionString", + "line_range": [ + 122, + 131 + ], + "centrality": 1 + }, + { + "uuid": "sym-b363a17c893ebc8b8c6ae66d", + "level": "L3", + "label": "BaseOmniAdapter.getTcpProtocol", + "file_path": "src/libs/omniprotocol/integration/BaseAdapter.ts", + "symbol_name": "BaseOmniAdapter.getTcpProtocol", + "line_range": [ + 137, + 141 + ], + "centrality": 1 + }, + { + "uuid": "sym-e04adf46980d5389c13c53f2", + "level": "L3", + "label": "BaseOmniAdapter.getOmniPort", + "file_path": "src/libs/omniprotocol/integration/BaseAdapter.ts", + "symbol_name": "BaseOmniAdapter.getOmniPort", + "line_range": [ + 147, + 154 + ], + "centrality": 1 + }, + { + "uuid": "sym-24238aae044a9288508e528f", + "level": "L3", + "label": "BaseOmniAdapter.getPrivateKey", + "file_path": "src/libs/omniprotocol/integration/BaseAdapter.ts", + "symbol_name": "BaseOmniAdapter.getPrivateKey", + "line_range": [ + 163, + 165 + ], + "centrality": 1 + }, + { + "uuid": "sym-a2b4ef37ab235210f129c582", + "level": "L3", + "label": "BaseOmniAdapter.getPublicKey", + "file_path": "src/libs/omniprotocol/integration/BaseAdapter.ts", + "symbol_name": "BaseOmniAdapter.getPublicKey", + "line_range": [ + 170, + 172 + ], + "centrality": 1 + }, + { + "uuid": "sym-79b1cc421f7bb8225330d102", + "level": "L3", + "label": "BaseOmniAdapter.hasKeys", + "file_path": "src/libs/omniprotocol/integration/BaseAdapter.ts", + "symbol_name": "BaseOmniAdapter.hasKeys", + "line_range": [ + 177, + 179 + ], + "centrality": 1 + }, + { + "uuid": "sym-2d2d0700e456ea680a685e38", + "level": "L3", + "label": "BaseOmniAdapter.getConnectionPool", + "file_path": "src/libs/omniprotocol/integration/BaseAdapter.ts", + "symbol_name": "BaseOmniAdapter.getConnectionPool", + "line_range": [ + 188, + 190 + ], + "centrality": 1 + }, + { + "uuid": "sym-74ba7a042ee52e20b6cdfcc9", + "level": "L3", + "label": "BaseOmniAdapter.getPoolStats", + "file_path": "src/libs/omniprotocol/integration/BaseAdapter.ts", + "symbol_name": "BaseOmniAdapter.getPoolStats", + "line_range": [ + 195, + 206 + ], + "centrality": 1 + }, + { + "uuid": "sym-220ff4ee1d8624cffd6e1d74", + "level": "L3", + "label": "BaseOmniAdapter.isFatalMode", + "file_path": "src/libs/omniprotocol/integration/BaseAdapter.ts", + "symbol_name": "BaseOmniAdapter.isFatalMode", + "line_range": [ + 215, + 217 + ], + "centrality": 1 + }, + { + "uuid": "sym-2989dc3b816456aad25e312a", + "level": "L3", + "label": "BaseOmniAdapter.handleFatalError", + "file_path": "src/libs/omniprotocol/integration/BaseAdapter.ts", + "symbol_name": "BaseOmniAdapter.handleFatalError", + "line_range": [ + 227, + 250 + ], + "centrality": 1 + }, + { + "uuid": "sym-33f3a54f75b5f49ab6ca4e18", + "level": "L2", + "label": "BaseOmniAdapter", + "file_path": "src/libs/omniprotocol/integration/BaseAdapter.ts", + "symbol_name": "BaseOmniAdapter", + "line_range": [ + 44, + 251 + ], + "centrality": 18 + }, + { + "uuid": "sym-f94e3f7f5326b8f03a004c92", + "level": "L3", + "label": "ConsensusAdapterOptions::api", + "file_path": "src/libs/omniprotocol/integration/consensusAdapter.ts", + "symbol_name": "ConsensusAdapterOptions::api", + "line_range": [ + 27, + 27 + ], + "centrality": 1 + }, + { + "uuid": "sym-6fc1a8d7bec38c1c054731cf", + "level": "L2", + "label": "ConsensusAdapterOptions", + "file_path": "src/libs/omniprotocol/integration/consensusAdapter.ts", + "symbol_name": "ConsensusAdapterOptions", + "line_range": [ + 27, + 27 + ], + "centrality": 2 + }, + { + "uuid": "sym-f289610a972129ad1a034265", + "level": "L3", + "label": "ConsensusOmniAdapter::api", + "file_path": "src/libs/omniprotocol/integration/consensusAdapter.ts", + "symbol_name": "ConsensusOmniAdapter::api", + "line_range": [ + 46, + 280 + ], + "centrality": 1 + }, + { + "uuid": "sym-065cec27a89a1f96d35d9616", + "level": "L3", + "label": "ConsensusOmniAdapter.adaptConsensusCall", + "file_path": "src/libs/omniprotocol/integration/consensusAdapter.ts", + "symbol_name": "ConsensusOmniAdapter.adaptConsensusCall", + "line_range": [ + 58, + 142 + ], + "centrality": 1 + }, + { + "uuid": "sym-c622baacd0af9f2fa1e8a75d", + "level": "L2", + "label": "ConsensusOmniAdapter", + "file_path": "src/libs/omniprotocol/integration/consensusAdapter.ts", + "symbol_name": "ConsensusOmniAdapter", + "line_range": [ + 46, + 280 + ], + "centrality": 3 + }, + { + "uuid": "sym-5e3c44e475fe3984a48af08e", + "level": "L3", + "label": "default", + "file_path": "src/libs/omniprotocol/integration/consensusAdapter.ts", + "symbol_name": "default", + "line_range": [ + 282, + 282 + ], + "centrality": 1 + }, + { + "uuid": "sym-9d04b4352850e4e29d81aa9a", + "level": "L3", + "label": "BaseOmniAdapter", + "file_path": "src/libs/omniprotocol/integration/index.ts", + "symbol_name": "BaseOmniAdapter", + "line_range": [ + 9, + 9 + ], + "centrality": 1 + }, + { + "uuid": "sym-8d46e34227aa3b82778ad701", + "level": "L3", + "label": "BaseAdapterOptions", + "file_path": "src/libs/omniprotocol/integration/index.ts", + "symbol_name": "BaseAdapterOptions", + "line_range": [ + 9, + 9 + ], + "centrality": 1 + }, + { + "uuid": "sym-0d16d90a0af194182c7763d8", + "level": "L3", + "label": "PeerOmniAdapter", + "file_path": "src/libs/omniprotocol/integration/index.ts", + "symbol_name": "PeerOmniAdapter", + "line_range": [ + 12, + 12 + ], + "centrality": 1 + }, + { + "uuid": "sym-294aec35de62c4328120b87f", + "level": "L3", + "label": "AdapterOptions", + "file_path": "src/libs/omniprotocol/integration/index.ts", + "symbol_name": "AdapterOptions", + "line_range": [ + 12, + 12 + ], + "centrality": 1 + }, + { + "uuid": "sym-c10aa7411e9a4c559b6bf35f", + "level": "L3", + "label": "ConsensusOmniAdapter", + "file_path": "src/libs/omniprotocol/integration/index.ts", + "symbol_name": "ConsensusOmniAdapter", + "line_range": [ + 15, + 15 + ], + "centrality": 1 + }, + { + "uuid": "sym-bb4af358ea202588d8c6fb5e", + "level": "L3", + "label": "ConsensusAdapterOptions", + "file_path": "src/libs/omniprotocol/integration/index.ts", + "symbol_name": "ConsensusAdapterOptions", + "line_range": [ + 15, + 15 + ], + "centrality": 1 + }, + { + "uuid": "sym-4f60154a5b98b9ad1a439365", + "level": "L3", + "label": "getNodePrivateKey", + "file_path": "src/libs/omniprotocol/integration/index.ts", + "symbol_name": "getNodePrivateKey", + "line_range": [ + 19, + 19 + ], + "centrality": 1 + }, + { + "uuid": "sym-8532559ab87c585dd75c711e", + "level": "L3", + "label": "getNodePublicKey", + "file_path": "src/libs/omniprotocol/integration/index.ts", + "symbol_name": "getNodePublicKey", + "line_range": [ + 20, + 20 + ], + "centrality": 1 + }, + { + "uuid": "sym-c75dad10441655e24de54ea9", + "level": "L3", + "label": "getNodeIdentity", + "file_path": "src/libs/omniprotocol/integration/index.ts", + "symbol_name": "getNodeIdentity", + "line_range": [ + 21, + 21 + ], + "centrality": 1 + }, + { + "uuid": "sym-32194fbfce8c990fbf259c10", + "level": "L3", + "label": "hasNodeKeys", + "file_path": "src/libs/omniprotocol/integration/index.ts", + "symbol_name": "hasNodeKeys", + "line_range": [ + 22, + 22 + ], + "centrality": 1 + }, + { + "uuid": "sym-2b50e307c6dd33f305ef5781", + "level": "L3", + "label": "validateNodeKeys", + "file_path": "src/libs/omniprotocol/integration/index.ts", + "symbol_name": "validateNodeKeys", + "line_range": [ + 23, + 23 + ], + "centrality": 1 + }, + { + "uuid": "sym-20fdb18a1d51a344c3e5f1a6", + "level": "L3", + "label": "startOmniProtocolServer", + "file_path": "src/libs/omniprotocol/integration/index.ts", + "symbol_name": "startOmniProtocolServer", + "line_range": [ + 27, + 27 + ], + "centrality": 1 + }, + { + "uuid": "sym-21f9add087cbe8548e5cfaa7", + "level": "L3", + "label": "getNodePrivateKey", + "file_path": "src/libs/omniprotocol/integration/keys.ts", + "symbol_name": "getNodePrivateKey", + "line_range": [ + 21, + 60 + ], + "centrality": 3 + }, + { + "uuid": "sym-28528c136e20c5b9216375cc", + "level": "L3", + "label": "getNodePublicKey", + "file_path": "src/libs/omniprotocol/integration/keys.ts", + "symbol_name": "getNodePublicKey", + "line_range": [ + 66, + 91 + ], + "centrality": 4 + }, + { + "uuid": "sym-125aa959f581df6cef0211c3", + "level": "L3", + "label": "getNodeIdentity", + "file_path": "src/libs/omniprotocol/integration/keys.ts", + "symbol_name": "getNodeIdentity", + "line_range": [ + 97, + 108 + ], + "centrality": 2 + }, + { + "uuid": "sym-1c67049066747e28049dd5e3", + "level": "L3", + "label": "hasNodeKeys", + "file_path": "src/libs/omniprotocol/integration/keys.ts", + "symbol_name": "hasNodeKeys", + "line_range": [ + 114, + 118 + ], + "centrality": 3 + }, + { + "uuid": "sym-815707b26951dca6661da541", + "level": "L3", + "label": "validateNodeKeys", + "file_path": "src/libs/omniprotocol/integration/keys.ts", + "symbol_name": "validateNodeKeys", + "line_range": [ + 124, + 144 + ], + "centrality": 3 + }, + { + "uuid": "sym-8d5722b175b0c9218f6f7a1f", + "level": "L3", + "label": "AdapterOptions::api", + "file_path": "src/libs/omniprotocol/integration/peerAdapter.ts", + "symbol_name": "AdapterOptions::api", + "line_range": [ + 19, + 19 + ], + "centrality": 1 + }, + { + "uuid": "sym-ef97a186c9a7b5c8aabd5a90", + "level": "L2", + "label": "AdapterOptions", + "file_path": "src/libs/omniprotocol/integration/peerAdapter.ts", + "symbol_name": "AdapterOptions", + "line_range": [ + 19, + 19 + ], + "centrality": 2 + }, + { + "uuid": "sym-d4cba561cffde016f7f5b7a6", + "level": "L3", + "label": "PeerOmniAdapter::api", + "file_path": "src/libs/omniprotocol/integration/peerAdapter.ts", + "symbol_name": "PeerOmniAdapter::api", + "line_range": [ + 21, + 141 + ], + "centrality": 1 + }, + { + "uuid": "sym-0df78011e78e75646718383c", + "level": "L3", + "label": "PeerOmniAdapter.adaptCall", + "file_path": "src/libs/omniprotocol/integration/peerAdapter.ts", + "symbol_name": "PeerOmniAdapter.adaptCall", + "line_range": [ + 30, + 121 + ], + "centrality": 1 + }, + { + "uuid": "sym-3ea283854050f93f09f7bd41", + "level": "L3", + "label": "PeerOmniAdapter.adaptLongCall", + "file_path": "src/libs/omniprotocol/integration/peerAdapter.ts", + "symbol_name": "PeerOmniAdapter.adaptLongCall", + "line_range": [ + 127, + 140 + ], + "centrality": 1 + }, + { + "uuid": "sym-8865a437064bf5957a1cb25d", + "level": "L2", + "label": "PeerOmniAdapter", + "file_path": "src/libs/omniprotocol/integration/peerAdapter.ts", + "symbol_name": "PeerOmniAdapter", + "line_range": [ + 21, + 141 + ], + "centrality": 4 + }, + { + "uuid": "sym-fb22a88dee4e13f011188bb4", + "level": "L3", + "label": "OmniServerConfig::api", + "file_path": "src/libs/omniprotocol/integration/startup.ts", + "symbol_name": "OmniServerConfig::api", + "line_range": [ + 18, + 34 + ], + "centrality": 1 + }, + { + "uuid": "sym-61acf2e50e86a7b8950968d6", + "level": "L2", + "label": "OmniServerConfig", + "file_path": "src/libs/omniprotocol/integration/startup.ts", + "symbol_name": "OmniServerConfig", + "line_range": [ + 18, + 34 + ], + "centrality": 2 + }, + { + "uuid": "sym-38903f0502c45543a1abf916", + "level": "L3", + "label": "startOmniProtocolServer", + "file_path": "src/libs/omniprotocol/integration/startup.ts", + "symbol_name": "startOmniProtocolServer", + "line_range": [ + 41, + 145 + ], + "centrality": 1 + }, + { + "uuid": "sym-dc1f8edeeb79e07414f75002", + "level": "L3", + "label": "stopOmniProtocolServer", + "file_path": "src/libs/omniprotocol/integration/startup.ts", + "symbol_name": "stopOmniProtocolServer", + "line_range": [ + 150, + 164 + ], + "centrality": 1 + }, + { + "uuid": "sym-bc5ae08b5a8d0d4051accdc7", + "level": "L3", + "label": "getOmniProtocolServer", + "file_path": "src/libs/omniprotocol/integration/startup.ts", + "symbol_name": "getOmniProtocolServer", + "line_range": [ + 169, + 171 + ], + "centrality": 1 + }, + { + "uuid": "sym-7a79542eed185c47fa11f698", + "level": "L3", + "label": "getOmniProtocolServerStats", + "file_path": "src/libs/omniprotocol/integration/startup.ts", + "symbol_name": "getOmniProtocolServerStats", + "line_range": [ + 176, + 181 + ], + "centrality": 1 + }, + { + "uuid": "sym-d252a54842776aa74372f6f2", + "level": "L3", + "label": "DispatchOptions::api", + "file_path": "src/libs/omniprotocol/protocol/dispatcher.ts", + "symbol_name": "DispatchOptions::api", + "line_range": [ + 11, + 15 + ], + "centrality": 1 + }, + { + "uuid": "sym-c1d0127d63060ca93441f113", + "level": "L2", + "label": "DispatchOptions", + "file_path": "src/libs/omniprotocol/protocol/dispatcher.ts", + "symbol_name": "DispatchOptions", + "line_range": [ + 11, + 15 + ], + "centrality": 2 + }, + { + "uuid": "sym-66031640dec8be166f293f56", + "level": "L3", + "label": "dispatchOmniMessage", + "file_path": "src/libs/omniprotocol/protocol/dispatcher.ts", + "symbol_name": "dispatchOmniMessage", + "line_range": [ + 17, + 74 + ], + "centrality": 2 + }, + { + "uuid": "sym-55f93e8069ac7b64652c0d68", + "level": "L3", + "label": "handleProposeBlockHash", + "file_path": "src/libs/omniprotocol/protocol/handlers/consensus.ts", + "symbol_name": "handleProposeBlockHash", + "line_range": [ + 23, + 70 + ], + "centrality": 2 + }, + { + "uuid": "sym-99b0d2564383e319659c1396", + "level": "L3", + "label": "handleSetValidatorPhase", + "file_path": "src/libs/omniprotocol/protocol/handlers/consensus.ts", + "symbol_name": "handleSetValidatorPhase", + "line_range": [ + 78, + 121 + ], + "centrality": 2 + }, + { + "uuid": "sym-b4dfd8c83a7fc0baf92128df", + "level": "L3", + "label": "handleGreenlight", + "file_path": "src/libs/omniprotocol/protocol/handlers/consensus.ts", + "symbol_name": "handleGreenlight", + "line_range": [ + 129, + 164 + ], + "centrality": 2 + }, + { + "uuid": "sym-1cfae654989b906d03da6705", + "level": "L3", + "label": "handleGetCommonValidatorSeed", + "file_path": "src/libs/omniprotocol/protocol/handlers/consensus.ts", + "symbol_name": "handleGetCommonValidatorSeed", + "line_range": [ + 171, + 195 + ], + "centrality": 2 + }, + { + "uuid": "sym-28d0b0409648d85cbd16e1fa", + "level": "L3", + "label": "handleGetValidatorTimestamp", + "file_path": "src/libs/omniprotocol/protocol/handlers/consensus.ts", + "symbol_name": "handleGetValidatorTimestamp", + "line_range": [ + 202, + 227 + ], + "centrality": 2 + }, + { + "uuid": "sym-e66e3cbcbd613726d7235a91", + "level": "L3", + "label": "handleGetBlockTimestamp", + "file_path": "src/libs/omniprotocol/protocol/handlers/consensus.ts", + "symbol_name": "handleGetBlockTimestamp", + "line_range": [ + 234, + 259 + ], + "centrality": 2 + }, + { + "uuid": "sym-07c2b09c468e0b5ad536e20f", + "level": "L3", + "label": "handleGetValidatorPhase", + "file_path": "src/libs/omniprotocol/protocol/handlers/consensus.ts", + "symbol_name": "handleGetValidatorPhase", + "line_range": [ + 266, + 297 + ], + "centrality": 2 + }, + { + "uuid": "sym-f57f553914fb207445eda03d", + "level": "L3", + "label": "handleGetPeerlist", + "file_path": "src/libs/omniprotocol/protocol/handlers/control.ts", + "symbol_name": "handleGetPeerlist", + "line_range": [ + 44, + 51 + ], + "centrality": 1 + }, + { + "uuid": "sym-d71b89a0ab10dcdd511293d3", + "level": "L3", + "label": "handlePeerlistSync", + "file_path": "src/libs/omniprotocol/protocol/handlers/control.ts", + "symbol_name": "handlePeerlistSync", + "line_range": [ + 53, + 62 + ], + "centrality": 1 + }, + { + "uuid": "sym-7061b9df6db226c496e459c6", + "level": "L3", + "label": "handleNodeCall", + "file_path": "src/libs/omniprotocol/protocol/handlers/control.ts", + "symbol_name": "handleNodeCall", + "line_range": [ + 64, + 239 + ], + "centrality": 5 + }, + { + "uuid": "sym-fe23be8635119990ef0c5164", + "level": "L3", + "label": "handleGetPeerInfo", + "file_path": "src/libs/omniprotocol/protocol/handlers/control.ts", + "symbol_name": "handleGetPeerInfo", + "line_range": [ + 241, + 246 + ], + "centrality": 1 + }, + { + "uuid": "sym-29213aa85f749813078f0b0d", + "level": "L3", + "label": "handleGetNodeVersion", + "file_path": "src/libs/omniprotocol/protocol/handlers/control.ts", + "symbol_name": "handleGetNodeVersion", + "line_range": [ + 248, + 251 + ], + "centrality": 1 + }, + { + "uuid": "sym-66423d47c95841fbe2ed154c", + "level": "L3", + "label": "handleGetNodeStatus", + "file_path": "src/libs/omniprotocol/protocol/handlers/control.ts", + "symbol_name": "handleGetNodeStatus", + "line_range": [ + 253, + 257 + ], + "centrality": 1 + }, + { + "uuid": "sym-8721b786443fefdf61f3484d", + "level": "L3", + "label": "handleIdentityAssign", + "file_path": "src/libs/omniprotocol/protocol/handlers/gcr.ts", + "symbol_name": "handleIdentityAssign", + "line_range": [ + 51, + 119 + ], + "centrality": 1 + }, + { + "uuid": "sym-442e0e5efaae973242d3a83e", + "level": "L3", + "label": "handleGetAddressInfo", + "file_path": "src/libs/omniprotocol/protocol/handlers/gcr.ts", + "symbol_name": "handleGetAddressInfo", + "line_range": [ + 121, + 159 + ], + "centrality": 2 + }, + { + "uuid": "sym-4a56ab36294dcc8703d06e4d", + "level": "L3", + "label": "handleGetIdentities", + "file_path": "src/libs/omniprotocol/protocol/handlers/gcr.ts", + "symbol_name": "handleGetIdentities", + "line_range": [ + 166, + 196 + ], + "centrality": 2 + }, + { + "uuid": "sym-8fb8125b35dabb0bb867c2c3", + "level": "L3", + "label": "handleGetWeb2Identities", + "file_path": "src/libs/omniprotocol/protocol/handlers/gcr.ts", + "symbol_name": "handleGetWeb2Identities", + "line_range": [ + 203, + 233 + ], + "centrality": 2 + }, + { + "uuid": "sym-7e7b96a10468c1edce3a73ae", + "level": "L3", + "label": "handleGetXmIdentities", + "file_path": "src/libs/omniprotocol/protocol/handlers/gcr.ts", + "symbol_name": "handleGetXmIdentities", + "line_range": [ + 240, + 270 + ], + "centrality": 2 + }, + { + "uuid": "sym-c48b984748dadec99be2ea79", + "level": "L3", + "label": "handleGetPoints", + "file_path": "src/libs/omniprotocol/protocol/handlers/gcr.ts", + "symbol_name": "handleGetPoints", + "line_range": [ + 277, + 307 + ], + "centrality": 2 + }, + { + "uuid": "sym-27adc406e8d7be915bdab915", + "level": "L3", + "label": "handleGetTopAccounts", + "file_path": "src/libs/omniprotocol/protocol/handlers/gcr.ts", + "symbol_name": "handleGetTopAccounts", + "line_range": [ + 315, + 335 + ], + "centrality": 2 + }, + { + "uuid": "sym-9dfd285f7a17eac27325557e", + "level": "L3", + "label": "handleGetReferralInfo", + "file_path": "src/libs/omniprotocol/protocol/handlers/gcr.ts", + "symbol_name": "handleGetReferralInfo", + "line_range": [ + 342, + 372 + ], + "centrality": 2 + }, + { + "uuid": "sym-f6d470d11d1bce1c9ae5c46d", + "level": "L3", + "label": "handleValidateReferral", + "file_path": "src/libs/omniprotocol/protocol/handlers/gcr.ts", + "symbol_name": "handleValidateReferral", + "line_range": [ + 379, + 409 + ], + "centrality": 2 + }, + { + "uuid": "sym-dd0d6da79a6076f6a04e978a", + "level": "L3", + "label": "handleGetAccountByIdentity", + "file_path": "src/libs/omniprotocol/protocol/handlers/gcr.ts", + "symbol_name": "handleGetAccountByIdentity", + "line_range": [ + 416, + 446 + ], + "centrality": 2 + }, + { + "uuid": "sym-9cfa7eb6554a93203930565f", + "level": "L3", + "label": "handleL2PSGeneric", + "file_path": "src/libs/omniprotocol/protocol/handlers/l2ps.ts", + "symbol_name": "handleL2PSGeneric", + "line_range": [ + 36, + 72 + ], + "centrality": 2 + }, + { + "uuid": "sym-0c9c446090c5e603032ab8cf", + "level": "L3", + "label": "handleL2PSSubmitEncryptedTx", + "file_path": "src/libs/omniprotocol/protocol/handlers/l2ps.ts", + "symbol_name": "handleL2PSSubmitEncryptedTx", + "line_range": [ + 80, + 128 + ], + "centrality": 2 + }, + { + "uuid": "sym-44d515e6bda84183724780b8", + "level": "L3", + "label": "handleL2PSGetProof", + "file_path": "src/libs/omniprotocol/protocol/handlers/l2ps.ts", + "symbol_name": "handleL2PSGetProof", + "line_range": [ + 136, + 171 + ], + "centrality": 1 + }, + { + "uuid": "sym-44f589250824db7b5a096f65", + "level": "L3", + "label": "handleL2PSVerifyBatch", + "file_path": "src/libs/omniprotocol/protocol/handlers/l2ps.ts", + "symbol_name": "handleL2PSVerifyBatch", + "line_range": [ + 179, + 228 + ], + "centrality": 1 + }, + { + "uuid": "sym-b97361a9401c3a71b5cb1998", + "level": "L3", + "label": "handleL2PSSyncMempool", + "file_path": "src/libs/omniprotocol/protocol/handlers/l2ps.ts", + "symbol_name": "handleL2PSSyncMempool", + "line_range": [ + 236, + 280 + ], + "centrality": 1 + }, + { + "uuid": "sym-92202682f16c52bae37d49f3", + "level": "L3", + "label": "handleL2PSGetBatchStatus", + "file_path": "src/libs/omniprotocol/protocol/handlers/l2ps.ts", + "symbol_name": "handleL2PSGetBatchStatus", + "line_range": [ + 288, + 318 + ], + "centrality": 1 + }, + { + "uuid": "sym-56f866c2f73fcd13683b856e", + "level": "L3", + "label": "handleL2PSGetParticipation", + "file_path": "src/libs/omniprotocol/protocol/handlers/l2ps.ts", + "symbol_name": "handleL2PSGetParticipation", + "line_range": [ + 326, + 365 + ], + "centrality": 1 + }, + { + "uuid": "sym-fc93c1389ab92ee65c717efc", + "level": "L3", + "label": "handleL2PSHashUpdate", + "file_path": "src/libs/omniprotocol/protocol/handlers/l2ps.ts", + "symbol_name": "handleL2PSHashUpdate", + "line_range": [ + 374, + 420 + ], + "centrality": 1 + }, + { + "uuid": "sym-70988e4b53bbd62ef2940b36", + "level": "L3", + "label": "handleProtoVersionNegotiate", + "file_path": "src/libs/omniprotocol/protocol/handlers/meta.ts", + "symbol_name": "handleProtoVersionNegotiate", + "line_range": [ + 23, + 54 + ], + "centrality": 1 + }, + { + "uuid": "sym-3cf96cee618774e41d2dfe8a", + "level": "L3", + "label": "handleProtoCapabilityExchange", + "file_path": "src/libs/omniprotocol/protocol/handlers/meta.ts", + "symbol_name": "handleProtoCapabilityExchange", + "line_range": [ + 56, + 70 + ], + "centrality": 1 + }, + { + "uuid": "sym-5e497086f6306f35948392bf", + "level": "L3", + "label": "handleProtoError", + "file_path": "src/libs/omniprotocol/protocol/handlers/meta.ts", + "symbol_name": "handleProtoError", + "line_range": [ + 72, + 85 + ], + "centrality": 1 + }, + { + "uuid": "sym-5d5bc71be2e25f76fae74cf0", + "level": "L3", + "label": "handleProtoPing", + "file_path": "src/libs/omniprotocol/protocol/handlers/meta.ts", + "symbol_name": "handleProtoPing", + "line_range": [ + 87, + 101 + ], + "centrality": 1 + }, + { + "uuid": "sym-65524c0f66e7faa0eaa27ed8", + "level": "L3", + "label": "handleProtoDisconnect", + "file_path": "src/libs/omniprotocol/protocol/handlers/meta.ts", + "symbol_name": "handleProtoDisconnect", + "line_range": [ + 103, + 116 + ], + "centrality": 1 + }, + { + "uuid": "sym-32d856454b59fac1c5f9f097", + "level": "L3", + "label": "handleGetMempool", + "file_path": "src/libs/omniprotocol/protocol/handlers/sync.ts", + "symbol_name": "handleGetMempool", + "line_range": [ + 25, + 35 + ], + "centrality": 1 + }, + { + "uuid": "sym-ef424ed39e854a4281432490", + "level": "L3", + "label": "handleMempoolSync", + "file_path": "src/libs/omniprotocol/protocol/handlers/sync.ts", + "symbol_name": "handleMempoolSync", + "line_range": [ + 37, + 65 + ], + "centrality": 1 + }, + { + "uuid": "sym-e301fc6bbdb4b0a55d179d3b", + "level": "L3", + "label": "handleGetBlockByNumber", + "file_path": "src/libs/omniprotocol/protocol/handlers/sync.ts", + "symbol_name": "handleGetBlockByNumber", + "line_range": [ + 95, + 130 + ], + "centrality": 2 + }, + { + "uuid": "sym-ea690b435ee55e2db7bcf853", + "level": "L3", + "label": "handleBlockSync", + "file_path": "src/libs/omniprotocol/protocol/handlers/sync.ts", + "symbol_name": "handleBlockSync", + "line_range": [ + 132, + 157 + ], + "centrality": 1 + }, + { + "uuid": "sym-c1c3b15c1ce614072f76c61b", + "level": "L3", + "label": "handleGetBlocks", + "file_path": "src/libs/omniprotocol/protocol/handlers/sync.ts", + "symbol_name": "handleGetBlocks", + "line_range": [ + 159, + 176 + ], + "centrality": 1 + }, + { + "uuid": "sym-7b7933aea3be7d0c5d9c4362", + "level": "L3", + "label": "handleGetBlockByHash", + "file_path": "src/libs/omniprotocol/protocol/handlers/sync.ts", + "symbol_name": "handleGetBlockByHash", + "line_range": [ + 178, + 201 + ], + "centrality": 1 + }, + { + "uuid": "sym-951f37505baec8059fcb4a8c", + "level": "L3", + "label": "handleGetTxByHash", + "file_path": "src/libs/omniprotocol/protocol/handlers/sync.ts", + "symbol_name": "handleGetTxByHash", + "line_range": [ + 203, + 227 + ], + "centrality": 1 + }, + { + "uuid": "sym-74a72391e547cae03f9273bd", + "level": "L3", + "label": "handleMempoolMerge", + "file_path": "src/libs/omniprotocol/protocol/handlers/sync.ts", + "symbol_name": "handleMempoolMerge", + "line_range": [ + 229, + 268 + ], + "centrality": 1 + }, + { + "uuid": "sym-b37deaf5ad3d42513eeee725", + "level": "L3", + "label": "handleExecute", + "file_path": "src/libs/omniprotocol/protocol/handlers/transaction.ts", + "symbol_name": "handleExecute", + "line_range": [ + 38, + 72 + ], + "centrality": 2 + }, + { + "uuid": "sym-80af24f09cb8568074b9237b", + "level": "L3", + "label": "handleNativeBridge", + "file_path": "src/libs/omniprotocol/protocol/handlers/transaction.ts", + "symbol_name": "handleNativeBridge", + "line_range": [ + 80, + 114 + ], + "centrality": 2 + }, + { + "uuid": "sym-8a00aee2ef2d139bfb66e5af", + "level": "L3", + "label": "handleBridge", + "file_path": "src/libs/omniprotocol/protocol/handlers/transaction.ts", + "symbol_name": "handleBridge", + "line_range": [ + 122, + 166 + ], + "centrality": 2 + }, + { + "uuid": "sym-52e28e3349a0587ed39bb211", + "level": "L3", + "label": "handleBroadcast", + "file_path": "src/libs/omniprotocol/protocol/handlers/transaction.ts", + "symbol_name": "handleBroadcast", + "line_range": [ + 175, + 215 + ], + "centrality": 2 + }, + { + "uuid": "sym-68764677ca5ad459e67db833", + "level": "L3", + "label": "handleConfirm", + "file_path": "src/libs/omniprotocol/protocol/handlers/transaction.ts", + "symbol_name": "handleConfirm", + "line_range": [ + 224, + 252 + ], + "centrality": 1 + }, + { + "uuid": "sym-908c55c5efe8c66740e37055", + "level": "L3", + "label": "successResponse", + "file_path": "src/libs/omniprotocol/protocol/handlers/utils.ts", + "symbol_name": "successResponse", + "line_range": [ + 5, + 12 + ], + "centrality": 1 + }, + { + "uuid": "sym-40cdf81aea9ee142f33fdadf", + "level": "L3", + "label": "errorResponse", + "file_path": "src/libs/omniprotocol/protocol/handlers/utils.ts", + "symbol_name": "errorResponse", + "line_range": [ + 14, + 25 + ], + "centrality": 1 + }, + { + "uuid": "sym-3d600ff95898af2342185384", + "level": "L3", + "label": "encodeResponse", + "file_path": "src/libs/omniprotocol/protocol/handlers/utils.ts", + "symbol_name": "encodeResponse", + "line_range": [ + 27, + 29 + ], + "centrality": 1 + }, + { + "uuid": "sym-a5031dfc8e0cc73fef0da379", + "level": "L3", + "label": "OmniOpcode::api", + "file_path": "src/libs/omniprotocol/protocol/opcodes.ts", + "symbol_name": "OmniOpcode::api", + "line_range": [ + 1, + 87 + ], + "centrality": 1 + }, + { + "uuid": "sym-1a3586208ccd98a2e6978fb3", + "level": "L2", + "label": "OmniOpcode", + "file_path": "src/libs/omniprotocol/protocol/opcodes.ts", + "symbol_name": "OmniOpcode", + "line_range": [ + 1, + 87 + ], + "centrality": 2 + }, + { + "uuid": "sym-5c8e5e8a39104aecb286893f", + "level": "L3", + "label": "ALL_REGISTERED_OPCODES", + "file_path": "src/libs/omniprotocol/protocol/opcodes.ts", + "symbol_name": "ALL_REGISTERED_OPCODES", + "line_range": [ + 89, + 91 + ], + "centrality": 1 + }, + { + "uuid": "sym-1e4bb01db213569973c9fb34", + "level": "L3", + "label": "opcodeToString", + "file_path": "src/libs/omniprotocol/protocol/opcodes.ts", + "symbol_name": "opcodeToString", + "line_range": [ + 93, + 95 + ], + "centrality": 1 + }, + { + "uuid": "sym-386b941d76f4c8f10a187435", + "level": "L3", + "label": "HandlerDescriptor::api", + "file_path": "src/libs/omniprotocol/protocol/registry.ts", + "symbol_name": "HandlerDescriptor::api", + "line_range": [ + 68, + 73 + ], + "centrality": 1 + }, + { + "uuid": "sym-465a6407cdbddf468c7c3251", + "level": "L2", + "label": "HandlerDescriptor", + "file_path": "src/libs/omniprotocol/protocol/registry.ts", + "symbol_name": "HandlerDescriptor", + "line_range": [ + 68, + 73 + ], + "centrality": 2 + }, + { + "uuid": "sym-90e4a197be8ff419ed66d830", + "level": "L3", + "label": "HandlerRegistry::api", + "file_path": "src/libs/omniprotocol/protocol/registry.ts", + "symbol_name": "HandlerRegistry::api", + "line_range": [ + 75, + 75 + ], + "centrality": 1 + }, + { + "uuid": "sym-66f6973f6288a7f36a7c1d28", + "level": "L2", + "label": "HandlerRegistry", + "file_path": "src/libs/omniprotocol/protocol/registry.ts", + "symbol_name": "HandlerRegistry", + "line_range": [ + 75, + 75 + ], + "centrality": 2 + }, + { + "uuid": "sym-af3f501ea2464a1d43010bea", + "level": "L3", + "label": "handlerRegistry", + "file_path": "src/libs/omniprotocol/protocol/registry.ts", + "symbol_name": "handlerRegistry", + "line_range": [ + 169, + 169 + ], + "centrality": 1 + }, + { + "uuid": "sym-7109d15742026d0f311996ea", + "level": "L3", + "label": "getHandler", + "file_path": "src/libs/omniprotocol/protocol/registry.ts", + "symbol_name": "getHandler", + "line_range": [ + 182, + 184 + ], + "centrality": 1 + }, + { + "uuid": "sym-534438d5ba67b8592440eefb", + "level": "L3", + "label": "RateLimiter::api", + "file_path": "src/libs/omniprotocol/ratelimit/RateLimiter.ts", + "symbol_name": "RateLimiter::api", + "line_range": [ + 15, + 331 + ], + "centrality": 1 + }, + { + "uuid": "sym-c48ae3e66b0f174a70e412e5", + "level": "L3", + "label": "RateLimiter.checkConnection", + "file_path": "src/libs/omniprotocol/ratelimit/RateLimiter.ts", + "symbol_name": "RateLimiter.checkConnection", + "line_range": [ + 42, + 90 + ], + "centrality": 1 + }, + { + "uuid": "sym-4e12f25c5ce54e2bbda81d0c", + "level": "L3", + "label": "RateLimiter.addConnection", + "file_path": "src/libs/omniprotocol/ratelimit/RateLimiter.ts", + "symbol_name": "RateLimiter.addConnection", + "line_range": [ + 95, + 101 + ], + "centrality": 1 + }, + { + "uuid": "sym-cdc874c6e398062ee16c8b38", + "level": "L3", + "label": "RateLimiter.removeConnection", + "file_path": "src/libs/omniprotocol/ratelimit/RateLimiter.ts", + "symbol_name": "RateLimiter.removeConnection", + "line_range": [ + 106, + 114 + ], + "centrality": 1 + }, + { + "uuid": "sym-89e994f15545e398c7e2addc", + "level": "L3", + "label": "RateLimiter.checkIPRequest", + "file_path": "src/libs/omniprotocol/ratelimit/RateLimiter.ts", + "symbol_name": "RateLimiter.checkIPRequest", + "line_range": [ + 119, + 129 + ], + "centrality": 1 + }, + { + "uuid": "sym-e955b50b1f96f9bc3aaa5e9c", + "level": "L3", + "label": "RateLimiter.checkIdentityRequest", + "file_path": "src/libs/omniprotocol/ratelimit/RateLimiter.ts", + "symbol_name": "RateLimiter.checkIdentityRequest", + "line_range": [ + 134, + 144 + ], + "centrality": 1 + }, + { + "uuid": "sym-76dcb81a85f54822054465ae", + "level": "L3", + "label": "RateLimiter.stop", + "file_path": "src/libs/omniprotocol/ratelimit/RateLimiter.ts", + "symbol_name": "RateLimiter.stop", + "line_range": [ + 269, + 274 + ], + "centrality": 1 + }, + { + "uuid": "sym-a2efbf53ab67834889766768", + "level": "L3", + "label": "RateLimiter.getStats", + "file_path": "src/libs/omniprotocol/ratelimit/RateLimiter.ts", + "symbol_name": "RateLimiter.getStats", + "line_range": [ + 279, + 301 + ], + "centrality": 1 + }, + { + "uuid": "sym-36bf66ddb8ab891b109dc444", + "level": "L3", + "label": "RateLimiter.blockKey", + "file_path": "src/libs/omniprotocol/ratelimit/RateLimiter.ts", + "symbol_name": "RateLimiter.blockKey", + "line_range": [ + 306, + 310 + ], + "centrality": 1 + }, + { + "uuid": "sym-bc1c20fd0bfb030ddaff6c17", + "level": "L3", + "label": "RateLimiter.unblockKey", + "file_path": "src/libs/omniprotocol/ratelimit/RateLimiter.ts", + "symbol_name": "RateLimiter.unblockKey", + "line_range": [ + 315, + 322 + ], + "centrality": 1 + }, + { + "uuid": "sym-ed1b2b7a517b4236d13f0fc8", + "level": "L3", + "label": "RateLimiter.clear", + "file_path": "src/libs/omniprotocol/ratelimit/RateLimiter.ts", + "symbol_name": "RateLimiter.clear", + "line_range": [ + 327, + 330 + ], + "centrality": 1 + }, + { + "uuid": "sym-86a02fdc381985fdd13f023b", + "level": "L2", + "label": "RateLimiter", + "file_path": "src/libs/omniprotocol/ratelimit/RateLimiter.ts", + "symbol_name": "RateLimiter", + "line_range": [ + 15, + 331 + ], + "centrality": 12 + }, + { + "uuid": "sym-859e3974653a78d99db2f73e", + "level": "L3", + "label": "*", + "file_path": "src/libs/omniprotocol/ratelimit/index.ts", + "symbol_name": "*", + "line_range": [ + 7, + 7 + ], + "centrality": 1 + }, + { + "uuid": "sym-ac44c01f6c74fd8f6a21f2c7", + "level": "L3", + "label": "*", + "file_path": "src/libs/omniprotocol/ratelimit/index.ts", + "symbol_name": "*", + "line_range": [ + 8, + 8 + ], + "centrality": 1 + }, + { + "uuid": "sym-8e107677b94e23a6f3b219d6", + "level": "L3", + "label": "RateLimitConfig::api", + "file_path": "src/libs/omniprotocol/ratelimit/types.ts", + "symbol_name": "RateLimitConfig::api", + "line_range": [ + 7, + 48 + ], + "centrality": 1 + }, + { + "uuid": "sym-ebc9cfd3e7f365a40b76b5b8", + "level": "L2", + "label": "RateLimitConfig", + "file_path": "src/libs/omniprotocol/ratelimit/types.ts", + "symbol_name": "RateLimitConfig", + "line_range": [ + 7, + 48 + ], + "centrality": 2 + }, + { + "uuid": "sym-aff49eab772515d5b833ef34", + "level": "L3", + "label": "RateLimitEntry::api", + "file_path": "src/libs/omniprotocol/ratelimit/types.ts", + "symbol_name": "RateLimitEntry::api", + "line_range": [ + 50, + 75 + ], + "centrality": 1 + }, + { + "uuid": "sym-4339ce5f095732b35ef16575", + "level": "L2", + "label": "RateLimitEntry", + "file_path": "src/libs/omniprotocol/ratelimit/types.ts", + "symbol_name": "RateLimitEntry", + "line_range": [ + 50, + 75 + ], + "centrality": 2 + }, + { + "uuid": "sym-5b3fdf7b2257820a91eb1e24", + "level": "L3", + "label": "RateLimitResult::api", + "file_path": "src/libs/omniprotocol/ratelimit/types.ts", + "symbol_name": "RateLimitResult::api", + "line_range": [ + 77, + 102 + ], + "centrality": 1 + }, + { + "uuid": "sym-4de085ac34821b291958ca8d", + "level": "L2", + "label": "RateLimitResult", + "file_path": "src/libs/omniprotocol/ratelimit/types.ts", + "symbol_name": "RateLimitResult", + "line_range": [ + 77, + 102 + ], + "centrality": 2 + }, + { + "uuid": "sym-43063258f1f591add1ec17d8", + "level": "L3", + "label": "RateLimitType::api", + "file_path": "src/libs/omniprotocol/ratelimit/types.ts", + "symbol_name": "RateLimitType::api", + "line_range": [ + 104, + 107 + ], + "centrality": 1 + }, + { + "uuid": "sym-a929d1427bf0e28aee1d273a", + "level": "L2", + "label": "RateLimitType", + "file_path": "src/libs/omniprotocol/ratelimit/types.ts", + "symbol_name": "RateLimitType", + "line_range": [ + 104, + 107 + ], + "centrality": 2 + }, + { + "uuid": "sym-28d49c217cc2b5c0bca3f7cf", + "level": "L3", + "label": "ProposeBlockHashRequestPayload::api", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "ProposeBlockHashRequestPayload::api", + "line_range": [ + 62, + 66 + ], + "centrality": 1 + }, + { + "uuid": "sym-7d64282ce8c2fd92b6a0242d", + "level": "L2", + "label": "ProposeBlockHashRequestPayload", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "ProposeBlockHashRequestPayload", + "line_range": [ + 62, + 66 + ], + "centrality": 2 + }, + { + "uuid": "sym-bbe82027196a1293546adf88", + "level": "L3", + "label": "encodeProposeBlockHashRequest", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "encodeProposeBlockHashRequest", + "line_range": [ + 69, + 77 + ], + "centrality": 1 + }, + { + "uuid": "sym-707d977f3ee1ecf261ddd6a2", + "level": "L3", + "label": "decodeProposeBlockHashRequest", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "decodeProposeBlockHashRequest", + "line_range": [ + 79, + 98 + ], + "centrality": 1 + }, + { + "uuid": "sym-667ee77a33a8cdaab7b8e881", + "level": "L3", + "label": "ProposeBlockHashResponsePayload::api", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "ProposeBlockHashResponsePayload::api", + "line_range": [ + 100, + 106 + ], + "centrality": 1 + }, + { + "uuid": "sym-12945c6469674a2c8ca1664d", + "level": "L2", + "label": "ProposeBlockHashResponsePayload", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "ProposeBlockHashResponsePayload", + "line_range": [ + 100, + 106 + ], + "centrality": 2 + }, + { + "uuid": "sym-484518bac829f3d8d0b68bed", + "level": "L3", + "label": "encodeProposeBlockHashResponse", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "encodeProposeBlockHashResponse", + "line_range": [ + 108, + 120 + ], + "centrality": 1 + }, + { + "uuid": "sym-3c9e74c5cd69037300664055", + "level": "L3", + "label": "decodeProposeBlockHashResponse", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "decodeProposeBlockHashResponse", + "line_range": [ + 122, + 156 + ], + "centrality": 1 + }, + { + "uuid": "sym-facf67dec0a9f34ec0a49331", + "level": "L3", + "label": "ValidatorSeedResponsePayload::api", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "ValidatorSeedResponsePayload::api", + "line_range": [ + 158, + 161 + ], + "centrality": 1 + }, + { + "uuid": "sym-f7c2c4bf481ceac8b676e139", + "level": "L2", + "label": "ValidatorSeedResponsePayload", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "ValidatorSeedResponsePayload", + "line_range": [ + 158, + 161 + ], + "centrality": 2 + }, + { + "uuid": "sym-7e98febf42ce02edfc8af727", + "level": "L3", + "label": "encodeValidatorSeedResponse", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "encodeValidatorSeedResponse", + "line_range": [ + 163, + 170 + ], + "centrality": 1 + }, + { + "uuid": "sym-6e5873ef0b08194d76c50da7", + "level": "L3", + "label": "ValidatorTimestampResponsePayload::api", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "ValidatorTimestampResponsePayload::api", + "line_range": [ + 172, + 176 + ], + "centrality": 1 + }, + { + "uuid": "sym-81026f67f67aeb62d631535d", + "level": "L2", + "label": "ValidatorTimestampResponsePayload", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "ValidatorTimestampResponsePayload", + "line_range": [ + 172, + 176 + ], + "centrality": 2 + }, + { + "uuid": "sym-fa254e205c76ea44e4b0521c", + "level": "L3", + "label": "encodeValidatorTimestampResponse", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "encodeValidatorTimestampResponse", + "line_range": [ + 178, + 188 + ], + "centrality": 1 + }, + { + "uuid": "sym-9d509c324983c22418cb1b1a", + "level": "L3", + "label": "SetValidatorPhaseRequestPayload::api", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "SetValidatorPhaseRequestPayload::api", + "line_range": [ + 190, + 194 + ], + "centrality": 1 + }, + { + "uuid": "sym-531050568d58da423745f877", + "level": "L2", + "label": "SetValidatorPhaseRequestPayload", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "SetValidatorPhaseRequestPayload", + "line_range": [ + 190, + 194 + ], + "centrality": 2 + }, + { + "uuid": "sym-d7fd53b8db8be40361088b41", + "level": "L3", + "label": "encodeSetValidatorPhaseRequest", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "encodeSetValidatorPhaseRequest", + "line_range": [ + 197, + 205 + ], + "centrality": 1 + }, + { + "uuid": "sym-1f0f4f159ed45d15de2bdb16", + "level": "L3", + "label": "decodeSetValidatorPhaseRequest", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "decodeSetValidatorPhaseRequest", + "line_range": [ + 207, + 226 + ], + "centrality": 1 + }, + { + "uuid": "sym-ec3b887388af632075e349e1", + "level": "L3", + "label": "SetValidatorPhaseResponsePayload::api", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "SetValidatorPhaseResponsePayload::api", + "line_range": [ + 228, + 234 + ], + "centrality": 1 + }, + { + "uuid": "sym-8736e8fe142316bf9549f1a8", + "level": "L2", + "label": "SetValidatorPhaseResponsePayload", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "SetValidatorPhaseResponsePayload", + "line_range": [ + 228, + 234 + ], + "centrality": 2 + }, + { + "uuid": "sym-44872549830e75384171fc2b", + "level": "L3", + "label": "encodeSetValidatorPhaseResponse", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "encodeSetValidatorPhaseResponse", + "line_range": [ + 236, + 248 + ], + "centrality": 1 + }, + { + "uuid": "sym-cd9eaecd5f72fe65de09076a", + "level": "L3", + "label": "decodeSetValidatorPhaseResponse", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "decodeSetValidatorPhaseResponse", + "line_range": [ + 251, + 285 + ], + "centrality": 1 + }, + { + "uuid": "sym-d541dd4d784440f63678a4e3", + "level": "L3", + "label": "GreenlightRequestPayload::api", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "GreenlightRequestPayload::api", + "line_range": [ + 287, + 291 + ], + "centrality": 1 + }, + { + "uuid": "sym-cdf87a7aca678cd914268866", + "level": "L2", + "label": "GreenlightRequestPayload", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "GreenlightRequestPayload", + "line_range": [ + 287, + 291 + ], + "centrality": 2 + }, + { + "uuid": "sym-50906bc466402f2083e8ab59", + "level": "L3", + "label": "encodeGreenlightRequest", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "encodeGreenlightRequest", + "line_range": [ + 294, + 302 + ], + "centrality": 1 + }, + { + "uuid": "sym-c8763836bff4ea42fba470e9", + "level": "L3", + "label": "decodeGreenlightRequest", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "decodeGreenlightRequest", + "line_range": [ + 304, + 323 + ], + "centrality": 1 + }, + { + "uuid": "sym-968a498798178d6738491d83", + "level": "L3", + "label": "GreenlightResponsePayload::api", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "GreenlightResponsePayload::api", + "line_range": [ + 325, + 328 + ], + "centrality": 1 + }, + { + "uuid": "sym-72a34cb08372cf0ac8f3fb22", + "level": "L2", + "label": "GreenlightResponsePayload", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "GreenlightResponsePayload", + "line_range": [ + 325, + 328 + ], + "centrality": 2 + }, + { + "uuid": "sym-9e648f9c7fcc2000961ea0f5", + "level": "L3", + "label": "encodeGreenlightResponse", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "encodeGreenlightResponse", + "line_range": [ + 330, + 337 + ], + "centrality": 1 + }, + { + "uuid": "sym-5eac4ba7590c3f59ec0ba280", + "level": "L3", + "label": "decodeGreenlightResponse", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "decodeGreenlightResponse", + "line_range": [ + 340, + 355 + ], + "centrality": 1 + }, + { + "uuid": "sym-b6ef2a80b24cff47652860e8", + "level": "L3", + "label": "BlockTimestampResponsePayload::api", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "BlockTimestampResponsePayload::api", + "line_range": [ + 357, + 361 + ], + "centrality": 1 + }, + { + "uuid": "sym-c2ca91c5458f62906d47361f", + "level": "L2", + "label": "BlockTimestampResponsePayload", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "BlockTimestampResponsePayload", + "line_range": [ + 357, + 361 + ], + "centrality": 2 + }, + { + "uuid": "sym-74d82230f4dfa750c17ed391", + "level": "L3", + "label": "encodeBlockTimestampResponse", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "encodeBlockTimestampResponse", + "line_range": [ + 363, + 373 + ], + "centrality": 1 + }, + { + "uuid": "sym-4772b06d07bc4b22972f4952", + "level": "L3", + "label": "ValidatorPhaseResponsePayload::api", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "ValidatorPhaseResponsePayload::api", + "line_range": [ + 375, + 380 + ], + "centrality": 1 + }, + { + "uuid": "sym-25c69489da5bd52abf8384dc", + "level": "L2", + "label": "ValidatorPhaseResponsePayload", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "ValidatorPhaseResponsePayload", + "line_range": [ + 375, + 380 + ], + "centrality": 2 + }, + { + "uuid": "sym-e3e86d2049745e57873fd98b", + "level": "L3", + "label": "encodeValidatorPhaseResponse", + "file_path": "src/libs/omniprotocol/serialization/consensus.ts", + "symbol_name": "encodeValidatorPhaseResponse", + "line_range": [ + 382, + 393 + ], + "centrality": 1 + }, + { + "uuid": "sym-c67c6857215adc29562ba837", + "level": "L3", + "label": "PeerlistEntry::api", + "file_path": "src/libs/omniprotocol/serialization/control.ts", + "symbol_name": "PeerlistEntry::api", + "line_range": [ + 12, + 19 + ], + "centrality": 1 + }, + { + "uuid": "sym-481361719769269bbcc2e42e", + "level": "L2", + "label": "PeerlistEntry", + "file_path": "src/libs/omniprotocol/serialization/control.ts", + "symbol_name": "PeerlistEntry", + "line_range": [ + 12, + 19 + ], + "centrality": 2 + }, + { + "uuid": "sym-1c7b74b127fc73ce782ddde8", + "level": "L3", + "label": "PeerlistResponsePayload::api", + "file_path": "src/libs/omniprotocol/serialization/control.ts", + "symbol_name": "PeerlistResponsePayload::api", + "line_range": [ + 21, + 24 + ], + "centrality": 1 + }, + { + "uuid": "sym-ea8e70c31d2e96bfbddc5728", + "level": "L2", + "label": "PeerlistResponsePayload", + "file_path": "src/libs/omniprotocol/serialization/control.ts", + "symbol_name": "PeerlistResponsePayload", + "line_range": [ + 21, + 24 + ], + "centrality": 2 + }, + { + "uuid": "sym-55dc68dc14be56917edfd871", + "level": "L3", + "label": "PeerlistSyncRequestPayload::api", + "file_path": "src/libs/omniprotocol/serialization/control.ts", + "symbol_name": "PeerlistSyncRequestPayload::api", + "line_range": [ + 26, + 29 + ], + "centrality": 1 + }, + { + "uuid": "sym-6f8e6e4f31b5962fa750ff76", + "level": "L2", + "label": "PeerlistSyncRequestPayload", + "file_path": "src/libs/omniprotocol/serialization/control.ts", + "symbol_name": "PeerlistSyncRequestPayload", + "line_range": [ + 26, + 29 + ], + "centrality": 2 + }, + { + "uuid": "sym-c2a23fae15322adc98caeb29", + "level": "L3", + "label": "PeerlistSyncResponsePayload::api", + "file_path": "src/libs/omniprotocol/serialization/control.ts", + "symbol_name": "PeerlistSyncResponsePayload::api", + "line_range": [ + 31, + 36 + ], + "centrality": 1 + }, + { + "uuid": "sym-0dc97a487d76eed091d62752", + "level": "L2", + "label": "PeerlistSyncResponsePayload", + "file_path": "src/libs/omniprotocol/serialization/control.ts", + "symbol_name": "PeerlistSyncResponsePayload", + "line_range": [ + 31, + 36 + ], + "centrality": 2 + }, + { + "uuid": "sym-f8a0c4666cb0b4b98b3ac6f2", + "level": "L3", + "label": "NodeCallRequestPayload::api", + "file_path": "src/libs/omniprotocol/serialization/control.ts", + "symbol_name": "NodeCallRequestPayload::api", + "line_range": [ + 38, + 41 + ], + "centrality": 1 + }, + { + "uuid": "sym-13ac1dce8147d23e90ebd1e2", + "level": "L2", + "label": "NodeCallRequestPayload", + "file_path": "src/libs/omniprotocol/serialization/control.ts", + "symbol_name": "NodeCallRequestPayload", + "line_range": [ + 38, + 41 + ], + "centrality": 2 + }, + { + "uuid": "sym-9f79d2d01eb8704a8a3f667a", + "level": "L3", + "label": "NodeCallResponsePayload::api", + "file_path": "src/libs/omniprotocol/serialization/control.ts", + "symbol_name": "NodeCallResponsePayload::api", + "line_range": [ + 43, + 48 + ], + "centrality": 1 + }, + { + "uuid": "sym-3b5febcb27a4551c38d4e5da", + "level": "L2", + "label": "NodeCallResponsePayload", + "file_path": "src/libs/omniprotocol/serialization/control.ts", + "symbol_name": "NodeCallResponsePayload", + "line_range": [ + 43, + 48 + ], + "centrality": 2 + }, + { + "uuid": "sym-bc7a00fb36defa4547dc4e66", + "level": "L3", + "label": "encodePeerlistResponse", + "file_path": "src/libs/omniprotocol/serialization/control.ts", + "symbol_name": "encodePeerlistResponse", + "line_range": [ + 118, + 129 + ], + "centrality": 1 + }, + { + "uuid": "sym-d06a0d03433985f473292d4f", + "level": "L3", + "label": "decodePeerlistResponse", + "file_path": "src/libs/omniprotocol/serialization/control.ts", + "symbol_name": "decodePeerlistResponse", + "line_range": [ + 131, + 149 + ], + "centrality": 1 + }, + { + "uuid": "sym-90a66cf85e974a26a58d0020", + "level": "L3", + "label": "encodePeerlistSyncRequest", + "file_path": "src/libs/omniprotocol/serialization/control.ts", + "symbol_name": "encodePeerlistSyncRequest", + "line_range": [ + 151, + 156 + ], + "centrality": 1 + }, + { + "uuid": "sym-90b3c0e9e4b19ddeb943e4dd", + "level": "L3", + "label": "decodePeerlistSyncRequest", + "file_path": "src/libs/omniprotocol/serialization/control.ts", + "symbol_name": "decodePeerlistSyncRequest", + "line_range": [ + 158, + 170 + ], + "centrality": 1 + }, + { + "uuid": "sym-f4ccdcb40b8b555b7a08fcb6", + "level": "L3", + "label": "encodePeerlistSyncResponse", + "file_path": "src/libs/omniprotocol/serialization/control.ts", + "symbol_name": "encodePeerlistSyncResponse", + "line_range": [ + 172, + 185 + ], + "centrality": 1 + }, + { + "uuid": "sym-9351362dec91626ae107ca56", + "level": "L3", + "label": "decodeNodeCallRequest", + "file_path": "src/libs/omniprotocol/serialization/control.ts", + "symbol_name": "decodeNodeCallRequest", + "line_range": [ + 302, + 321 + ], + "centrality": 1 + }, + { + "uuid": "sym-c5fa908fa5581b730fc5d09c", + "level": "L3", + "label": "encodeNodeCallRequest", + "file_path": "src/libs/omniprotocol/serialization/control.ts", + "symbol_name": "encodeNodeCallRequest", + "line_range": [ + 323, + 334 + ], + "centrality": 1 + }, + { + "uuid": "sym-8229616c5a767a0d5dbfefda", + "level": "L3", + "label": "encodeNodeCallResponse", + "file_path": "src/libs/omniprotocol/serialization/control.ts", + "symbol_name": "encodeNodeCallResponse", + "line_range": [ + 336, + 349 + ], + "centrality": 1 + }, + { + "uuid": "sym-88f33bf5560b48d40472b9d9", + "level": "L3", + "label": "decodeNodeCallResponse", + "file_path": "src/libs/omniprotocol/serialization/control.ts", + "symbol_name": "decodeNodeCallResponse", + "line_range": [ + 351, + 428 + ], + "centrality": 1 + }, + { + "uuid": "sym-20b5f591af45ea9097a1eca8", + "level": "L3", + "label": "encodeStringResponse", + "file_path": "src/libs/omniprotocol/serialization/control.ts", + "symbol_name": "encodeStringResponse", + "line_range": [ + 430, + 435 + ], + "centrality": 1 + }, + { + "uuid": "sym-12b4c077de9faa8c83463abd", + "level": "L3", + "label": "decodeStringResponse", + "file_path": "src/libs/omniprotocol/serialization/control.ts", + "symbol_name": "decodeStringResponse", + "line_range": [ + 437, + 441 + ], + "centrality": 1 + }, + { + "uuid": "sym-4c7c069d6afb88dd0645bd92", + "level": "L3", + "label": "encodeJsonResponse", + "file_path": "src/libs/omniprotocol/serialization/control.ts", + "symbol_name": "encodeJsonResponse", + "line_range": [ + 443, + 450 + ], + "centrality": 1 + }, + { + "uuid": "sym-04a3e5bb96f8917c9379915c", + "level": "L3", + "label": "decodeJsonResponse", + "file_path": "src/libs/omniprotocol/serialization/control.ts", + "symbol_name": "decodeJsonResponse", + "line_range": [ + 452, + 462 + ], + "centrality": 1 + }, + { + "uuid": "sym-f75ed5d703b6d0859d13b84a", + "level": "L3", + "label": "decodePeerlistSyncResponse", + "file_path": "src/libs/omniprotocol/serialization/control.ts", + "symbol_name": "decodePeerlistSyncResponse", + "line_range": [ + 464, + 492 + ], + "centrality": 1 + }, + { + "uuid": "sym-39deee8a65b6d288793699df", + "level": "L3", + "label": "AddressInfoPayload::api", + "file_path": "src/libs/omniprotocol/serialization/gcr.ts", + "symbol_name": "AddressInfoPayload::api", + "line_range": [ + 3, + 8 + ], + "centrality": 1 + }, + { + "uuid": "sym-4bd857e92a09ab312df3fac6", + "level": "L2", + "label": "AddressInfoPayload", + "file_path": "src/libs/omniprotocol/serialization/gcr.ts", + "symbol_name": "AddressInfoPayload", + "line_range": [ + 3, + 8 + ], + "centrality": 2 + }, + { + "uuid": "sym-4f96470733f0fe1d8997c6c3", + "level": "L3", + "label": "encodeAddressInfoResponse", + "file_path": "src/libs/omniprotocol/serialization/gcr.ts", + "symbol_name": "encodeAddressInfoResponse", + "line_range": [ + 10, + 17 + ], + "centrality": 1 + }, + { + "uuid": "sym-d98c42026c34023c6273d50c", + "level": "L3", + "label": "decodeAddressInfoResponse", + "file_path": "src/libs/omniprotocol/serialization/gcr.ts", + "symbol_name": "decodeAddressInfoResponse", + "line_range": [ + 19, + 39 + ], + "centrality": 1 + }, + { + "uuid": "sym-bd3a95e736c86b11a47a00ad", + "level": "L3", + "label": "encodeRpcResponse", + "file_path": "src/libs/omniprotocol/serialization/jsonEnvelope.ts", + "symbol_name": "encodeRpcResponse", + "line_range": [ + 11, + 23 + ], + "centrality": 1 + }, + { + "uuid": "sym-ef238a74a16593944be3fbd3", + "level": "L3", + "label": "decodeRpcResponse", + "file_path": "src/libs/omniprotocol/serialization/jsonEnvelope.ts", + "symbol_name": "decodeRpcResponse", + "line_range": [ + 25, + 42 + ], + "centrality": 1 + }, + { + "uuid": "sym-3b31c5edccb093881690ab96", + "level": "L3", + "label": "encodeJsonRequest", + "file_path": "src/libs/omniprotocol/serialization/jsonEnvelope.ts", + "symbol_name": "encodeJsonRequest", + "line_range": [ + 44, + 48 + ], + "centrality": 1 + }, + { + "uuid": "sym-b173258f48b4dfdf435372f4", + "level": "L3", + "label": "decodeJsonRequest", + "file_path": "src/libs/omniprotocol/serialization/jsonEnvelope.ts", + "symbol_name": "decodeJsonRequest", + "line_range": [ + 50, + 54 + ], + "centrality": 1 + }, + { + "uuid": "sym-6b49bfaa683ae21eaa9fc761", + "level": "L3", + "label": "L2PSSubmitEncryptedTxRequest::api", + "file_path": "src/libs/omniprotocol/serialization/l2ps.ts", + "symbol_name": "L2PSSubmitEncryptedTxRequest::api", + "line_range": [ + 7, + 11 + ], + "centrality": 1 + }, + { + "uuid": "sym-defd3a4003779e6064cede3d", + "level": "L2", + "label": "L2PSSubmitEncryptedTxRequest", + "file_path": "src/libs/omniprotocol/serialization/l2ps.ts", + "symbol_name": "L2PSSubmitEncryptedTxRequest", + "line_range": [ + 7, + 11 + ], + "centrality": 2 + }, + { + "uuid": "sym-74af9f448201a71e785ad7af", + "level": "L3", + "label": "L2PSGetProofRequest::api", + "file_path": "src/libs/omniprotocol/serialization/l2ps.ts", + "symbol_name": "L2PSGetProofRequest::api", + "line_range": [ + 13, + 16 + ], + "centrality": 1 + }, + { + "uuid": "sym-dda21973087d6e481c8037b4", + "level": "L2", + "label": "L2PSGetProofRequest", + "file_path": "src/libs/omniprotocol/serialization/l2ps.ts", + "symbol_name": "L2PSGetProofRequest", + "line_range": [ + 13, + 16 + ], + "centrality": 2 + }, + { + "uuid": "sym-68c51d1daa2e84a19b1ef286", + "level": "L3", + "label": "L2PSVerifyBatchRequest::api", + "file_path": "src/libs/omniprotocol/serialization/l2ps.ts", + "symbol_name": "L2PSVerifyBatchRequest::api", + "line_range": [ + 18, + 22 + ], + "centrality": 1 + }, + { + "uuid": "sym-0951823a296655a3ade22fdb", + "level": "L2", + "label": "L2PSVerifyBatchRequest", + "file_path": "src/libs/omniprotocol/serialization/l2ps.ts", + "symbol_name": "L2PSVerifyBatchRequest", + "line_range": [ + 18, + 22 + ], + "centrality": 2 + }, + { + "uuid": "sym-be50e4d09b490b0ebb403162", + "level": "L3", + "label": "L2PSSyncMempoolRequest::api", + "file_path": "src/libs/omniprotocol/serialization/l2ps.ts", + "symbol_name": "L2PSSyncMempoolRequest::api", + "line_range": [ + 24, + 28 + ], + "centrality": 1 + }, + { + "uuid": "sym-bc9523b68a00abef0beae972", + "level": "L2", + "label": "L2PSSyncMempoolRequest", + "file_path": "src/libs/omniprotocol/serialization/l2ps.ts", + "symbol_name": "L2PSSyncMempoolRequest", + "line_range": [ + 24, + 28 + ], + "centrality": 2 + }, + { + "uuid": "sym-bc80da23c0788cbb96e525e7", + "level": "L3", + "label": "L2PSGetBatchStatusRequest::api", + "file_path": "src/libs/omniprotocol/serialization/l2ps.ts", + "symbol_name": "L2PSGetBatchStatusRequest::api", + "line_range": [ + 30, + 33 + ], + "centrality": 1 + }, + { + "uuid": "sym-46bef75b389f3a525f564868", + "level": "L2", + "label": "L2PSGetBatchStatusRequest", + "file_path": "src/libs/omniprotocol/serialization/l2ps.ts", + "symbol_name": "L2PSGetBatchStatusRequest", + "line_range": [ + 30, + 33 + ], + "centrality": 2 + }, + { + "uuid": "sym-07a6cec5a5c3a95ab1252789", + "level": "L3", + "label": "L2PSGetParticipationRequest::api", + "file_path": "src/libs/omniprotocol/serialization/l2ps.ts", + "symbol_name": "L2PSGetParticipationRequest::api", + "line_range": [ + 35, + 38 + ], + "centrality": 1 + }, + { + "uuid": "sym-0b8fbb71f8c6a15f84f89c18", + "level": "L2", + "label": "L2PSGetParticipationRequest", + "file_path": "src/libs/omniprotocol/serialization/l2ps.ts", + "symbol_name": "L2PSGetParticipationRequest", + "line_range": [ + 35, + 38 + ], + "centrality": 2 + }, + { + "uuid": "sym-7f84a166c1f6ed5e7713d53f", + "level": "L3", + "label": "L2PSHashUpdateRequest::api", + "file_path": "src/libs/omniprotocol/serialization/l2ps.ts", + "symbol_name": "L2PSHashUpdateRequest::api", + "line_range": [ + 40, + 46 + ], + "centrality": 1 + }, + { + "uuid": "sym-bad9b7515020680a9f2efcd4", + "level": "L2", + "label": "L2PSHashUpdateRequest", + "file_path": "src/libs/omniprotocol/serialization/l2ps.ts", + "symbol_name": "L2PSHashUpdateRequest", + "line_range": [ + 40, + 46 + ], + "centrality": 2 + }, + { + "uuid": "sym-3e83d82facdcd6b51a624587", + "level": "L3", + "label": "encodeL2PSHashUpdate", + "file_path": "src/libs/omniprotocol/serialization/l2ps.ts", + "symbol_name": "encodeL2PSHashUpdate", + "line_range": [ + 52, + 60 + ], + "centrality": 1 + }, + { + "uuid": "sym-8b8eec8e7dac3de610bd552f", + "level": "L3", + "label": "decodeL2PSHashUpdate", + "file_path": "src/libs/omniprotocol/serialization/l2ps.ts", + "symbol_name": "decodeL2PSHashUpdate", + "line_range": [ + 62, + 86 + ], + "centrality": 1 + }, + { + "uuid": "sym-684a2dfd8c5944d2cc9e9e73", + "level": "L3", + "label": "L2PSMempoolEntry::api", + "file_path": "src/libs/omniprotocol/serialization/l2ps.ts", + "symbol_name": "L2PSMempoolEntry::api", + "line_range": [ + 92, + 98 + ], + "centrality": 1 + }, + { + "uuid": "sym-9d5f9036c3a61f194222ddc9", + "level": "L2", + "label": "L2PSMempoolEntry", + "file_path": "src/libs/omniprotocol/serialization/l2ps.ts", + "symbol_name": "L2PSMempoolEntry", + "line_range": [ + 92, + 98 + ], + "centrality": 2 + }, + { + "uuid": "sym-1dd5bedf2f00e69d75db3984", + "level": "L3", + "label": "encodeL2PSMempoolEntries", + "file_path": "src/libs/omniprotocol/serialization/l2ps.ts", + "symbol_name": "encodeL2PSMempoolEntries", + "line_range": [ + 100, + 112 + ], + "centrality": 1 + }, + { + "uuid": "sym-bce363e2ed8fe28874f6e8d7", + "level": "L3", + "label": "decodeL2PSMempoolEntries", + "file_path": "src/libs/omniprotocol/serialization/l2ps.ts", + "symbol_name": "decodeL2PSMempoolEntries", + "line_range": [ + 114, + 148 + ], + "centrality": 1 + }, + { + "uuid": "sym-9482969157730c21f53bda3a", + "level": "L3", + "label": "L2PSProofData::api", + "file_path": "src/libs/omniprotocol/serialization/l2ps.ts", + "symbol_name": "L2PSProofData::api", + "line_range": [ + 154, + 160 + ], + "centrality": 1 + }, + { + "uuid": "sym-24c86701e405a5e93d569d27", + "level": "L2", + "label": "L2PSProofData", + "file_path": "src/libs/omniprotocol/serialization/l2ps.ts", + "symbol_name": "L2PSProofData", + "line_range": [ + 154, + 160 + ], + "centrality": 2 + }, + { + "uuid": "sym-b5f2992ee061fa9af8d170bf", + "level": "L3", + "label": "encodeL2PSProofData", + "file_path": "src/libs/omniprotocol/serialization/l2ps.ts", + "symbol_name": "encodeL2PSProofData", + "line_range": [ + 162, + 170 + ], + "centrality": 1 + }, + { + "uuid": "sym-015b2d24689c8f1a98fd94fa", + "level": "L3", + "label": "decodeL2PSProofData", + "file_path": "src/libs/omniprotocol/serialization/l2ps.ts", + "symbol_name": "decodeL2PSProofData", + "line_range": [ + 172, + 196 + ], + "centrality": 1 + }, + { + "uuid": "sym-6a92728b97295df4add532cc", + "level": "L3", + "label": "VersionNegotiateRequest::api", + "file_path": "src/libs/omniprotocol/serialization/meta.ts", + "symbol_name": "VersionNegotiateRequest::api", + "line_range": [ + 3, + 7 + ], + "centrality": 1 + }, + { + "uuid": "sym-c59dda13f33be0983f2e2f24", + "level": "L2", + "label": "VersionNegotiateRequest", + "file_path": "src/libs/omniprotocol/serialization/meta.ts", + "symbol_name": "VersionNegotiateRequest", + "line_range": [ + 3, + 7 + ], + "centrality": 2 + }, + { + "uuid": "sym-393a656c99e379da83261270", + "level": "L3", + "label": "VersionNegotiateResponse::api", + "file_path": "src/libs/omniprotocol/serialization/meta.ts", + "symbol_name": "VersionNegotiateResponse::api", + "line_range": [ + 9, + 12 + ], + "centrality": 1 + }, + { + "uuid": "sym-00caa963c5b5c3b283cc6f2a", + "level": "L2", + "label": "VersionNegotiateResponse", + "file_path": "src/libs/omniprotocol/serialization/meta.ts", + "symbol_name": "VersionNegotiateResponse", + "line_range": [ + 9, + 12 + ], + "centrality": 2 + }, + { + "uuid": "sym-3d4a17b03c78e440e8521bac", + "level": "L3", + "label": "decodeVersionNegotiateRequest", + "file_path": "src/libs/omniprotocol/serialization/meta.ts", + "symbol_name": "decodeVersionNegotiateRequest", + "line_range": [ + 14, + 37 + ], + "centrality": 1 + }, + { + "uuid": "sym-839486393ec3777f098c4138", + "level": "L3", + "label": "encodeVersionNegotiateResponse", + "file_path": "src/libs/omniprotocol/serialization/meta.ts", + "symbol_name": "encodeVersionNegotiateResponse", + "line_range": [ + 39, + 44 + ], + "centrality": 1 + }, + { + "uuid": "sym-cdee1d1ee123471a2fe8ccba", + "level": "L3", + "label": "CapabilityDescriptor::api", + "file_path": "src/libs/omniprotocol/serialization/meta.ts", + "symbol_name": "CapabilityDescriptor::api", + "line_range": [ + 46, + 50 + ], + "centrality": 1 + }, + { + "uuid": "sym-a0fe73ba5a4c3b5e9571f894", + "level": "L2", + "label": "CapabilityDescriptor", + "file_path": "src/libs/omniprotocol/serialization/meta.ts", + "symbol_name": "CapabilityDescriptor", + "line_range": [ + 46, + 50 + ], + "centrality": 2 + }, + { + "uuid": "sym-ce4b61abdd638d7f7a2a015c", + "level": "L3", + "label": "CapabilityExchangeRequest::api", + "file_path": "src/libs/omniprotocol/serialization/meta.ts", + "symbol_name": "CapabilityExchangeRequest::api", + "line_range": [ + 52, + 54 + ], + "centrality": 1 + }, + { + "uuid": "sym-649a1a18feb266499520cbe5", + "level": "L2", + "label": "CapabilityExchangeRequest", + "file_path": "src/libs/omniprotocol/serialization/meta.ts", + "symbol_name": "CapabilityExchangeRequest", + "line_range": [ + 52, + 54 + ], + "centrality": 2 + }, + { + "uuid": "sym-bfefc17bb5d1c65cc36c0843", + "level": "L3", + "label": "CapabilityExchangeResponse::api", + "file_path": "src/libs/omniprotocol/serialization/meta.ts", + "symbol_name": "CapabilityExchangeResponse::api", + "line_range": [ + 56, + 59 + ], + "centrality": 1 + }, + { + "uuid": "sym-704e246d81608f800aed67ad", + "level": "L2", + "label": "CapabilityExchangeResponse", + "file_path": "src/libs/omniprotocol/serialization/meta.ts", + "symbol_name": "CapabilityExchangeResponse", + "line_range": [ + 56, + 59 + ], + "centrality": 2 + }, + { + "uuid": "sym-02417a6365edd0198fd75264", + "level": "L3", + "label": "decodeCapabilityExchangeRequest", + "file_path": "src/libs/omniprotocol/serialization/meta.ts", + "symbol_name": "decodeCapabilityExchangeRequest", + "line_range": [ + 61, + 85 + ], + "centrality": 1 + }, + { + "uuid": "sym-eeb4fc775c7436b1dcc8a3c3", + "level": "L3", + "label": "encodeCapabilityExchangeResponse", + "file_path": "src/libs/omniprotocol/serialization/meta.ts", + "symbol_name": "encodeCapabilityExchangeResponse", + "line_range": [ + 87, + 99 + ], + "centrality": 1 + }, + { + "uuid": "sym-e3d213bc363306b53393ab4f", + "level": "L3", + "label": "ProtocolErrorPayload::api", + "file_path": "src/libs/omniprotocol/serialization/meta.ts", + "symbol_name": "ProtocolErrorPayload::api", + "line_range": [ + 101, + 104 + ], + "centrality": 1 + }, + { + "uuid": "sym-b4556341831fecb80421ac68", + "level": "L2", + "label": "ProtocolErrorPayload", + "file_path": "src/libs/omniprotocol/serialization/meta.ts", + "symbol_name": "ProtocolErrorPayload", + "line_range": [ + 101, + 104 + ], + "centrality": 2 + }, + { + "uuid": "sym-6cd8e16677b8cf80dd1ad744", + "level": "L3", + "label": "decodeProtocolError", + "file_path": "src/libs/omniprotocol/serialization/meta.ts", + "symbol_name": "decodeProtocolError", + "line_range": [ + 106, + 118 + ], + "centrality": 1 + }, + { + "uuid": "sym-9f28799d05d13c0d15a531c2", + "level": "L3", + "label": "encodeProtocolError", + "file_path": "src/libs/omniprotocol/serialization/meta.ts", + "symbol_name": "encodeProtocolError", + "line_range": [ + 120, + 125 + ], + "centrality": 1 + }, + { + "uuid": "sym-2a8e22fd4ddb063dd986f7e4", + "level": "L3", + "label": "ProtocolPingPayload::api", + "file_path": "src/libs/omniprotocol/serialization/meta.ts", + "symbol_name": "ProtocolPingPayload::api", + "line_range": [ + 127, + 129 + ], + "centrality": 1 + }, + { + "uuid": "sym-07dcd771e2b390047f2e6a55", + "level": "L2", + "label": "ProtocolPingPayload", + "file_path": "src/libs/omniprotocol/serialization/meta.ts", + "symbol_name": "ProtocolPingPayload", + "line_range": [ + 127, + 129 + ], + "centrality": 2 + }, + { + "uuid": "sym-b82d83e2bc3aa3aa35dc2364", + "level": "L3", + "label": "decodeProtocolPing", + "file_path": "src/libs/omniprotocol/serialization/meta.ts", + "symbol_name": "decodeProtocolPing", + "line_range": [ + 131, + 134 + ], + "centrality": 1 + }, + { + "uuid": "sym-79d31f302ae00821c9b091e7", + "level": "L3", + "label": "ProtocolPingResponse::api", + "file_path": "src/libs/omniprotocol/serialization/meta.ts", + "symbol_name": "ProtocolPingResponse::api", + "line_range": [ + 136, + 139 + ], + "centrality": 1 + }, + { + "uuid": "sym-d91a4ce131bb705db219070a", + "level": "L2", + "label": "ProtocolPingResponse", + "file_path": "src/libs/omniprotocol/serialization/meta.ts", + "symbol_name": "ProtocolPingResponse", + "line_range": [ + 136, + 139 + ], + "centrality": 2 + }, + { + "uuid": "sym-81eae4b46a28fb84e48f06ad", + "level": "L3", + "label": "encodeProtocolPingResponse", + "file_path": "src/libs/omniprotocol/serialization/meta.ts", + "symbol_name": "encodeProtocolPingResponse", + "line_range": [ + 141, + 146 + ], + "centrality": 1 + }, + { + "uuid": "sym-82a1161ce70b04b888c2f0b6", + "level": "L3", + "label": "ProtocolDisconnectPayload::api", + "file_path": "src/libs/omniprotocol/serialization/meta.ts", + "symbol_name": "ProtocolDisconnectPayload::api", + "line_range": [ + 148, + 151 + ], + "centrality": 1 + }, + { + "uuid": "sym-04be92096edfe026f0b98854", + "level": "L2", + "label": "ProtocolDisconnectPayload", + "file_path": "src/libs/omniprotocol/serialization/meta.ts", + "symbol_name": "ProtocolDisconnectPayload", + "line_range": [ + 148, + 151 + ], + "centrality": 2 + }, + { + "uuid": "sym-e7c776ab0eba1f5599be7fcb", + "level": "L3", + "label": "decodeProtocolDisconnect", + "file_path": "src/libs/omniprotocol/serialization/meta.ts", + "symbol_name": "decodeProtocolDisconnect", + "line_range": [ + 153, + 165 + ], + "centrality": 1 + }, + { + "uuid": "sym-cdea7aa1b6de2749159f6e96", + "level": "L3", + "label": "encodeProtocolDisconnect", + "file_path": "src/libs/omniprotocol/serialization/meta.ts", + "symbol_name": "encodeProtocolDisconnect", + "line_range": [ + 167, + 172 + ], + "centrality": 1 + }, + { + "uuid": "sym-c615dbb155d43299ba7b7acd", + "level": "L3", + "label": "PrimitiveEncoder::api", + "file_path": "src/libs/omniprotocol/serialization/primitives.ts", + "symbol_name": "PrimitiveEncoder::api", + "line_range": [ + 1, + 46 + ], + "centrality": 1 + }, + { + "uuid": "sym-115a795c311c05a660b0cfaf", + "level": "L3", + "label": "PrimitiveEncoder.encodeUInt8", + "file_path": "src/libs/omniprotocol/serialization/primitives.ts", + "symbol_name": "PrimitiveEncoder.encodeUInt8", + "line_range": [ + 2, + 6 + ], + "centrality": 1 + }, + { + "uuid": "sym-88b5df7ef753f6b018ea90ab", + "level": "L3", + "label": "PrimitiveEncoder.encodeBoolean", + "file_path": "src/libs/omniprotocol/serialization/primitives.ts", + "symbol_name": "PrimitiveEncoder.encodeBoolean", + "line_range": [ + 8, + 10 + ], + "centrality": 1 + }, + { + "uuid": "sym-84c84d61c9c8f4b14650344e", + "level": "L3", + "label": "PrimitiveEncoder.encodeUInt16", + "file_path": "src/libs/omniprotocol/serialization/primitives.ts", + "symbol_name": "PrimitiveEncoder.encodeUInt16", + "line_range": [ + 12, + 16 + ], + "centrality": 1 + }, + { + "uuid": "sym-ebcdfff7c8f26147d49f7e68", + "level": "L3", + "label": "PrimitiveEncoder.encodeUInt32", + "file_path": "src/libs/omniprotocol/serialization/primitives.ts", + "symbol_name": "PrimitiveEncoder.encodeUInt32", + "line_range": [ + 18, + 22 + ], + "centrality": 1 + }, + { + "uuid": "sym-a44f26a28d524913f6c5ae0d", + "level": "L3", + "label": "PrimitiveEncoder.encodeUInt64", + "file_path": "src/libs/omniprotocol/serialization/primitives.ts", + "symbol_name": "PrimitiveEncoder.encodeUInt64", + "line_range": [ + 24, + 29 + ], + "centrality": 1 + }, + { + "uuid": "sym-96c322c3230b3318cb0bfef3", + "level": "L3", + "label": "PrimitiveEncoder.encodeString", + "file_path": "src/libs/omniprotocol/serialization/primitives.ts", + "symbol_name": "PrimitiveEncoder.encodeString", + "line_range": [ + 31, + 35 + ], + "centrality": 1 + }, + { + "uuid": "sym-053ecef7be1b74553f59efc7", + "level": "L3", + "label": "PrimitiveEncoder.encodeBytes", + "file_path": "src/libs/omniprotocol/serialization/primitives.ts", + "symbol_name": "PrimitiveEncoder.encodeBytes", + "line_range": [ + 37, + 40 + ], + "centrality": 1 + }, + { + "uuid": "sym-3fe76fd5033992560ddc2bb5", + "level": "L3", + "label": "PrimitiveEncoder.encodeVarBytes", + "file_path": "src/libs/omniprotocol/serialization/primitives.ts", + "symbol_name": "PrimitiveEncoder.encodeVarBytes", + "line_range": [ + 42, + 45 + ], + "centrality": 1 + }, + { + "uuid": "sym-97131dcb1a2dffeac2eaa164", + "level": "L2", + "label": "PrimitiveEncoder", + "file_path": "src/libs/omniprotocol/serialization/primitives.ts", + "symbol_name": "PrimitiveEncoder", + "line_range": [ + 1, + 46 + ], + "centrality": 10 + }, + { + "uuid": "sym-c8e4c282ac82ce5a43c6dabc", + "level": "L3", + "label": "PrimitiveDecoder::api", + "file_path": "src/libs/omniprotocol/serialization/primitives.ts", + "symbol_name": "PrimitiveDecoder::api", + "line_range": [ + 48, + 99 + ], + "centrality": 1 + }, + { + "uuid": "sym-156b046ec0b458f750d6c8ac", + "level": "L3", + "label": "PrimitiveDecoder.decodeUInt8", + "file_path": "src/libs/omniprotocol/serialization/primitives.ts", + "symbol_name": "PrimitiveDecoder.decodeUInt8", + "line_range": [ + 49, + 51 + ], + "centrality": 1 + }, + { + "uuid": "sym-2c13707cee1ca19b78229934", + "level": "L3", + "label": "PrimitiveDecoder.decodeBoolean", + "file_path": "src/libs/omniprotocol/serialization/primitives.ts", + "symbol_name": "PrimitiveDecoder.decodeBoolean", + "line_range": [ + 53, + 56 + ], + "centrality": 1 + }, + { + "uuid": "sym-cde19651d1f29828454ec4b6", + "level": "L3", + "label": "PrimitiveDecoder.decodeUInt16", + "file_path": "src/libs/omniprotocol/serialization/primitives.ts", + "symbol_name": "PrimitiveDecoder.decodeUInt16", + "line_range": [ + 58, + 60 + ], + "centrality": 1 + }, + { + "uuid": "sym-b7b7764b5f8752a3680783e8", + "level": "L3", + "label": "PrimitiveDecoder.decodeUInt32", + "file_path": "src/libs/omniprotocol/serialization/primitives.ts", + "symbol_name": "PrimitiveDecoder.decodeUInt32", + "line_range": [ + 62, + 64 + ], + "centrality": 1 + }, + { + "uuid": "sym-134f63188f756ad86c2a544c", + "level": "L3", + "label": "PrimitiveDecoder.decodeUInt64", + "file_path": "src/libs/omniprotocol/serialization/primitives.ts", + "symbol_name": "PrimitiveDecoder.decodeUInt64", + "line_range": [ + 66, + 68 + ], + "centrality": 1 + }, + { + "uuid": "sym-5e360294a26cb37091a37018", + "level": "L3", + "label": "PrimitiveDecoder.decodeString", + "file_path": "src/libs/omniprotocol/serialization/primitives.ts", + "symbol_name": "PrimitiveDecoder.decodeString", + "line_range": [ + 70, + 78 + ], + "centrality": 1 + }, + { + "uuid": "sym-3b67e628eb4b9ff604126a19", + "level": "L3", + "label": "PrimitiveDecoder.decodeBytes", + "file_path": "src/libs/omniprotocol/serialization/primitives.ts", + "symbol_name": "PrimitiveDecoder.decodeBytes", + "line_range": [ + 80, + 88 + ], + "centrality": 1 + }, + { + "uuid": "sym-8f72c9a1055bca2bc71f0167", + "level": "L3", + "label": "PrimitiveDecoder.decodeVarBytes", + "file_path": "src/libs/omniprotocol/serialization/primitives.ts", + "symbol_name": "PrimitiveDecoder.decodeVarBytes", + "line_range": [ + 90, + 98 + ], + "centrality": 1 + }, + { + "uuid": "sym-ee9fcadb697329d2357af877", + "level": "L2", + "label": "PrimitiveDecoder", + "file_path": "src/libs/omniprotocol/serialization/primitives.ts", + "symbol_name": "PrimitiveDecoder", + "line_range": [ + 48, + 99 + ], + "centrality": 10 + }, + { + "uuid": "sym-398f49ae51bd5320d95176c5", + "level": "L3", + "label": "MempoolResponsePayload::api", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "MempoolResponsePayload::api", + "line_range": [ + 3, + 6 + ], + "centrality": 1 + }, + { + "uuid": "sym-c8dc6d5802b95dedf621862d", + "level": "L2", + "label": "MempoolResponsePayload", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "MempoolResponsePayload", + "line_range": [ + 3, + 6 + ], + "centrality": 2 + }, + { + "uuid": "sym-f06f1dcb2dfd8d7e4dd48292", + "level": "L3", + "label": "encodeMempoolResponse", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "encodeMempoolResponse", + "line_range": [ + 8, + 18 + ], + "centrality": 1 + }, + { + "uuid": "sym-205b5cb1bf996c3482d66431", + "level": "L3", + "label": "decodeMempoolResponse", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "decodeMempoolResponse", + "line_range": [ + 20, + 37 + ], + "centrality": 1 + }, + { + "uuid": "sym-b0d0846d390faea344a260a3", + "level": "L3", + "label": "MempoolSyncRequestPayload::api", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "MempoolSyncRequestPayload::api", + "line_range": [ + 39, + 43 + ], + "centrality": 1 + }, + { + "uuid": "sym-3b474985222cfc997a5d0ef7", + "level": "L2", + "label": "MempoolSyncRequestPayload", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "MempoolSyncRequestPayload", + "line_range": [ + 39, + 43 + ], + "centrality": 2 + }, + { + "uuid": "sym-2745d8771ea38a82ffaeea95", + "level": "L3", + "label": "encodeMempoolSyncRequest", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "encodeMempoolSyncRequest", + "line_range": [ + 45, + 51 + ], + "centrality": 1 + }, + { + "uuid": "sym-2998e1ceb03e2f98134e96d9", + "level": "L3", + "label": "decodeMempoolSyncRequest", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "decodeMempoolSyncRequest", + "line_range": [ + 53, + 69 + ], + "centrality": 1 + }, + { + "uuid": "sym-0e202b84aaada6b86ce3e501", + "level": "L3", + "label": "MempoolSyncResponsePayload::api", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "MempoolSyncResponsePayload::api", + "line_range": [ + 71, + 76 + ], + "centrality": 1 + }, + { + "uuid": "sym-aa28f8a1e849d532b667906d", + "level": "L2", + "label": "MempoolSyncResponsePayload", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "MempoolSyncResponsePayload", + "line_range": [ + 71, + 76 + ], + "centrality": 2 + }, + { + "uuid": "sym-3934bcc10c9b4f2e9c2d0959", + "level": "L3", + "label": "encodeMempoolSyncResponse", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "encodeMempoolSyncResponse", + "line_range": [ + 78, + 91 + ], + "centrality": 1 + }, + { + "uuid": "sym-63c9672a710d076dc0e06cf3", + "level": "L3", + "label": "MempoolMergeRequestPayload::api", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "MempoolMergeRequestPayload::api", + "line_range": [ + 93, + 95 + ], + "centrality": 1 + }, + { + "uuid": "sym-685b7b28fe67a4cc44e434de", + "level": "L2", + "label": "MempoolMergeRequestPayload", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "MempoolMergeRequestPayload", + "line_range": [ + 93, + 95 + ], + "centrality": 2 + }, + { + "uuid": "sym-7fa32da41eaee8452f8bd9a5", + "level": "L3", + "label": "decodeMempoolMergeRequest", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "decodeMempoolMergeRequest", + "line_range": [ + 97, + 110 + ], + "centrality": 1 + }, + { + "uuid": "sym-1c22efc6afd12d2cefe35a3d", + "level": "L3", + "label": "encodeMempoolMergeRequest", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "encodeMempoolMergeRequest", + "line_range": [ + 112, + 121 + ], + "centrality": 1 + }, + { + "uuid": "sym-50385a967901d4552b638fc9", + "level": "L3", + "label": "decodeMempoolSyncResponse", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "decodeMempoolSyncResponse", + "line_range": [ + 123, + 150 + ], + "centrality": 1 + }, + { + "uuid": "sym-34d2413a3679dfdbfae04b85", + "level": "L3", + "label": "BlockEntryPayload::api", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "BlockEntryPayload::api", + "line_range": [ + 152, + 157 + ], + "centrality": 1 + }, + { + "uuid": "sym-b75fc6c5dace7ee100cd6671", + "level": "L2", + "label": "BlockEntryPayload", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "BlockEntryPayload", + "line_range": [ + 152, + 157 + ], + "centrality": 2 + }, + { + "uuid": "sym-640fafbc00c2c677cbe674d4", + "level": "L3", + "label": "BlockMetadata::api", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "BlockMetadata::api", + "line_range": [ + 159, + 165 + ], + "centrality": 1 + }, + { + "uuid": "sym-e2d7a7040dc244cb0c9a5e1e", + "level": "L2", + "label": "BlockMetadata", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "BlockMetadata", + "line_range": [ + 159, + 165 + ], + "centrality": 2 + }, + { + "uuid": "sym-638ca9f97a7186e06d2d59ad", + "level": "L3", + "label": "encodeBlockMetadata", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "encodeBlockMetadata", + "line_range": [ + 190, + 198 + ], + "centrality": 1 + }, + { + "uuid": "sym-12924b2bd0070b6b03d3764a", + "level": "L3", + "label": "decodeBlockMetadata", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "decodeBlockMetadata", + "line_range": [ + 200, + 224 + ], + "centrality": 1 + }, + { + "uuid": "sym-aadb6a479fc23c9ae89a48dc", + "level": "L3", + "label": "BlockResponsePayload::api", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "BlockResponsePayload::api", + "line_range": [ + 263, + 266 + ], + "centrality": 1 + }, + { + "uuid": "sym-f5257582e7cf3f5b4295d85b", + "level": "L2", + "label": "BlockResponsePayload", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "BlockResponsePayload", + "line_range": [ + 263, + 266 + ], + "centrality": 2 + }, + { + "uuid": "sym-83065379d4a1c2d6f3b97b0d", + "level": "L3", + "label": "encodeBlockResponse", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "encodeBlockResponse", + "line_range": [ + 268, + 273 + ], + "centrality": 1 + }, + { + "uuid": "sym-d3398ecb720878008124bdce", + "level": "L3", + "label": "decodeBlockResponse", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "decodeBlockResponse", + "line_range": [ + 275, + 287 + ], + "centrality": 1 + }, + { + "uuid": "sym-370c23cf8df49a2d85fd00c3", + "level": "L3", + "label": "BlocksResponsePayload::api", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "BlocksResponsePayload::api", + "line_range": [ + 289, + 292 + ], + "centrality": 1 + }, + { + "uuid": "sym-a6aea358d016932d28dc7be5", + "level": "L2", + "label": "BlocksResponsePayload", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "BlocksResponsePayload", + "line_range": [ + 289, + 292 + ], + "centrality": 2 + }, + { + "uuid": "sym-4557b22ff4878be5f4a83de0", + "level": "L3", + "label": "encodeBlocksResponse", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "encodeBlocksResponse", + "line_range": [ + 294, + 304 + ], + "centrality": 2 + }, + { + "uuid": "sym-5ebf3bd250ee5182d48cabb6", + "level": "L3", + "label": "decodeBlocksResponse", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "decodeBlocksResponse", + "line_range": [ + 306, + 325 + ], + "centrality": 1 + }, + { + "uuid": "sym-ac0a1e228d4998787a688f49", + "level": "L3", + "label": "BlockSyncRequestPayload::api", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "BlockSyncRequestPayload::api", + "line_range": [ + 327, + 331 + ], + "centrality": 1 + }, + { + "uuid": "sym-9d09479e95ac975cf01cb1c9", + "level": "L2", + "label": "BlockSyncRequestPayload", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "BlockSyncRequestPayload", + "line_range": [ + 327, + 331 + ], + "centrality": 2 + }, + { + "uuid": "sym-cad0c5620a82457ff3fd1caa", + "level": "L3", + "label": "decodeBlockSyncRequest", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "decodeBlockSyncRequest", + "line_range": [ + 333, + 349 + ], + "centrality": 1 + }, + { + "uuid": "sym-3cf7208af311e74228536b19", + "level": "L3", + "label": "encodeBlockSyncRequest", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "encodeBlockSyncRequest", + "line_range": [ + 351, + 357 + ], + "centrality": 1 + }, + { + "uuid": "sym-12308ff860a88b22d3988316", + "level": "L3", + "label": "BlockSyncResponsePayload::api", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "BlockSyncResponsePayload::api", + "line_range": [ + 359, + 362 + ], + "centrality": 1 + }, + { + "uuid": "sym-c3d439caa60d66c084b242cb", + "level": "L2", + "label": "BlockSyncResponsePayload", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "BlockSyncResponsePayload", + "line_range": [ + 359, + 362 + ], + "centrality": 2 + }, + { + "uuid": "sym-fb874babcae55f743d4ff85e", + "level": "L3", + "label": "encodeBlockSyncResponse", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "encodeBlockSyncResponse", + "line_range": [ + 364, + 369 + ], + "centrality": 2 + }, + { + "uuid": "sym-94a4bc0bef1261cd6df79681", + "level": "L3", + "label": "BlocksRequestPayload::api", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "BlocksRequestPayload::api", + "line_range": [ + 371, + 374 + ], + "centrality": 1 + }, + { + "uuid": "sym-f0b5e63d32e47917e6917e37", + "level": "L2", + "label": "BlocksRequestPayload", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "BlocksRequestPayload", + "line_range": [ + 371, + 374 + ], + "centrality": 2 + }, + { + "uuid": "sym-10bf3623222ef5c352c92e57", + "level": "L3", + "label": "decodeBlocksRequest", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "decodeBlocksRequest", + "line_range": [ + 376, + 388 + ], + "centrality": 1 + }, + { + "uuid": "sym-5a6498b588eb7b9202c2278f", + "level": "L3", + "label": "encodeBlocksRequest", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "encodeBlocksRequest", + "line_range": [ + 390, + 395 + ], + "centrality": 1 + }, + { + "uuid": "sym-3efe476db2668ba9240cd9fa", + "level": "L3", + "label": "BlockHashRequestPayload::api", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "BlockHashRequestPayload::api", + "line_range": [ + 397, + 399 + ], + "centrality": 1 + }, + { + "uuid": "sym-2a16d473fb82483974822634", + "level": "L2", + "label": "BlockHashRequestPayload", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "BlockHashRequestPayload", + "line_range": [ + 397, + 399 + ], + "centrality": 2 + }, + { + "uuid": "sym-0429407686d62d7981518349", + "level": "L3", + "label": "decodeBlockHashRequest", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "decodeBlockHashRequest", + "line_range": [ + 401, + 404 + ], + "centrality": 1 + }, + { + "uuid": "sym-084f4ac4cc731f2eecd2e15b", + "level": "L3", + "label": "TransactionHashRequestPayload::api", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "TransactionHashRequestPayload::api", + "line_range": [ + 406, + 408 + ], + "centrality": 1 + }, + { + "uuid": "sym-a389b419600f623779bfb957", + "level": "L2", + "label": "TransactionHashRequestPayload", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "TransactionHashRequestPayload", + "line_range": [ + 406, + 408 + ], + "centrality": 2 + }, + { + "uuid": "sym-0da9ed27a8edc8d60500c437", + "level": "L3", + "label": "decodeTransactionHashRequest", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "decodeTransactionHashRequest", + "line_range": [ + 410, + 413 + ], + "centrality": 1 + }, + { + "uuid": "sym-0d519bd0d8d725bd68e90b74", + "level": "L3", + "label": "TransactionResponsePayload::api", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "TransactionResponsePayload::api", + "line_range": [ + 415, + 418 + ], + "centrality": 1 + }, + { + "uuid": "sym-682349dca1db65816dbb8d40", + "level": "L2", + "label": "TransactionResponsePayload", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "TransactionResponsePayload", + "line_range": [ + 415, + 418 + ], + "centrality": 2 + }, + { + "uuid": "sym-cd38e297a920fb3851693005", + "level": "L3", + "label": "encodeTransactionResponse", + "file_path": "src/libs/omniprotocol/serialization/sync.ts", + "symbol_name": "encodeTransactionResponse", + "line_range": [ + 420, + 425 + ], + "centrality": 1 + }, + { + "uuid": "sym-d5cca436cb4085a64e3fbc81", + "level": "L3", + "label": "DecodedTransaction::api", + "file_path": "src/libs/omniprotocol/serialization/transaction.ts", + "symbol_name": "DecodedTransaction::api", + "line_range": [ + 36, + 50 + ], + "centrality": 1 + }, + { + "uuid": "sym-fde5c332b3442bce93cbd4cf", + "level": "L2", + "label": "DecodedTransaction", + "file_path": "src/libs/omniprotocol/serialization/transaction.ts", + "symbol_name": "DecodedTransaction", + "line_range": [ + 36, + 50 + ], + "centrality": 2 + }, + { + "uuid": "sym-4d2cf98a651cd5dd3389e832", + "level": "L3", + "label": "encodeTransaction", + "file_path": "src/libs/omniprotocol/serialization/transaction.ts", + "symbol_name": "encodeTransaction", + "line_range": [ + 52, + 89 + ], + "centrality": 1 + }, + { + "uuid": "sym-6deebd259361408f0a65993f", + "level": "L3", + "label": "decodeTransaction", + "file_path": "src/libs/omniprotocol/serialization/transaction.ts", + "symbol_name": "decodeTransaction", + "line_range": [ + 91, + 187 + ], + "centrality": 2 + }, + { + "uuid": "sym-d0d4887ab09527b9257a1405", + "level": "L3", + "label": "TransactionEnvelopePayload::api", + "file_path": "src/libs/omniprotocol/serialization/transaction.ts", + "symbol_name": "TransactionEnvelopePayload::api", + "line_range": [ + 189, + 192 + ], + "centrality": 1 + }, + { + "uuid": "sym-bff9f5e26c04692e57a8c205", + "level": "L2", + "label": "TransactionEnvelopePayload", + "file_path": "src/libs/omniprotocol/serialization/transaction.ts", + "symbol_name": "TransactionEnvelopePayload", + "line_range": [ + 189, + 192 + ], + "centrality": 2 + }, + { + "uuid": "sym-a35dd0f41512f99872e7738b", + "level": "L3", + "label": "encodeTransactionEnvelope", + "file_path": "src/libs/omniprotocol/serialization/transaction.ts", + "symbol_name": "encodeTransactionEnvelope", + "line_range": [ + 194, + 199 + ], + "centrality": 1 + }, + { + "uuid": "sym-bf562992f64a168eef732a5d", + "level": "L3", + "label": "decodeTransactionEnvelope", + "file_path": "src/libs/omniprotocol/serialization/transaction.ts", + "symbol_name": "decodeTransactionEnvelope", + "line_range": [ + 201, + 216 + ], + "centrality": 2 + }, + { + "uuid": "sym-6aff8c1e4a946b504755b96c", + "level": "L3", + "label": "ConnectionState::api", + "file_path": "src/libs/omniprotocol/server/InboundConnection.ts", + "symbol_name": "ConnectionState::api", + "line_range": [ + 10, + 15 + ], + "centrality": 1 + }, + { + "uuid": "sym-b36ae142dc9718ede23c06bc", + "level": "L2", + "label": "ConnectionState", + "file_path": "src/libs/omniprotocol/server/InboundConnection.ts", + "symbol_name": "ConnectionState", + "line_range": [ + 10, + 15 + ], + "centrality": 2 + }, + { + "uuid": "sym-d19c4eedb3523566ec96367b", + "level": "L3", + "label": "InboundConnectionConfig::api", + "file_path": "src/libs/omniprotocol/server/InboundConnection.ts", + "symbol_name": "InboundConnectionConfig::api", + "line_range": [ + 17, + 21 + ], + "centrality": 1 + }, + { + "uuid": "sym-651d97a1d371ba00f5ed8ef7", + "level": "L2", + "label": "InboundConnectionConfig", + "file_path": "src/libs/omniprotocol/server/InboundConnection.ts", + "symbol_name": "InboundConnectionConfig", + "line_range": [ + 17, + 21 + ], + "centrality": 2 + }, + { + "uuid": "sym-8f1b556c30494585319ff2a8", + "level": "L3", + "label": "InboundConnection::api", + "file_path": "src/libs/omniprotocol/server/InboundConnection.ts", + "symbol_name": "InboundConnection::api", + "line_range": [ + 27, + 338 + ], + "centrality": 1 + }, + { + "uuid": "sym-8b4d74629cafce4fcd265da5", + "level": "L3", + "label": "InboundConnection.start", + "file_path": "src/libs/omniprotocol/server/InboundConnection.ts", + "symbol_name": "InboundConnection.start", + "line_range": [ + 56, + 87 + ], + "centrality": 1 + }, + { + "uuid": "sym-0e38f768aa845af8152f9371", + "level": "L3", + "label": "InboundConnection.close", + "file_path": "src/libs/omniprotocol/server/InboundConnection.ts", + "symbol_name": "InboundConnection.close", + "line_range": [ + 302, + 321 + ], + "centrality": 1 + }, + { + "uuid": "sym-c16a7a59d6bd44f47f669061", + "level": "L3", + "label": "InboundConnection.getState", + "file_path": "src/libs/omniprotocol/server/InboundConnection.ts", + "symbol_name": "InboundConnection.getState", + "line_range": [ + 323, + 325 + ], + "centrality": 1 + }, + { + "uuid": "sym-4f3b527ae6c1a92b1e08382e", + "level": "L3", + "label": "InboundConnection.getLastActivity", + "file_path": "src/libs/omniprotocol/server/InboundConnection.ts", + "symbol_name": "InboundConnection.getLastActivity", + "line_range": [ + 327, + 329 + ], + "centrality": 1 + }, + { + "uuid": "sym-d5457eadb39d5b88b40a0b7f", + "level": "L3", + "label": "InboundConnection.getCreatedAt", + "file_path": "src/libs/omniprotocol/server/InboundConnection.ts", + "symbol_name": "InboundConnection.getCreatedAt", + "line_range": [ + 331, + 333 + ], + "centrality": 1 + }, + { + "uuid": "sym-3211b4fb8cd96a09dddc5945", + "level": "L3", + "label": "InboundConnection.getPeerIdentity", + "file_path": "src/libs/omniprotocol/server/InboundConnection.ts", + "symbol_name": "InboundConnection.getPeerIdentity", + "line_range": [ + 335, + 337 + ], + "centrality": 1 + }, + { + "uuid": "sym-133421c4f44d097284fdc1e1", + "level": "L2", + "label": "InboundConnection", + "file_path": "src/libs/omniprotocol/server/InboundConnection.ts", + "symbol_name": "InboundConnection", + "line_range": [ + 27, + 338 + ], + "centrality": 9 + }, + { + "uuid": "sym-1f9b056f12bdcb651b98c9e9", + "level": "L3", + "label": "ServerConfig::api", + "file_path": "src/libs/omniprotocol/server/OmniProtocolServer.ts", + "symbol_name": "ServerConfig::api", + "line_range": [ + 7, + 17 + ], + "centrality": 1 + }, + { + "uuid": "sym-5f956142286a9ffd6b89aff8", + "level": "L2", + "label": "ServerConfig", + "file_path": "src/libs/omniprotocol/server/OmniProtocolServer.ts", + "symbol_name": "ServerConfig", + "line_range": [ + 7, + 17 + ], + "centrality": 2 + }, + { + "uuid": "sym-4fd98aa9a051f922a1be1738", + "level": "L3", + "label": "OmniProtocolServer::api", + "file_path": "src/libs/omniprotocol/server/OmniProtocolServer.ts", + "symbol_name": "OmniProtocolServer::api", + "line_range": [ + 22, + 219 + ], + "centrality": 1 + }, + { + "uuid": "sym-2a9f3b24c688a8f4c7c6ca77", + "level": "L3", + "label": "OmniProtocolServer.start", + "file_path": "src/libs/omniprotocol/server/OmniProtocolServer.ts", + "symbol_name": "OmniProtocolServer.start", + "line_range": [ + 58, + 105 + ], + "centrality": 1 + }, + { + "uuid": "sym-3e5a52e4a3288e9197169dd5", + "level": "L3", + "label": "OmniProtocolServer.stop", + "file_path": "src/libs/omniprotocol/server/OmniProtocolServer.ts", + "symbol_name": "OmniProtocolServer.stop", + "line_range": [ + 110, + 135 + ], + "centrality": 1 + }, + { + "uuid": "sym-d47afa81e1b42216c57c4f17", + "level": "L3", + "label": "OmniProtocolServer.getStats", + "file_path": "src/libs/omniprotocol/server/OmniProtocolServer.ts", + "symbol_name": "OmniProtocolServer.getStats", + "line_range": [ + 195, + 202 + ], + "centrality": 1 + }, + { + "uuid": "sym-3f2e207330d30a047d942f8a", + "level": "L3", + "label": "OmniProtocolServer.getRateLimiter", + "file_path": "src/libs/omniprotocol/server/OmniProtocolServer.ts", + "symbol_name": "OmniProtocolServer.getRateLimiter", + "line_range": [ + 207, + 209 + ], + "centrality": 1 + }, + { + "uuid": "sym-683faf499d47d1002dcc9c9a", + "level": "L2", + "label": "OmniProtocolServer", + "file_path": "src/libs/omniprotocol/server/OmniProtocolServer.ts", + "symbol_name": "OmniProtocolServer", + "line_range": [ + 22, + 219 + ], + "centrality": 6 + }, + { + "uuid": "sym-b11e93b10772d5d3f91d3bf7", + "level": "L3", + "label": "ConnectionManagerConfig::api", + "file_path": "src/libs/omniprotocol/server/ServerConnectionManager.ts", + "symbol_name": "ConnectionManagerConfig::api", + "line_range": [ + 7, + 12 + ], + "centrality": 1 + }, + { + "uuid": "sym-1c96385260a214f0ef0cd31a", + "level": "L2", + "label": "ConnectionManagerConfig", + "file_path": "src/libs/omniprotocol/server/ServerConnectionManager.ts", + "symbol_name": "ConnectionManagerConfig", + "line_range": [ + 7, + 12 + ], + "centrality": 2 + }, + { + "uuid": "sym-15a0cf677c65f5feb1acda3d", + "level": "L3", + "label": "ServerConnectionManager::api", + "file_path": "src/libs/omniprotocol/server/ServerConnectionManager.ts", + "symbol_name": "ServerConnectionManager::api", + "line_range": [ + 17, + 190 + ], + "centrality": 1 + }, + { + "uuid": "sym-52b7361894d97b4a7afdc494", + "level": "L3", + "label": "ServerConnectionManager.handleConnection", + "file_path": "src/libs/omniprotocol/server/ServerConnectionManager.ts", + "symbol_name": "ServerConnectionManager.handleConnection", + "line_range": [ + 33, + 62 + ], + "centrality": 1 + }, + { + "uuid": "sym-c63340bdbd01e0a374f72ca1", + "level": "L3", + "label": "ServerConnectionManager.closeAll", + "file_path": "src/libs/omniprotocol/server/ServerConnectionManager.ts", + "symbol_name": "ServerConnectionManager.closeAll", + "line_range": [ + 67, + 84 + ], + "centrality": 1 + }, + { + "uuid": "sym-e7404e24dcc9f40c5540555a", + "level": "L3", + "label": "ServerConnectionManager.getConnectionCount", + "file_path": "src/libs/omniprotocol/server/ServerConnectionManager.ts", + "symbol_name": "ServerConnectionManager.getConnectionCount", + "line_range": [ + 89, + 91 + ], + "centrality": 1 + }, + { + "uuid": "sym-b1b47df78ce6450e30e86f6b", + "level": "L3", + "label": "ServerConnectionManager.getStats", + "file_path": "src/libs/omniprotocol/server/ServerConnectionManager.ts", + "symbol_name": "ServerConnectionManager.getStats", + "line_range": [ + 96, + 114 + ], + "centrality": 1 + }, + { + "uuid": "sym-10c1513a04a2c8cb11ddbcf4", + "level": "L2", + "label": "ServerConnectionManager", + "file_path": "src/libs/omniprotocol/server/ServerConnectionManager.ts", + "symbol_name": "ServerConnectionManager", + "line_range": [ + 17, + 190 + ], + "centrality": 6 + }, + { + "uuid": "sym-0fe09e1aac44a856be580a75", + "level": "L3", + "label": "TLSServerConfig::api", + "file_path": "src/libs/omniprotocol/server/TLSServer.ts", + "symbol_name": "TLSServerConfig::api", + "line_range": [ + 11, + 20 + ], + "centrality": 1 + }, + { + "uuid": "sym-3933e7b0dfc4cd713ec68e39", + "level": "L2", + "label": "TLSServerConfig", + "file_path": "src/libs/omniprotocol/server/TLSServer.ts", + "symbol_name": "TLSServerConfig", + "line_range": [ + 11, + 20 + ], + "centrality": 2 + }, + { + "uuid": "sym-d94986c2fa52214663d393ae", + "level": "L3", + "label": "TLSServer::api", + "file_path": "src/libs/omniprotocol/server/TLSServer.ts", + "symbol_name": "TLSServer::api", + "line_range": [ + 26, + 314 + ], + "centrality": 1 + }, + { + "uuid": "sym-a14c227a9792d32d04b2396f", + "level": "L3", + "label": "TLSServer.start", + "file_path": "src/libs/omniprotocol/server/TLSServer.ts", + "symbol_name": "TLSServer.start", + "line_range": [ + 67, + 139 + ], + "centrality": 1 + }, + { + "uuid": "sym-866db34b995ad59a88ac4252", + "level": "L3", + "label": "TLSServer.stop", + "file_path": "src/libs/omniprotocol/server/TLSServer.ts", + "symbol_name": "TLSServer.stop", + "line_range": [ + 248, + 273 + ], + "centrality": 1 + }, + { + "uuid": "sym-f339a578b038105b43659b18", + "level": "L3", + "label": "TLSServer.addTrustedFingerprint", + "file_path": "src/libs/omniprotocol/server/TLSServer.ts", + "symbol_name": "TLSServer.addTrustedFingerprint", + "line_range": [ + 278, + 283 + ], + "centrality": 1 + }, + { + "uuid": "sym-b51ea5558814c2899f1e2975", + "level": "L3", + "label": "TLSServer.removeTrustedFingerprint", + "file_path": "src/libs/omniprotocol/server/TLSServer.ts", + "symbol_name": "TLSServer.removeTrustedFingerprint", + "line_range": [ + 288, + 291 + ], + "centrality": 1 + }, + { + "uuid": "sym-80b2e1bd784169672ba37388", + "level": "L3", + "label": "TLSServer.getStats", + "file_path": "src/libs/omniprotocol/server/TLSServer.ts", + "symbol_name": "TLSServer.getStats", + "line_range": [ + 296, + 306 + ], + "centrality": 1 + }, + { + "uuid": "sym-38003f377d941f1aed705c15", + "level": "L3", + "label": "TLSServer.getRateLimiter", + "file_path": "src/libs/omniprotocol/server/TLSServer.ts", + "symbol_name": "TLSServer.getRateLimiter", + "line_range": [ + 311, + 313 + ], + "centrality": 1 + }, + { + "uuid": "sym-48085842ddef714b8a2ad15f", + "level": "L2", + "label": "TLSServer", + "file_path": "src/libs/omniprotocol/server/TLSServer.ts", + "symbol_name": "TLSServer", + "line_range": [ + 26, + 314 + ], + "centrality": 8 + }, + { + "uuid": "sym-310c5f7a70cf1d3ad6f355af", + "level": "L3", + "label": "*", + "file_path": "src/libs/omniprotocol/server/index.ts", + "symbol_name": "*", + "line_range": [ + 1, + 1 + ], + "centrality": 1 + }, + { + "uuid": "sym-6122e71601390d54325a01b8", + "level": "L3", + "label": "*", + "file_path": "src/libs/omniprotocol/server/index.ts", + "symbol_name": "*", + "line_range": [ + 2, + 2 + ], + "centrality": 1 + }, + { + "uuid": "sym-87969fcca7bf7172f21ef7f3", + "level": "L3", + "label": "*", + "file_path": "src/libs/omniprotocol/server/index.ts", + "symbol_name": "*", + "line_range": [ + 3, + 3 + ], + "centrality": 1 + }, + { + "uuid": "sym-cccbec68264c6804aba0e890", + "level": "L3", + "label": "*", + "file_path": "src/libs/omniprotocol/server/index.ts", + "symbol_name": "*", + "line_range": [ + 4, + 4 + ], + "centrality": 1 + }, + { + "uuid": "sym-40e6b962c5f9e8eb4faf3e94", + "level": "L3", + "label": "generateSelfSignedCert", + "file_path": "src/libs/omniprotocol/tls/certificates.ts", + "symbol_name": "generateSelfSignedCert", + "line_range": [ + 14, + 98 + ], + "centrality": 2 + }, + { + "uuid": "sym-38d0a492948f82e34e85ee87", + "level": "L3", + "label": "loadCertificate", + "file_path": "src/libs/omniprotocol/tls/certificates.ts", + "symbol_name": "loadCertificate", + "line_range": [ + 103, + 130 + ], + "centrality": 5 + }, + { + "uuid": "sym-5bdade31fc0d63b3de669cf8", + "level": "L3", + "label": "getCertificateFingerprint", + "file_path": "src/libs/omniprotocol/tls/certificates.ts", + "symbol_name": "getCertificateFingerprint", + "line_range": [ + 135, + 138 + ], + "centrality": 2 + }, + { + "uuid": "sym-eb812ea9d1ab7667cac73686", + "level": "L3", + "label": "verifyCertificateValidity", + "file_path": "src/libs/omniprotocol/tls/certificates.ts", + "symbol_name": "verifyCertificateValidity", + "line_range": [ + 143, + 163 + ], + "centrality": 3 + }, + { + "uuid": "sym-bfbcfa89f57581fb2c56e102", + "level": "L3", + "label": "getCertificateExpiryDays", + "file_path": "src/libs/omniprotocol/tls/certificates.ts", + "symbol_name": "getCertificateExpiryDays", + "line_range": [ + 168, + 175 + ], + "centrality": 4 + }, + { + "uuid": "sym-bd397dfc2ea87521bf16c24b", + "level": "L3", + "label": "certificateExists", + "file_path": "src/libs/omniprotocol/tls/certificates.ts", + "symbol_name": "certificateExists", + "line_range": [ + 180, + 182 + ], + "centrality": 2 + }, + { + "uuid": "sym-1c718042ed0590db80445128", + "level": "L3", + "label": "ensureCertDirectory", + "file_path": "src/libs/omniprotocol/tls/certificates.ts", + "symbol_name": "ensureCertDirectory", + "line_range": [ + 187, + 189 + ], + "centrality": 2 + }, + { + "uuid": "sym-16c7a605ac6fdbdd9e7f493c", + "level": "L3", + "label": "getCertificateInfoString", + "file_path": "src/libs/omniprotocol/tls/certificates.ts", + "symbol_name": "getCertificateInfoString", + "line_range": [ + 194, + 212 + ], + "centrality": 4 + }, + { + "uuid": "sym-3f0dd3972baf18443d586478", + "level": "L3", + "label": "*", + "file_path": "src/libs/omniprotocol/tls/index.ts", + "symbol_name": "*", + "line_range": [ + 1, + 1 + ], + "centrality": 1 + }, + { + "uuid": "sym-023f23876208fe3644656fea", + "level": "L3", + "label": "*", + "file_path": "src/libs/omniprotocol/tls/index.ts", + "symbol_name": "*", + "line_range": [ + 2, + 2 + ], + "centrality": 1 + }, + { + "uuid": "sym-f75161cce5821340e3206b23", + "level": "L3", + "label": "*", + "file_path": "src/libs/omniprotocol/tls/index.ts", + "symbol_name": "*", + "line_range": [ + 3, + 3 + ], + "centrality": 1 + }, + { + "uuid": "sym-ba52215a94401bdbb33683e6", + "level": "L3", + "label": "TLSInitResult::api", + "file_path": "src/libs/omniprotocol/tls/initialize.ts", + "symbol_name": "TLSInitResult::api", + "line_range": [ + 12, + 16 + ], + "centrality": 1 + }, + { + "uuid": "sym-f93acea713b02d00af75e846", + "level": "L2", + "label": "TLSInitResult", + "file_path": "src/libs/omniprotocol/tls/initialize.ts", + "symbol_name": "TLSInitResult", + "line_range": [ + 12, + 16 + ], + "centrality": 2 + }, + { + "uuid": "sym-b3b9f472b2f3019657cef489", + "level": "L3", + "label": "initializeTLSCertificates", + "file_path": "src/libs/omniprotocol/tls/initialize.ts", + "symbol_name": "initializeTLSCertificates", + "line_range": [ + 25, + 85 + ], + "centrality": 7 + }, + { + "uuid": "sym-35e335b14ed79ab5eb0dcaa4", + "level": "L3", + "label": "getDefaultTLSPaths", + "file_path": "src/libs/omniprotocol/tls/initialize.ts", + "symbol_name": "getDefaultTLSPaths", + "line_range": [ + 90, + 97 + ], + "centrality": 1 + }, + { + "uuid": "sym-2fe92e48fc1f13dd643e705a", + "level": "L3", + "label": "TLSConfig::api", + "file_path": "src/libs/omniprotocol/tls/types.ts", + "symbol_name": "TLSConfig::api", + "line_range": [ + 1, + 12 + ], + "centrality": 1 + }, + { + "uuid": "sym-cfc610bda4c5eda04a009f49", + "level": "L2", + "label": "TLSConfig", + "file_path": "src/libs/omniprotocol/tls/types.ts", + "symbol_name": "TLSConfig", + "line_range": [ + 1, + 12 + ], + "centrality": 2 + }, + { + "uuid": "sym-881a2a8d37c9e7b761bfa51e", + "level": "L3", + "label": "CertificateInfo::api", + "file_path": "src/libs/omniprotocol/tls/types.ts", + "symbol_name": "CertificateInfo::api", + "line_range": [ + 14, + 28 + ], + "centrality": 1 + }, + { + "uuid": "sym-026247379bacd97457f16ffc", + "level": "L2", + "label": "CertificateInfo", + "file_path": "src/libs/omniprotocol/tls/types.ts", + "symbol_name": "CertificateInfo", + "line_range": [ + 14, + 28 + ], + "centrality": 2 + }, + { + "uuid": "sym-aad1fbde112489a0e0a55886", + "level": "L3", + "label": "CertificateGenerationOptions::api", + "file_path": "src/libs/omniprotocol/tls/types.ts", + "symbol_name": "CertificateGenerationOptions::api", + "line_range": [ + 30, + 36 + ], + "centrality": 1 + }, + { + "uuid": "sym-984b0552359747b6c5c827e5", + "level": "L2", + "label": "CertificateGenerationOptions", + "file_path": "src/libs/omniprotocol/tls/types.ts", + "symbol_name": "CertificateGenerationOptions", + "line_range": [ + 30, + 36 + ], + "centrality": 2 + }, + { + "uuid": "sym-1c76a6289fd857f7afde3e67", + "level": "L3", + "label": "DEFAULT_TLS_CONFIG", + "file_path": "src/libs/omniprotocol/tls/types.ts", + "symbol_name": "DEFAULT_TLS_CONFIG", + "line_range": [ + 38, + 52 + ], + "centrality": 1 + }, + { + "uuid": "sym-1dc1e1b29ddff1c012139bcb", + "level": "L3", + "label": "ConnectionFactory::api", + "file_path": "src/libs/omniprotocol/transport/ConnectionFactory.ts", + "symbol_name": "ConnectionFactory::api", + "line_range": [ + 11, + 63 + ], + "centrality": 1 + }, + { + "uuid": "sym-693efbe3e685c5a46c951e19", + "level": "L3", + "label": "ConnectionFactory.createConnection", + "file_path": "src/libs/omniprotocol/transport/ConnectionFactory.ts", + "symbol_name": "ConnectionFactory.createConnection", + "line_range": [ + 24, + 48 + ], + "centrality": 1 + }, + { + "uuid": "sym-de270da8d0f039197a169102", + "level": "L3", + "label": "ConnectionFactory.setTLSConfig", + "file_path": "src/libs/omniprotocol/transport/ConnectionFactory.ts", + "symbol_name": "ConnectionFactory.setTLSConfig", + "line_range": [ + 53, + 55 + ], + "centrality": 1 + }, + { + "uuid": "sym-cd66f4576418400b50aaab41", + "level": "L3", + "label": "ConnectionFactory.getTLSConfig", + "file_path": "src/libs/omniprotocol/transport/ConnectionFactory.ts", + "symbol_name": "ConnectionFactory.getTLSConfig", + "line_range": [ + 60, + 62 + ], + "centrality": 1 + }, + { + "uuid": "sym-f6079a5941a4aa6aabf4e4d1", + "level": "L2", + "label": "ConnectionFactory", + "file_path": "src/libs/omniprotocol/transport/ConnectionFactory.ts", + "symbol_name": "ConnectionFactory", + "line_range": [ + 11, + 63 + ], + "centrality": 5 + }, + { + "uuid": "sym-79d733c4fe52875b36ca1dc2", + "level": "L3", + "label": "ConnectionPool::api", + "file_path": "src/libs/omniprotocol/transport/ConnectionPool.ts", + "symbol_name": "ConnectionPool::api", + "line_range": [ + 30, + 421 + ], + "centrality": 1 + }, + { + "uuid": "sym-f4ad00f9b85e424de28b078e", + "level": "L3", + "label": "ConnectionPool.acquire", + "file_path": "src/libs/omniprotocol/transport/ConnectionPool.ts", + "symbol_name": "ConnectionPool.acquire", + "line_range": [ + 56, + 111 + ], + "centrality": 1 + }, + { + "uuid": "sym-07a7afa8b7a80b81d8daa204", + "level": "L3", + "label": "ConnectionPool.release", + "file_path": "src/libs/omniprotocol/transport/ConnectionPool.ts", + "symbol_name": "ConnectionPool.release", + "line_range": [ + 118, + 122 + ], + "centrality": 1 + }, + { + "uuid": "sym-67b329b6d5edf0c52f1f94ce", + "level": "L3", + "label": "ConnectionPool.send", + "file_path": "src/libs/omniprotocol/transport/ConnectionPool.ts", + "symbol_name": "ConnectionPool.send", + "line_range": [ + 134, + 156 + ], + "centrality": 1 + }, + { + "uuid": "sym-a6b5d0bbd8d6fb578aaa2c51", + "level": "L3", + "label": "ConnectionPool.sendAuthenticated", + "file_path": "src/libs/omniprotocol/transport/ConnectionPool.ts", + "symbol_name": "ConnectionPool.sendAuthenticated", + "line_range": [ + 170, + 200 + ], + "centrality": 1 + }, + { + "uuid": "sym-91a7207033d6adc49e3ac3cf", + "level": "L3", + "label": "ConnectionPool.getStats", + "file_path": "src/libs/omniprotocol/transport/ConnectionPool.ts", + "symbol_name": "ConnectionPool.getStats", + "line_range": [ + 206, + 245 + ], + "centrality": 1 + }, + { + "uuid": "sym-d7e19777ecfc8f5fc6abb39e", + "level": "L3", + "label": "ConnectionPool.getConnectionInfo", + "file_path": "src/libs/omniprotocol/transport/ConnectionPool.ts", + "symbol_name": "ConnectionPool.getConnectionInfo", + "line_range": [ + 252, + 255 + ], + "centrality": 1 + }, + { + "uuid": "sym-b3946213b56c00a758511c93", + "level": "L3", + "label": "ConnectionPool.getAllConnectionInfo", + "file_path": "src/libs/omniprotocol/transport/ConnectionPool.ts", + "symbol_name": "ConnectionPool.getAllConnectionInfo", + "line_range": [ + 261, + 272 + ], + "centrality": 1 + }, + { + "uuid": "sym-c03790d11131253fa310918d", + "level": "L3", + "label": "ConnectionPool.shutdown", + "file_path": "src/libs/omniprotocol/transport/ConnectionPool.ts", + "symbol_name": "ConnectionPool.shutdown", + "line_range": [ + 278, + 298 + ], + "centrality": 1 + }, + { + "uuid": "sym-132f69711099ffece36b4018", + "level": "L2", + "label": "ConnectionPool", + "file_path": "src/libs/omniprotocol/transport/ConnectionPool.ts", + "symbol_name": "ConnectionPool", + "line_range": [ + 30, + 421 + ], + "centrality": 10 + }, + { + "uuid": "sym-e027e1d71fc94eda35062eb3", + "level": "L3", + "label": "MessageFramer::api", + "file_path": "src/libs/omniprotocol/transport/MessageFramer.ts", + "symbol_name": "MessageFramer::api", + "line_range": [ + 31, + 332 + ], + "centrality": 1 + }, + { + "uuid": "sym-b918906007bcfe0fb5eb9bc7", + "level": "L3", + "label": "MessageFramer.addData", + "file_path": "src/libs/omniprotocol/transport/MessageFramer.ts", + "symbol_name": "MessageFramer.addData", + "line_range": [ + 48, + 50 + ], + "centrality": 1 + }, + { + "uuid": "sym-00c53ac8685951a1aae5b41e", + "level": "L3", + "label": "MessageFramer.extractMessage", + "file_path": "src/libs/omniprotocol/transport/MessageFramer.ts", + "symbol_name": "MessageFramer.extractMessage", + "line_range": [ + 56, + 128 + ], + "centrality": 1 + }, + { + "uuid": "sym-889e2f691903588bf21c0b00", + "level": "L3", + "label": "MessageFramer.extractLegacyMessage", + "file_path": "src/libs/omniprotocol/transport/MessageFramer.ts", + "symbol_name": "MessageFramer.extractLegacyMessage", + "line_range": [ + 133, + 179 + ], + "centrality": 1 + }, + { + "uuid": "sym-ad22d7f770482a70786aa980", + "level": "L3", + "label": "MessageFramer.getBufferSize", + "file_path": "src/libs/omniprotocol/transport/MessageFramer.ts", + "symbol_name": "MessageFramer.getBufferSize", + "line_range": [ + 271, + 273 + ], + "centrality": 1 + }, + { + "uuid": "sym-e0d9fa8b7626b4186b317c58", + "level": "L3", + "label": "MessageFramer.clear", + "file_path": "src/libs/omniprotocol/transport/MessageFramer.ts", + "symbol_name": "MessageFramer.clear", + "line_range": [ + 278, + 280 + ], + "centrality": 1 + }, + { + "uuid": "sym-6bc616937536685e5c6d82bd", + "level": "L3", + "label": "MessageFramer.encodeMessage", + "file_path": "src/libs/omniprotocol/transport/MessageFramer.ts", + "symbol_name": "MessageFramer.encodeMessage", + "line_range": [ + 291, + 331 + ], + "centrality": 1 + }, + { + "uuid": "sym-3defead0134f1d92758a8884", + "level": "L2", + "label": "MessageFramer", + "file_path": "src/libs/omniprotocol/transport/MessageFramer.ts", + "symbol_name": "MessageFramer", + "line_range": [ + 31, + 332 + ], + "centrality": 8 + }, + { + "uuid": "sym-adb33d12f46d9a08f5ecf324", + "level": "L3", + "label": "PeerConnection::api", + "file_path": "src/libs/omniprotocol/transport/PeerConnection.ts", + "symbol_name": "PeerConnection::api", + "line_range": [ + 41, + 491 + ], + "centrality": 1 + }, + { + "uuid": "sym-6f64d68020f1fe3df5c8e9e6", + "level": "L3", + "label": "PeerConnection.connect", + "file_path": "src/libs/omniprotocol/transport/PeerConnection.ts", + "symbol_name": "PeerConnection.connect", + "line_range": [ + 71, + 128 + ], + "centrality": 1 + }, + { + "uuid": "sym-1a2a490aef95273821ccdc0d", + "level": "L3", + "label": "PeerConnection.send", + "file_path": "src/libs/omniprotocol/transport/PeerConnection.ts", + "symbol_name": "PeerConnection.send", + "line_range": [ + 137, + 183 + ], + "centrality": 1 + }, + { + "uuid": "sym-f6c819fdb3819f2341dab918", + "level": "L3", + "label": "PeerConnection.sendAuthenticated", + "file_path": "src/libs/omniprotocol/transport/PeerConnection.ts", + "symbol_name": "PeerConnection.sendAuthenticated", + "line_range": [ + 194, + 279 + ], + "centrality": 1 + }, + { + "uuid": "sym-bb4d0afe9c08b0d45f72ea92", + "level": "L3", + "label": "PeerConnection.sendOneWay", + "file_path": "src/libs/omniprotocol/transport/PeerConnection.ts", + "symbol_name": "PeerConnection.sendOneWay", + "line_range": [ + 286, + 307 + ], + "centrality": 1 + }, + { + "uuid": "sym-5a41fca09ae8208ecfd47a0c", + "level": "L3", + "label": "PeerConnection.close", + "file_path": "src/libs/omniprotocol/transport/PeerConnection.ts", + "symbol_name": "PeerConnection.close", + "line_range": [ + 313, + 355 + ], + "centrality": 1 + }, + { + "uuid": "sym-bada2309fd0b6b83697bff29", + "level": "L3", + "label": "PeerConnection.getState", + "file_path": "src/libs/omniprotocol/transport/PeerConnection.ts", + "symbol_name": "PeerConnection.getState", + "line_range": [ + 360, + 362 + ], + "centrality": 1 + }, + { + "uuid": "sym-1d2d03535b4f805902059dc8", + "level": "L3", + "label": "PeerConnection.getInfo", + "file_path": "src/libs/omniprotocol/transport/PeerConnection.ts", + "symbol_name": "PeerConnection.getInfo", + "line_range": [ + 367, + 376 + ], + "centrality": 1 + }, + { + "uuid": "sym-a9384b6851bcfa0236066e93", + "level": "L3", + "label": "PeerConnection.isReady", + "file_path": "src/libs/omniprotocol/transport/PeerConnection.ts", + "symbol_name": "PeerConnection.isReady", + "line_range": [ + 381, + 383 + ], + "centrality": 1 + }, + { + "uuid": "sym-9ef2634fb1ee3a33ea7c36ec", + "level": "L3", + "label": "PeerConnection.setState", + "file_path": "src/libs/omniprotocol/transport/PeerConnection.ts", + "symbol_name": "PeerConnection.setState", + "line_range": [ + 479, + 490 + ], + "centrality": 1 + }, + { + "uuid": "sym-8f81b1eefb86ab1c33cc1d76", + "level": "L2", + "label": "PeerConnection", + "file_path": "src/libs/omniprotocol/transport/PeerConnection.ts", + "symbol_name": "PeerConnection", + "line_range": [ + 41, + 491 + ], + "centrality": 11 + }, + { + "uuid": "sym-30817f02ab11a1de7c63c3e4", + "level": "L3", + "label": "TLSConnection::api", + "file_path": "src/libs/omniprotocol/transport/TLSConnection.ts", + "symbol_name": "TLSConnection::api", + "line_range": [ + 13, + 218 + ], + "centrality": 1 + }, + { + "uuid": "sym-f0e0331218c3df6f87ccf4fc", + "level": "L3", + "label": "TLSConnection.connect", + "file_path": "src/libs/omniprotocol/transport/TLSConnection.ts", + "symbol_name": "TLSConnection.connect", + "line_range": [ + 34, + 119 + ], + "centrality": 1 + }, + { + "uuid": "sym-1c217afbacd1399fff13d6db", + "level": "L3", + "label": "TLSConnection.addTrustedFingerprint", + "file_path": "src/libs/omniprotocol/transport/TLSConnection.ts", + "symbol_name": "TLSConnection.addTrustedFingerprint", + "line_range": [ + 188, + 193 + ], + "centrality": 1 + }, + { + "uuid": "sym-904f441fa1a49268b1cef08f", + "level": "L2", + "label": "TLSConnection", + "file_path": "src/libs/omniprotocol/transport/TLSConnection.ts", + "symbol_name": "TLSConnection", + "line_range": [ + 13, + 218 + ], + "centrality": 4 + }, + { + "uuid": "sym-8574fa16baefd1d36d740e08", + "level": "L3", + "label": "ConnectionState::api", + "file_path": "src/libs/omniprotocol/transport/types.ts", + "symbol_name": "ConnectionState::api", + "line_range": [ + 11, + 19 + ], + "centrality": 1 + }, + { + "uuid": "sym-fc35b6613e7a65cdd4ea5e06", + "level": "L2", + "label": "ConnectionState", + "file_path": "src/libs/omniprotocol/transport/types.ts", + "symbol_name": "ConnectionState", + "line_range": [ + 11, + 19 + ], + "centrality": 2 + }, + { + "uuid": "sym-e03bc6663c48f335b7e718c0", + "level": "L3", + "label": "ConnectionOptions::api", + "file_path": "src/libs/omniprotocol/transport/types.ts", + "symbol_name": "ConnectionOptions::api", + "line_range": [ + 24, + 31 + ], + "centrality": 1 + }, + { + "uuid": "sym-e057876fb864c3507b96e2ec", + "level": "L2", + "label": "ConnectionOptions", + "file_path": "src/libs/omniprotocol/transport/types.ts", + "symbol_name": "ConnectionOptions", + "line_range": [ + 24, + 31 + ], + "centrality": 2 + }, + { + "uuid": "sym-664024d03f5a3eebad0f7ca6", + "level": "L3", + "label": "PendingRequest::api", + "file_path": "src/libs/omniprotocol/transport/types.ts", + "symbol_name": "PendingRequest::api", + "line_range": [ + 37, + 46 + ], + "centrality": 1 + }, + { + "uuid": "sym-5bd380f96888898be81a62d2", + "level": "L2", + "label": "PendingRequest", + "file_path": "src/libs/omniprotocol/transport/types.ts", + "symbol_name": "PendingRequest", + "line_range": [ + 37, + 46 + ], + "centrality": 2 + }, + { + "uuid": "sym-9a8d9ad815a0ff16982c54fe", + "level": "L3", + "label": "PoolConfig::api", + "file_path": "src/libs/omniprotocol/transport/types.ts", + "symbol_name": "PoolConfig::api", + "line_range": [ + 51, + 62 + ], + "centrality": 1 + }, + { + "uuid": "sym-28e0e30ee3f838c528a8ca6f", + "level": "L2", + "label": "PoolConfig", + "file_path": "src/libs/omniprotocol/transport/types.ts", + "symbol_name": "PoolConfig", + "line_range": [ + 51, + 62 + ], + "centrality": 2 + }, + { + "uuid": "sym-c315cfc3ad282c2d02ded07c", + "level": "L3", + "label": "PoolStats::api", + "file_path": "src/libs/omniprotocol/transport/types.ts", + "symbol_name": "PoolStats::api", + "line_range": [ + 67, + 78 + ], + "centrality": 1 + }, + { + "uuid": "sym-8f350d3b1915ecc6427767b3", + "level": "L2", + "label": "PoolStats", + "file_path": "src/libs/omniprotocol/transport/types.ts", + "symbol_name": "PoolStats", + "line_range": [ + 67, + 78 + ], + "centrality": 2 + }, + { + "uuid": "sym-255d674916b5051a77923baf", + "level": "L3", + "label": "ConnectionInfo::api", + "file_path": "src/libs/omniprotocol/transport/types.ts", + "symbol_name": "ConnectionInfo::api", + "line_range": [ + 83, + 96 + ], + "centrality": 1 + }, + { + "uuid": "sym-1e03020c93407a3c93000806", + "level": "L2", + "label": "ConnectionInfo", + "file_path": "src/libs/omniprotocol/transport/types.ts", + "symbol_name": "ConnectionInfo", + "line_range": [ + 83, + 96 + ], + "centrality": 2 + }, + { + "uuid": "sym-85b6f3f95870701af130fde6", + "level": "L3", + "label": "ParsedConnectionString::api", + "file_path": "src/libs/omniprotocol/transport/types.ts", + "symbol_name": "ParsedConnectionString::api", + "line_range": [ + 101, + 108 + ], + "centrality": 1 + }, + { + "uuid": "sym-d004ecd8bd5430d39a4084f0", + "level": "L2", + "label": "ParsedConnectionString", + "file_path": "src/libs/omniprotocol/transport/types.ts", + "symbol_name": "ParsedConnectionString", + "line_range": [ + 101, + 108 + ], + "centrality": 2 + }, + { + "uuid": "sym-0a454006c43bd2d6cb2b165f", + "level": "L3", + "label": "PoolCapacityError", + "file_path": "src/libs/omniprotocol/transport/types.ts", + "symbol_name": "PoolCapacityError", + "line_range": [ + 112, + 112 + ], + "centrality": 1 + }, + { + "uuid": "sym-3fb22f8b02267a42caee9850", + "level": "L3", + "label": "ConnectionTimeoutError", + "file_path": "src/libs/omniprotocol/transport/types.ts", + "symbol_name": "ConnectionTimeoutError", + "line_range": [ + 113, + 113 + ], + "centrality": 1 + }, + { + "uuid": "sym-4431cb1bbb71c0fa9d65d5c0", + "level": "L3", + "label": "AuthenticationError", + "file_path": "src/libs/omniprotocol/transport/types.ts", + "symbol_name": "AuthenticationError", + "line_range": [ + 114, + 114 + ], + "centrality": 1 + }, + { + "uuid": "sym-a49b7e959d6c7ec989554af4", + "level": "L3", + "label": "parseConnectionString", + "file_path": "src/libs/omniprotocol/transport/types.ts", + "symbol_name": "parseConnectionString", + "line_range": [ + 123, + 138 + ], + "centrality": 1 + }, + { + "uuid": "sym-5a1f2f5309251555b04b8813", + "level": "L3", + "label": "MigrationMode::api", + "file_path": "src/libs/omniprotocol/types/config.ts", + "symbol_name": "MigrationMode::api", + "line_range": [ + 1, + 1 + ], + "centrality": 1 + }, + { + "uuid": "sym-12728d553b87eda8baeb8a42", + "level": "L2", + "label": "MigrationMode", + "file_path": "src/libs/omniprotocol/types/config.ts", + "symbol_name": "MigrationMode", + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "sym-753aa2bc31b78364585e7d9d", + "level": "L3", + "label": "ConnectionPoolConfig::api", + "file_path": "src/libs/omniprotocol/types/config.ts", + "symbol_name": "ConnectionPoolConfig::api", + "line_range": [ + 3, + 13 + ], + "centrality": 1 + }, + { + "uuid": "sym-daf739626627c36496ea6014", + "level": "L2", + "label": "ConnectionPoolConfig", + "file_path": "src/libs/omniprotocol/types/config.ts", + "symbol_name": "ConnectionPoolConfig", + "line_range": [ + 3, + 13 + ], + "centrality": 2 + }, + { + "uuid": "sym-d0a13459da194a8f53ee0247", + "level": "L3", + "label": "ProtocolRuntimeConfig::api", + "file_path": "src/libs/omniprotocol/types/config.ts", + "symbol_name": "ProtocolRuntimeConfig::api", + "line_range": [ + 15, + 20 + ], + "centrality": 1 + }, + { + "uuid": "sym-78928c613b02b7f6c1a80fab", + "level": "L2", + "label": "ProtocolRuntimeConfig", + "file_path": "src/libs/omniprotocol/types/config.ts", + "symbol_name": "ProtocolRuntimeConfig", + "line_range": [ + 15, + 20 + ], + "centrality": 2 + }, + { + "uuid": "sym-489b5423810e31ea232d4353", + "level": "L3", + "label": "MigrationConfig::api", + "file_path": "src/libs/omniprotocol/types/config.ts", + "symbol_name": "MigrationConfig::api", + "line_range": [ + 22, + 27 + ], + "centrality": 1 + }, + { + "uuid": "sym-819e1e0416b0f28eaf5ed236", + "level": "L2", + "label": "MigrationConfig", + "file_path": "src/libs/omniprotocol/types/config.ts", + "symbol_name": "MigrationConfig", + "line_range": [ + 22, + 27 + ], + "centrality": 2 + }, + { + "uuid": "sym-b6021c676c4a1f965feff831", + "level": "L3", + "label": "OmniProtocolConfig::api", + "file_path": "src/libs/omniprotocol/types/config.ts", + "symbol_name": "OmniProtocolConfig::api", + "line_range": [ + 29, + 33 + ], + "centrality": 1 + }, + { + "uuid": "sym-5bb0e442514b6deb156754f7", + "level": "L2", + "label": "OmniProtocolConfig", + "file_path": "src/libs/omniprotocol/types/config.ts", + "symbol_name": "OmniProtocolConfig", + "line_range": [ + 29, + 33 + ], + "centrality": 2 + }, + { + "uuid": "sym-86050540b5cdafabf655a318", + "level": "L3", + "label": "DEFAULT_OMNIPROTOCOL_CONFIG", + "file_path": "src/libs/omniprotocol/types/config.ts", + "symbol_name": "DEFAULT_OMNIPROTOCOL_CONFIG", + "line_range": [ + 35, + 59 + ], + "centrality": 1 + }, + { + "uuid": "sym-6a368152f3da8c7e05d9c3e2", + "level": "L3", + "label": "OmniProtocolError::api", + "file_path": "src/libs/omniprotocol/types/errors.ts", + "symbol_name": "OmniProtocolError::api", + "line_range": [ + 3, + 18 + ], + "centrality": 1 + }, + { + "uuid": "sym-1a701004046591cc89d802c1", + "level": "L2", + "label": "OmniProtocolError", + "file_path": "src/libs/omniprotocol/types/errors.ts", + "symbol_name": "OmniProtocolError", + "line_range": [ + 3, + 18 + ], + "centrality": 2 + }, + { + "uuid": "sym-14fff9a7611385fafbfcd369", + "level": "L3", + "label": "UnknownOpcodeError::api", + "file_path": "src/libs/omniprotocol/types/errors.ts", + "symbol_name": "UnknownOpcodeError::api", + "line_range": [ + 20, + 25 + ], + "centrality": 1 + }, + { + "uuid": "sym-18e29bf3ececed5a786a3220", + "level": "L2", + "label": "UnknownOpcodeError", + "file_path": "src/libs/omniprotocol/types/errors.ts", + "symbol_name": "UnknownOpcodeError", + "line_range": [ + 20, + 25 + ], + "centrality": 2 + }, + { + "uuid": "sym-08304213d4db7e29a2be6ae5", + "level": "L3", + "label": "SigningError::api", + "file_path": "src/libs/omniprotocol/types/errors.ts", + "symbol_name": "SigningError::api", + "line_range": [ + 27, + 32 + ], + "centrality": 1 + }, + { + "uuid": "sym-bc80379ae4fb29cd835e4f82", + "level": "L2", + "label": "SigningError", + "file_path": "src/libs/omniprotocol/types/errors.ts", + "symbol_name": "SigningError", + "line_range": [ + 27, + 32 + ], + "centrality": 2 + }, + { + "uuid": "sym-2ac98efb9ef2f047c0723ad4", + "level": "L3", + "label": "ConnectionError::api", + "file_path": "src/libs/omniprotocol/types/errors.ts", + "symbol_name": "ConnectionError::api", + "line_range": [ + 34, + 39 + ], + "centrality": 1 + }, + { + "uuid": "sym-ca69d3acc363aa763fbebab6", + "level": "L2", + "label": "ConnectionError", + "file_path": "src/libs/omniprotocol/types/errors.ts", + "symbol_name": "ConnectionError", + "line_range": [ + 34, + 39 + ], + "centrality": 2 + }, + { + "uuid": "sym-70f59c14b502b91dab97cc4d", + "level": "L3", + "label": "ConnectionTimeoutError::api", + "file_path": "src/libs/omniprotocol/types/errors.ts", + "symbol_name": "ConnectionTimeoutError::api", + "line_range": [ + 41, + 46 + ], + "centrality": 1 + }, + { + "uuid": "sym-2e45f8d9367c70fd9ac27d12", + "level": "L2", + "label": "ConnectionTimeoutError", + "file_path": "src/libs/omniprotocol/types/errors.ts", + "symbol_name": "ConnectionTimeoutError", + "line_range": [ + 41, + 46 + ], + "centrality": 2 + }, + { + "uuid": "sym-a0ddba0f62825b1fb8ce23cc", + "level": "L3", + "label": "AuthenticationError::api", + "file_path": "src/libs/omniprotocol/types/errors.ts", + "symbol_name": "AuthenticationError::api", + "line_range": [ + 48, + 53 + ], + "centrality": 1 + }, + { + "uuid": "sym-f234ca94e0f28862daa8332d", + "level": "L2", + "label": "AuthenticationError", + "file_path": "src/libs/omniprotocol/types/errors.ts", + "symbol_name": "AuthenticationError", + "line_range": [ + 48, + 53 + ], + "centrality": 2 + }, + { + "uuid": "sym-98af13518137efa778ae79bc", + "level": "L3", + "label": "PoolCapacityError::api", + "file_path": "src/libs/omniprotocol/types/errors.ts", + "symbol_name": "PoolCapacityError::api", + "line_range": [ + 55, + 60 + ], + "centrality": 1 + }, + { + "uuid": "sym-ce29808e8a6ade436f793870", + "level": "L2", + "label": "PoolCapacityError", + "file_path": "src/libs/omniprotocol/types/errors.ts", + "symbol_name": "PoolCapacityError", + "line_range": [ + 55, + 60 + ], + "centrality": 2 + }, + { + "uuid": "sym-bc53793db5ee706870868edf", + "level": "L3", + "label": "InvalidAuthBlockFormatError::api", + "file_path": "src/libs/omniprotocol/types/errors.ts", + "symbol_name": "InvalidAuthBlockFormatError::api", + "line_range": [ + 62, + 67 + ], + "centrality": 1 + }, + { + "uuid": "sym-9e6b52349458fafbb3157661", + "level": "L2", + "label": "InvalidAuthBlockFormatError", + "file_path": "src/libs/omniprotocol/types/errors.ts", + "symbol_name": "InvalidAuthBlockFormatError", + "line_range": [ + 62, + 67 + ], + "centrality": 2 + }, + { + "uuid": "sym-eed0819744b119afe726ef91", + "level": "L3", + "label": "OmniMessageHeader::api", + "file_path": "src/libs/omniprotocol/types/message.ts", + "symbol_name": "OmniMessageHeader::api", + "line_range": [ + 4, + 9 + ], + "centrality": 1 + }, + { + "uuid": "sym-4ff325a0d88ae90ec4620e7f", + "level": "L2", + "label": "OmniMessageHeader", + "file_path": "src/libs/omniprotocol/types/message.ts", + "symbol_name": "OmniMessageHeader", + "line_range": [ + 4, + 9 + ], + "centrality": 2 + }, + { + "uuid": "sym-43a7d916067ab16295a2da7f", + "level": "L3", + "label": "OmniMessage::api", + "file_path": "src/libs/omniprotocol/types/message.ts", + "symbol_name": "OmniMessage::api", + "line_range": [ + 11, + 15 + ], + "centrality": 1 + }, + { + "uuid": "sym-4c35acfa5aa3bc6964a871bf", + "level": "L2", + "label": "OmniMessage", + "file_path": "src/libs/omniprotocol/types/message.ts", + "symbol_name": "OmniMessage", + "line_range": [ + 11, + 15 + ], + "centrality": 2 + }, + { + "uuid": "sym-a4b0c9eb7b86bd7e222a7d46", + "level": "L3", + "label": "ParsedOmniMessage::api", + "file_path": "src/libs/omniprotocol/types/message.ts", + "symbol_name": "ParsedOmniMessage::api", + "line_range": [ + 17, + 21 + ], + "centrality": 1 + }, + { + "uuid": "sym-f317b708fa9ca031a9e7d8b0", + "level": "L2", + "label": "ParsedOmniMessage", + "file_path": "src/libs/omniprotocol/types/message.ts", + "symbol_name": "ParsedOmniMessage", + "line_range": [ + 17, + 21 + ], + "centrality": 2 + }, + { + "uuid": "sym-640c35128c28e3dc693f35d9", + "level": "L3", + "label": "SendOptions::api", + "file_path": "src/libs/omniprotocol/types/message.ts", + "symbol_name": "SendOptions::api", + "line_range": [ + 23, + 31 + ], + "centrality": 1 + }, + { + "uuid": "sym-c02dce70ca17720992e2965a", + "level": "L2", + "label": "SendOptions", + "file_path": "src/libs/omniprotocol/types/message.ts", + "symbol_name": "SendOptions", + "line_range": [ + 23, + 31 + ], + "centrality": 2 + }, + { + "uuid": "sym-7b190b069571083db01583e6", + "level": "L3", + "label": "ReceiveContext::api", + "file_path": "src/libs/omniprotocol/types/message.ts", + "symbol_name": "ReceiveContext::api", + "line_range": [ + 33, + 40 + ], + "centrality": 1 + }, + { + "uuid": "sym-acecec26be342c6988a8ba1b", + "level": "L2", + "label": "ReceiveContext", + "file_path": "src/libs/omniprotocol/types/message.ts", + "symbol_name": "ReceiveContext", + "line_range": [ + 33, + 40 + ], + "centrality": 2 + }, + { + "uuid": "sym-e0482e7dfc65b897da6d1fb5", + "level": "L3", + "label": "HandlerContext::api", + "file_path": "src/libs/omniprotocol/types/message.ts", + "symbol_name": "HandlerContext::api", + "line_range": [ + 42, + 51 + ], + "centrality": 1 + }, + { + "uuid": "sym-06618dbe51dad33d81910717", + "level": "L2", + "label": "HandlerContext", + "file_path": "src/libs/omniprotocol/types/message.ts", + "symbol_name": "HandlerContext", + "line_range": [ + 42, + 51 + ], + "centrality": 2 + }, + { + "uuid": "sym-cae5a2c114b3f66d2987abbc", + "level": "L3", + "label": "OmniHandler::api", + "file_path": "src/libs/omniprotocol/types/message.ts", + "symbol_name": "OmniHandler::api", + "line_range": [ + 53, + 55 + ], + "centrality": 1 + }, + { + "uuid": "sym-f8769b7cfd3da0a0ab0300be", + "level": "L2", + "label": "OmniHandler", + "file_path": "src/libs/omniprotocol/types/message.ts", + "symbol_name": "OmniHandler", + "line_range": [ + 53, + 55 + ], + "centrality": 2 + }, + { + "uuid": "sym-661d03f4e5784c0a2d0b6544", + "level": "L3", + "label": "SyncData::api", + "file_path": "src/libs/peer/Peer.ts", + "symbol_name": "SyncData::api", + "line_range": [ + 11, + 15 + ], + "centrality": 1 + }, + { + "uuid": "sym-6a88381f69d2ff19513514f9", + "level": "L2", + "label": "SyncData", + "file_path": "src/libs/peer/Peer.ts", + "symbol_name": "SyncData", + "line_range": [ + 11, + 15 + ], + "centrality": 2 + }, + { + "uuid": "sym-3ed365637156e5886b2430e1", + "level": "L3", + "label": "CallOptions::api", + "file_path": "src/libs/peer/Peer.ts", + "symbol_name": "CallOptions::api", + "line_range": [ + 17, + 26 + ], + "centrality": 1 + }, + { + "uuid": "sym-41423ec32029e11bd983cf86", + "level": "L2", + "label": "CallOptions", + "file_path": "src/libs/peer/Peer.ts", + "symbol_name": "CallOptions", + "line_range": [ + 17, + 26 + ], + "centrality": 2 + }, + { + "uuid": "sym-32549e20799e67cabed77eb0", + "level": "L3", + "label": "Peer::api", + "file_path": "src/libs/peer/Peer.ts", + "symbol_name": "Peer::api", + "line_range": [ + 28, + 455 + ], + "centrality": 1 + }, + { + "uuid": "sym-3ec00abf9378255291f328ba", + "level": "L3", + "label": "Peer.isLocalNode", + "file_path": "src/libs/peer/Peer.ts", + "symbol_name": "Peer.isLocalNode", + "line_range": [ + 53, + 58 + ], + "centrality": 1 + }, + { + "uuid": "sym-1785290f202a54c64ef008ab", + "level": "L3", + "label": "Peer.fromIPeer", + "file_path": "src/libs/peer/Peer.ts", + "symbol_name": "Peer.fromIPeer", + "line_range": [ + 84, + 92 + ], + "centrality": 1 + }, + { + "uuid": "sym-acd7986d5b1c15e8a18170eb", + "level": "L3", + "label": "Peer.multiCall", + "file_path": "src/libs/peer/Peer.ts", + "symbol_name": "Peer.multiCall", + "line_range": [ + 95, + 117 + ], + "centrality": 1 + }, + { + "uuid": "sym-0b62749220ca3c47b62ccf00", + "level": "L3", + "label": "Peer.connect", + "file_path": "src/libs/peer/Peer.ts", + "symbol_name": "Peer.connect", + "line_range": [ + 125, + 149 + ], + "centrality": 1 + }, + { + "uuid": "sym-12fffd704728885f498c0037", + "level": "L3", + "label": "Peer.longCall", + "file_path": "src/libs/peer/Peer.ts", + "symbol_name": "Peer.longCall", + "line_range": [ + 152, + 196 + ], + "centrality": 1 + }, + { + "uuid": "sym-bd8984a504446064677a7397", + "level": "L3", + "label": "Peer.authenticatedCallMaker", + "file_path": "src/libs/peer/Peer.ts", + "symbol_name": "Peer.authenticatedCallMaker", + "line_range": [ + 203, + 222 + ], + "centrality": 1 + }, + { + "uuid": "sym-bb415a6db3f3be45da09dc82", + "level": "L3", + "label": "Peer.authenticatedCall", + "file_path": "src/libs/peer/Peer.ts", + "symbol_name": "Peer.authenticatedCall", + "line_range": [ + 225, + 231 + ], + "centrality": 1 + }, + { + "uuid": "sym-0879b9af4d0e77714361c60e", + "level": "L3", + "label": "Peer.call", + "file_path": "src/libs/peer/Peer.ts", + "symbol_name": "Peer.call", + "line_range": [ + 234, + 267 + ], + "centrality": 1 + }, + { + "uuid": "sym-94480ae117d6af9376d303d6", + "level": "L3", + "label": "Peer.httpCall", + "file_path": "src/libs/peer/Peer.ts", + "symbol_name": "Peer.httpCall", + "line_range": [ + 270, + 435 + ], + "centrality": 1 + }, + { + "uuid": "sym-86d360eaa4e47e6515361b3e", + "level": "L3", + "label": "Peer.fetch", + "file_path": "src/libs/peer/Peer.ts", + "symbol_name": "Peer.fetch", + "line_range": [ + 438, + 450 + ], + "centrality": 1 + }, + { + "uuid": "sym-9548b5379a6c8ec675785e23", + "level": "L3", + "label": "Peer.getInfo", + "file_path": "src/libs/peer/Peer.ts", + "symbol_name": "Peer.getInfo", + "line_range": [ + 452, + 454 + ], + "centrality": 1 + }, + { + "uuid": "sym-0497c0336e7724275dd24b2a", + "level": "L2", + "label": "Peer", + "file_path": "src/libs/peer/Peer.ts", + "symbol_name": "Peer", + "line_range": [ + 28, + 455 + ], + "centrality": 13 + }, + { + "uuid": "sym-b4f76041f6f542375c7208ae", + "level": "L3", + "label": "PeerManager::api", + "file_path": "src/libs/peer/PeerManager.ts", + "symbol_name": "PeerManager::api", + "line_range": [ + 20, + 521 + ], + "centrality": 1 + }, + { + "uuid": "sym-f3979d567f5fd32def4d8855", + "level": "L3", + "label": "PeerManager.ourPeer", + "file_path": "src/libs/peer/PeerManager.ts", + "symbol_name": "PeerManager.ourPeer", + "line_range": [ + 30, + 32 + ], + "centrality": 1 + }, + { + "uuid": "sym-ade643bdd7cda96b430e99d4", + "level": "L3", + "label": "PeerManager.ourSyncData", + "file_path": "src/libs/peer/PeerManager.ts", + "symbol_name": "PeerManager.ourSyncData", + "line_range": [ + 34, + 36 + ], + "centrality": 1 + }, + { + "uuid": "sym-1a7ef26a3c84b1bb6f1319af", + "level": "L3", + "label": "PeerManager.ourSyncDataString", + "file_path": "src/libs/peer/PeerManager.ts", + "symbol_name": "PeerManager.ourSyncDataString", + "line_range": [ + 38, + 41 + ], + "centrality": 1 + }, + { + "uuid": "sym-3c3d12eee32c244255ef9b32", + "level": "L3", + "label": "PeerManager.getInstance", + "file_path": "src/libs/peer/PeerManager.ts", + "symbol_name": "PeerManager.getInstance", + "line_range": [ + 43, + 48 + ], + "centrality": 1 + }, + { + "uuid": "sym-272f439f60fc2a0765247475", + "level": "L3", + "label": "PeerManager.loadPeerList", + "file_path": "src/libs/peer/PeerManager.ts", + "symbol_name": "PeerManager.loadPeerList", + "line_range": [ + 51, + 108 + ], + "centrality": 1 + }, + { + "uuid": "sym-a9848a76b049f852ff3d7ce3", + "level": "L3", + "label": "PeerManager.fetchPeerInfo", + "file_path": "src/libs/peer/PeerManager.ts", + "symbol_name": "PeerManager.fetchPeerInfo", + "line_range": [ + 111, + 113 + ], + "centrality": 1 + }, + { + "uuid": "sym-1f1368eeff0182700d9dcd10", + "level": "L3", + "label": "PeerManager.createNewPeer", + "file_path": "src/libs/peer/PeerManager.ts", + "symbol_name": "PeerManager.createNewPeer", + "line_range": [ + 115, + 120 + ], + "centrality": 1 + }, + { + "uuid": "sym-578657e21b5a3a4d127afbcb", + "level": "L3", + "label": "PeerManager.getPeers", + "file_path": "src/libs/peer/PeerManager.ts", + "symbol_name": "PeerManager.getPeers", + "line_range": [ + 122, + 124 + ], + "centrality": 1 + }, + { + "uuid": "sym-1e186c591f76fa97520879c1", + "level": "L3", + "label": "PeerManager.getPeer", + "file_path": "src/libs/peer/PeerManager.ts", + "symbol_name": "PeerManager.getPeer", + "line_range": [ + 126, + 132 + ], + "centrality": 1 + }, + { + "uuid": "sym-7ff87e8fc66ad36a882a3021", + "level": "L3", + "label": "PeerManager.getAll", + "file_path": "src/libs/peer/PeerManager.ts", + "symbol_name": "PeerManager.getAll", + "line_range": [ + 134, + 136 + ], + "centrality": 1 + }, + { + "uuid": "sym-1639a75acd50f9d99a2e547c", + "level": "L3", + "label": "PeerManager.getOfflinePeers", + "file_path": "src/libs/peer/PeerManager.ts", + "symbol_name": "PeerManager.getOfflinePeers", + "line_range": [ + 138, + 140 + ], + "centrality": 1 + }, + { + "uuid": "sym-b76ed554a4cca4a4bcc88e54", + "level": "L3", + "label": "PeerManager.logPeerList", + "file_path": "src/libs/peer/PeerManager.ts", + "symbol_name": "PeerManager.logPeerList", + "line_range": [ + 185, + 196 + ], + "centrality": 1 + }, + { + "uuid": "sym-1a10700034b2fee76fa42e9e", + "level": "L3", + "label": "PeerManager.getOnlinePeers", + "file_path": "src/libs/peer/PeerManager.ts", + "symbol_name": "PeerManager.getOnlinePeers", + "line_range": [ + 198, + 218 + ], + "centrality": 1 + }, + { + "uuid": "sym-5885524573626c72a4d28772", + "level": "L3", + "label": "PeerManager.addPeer", + "file_path": "src/libs/peer/PeerManager.ts", + "symbol_name": "PeerManager.addPeer", + "line_range": [ + 220, + 304 + ], + "centrality": 1 + }, + { + "uuid": "sym-3bdf2ba8edf49dedd17d9ee9", + "level": "L3", + "label": "PeerManager.updateOurPeerSyncData", + "file_path": "src/libs/peer/PeerManager.ts", + "symbol_name": "PeerManager.updateOurPeerSyncData", + "line_range": [ + 309, + 323 + ], + "centrality": 1 + }, + { + "uuid": "sym-93ff6928b9f6bcb407e8acec", + "level": "L3", + "label": "PeerManager.updatePeerLastSeen", + "file_path": "src/libs/peer/PeerManager.ts", + "symbol_name": "PeerManager.updatePeerLastSeen", + "line_range": [ + 325, + 351 + ], + "centrality": 1 + }, + { + "uuid": "sym-809f75f515541b77a78044ad", + "level": "L3", + "label": "PeerManager.addOfflinePeer", + "file_path": "src/libs/peer/PeerManager.ts", + "symbol_name": "PeerManager.addOfflinePeer", + "line_range": [ + 353, + 365 + ], + "centrality": 1 + }, + { + "uuid": "sym-517ad4280b63bf24958ad374", + "level": "L3", + "label": "PeerManager.removeOnlinePeer", + "file_path": "src/libs/peer/PeerManager.ts", + "symbol_name": "PeerManager.removeOnlinePeer", + "line_range": [ + 367, + 369 + ], + "centrality": 1 + }, + { + "uuid": "sym-817fe42ff9a8d09ce64b56d0", + "level": "L3", + "label": "PeerManager.removeOfflinePeer", + "file_path": "src/libs/peer/PeerManager.ts", + "symbol_name": "PeerManager.removeOfflinePeer", + "line_range": [ + 371, + 373 + ], + "centrality": 1 + }, + { + "uuid": "sym-9637ce234a9fed75eecebc9f", + "level": "L3", + "label": "PeerManager.setPeers", + "file_path": "src/libs/peer/PeerManager.ts", + "symbol_name": "PeerManager.setPeers", + "line_range": [ + 375, + 382 + ], + "centrality": 1 + }, + { + "uuid": "sym-84bcdc73a52cba5c012302b0", + "level": "L3", + "label": "PeerManager.sayHelloToPeer", + "file_path": "src/libs/peer/PeerManager.ts", + "symbol_name": "PeerManager.sayHelloToPeer", + "line_range": [ + 385, + 448 + ], + "centrality": 1 + }, + { + "uuid": "sym-bdddd2117e2db154d9a4c598", + "level": "L3", + "label": "PeerManager.helloPeerCallback", + "file_path": "src/libs/peer/PeerManager.ts", + "symbol_name": "PeerManager.helloPeerCallback", + "line_range": [ + 451, + 506 + ], + "centrality": 1 + }, + { + "uuid": "sym-0fa2de08eb318625daca5c60", + "level": "L3", + "label": "PeerManager.markPeerOffline", + "file_path": "src/libs/peer/PeerManager.ts", + "symbol_name": "PeerManager.markPeerOffline", + "line_range": [ + 508, + 520 + ], + "centrality": 1 + }, + { + "uuid": "sym-eeadc99e419ca0c544740317", + "level": "L2", + "label": "PeerManager", + "file_path": "src/libs/peer/PeerManager.ts", + "symbol_name": "PeerManager", + "line_range": [ + 20, + 521 + ], + "centrality": 25 + }, + { + "uuid": "sym-6e00d04229c1802756b1975f", + "level": "L3", + "label": "Peer", + "file_path": "src/libs/peer/index.ts", + "symbol_name": "Peer", + "line_range": [ + 12, + 12 + ], + "centrality": 1 + }, + { + "uuid": "sym-a6ab1495ce4987876fc9f25f", + "level": "L3", + "label": "PeerManager", + "file_path": "src/libs/peer/index.ts", + "symbol_name": "PeerManager", + "line_range": [ + 13, + 13 + ], + "centrality": 1 + }, + { + "uuid": "sym-183e357d6e4b9fc61cb96c84", + "level": "L3", + "label": "checkOfflinePeers", + "file_path": "src/libs/peer/routines/checkOfflinePeers.ts", + "symbol_name": "checkOfflinePeers", + "line_range": [ + 6, + 35 + ], + "centrality": 1 + }, + { + "uuid": "sym-1b1b238c239648c3a26135b1", + "level": "L3", + "label": "getPeerConnectionString", + "file_path": "src/libs/peer/routines/getPeerConnectionString.ts", + "symbol_name": "getPeerConnectionString", + "line_range": [ + 21, + 42 + ], + "centrality": 1 + }, + { + "uuid": "sym-0391b851d3e5a4718b2228d0", + "level": "L3", + "label": "verifyPeer", + "file_path": "src/libs/peer/routines/getPeerIdentity.ts", + "symbol_name": "verifyPeer", + "line_range": [ + 118, + 124 + ], + "centrality": 1 + }, + { + "uuid": "sym-326a78cdb13b0efab268273b", + "level": "L3", + "label": "getPeerIdentity", + "file_path": "src/libs/peer/routines/getPeerIdentity.ts", + "symbol_name": "getPeerIdentity", + "line_range": [ + 178, + 263 + ], + "centrality": 1 + }, + { + "uuid": "sym-a206dfbda18fedfe73a5ad0e", + "level": "L3", + "label": "isPeerInList", + "file_path": "src/libs/peer/routines/isPeerInList.ts", + "symbol_name": "isPeerInList", + "line_range": [ + 16, + 25 + ], + "centrality": 1 + }, + { + "uuid": "sym-10146aed3ff6460f03348bd6", + "level": "L3", + "label": "peerBootstrap", + "file_path": "src/libs/peer/routines/peerBootstrap.ts", + "symbol_name": "peerBootstrap", + "line_range": [ + 204, + 225 + ], + "centrality": 1 + }, + { + "uuid": "sym-ee248ef99b44bf2044c37a34", + "level": "L3", + "label": "peerGossip", + "file_path": "src/libs/peer/routines/peerGossip.ts", + "symbol_name": "peerGossip", + "line_range": [ + 28, + 40 + ], + "centrality": 1 + }, + { + "uuid": "sym-c2d8b5b28fe3cc41329f99cb", + "level": "L3", + "label": "initTLSNotaryVerifier", + "file_path": "src/libs/tlsnotary/index.ts", + "symbol_name": "initTLSNotaryVerifier", + "line_range": [ + 5, + 5 + ], + "centrality": 1 + }, + { + "uuid": "sym-dc58d63e979e42e358b16ea6", + "level": "L3", + "label": "isVerifierInitialized", + "file_path": "src/libs/tlsnotary/index.ts", + "symbol_name": "isVerifierInitialized", + "line_range": [ + 6, + 6 + ], + "centrality": 1 + }, + { + "uuid": "sym-75f6a2f7f2ad31c317cf79f8", + "level": "L3", + "label": "verifyTLSNotaryPresentation", + "file_path": "src/libs/tlsnotary/index.ts", + "symbol_name": "verifyTLSNotaryPresentation", + "line_range": [ + 7, + 7 + ], + "centrality": 1 + }, + { + "uuid": "sym-1bf49566faed1da0dcba3009", + "level": "L3", + "label": "parseHttpResponse", + "file_path": "src/libs/tlsnotary/index.ts", + "symbol_name": "parseHttpResponse", + "line_range": [ + 8, + 8 + ], + "centrality": 1 + }, + { + "uuid": "sym-84993bf3e876f664101fcc17", + "level": "L3", + "label": "verifyTLSNProof", + "file_path": "src/libs/tlsnotary/index.ts", + "symbol_name": "verifyTLSNProof", + "line_range": [ + 9, + 9 + ], + "centrality": 1 + }, + { + "uuid": "sym-d562c23ff661fbe0ef42089b", + "level": "L3", + "label": "extractUser", + "file_path": "src/libs/tlsnotary/index.ts", + "symbol_name": "extractUser", + "line_range": [ + 10, + 10 + ], + "centrality": 1 + }, + { + "uuid": "sym-d23312505c23fae4dc06be00", + "level": "L3", + "label": "TLSNIdentityContext", + "file_path": "src/libs/tlsnotary/index.ts", + "symbol_name": "TLSNIdentityContext", + "line_range": [ + 11, + 11 + ], + "centrality": 1 + }, + { + "uuid": "sym-9901aa04325b7f6c0903f9f4", + "level": "L3", + "label": "TLSNIdentityPayload", + "file_path": "src/libs/tlsnotary/index.ts", + "symbol_name": "TLSNIdentityPayload", + "line_range": [ + 12, + 12 + ], + "centrality": 1 + }, + { + "uuid": "sym-78fc7f8b4ac08f8070f840bb", + "level": "L3", + "label": "TLSNProofRanges", + "file_path": "src/libs/tlsnotary/index.ts", + "symbol_name": "TLSNProofRanges", + "line_range": [ + 13, + 13 + ], + "centrality": 1 + }, + { + "uuid": "sym-17f82be72583b24d6d13609c", + "level": "L3", + "label": "TranscriptRange", + "file_path": "src/libs/tlsnotary/index.ts", + "symbol_name": "TranscriptRange", + "line_range": [ + 14, + 14 + ], + "centrality": 1 + }, + { + "uuid": "sym-eca13e9d4bd164b366b683d1", + "level": "L3", + "label": "TLSNotaryPresentation", + "file_path": "src/libs/tlsnotary/index.ts", + "symbol_name": "TLSNotaryPresentation", + "line_range": [ + 15, + 15 + ], + "centrality": 1 + }, + { + "uuid": "sym-ef0f5bfd816bc229c72e0c35", + "level": "L3", + "label": "TLSNotaryVerificationResult", + "file_path": "src/libs/tlsnotary/index.ts", + "symbol_name": "TLSNotaryVerificationResult", + "line_range": [ + 16, + 16 + ], + "centrality": 1 + }, + { + "uuid": "sym-1ffe30e3f9e9ec69de0b043f", + "level": "L3", + "label": "ParsedHttpResponse", + "file_path": "src/libs/tlsnotary/index.ts", + "symbol_name": "ParsedHttpResponse", + "line_range": [ + 17, + 17 + ], + "centrality": 1 + }, + { + "uuid": "sym-8a2eac9723e69b529c4e0514", + "level": "L3", + "label": "ExtractedUser", + "file_path": "src/libs/tlsnotary/index.ts", + "symbol_name": "ExtractedUser", + "line_range": [ + 18, + 18 + ], + "centrality": 1 + }, + { + "uuid": "sym-ad5a2bb922e635e167b0a1f7", + "level": "L3", + "label": "TLSNotaryPresentation::api", + "file_path": "src/libs/tlsnotary/verifier.ts", + "symbol_name": "TLSNotaryPresentation::api", + "line_range": [ + 19, + 29 + ], + "centrality": 1 + }, + { + "uuid": "sym-c6bb3135c8146d1451aae8cd", + "level": "L2", + "label": "TLSNotaryPresentation", + "file_path": "src/libs/tlsnotary/verifier.ts", + "symbol_name": "TLSNotaryPresentation", + "line_range": [ + 19, + 29 + ], + "centrality": 2 + }, + { + "uuid": "sym-6b9cfbe2d7820383823fdee2", + "level": "L3", + "label": "TLSNotaryVerificationResult::api", + "file_path": "src/libs/tlsnotary/verifier.ts", + "symbol_name": "TLSNotaryVerificationResult::api", + "line_range": [ + 34, + 42 + ], + "centrality": 1 + }, + { + "uuid": "sym-0ac6a67e5c7935ee3500dadd", + "level": "L2", + "label": "TLSNotaryVerificationResult", + "file_path": "src/libs/tlsnotary/verifier.ts", + "symbol_name": "TLSNotaryVerificationResult", + "line_range": [ + 34, + 42 + ], + "centrality": 2 + }, + { + "uuid": "sym-f85858789af68b90715a0e59", + "level": "L3", + "label": "ParsedHttpResponse::api", + "file_path": "src/libs/tlsnotary/verifier.ts", + "symbol_name": "ParsedHttpResponse::api", + "line_range": [ + 47, + 51 + ], + "centrality": 1 + }, + { + "uuid": "sym-096ad0f73e0e17beacb24c4a", + "level": "L2", + "label": "ParsedHttpResponse", + "file_path": "src/libs/tlsnotary/verifier.ts", + "symbol_name": "ParsedHttpResponse", + "line_range": [ + 47, + 51 + ], + "centrality": 2 + }, + { + "uuid": "sym-432492a10ef3e4316486ffdc", + "level": "L3", + "label": "TLSNIdentityContext::api", + "file_path": "src/libs/tlsnotary/verifier.ts", + "symbol_name": "TLSNIdentityContext::api", + "line_range": [ + 56, + 56 + ], + "centrality": 1 + }, + { + "uuid": "sym-2fa24d97f88754f23868ed8a", + "level": "L2", + "label": "TLSNIdentityContext", + "file_path": "src/libs/tlsnotary/verifier.ts", + "symbol_name": "TLSNIdentityContext", + "line_range": [ + 56, + 56 + ], + "centrality": 2 + }, + { + "uuid": "sym-dbd3b3d0c2d3155a70a21f71", + "level": "L3", + "label": "ExtractedUser::api", + "file_path": "src/libs/tlsnotary/verifier.ts", + "symbol_name": "ExtractedUser::api", + "line_range": [ + 61, + 64 + ], + "centrality": 1 + }, + { + "uuid": "sym-dda27ab76638052e234613e4", + "level": "L2", + "label": "ExtractedUser", + "file_path": "src/libs/tlsnotary/verifier.ts", + "symbol_name": "ExtractedUser", + "line_range": [ + 61, + 64 + ], + "centrality": 2 + }, + { + "uuid": "sym-51133611d7e6c5e4b505bc99", + "level": "L3", + "label": "TLSNIdentityPayload::api", + "file_path": "src/libs/tlsnotary/verifier.ts", + "symbol_name": "TLSNIdentityPayload::api", + "line_range": [ + 69, + 78 + ], + "centrality": 1 + }, + { + "uuid": "sym-7070f715178072511180d1ae", + "level": "L2", + "label": "TLSNIdentityPayload", + "file_path": "src/libs/tlsnotary/verifier.ts", + "symbol_name": "TLSNIdentityPayload", + "line_range": [ + 69, + 78 + ], + "centrality": 2 + }, + { + "uuid": "sym-41e55f80f40f455b49fcf88c", + "level": "L3", + "label": "TranscriptRange::api", + "file_path": "src/libs/tlsnotary/verifier.ts", + "symbol_name": "TranscriptRange::api", + "line_range": [ + 80, + 80 + ], + "centrality": 1 + }, + { + "uuid": "sym-28ad78be84afd8498d0ee4b4", + "level": "L2", + "label": "TranscriptRange", + "file_path": "src/libs/tlsnotary/verifier.ts", + "symbol_name": "TranscriptRange", + "line_range": [ + 80, + 80 + ], + "centrality": 2 + }, + { + "uuid": "sym-fcef4fc2c1ba7fcc07b60612", + "level": "L3", + "label": "TLSNProofRanges::api", + "file_path": "src/libs/tlsnotary/verifier.ts", + "symbol_name": "TLSNProofRanges::api", + "line_range": [ + 82, + 85 + ], + "centrality": 1 + }, + { + "uuid": "sym-470f39829bffe7893f2ea0e2", + "level": "L2", + "label": "TLSNProofRanges", + "file_path": "src/libs/tlsnotary/verifier.ts", + "symbol_name": "TLSNProofRanges", + "line_range": [ + 82, + 85 + ], + "centrality": 2 + }, + { + "uuid": "sym-ed9fcd140ea0db08b16f717b", + "level": "L3", + "label": "initTLSNotaryVerifier", + "file_path": "src/libs/tlsnotary/verifier.ts", + "symbol_name": "initTLSNotaryVerifier", + "line_range": [ + 498, + 502 + ], + "centrality": 1 + }, + { + "uuid": "sym-dc57077c3f71cf5583df43ba", + "level": "L3", + "label": "isVerifierInitialized", + "file_path": "src/libs/tlsnotary/verifier.ts", + "symbol_name": "isVerifierInitialized", + "line_range": [ + 509, + 511 + ], + "centrality": 1 + }, + { + "uuid": "sym-d75c9f3079017aca76e583c6", + "level": "L3", + "label": "verifyTLSNotaryPresentation", + "file_path": "src/libs/tlsnotary/verifier.ts", + "symbol_name": "verifyTLSNotaryPresentation", + "line_range": [ + 522, + 584 + ], + "centrality": 2 + }, + { + "uuid": "sym-ce938bb3c92c54f842d83329", + "level": "L3", + "label": "parseHttpResponse", + "file_path": "src/libs/tlsnotary/verifier.ts", + "symbol_name": "parseHttpResponse", + "line_range": [ + 594, + 636 + ], + "centrality": 1 + }, + { + "uuid": "sym-e2d1e70a3d514491ae4cb58d", + "level": "L3", + "label": "extractUser", + "file_path": "src/libs/tlsnotary/verifier.ts", + "symbol_name": "extractUser", + "line_range": [ + 648, + 712 + ], + "centrality": 2 + }, + { + "uuid": "sym-a9987febfc88a0ffd7f1c055", + "level": "L3", + "label": "verifyTLSNProof", + "file_path": "src/libs/tlsnotary/verifier.ts", + "symbol_name": "verifyTLSNProof", + "line_range": [ + 724, + 818 + ], + "centrality": 3 + }, + { + "uuid": "sym-27e8f46173445442055bad50", + "level": "L3", + "label": "getTimestampCorrection", + "file_path": "src/libs/utils/calibrateTime.ts", + "symbol_name": "getTimestampCorrection", + "line_range": [ + 12, + 16 + ], + "centrality": 1 + }, + { + "uuid": "sym-51fdc77527108ef2abcc0f25", + "level": "L3", + "label": "getNetworkTimestamp", + "file_path": "src/libs/utils/calibrateTime.ts", + "symbol_name": "getNetworkTimestamp", + "line_range": [ + 18, + 24 + ], + "centrality": 1 + }, + { + "uuid": "sym-e03296c834ef296a8caa23db", + "level": "L3", + "label": "NodeStorage::api", + "file_path": "src/libs/utils/demostdlib/NodeStorage.ts", + "symbol_name": "NodeStorage::api", + "line_range": [ + 1, + 25 + ], + "centrality": 1 + }, + { + "uuid": "sym-9993f577e1770fb7b5e38ecf", + "level": "L3", + "label": "NodeStorage.getInstance", + "file_path": "src/libs/utils/demostdlib/NodeStorage.ts", + "symbol_name": "NodeStorage.getInstance", + "line_range": [ + 7, + 12 + ], + "centrality": 1 + }, + { + "uuid": "sym-91687f17412aca4f5193a902", + "level": "L3", + "label": "NodeStorage.getItem", + "file_path": "src/libs/utils/demostdlib/NodeStorage.ts", + "symbol_name": "NodeStorage.getItem", + "line_range": [ + 14, + 20 + ], + "centrality": 1 + }, + { + "uuid": "sym-7d2f7a0b1cf0caf34582b977", + "level": "L3", + "label": "NodeStorage.setItem", + "file_path": "src/libs/utils/demostdlib/NodeStorage.ts", + "symbol_name": "NodeStorage.setItem", + "line_range": [ + 22, + 24 + ], + "centrality": 1 + }, + { + "uuid": "sym-4f4a52a70377dfe5c3548f1a", + "level": "L2", + "label": "NodeStorage", + "file_path": "src/libs/utils/demostdlib/NodeStorage.ts", + "symbol_name": "NodeStorage", + "line_range": [ + 1, + 25 + ], + "centrality": 5 + }, + { + "uuid": "sym-900a6338c5478895e2c4742e", + "level": "L3", + "label": "DerivableNative::api", + "file_path": "src/libs/utils/demostdlib/deriveMempoolOperation.ts", + "symbol_name": "DerivableNative::api", + "line_range": [ + 10, + 21 + ], + "centrality": 1 + }, + { + "uuid": "sym-77e5e7993b25576d2999ea8c", + "level": "L2", + "label": "DerivableNative", + "file_path": "src/libs/utils/demostdlib/deriveMempoolOperation.ts", + "symbol_name": "DerivableNative", + "line_range": [ + 10, + 21 + ], + "centrality": 2 + }, + { + "uuid": "sym-3d99231a3655eb0dd8af0e2b", + "level": "L3", + "label": "deriveMempoolOperation", + "file_path": "src/libs/utils/demostdlib/deriveMempoolOperation.ts", + "symbol_name": "deriveMempoolOperation", + "line_range": [ + 25, + 60 + ], + "centrality": 1 + }, + { + "uuid": "sym-a5b4619fea543f605234aa1b", + "level": "L3", + "label": "deriveTransaction", + "file_path": "src/libs/utils/demostdlib/deriveMempoolOperation.ts", + "symbol_name": "deriveTransaction", + "line_range": [ + 79, + 88 + ], + "centrality": 1 + }, + { + "uuid": "sym-b726a947efed2cf0a17e7409", + "level": "L3", + "label": "deriveOperations", + "file_path": "src/libs/utils/demostdlib/deriveMempoolOperation.ts", + "symbol_name": "deriveOperations", + "line_range": [ + 90, + 107 + ], + "centrality": 1 + }, + { + "uuid": "sym-4069525e6763cbd7833a89b5", + "level": "L3", + "label": "createOperation", + "file_path": "src/libs/utils/demostdlib/deriveMempoolOperation.ts", + "symbol_name": "createOperation", + "line_range": [ + 113, + 143 + ], + "centrality": 1 + }, + { + "uuid": "sym-de1d440563386a4ef7ff5f5b", + "level": "L3", + "label": "createTransaction", + "file_path": "src/libs/utils/demostdlib/deriveMempoolOperation.ts", + "symbol_name": "createTransaction", + "line_range": [ + 149, + 200 + ], + "centrality": 1 + }, + { + "uuid": "sym-3643b3470e0f5a5599a17396", + "level": "L3", + "label": "EncoDecode::api", + "file_path": "src/libs/utils/demostdlib/encodecode.ts", + "symbol_name": "EncoDecode::api", + "line_range": [ + 3, + 19 + ], + "centrality": 1 + }, + { + "uuid": "sym-490d48113345917bc5a63921", + "level": "L3", + "label": "EncoDecode.serialize", + "file_path": "src/libs/utils/demostdlib/encodecode.ts", + "symbol_name": "EncoDecode.serialize", + "line_range": [ + 6, + 11 + ], + "centrality": 1 + }, + { + "uuid": "sym-d3adbd4ce3535aa69f189242", + "level": "L3", + "label": "EncoDecode.deserialize", + "file_path": "src/libs/utils/demostdlib/encodecode.ts", + "symbol_name": "EncoDecode.deserialize", + "line_range": [ + 13, + 18 + ], + "centrality": 1 + }, + { + "uuid": "sym-9fa63f30b350e32bba75f730", + "level": "L2", + "label": "EncoDecode", + "file_path": "src/libs/utils/demostdlib/encodecode.ts", + "symbol_name": "EncoDecode", + "line_range": [ + 3, + 19 + ], + "centrality": 4 + }, + { + "uuid": "sym-682e20b92410fcede30f0021", + "level": "L3", + "label": "GroundControl::api", + "file_path": "src/libs/utils/demostdlib/groundControl.ts", + "symbol_name": "GroundControl::api", + "line_range": [ + 18, + 207 + ], + "centrality": 1 + }, + { + "uuid": "sym-07e2d8617467f36ebce4c401", + "level": "L3", + "label": "GroundControl.init", + "file_path": "src/libs/utils/demostdlib/groundControl.ts", + "symbol_name": "GroundControl.init", + "line_range": [ + 30, + 112 + ], + "centrality": 1 + }, + { + "uuid": "sym-7b19cb835cde652ea2d4b818", + "level": "L3", + "label": "GroundControl.handlerMethod", + "file_path": "src/libs/utils/demostdlib/groundControl.ts", + "symbol_name": "GroundControl.handlerMethod", + "line_range": [ + 115, + 132 + ], + "centrality": 1 + }, + { + "uuid": "sym-e8f822cf4eeae4222e624550", + "level": "L3", + "label": "GroundControl.parse", + "file_path": "src/libs/utils/demostdlib/groundControl.ts", + "symbol_name": "GroundControl.parse", + "line_range": [ + 135, + 154 + ], + "centrality": 1 + }, + { + "uuid": "sym-36d1d3f62671a7f649aad1f4", + "level": "L3", + "label": "GroundControl.dispatch", + "file_path": "src/libs/utils/demostdlib/groundControl.ts", + "symbol_name": "GroundControl.dispatch", + "line_range": [ + 157, + 194 + ], + "centrality": 1 + }, + { + "uuid": "sym-704450fa33a12221e2776326", + "level": "L2", + "label": "GroundControl", + "file_path": "src/libs/utils/demostdlib/groundControl.ts", + "symbol_name": "GroundControl", + "line_range": [ + 18, + 207 + ], + "centrality": 6 + }, + { + "uuid": "sym-51ed75590fc88559bcdd99a5", + "level": "L3", + "label": "createConnectedSocket", + "file_path": "src/libs/utils/demostdlib/index.ts", + "symbol_name": "createConnectedSocket", + "line_range": [ + 6, + 6 + ], + "centrality": 1 + }, + { + "uuid": "sym-7f9193fb325d05e4b86c1af4", + "level": "L3", + "label": "payloadSize", + "file_path": "src/libs/utils/demostdlib/index.ts", + "symbol_name": "payloadSize", + "line_range": [ + 7, + 7 + ], + "centrality": 1 + }, + { + "uuid": "sym-85a1a933e82bfe8a1a6f86cf", + "level": "L3", + "label": "NodeStorage", + "file_path": "src/libs/utils/demostdlib/index.ts", + "symbol_name": "NodeStorage", + "line_range": [ + 8, + 8 + ], + "centrality": 1 + }, + { + "uuid": "sym-009fe89cf915be1693de1c3c", + "level": "L3", + "label": "payloadSize", + "file_path": "src/libs/utils/demostdlib/payloadSize.ts", + "symbol_name": "payloadSize", + "line_range": [ + 6, + 24 + ], + "centrality": 1 + }, + { + "uuid": "sym-eb488aa202c169568fd9a0f5", + "level": "L3", + "label": "createConnectedSocket", + "file_path": "src/libs/utils/demostdlib/peerOperations.ts", + "symbol_name": "createConnectedSocket", + "line_range": [ + 4, + 23 + ], + "centrality": 1 + }, + { + "uuid": "sym-e1fcd597c2ed4ecc8eebea8b", + "level": "L3", + "label": "parseWeb2ProxyRequest", + "file_path": "src/libs/utils/web2RequestUtils.ts", + "symbol_name": "parseWeb2ProxyRequest", + "line_range": [ + 10, + 34 + ], + "centrality": 1 + }, + { + "uuid": "sym-f8f1b8ece68bb301d37853b4", + "level": "L3", + "label": "dataSource", + "file_path": "src/model/datasource.ts", + "symbol_name": "dataSource", + "line_range": [ + 37, + 71 + ], + "centrality": 1 + }, + { + "uuid": "sym-7e6731647346994ea09b3100", + "level": "L3", + "label": "default", + "file_path": "src/model/datasource.ts", + "symbol_name": "default", + "line_range": [ + 95, + 95 + ], + "centrality": 1 + }, + { + "uuid": "sym-fa1a915f1e8443b44b343ab0", + "level": "L3", + "label": "Blocks::api", + "file_path": "src/model/entities/Blocks.ts", + "symbol_name": "Blocks::api", + "line_range": [ + 4, + 31 + ], + "centrality": 1 + }, + { + "uuid": "sym-273a3bb08cf959b425025d19", + "level": "L2", + "label": "Blocks", + "file_path": "src/model/entities/Blocks.ts", + "symbol_name": "Blocks", + "line_range": [ + 4, + 31 + ], + "centrality": 2 + }, + { + "uuid": "sym-e6c769e5bb3cfb82f5aa433b", + "level": "L3", + "label": "Consensus::api", + "file_path": "src/model/entities/Consensus.ts", + "symbol_name": "Consensus::api", + "line_range": [ + 3, + 22 + ], + "centrality": 1 + }, + { + "uuid": "sym-31925771acdffdf321dbfcd2", + "level": "L2", + "label": "Consensus", + "file_path": "src/model/entities/Consensus.ts", + "symbol_name": "Consensus", + "line_range": [ + 3, + 22 + ], + "centrality": 2 + }, + { + "uuid": "sym-9f5368fd7c3327b9a0371d11", + "level": "L3", + "label": "GCRTracker::api", + "file_path": "src/model/entities/GCR/GCRTracker.ts", + "symbol_name": "GCRTracker::api", + "line_range": [ + 12, + 22 + ], + "centrality": 1 + }, + { + "uuid": "sym-11fa9facc95211cb9965cbe9", + "level": "L2", + "label": "GCRTracker", + "file_path": "src/model/entities/GCR/GCRTracker.ts", + "symbol_name": "GCRTracker", + "line_range": [ + 12, + 22 + ], + "centrality": 2 + }, + { + "uuid": "sym-3315efc63ad9d0fb4f02984d", + "level": "L3", + "label": "GCRStatus::api", + "file_path": "src/model/entities/GCR/GlobalChangeRegistry.ts", + "symbol_name": "GCRStatus::api", + "line_range": [ + 9, + 17 + ], + "centrality": 1 + }, + { + "uuid": "sym-3e265dc44fcae446b81692d2", + "level": "L2", + "label": "GCRStatus", + "file_path": "src/model/entities/GCR/GlobalChangeRegistry.ts", + "symbol_name": "GCRStatus", + "line_range": [ + 9, + 17 + ], + "centrality": 2 + }, + { + "uuid": "sym-4cf291b0bfd4bf7301073577", + "level": "L3", + "label": "GCRExtended::api", + "file_path": "src/model/entities/GCR/GlobalChangeRegistry.ts", + "symbol_name": "GCRExtended::api", + "line_range": [ + 19, + 25 + ], + "centrality": 1 + }, + { + "uuid": "sym-90952e192029ad3314e72b78", + "level": "L2", + "label": "GCRExtended", + "file_path": "src/model/entities/GCR/GlobalChangeRegistry.ts", + "symbol_name": "GCRExtended", + "line_range": [ + 19, + 25 + ], + "centrality": 2 + }, + { + "uuid": "sym-581811b0ab0948b5c77ee25b", + "level": "L3", + "label": "GlobalChangeRegistry::api", + "file_path": "src/model/entities/GCR/GlobalChangeRegistry.ts", + "symbol_name": "GlobalChangeRegistry::api", + "line_range": [ + 29, + 42 + ], + "centrality": 1 + }, + { + "uuid": "sym-bc26298182cffd2f040a7fae", + "level": "L2", + "label": "GlobalChangeRegistry", + "file_path": "src/model/entities/GCR/GlobalChangeRegistry.ts", + "symbol_name": "GlobalChangeRegistry", + "line_range": [ + 29, + 42 + ], + "centrality": 2 + }, + { + "uuid": "sym-218c97e2732ce0f4288eea2b", + "level": "L3", + "label": "GCRHashes::api", + "file_path": "src/model/entities/GCRv2/GCRHashes.ts", + "symbol_name": "GCRHashes::api", + "line_range": [ + 6, + 16 + ], + "centrality": 1 + }, + { + "uuid": "sym-d7707cb16f292d46163b119c", + "level": "L2", + "label": "GCRHashes", + "file_path": "src/model/entities/GCRv2/GCRHashes.ts", + "symbol_name": "GCRHashes", + "line_range": [ + 6, + 16 + ], + "centrality": 2 + }, + { + "uuid": "sym-9e2540c9a28f6b2baa412870", + "level": "L3", + "label": "GCRSubnetsTxs::api", + "file_path": "src/model/entities/GCRv2/GCRSubnetsTxs.ts", + "symbol_name": "GCRSubnetsTxs::api", + "line_range": [ + 9, + 28 + ], + "centrality": 1 + }, + { + "uuid": "sym-f931d21daeae8267bd2a3672", + "level": "L2", + "label": "GCRSubnetsTxs", + "file_path": "src/model/entities/GCRv2/GCRSubnetsTxs.ts", + "symbol_name": "GCRSubnetsTxs", + "line_range": [ + 9, + 28 + ], + "centrality": 2 + }, + { + "uuid": "sym-32c67ccf53645c1c5dd20c2f", + "level": "L3", + "label": "GCRMain::api", + "file_path": "src/model/entities/GCRv2/GCR_Main.ts", + "symbol_name": "GCRMain::api", + "line_range": [ + 12, + 81 + ], + "centrality": 1 + }, + { + "uuid": "sym-f9e58c36e26f3179ae66e51b", + "level": "L2", + "label": "GCRMain", + "file_path": "src/model/entities/GCRv2/GCR_Main.ts", + "symbol_name": "GCRMain", + "line_range": [ + 12, + 81 + ], + "centrality": 2 + }, + { + "uuid": "sym-661263dc9f108fc8dfbe2edb", + "level": "L3", + "label": "GCRTLSNotary::api", + "file_path": "src/model/entities/GCRv2/GCR_TLSNotary.ts", + "symbol_name": "GCRTLSNotary::api", + "line_range": [ + 14, + 49 + ], + "centrality": 1 + }, + { + "uuid": "sym-9a4fcacf7bad77db5516aebe", + "level": "L2", + "label": "GCRTLSNotary", + "file_path": "src/model/entities/GCRv2/GCR_TLSNotary.ts", + "symbol_name": "GCRTLSNotary", + "line_range": [ + 14, + 49 + ], + "centrality": 2 + }, + { + "uuid": "sym-da9c02d35d28f02067af7242", + "level": "L3", + "label": "IdentityCommitment::api", + "file_path": "src/model/entities/GCRv2/IdentityCommitment.ts", + "symbol_name": "IdentityCommitment::api", + "line_range": [ + 12, + 66 + ], + "centrality": 1 + }, + { + "uuid": "sym-b669e2e1ce53f44203a8e3bc", + "level": "L2", + "label": "IdentityCommitment", + "file_path": "src/model/entities/GCRv2/IdentityCommitment.ts", + "symbol_name": "IdentityCommitment", + "line_range": [ + 12, + 66 + ], + "centrality": 2 + }, + { + "uuid": "sym-c28c0fb32a4c66f8f59399f8", + "level": "L3", + "label": "MerkleTreeState::api", + "file_path": "src/model/entities/GCRv2/MerkleTreeState.ts", + "symbol_name": "MerkleTreeState::api", + "line_range": [ + 14, + 68 + ], + "centrality": 1 + }, + { + "uuid": "sym-851653e97eff490ca57f6fae", + "level": "L2", + "label": "MerkleTreeState", + "file_path": "src/model/entities/GCRv2/MerkleTreeState.ts", + "symbol_name": "MerkleTreeState", + "line_range": [ + 14, + 68 + ], + "centrality": 2 + }, + { + "uuid": "sym-a12c2af51d9be861b946bf8a", + "level": "L3", + "label": "UsedNullifier::api", + "file_path": "src/model/entities/GCRv2/UsedNullifier.ts", + "symbol_name": "UsedNullifier::api", + "line_range": [ + 14, + 58 + ], + "centrality": 1 + }, + { + "uuid": "sym-87354513813df45f7bae9436", + "level": "L2", + "label": "UsedNullifier", + "file_path": "src/model/entities/GCRv2/UsedNullifier.ts", + "symbol_name": "UsedNullifier", + "line_range": [ + 14, + 58 + ], + "centrality": 2 + }, + { + "uuid": "sym-9d8a4d5edc2a9113cfe92b59", + "level": "L3", + "label": "L2PSHash::api", + "file_path": "src/model/entities/L2PSHashes.ts", + "symbol_name": "L2PSHash::api", + "line_range": [ + 13, + 55 + ], + "centrality": 1 + }, + { + "uuid": "sym-f55ae29e0c44c841e86925cd", + "level": "L2", + "label": "L2PSHash", + "file_path": "src/model/entities/L2PSHashes.ts", + "symbol_name": "L2PSHash", + "line_range": [ + 13, + 55 + ], + "centrality": 2 + }, + { + "uuid": "sym-bbaaf5c619b0e3e00385a5ec", + "level": "L3", + "label": "L2PSMempoolTx::api", + "file_path": "src/model/entities/L2PSMempool.ts", + "symbol_name": "L2PSMempoolTx::api", + "line_range": [ + 13, + 96 + ], + "centrality": 1 + }, + { + "uuid": "sym-b687ce25ee01734bed3a9734", + "level": "L2", + "label": "L2PSMempoolTx", + "file_path": "src/model/entities/L2PSMempool.ts", + "symbol_name": "L2PSMempoolTx", + "line_range": [ + 13, + 96 + ], + "centrality": 2 + }, + { + "uuid": "sym-abe2545e9c2ebd54c099a28d", + "level": "L3", + "label": "L2PSProofStatus::api", + "file_path": "src/model/entities/L2PSProofs.ts", + "symbol_name": "L2PSProofStatus::api", + "line_range": [ + 27, + 31 + ], + "centrality": 1 + }, + { + "uuid": "sym-b38c644fc6d294d21e0b92fe", + "level": "L2", + "label": "L2PSProofStatus", + "file_path": "src/model/entities/L2PSProofs.ts", + "symbol_name": "L2PSProofStatus", + "line_range": [ + 27, + 31 + ], + "centrality": 2 + }, + { + "uuid": "sym-394db654ca55a7ce952cadba", + "level": "L3", + "label": "L2PSProof::api", + "file_path": "src/model/entities/L2PSProofs.ts", + "symbol_name": "L2PSProof::api", + "line_range": [ + 38, + 169 + ], + "centrality": 1 + }, + { + "uuid": "sym-52fb32ee859d9bfa08437a4a", + "level": "L2", + "label": "L2PSProof", + "file_path": "src/model/entities/L2PSProofs.ts", + "symbol_name": "L2PSProof", + "line_range": [ + 38, + 169 + ], + "centrality": 2 + }, + { + "uuid": "sym-d293748a5d5f76087f5cfc4d", + "level": "L3", + "label": "L2PSTransaction::api", + "file_path": "src/model/entities/L2PSTransactions.ts", + "symbol_name": "L2PSTransaction::api", + "line_range": [ + 27, + 143 + ], + "centrality": 1 + }, + { + "uuid": "sym-37183cf62db7f8f1984bc448", + "level": "L2", + "label": "L2PSTransaction", + "file_path": "src/model/entities/L2PSTransactions.ts", + "symbol_name": "L2PSTransaction", + "line_range": [ + 27, + 143 + ], + "centrality": 2 + }, + { + "uuid": "sym-e27c9724ee7cdd1968538619", + "level": "L3", + "label": "MempoolTx::api", + "file_path": "src/model/entities/Mempool.ts", + "symbol_name": "MempoolTx::api", + "line_range": [ + 11, + 45 + ], + "centrality": 1 + }, + { + "uuid": "sym-817dd1dc2a1ba735addc3c06", + "level": "L2", + "label": "MempoolTx", + "file_path": "src/model/entities/Mempool.ts", + "symbol_name": "MempoolTx", + "line_range": [ + 11, + 45 + ], + "centrality": 2 + }, + { + "uuid": "sym-1685a05c77c5b9538f2d6f6e", + "level": "L3", + "label": "OfflineMessage::api", + "file_path": "src/model/entities/OfflineMessages.ts", + "symbol_name": "OfflineMessage::api", + "line_range": [ + 4, + 34 + ], + "centrality": 1 + }, + { + "uuid": "sym-ba02a04f4880a609013cceb4", + "level": "L2", + "label": "OfflineMessage", + "file_path": "src/model/entities/OfflineMessages.ts", + "symbol_name": "OfflineMessage", + "line_range": [ + 4, + 34 + ], + "centrality": 2 + }, + { + "uuid": "sym-ae2a9b9fa48d29e5c53f6315", + "level": "L3", + "label": "PgpKeyServer::api", + "file_path": "src/model/entities/PgpKeyServer.ts", + "symbol_name": "PgpKeyServer::api", + "line_range": [ + 3, + 16 + ], + "centrality": 1 + }, + { + "uuid": "sym-97f5211aee4fd55dffefc0f4", + "level": "L2", + "label": "PgpKeyServer", + "file_path": "src/model/entities/PgpKeyServer.ts", + "symbol_name": "PgpKeyServer", + "line_range": [ + 3, + 16 + ], + "centrality": 2 + }, + { + "uuid": "sym-6717edaabd144f47f1841978", + "level": "L3", + "label": "Transactions::api", + "file_path": "src/model/entities/Transactions.ts", + "symbol_name": "Transactions::api", + "line_range": [ + 4, + 60 + ], + "centrality": 1 + }, + { + "uuid": "sym-b52cab11144006e9acefd1dc", + "level": "L2", + "label": "Transactions", + "file_path": "src/model/entities/Transactions.ts", + "symbol_name": "Transactions", + "line_range": [ + 4, + 60 + ], + "centrality": 2 + }, + { + "uuid": "sym-11e4601dc05715cd7d6f7b40", + "level": "L3", + "label": "Validators::api", + "file_path": "src/model/entities/Validators.ts", + "symbol_name": "Validators::api", + "line_range": [ + 3, + 25 + ], + "centrality": 1 + }, + { + "uuid": "sym-35c46231b7bc7e15f6fd6d3f", + "level": "L2", + "label": "Validators", + "file_path": "src/model/entities/Validators.ts", + "symbol_name": "Validators", + "line_range": [ + 3, + 25 + ], + "centrality": 2 + }, + { + "uuid": "sym-b68535929d68ca1588c954d8", + "level": "L3", + "label": "NomisWalletIdentity::api", + "file_path": "src/model/entities/types/IdentityTypes.ts", + "symbol_name": "NomisWalletIdentity::api", + "line_range": [ + 3, + 19 + ], + "centrality": 1 + }, + { + "uuid": "sym-7e3e2f730f05083adf736213", + "level": "L2", + "label": "NomisWalletIdentity", + "file_path": "src/model/entities/types/IdentityTypes.ts", + "symbol_name": "NomisWalletIdentity", + "line_range": [ + 3, + 19 + ], + "centrality": 2 + }, + { + "uuid": "sym-a23822177d9cbf28a5e2874d", + "level": "L3", + "label": "SavedXmIdentity::api", + "file_path": "src/model/entities/types/IdentityTypes.ts", + "symbol_name": "SavedXmIdentity::api", + "line_range": [ + 21, + 30 + ], + "centrality": 1 + }, + { + "uuid": "sym-59bf9a4e447c40f8b0baca83", + "level": "L2", + "label": "SavedXmIdentity", + "file_path": "src/model/entities/types/IdentityTypes.ts", + "symbol_name": "SavedXmIdentity", + "line_range": [ + 21, + 30 + ], + "centrality": 2 + }, + { + "uuid": "sym-b76bb78b92b2a5e28bd022a1", + "level": "L3", + "label": "SavedNomisIdentity::api", + "file_path": "src/model/entities/types/IdentityTypes.ts", + "symbol_name": "SavedNomisIdentity::api", + "line_range": [ + 31, + 45 + ], + "centrality": 1 + }, + { + "uuid": "sym-8ff3fa0da48c6a51968f7cdd", + "level": "L2", + "label": "SavedNomisIdentity", + "file_path": "src/model/entities/types/IdentityTypes.ts", + "symbol_name": "SavedNomisIdentity", + "line_range": [ + 31, + 45 + ], + "centrality": 2 + }, + { + "uuid": "sym-50b53dc25f5cb1b69d653b9b", + "level": "L3", + "label": "SavedPqcIdentity::api", + "file_path": "src/model/entities/types/IdentityTypes.ts", + "symbol_name": "SavedPqcIdentity::api", + "line_range": [ + 50, + 54 + ], + "centrality": 1 + }, + { + "uuid": "sym-f46b4d4547c9976189a5969a", + "level": "L2", + "label": "SavedPqcIdentity", + "file_path": "src/model/entities/types/IdentityTypes.ts", + "symbol_name": "SavedPqcIdentity", + "line_range": [ + 50, + 54 + ], + "centrality": 2 + }, + { + "uuid": "sym-0744fffce72263b25b57ae9c", + "level": "L3", + "label": "PqcIdentityEdit::api", + "file_path": "src/model/entities/types/IdentityTypes.ts", + "symbol_name": "PqcIdentityEdit::api", + "line_range": [ + 59, + 61 + ], + "centrality": 1 + }, + { + "uuid": "sym-1ee5c28fcddc2de7a3b145cd", + "level": "L2", + "label": "PqcIdentityEdit", + "file_path": "src/model/entities/types/IdentityTypes.ts", + "symbol_name": "PqcIdentityEdit", + "line_range": [ + 59, + 61 + ], + "centrality": 2 + }, + { + "uuid": "sym-90cda6a95c5811e344c7d7ca", + "level": "L3", + "label": "SavedUdIdentity::api", + "file_path": "src/model/entities/types/IdentityTypes.ts", + "symbol_name": "SavedUdIdentity::api", + "line_range": [ + 76, + 86 + ], + "centrality": 1 + }, + { + "uuid": "sym-6b1a819551d2749fcdcaebb8", + "level": "L2", + "label": "SavedUdIdentity", + "file_path": "src/model/entities/types/IdentityTypes.ts", + "symbol_name": "SavedUdIdentity", + "line_range": [ + 76, + 86 + ], + "centrality": 2 + }, + { + "uuid": "sym-4ce8fd563a7ed5439d625943", + "level": "L3", + "label": "StoredIdentities::api", + "file_path": "src/model/entities/types/IdentityTypes.ts", + "symbol_name": "StoredIdentities::api", + "line_range": [ + 88, + 108 + ], + "centrality": 1 + }, + { + "uuid": "sym-09674205f4dd1e66aa3a00c9", + "level": "L2", + "label": "StoredIdentities", + "file_path": "src/model/entities/types/IdentityTypes.ts", + "symbol_name": "StoredIdentities", + "line_range": [ + 88, + 108 + ], + "centrality": 2 + }, + { + "uuid": "sym-0c9acc5940a82087d8399864", + "level": "L3", + "label": "TestingEnvironment::api", + "file_path": "src/tests/types/testingEnvironment.ts", + "symbol_name": "TestingEnvironment::api", + "line_range": [ + 19, + 111 + ], + "centrality": 1 + }, + { + "uuid": "sym-f3743738bcabc5b59659d442", + "level": "L3", + "label": "TestingEnvironment.retrieve", + "file_path": "src/tests/types/testingEnvironment.ts", + "symbol_name": "TestingEnvironment.retrieve", + "line_range": [ + 47, + 72 + ], + "centrality": 1 + }, + { + "uuid": "sym-688bcc85271dede8317525a4", + "level": "L3", + "label": "TestingEnvironment.connect", + "file_path": "src/tests/types/testingEnvironment.ts", + "symbol_name": "TestingEnvironment.connect", + "line_range": [ + 75, + 97 + ], + "centrality": 1 + }, + { + "uuid": "sym-0da3c2c2c043289abfb4e4c4", + "level": "L3", + "label": "TestingEnvironment.isConnected", + "file_path": "src/tests/types/testingEnvironment.ts", + "symbol_name": "TestingEnvironment.isConnected", + "line_range": [ + 100, + 110 + ], + "centrality": 1 + }, + { + "uuid": "sym-0ac70d873414c331ce910f6d", + "level": "L2", + "label": "TestingEnvironment", + "file_path": "src/tests/types/testingEnvironment.ts", + "symbol_name": "TestingEnvironment", + "line_range": [ + 19, + 111 + ], + "centrality": 5 + }, + { + "uuid": "sym-7a48994bdf441ad2593ddeeb", + "level": "L3", + "label": "DiagnosticData::api", + "file_path": "src/utilities/Diagnostic.ts", + "symbol_name": "DiagnosticData::api", + "line_range": [ + 8, + 35 + ], + "centrality": 1 + }, + { + "uuid": "sym-7e8dfc0604be1a84071b6545", + "level": "L2", + "label": "DiagnosticData", + "file_path": "src/utilities/Diagnostic.ts", + "symbol_name": "DiagnosticData", + "line_range": [ + 8, + 35 + ], + "centrality": 2 + }, + { + "uuid": "sym-f7ebe48c44eac8606e31e9ed", + "level": "L3", + "label": "DiagnosticResponse::api", + "file_path": "src/utilities/Diagnostic.ts", + "symbol_name": "DiagnosticResponse::api", + "line_range": [ + 37, + 39 + ], + "centrality": 1 + }, + { + "uuid": "sym-6914083e3bf3fbedbec2224e", + "level": "L2", + "label": "DiagnosticResponse", + "file_path": "src/utilities/Diagnostic.ts", + "symbol_name": "DiagnosticResponse", + "line_range": [ + 37, + 39 + ], + "centrality": 2 + }, + { + "uuid": "sym-4dcfdaff3d358f5913dd0fe3", + "level": "L3", + "label": "default", + "file_path": "src/utilities/Diagnostic.ts", + "symbol_name": "default", + "line_range": [ + 378, + 378 + ], + "centrality": 1 + }, + { + "uuid": "sym-4b87c6bde0ba6922be1ab091", + "level": "L3", + "label": "checkSignedPayloads", + "file_path": "src/utilities/checkSignedPayloads.ts", + "symbol_name": "checkSignedPayloads", + "line_range": [ + 5, + 21 + ], + "centrality": 1 + }, + { + "uuid": "sym-fdc6a680519985c47038e2a5", + "level": "L3", + "label": "Cryptography::api", + "file_path": "src/utilities/cli_libraries/cryptography.ts", + "symbol_name": "Cryptography::api", + "line_range": [ + 6, + 44 + ], + "centrality": 1 + }, + { + "uuid": "sym-613fa096bf763d0acf01da9b", + "level": "L3", + "label": "Cryptography.getInstance", + "file_path": "src/utilities/cli_libraries/cryptography.ts", + "symbol_name": "Cryptography.getInstance", + "line_range": [ + 10, + 15 + ], + "centrality": 1 + }, + { + "uuid": "sym-8766b00e6fa3be7a2892fe99", + "level": "L3", + "label": "Cryptography.dispatch", + "file_path": "src/utilities/cli_libraries/cryptography.ts", + "symbol_name": "Cryptography.dispatch", + "line_range": [ + 19, + 21 + ], + "centrality": 1 + }, + { + "uuid": "sym-8799af631ff3a4143d43a850", + "level": "L3", + "label": "Cryptography.sign", + "file_path": "src/utilities/cli_libraries/cryptography.ts", + "symbol_name": "Cryptography.sign", + "line_range": [ + 23, + 30 + ], + "centrality": 1 + }, + { + "uuid": "sym-54138acd411fe89df0e2c98c", + "level": "L3", + "label": "Cryptography.verify", + "file_path": "src/utilities/cli_libraries/cryptography.ts", + "symbol_name": "Cryptography.verify", + "line_range": [ + 32, + 43 + ], + "centrality": 1 + }, + { + "uuid": "sym-590ef991f7c0feb60db38948", + "level": "L2", + "label": "Cryptography", + "file_path": "src/utilities/cli_libraries/cryptography.ts", + "symbol_name": "Cryptography", + "line_range": [ + 6, + 44 + ], + "centrality": 6 + }, + { + "uuid": "sym-8d5e227a00f1424f513b0a29", + "level": "L3", + "label": "Identity::api", + "file_path": "src/utilities/cli_libraries/wallet.ts", + "symbol_name": "Identity::api", + "line_range": [ + 5, + 8 + ], + "centrality": 1 + }, + { + "uuid": "sym-a5e5e709921d64076470bc4a", + "level": "L2", + "label": "Identity", + "file_path": "src/utilities/cli_libraries/wallet.ts", + "symbol_name": "Identity", + "line_range": [ + 5, + 8 + ], + "centrality": 2 + }, + { + "uuid": "sym-f8c0eeed3baccb3e7fa467c0", + "level": "L3", + "label": "Wallet::api", + "file_path": "src/utilities/cli_libraries/wallet.ts", + "symbol_name": "Wallet::api", + "line_range": [ + 10, + 134 + ], + "centrality": 1 + }, + { + "uuid": "sym-e17fcd94a4eb8771ace31fc3", + "level": "L3", + "label": "Wallet.getInstance", + "file_path": "src/utilities/cli_libraries/wallet.ts", + "symbol_name": "Wallet.getInstance", + "line_range": [ + 15, + 20 + ], + "centrality": 1 + }, + { + "uuid": "sym-603aaafef984c97bc1fb36f7", + "level": "L3", + "label": "Wallet.create", + "file_path": "src/utilities/cli_libraries/wallet.ts", + "symbol_name": "Wallet.create", + "line_range": [ + 31, + 33 + ], + "centrality": 1 + }, + { + "uuid": "sym-040c390bafa53749618b519b", + "level": "L3", + "label": "Wallet.dispatch", + "file_path": "src/utilities/cli_libraries/wallet.ts", + "symbol_name": "Wallet.dispatch", + "line_range": [ + 35, + 114 + ], + "centrality": 1 + }, + { + "uuid": "sym-d23bb70b07f37cd7d66c695a", + "level": "L3", + "label": "Wallet.load", + "file_path": "src/utilities/cli_libraries/wallet.ts", + "symbol_name": "Wallet.load", + "line_range": [ + 116, + 121 + ], + "centrality": 1 + }, + { + "uuid": "sym-88f912051e9647b32d55b9c7", + "level": "L3", + "label": "Wallet.save", + "file_path": "src/utilities/cli_libraries/wallet.ts", + "symbol_name": "Wallet.save", + "line_range": [ + 123, + 125 + ], + "centrality": 1 + }, + { + "uuid": "sym-337b0b893f91850a1c499081", + "level": "L3", + "label": "Wallet.read", + "file_path": "src/utilities/cli_libraries/wallet.ts", + "symbol_name": "Wallet.read", + "line_range": [ + 127, + 133 + ], + "centrality": 1 + }, + { + "uuid": "sym-96217b85b15e0cb5db4e930b", + "level": "L2", + "label": "Wallet", + "file_path": "src/utilities/cli_libraries/wallet.ts", + "symbol_name": "Wallet", + "line_range": [ + 10, + 134 + ], + "centrality": 8 + }, + { + "uuid": "sym-927f4a859c94422559dd19ec", + "level": "L3", + "label": "commandLine", + "file_path": "src/utilities/commandLine.ts", + "symbol_name": "commandLine", + "line_range": [ + 23, + 62 + ], + "centrality": 1 + }, + { + "uuid": "sym-f299dd21cf070dca1c4a0501", + "level": "L3", + "label": "getErrorMessage", + "file_path": "src/utilities/errorMessage.ts", + "symbol_name": "getErrorMessage", + "line_range": [ + 3, + 24 + ], + "centrality": 1 + }, + { + "uuid": "sym-efeccf4a0839b992818e1b61", + "level": "L3", + "label": "EVMInfo::api", + "file_path": "src/utilities/evmInfo.ts", + "symbol_name": "EVMInfo::api", + "line_range": [ + 4, + 11 + ], + "centrality": 1 + }, + { + "uuid": "sym-a4795a434717a476bb688e27", + "level": "L2", + "label": "EVMInfo", + "file_path": "src/utilities/evmInfo.ts", + "symbol_name": "EVMInfo", + "line_range": [ + 4, + 11 + ], + "centrality": 2 + }, + { + "uuid": "sym-348c100bdcd3654ff72438e9", + "level": "L3", + "label": "evmInfo", + "file_path": "src/utilities/evmInfo.ts", + "symbol_name": "evmInfo", + "line_range": [ + 13, + 40 + ], + "centrality": 1 + }, + { + "uuid": "sym-41ce297760c0b065fc403d2c", + "level": "L3", + "label": "generateUniqueId", + "file_path": "src/utilities/generateUniqueId.ts", + "symbol_name": "generateUniqueId", + "line_range": [ + 3, + 9 + ], + "centrality": 1 + }, + { + "uuid": "sym-744d1d1b0780d485e5d250ad", + "level": "L3", + "label": "getPublicIP", + "file_path": "src/utilities/getPublicIP.ts", + "symbol_name": "getPublicIP", + "line_range": [ + 3, + 6 + ], + "centrality": 1 + }, + { + "uuid": "sym-d9d6fc11a7df506cb0a07142", + "level": "L3", + "label": "default", + "file_path": "src/utilities/logger.ts", + "symbol_name": "default", + "line_range": [ + 22, + 22 + ], + "centrality": 1 + }, + { + "uuid": "sym-01c888a08356d8f28943c97f", + "level": "L3", + "label": "Logger", + "file_path": "src/utilities/logger.ts", + "symbol_name": "Logger", + "line_range": [ + 23, + 23 + ], + "centrality": 1 + }, + { + "uuid": "sym-44d33a50cc54e0d3d967b0c0", + "level": "L3", + "label": "CategorizedLogger", + "file_path": "src/utilities/logger.ts", + "symbol_name": "CategorizedLogger", + "line_range": [ + 26, + 26 + ], + "centrality": 1 + }, + { + "uuid": "sym-19868805b0694b2d85e8eaf2", + "level": "L3", + "label": "LogCategory", + "file_path": "src/utilities/logger.ts", + "symbol_name": "LogCategory", + "line_range": [ + 27, + 27 + ], + "centrality": 1 + }, + { + "uuid": "sym-7e2f44f7dfbc0b389d5076cc", + "level": "L3", + "label": "LogLevel", + "file_path": "src/utilities/logger.ts", + "symbol_name": "LogLevel", + "line_range": [ + 27, + 27 + ], + "centrality": 1 + }, + { + "uuid": "sym-7591b4ab3452279a9b3202d6", + "level": "L3", + "label": "LogEntry", + "file_path": "src/utilities/logger.ts", + "symbol_name": "LogEntry", + "line_range": [ + 27, + 27 + ], + "centrality": 1 + }, + { + "uuid": "sym-7d6290b416ca33e2810a2d84", + "level": "L3", + "label": "TUIManager", + "file_path": "src/utilities/logger.ts", + "symbol_name": "TUIManager", + "line_range": [ + 28, + 28 + ], + "centrality": 1 + }, + { + "uuid": "sym-98ec34896e82c3ec91f745c8", + "level": "L3", + "label": "NodeInfo", + "file_path": "src/utilities/logger.ts", + "symbol_name": "NodeInfo", + "line_range": [ + 29, + 29 + ], + "centrality": 1 + }, + { + "uuid": "sym-f340304e2dcd18aeab7bea66", + "level": "L3", + "label": "mainLoop", + "file_path": "src/utilities/mainLoop.ts", + "symbol_name": "mainLoop", + "line_range": [ + 25, + 31 + ], + "centrality": 1 + }, + { + "uuid": "sym-da54c6138fbebaf88017312e", + "level": "L3", + "label": "RequiredOutcome::api", + "file_path": "src/utilities/required.ts", + "symbol_name": "RequiredOutcome::api", + "line_range": [ + 11, + 14 + ], + "centrality": 1 + }, + { + "uuid": "sym-310ddf06d9f20af042a081ae", + "level": "L2", + "label": "RequiredOutcome", + "file_path": "src/utilities/required.ts", + "symbol_name": "RequiredOutcome", + "line_range": [ + 11, + 14 + ], + "centrality": 2 + }, + { + "uuid": "sym-1fb3c00ffd51337ee0856546", + "level": "L3", + "label": "required", + "file_path": "src/utilities/required.ts", + "symbol_name": "required", + "line_range": [ + 16, + 26 + ], + "centrality": 1 + }, + { + "uuid": "sym-eb5223c80d97fb8805435919", + "level": "L3", + "label": "selfCheckPort", + "file_path": "src/utilities/selfCheckPort.ts", + "symbol_name": "selfCheckPort", + "line_range": [ + 4, + 17 + ], + "centrality": 1 + }, + { + "uuid": "sym-73a0a16ce379f82c4cf209c2", + "level": "L3", + "label": "selfPeer", + "file_path": "src/utilities/selfPeer.ts", + "symbol_name": "selfPeer", + "line_range": [ + 5, + 16 + ], + "centrality": 1 + }, + { + "uuid": "sym-52d5306f84e203c25cde4d63", + "level": "L3", + "label": "SharedState::api", + "file_path": "src/utilities/sharedState.ts", + "symbol_name": "SharedState::api", + "line_range": [ + 21, + 371 + ], + "centrality": 1 + }, + { + "uuid": "sym-63378d99f547426255e3c6b2", + "level": "L3", + "label": "SharedState.syncStatus", + "file_path": "src/utilities/sharedState.ts", + "symbol_name": "SharedState.syncStatus", + "line_range": [ + 96, + 104 + ], + "centrality": 1 + }, + { + "uuid": "sym-2fe136d4f31355269119cc07", + "level": "L3", + "label": "SharedState.syncStatus", + "file_path": "src/utilities/sharedState.ts", + "symbol_name": "SharedState.syncStatus", + "line_range": [ + 106, + 108 + ], + "centrality": 1 + }, + { + "uuid": "sym-2006e105b13b6da460a2f036", + "level": "L3", + "label": "SharedState.publicKeyHex", + "file_path": "src/utilities/sharedState.ts", + "symbol_name": "SharedState.publicKeyHex", + "line_range": [ + 131, + 144 + ], + "centrality": 1 + }, + { + "uuid": "sym-fd5416bb9f103468749a2fb6", + "level": "L3", + "label": "SharedState.lastBlockHash", + "file_path": "src/utilities/sharedState.ts", + "symbol_name": "SharedState.lastBlockHash", + "line_range": [ + 153, + 157 + ], + "centrality": 1 + }, + { + "uuid": "sym-e730f1acbf64d766fa3ab2c5", + "level": "L3", + "label": "SharedState.lastBlockHash", + "file_path": "src/utilities/sharedState.ts", + "symbol_name": "SharedState.lastBlockHash", + "line_range": [ + 159, + 161 + ], + "centrality": 1 + }, + { + "uuid": "sym-27eafd904c9cc9f3be773db2", + "level": "L3", + "label": "SharedState.getInstance", + "file_path": "src/utilities/sharedState.ts", + "symbol_name": "SharedState.getInstance", + "line_range": [ + 183, + 188 + ], + "centrality": 1 + }, + { + "uuid": "sym-9a7c16a46499c4474bfa9c28", + "level": "L3", + "label": "SharedState.getUTCTime", + "file_path": "src/utilities/sharedState.ts", + "symbol_name": "SharedState.getUTCTime", + "line_range": [ + 192, + 205 + ], + "centrality": 1 + }, + { + "uuid": "sym-5abf751f46445a56272194fe", + "level": "L3", + "label": "SharedState.getNTPTime", + "file_path": "src/utilities/sharedState.ts", + "symbol_name": "SharedState.getNTPTime", + "line_range": [ + 208, + 217 + ], + "centrality": 1 + }, + { + "uuid": "sym-f4c49cb6c933e15281dc470d", + "level": "L3", + "label": "SharedState.getTimestamp", + "file_path": "src/utilities/sharedState.ts", + "symbol_name": "SharedState.getTimestamp", + "line_range": [ + 220, + 226 + ], + "centrality": 1 + }, + { + "uuid": "sym-204abff3c5eec17740212ccd", + "level": "L3", + "label": "SharedState.getLastConsensusTime", + "file_path": "src/utilities/sharedState.ts", + "symbol_name": "SharedState.getLastConsensusTime", + "line_range": [ + 228, + 233 + ], + "centrality": 1 + }, + { + "uuid": "sym-bce0a60c8b027a23cbb66a0b", + "level": "L3", + "label": "SharedState.getConsensusCheckStep", + "file_path": "src/utilities/sharedState.ts", + "symbol_name": "SharedState.getConsensusCheckStep", + "line_range": [ + 238, + 240 + ], + "centrality": 1 + }, + { + "uuid": "sym-2bf80b379b628fe1463b323d", + "level": "L3", + "label": "SharedState.getConsensusTime", + "file_path": "src/utilities/sharedState.ts", + "symbol_name": "SharedState.getConsensusTime", + "line_range": [ + 245, + 247 + ], + "centrality": 1 + }, + { + "uuid": "sym-3b9e32f6d2845b4593c6cf03", + "level": "L3", + "label": "SharedState.getConnectionString", + "file_path": "src/utilities/sharedState.ts", + "symbol_name": "SharedState.getConnectionString", + "line_range": [ + 249, + 252 + ], + "centrality": 1 + }, + { + "uuid": "sym-dfc183b8a51720a3c7acb951", + "level": "L3", + "label": "SharedState.getInfo", + "file_path": "src/utilities/sharedState.ts", + "symbol_name": "SharedState.getInfo", + "line_range": [ + 294, + 312 + ], + "centrality": 1 + }, + { + "uuid": "sym-fdea233f51c4f9253f57b5fa", + "level": "L3", + "label": "SharedState.initOmniProtocol", + "file_path": "src/utilities/sharedState.ts", + "symbol_name": "SharedState.initOmniProtocol", + "line_range": [ + 319, + 331 + ], + "centrality": 1 + }, + { + "uuid": "sym-409ae2c860c3d547932b22bf", + "level": "L3", + "label": "SharedState.omniAdapter", + "file_path": "src/utilities/sharedState.ts", + "symbol_name": "SharedState.omniAdapter", + "line_range": [ + 336, + 338 + ], + "centrality": 1 + }, + { + "uuid": "sym-f1b2b407c8dfa52f9ea4da3a", + "level": "L3", + "label": "SharedState.shouldUseOmniProtocol", + "file_path": "src/utilities/sharedState.ts", + "symbol_name": "SharedState.shouldUseOmniProtocol", + "line_range": [ + 344, + 349 + ], + "centrality": 1 + }, + { + "uuid": "sym-23c9f147a5e10bca9cda218d", + "level": "L3", + "label": "SharedState.markPeerOmniCapable", + "file_path": "src/utilities/sharedState.ts", + "symbol_name": "SharedState.markPeerOmniCapable", + "line_range": [ + 355, + 359 + ], + "centrality": 1 + }, + { + "uuid": "sym-d3aa764874845bfa486fda13", + "level": "L3", + "label": "SharedState.markPeerHttpOnly", + "file_path": "src/utilities/sharedState.ts", + "symbol_name": "SharedState.markPeerHttpOnly", + "line_range": [ + 365, + 369 + ], + "centrality": 1 + }, + { + "uuid": "sym-b744b3f0ca52230821cd7c09", + "level": "L2", + "label": "SharedState", + "file_path": "src/utilities/sharedState.ts", + "symbol_name": "SharedState", + "line_range": [ + 21, + 371 + ], + "centrality": 21 + }, + { + "uuid": "sym-ed461adfd8dc4f058d796f5b", + "level": "L3", + "label": "sizeOf", + "file_path": "src/utilities/sizeOf.ts", + "symbol_name": "sizeOf", + "line_range": [ + 2, + 28 + ], + "centrality": 1 + }, + { + "uuid": "sym-ba3b3568b45ce5bc207be950", + "level": "L3", + "label": "LogLevel::api", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "LogLevel::api", + "line_range": [ + 20, + 20 + ], + "centrality": 1 + }, + { + "uuid": "sym-94693360f161a1af80920aaa", + "level": "L2", + "label": "LogLevel", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "LogLevel", + "line_range": [ + 20, + 20 + ], + "centrality": 2 + }, + { + "uuid": "sym-9bf79a1b040d2b717c1a5b1c", + "level": "L3", + "label": "LogCategory::api", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "LogCategory::api", + "line_range": [ + 25, + 37 + ], + "centrality": 1 + }, + { + "uuid": "sym-c23128ccef9064fd5a9eb6be", + "level": "L2", + "label": "LogCategory", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "LogCategory", + "line_range": [ + 25, + 37 + ], + "centrality": 2 + }, + { + "uuid": "sym-76e9719e4a837d746f1fa769", + "level": "L3", + "label": "LogEntry::api", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "LogEntry::api", + "line_range": [ + 42, + 48 + ], + "centrality": 1 + }, + { + "uuid": "sym-ae4c5105ad70fa5d16a460d4", + "level": "L2", + "label": "LogEntry", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "LogEntry", + "line_range": [ + 42, + 48 + ], + "centrality": 2 + }, + { + "uuid": "sym-d4b1406d39589498a37359a6", + "level": "L3", + "label": "LoggerConfig::api", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "LoggerConfig::api", + "line_range": [ + 53, + 68 + ], + "centrality": 1 + }, + { + "uuid": "sym-7877e2c46b0481d30b1295d8", + "level": "L2", + "label": "LoggerConfig", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "LoggerConfig", + "line_range": [ + 53, + 68 + ], + "centrality": 2 + }, + { + "uuid": "sym-781b5402e62da25888f26f70", + "level": "L3", + "label": "CategorizedLogger::api", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "CategorizedLogger::api", + "line_range": [ + 209, + 950 + ], + "centrality": 1 + }, + { + "uuid": "sym-2f9702f503e3a0e90c14043d", + "level": "L3", + "label": "CategorizedLogger.getInstance", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "CategorizedLogger.getInstance", + "line_range": [ + 260, + 265 + ], + "centrality": 1 + }, + { + "uuid": "sym-04f86cd0f12ab44263506f89", + "level": "L3", + "label": "CategorizedLogger.resetInstance", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "CategorizedLogger.resetInstance", + "line_range": [ + 270, + 275 + ], + "centrality": 1 + }, + { + "uuid": "sym-72d5ce5c5a92d40503d3413c", + "level": "L3", + "label": "CategorizedLogger.initLogsDir", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "CategorizedLogger.initLogsDir", + "line_range": [ + 282, + 296 + ], + "centrality": 1 + }, + { + "uuid": "sym-cdd197a381f19cac93a75638", + "level": "L3", + "label": "CategorizedLogger.enableTuiMode", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "CategorizedLogger.enableTuiMode", + "line_range": [ + 301, + 304 + ], + "centrality": 1 + }, + { + "uuid": "sym-c3d369dafd1d67373ba6737a", + "level": "L3", + "label": "CategorizedLogger.disableTuiMode", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "CategorizedLogger.disableTuiMode", + "line_range": [ + 309, + 312 + ], + "centrality": 1 + }, + { + "uuid": "sym-6c15138dd9db2d1c461b5f11", + "level": "L3", + "label": "CategorizedLogger.isTuiMode", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "CategorizedLogger.isTuiMode", + "line_range": [ + 317, + 319 + ], + "centrality": 1 + }, + { + "uuid": "sym-ee0653128098a581b53941db", + "level": "L3", + "label": "CategorizedLogger.setMinLevel", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "CategorizedLogger.setMinLevel", + "line_range": [ + 324, + 327 + ], + "centrality": 1 + }, + { + "uuid": "sym-55213cf6f6edcbb76ee59eaa", + "level": "L3", + "label": "CategorizedLogger.setEnabledCategories", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "CategorizedLogger.setEnabledCategories", + "line_range": [ + 332, + 335 + ], + "centrality": 1 + }, + { + "uuid": "sym-b0c8f99e6c93ca9706d1f8ee", + "level": "L3", + "label": "CategorizedLogger.getConfig", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "CategorizedLogger.getConfig", + "line_range": [ + 340, + 342 + ], + "centrality": 1 + }, + { + "uuid": "sym-ac0e2088100b56d149dae697", + "level": "L3", + "label": "CategorizedLogger.debug", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "CategorizedLogger.debug", + "line_range": [ + 405, + 408 + ], + "centrality": 1 + }, + { + "uuid": "sym-43d5acdefe01681708b5270d", + "level": "L3", + "label": "CategorizedLogger.info", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "CategorizedLogger.info", + "line_range": [ + 413, + 416 + ], + "centrality": 1 + }, + { + "uuid": "sym-5da4340e9bf03a4ed4cbb269", + "level": "L3", + "label": "CategorizedLogger.warning", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "CategorizedLogger.warning", + "line_range": [ + 421, + 424 + ], + "centrality": 1 + }, + { + "uuid": "sym-1d0c0bdd7a0a0aa7bb5a8132", + "level": "L3", + "label": "CategorizedLogger.error", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "CategorizedLogger.error", + "line_range": [ + 429, + 432 + ], + "centrality": 1 + }, + { + "uuid": "sym-6f44a6b4d80bb5efb733bbba", + "level": "L3", + "label": "CategorizedLogger.critical", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "CategorizedLogger.critical", + "line_range": [ + 437, + 440 + ], + "centrality": 1 + }, + { + "uuid": "sym-86d08eb8a6c3bae40f8bde7f", + "level": "L3", + "label": "CategorizedLogger.forceRotationCheck", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "CategorizedLogger.forceRotationCheck", + "line_range": [ + 724, + 727 + ], + "centrality": 1 + }, + { + "uuid": "sym-8e9dd2a259270ebe8d2e9e75", + "level": "L3", + "label": "CategorizedLogger.getLogsDirSize", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "CategorizedLogger.getLogsDirSize", + "line_range": [ + 732, + 756 + ], + "centrality": 1 + }, + { + "uuid": "sym-18cc014a13ffb8e6794c9864", + "level": "L3", + "label": "CategorizedLogger.getAllEntries", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "CategorizedLogger.getAllEntries", + "line_range": [ + 840, + 855 + ], + "centrality": 1 + }, + { + "uuid": "sym-fe8380a376b6e0e2a1cc0bd8", + "level": "L3", + "label": "CategorizedLogger.getLastEntries", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "CategorizedLogger.getLastEntries", + "line_range": [ + 860, + 863 + ], + "centrality": 1 + }, + { + "uuid": "sym-b79e1fe7188c4b7b8e158cb0", + "level": "L3", + "label": "CategorizedLogger.getEntriesByCategory", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "CategorizedLogger.getEntriesByCategory", + "line_range": [ + 868, + 871 + ], + "centrality": 1 + }, + { + "uuid": "sym-eae366c1c6cebf792390d7b7", + "level": "L3", + "label": "CategorizedLogger.getEntriesByLevel", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "CategorizedLogger.getEntriesByLevel", + "line_range": [ + 876, + 879 + ], + "centrality": 1 + }, + { + "uuid": "sym-0c7b7ace29b6cdc63325e02d", + "level": "L3", + "label": "CategorizedLogger.getEntries", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "CategorizedLogger.getEntries", + "line_range": [ + 884, + 891 + ], + "centrality": 1 + }, + { + "uuid": "sym-f9dc91b5e70e8a5b5d1ffa7e", + "level": "L3", + "label": "CategorizedLogger.clearBuffer", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "CategorizedLogger.clearBuffer", + "line_range": [ + 896, + 903 + ], + "centrality": 1 + }, + { + "uuid": "sym-9f05d203f674eec06b233dae", + "level": "L3", + "label": "CategorizedLogger.getBufferSize", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "CategorizedLogger.getBufferSize", + "line_range": [ + 908, + 914 + ], + "centrality": 1 + }, + { + "uuid": "sym-2026315fe1b610a31721ea8f", + "level": "L3", + "label": "CategorizedLogger.cleanLogs", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "CategorizedLogger.cleanLogs", + "line_range": [ + 921, + 935 + ], + "centrality": 1 + }, + { + "uuid": "sym-dde7c60f79b0e85c17c546b2", + "level": "L3", + "label": "CategorizedLogger.getCategories", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "CategorizedLogger.getCategories", + "line_range": [ + 940, + 942 + ], + "centrality": 1 + }, + { + "uuid": "sym-055fb7e7be06d0d4dec566a4", + "level": "L3", + "label": "CategorizedLogger.getLevels", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "CategorizedLogger.getLevels", + "line_range": [ + 947, + 949 + ], + "centrality": 1 + }, + { + "uuid": "sym-d399da6b951448492878f2f3", + "level": "L2", + "label": "CategorizedLogger", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "CategorizedLogger", + "line_range": [ + 209, + 950 + ], + "centrality": 28 + }, + { + "uuid": "sym-4fd1128f7dfc625d822a7318", + "level": "L3", + "label": "default", + "file_path": "src/utilities/tui/CategorizedLogger.ts", + "symbol_name": "default", + "line_range": [ + 959, + 959 + ], + "centrality": 1 + }, + { + "uuid": "sym-9899d1280b44b8b713f7186b", + "level": "L3", + "label": "LegacyLoggerAdapter::api", + "file_path": "src/utilities/tui/LegacyLoggerAdapter.ts", + "symbol_name": "LegacyLoggerAdapter::api", + "line_range": [ + 64, + 380 + ], + "centrality": 1 + }, + { + "uuid": "sym-80f5f7dcc6c29f5b623336a5", + "level": "L3", + "label": "LegacyLoggerAdapter.setLogsDir", + "file_path": "src/utilities/tui/LegacyLoggerAdapter.ts", + "symbol_name": "LegacyLoggerAdapter.setLogsDir", + "line_range": [ + 86, + 113 + ], + "centrality": 1 + }, + { + "uuid": "sym-4f7092b7f911ab928f6cefb0", + "level": "L3", + "label": "LegacyLoggerAdapter.info", + "file_path": "src/utilities/tui/LegacyLoggerAdapter.ts", + "symbol_name": "LegacyLoggerAdapter.info", + "line_range": [ + 120, + 132 + ], + "centrality": 1 + }, + { + "uuid": "sym-dbc8f2bdea6abafb20dc6f3a", + "level": "L3", + "label": "LegacyLoggerAdapter.error", + "file_path": "src/utilities/tui/LegacyLoggerAdapter.ts", + "symbol_name": "LegacyLoggerAdapter.error", + "line_range": [ + 139, + 148 + ], + "centrality": 1 + }, + { + "uuid": "sym-a211dc84b6ff98afb9cfc21b", + "level": "L3", + "label": "LegacyLoggerAdapter.debug", + "file_path": "src/utilities/tui/LegacyLoggerAdapter.ts", + "symbol_name": "LegacyLoggerAdapter.debug", + "line_range": [ + 155, + 166 + ], + "centrality": 1 + }, + { + "uuid": "sym-82203bf45ef4bb93c42253b9", + "level": "L3", + "label": "LegacyLoggerAdapter.warning", + "file_path": "src/utilities/tui/LegacyLoggerAdapter.ts", + "symbol_name": "LegacyLoggerAdapter.warning", + "line_range": [ + 173, + 184 + ], + "centrality": 1 + }, + { + "uuid": "sym-fddd74010c8fb6ebd080f084", + "level": "L3", + "label": "LegacyLoggerAdapter.warn", + "file_path": "src/utilities/tui/LegacyLoggerAdapter.ts", + "symbol_name": "LegacyLoggerAdapter.warn", + "line_range": [ + 189, + 191 + ], + "centrality": 1 + }, + { + "uuid": "sym-082591d771f4e89c0f59f037", + "level": "L3", + "label": "LegacyLoggerAdapter.critical", + "file_path": "src/utilities/tui/LegacyLoggerAdapter.ts", + "symbol_name": "LegacyLoggerAdapter.critical", + "line_range": [ + 198, + 207 + ], + "centrality": 1 + }, + { + "uuid": "sym-d7e2be3959a27cc0115a6278", + "level": "L3", + "label": "LegacyLoggerAdapter.custom", + "file_path": "src/utilities/tui/LegacyLoggerAdapter.ts", + "symbol_name": "LegacyLoggerAdapter.custom", + "line_range": [ + 213, + 247 + ], + "centrality": 1 + }, + { + "uuid": "sym-dda97a72bb6e5d1d00d712f9", + "level": "L3", + "label": "LegacyLoggerAdapter.only", + "file_path": "src/utilities/tui/LegacyLoggerAdapter.ts", + "symbol_name": "LegacyLoggerAdapter.only", + "line_range": [ + 255, + 282 + ], + "centrality": 1 + }, + { + "uuid": "sym-dfa2433e9d331751425b8dae", + "level": "L3", + "label": "LegacyLoggerAdapter.disableOnlyMode", + "file_path": "src/utilities/tui/LegacyLoggerAdapter.ts", + "symbol_name": "LegacyLoggerAdapter.disableOnlyMode", + "line_range": [ + 284, + 290 + ], + "centrality": 1 + }, + { + "uuid": "sym-45dc1c54cecce36c5ec15a0c", + "level": "L3", + "label": "LegacyLoggerAdapter.cleanLogs", + "file_path": "src/utilities/tui/LegacyLoggerAdapter.ts", + "symbol_name": "LegacyLoggerAdapter.cleanLogs", + "line_range": [ + 295, + 312 + ], + "centrality": 1 + }, + { + "uuid": "sym-9564380b7ebb2e63900652de", + "level": "L3", + "label": "LegacyLoggerAdapter.getPublicLogs", + "file_path": "src/utilities/tui/LegacyLoggerAdapter.ts", + "symbol_name": "LegacyLoggerAdapter.getPublicLogs", + "line_range": [ + 317, + 343 + ], + "centrality": 1 + }, + { + "uuid": "sym-17375e0b9ac1fb49cdfd2f17", + "level": "L3", + "label": "LegacyLoggerAdapter.getDiagnostics", + "file_path": "src/utilities/tui/LegacyLoggerAdapter.ts", + "symbol_name": "LegacyLoggerAdapter.getDiagnostics", + "line_range": [ + 348, + 355 + ], + "centrality": 1 + }, + { + "uuid": "sym-4ab7557f715a615f22a172ff", + "level": "L3", + "label": "LegacyLoggerAdapter.getCategorizedLogger", + "file_path": "src/utilities/tui/LegacyLoggerAdapter.ts", + "symbol_name": "LegacyLoggerAdapter.getCategorizedLogger", + "line_range": [ + 363, + 365 + ], + "centrality": 1 + }, + { + "uuid": "sym-d3a9dd89e91e26e2a9f0ce24", + "level": "L3", + "label": "LegacyLoggerAdapter.enableTuiMode", + "file_path": "src/utilities/tui/LegacyLoggerAdapter.ts", + "symbol_name": "LegacyLoggerAdapter.enableTuiMode", + "line_range": [ + 370, + 372 + ], + "centrality": 1 + }, + { + "uuid": "sym-0a750a740b1b99f0d75cb6cb", + "level": "L3", + "label": "LegacyLoggerAdapter.disableTuiMode", + "file_path": "src/utilities/tui/LegacyLoggerAdapter.ts", + "symbol_name": "LegacyLoggerAdapter.disableTuiMode", + "line_range": [ + 377, + 379 + ], + "centrality": 1 + }, + { + "uuid": "sym-c921746d54e98ddfe4ccb299", + "level": "L2", + "label": "LegacyLoggerAdapter", + "file_path": "src/utilities/tui/LegacyLoggerAdapter.ts", + "symbol_name": "LegacyLoggerAdapter", + "line_range": [ + 64, + 380 + ], + "centrality": 18 + }, + { + "uuid": "sym-c9824622ec971ea3d7836742", + "level": "L3", + "label": "NodeInfo::api", + "file_path": "src/utilities/tui/TUIManager.ts", + "symbol_name": "NodeInfo::api", + "line_range": [ + 19, + 33 + ], + "centrality": 1 + }, + { + "uuid": "sym-0f1cb478ccecdbc8fd539805", + "level": "L2", + "label": "NodeInfo", + "file_path": "src/utilities/tui/TUIManager.ts", + "symbol_name": "NodeInfo", + "line_range": [ + 19, + 33 + ], + "centrality": 2 + }, + { + "uuid": "sym-aec4be2724359a1e9a6546dd", + "level": "L3", + "label": "TUIConfig::api", + "file_path": "src/utilities/tui/TUIManager.ts", + "symbol_name": "TUIConfig::api", + "line_range": [ + 35, + 40 + ], + "centrality": 1 + }, + { + "uuid": "sym-68723b3207631cc64e03a451", + "level": "L2", + "label": "TUIConfig", + "file_path": "src/utilities/tui/TUIManager.ts", + "symbol_name": "TUIConfig", + "line_range": [ + 35, + 40 + ], + "centrality": 2 + }, + { + "uuid": "sym-1ee36baf48ad1c31f1bd864a", + "level": "L3", + "label": "TUIManager::api", + "file_path": "src/utilities/tui/TUIManager.ts", + "symbol_name": "TUIManager::api", + "line_range": [ + 186, + 1492 + ], + "centrality": 1 + }, + { + "uuid": "sym-1584cdd93ecbeecaf0d06785", + "level": "L3", + "label": "TUIManager.getInstance", + "file_path": "src/utilities/tui/TUIManager.ts", + "symbol_name": "TUIManager.getInstance", + "line_range": [ + 245, + 250 + ], + "centrality": 1 + }, + { + "uuid": "sym-aaa74a6a96d21052af1b6ccd", + "level": "L3", + "label": "TUIManager.resetInstance", + "file_path": "src/utilities/tui/TUIManager.ts", + "symbol_name": "TUIManager.resetInstance", + "line_range": [ + 255, + 260 + ], + "centrality": 1 + }, + { + "uuid": "sym-603fda2dd0ee016efe3f346d", + "level": "L3", + "label": "TUIManager.start", + "file_path": "src/utilities/tui/TUIManager.ts", + "symbol_name": "TUIManager.start", + "line_range": [ + 276, + 309 + ], + "centrality": 1 + }, + { + "uuid": "sym-6d22d6ded32c3dd355956301", + "level": "L3", + "label": "TUIManager.stop", + "file_path": "src/utilities/tui/TUIManager.ts", + "symbol_name": "TUIManager.stop", + "line_range": [ + 314, + 349 + ], + "centrality": 1 + }, + { + "uuid": "sym-e0c1948adba5f44503e6bedf", + "level": "L3", + "label": "TUIManager.getIsRunning", + "file_path": "src/utilities/tui/TUIManager.ts", + "symbol_name": "TUIManager.getIsRunning", + "line_range": [ + 460, + 462 + ], + "centrality": 1 + }, + { + "uuid": "sym-ec7aeba1622d8fa5b5e46748", + "level": "L3", + "label": "TUIManager.addCmdOutput", + "file_path": "src/utilities/tui/TUIManager.ts", + "symbol_name": "TUIManager.addCmdOutput", + "line_range": [ + 720, + 726 + ], + "centrality": 1 + }, + { + "uuid": "sym-8910a56520e9fd20039ba58a", + "level": "L3", + "label": "TUIManager.clearCmdOutput", + "file_path": "src/utilities/tui/TUIManager.ts", + "symbol_name": "TUIManager.clearCmdOutput", + "line_range": [ + 731, + 733 + ], + "centrality": 1 + }, + { + "uuid": "sym-cf09bd7a00a0fff651c887d5", + "level": "L3", + "label": "TUIManager.setActiveTab", + "file_path": "src/utilities/tui/TUIManager.ts", + "symbol_name": "TUIManager.setActiveTab", + "line_range": [ + 779, + 805 + ], + "centrality": 1 + }, + { + "uuid": "sym-e7df602bf2c2cdf1b6e81783", + "level": "L3", + "label": "TUIManager.nextTab", + "file_path": "src/utilities/tui/TUIManager.ts", + "symbol_name": "TUIManager.nextTab", + "line_range": [ + 810, + 812 + ], + "centrality": 1 + }, + { + "uuid": "sym-d5aac31d3222f78ac81d1cce", + "level": "L3", + "label": "TUIManager.previousTab", + "file_path": "src/utilities/tui/TUIManager.ts", + "symbol_name": "TUIManager.previousTab", + "line_range": [ + 817, + 819 + ], + "centrality": 1 + }, + { + "uuid": "sym-7437b3859c8f71906b326942", + "level": "L3", + "label": "TUIManager.getActiveTab", + "file_path": "src/utilities/tui/TUIManager.ts", + "symbol_name": "TUIManager.getActiveTab", + "line_range": [ + 824, + 826 + ], + "centrality": 1 + }, + { + "uuid": "sym-21f8970b0263857feb2076bd", + "level": "L3", + "label": "TUIManager.scrollUp", + "file_path": "src/utilities/tui/TUIManager.ts", + "symbol_name": "TUIManager.scrollUp", + "line_range": [ + 833, + 845 + ], + "centrality": 1 + }, + { + "uuid": "sym-56cc7d0a4fbf72d5761c93c6", + "level": "L3", + "label": "TUIManager.scrollDown", + "file_path": "src/utilities/tui/TUIManager.ts", + "symbol_name": "TUIManager.scrollDown", + "line_range": [ + 850, + 858 + ], + "centrality": 1 + }, + { + "uuid": "sym-d573864fe75ac3cf41e023b1", + "level": "L3", + "label": "TUIManager.scrollPageUp", + "file_path": "src/utilities/tui/TUIManager.ts", + "symbol_name": "TUIManager.scrollPageUp", + "line_range": [ + 863, + 872 + ], + "centrality": 1 + }, + { + "uuid": "sym-998a3174e4ea3a870d968db4", + "level": "L3", + "label": "TUIManager.scrollPageDown", + "file_path": "src/utilities/tui/TUIManager.ts", + "symbol_name": "TUIManager.scrollPageDown", + "line_range": [ + 877, + 884 + ], + "centrality": 1 + }, + { + "uuid": "sym-7843fb24dcdf29e0ad1a89c4", + "level": "L3", + "label": "TUIManager.scrollToTop", + "file_path": "src/utilities/tui/TUIManager.ts", + "symbol_name": "TUIManager.scrollToTop", + "line_range": [ + 889, + 897 + ], + "centrality": 1 + }, + { + "uuid": "sym-9daff3528e190c43c7fadfb4", + "level": "L3", + "label": "TUIManager.scrollToBottom", + "file_path": "src/utilities/tui/TUIManager.ts", + "symbol_name": "TUIManager.scrollToBottom", + "line_range": [ + 902, + 907 + ], + "centrality": 1 + }, + { + "uuid": "sym-bbf1ba131604cac1e3b85d2b", + "level": "L3", + "label": "TUIManager.toggleAutoScroll", + "file_path": "src/utilities/tui/TUIManager.ts", + "symbol_name": "TUIManager.toggleAutoScroll", + "line_range": [ + 912, + 924 + ], + "centrality": 1 + }, + { + "uuid": "sym-722a0a340f4e87cb3ce49574", + "level": "L3", + "label": "TUIManager.clearLogs", + "file_path": "src/utilities/tui/TUIManager.ts", + "symbol_name": "TUIManager.clearLogs", + "line_range": [ + 957, + 963 + ], + "centrality": 1 + }, + { + "uuid": "sym-f0ddfadb3965aa19186ce2d4", + "level": "L3", + "label": "TUIManager.updateNodeInfo", + "file_path": "src/utilities/tui/TUIManager.ts", + "symbol_name": "TUIManager.updateNodeInfo", + "line_range": [ + 970, + 972 + ], + "centrality": 1 + }, + { + "uuid": "sym-0cbb1488218c6c01fa1169f5", + "level": "L3", + "label": "TUIManager.getNodeInfo", + "file_path": "src/utilities/tui/TUIManager.ts", + "symbol_name": "TUIManager.getNodeInfo", + "line_range": [ + 977, + 979 + ], + "centrality": 1 + }, + { + "uuid": "sym-88560f9541ccc56b6891aa20", + "level": "L3", + "label": "TUIManager.render", + "file_path": "src/utilities/tui/TUIManager.ts", + "symbol_name": "TUIManager.render", + "line_range": [ + 1008, + 1034 + ], + "centrality": 1 + }, + { + "uuid": "sym-26c9da6ec5614cb93a5cbe2c", + "level": "L2", + "label": "TUIManager", + "file_path": "src/utilities/tui/TUIManager.ts", + "symbol_name": "TUIManager", + "line_range": [ + 186, + 1492 + ], + "centrality": 24 + }, + { + "uuid": "sym-fcf030aedb37dcce1a78108d", + "level": "L3", + "label": "CategorizedLogger", + "file_path": "src/utilities/tui/index.ts", + "symbol_name": "CategorizedLogger", + "line_range": [ + 11, + 11 + ], + "centrality": 1 + }, + { + "uuid": "sym-0f16b4cda74d61ad3da42579", + "level": "L3", + "label": "LogLevel", + "file_path": "src/utilities/tui/index.ts", + "symbol_name": "LogLevel", + "line_range": [ + 15, + 15 + ], + "centrality": 1 + }, + { + "uuid": "sym-97c7f2bb4907e815e518d1fe", + "level": "L3", + "label": "LogCategory", + "file_path": "src/utilities/tui/index.ts", + "symbol_name": "LogCategory", + "line_range": [ + 16, + 16 + ], + "centrality": 1 + }, + { + "uuid": "sym-80057b3541e00f7cc0458b89", + "level": "L3", + "label": "LogEntry", + "file_path": "src/utilities/tui/index.ts", + "symbol_name": "LogEntry", + "line_range": [ + 17, + 17 + ], + "centrality": 1 + }, + { + "uuid": "sym-1e715c26e0832b512c931708", + "level": "L3", + "label": "LoggerConfig", + "file_path": "src/utilities/tui/index.ts", + "symbol_name": "LoggerConfig", + "line_range": [ + 18, + 18 + ], + "centrality": 1 + }, + { + "uuid": "sym-c5dba2bba8b1f3ee3b45609e", + "level": "L3", + "label": "LegacyLoggerAdapter", + "file_path": "src/utilities/tui/index.ts", + "symbol_name": "LegacyLoggerAdapter", + "line_range": [ + 22, + 22 + ], + "centrality": 1 + }, + { + "uuid": "sym-1fdf4231b9ddd41ccb09bca4", + "level": "L3", + "label": "TUIManager", + "file_path": "src/utilities/tui/index.ts", + "symbol_name": "TUIManager", + "line_range": [ + 25, + 25 + ], + "centrality": 1 + }, + { + "uuid": "sym-7b2ceeaaadffca84918cad19", + "level": "L3", + "label": "NodeInfo", + "file_path": "src/utilities/tui/index.ts", + "symbol_name": "NodeInfo", + "line_range": [ + 28, + 28 + ], + "centrality": 1 + }, + { + "uuid": "sym-e8a4ffa5ce3c70489f1f1aa7", + "level": "L3", + "label": "TUIConfig", + "file_path": "src/utilities/tui/index.ts", + "symbol_name": "TUIConfig", + "line_range": [ + 28, + 28 + ], + "centrality": 1 + }, + { + "uuid": "sym-862a65237685e8c946afd441", + "level": "L3", + "label": "default", + "file_path": "src/utilities/tui/index.ts", + "symbol_name": "default", + "line_range": [ + 31, + 31 + ], + "centrality": 1 + }, + { + "uuid": "sym-a335758e6a5c9270bc4e17d4", + "level": "L3", + "label": "TAG_TO_CATEGORY", + "file_path": "src/utilities/tui/tagCategories.ts", + "symbol_name": "TAG_TO_CATEGORY", + "line_range": [ + 14, + 118 + ], + "centrality": 1 + }, + { + "uuid": "sym-8a35aa0b8db3d2a1c36ae2a2", + "level": "L3", + "label": "LogCategory", + "file_path": "src/utilities/tui/tagCategories.ts", + "symbol_name": "LogCategory", + "line_range": [ + 121, + 121 + ], + "centrality": 1 + }, + { + "uuid": "sym-991e8f624f9a0de36c800ed6", + "level": "L3", + "label": "validateIfUint8Array", + "file_path": "src/utilities/validateUint8Array.ts", + "symbol_name": "validateIfUint8Array", + "line_range": [ + 1, + 42 + ], + "centrality": 1 + }, + { + "uuid": "sym-03e2b3d5d7abb5be53bc31ef", + "level": "L3", + "label": "Waiter::api", + "file_path": "src/utilities/waiter.ts", + "symbol_name": "Waiter::api", + "line_range": [ + 25, + 151 + ], + "centrality": 1 + }, + { + "uuid": "sym-038a71a0f9c7bcd839c5e263", + "level": "L3", + "label": "Waiter.wait", + "file_path": "src/utilities/waiter.ts", + "symbol_name": "Waiter.wait", + "line_range": [ + 45, + 89 + ], + "centrality": 1 + }, + { + "uuid": "sym-8ee49e77dbe7d64bf9b0692a", + "level": "L3", + "label": "Waiter.resolve", + "file_path": "src/utilities/waiter.ts", + "symbol_name": "Waiter.resolve", + "line_range": [ + 97, + 111 + ], + "centrality": 1 + }, + { + "uuid": "sym-b22108e7980a952d6d61b0a7", + "level": "L3", + "label": "Waiter.preHold", + "file_path": "src/utilities/waiter.ts", + "symbol_name": "Waiter.preHold", + "line_range": [ + 113, + 121 + ], + "centrality": 1 + }, + { + "uuid": "sym-197422eff9f09646d17a07e0", + "level": "L3", + "label": "Waiter.abort", + "file_path": "src/utilities/waiter.ts", + "symbol_name": "Waiter.abort", + "line_range": [ + 128, + 140 + ], + "centrality": 1 + }, + { + "uuid": "sym-00610ea7a3c22dc0f5fc4392", + "level": "L3", + "label": "Waiter.isWaiting", + "file_path": "src/utilities/waiter.ts", + "symbol_name": "Waiter.isWaiting", + "line_range": [ + 148, + 150 + ], + "centrality": 1 + }, + { + "uuid": "sym-b51b7f2293f00327da000bdb", + "level": "L2", + "label": "Waiter", + "file_path": "src/utilities/waiter.ts", + "symbol_name": "Waiter", + "line_range": [ + 25, + 151 + ], + "centrality": 7 + }, + { + "uuid": "sym-2189d115ce2b9c3d49fa0191", + "level": "L3", + "label": "UserPoints::api", + "file_path": "tests/mocks/demosdk-abstraction.ts", + "symbol_name": "UserPoints::api", + "line_range": [ + 1, + 1 + ], + "centrality": 1 + }, + { + "uuid": "sym-ab821687a4299d0d579d49c7", + "level": "L2", + "label": "UserPoints", + "file_path": "tests/mocks/demosdk-abstraction.ts", + "symbol_name": "UserPoints", + "line_range": [ + 1, + 1 + ], + "centrality": 2 + }, + { + "uuid": "sym-42527a84666c4a40976bd94d", + "level": "L3", + "label": "default", + "file_path": "tests/mocks/demosdk-abstraction.ts", + "symbol_name": "default", + "line_range": [ + 3, + 3 + ], + "centrality": 1 + }, + { + "uuid": "sym-baed646297ac7a253a25f030", + "level": "L3", + "label": "default", + "file_path": "tests/mocks/demosdk-build.ts", + "symbol_name": "default", + "line_range": [ + 1, + 1 + ], + "centrality": 1 + }, + { + "uuid": "sym-64c96a6fbf2a162737330407", + "level": "L3", + "label": "ucrypto", + "file_path": "tests/mocks/demosdk-encryption.ts", + "symbol_name": "ucrypto", + "line_range": [ + 6, + 23 + ], + "centrality": 1 + }, + { + "uuid": "sym-832e0134a9591de63a109c96", + "level": "L3", + "label": "uint8ArrayToHex", + "file_path": "tests/mocks/demosdk-encryption.ts", + "symbol_name": "uint8ArrayToHex", + "line_range": [ + 25, + 27 + ], + "centrality": 1 + }, + { + "uuid": "sym-9f42e311e2a8e48662a9fef9", + "level": "L3", + "label": "hexToUint8Array", + "file_path": "tests/mocks/demosdk-encryption.ts", + "symbol_name": "hexToUint8Array", + "line_range": [ + 29, + 32 + ], + "centrality": 1 + }, + { + "uuid": "sym-647f63977118e939cf37b752", + "level": "L3", + "label": "RPCRequest::api", + "file_path": "tests/mocks/demosdk-types.ts", + "symbol_name": "RPCRequest::api", + "line_range": [ + 1, + 4 + ], + "centrality": 1 + }, + { + "uuid": "sym-7bfe6f65424b8f960729882b", + "level": "L2", + "label": "RPCRequest", + "file_path": "tests/mocks/demosdk-types.ts", + "symbol_name": "RPCRequest", + "line_range": [ + 1, + 4 + ], + "centrality": 2 + }, + { + "uuid": "sym-4874e5e75c46b3ce04368854", + "level": "L3", + "label": "RPCResponse::api", + "file_path": "tests/mocks/demosdk-types.ts", + "symbol_name": "RPCResponse::api", + "line_range": [ + 6, + 11 + ], + "centrality": 1 + }, + { + "uuid": "sym-f1d873115e6af0e4c19fc30d", + "level": "L2", + "label": "RPCResponse", + "file_path": "tests/mocks/demosdk-types.ts", + "symbol_name": "RPCResponse", + "line_range": [ + 6, + 11 + ], + "centrality": 2 + }, + { + "uuid": "sym-ef1200ce6553b633be306d70", + "level": "L3", + "label": "SigningAlgorithm::api", + "file_path": "tests/mocks/demosdk-types.ts", + "symbol_name": "SigningAlgorithm::api", + "line_range": [ + 13, + 13 + ], + "centrality": 1 + }, + { + "uuid": "sym-a7b3d969f28a61c51429f843", + "level": "L2", + "label": "SigningAlgorithm", + "file_path": "tests/mocks/demosdk-types.ts", + "symbol_name": "SigningAlgorithm", + "line_range": [ + 13, + 13 + ], + "centrality": 2 + }, + { + "uuid": "sym-7c99fb8ffcbe7d2ec41d5a8e", + "level": "L3", + "label": "IPeer::api", + "file_path": "tests/mocks/demosdk-types.ts", + "symbol_name": "IPeer::api", + "line_range": [ + 15, + 21 + ], + "centrality": 1 + }, + { + "uuid": "sym-5357f545e8ae455cf1dae173", + "level": "L2", + "label": "IPeer", + "file_path": "tests/mocks/demosdk-types.ts", + "symbol_name": "IPeer", + "line_range": [ + 15, + 21 + ], + "centrality": 2 + }, + { + "uuid": "sym-b99103f09316ae6f02324395", + "level": "L3", + "label": "Transaction::api", + "file_path": "tests/mocks/demosdk-types.ts", + "symbol_name": "Transaction::api", + "line_range": [ + 23, + 23 + ], + "centrality": 1 + }, + { + "uuid": "sym-8ae3c2ab051a29a3e38274dd", + "level": "L2", + "label": "Transaction", + "file_path": "tests/mocks/demosdk-types.ts", + "symbol_name": "Transaction", + "line_range": [ + 23, + 23 + ], + "centrality": 2 + }, + { + "uuid": "sym-6fad996cd780f83fa32a107f", + "level": "L3", + "label": "TransactionContent::api", + "file_path": "tests/mocks/demosdk-types.ts", + "symbol_name": "TransactionContent::api", + "line_range": [ + 24, + 24 + ], + "centrality": 1 + }, + { + "uuid": "sym-a9a76108c6152698a3e7bac3", + "level": "L2", + "label": "TransactionContent", + "file_path": "tests/mocks/demosdk-types.ts", + "symbol_name": "TransactionContent", + "line_range": [ + 24, + 24 + ], + "centrality": 2 + }, + { + "uuid": "sym-32aa27e94fd2c2b4253f8599", + "level": "L3", + "label": "NativeTablesHashes::api", + "file_path": "tests/mocks/demosdk-types.ts", + "symbol_name": "NativeTablesHashes::api", + "line_range": [ + 25, + 25 + ], + "centrality": 1 + }, + { + "uuid": "sym-9e3a0cabaea4ec69a300f18d", + "level": "L2", + "label": "NativeTablesHashes", + "file_path": "tests/mocks/demosdk-types.ts", + "symbol_name": "NativeTablesHashes", + "line_range": [ + 25, + 25 + ], + "centrality": 2 + }, + { + "uuid": "sym-2781fd4676b367f79a014c51", + "level": "L3", + "label": "Web2GCRData::api", + "file_path": "tests/mocks/demosdk-types.ts", + "symbol_name": "Web2GCRData::api", + "line_range": [ + 26, + 26 + ], + "centrality": 1 + }, + { + "uuid": "sym-d06a4eb520adc83b781eb1b7", + "level": "L2", + "label": "Web2GCRData", + "file_path": "tests/mocks/demosdk-types.ts", + "symbol_name": "Web2GCRData", + "line_range": [ + 26, + 26 + ], + "centrality": 2 + }, + { + "uuid": "sym-782b8dfbf51fdf9fc11a6129", + "level": "L3", + "label": "XMScript::api", + "file_path": "tests/mocks/demosdk-types.ts", + "symbol_name": "XMScript::api", + "line_range": [ + 27, + 27 + ], + "centrality": 1 + }, + { + "uuid": "sym-e563ba4e1cba0422d3f6d351", + "level": "L2", + "label": "XMScript", + "file_path": "tests/mocks/demosdk-types.ts", + "symbol_name": "XMScript", + "line_range": [ + 27, + 27 + ], + "centrality": 2 + }, + { + "uuid": "sym-e9dd6caad492c208cbaa408f", + "level": "L3", + "label": "Tweet::api", + "file_path": "tests/mocks/demosdk-types.ts", + "symbol_name": "Tweet::api", + "line_range": [ + 28, + 28 + ], + "centrality": 1 + }, + { + "uuid": "sym-38a97c77e145541444f5b557", + "level": "L2", + "label": "Tweet", + "file_path": "tests/mocks/demosdk-types.ts", + "symbol_name": "Tweet", + "line_range": [ + 28, + 28 + ], + "centrality": 2 + }, + { + "uuid": "sym-021d447da9c9cdc0a8828fbd", + "level": "L3", + "label": "DiscordMessage::api", + "file_path": "tests/mocks/demosdk-types.ts", + "symbol_name": "DiscordMessage::api", + "line_range": [ + 29, + 29 + ], + "centrality": 1 + }, + { + "uuid": "sym-77698a6f7f42a84ed2ee5769", + "level": "L2", + "label": "DiscordMessage", + "file_path": "tests/mocks/demosdk-types.ts", + "symbol_name": "DiscordMessage", + "line_range": [ + 29, + 29 + ], + "centrality": 2 + }, + { + "uuid": "sym-84cccde4cee5a59c48e09624", + "level": "L3", + "label": "IWeb2Request::api", + "file_path": "tests/mocks/demosdk-types.ts", + "symbol_name": "IWeb2Request::api", + "line_range": [ + 30, + 30 + ], + "centrality": 1 + }, + { + "uuid": "sym-99dbc8dc422257de18a23cde", + "level": "L2", + "label": "IWeb2Request", + "file_path": "tests/mocks/demosdk-types.ts", + "symbol_name": "IWeb2Request", + "line_range": [ + 30, + 30 + ], + "centrality": 2 + }, + { + "uuid": "sym-6a5dac941b174a6b10665841", + "level": "L3", + "label": "IOperation::api", + "file_path": "tests/mocks/demosdk-types.ts", + "symbol_name": "IOperation::api", + "line_range": [ + 31, + 31 + ], + "centrality": 1 + }, + { + "uuid": "sym-f5cd26473ebc041f634af528", + "level": "L2", + "label": "IOperation", + "file_path": "tests/mocks/demosdk-types.ts", + "symbol_name": "IOperation", + "line_range": [ + 31, + 31 + ], + "centrality": 2 + }, + { + "uuid": "sym-115190a05383b21a4bb3023b", + "level": "L3", + "label": "EncryptedTransaction::api", + "file_path": "tests/mocks/demosdk-types.ts", + "symbol_name": "EncryptedTransaction::api", + "line_range": [ + 32, + 32 + ], + "centrality": 1 + }, + { + "uuid": "sym-2e7f6d391d8c13d0a27849db", + "level": "L2", + "label": "EncryptedTransaction", + "file_path": "tests/mocks/demosdk-types.ts", + "symbol_name": "EncryptedTransaction", + "line_range": [ + 32, + 32 + ], + "centrality": 2 + }, + { + "uuid": "sym-a3469c23bd9262143421b370", + "level": "L3", + "label": "BrowserRequest::api", + "file_path": "tests/mocks/demosdk-types.ts", + "symbol_name": "BrowserRequest::api", + "line_range": [ + 33, + 33 + ], + "centrality": 1 + }, + { + "uuid": "sym-0303db1a28d7da98e3bd3feb", + "level": "L2", + "label": "BrowserRequest", + "file_path": "tests/mocks/demosdk-types.ts", + "symbol_name": "BrowserRequest", + "line_range": [ + 33, + 33 + ], + "centrality": 2 + }, + { + "uuid": "sym-fd659db04515e442facc5b02", + "level": "L3", + "label": "ValidationData::api", + "file_path": "tests/mocks/demosdk-types.ts", + "symbol_name": "ValidationData::api", + "line_range": [ + 34, + 34 + ], + "centrality": 1 + }, + { + "uuid": "sym-1bb487944cb5b12d3757f07c", + "level": "L2", + "label": "ValidationData", + "file_path": "tests/mocks/demosdk-types.ts", + "symbol_name": "ValidationData", + "line_range": [ + 34, + 34 + ], + "centrality": 2 + }, + { + "uuid": "sym-f1687c66376fa28aeb417788", + "level": "L3", + "label": "UserPoints::api", + "file_path": "tests/mocks/demosdk-types.ts", + "symbol_name": "UserPoints::api", + "line_range": [ + 35, + 35 + ], + "centrality": 1 + }, + { + "uuid": "sym-42ab5fb64ac1e70a6473f6e5", + "level": "L2", + "label": "UserPoints", + "file_path": "tests/mocks/demosdk-types.ts", + "symbol_name": "UserPoints", + "line_range": [ + 35, + 35 + ], + "centrality": 2 + }, + { + "uuid": "sym-3a10c16293fdd85144fa70cb", + "level": "L3", + "label": "Demos::api", + "file_path": "tests/mocks/demosdk-websdk.ts", + "symbol_name": "Demos::api", + "line_range": [ + 1, + 24 + ], + "centrality": 1 + }, + { + "uuid": "sym-611b4918c4bdad73125bf034", + "level": "L3", + "label": "Demos.connectWallet", + "file_path": "tests/mocks/demosdk-websdk.ts", + "symbol_name": "Demos.connectWallet", + "line_range": [ + 5, + 9 + ], + "centrality": 1 + }, + { + "uuid": "sym-5b4465fe4b287e6087e57cea", + "level": "L3", + "label": "Demos.rpcCall", + "file_path": "tests/mocks/demosdk-websdk.ts", + "symbol_name": "Demos.rpcCall", + "line_range": [ + 11, + 23 + ], + "centrality": 1 + }, + { + "uuid": "sym-b487a1ce833804d2271e3c96", + "level": "L2", + "label": "Demos", + "file_path": "tests/mocks/demosdk-websdk.ts", + "symbol_name": "Demos", + "line_range": [ + 1, + 24 + ], + "centrality": 4 + }, + { + "uuid": "sym-3c1f2e978ed4af636838378b", + "level": "L3", + "label": "skeletons", + "file_path": "tests/mocks/demosdk-websdk.ts", + "symbol_name": "skeletons", + "line_range": [ + 26, + 26 + ], + "centrality": 1 + }, + { + "uuid": "sym-a5fcf79ed272694d8bed0a7f", + "level": "L3", + "label": "EVM", + "file_path": "tests/mocks/demosdk-xm-localsdk.ts", + "symbol_name": "EVM", + "line_range": [ + 1, + 1 + ], + "centrality": 1 + }, + { + "uuid": "sym-6a06789ec5630226d1606761", + "level": "L3", + "label": "XRP", + "file_path": "tests/mocks/demosdk-xm-localsdk.ts", + "symbol_name": "XRP", + "line_range": [ + 2, + 2 + ], + "centrality": 1 + }, + { + "uuid": "sym-252318ccecdf3dae90cd765a", + "level": "L3", + "label": "multichain", + "file_path": "tests/mocks/demosdk-xm-localsdk.ts", + "symbol_name": "multichain", + "line_range": [ + 3, + 3 + ], + "centrality": 1 + }, + { + "uuid": "sym-95315e0446bf0d1ca7c636ed", + "level": "L3", + "label": "default", + "file_path": "tests/mocks/demosdk-xm-localsdk.ts", + "symbol_name": "default", + "line_range": [ + 5, + 5 + ], + "centrality": 1 + } + ], + "edges": [ + { + "from": "sym-4ed35d165f49e04872c7e4c4", + "to": "mod-4f240da290d74961db3018c1", + "type": "depends_on" + }, + { + "from": "mod-2546b562762a3da08a65696c", + "to": "mod-7a1941c482905a159b7f2f46", + "type": "depends_on" + }, + { + "from": "mod-840f81eb11629800896bc68c", + "to": "mod-7a1941c482905a159b7f2f46", + "type": "depends_on" + }, + { + "from": "mod-a11e8e55a0387f976794ebc2", + "to": "mod-7a1941c482905a159b7f2f46", + "type": "depends_on" + }, + { + "from": "mod-5616093476c766ebb88973fc", + "to": "mod-aedcf7cff384ad96bb4dd624", + "type": "depends_on" + }, + { + "from": "mod-8199ebab294ab6b8aa0e2c60", + "to": "mod-61ec49ba22d46e7eeff82d2c", + "type": "depends_on" + }, + { + "from": "mod-61ec49ba22d46e7eeff82d2c", + "to": "mod-5fd74e18c62882ed9c84a4c4", + "type": "depends_on" + }, + { + "from": "sym-4c758022ba1409f727162ccd", + "to": "mod-61ec49ba22d46e7eeff82d2c", + "type": "depends_on" + }, + { + "from": "sym-a3457454de6108179f1ec8da", + "to": "sym-4c758022ba1409f727162ccd", + "type": "depends_on" + }, + { + "from": "sym-aaf45e8b9a20d0605c7b9457", + "to": "sym-4c758022ba1409f727162ccd", + "type": "depends_on" + }, + { + "from": "sym-021316b8a7f0f31c1deb509c", + "to": "sym-4c758022ba1409f727162ccd", + "type": "depends_on" + }, + { + "from": "sym-901bc277fa06e0174b43ba7b", + "to": "mod-5fd74e18c62882ed9c84a4c4", + "type": "depends_on" + }, + { + "from": "sym-ba61b2da568a8430957bebda", + "to": "sym-901bc277fa06e0174b43ba7b", + "type": "depends_on" + }, + { + "from": "sym-e900ebe76ecce43aaf5d24f2", + "to": "sym-901bc277fa06e0174b43ba7b", + "type": "depends_on" + }, + { + "from": "sym-6504c0a9f99e4155e106ee87", + "to": "mod-4f82a94b1d6cb4bf9aed1178", + "type": "depends_on" + }, + { + "from": "sym-3f4bb30871f440aa6fe225dd", + "to": "sym-6504c0a9f99e4155e106ee87", + "type": "depends_on" + }, + { + "from": "sym-f635182864f3ac12fd146b08", + "to": "mod-4f82a94b1d6cb4bf9aed1178", + "type": "depends_on" + }, + { + "from": "sym-391cd0ad29e526ec762b9e17", + "to": "sym-f635182864f3ac12fd146b08", + "type": "depends_on" + }, + { + "from": "sym-c0866f4c8525a7cda3643511", + "to": "mod-4f82a94b1d6cb4bf9aed1178", + "type": "depends_on" + }, + { + "from": "sym-1b784c11203f8434f7a7b422", + "to": "sym-c0866f4c8525a7cda3643511", + "type": "depends_on" + }, + { + "from": "sym-03745b230e975b586dc777a1", + "to": "mod-4f82a94b1d6cb4bf9aed1178", + "type": "depends_on" + }, + { + "from": "sym-330150d457066afcda5b7a46", + "to": "sym-03745b230e975b586dc777a1", + "type": "depends_on" + }, + { + "from": "sym-df323420a40015574b5089aa", + "to": "mod-4f82a94b1d6cb4bf9aed1178", + "type": "depends_on" + }, + { + "from": "sym-b1dca79c5b291f8dd61a833d", + "to": "sym-df323420a40015574b5089aa", + "type": "depends_on" + }, + { + "from": "sym-c3502e1f3d90c7c26761f5f4", + "to": "mod-4f82a94b1d6cb4bf9aed1178", + "type": "depends_on" + }, + { + "from": "sym-9ccdf92e4adf9fa07a7e377e", + "to": "sym-c3502e1f3d90c7c26761f5f4", + "type": "depends_on" + }, + { + "from": "sym-06f0bf4480d67cccc3add52b", + "to": "mod-4f82a94b1d6cb4bf9aed1178", + "type": "depends_on" + }, + { + "from": "sym-ad0e77bff9ee77397c79a3fa", + "to": "sym-06f0bf4480d67cccc3add52b", + "type": "depends_on" + }, + { + "from": "mod-c49fd7aa51f86aec35688868", + "to": "mod-900742fc8a97706a00e06129", + "type": "depends_on" + }, + { + "from": "sym-95dd67d0cd361cb5f2b88afa", + "to": "mod-c49fd7aa51f86aec35688868", + "type": "depends_on" + }, + { + "from": "mod-38ca26657f3ebd4b61cbc829", + "to": "mod-0a687d4a8de66750c8ed59f7", + "type": "depends_on" + }, + { + "from": "mod-0a687d4a8de66750c8ed59f7", + "to": "mod-3a3b7b050c56c146875c18fb", + "type": "depends_on" + }, + { + "from": "mod-0a687d4a8de66750c8ed59f7", + "to": "mod-b2c7d957ae05ce535d8f8e2e", + "type": "depends_on" + }, + { + "from": "sym-f3028da883261e86359dccc8", + "to": "mod-0a687d4a8de66750c8ed59f7", + "type": "depends_on" + }, + { + "from": "sym-2b40125fbedf0cb6fba89e95", + "to": "sym-f3028da883261e86359dccc8", + "type": "depends_on" + }, + { + "from": "sym-1139b73552af9d40288f4c90", + "to": "mod-0a687d4a8de66750c8ed59f7", + "type": "depends_on" + }, + { + "from": "sym-4d24e52bc3a5c0bdcd452d4c", + "to": "sym-1139b73552af9d40288f4c90", + "type": "depends_on" + }, + { + "from": "sym-313f38ec2adc5733ed48c0e8", + "to": "mod-0a687d4a8de66750c8ed59f7", + "type": "depends_on" + }, + { + "from": "sym-1d808b63fbf2c67fb439c095", + "to": "sym-313f38ec2adc5733ed48c0e8", + "type": "depends_on" + }, + { + "from": "sym-e32e44bfcebdf49d9a969318", + "to": "sym-313f38ec2adc5733ed48c0e8", + "type": "depends_on" + }, + { + "from": "sym-1ec5df753d7d6df2a3c0b665", + "to": "sym-313f38ec2adc5733ed48c0e8", + "type": "depends_on" + }, + { + "from": "sym-0d9241c6cb29dc51ca2476e4", + "to": "sym-313f38ec2adc5733ed48c0e8", + "type": "depends_on" + }, + { + "from": "sym-916fdcbe410020e10dd53012", + "to": "sym-313f38ec2adc5733ed48c0e8", + "type": "depends_on" + }, + { + "from": "mod-d9efcaa28359a29a24e998ca", + "to": "mod-3a3b7b050c56c146875c18fb", + "type": "depends_on" + }, + { + "from": "mod-d9efcaa28359a29a24e998ca", + "to": "mod-b2c7d957ae05ce535d8f8e2e", + "type": "depends_on" + }, + { + "from": "mod-d9efcaa28359a29a24e998ca", + "to": "mod-0a687d4a8de66750c8ed59f7", + "type": "depends_on" + }, + { + "from": "sym-7f0e02118f2b037cac8e5b61", + "to": "mod-d9efcaa28359a29a24e998ca", + "type": "depends_on" + }, + { + "from": "sym-68ad200c1f9a7b73f1767104", + "to": "sym-7f0e02118f2b037cac8e5b61", + "type": "depends_on" + }, + { + "from": "sym-c016626e9c331280cdb4d8fc", + "to": "mod-d9efcaa28359a29a24e998ca", + "type": "depends_on" + }, + { + "from": "sym-896653dd09ecab6ef18eeafb", + "to": "sym-c016626e9c331280cdb4d8fc", + "type": "depends_on" + }, + { + "from": "sym-ce6b65968084be2fc0039e97", + "to": "sym-c016626e9c331280cdb4d8fc", + "type": "depends_on" + }, + { + "from": "sym-92037a825e30d024067d8c76", + "to": "sym-c016626e9c331280cdb4d8fc", + "type": "depends_on" + }, + { + "from": "sym-c401ae9aee36cb4f36786f2f", + "to": "sym-c016626e9c331280cdb4d8fc", + "type": "depends_on" + }, + { + "from": "sym-96977030f2cd4aa7455c21d3", + "to": "sym-c016626e9c331280cdb4d8fc", + "type": "depends_on" + }, + { + "from": "sym-7f843674679cf60bbd6f5a72", + "to": "mod-e0ccf1cd36e1b4bd9f23a160", + "type": "depends_on" + }, + { + "from": "sym-d740cb976f6edd060dd118c8", + "to": "sym-7f843674679cf60bbd6f5a72", + "type": "depends_on" + }, + { + "from": "mod-900742fc8a97706a00e06129", + "to": "mod-e0ccf1cd36e1b4bd9f23a160", + "type": "depends_on" + }, + { + "from": "mod-900742fc8a97706a00e06129", + "to": "mod-3653cf91ec233fdbb23d4d78", + "type": "depends_on" + }, + { + "from": "mod-900742fc8a97706a00e06129", + "to": "mod-a0a399c17b09d2d59cb4c8a4", + "type": "depends_on" + }, + { + "from": "mod-900742fc8a97706a00e06129", + "to": "mod-1de8a1fb6a48c6a931549f30", + "type": "depends_on" + }, + { + "from": "mod-900742fc8a97706a00e06129", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "mod-900742fc8a97706a00e06129", + "to": "mod-8aef488fb2fc78414791967a", + "type": "depends_on" + }, + { + "from": "mod-900742fc8a97706a00e06129", + "to": "mod-84552d58b6743daab10f83b3", + "type": "depends_on" + }, + { + "from": "mod-900742fc8a97706a00e06129", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-900742fc8a97706a00e06129", + "to": "mod-16a76d1c87dfcbecec53d1e0", + "type": "depends_on" + }, + { + "from": "mod-900742fc8a97706a00e06129", + "to": "mod-edb169ce79c580ad64535bf1", + "type": "depends_on" + }, + { + "from": "mod-900742fc8a97706a00e06129", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-38287d16f095005b0eb7a36e", + "to": "mod-900742fc8a97706a00e06129", + "type": "depends_on" + }, + { + "from": "sym-87c14fd05b89eaba4fbda8d2", + "to": "sym-38287d16f095005b0eb7a36e", + "type": "depends_on" + }, + { + "from": "sym-73c5d831e416f436360bae24", + "to": "sym-38287d16f095005b0eb7a36e", + "type": "depends_on" + }, + { + "from": "sym-e39ea46175ad44de17c9efe4", + "to": "mod-3653cf91ec233fdbb23d4d78", + "type": "depends_on" + }, + { + "from": "sym-f7735d839019e173ccdd3e4f", + "to": "sym-e39ea46175ad44de17c9efe4", + "type": "depends_on" + }, + { + "from": "sym-2b5fdb6334800012c0c21e0a", + "to": "mod-a0a399c17b09d2d59cb4c8a4", + "type": "depends_on" + }, + { + "from": "sym-8bc60a2dd19a6fdb5e3076e8", + "to": "sym-2b5fdb6334800012c0c21e0a", + "type": "depends_on" + }, + { + "from": "sym-e192f30b074d1edf17119667", + "to": "mod-a0a399c17b09d2d59cb4c8a4", + "type": "depends_on" + }, + { + "from": "sym-4bc719fa7ed33d0c0fb06639", + "to": "sym-e192f30b074d1edf17119667", + "type": "depends_on" + }, + { + "from": "sym-09396517c2f92c1491430417", + "to": "mod-a0a399c17b09d2d59cb4c8a4", + "type": "depends_on" + }, + { + "from": "sym-b8035411223e72d7f64883ff", + "to": "sym-09396517c2f92c1491430417", + "type": "depends_on" + }, + { + "from": "sym-715811d58eff5b235d047fe4", + "to": "mod-a0a399c17b09d2d59cb4c8a4", + "type": "depends_on" + }, + { + "from": "sym-e19a1b0efe47dafc170c58ba", + "to": "sym-715811d58eff5b235d047fe4", + "type": "depends_on" + }, + { + "from": "sym-e7f1193634eb6a1432bab90e", + "to": "mod-a0a399c17b09d2d59cb4c8a4", + "type": "depends_on" + }, + { + "from": "sym-29cdb4a3679630a0358d0bb9", + "to": "sym-e7f1193634eb6a1432bab90e", + "type": "depends_on" + }, + { + "from": "mod-7b49c1b727b9aee8612f7ada", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-044c0cd881405407920926a2", + "to": "mod-7b49c1b727b9aee8612f7ada", + "type": "depends_on" + }, + { + "from": "sym-39ad83de6dbc734ee6f2eae9", + "to": "sym-044c0cd881405407920926a2", + "type": "depends_on" + }, + { + "from": "sym-b24fcbb1e6da7606d5ab956d", + "to": "sym-044c0cd881405407920926a2", + "type": "depends_on" + }, + { + "from": "sym-a97260d74feb8d40b8159924", + "to": "sym-044c0cd881405407920926a2", + "type": "depends_on" + }, + { + "from": "sym-3d6be09763d2fc4d2f20bd02", + "to": "sym-044c0cd881405407920926a2", + "type": "depends_on" + }, + { + "from": "sym-da8ad413c16f675f9c1bd0db", + "to": "sym-044c0cd881405407920926a2", + "type": "depends_on" + }, + { + "from": "sym-e22d61e07c82d37fa1f79792", + "to": "mod-8dfd4cfe7c92238e8a295176", + "type": "depends_on" + }, + { + "from": "sym-f9fd6387097446254eb935c8", + "to": "sym-e22d61e07c82d37fa1f79792", + "type": "depends_on" + }, + { + "from": "sym-dbefc3247e30a5823c8b43ce", + "to": "mod-8dfd4cfe7c92238e8a295176", + "type": "depends_on" + }, + { + "from": "sym-64f05073eb8b63e0b34daf41", + "to": "sym-dbefc3247e30a5823c8b43ce", + "type": "depends_on" + }, + { + "from": "sym-7188ccb0ba83016cd3801872", + "to": "mod-8dfd4cfe7c92238e8a295176", + "type": "depends_on" + }, + { + "from": "sym-c4370920fdeb465ef17c8b21", + "to": "sym-7188ccb0ba83016cd3801872", + "type": "depends_on" + }, + { + "from": "sym-6d351d10f2f5649ab968f2b2", + "to": "mod-8dfd4cfe7c92238e8a295176", + "type": "depends_on" + }, + { + "from": "sym-883a5cc83569ae7c58e412a3", + "to": "mod-8dfd4cfe7c92238e8a295176", + "type": "depends_on" + }, + { + "from": "sym-8372518a1ed84643b175aa1f", + "to": "mod-8dfd4cfe7c92238e8a295176", + "type": "depends_on" + }, + { + "from": "sym-8372518a1ed84643b175aa1f", + "to": "sym-6d351d10f2f5649ab968f2b2", + "type": "calls" + }, + { + "from": "sym-a51c939dff4a5e40a1fec4f4", + "to": "mod-8dfd4cfe7c92238e8a295176", + "type": "depends_on" + }, + { + "from": "sym-a51c939dff4a5e40a1fec4f4", + "to": "sym-6d351d10f2f5649ab968f2b2", + "type": "calls" + }, + { + "from": "sym-f6143006b5bb02e58d1cdfd1", + "to": "mod-8dfd4cfe7c92238e8a295176", + "type": "depends_on" + }, + { + "from": "sym-f6143006b5bb02e58d1cdfd1", + "to": "sym-883a5cc83569ae7c58e412a3", + "type": "calls" + }, + { + "from": "sym-93b583f25b39dd5043a57609", + "to": "mod-8dfd4cfe7c92238e8a295176", + "type": "depends_on" + }, + { + "from": "sym-93b583f25b39dd5043a57609", + "to": "sym-883a5cc83569ae7c58e412a3", + "type": "calls" + }, + { + "from": "sym-6a61ddc900f83502ce966c87", + "to": "mod-8dfd4cfe7c92238e8a295176", + "type": "depends_on" + }, + { + "from": "sym-6a61ddc900f83502ce966c87", + "to": "sym-883a5cc83569ae7c58e412a3", + "type": "calls" + }, + { + "from": "sym-1dc16c4d97767da5a8ba92df", + "to": "mod-8dfd4cfe7c92238e8a295176", + "type": "depends_on" + }, + { + "from": "sym-1dc16c4d97767da5a8ba92df", + "to": "sym-883a5cc83569ae7c58e412a3", + "type": "calls" + }, + { + "from": "sym-8a36fd0bc7a6c7246c94552d", + "to": "mod-8dfd4cfe7c92238e8a295176", + "type": "depends_on" + }, + { + "from": "sym-8a36fd0bc7a6c7246c94552d", + "to": "sym-883a5cc83569ae7c58e412a3", + "type": "calls" + }, + { + "from": "sym-b1ecce6dd13426331f10ff7a", + "to": "mod-8dfd4cfe7c92238e8a295176", + "type": "depends_on" + }, + { + "from": "sym-b1ecce6dd13426331f10ff7a", + "to": "sym-883a5cc83569ae7c58e412a3", + "type": "calls" + }, + { + "from": "sym-3ccaac6d613ab621d48c1bd6", + "to": "mod-8dfd4cfe7c92238e8a295176", + "type": "depends_on" + }, + { + "from": "sym-3ccaac6d613ab621d48c1bd6", + "to": "sym-883a5cc83569ae7c58e412a3", + "type": "calls" + }, + { + "from": "sym-03d2f03f466628c99110c9fe", + "to": "mod-8dfd4cfe7c92238e8a295176", + "type": "depends_on" + }, + { + "from": "sym-03d2f03f466628c99110c9fe", + "to": "sym-883a5cc83569ae7c58e412a3", + "type": "calls" + }, + { + "from": "sym-e301425e702840c7c452eb5a", + "to": "mod-8dfd4cfe7c92238e8a295176", + "type": "depends_on" + }, + { + "from": "sym-e301425e702840c7c452eb5a", + "to": "sym-883a5cc83569ae7c58e412a3", + "type": "calls" + }, + { + "from": "sym-65612d35e155d68ea523c22f", + "to": "mod-8dfd4cfe7c92238e8a295176", + "type": "depends_on" + }, + { + "from": "sym-65612d35e155d68ea523c22f", + "to": "sym-883a5cc83569ae7c58e412a3", + "type": "calls" + }, + { + "from": "sym-94068717fb4cbb8a20aef4a9", + "to": "mod-8dfd4cfe7c92238e8a295176", + "type": "depends_on" + }, + { + "from": "sym-94068717fb4cbb8a20aef4a9", + "to": "sym-883a5cc83569ae7c58e412a3", + "type": "calls" + }, + { + "from": "mod-0fc27af2e03da13014e76beb", + "to": "mod-7b49c1b727b9aee8612f7ada", + "type": "depends_on" + }, + { + "from": "mod-0fc27af2e03da13014e76beb", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-73813058cbafe75d8bc014cb", + "to": "mod-dba449d7aefb98c5518cd61d", + "type": "depends_on" + }, + { + "from": "sym-72b80bba0d6d6f79a03804c0", + "to": "mod-dba449d7aefb98c5518cd61d", + "type": "depends_on" + }, + { + "from": "sym-6e63a24523fe42cfb5e7eb17", + "to": "mod-dba449d7aefb98c5518cd61d", + "type": "depends_on" + }, + { + "from": "sym-593116d1b2ae359f4e87ea11", + "to": "mod-dba449d7aefb98c5518cd61d", + "type": "depends_on" + }, + { + "from": "sym-435a8eb4599ff7a416f89497", + "to": "mod-dba449d7aefb98c5518cd61d", + "type": "depends_on" + }, + { + "from": "sym-dedd79d84d7229103a1ddb7a", + "to": "mod-dba449d7aefb98c5518cd61d", + "type": "depends_on" + }, + { + "from": "sym-f87642844d289130eabd697d", + "to": "sym-dedd79d84d7229103a1ddb7a", + "type": "depends_on" + }, + { + "from": "sym-7f14f88347bcca244cf8a411", + "to": "mod-dba449d7aefb98c5518cd61d", + "type": "depends_on" + }, + { + "from": "sym-7adc23abf4e8a8acec688f93", + "to": "sym-7f14f88347bcca244cf8a411", + "type": "depends_on" + }, + { + "from": "sym-3a341cd97aa6d9e263ab4efe", + "to": "mod-dba449d7aefb98c5518cd61d", + "type": "depends_on" + }, + { + "from": "sym-c982f2f82f706d9d86aea680", + "to": "sym-3a341cd97aa6d9e263ab4efe", + "type": "depends_on" + }, + { + "from": "sym-55f1e23922682c986d5e78a8", + "to": "mod-5284e69a41b77e33ceb347d7", + "type": "depends_on" + }, + { + "from": "sym-05e822a8c9768075cd3112d1", + "to": "sym-55f1e23922682c986d5e78a8", + "type": "depends_on" + }, + { + "from": "sym-f8a68c982e390715737b8a34", + "to": "mod-5284e69a41b77e33ceb347d7", + "type": "depends_on" + }, + { + "from": "sym-75bce596d3a3b20b32eae3a9", + "to": "sym-f8a68c982e390715737b8a34", + "type": "depends_on" + }, + { + "from": "sym-04bc154da92633243986d7b2", + "to": "mod-5284e69a41b77e33ceb347d7", + "type": "depends_on" + }, + { + "from": "sym-2d3d0f8001aa1e3e157f6635", + "to": "sym-04bc154da92633243986d7b2", + "type": "depends_on" + }, + { + "from": "sym-9ec9d14b420c136f2ad055ab", + "to": "mod-5284e69a41b77e33ceb347d7", + "type": "depends_on" + }, + { + "from": "sym-22888f94aabf4d19027aa29a", + "to": "mod-5284e69a41b77e33ceb347d7", + "type": "depends_on" + }, + { + "from": "mod-0bdba6781d714c651de05352", + "to": "mod-dba449d7aefb98c5518cd61d", + "type": "depends_on" + }, + { + "from": "mod-0bdba6781d714c651de05352", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-28727c3b132db5057f5a96ec", + "to": "mod-0bdba6781d714c651de05352", + "type": "depends_on" + }, + { + "from": "sym-476f58f0f712fc1238cd3339", + "to": "sym-28727c3b132db5057f5a96ec", + "type": "depends_on" + }, + { + "from": "sym-c24ee6e9b89588b68d37c5a7", + "to": "sym-28727c3b132db5057f5a96ec", + "type": "depends_on" + }, + { + "from": "sym-b058a864b0147b40ef22dc34", + "to": "sym-28727c3b132db5057f5a96ec", + "type": "depends_on" + }, + { + "from": "sym-182e4b2c4ed82c4649e788c8", + "to": "sym-28727c3b132db5057f5a96ec", + "type": "depends_on" + }, + { + "from": "sym-8189287fafe28f1a29259bb6", + "to": "sym-28727c3b132db5057f5a96ec", + "type": "depends_on" + }, + { + "from": "sym-2fb5f502d3c62d4198da0ce5", + "to": "sym-28727c3b132db5057f5a96ec", + "type": "depends_on" + }, + { + "from": "mod-966e17be37a66604fed3722e", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-31c33be12d870d49abebd5fa", + "to": "mod-966e17be37a66604fed3722e", + "type": "depends_on" + }, + { + "from": "sym-cde4ce83d38070c40a1ce899", + "to": "sym-31c33be12d870d49abebd5fa", + "type": "depends_on" + }, + { + "from": "sym-5d646fd1cfe0e17cb51346f1", + "to": "sym-31c33be12d870d49abebd5fa", + "type": "depends_on" + }, + { + "from": "sym-b9b90d82b944c88c1ab58de0", + "to": "sym-31c33be12d870d49abebd5fa", + "type": "depends_on" + }, + { + "from": "mod-fedfa2f8f2d69ea52cabd065", + "to": "mod-966e17be37a66604fed3722e", + "type": "depends_on" + }, + { + "from": "mod-fedfa2f8f2d69ea52cabd065", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-09e939d9272236688a28974a", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-09e939d9272236688a28974a", + "to": "mod-08315e6901cb53376d13cc70", + "type": "depends_on" + }, + { + "from": "mod-09e939d9272236688a28974a", + "to": "mod-16a76d1c87dfcbecec53d1e0", + "type": "depends_on" + }, + { + "from": "mod-09e939d9272236688a28974a", + "to": "mod-e395bfa94e646748f1e3298e", + "type": "depends_on" + }, + { + "from": "mod-09e939d9272236688a28974a", + "to": "mod-e3c2dc56fd38d656d5235000", + "type": "depends_on" + }, + { + "from": "mod-09e939d9272236688a28974a", + "to": "mod-525c86f0484f1a8328f90e21", + "type": "depends_on" + }, + { + "from": "mod-09e939d9272236688a28974a", + "to": "mod-1d4743119cc890fadab85fb7", + "type": "depends_on" + }, + { + "from": "mod-09e939d9272236688a28974a", + "to": "mod-a1bb18b05142b623b9fb8be4", + "type": "depends_on" + }, + { + "from": "mod-09e939d9272236688a28974a", + "to": "mod-be7b10b7e34156b0bae273f7", + "type": "depends_on" + }, + { + "from": "mod-09e939d9272236688a28974a", + "to": "mod-24557f0b00a0d628de80e5eb", + "type": "depends_on" + }, + { + "from": "mod-09e939d9272236688a28974a", + "to": "mod-24557f0b00a0d628de80e5eb", + "type": "depends_on" + }, + { + "from": "sym-3f102a31789c1c42742dd190", + "to": "mod-09e939d9272236688a28974a", + "type": "depends_on" + }, + { + "from": "sym-d0d64d4fc8e8d4b4ec31835f", + "to": "sym-3f102a31789c1c42742dd190", + "type": "depends_on" + }, + { + "from": "sym-7bf629517168329e74c2bd32", + "to": "sym-3f102a31789c1c42742dd190", + "type": "depends_on" + }, + { + "from": "sym-b29e811fe491350308ac06b8", + "to": "sym-3f102a31789c1c42742dd190", + "type": "depends_on" + }, + { + "from": "sym-ff86ceaf6364a62d78d53ed6", + "to": "sym-3f102a31789c1c42742dd190", + "type": "depends_on" + }, + { + "from": "sym-6995a8f5087f01da57510a6e", + "to": "sym-3f102a31789c1c42742dd190", + "type": "depends_on" + }, + { + "from": "sym-0555c3e21f71d512bf2aa06d", + "to": "sym-3f102a31789c1c42742dd190", + "type": "depends_on" + }, + { + "from": "sym-088e4feca2d65625730710af", + "to": "sym-3f102a31789c1c42742dd190", + "type": "depends_on" + }, + { + "from": "sym-ff403e1dfce4c56345763593", + "to": "sym-3f102a31789c1c42742dd190", + "type": "depends_on" + }, + { + "from": "sym-9b067f8328467594edb11d13", + "to": "sym-3f102a31789c1c42742dd190", + "type": "depends_on" + }, + { + "from": "sym-abd0fb38bc1e2e1d78131296", + "to": "sym-3f102a31789c1c42742dd190", + "type": "depends_on" + }, + { + "from": "sym-4b53ce0334c9ff70017d9dc3", + "to": "sym-3f102a31789c1c42742dd190", + "type": "depends_on" + }, + { + "from": "sym-bc3b3eca912b76099c1af0ea", + "to": "sym-3f102a31789c1c42742dd190", + "type": "depends_on" + }, + { + "from": "sym-77782c5a42eb69b7fd33faae", + "to": "sym-3f102a31789c1c42742dd190", + "type": "depends_on" + }, + { + "from": "sym-f9cb8e510b8cba2d08e78e80", + "to": "sym-3f102a31789c1c42742dd190", + "type": "depends_on" + }, + { + "from": "sym-bc376883c47b9974b3f9b40c", + "to": "sym-3f102a31789c1c42742dd190", + "type": "depends_on" + }, + { + "from": "sym-9385a1b99111b59f02ea3be7", + "to": "sym-3f102a31789c1c42742dd190", + "type": "depends_on" + }, + { + "from": "sym-0f0d4600642782084b3b828a", + "to": "sym-3f102a31789c1c42742dd190", + "type": "depends_on" + }, + { + "from": "sym-2ee3f05cec0b12fa40875f34", + "to": "sym-3f102a31789c1c42742dd190", + "type": "depends_on" + }, + { + "from": "mod-08315e6901cb53376d13cc70", + "to": "mod-84552d58b6743daab10f83b3", + "type": "depends_on" + }, + { + "from": "mod-08315e6901cb53376d13cc70", + "to": "mod-16a76d1c87dfcbecec53d1e0", + "type": "depends_on" + }, + { + "from": "mod-08315e6901cb53376d13cc70", + "to": "mod-e3c2dc56fd38d656d5235000", + "type": "depends_on" + }, + { + "from": "sym-755339ce0913bac7334bd721", + "to": "mod-08315e6901cb53376d13cc70", + "type": "depends_on" + }, + { + "from": "sym-209ff12f41847b166015e17c", + "to": "sym-755339ce0913bac7334bd721", + "type": "depends_on" + }, + { + "from": "sym-94e5bb176f153bde3b6b48f1", + "to": "sym-755339ce0913bac7334bd721", + "type": "depends_on" + }, + { + "from": "sym-d5346fe3bb91b90eb51eb9fa", + "to": "sym-755339ce0913bac7334bd721", + "type": "depends_on" + }, + { + "from": "sym-6ca98de3ad27618164209729", + "to": "sym-755339ce0913bac7334bd721", + "type": "depends_on" + }, + { + "from": "sym-b2460ed9e3b163b181092bcc", + "to": "sym-755339ce0913bac7334bd721", + "type": "depends_on" + }, + { + "from": "sym-b87588e88bbf56a9c070e278", + "to": "sym-755339ce0913bac7334bd721", + "type": "depends_on" + }, + { + "from": "mod-cb6612b0371b0a6c53802c79", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-df496a4e47a52c356dd44bd2", + "to": "mod-cb6612b0371b0a6c53802c79", + "type": "depends_on" + }, + { + "from": "sym-6a818f9fd5c21fcf47ae40c4", + "to": "sym-df496a4e47a52c356dd44bd2", + "type": "depends_on" + }, + { + "from": "sym-64c02007f5239e713862e1db", + "to": "mod-cb6612b0371b0a6c53802c79", + "type": "depends_on" + }, + { + "from": "sym-b06a527d10cdb09ebee088fe", + "to": "sym-64c02007f5239e713862e1db", + "type": "depends_on" + }, + { + "from": "sym-9f409942f5777e727bcd79d0", + "to": "mod-cb6612b0371b0a6c53802c79", + "type": "depends_on" + }, + { + "from": "sym-339a2a1eb569d6c4680bbda8", + "to": "sym-9f409942f5777e727bcd79d0", + "type": "depends_on" + }, + { + "from": "sym-ff5862c98f8ad4262dd9f150", + "to": "mod-cb6612b0371b0a6c53802c79", + "type": "depends_on" + }, + { + "from": "sym-a2fe879a8fff114fb29f5cdb", + "to": "sym-ff5862c98f8ad4262dd9f150", + "type": "depends_on" + }, + { + "from": "sym-067794a5bdac5eb41b6783ce", + "to": "sym-ff5862c98f8ad4262dd9f150", + "type": "depends_on" + }, + { + "from": "sym-e2d757f6294a7b7db7835f28", + "to": "sym-ff5862c98f8ad4262dd9f150", + "type": "depends_on" + }, + { + "from": "sym-f4915d23263a4a38cda16b6f", + "to": "sym-ff5862c98f8ad4262dd9f150", + "type": "depends_on" + }, + { + "from": "sym-4dd122b47d1fafd381209f0f", + "to": "sym-ff5862c98f8ad4262dd9f150", + "type": "depends_on" + }, + { + "from": "sym-5ec4994d7fb7b6b3ae9a0569", + "to": "sym-ff5862c98f8ad4262dd9f150", + "type": "depends_on" + }, + { + "from": "sym-723d9c080f5c28442e40a92a", + "to": "sym-ff5862c98f8ad4262dd9f150", + "type": "depends_on" + }, + { + "from": "sym-ac52cb0edf8f80fa1d5943d9", + "to": "sym-ff5862c98f8ad4262dd9f150", + "type": "depends_on" + }, + { + "from": "sym-718e6d8d70f9f926e9064096", + "to": "mod-cb6612b0371b0a6c53802c79", + "type": "depends_on" + }, + { + "from": "mod-462ce83c6905bcaa92b4f893", + "to": "mod-dc90a845649336ae35fd57a4", + "type": "depends_on" + }, + { + "from": "mod-462ce83c6905bcaa92b4f893", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-3e3fab842036c0147cdb56ee", + "to": "mod-462ce83c6905bcaa92b4f893", + "type": "depends_on" + }, + { + "from": "sym-3e3fab842036c0147cdb56ee", + "to": "sym-718e6d8d70f9f926e9064096", + "type": "calls" + }, + { + "from": "sym-b1b117fa3a6d894bb68dbdfb", + "to": "mod-462ce83c6905bcaa92b4f893", + "type": "depends_on" + }, + { + "from": "sym-b1b117fa3a6d894bb68dbdfb", + "to": "sym-718e6d8d70f9f926e9064096", + "type": "calls" + }, + { + "from": "sym-6518ddb5bf692e5dc79df999", + "to": "mod-462ce83c6905bcaa92b4f893", + "type": "depends_on" + }, + { + "from": "mod-b826ecdcb08532bf626dec5e", + "to": "mod-dc90a845649336ae35fd57a4", + "type": "depends_on" + }, + { + "from": "mod-b826ecdcb08532bf626dec5e", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-4a3d8ad1a77f9be2e1f5855d", + "to": "mod-b826ecdcb08532bf626dec5e", + "type": "depends_on" + }, + { + "from": "sym-4a3d8ad1a77f9be2e1f5855d", + "to": "sym-718e6d8d70f9f926e9064096", + "type": "calls" + }, + { + "from": "sym-dbb2421ec5e12a04cb4554bf", + "to": "mod-b826ecdcb08532bf626dec5e", + "type": "depends_on" + }, + { + "from": "sym-a405536da4e1154d16dd67dd", + "to": "mod-b826ecdcb08532bf626dec5e", + "type": "depends_on" + }, + { + "from": "mod-dc90a845649336ae35fd57a4", + "to": "mod-cb6612b0371b0a6c53802c79", + "type": "depends_on" + }, + { + "from": "mod-dc90a845649336ae35fd57a4", + "to": "mod-26a73e0f3287d341c809bbb6", + "type": "depends_on" + }, + { + "from": "sym-34946fb6c2cc5dbd7ae1d6d1", + "to": "mod-dc90a845649336ae35fd57a4", + "type": "depends_on" + }, + { + "from": "sym-a5f718702300aa3a1b6e9670", + "to": "mod-dc90a845649336ae35fd57a4", + "type": "depends_on" + }, + { + "from": "sym-120689569dff13e791a616c8", + "to": "mod-dc90a845649336ae35fd57a4", + "type": "depends_on" + }, + { + "from": "sym-b76ea08541bcf547d731520d", + "to": "mod-dc90a845649336ae35fd57a4", + "type": "depends_on" + }, + { + "from": "sym-c8bc37824a3f00b4db708df5", + "to": "mod-dc90a845649336ae35fd57a4", + "type": "depends_on" + }, + { + "from": "sym-b497e588d7117800565edd70", + "to": "mod-dc90a845649336ae35fd57a4", + "type": "depends_on" + }, + { + "from": "sym-9686ef766bebe88367bd5a98", + "to": "mod-dc90a845649336ae35fd57a4", + "type": "depends_on" + }, + { + "from": "sym-43560768d664ccc48d7626ef", + "to": "mod-dc90a845649336ae35fd57a4", + "type": "depends_on" + }, + { + "from": "sym-b93468135cbb23c483ae9407", + "to": "mod-dc90a845649336ae35fd57a4", + "type": "depends_on" + }, + { + "from": "sym-6961c3ce5bea80c5e10fcfe9", + "to": "mod-dc90a845649336ae35fd57a4", + "type": "depends_on" + }, + { + "from": "sym-0e90fe9ca3e727a8bdbb6299", + "to": "mod-dc90a845649336ae35fd57a4", + "type": "depends_on" + }, + { + "from": "mod-26a73e0f3287d341c809bbb6", + "to": "mod-cb6612b0371b0a6c53802c79", + "type": "depends_on" + }, + { + "from": "mod-26a73e0f3287d341c809bbb6", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-26a73e0f3287d341c809bbb6", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "mod-26a73e0f3287d341c809bbb6", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-65c1fbabdc4bea0ce4367edf", + "to": "mod-26a73e0f3287d341c809bbb6", + "type": "depends_on" + }, + { + "from": "sym-b78e473ee66613e6c4a99edd", + "to": "sym-65c1fbabdc4bea0ce4367edf", + "type": "depends_on" + }, + { + "from": "sym-2e9114061b17b842b34526c6", + "to": "mod-26a73e0f3287d341c809bbb6", + "type": "depends_on" + }, + { + "from": "mod-e97de8ffbc5205710572c9db", + "to": "mod-3f28b6264133cacdcde0f639", + "type": "depends_on" + }, + { + "from": "mod-e97de8ffbc5205710572c9db", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-edb7ecfb5537fdae3d513479", + "to": "mod-e97de8ffbc5205710572c9db", + "type": "depends_on" + }, + { + "from": "sym-85147fb17e218d35bff6a383", + "to": "sym-edb7ecfb5537fdae3d513479", + "type": "depends_on" + }, + { + "from": "sym-ed8c8ef93f74a3c81ea0d113", + "to": "mod-e97de8ffbc5205710572c9db", + "type": "depends_on" + }, + { + "from": "sym-11f7a29a146a7fdb768afe1a", + "to": "sym-ed8c8ef93f74a3c81ea0d113", + "type": "depends_on" + }, + { + "from": "sym-667af0a47dceb57dbcf36f54", + "to": "sym-ed8c8ef93f74a3c81ea0d113", + "type": "depends_on" + }, + { + "from": "sym-a208d8b1bc05ca8277e67bee", + "to": "sym-ed8c8ef93f74a3c81ea0d113", + "type": "depends_on" + }, + { + "from": "sym-23c18a98f6390b1fbd465c26", + "to": "sym-ed8c8ef93f74a3c81ea0d113", + "type": "depends_on" + }, + { + "from": "sym-6c526fdd4a4360870f257f57", + "to": "sym-ed8c8ef93f74a3c81ea0d113", + "type": "depends_on" + }, + { + "from": "sym-e274f79c394eebcbf37f069e", + "to": "mod-e97de8ffbc5205710572c9db", + "type": "depends_on" + }, + { + "from": "sym-55751e8a0705973956c52eff", + "to": "mod-e97de8ffbc5205710572c9db", + "type": "depends_on" + }, + { + "from": "mod-73734de2bfb341ec8ba4023b", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-73734de2bfb341ec8ba4023b", + "to": "mod-3f28b6264133cacdcde0f639", + "type": "depends_on" + }, + { + "from": "sym-814fc78d247f82dc6129930b", + "to": "mod-73734de2bfb341ec8ba4023b", + "type": "depends_on" + }, + { + "from": "sym-7d347d343f5583f3108ef749", + "to": "sym-814fc78d247f82dc6129930b", + "type": "depends_on" + }, + { + "from": "sym-50a6eecae9b02798eedd15b0", + "to": "mod-73734de2bfb341ec8ba4023b", + "type": "depends_on" + }, + { + "from": "sym-0871aa6e102abda94617af19", + "to": "sym-50a6eecae9b02798eedd15b0", + "type": "depends_on" + }, + { + "from": "sym-c3e4b175ff01e1f274c41db5", + "to": "sym-50a6eecae9b02798eedd15b0", + "type": "depends_on" + }, + { + "from": "sym-5a244f6ce76a00ba0de25fcd", + "to": "sym-50a6eecae9b02798eedd15b0", + "type": "depends_on" + }, + { + "from": "sym-1f47eb8005b28cb7189d3c8f", + "to": "sym-50a6eecae9b02798eedd15b0", + "type": "depends_on" + }, + { + "from": "sym-13e86d885df58c87136c464c", + "to": "sym-50a6eecae9b02798eedd15b0", + "type": "depends_on" + }, + { + "from": "sym-86f1c2ba6df80c3462f73386", + "to": "mod-73734de2bfb341ec8ba4023b", + "type": "depends_on" + }, + { + "from": "sym-5419cc7c70d6dc28ede67184", + "to": "mod-73734de2bfb341ec8ba4023b", + "type": "depends_on" + }, + { + "from": "mod-3f28b6264133cacdcde0f639", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-e6743ad14bcf55d20f8632e3", + "to": "mod-3f28b6264133cacdcde0f639", + "type": "depends_on" + }, + { + "from": "sym-e1b45754c758f023c3a5e76e", + "to": "sym-e6743ad14bcf55d20f8632e3", + "type": "depends_on" + }, + { + "from": "sym-76a4b520bf86dde1eb2b6c88", + "to": "mod-3f28b6264133cacdcde0f639", + "type": "depends_on" + }, + { + "from": "sym-4dd84807257cb62b4ac704ff", + "to": "sym-76a4b520bf86dde1eb2b6c88", + "type": "depends_on" + }, + { + "from": "sym-8b3c2bd15265d305e67cb209", + "to": "sym-76a4b520bf86dde1eb2b6c88", + "type": "depends_on" + }, + { + "from": "sym-645d9fff4e883a5deccf2de4", + "to": "sym-76a4b520bf86dde1eb2b6c88", + "type": "depends_on" + }, + { + "from": "sym-31a2691b3ced1d256bc49903", + "to": "sym-76a4b520bf86dde1eb2b6c88", + "type": "depends_on" + }, + { + "from": "sym-2da70688fa2715a568e76a1f", + "to": "sym-76a4b520bf86dde1eb2b6c88", + "type": "depends_on" + }, + { + "from": "sym-a0930292275c225961600b94", + "to": "sym-76a4b520bf86dde1eb2b6c88", + "type": "depends_on" + }, + { + "from": "sym-a1a6438fb523e84b0d6a5acf", + "to": "sym-76a4b520bf86dde1eb2b6c88", + "type": "depends_on" + }, + { + "from": "sym-a1c65ad34d586b28bb063b79", + "to": "sym-76a4b520bf86dde1eb2b6c88", + "type": "depends_on" + }, + { + "from": "sym-64d2a4f2172c14753f59c989", + "to": "sym-76a4b520bf86dde1eb2b6c88", + "type": "depends_on" + }, + { + "from": "sym-907f082ef9ac5c2229ea0ade", + "to": "sym-76a4b520bf86dde1eb2b6c88", + "type": "depends_on" + }, + { + "from": "sym-f84154f8b969f50e418d2285", + "to": "sym-76a4b520bf86dde1eb2b6c88", + "type": "depends_on" + }, + { + "from": "sym-932261b29f07de11300dfdcf", + "to": "sym-76a4b520bf86dde1eb2b6c88", + "type": "depends_on" + }, + { + "from": "sym-5f5d6e223d521c533f38067a", + "to": "sym-76a4b520bf86dde1eb2b6c88", + "type": "depends_on" + }, + { + "from": "sym-56374d4ad2ef16c38050375a", + "to": "sym-76a4b520bf86dde1eb2b6c88", + "type": "depends_on" + }, + { + "from": "sym-ddbf97b6be2197cf825559bf", + "to": "sym-76a4b520bf86dde1eb2b6c88", + "type": "depends_on" + }, + { + "from": "sym-70953d217354d6fc5f8b32fb", + "to": "sym-76a4b520bf86dde1eb2b6c88", + "type": "depends_on" + }, + { + "from": "sym-4ef8918153352cb83bb60850", + "to": "sym-76a4b520bf86dde1eb2b6c88", + "type": "depends_on" + }, + { + "from": "sym-0ebd17d9651bf9b3835ff6af", + "to": "sym-76a4b520bf86dde1eb2b6c88", + "type": "depends_on" + }, + { + "from": "sym-dc33aec7c6d3c82fd7bd0a4f", + "to": "sym-76a4b520bf86dde1eb2b6c88", + "type": "depends_on" + }, + { + "from": "sym-dda40d6be392e4d7e2dd40d2", + "to": "sym-76a4b520bf86dde1eb2b6c88", + "type": "depends_on" + }, + { + "from": "sym-f8d8b4330b78b1b42308a5c2", + "to": "sym-76a4b520bf86dde1eb2b6c88", + "type": "depends_on" + }, + { + "from": "sym-0bf6b255d48cad9282284e39", + "to": "mod-3f28b6264133cacdcde0f639", + "type": "depends_on" + }, + { + "from": "sym-d44e2bcce98f6909553185c0", + "to": "mod-3f28b6264133cacdcde0f639", + "type": "depends_on" + }, + { + "from": "mod-7446738bdaf5f0b85a43ab05", + "to": "mod-3f28b6264133cacdcde0f639", + "type": "depends_on" + }, + { + "from": "mod-7446738bdaf5f0b85a43ab05", + "to": "mod-73734de2bfb341ec8ba4023b", + "type": "depends_on" + }, + { + "from": "mod-7446738bdaf5f0b85a43ab05", + "to": "mod-e97de8ffbc5205710572c9db", + "type": "depends_on" + }, + { + "from": "sym-f4ce6b69642416527938b724", + "to": "mod-7446738bdaf5f0b85a43ab05", + "type": "depends_on" + }, + { + "from": "sym-150f5307db44a90b224f17d4", + "to": "mod-7446738bdaf5f0b85a43ab05", + "type": "depends_on" + }, + { + "from": "sym-0ec81c1dcbfd47ac209657f9", + "to": "mod-7446738bdaf5f0b85a43ab05", + "type": "depends_on" + }, + { + "from": "sym-06248a66cb4f78f1d5eb3312", + "to": "mod-7446738bdaf5f0b85a43ab05", + "type": "depends_on" + }, + { + "from": "sym-b41d4e0f6a11ac4ee0968d86", + "to": "mod-7446738bdaf5f0b85a43ab05", + "type": "depends_on" + }, + { + "from": "sym-b0da639ac5f946767bab1148", + "to": "mod-7446738bdaf5f0b85a43ab05", + "type": "depends_on" + }, + { + "from": "sym-d1e74c9c937cbfe8354cb820", + "to": "mod-7446738bdaf5f0b85a43ab05", + "type": "depends_on" + }, + { + "from": "sym-dfffa627fdec4d63848c4107", + "to": "mod-7446738bdaf5f0b85a43ab05", + "type": "depends_on" + }, + { + "from": "sym-280dbc4ff098279a68fc5bc2", + "to": "mod-7446738bdaf5f0b85a43ab05", + "type": "depends_on" + }, + { + "from": "mod-6ecc959af33bffdcf9b125ac", + "to": "mod-ff7a988dbc672250517763db", + "type": "depends_on" + }, + { + "from": "mod-6ecc959af33bffdcf9b125ac", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-fea639e9aff6c5a0e542aa41", + "to": "mod-6ecc959af33bffdcf9b125ac", + "type": "depends_on" + }, + { + "from": "sym-abdb3236602cdc869ad06b13", + "to": "sym-fea639e9aff6c5a0e542aa41", + "type": "depends_on" + }, + { + "from": "sym-0d501f564f166a8a56829af5", + "to": "sym-fea639e9aff6c5a0e542aa41", + "type": "depends_on" + }, + { + "from": "sym-bcc166dd7435c0d06d00377c", + "to": "sym-fea639e9aff6c5a0e542aa41", + "type": "depends_on" + }, + { + "from": "sym-2931981d6814493aa9f3b614", + "to": "sym-fea639e9aff6c5a0e542aa41", + "type": "depends_on" + }, + { + "from": "sym-36a378064a0ed4fb5a6da40f", + "to": "mod-bd407f0c01e58fd2d40eb1c3", + "type": "depends_on" + }, + { + "from": "sym-8945ebc15041ef139fd5f4a7", + "to": "sym-36a378064a0ed4fb5a6da40f", + "type": "depends_on" + }, + { + "from": "mod-ff7a988dbc672250517763db", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-ff7a988dbc672250517763db", + "to": "mod-374a312e43c2c9f2d7013463", + "type": "depends_on" + }, + { + "from": "mod-ff7a988dbc672250517763db", + "to": "mod-ace15f11a231cf8b7077f58e", + "type": "depends_on" + }, + { + "from": "mod-ff7a988dbc672250517763db", + "to": "mod-116da4b57fafe340c5775211", + "type": "depends_on" + }, + { + "from": "mod-ff7a988dbc672250517763db", + "to": "mod-f57990696544256723fdd185", + "type": "depends_on" + }, + { + "from": "sym-79e697a24600f39d08905f79", + "to": "mod-ff7a988dbc672250517763db", + "type": "depends_on" + }, + { + "from": "mod-a722cbd7e6a0808c95591ad6", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-93adcb2760142502f3e2b5e0", + "to": "mod-a722cbd7e6a0808c95591ad6", + "type": "depends_on" + }, + { + "from": "mod-6b0f117020c528624559fc33", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-fbd5550518428a5f3c1d429d", + "to": "mod-6b0f117020c528624559fc33", + "type": "depends_on" + }, + { + "from": "sym-776bf1dc921966d24ee32cbd", + "to": "mod-6b0f117020c528624559fc33", + "type": "depends_on" + }, + { + "from": "mod-3940e5b1c6e49d5c3f17fd5e", + "to": "mod-52fc6e5b8ec086dcc9f4237e", + "type": "depends_on" + }, + { + "from": "mod-3940e5b1c6e49d5c3f17fd5e", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-c9635b7880669c0bb6c6b77e", + "to": "mod-3940e5b1c6e49d5c3f17fd5e", + "type": "depends_on" + }, + { + "from": "sym-e99088c9d2a798506405e322", + "to": "mod-52fc6e5b8ec086dcc9f4237e", + "type": "depends_on" + }, + { + "from": "mod-f57990696544256723fdd185", + "to": "mod-a722cbd7e6a0808c95591ad6", + "type": "depends_on" + }, + { + "from": "mod-f57990696544256723fdd185", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-aff2e2fa35c9fd1deaa22c77", + "to": "mod-f57990696544256723fdd185", + "type": "depends_on" + }, + { + "from": "sym-aff2e2fa35c9fd1deaa22c77", + "to": "sym-93adcb2760142502f3e2b5e0", + "type": "calls" + }, + { + "from": "mod-ace15f11a231cf8b7077f58e", + "to": "mod-6b0f117020c528624559fc33", + "type": "depends_on" + }, + { + "from": "mod-ace15f11a231cf8b7077f58e", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-80e15d6a392a3396e9a9cddd", + "to": "mod-ace15f11a231cf8b7077f58e", + "type": "depends_on" + }, + { + "from": "sym-80e15d6a392a3396e9a9cddd", + "to": "sym-fbd5550518428a5f3c1d429d", + "type": "calls" + }, + { + "from": "mod-116da4b57fafe340c5775211", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-116da4b57fafe340c5775211", + "to": "mod-3940e5b1c6e49d5c3f17fd5e", + "type": "depends_on" + }, + { + "from": "mod-116da4b57fafe340c5775211", + "to": "mod-374a312e43c2c9f2d7013463", + "type": "depends_on" + }, + { + "from": "sym-b6804e6844dd104bd67125b2", + "to": "mod-116da4b57fafe340c5775211", + "type": "depends_on" + }, + { + "from": "sym-b6804e6844dd104bd67125b2", + "to": "sym-c9635b7880669c0bb6c6b77e", + "type": "calls" + }, + { + "from": "mod-374a312e43c2c9f2d7013463", + "to": "mod-aec11f5957298897d75000d1", + "type": "depends_on" + }, + { + "from": "mod-374a312e43c2c9f2d7013463", + "to": "mod-8e3a02ebf4990dac5ac1f328", + "type": "depends_on" + }, + { + "from": "mod-374a312e43c2c9f2d7013463", + "to": "mod-52fc6e5b8ec086dcc9f4237e", + "type": "depends_on" + }, + { + "from": "mod-374a312e43c2c9f2d7013463", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-e197ea41443939ee72ecb053", + "to": "mod-374a312e43c2c9f2d7013463", + "type": "depends_on" + }, + { + "from": "sym-e197ea41443939ee72ecb053", + "to": "sym-e99088c9d2a798506405e322", + "type": "calls" + }, + { + "from": "sym-4af6c1457b565dcbdb9ae1ec", + "to": "mod-374a312e43c2c9f2d7013463", + "type": "depends_on" + }, + { + "from": "mod-293d53ea089a85fc8fe53c13", + "to": "mod-0b89d77ed9ae905feafbc9e1", + "type": "depends_on" + }, + { + "from": "mod-293d53ea089a85fc8fe53c13", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-64773d11ed0dc075e88451fd", + "to": "mod-293d53ea089a85fc8fe53c13", + "type": "depends_on" + }, + { + "from": "sym-13ba93caee7dafdc0a34cf8f", + "to": "sym-64773d11ed0dc075e88451fd", + "type": "depends_on" + }, + { + "from": "sym-b886e68b7cb3206a20572929", + "to": "mod-293d53ea089a85fc8fe53c13", + "type": "depends_on" + }, + { + "from": "sym-bff46c872aa7a5d5524729d8", + "to": "sym-b886e68b7cb3206a20572929", + "type": "depends_on" + }, + { + "from": "sym-353b1994007d3e786d57e4a5", + "to": "mod-293d53ea089a85fc8fe53c13", + "type": "depends_on" + }, + { + "from": "sym-f0ecd914d2af1f74266eb89f", + "to": "sym-353b1994007d3e786d57e4a5", + "type": "depends_on" + }, + { + "from": "sym-33ad11cf35db2f305b0f2502", + "to": "mod-293d53ea089a85fc8fe53c13", + "type": "depends_on" + }, + { + "from": "sym-744ab442808467ce063eecd8", + "to": "mod-293d53ea089a85fc8fe53c13", + "type": "depends_on" + }, + { + "from": "sym-466b012a63df499de8b9409f", + "to": "mod-293d53ea089a85fc8fe53c13", + "type": "depends_on" + }, + { + "from": "sym-58d4853a8ea7f7468daf5394", + "to": "mod-293d53ea089a85fc8fe53c13", + "type": "depends_on" + }, + { + "from": "sym-338b16ec8f5b69d81a074d2d", + "to": "mod-293d53ea089a85fc8fe53c13", + "type": "depends_on" + }, + { + "from": "sym-4ce553c86e8336504c8eb620", + "to": "sym-338b16ec8f5b69d81a074d2d", + "type": "depends_on" + }, + { + "from": "sym-c2a6707fd089bf08cac9cc30", + "to": "sym-338b16ec8f5b69d81a074d2d", + "type": "depends_on" + }, + { + "from": "sym-53a5db12c86a79f27769e3ca", + "to": "sym-338b16ec8f5b69d81a074d2d", + "type": "depends_on" + }, + { + "from": "sym-dfde38af76c341720d753903", + "to": "sym-338b16ec8f5b69d81a074d2d", + "type": "depends_on" + }, + { + "from": "sym-5647f82a940e1e86a9d6bf3b", + "to": "sym-338b16ec8f5b69d81a074d2d", + "type": "depends_on" + }, + { + "from": "sym-f3b88c82370c15bc11afbc17", + "to": "sym-338b16ec8f5b69d81a074d2d", + "type": "depends_on" + }, + { + "from": "sym-08acd048f40a94dcfb5034b2", + "to": "sym-338b16ec8f5b69d81a074d2d", + "type": "depends_on" + }, + { + "from": "sym-0a3a10f403b5b77d947e96cf", + "to": "sym-338b16ec8f5b69d81a074d2d", + "type": "depends_on" + }, + { + "from": "sym-e3fa5fe2f1165ee2f85b2da0", + "to": "sym-338b16ec8f5b69d81a074d2d", + "type": "depends_on" + }, + { + "from": "sym-7a74034dc52098492d0b71dc", + "to": "sym-338b16ec8f5b69d81a074d2d", + "type": "depends_on" + }, + { + "from": "sym-d5a0e6506cccbcfea1745132", + "to": "sym-338b16ec8f5b69d81a074d2d", + "type": "depends_on" + }, + { + "from": "sym-cbd20435eb5b4e9750787653", + "to": "sym-338b16ec8f5b69d81a074d2d", + "type": "depends_on" + }, + { + "from": "sym-b219d03ed055f1f7b729a6a7", + "to": "sym-338b16ec8f5b69d81a074d2d", + "type": "depends_on" + }, + { + "from": "sym-4b8d14a11dda7e8103b0d44a", + "to": "sym-338b16ec8f5b69d81a074d2d", + "type": "depends_on" + }, + { + "from": "sym-6b75b0851a7f9511ae3bdd20", + "to": "sym-338b16ec8f5b69d81a074d2d", + "type": "depends_on" + }, + { + "from": "sym-338b16ec8f5b69d81a074d2d", + "to": "sym-58d4853a8ea7f7468daf5394", + "type": "calls" + }, + { + "from": "sym-338b16ec8f5b69d81a074d2d", + "to": "sym-744ab442808467ce063eecd8", + "type": "calls" + }, + { + "from": "sym-338b16ec8f5b69d81a074d2d", + "to": "sym-33ad11cf35db2f305b0f2502", + "type": "calls" + }, + { + "from": "sym-338b16ec8f5b69d81a074d2d", + "to": "sym-466b012a63df499de8b9409f", + "type": "calls" + }, + { + "from": "sym-1026fbb4213fe879c3de7679", + "to": "mod-293d53ea089a85fc8fe53c13", + "type": "depends_on" + }, + { + "from": "sym-5c0261c1abb8cef11691bfe3", + "to": "mod-293d53ea089a85fc8fe53c13", + "type": "depends_on" + }, + { + "from": "sym-5c0261c1abb8cef11691bfe3", + "to": "sym-1026fbb4213fe879c3de7679", + "type": "calls" + }, + { + "from": "sym-ae7b21a626aad5c215c5336b", + "to": "mod-293d53ea089a85fc8fe53c13", + "type": "depends_on" + }, + { + "from": "sym-c0d7489cdd6eb46002210ed9", + "to": "mod-293d53ea089a85fc8fe53c13", + "type": "depends_on" + }, + { + "from": "sym-bd1b00d8d06df07a62457168", + "to": "mod-0b89d77ed9ae905feafbc9e1", + "type": "depends_on" + }, + { + "from": "sym-8da3ea034cf83decf1f3a0ab", + "to": "sym-bd1b00d8d06df07a62457168", + "type": "depends_on" + }, + { + "from": "sym-4081da70b1188501521a21dc", + "to": "mod-0b89d77ed9ae905feafbc9e1", + "type": "depends_on" + }, + { + "from": "sym-449dc953195e16bbfb9147ce", + "to": "sym-4081da70b1188501521a21dc", + "type": "depends_on" + }, + { + "from": "sym-758f05405496c1c7b69159ea", + "to": "mod-0b89d77ed9ae905feafbc9e1", + "type": "depends_on" + }, + { + "from": "sym-7ef5dea300b4021b74264879", + "to": "sym-758f05405496c1c7b69159ea", + "type": "depends_on" + }, + { + "from": "sym-929fb3ff8a3cf6d97191a8fc", + "to": "mod-0b89d77ed9ae905feafbc9e1", + "type": "depends_on" + }, + { + "from": "sym-758256edbb484a330fd44fbb", + "to": "sym-929fb3ff8a3cf6d97191a8fc", + "type": "depends_on" + }, + { + "from": "sym-93c4622ced07c39637c1e143", + "to": "sym-929fb3ff8a3cf6d97191a8fc", + "type": "depends_on" + }, + { + "from": "sym-93205ff0d514f7be865d6def", + "to": "sym-929fb3ff8a3cf6d97191a8fc", + "type": "depends_on" + }, + { + "from": "sym-720f8262db55a416213d05d7", + "to": "sym-929fb3ff8a3cf6d97191a8fc", + "type": "depends_on" + }, + { + "from": "sym-2403c7117e90a27729574deb", + "to": "sym-929fb3ff8a3cf6d97191a8fc", + "type": "depends_on" + }, + { + "from": "sym-873410bea0fdf1494ec40a5b", + "to": "sym-929fb3ff8a3cf6d97191a8fc", + "type": "depends_on" + }, + { + "from": "sym-0a358f0bf6c9d69cb6cf6a65", + "to": "sym-929fb3ff8a3cf6d97191a8fc", + "type": "depends_on" + }, + { + "from": "sym-f8da7f288f0c8f5d8a43e672", + "to": "sym-929fb3ff8a3cf6d97191a8fc", + "type": "depends_on" + }, + { + "from": "sym-4d25122117d46c00f28b41c7", + "to": "sym-929fb3ff8a3cf6d97191a8fc", + "type": "depends_on" + }, + { + "from": "sym-d954c9ed7804d9c7e265b086", + "to": "sym-929fb3ff8a3cf6d97191a8fc", + "type": "depends_on" + }, + { + "from": "sym-2bff24216394c4d238452642", + "to": "mod-0b89d77ed9ae905feafbc9e1", + "type": "depends_on" + }, + { + "from": "mod-6468589b59a97501083efac5", + "to": "mod-93380aca3aab056f0dd2e4e0", + "type": "depends_on" + }, + { + "from": "mod-6468589b59a97501083efac5", + "to": "mod-293d53ea089a85fc8fe53c13", + "type": "depends_on" + }, + { + "from": "mod-6468589b59a97501083efac5", + "to": "mod-7913910232f2f61a1d86ca8d", + "type": "depends_on" + }, + { + "from": "mod-6468589b59a97501083efac5", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-6468589b59a97501083efac5", + "to": "mod-293d53ea089a85fc8fe53c13", + "type": "depends_on" + }, + { + "from": "mod-6468589b59a97501083efac5", + "to": "mod-0b89d77ed9ae905feafbc9e1", + "type": "depends_on" + }, + { + "from": "mod-6468589b59a97501083efac5", + "to": "mod-0b89d77ed9ae905feafbc9e1", + "type": "depends_on" + }, + { + "from": "mod-6468589b59a97501083efac5", + "to": "mod-293d53ea089a85fc8fe53c13", + "type": "depends_on" + }, + { + "from": "sym-a850bd115879fbb3dfd1c754", + "to": "mod-6468589b59a97501083efac5", + "type": "depends_on" + }, + { + "from": "sym-cc16259785e538472afb2878", + "to": "mod-6468589b59a97501083efac5", + "type": "depends_on" + }, + { + "from": "sym-5d4d5843ec2f6746187582cb", + "to": "mod-6468589b59a97501083efac5", + "type": "depends_on" + }, + { + "from": "sym-758c7ae0108c14cea2c81f77", + "to": "mod-6468589b59a97501083efac5", + "type": "depends_on" + }, + { + "from": "sym-3a737e2cbc5ab28709b77f2f", + "to": "mod-6468589b59a97501083efac5", + "type": "depends_on" + }, + { + "from": "sym-0c7adeaa8d4e009a44877ca9", + "to": "mod-6468589b59a97501083efac5", + "type": "depends_on" + }, + { + "from": "sym-d17cdfb4aef3087444b3b0a5", + "to": "mod-6468589b59a97501083efac5", + "type": "depends_on" + }, + { + "from": "sym-1e9d4d2f1ab5748a2c1c1613", + "to": "mod-6468589b59a97501083efac5", + "type": "depends_on" + }, + { + "from": "sym-1f2728924b585fa470a24818", + "to": "mod-6468589b59a97501083efac5", + "type": "depends_on" + }, + { + "from": "sym-65cd5481814fe9600aa05460", + "to": "mod-6468589b59a97501083efac5", + "type": "depends_on" + }, + { + "from": "sym-b3c4e54a35894e6f75f582f8", + "to": "mod-6468589b59a97501083efac5", + "type": "depends_on" + }, + { + "from": "sym-3263681afc7b0a4a70999632", + "to": "mod-6468589b59a97501083efac5", + "type": "depends_on" + }, + { + "from": "sym-db7de0d1f554c5e6d55d2b56", + "to": "mod-6468589b59a97501083efac5", + "type": "depends_on" + }, + { + "from": "sym-db7de0d1f554c5e6d55d2b56", + "to": "sym-5d4d5843ec2f6746187582cb", + "type": "calls" + }, + { + "from": "sym-db7de0d1f554c5e6d55d2b56", + "to": "sym-5c0261c1abb8cef11691bfe3", + "type": "calls" + }, + { + "from": "sym-363a8258c584c40b62a678fd", + "to": "mod-6468589b59a97501083efac5", + "type": "depends_on" + }, + { + "from": "sym-363a8258c584c40b62a678fd", + "to": "sym-ae7b21a626aad5c215c5336b", + "type": "calls" + }, + { + "from": "sym-e3c02dbe29b87117fa9b04db", + "to": "mod-6468589b59a97501083efac5", + "type": "depends_on" + }, + { + "from": "sym-e3c02dbe29b87117fa9b04db", + "to": "sym-5d4d5843ec2f6746187582cb", + "type": "calls" + }, + { + "from": "sym-e32897b8d4bc13fd2ec355c3", + "to": "mod-6468589b59a97501083efac5", + "type": "depends_on" + }, + { + "from": "sym-e32897b8d4bc13fd2ec355c3", + "to": "sym-cc16259785e538472afb2878", + "type": "calls" + }, + { + "from": "sym-7e6112dd781d795b89a0d740", + "to": "mod-6468589b59a97501083efac5", + "type": "depends_on" + }, + { + "from": "mod-d890484b676af2e8fe7bd2b6", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-9a8e120674ffb3d5976882cd", + "to": "mod-d890484b676af2e8fe7bd2b6", + "type": "depends_on" + }, + { + "from": "sym-4c6ce39e98ae4ab81939824f", + "to": "mod-d890484b676af2e8fe7bd2b6", + "type": "depends_on" + }, + { + "from": "sym-266f75531942cf49359b72a4", + "to": "sym-4c6ce39e98ae4ab81939824f", + "type": "depends_on" + }, + { + "from": "sym-dc90f4d9772ae4e497b4d0fb", + "to": "mod-d890484b676af2e8fe7bd2b6", + "type": "depends_on" + }, + { + "from": "sym-15181e6b0024657af6420bb3", + "to": "mod-d890484b676af2e8fe7bd2b6", + "type": "depends_on" + }, + { + "from": "sym-f22d728c52d0e3f559ffbb8a", + "to": "mod-d890484b676af2e8fe7bd2b6", + "type": "depends_on" + }, + { + "from": "sym-f22d728c52d0e3f559ffbb8a", + "to": "sym-15181e6b0024657af6420bb3", + "type": "calls" + }, + { + "from": "sym-17663c6ac3e09ee99af6cbfc", + "to": "mod-d890484b676af2e8fe7bd2b6", + "type": "depends_on" + }, + { + "from": "sym-a9c92d2af5e8dba2d840eb22", + "to": "mod-d890484b676af2e8fe7bd2b6", + "type": "depends_on" + }, + { + "from": "mod-94f67b12c658d567d29471e0", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-94f67b12c658d567d29471e0", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-94f67b12c658d567d29471e0", + "to": "mod-d890484b676af2e8fe7bd2b6", + "type": "depends_on" + }, + { + "from": "sym-26cbeaf8371240e40a439ffd", + "to": "mod-94f67b12c658d567d29471e0", + "type": "depends_on" + }, + { + "from": "sym-fc707a99e6953bbe1224a9c7", + "to": "sym-26cbeaf8371240e40a439ffd", + "type": "depends_on" + }, + { + "from": "sym-297ca357cdc84e9e674a3d04", + "to": "mod-94f67b12c658d567d29471e0", + "type": "depends_on" + }, + { + "from": "sym-907710b9e6031b27ee27d792", + "to": "sym-297ca357cdc84e9e674a3d04", + "type": "depends_on" + }, + { + "from": "sym-3db558af1680fcbc9c209696", + "to": "mod-94f67b12c658d567d29471e0", + "type": "depends_on" + }, + { + "from": "sym-62a7a1c4aacf761c94364b47", + "to": "sym-3db558af1680fcbc9c209696", + "type": "depends_on" + }, + { + "from": "sym-f16008b8cfe1c5b3dc8f9be0", + "to": "mod-94f67b12c658d567d29471e0", + "type": "depends_on" + }, + { + "from": "sym-c591da5cf9fd5033796fad52", + "to": "sym-f16008b8cfe1c5b3dc8f9be0", + "type": "depends_on" + }, + { + "from": "sym-7983e9e5facf67e208691a4a", + "to": "mod-94f67b12c658d567d29471e0", + "type": "depends_on" + }, + { + "from": "sym-0235109d7d5578b7564492f0", + "to": "sym-7983e9e5facf67e208691a4a", + "type": "depends_on" + }, + { + "from": "sym-af4dfd683d1a5aaafa97f71b", + "to": "mod-94f67b12c658d567d29471e0", + "type": "depends_on" + }, + { + "from": "sym-b20154660e4ffdb468116aa2", + "to": "mod-94f67b12c658d567d29471e0", + "type": "depends_on" + }, + { + "from": "sym-b4012c771eba259cf8dd4592", + "to": "mod-94f67b12c658d567d29471e0", + "type": "depends_on" + }, + { + "from": "sym-4435b2ba48da9de578ec8950", + "to": "mod-94f67b12c658d567d29471e0", + "type": "depends_on" + }, + { + "from": "sym-4435b2ba48da9de578ec8950", + "to": "sym-17663c6ac3e09ee99af6cbfc", + "type": "calls" + }, + { + "from": "sym-5d2517b043286dce6d6847d7", + "to": "mod-94f67b12c658d567d29471e0", + "type": "depends_on" + }, + { + "from": "sym-5d2517b043286dce6d6847d7", + "to": "sym-af4dfd683d1a5aaafa97f71b", + "type": "calls" + }, + { + "from": "sym-5d2517b043286dce6d6847d7", + "to": "sym-b20154660e4ffdb468116aa2", + "type": "calls" + }, + { + "from": "sym-5d2517b043286dce6d6847d7", + "to": "sym-4435b2ba48da9de578ec8950", + "type": "calls" + }, + { + "from": "sym-5d2517b043286dce6d6847d7", + "to": "sym-f22d728c52d0e3f559ffbb8a", + "type": "calls" + }, + { + "from": "sym-5d2517b043286dce6d6847d7", + "to": "sym-17663c6ac3e09ee99af6cbfc", + "type": "calls" + }, + { + "from": "sym-1d9d546626598e46d80a33e3", + "to": "mod-94f67b12c658d567d29471e0", + "type": "depends_on" + }, + { + "from": "sym-1d9d546626598e46d80a33e3", + "to": "sym-17663c6ac3e09ee99af6cbfc", + "type": "calls" + }, + { + "from": "sym-30522ef6077dd999b7f172c6", + "to": "mod-94f67b12c658d567d29471e0", + "type": "depends_on" + }, + { + "from": "sym-debcbb487e8f163b6358c170", + "to": "mod-94f67b12c658d567d29471e0", + "type": "depends_on" + }, + { + "from": "mod-7913910232f2f61a1d86ca8d", + "to": "mod-293d53ea089a85fc8fe53c13", + "type": "depends_on" + }, + { + "from": "mod-7913910232f2f61a1d86ca8d", + "to": "mod-93380aca3aab056f0dd2e4e0", + "type": "depends_on" + }, + { + "from": "mod-7913910232f2f61a1d86ca8d", + "to": "mod-93380aca3aab056f0dd2e4e0", + "type": "depends_on" + }, + { + "from": "mod-7913910232f2f61a1d86ca8d", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-c40d1a0a528d0efe34d893f0", + "to": "mod-7913910232f2f61a1d86ca8d", + "type": "depends_on" + }, + { + "from": "sym-719fa881592657d7ae9efe07", + "to": "mod-7913910232f2f61a1d86ca8d", + "type": "depends_on" + }, + { + "from": "mod-de2778e7582cc783d0c02163", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-de2778e7582cc783d0c02163", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "sym-433666f8a3a3ca195a6c43b9", + "to": "mod-de2778e7582cc783d0c02163", + "type": "depends_on" + }, + { + "from": "sym-1bc6f773d7c81a2ab06a3280", + "to": "mod-de2778e7582cc783d0c02163", + "type": "depends_on" + }, + { + "from": "sym-3bf1037e30906da22b26b10b", + "to": "sym-1bc6f773d7c81a2ab06a3280", + "type": "depends_on" + }, + { + "from": "sym-c40372def081f07b71bd4712", + "to": "mod-de2778e7582cc783d0c02163", + "type": "depends_on" + }, + { + "from": "sym-d8616b9f73c4507701982752", + "to": "sym-c40372def081f07b71bd4712", + "type": "depends_on" + }, + { + "from": "sym-33df031e22a2d073aff29d0a", + "to": "mod-de2778e7582cc783d0c02163", + "type": "depends_on" + }, + { + "from": "sym-c6c98cc6d0c52307aa196164", + "to": "sym-33df031e22a2d073aff29d0a", + "type": "depends_on" + }, + { + "from": "sym-adc4065dd1b3ac679d5ba2f9", + "to": "mod-de2778e7582cc783d0c02163", + "type": "depends_on" + }, + { + "from": "sym-4e80afaf50ee6162c65e2622", + "to": "mod-de2778e7582cc783d0c02163", + "type": "depends_on" + }, + { + "from": "sym-4e80afaf50ee6162c65e2622", + "to": "sym-adc4065dd1b3ac679d5ba2f9", + "type": "calls" + }, + { + "from": "sym-ad0f36d2976eaf60bf419c15", + "to": "mod-de2778e7582cc783d0c02163", + "type": "depends_on" + }, + { + "from": "sym-2e9af8ad888cbeef0ea5caea", + "to": "sym-ad0f36d2976eaf60bf419c15", + "type": "depends_on" + }, + { + "from": "sym-0115c78857a4e5f525339e2d", + "to": "mod-de2778e7582cc783d0c02163", + "type": "depends_on" + }, + { + "from": "sym-0115c78857a4e5f525339e2d", + "to": "sym-adc4065dd1b3ac679d5ba2f9", + "type": "calls" + }, + { + "from": "sym-5057526194c060d19120572f", + "to": "mod-de2778e7582cc783d0c02163", + "type": "depends_on" + }, + { + "from": "sym-fb41addf4b834b1cd33edc92", + "to": "mod-de2778e7582cc783d0c02163", + "type": "depends_on" + }, + { + "from": "sym-9281614f452adafc3cae1183", + "to": "mod-de2778e7582cc783d0c02163", + "type": "depends_on" + }, + { + "from": "sym-b4ef38925e03b3181e41e353", + "to": "mod-de2778e7582cc783d0c02163", + "type": "depends_on" + }, + { + "from": "sym-814eb4802fa432ff5ff8bc82", + "to": "mod-de2778e7582cc783d0c02163", + "type": "depends_on" + }, + { + "from": "sym-f954c7b798e4f9310812532d", + "to": "mod-de2778e7582cc783d0c02163", + "type": "depends_on" + }, + { + "from": "sym-7a7c3a1eb526becc41e434a1", + "to": "mod-de2778e7582cc783d0c02163", + "type": "depends_on" + }, + { + "from": "mod-3dc939e68aaf71174e695f9e", + "to": "mod-ea8114d37c6855f0420f3753", + "type": "depends_on" + }, + { + "from": "mod-3dc939e68aaf71174e695f9e", + "to": "mod-f7793bcd210b9ccdb36c1561", + "type": "depends_on" + }, + { + "from": "mod-3dc939e68aaf71174e695f9e", + "to": "mod-ff98cde0370b2a3126edc022", + "type": "depends_on" + }, + { + "from": "mod-3dc939e68aaf71174e695f9e", + "to": "mod-719cd7393843802b8bff160e", + "type": "depends_on" + }, + { + "from": "mod-3dc939e68aaf71174e695f9e", + "to": "mod-30ed0e66ac618e803ffb888b", + "type": "depends_on" + }, + { + "from": "mod-3dc939e68aaf71174e695f9e", + "to": "mod-0a6b71b6c837c68c08998d7b", + "type": "depends_on" + }, + { + "from": "sym-e627965d04649dc42cc45b54", + "to": "mod-3dc939e68aaf71174e695f9e", + "type": "depends_on" + }, + { + "from": "sym-4722e7f6cce02aa7a45c0ca8", + "to": "sym-e627965d04649dc42cc45b54", + "type": "depends_on" + }, + { + "from": "sym-8e6fb1c5edb7ed62e201d405", + "to": "sym-e627965d04649dc42cc45b54", + "type": "depends_on" + }, + { + "from": "sym-954b96385b9de9e9207933cc", + "to": "sym-e627965d04649dc42cc45b54", + "type": "depends_on" + }, + { + "from": "sym-0e15f799bb0693f0511b578d", + "to": "sym-e627965d04649dc42cc45b54", + "type": "depends_on" + }, + { + "from": "sym-3d6899724c0d41cfd6f474f0", + "to": "sym-e627965d04649dc42cc45b54", + "type": "depends_on" + }, + { + "from": "sym-7cfb9cd62ef3a3bcba6133d6", + "to": "sym-e627965d04649dc42cc45b54", + "type": "depends_on" + }, + { + "from": "mod-6efee936b845d34104bac46c", + "to": "mod-3dc939e68aaf71174e695f9e", + "type": "depends_on" + }, + { + "from": "mod-6efee936b845d34104bac46c", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-d37277bb65ea84e12d02d020", + "to": "mod-6efee936b845d34104bac46c", + "type": "depends_on" + }, + { + "from": "sym-5115d455ff0b3f7736ab7b40", + "to": "sym-d37277bb65ea84e12d02d020", + "type": "depends_on" + }, + { + "from": "sym-646106dbb39ff99ccb6a16d6", + "to": "sym-d37277bb65ea84e12d02d020", + "type": "depends_on" + }, + { + "from": "sym-29dba20c5dbe8beee9ac139b", + "to": "sym-d37277bb65ea84e12d02d020", + "type": "depends_on" + }, + { + "from": "sym-c876049c95a83447cb3011f5", + "to": "sym-d37277bb65ea84e12d02d020", + "type": "depends_on" + }, + { + "from": "mod-7866a2e46802b656e108eb43", + "to": "mod-6efee936b845d34104bac46c", + "type": "depends_on" + }, + { + "from": "mod-7866a2e46802b656e108eb43", + "to": "mod-3dc939e68aaf71174e695f9e", + "type": "depends_on" + }, + { + "from": "mod-7866a2e46802b656e108eb43", + "to": "mod-30ed0e66ac618e803ffb888b", + "type": "depends_on" + }, + { + "from": "mod-7866a2e46802b656e108eb43", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-c0b505bebd5393a5e4195eff", + "to": "mod-7866a2e46802b656e108eb43", + "type": "depends_on" + }, + { + "from": "mod-ea8114d37c6855f0420f3753", + "to": "mod-ff98cde0370b2a3126edc022", + "type": "depends_on" + }, + { + "from": "mod-ea8114d37c6855f0420f3753", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-ea8114d37c6855f0420f3753", + "to": "mod-84552d58b6743daab10f83b3", + "type": "depends_on" + }, + { + "from": "mod-ea8114d37c6855f0420f3753", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-bfe9e935a34dd0614090ce99", + "to": "mod-ea8114d37c6855f0420f3753", + "type": "depends_on" + }, + { + "from": "sym-abf9a552e1b6a1741fd89eea", + "to": "sym-bfe9e935a34dd0614090ce99", + "type": "depends_on" + }, + { + "from": "sym-9b202e46a4d2e18367b66d73", + "to": "sym-bfe9e935a34dd0614090ce99", + "type": "depends_on" + }, + { + "from": "sym-aca57b52879b4144d90ddf08", + "to": "sym-bfe9e935a34dd0614090ce99", + "type": "depends_on" + }, + { + "from": "mod-f7793bcd210b9ccdb36c1561", + "to": "mod-ea8114d37c6855f0420f3753", + "type": "depends_on" + }, + { + "from": "sym-2fbba88417d7be653ece3499", + "to": "mod-f7793bcd210b9ccdb36c1561", + "type": "depends_on" + }, + { + "from": "sym-a3370fbc057c5e1c22e7793b", + "to": "sym-2fbba88417d7be653ece3499", + "type": "depends_on" + }, + { + "from": "sym-7694c211fe907466d8273a7e", + "to": "sym-2fbba88417d7be653ece3499", + "type": "depends_on" + }, + { + "from": "sym-329d6cd73bd648317027d590", + "to": "mod-30ed0e66ac618e803ffb888b", + "type": "depends_on" + }, + { + "from": "sym-355d9ea302b96d2ada7be226", + "to": "mod-30ed0e66ac618e803ffb888b", + "type": "depends_on" + }, + { + "from": "sym-d85124f8888456a01864d0d7", + "to": "mod-30ed0e66ac618e803ffb888b", + "type": "depends_on" + }, + { + "from": "sym-d85124f8888456a01864d0d7", + "to": "sym-329d6cd73bd648317027d590", + "type": "calls" + }, + { + "from": "sym-01250ff7b457022d57f75b23", + "to": "mod-30ed0e66ac618e803ffb888b", + "type": "depends_on" + }, + { + "from": "sym-01250ff7b457022d57f75b23", + "to": "sym-355d9ea302b96d2ada7be226", + "type": "calls" + }, + { + "from": "sym-27a071409a6448a327c75916", + "to": "mod-0a6b71b6c837c68c08998d7b", + "type": "depends_on" + }, + { + "from": "sym-7bc468f24d0bd68c3716ca14", + "to": "sym-27a071409a6448a327c75916", + "type": "depends_on" + }, + { + "from": "sym-df74c42f1d0883c0ac4ea037", + "to": "mod-0a6b71b6c837c68c08998d7b", + "type": "depends_on" + }, + { + "from": "mod-825d778a3cf48930d8e88db3", + "to": "mod-2ac3497f7072a203f8c62d92", + "type": "depends_on" + }, + { + "from": "mod-825d778a3cf48930d8e88db3", + "to": "mod-fbf651cd0a1f5d59d8f3f9b2", + "type": "depends_on" + }, + { + "from": "mod-2ac3497f7072a203f8c62d92", + "to": "mod-fbf651cd0a1f5d59d8f3f9b2", + "type": "depends_on" + }, + { + "from": "sym-890d84899d1bd8ff66074d19", + "to": "mod-2ac3497f7072a203f8c62d92", + "type": "depends_on" + }, + { + "from": "sym-30f023b8001b0d2954548e94", + "to": "sym-890d84899d1bd8ff66074d19", + "type": "depends_on" + }, + { + "from": "sym-a6fa2da71477acd8ca019d69", + "to": "sym-890d84899d1bd8ff66074d19", + "type": "depends_on" + }, + { + "from": "sym-fa476f03eef817925c888ff3", + "to": "sym-890d84899d1bd8ff66074d19", + "type": "depends_on" + }, + { + "from": "sym-10c6bfb19ea88d09f9c7c87a", + "to": "mod-2ac3497f7072a203f8c62d92", + "type": "depends_on" + }, + { + "from": "sym-8ac635c37f1b1f7426a5dcec", + "to": "sym-10c6bfb19ea88d09f9c7c87a", + "type": "depends_on" + }, + { + "from": "sym-5a46c4d2478308967a03a599", + "to": "sym-10c6bfb19ea88d09f9c7c87a", + "type": "depends_on" + }, + { + "from": "sym-87e02332b5d839c8021e1d17", + "to": "sym-10c6bfb19ea88d09f9c7c87a", + "type": "depends_on" + }, + { + "from": "sym-8246e2dd08e08f2ea2f20be6", + "to": "mod-fbf651cd0a1f5d59d8f3f9b2", + "type": "depends_on" + }, + { + "from": "sym-622da0c12aaa7a83367c4b2e", + "to": "mod-b4ad305201d7e6c9d3b649db", + "type": "depends_on" + }, + { + "from": "sym-495cf45bc0377d9a5afbc045", + "to": "sym-622da0c12aaa7a83367c4b2e", + "type": "depends_on" + }, + { + "from": "sym-d5c01fc2a6daf358ad0614de", + "to": "sym-622da0c12aaa7a83367c4b2e", + "type": "depends_on" + }, + { + "from": "sym-447a5e701a52a48725db1804", + "to": "sym-622da0c12aaa7a83367c4b2e", + "type": "depends_on" + }, + { + "from": "sym-59da84ea7c765c8210c5f666", + "to": "sym-622da0c12aaa7a83367c4b2e", + "type": "depends_on" + }, + { + "from": "sym-e1df23cfd63cd30cd63d4a24", + "to": "sym-622da0c12aaa7a83367c4b2e", + "type": "depends_on" + }, + { + "from": "sym-fc7baad9b538d0a808c7d220", + "to": "sym-622da0c12aaa7a83367c4b2e", + "type": "depends_on" + }, + { + "from": "sym-02558c28bb9eb59cc31e9119", + "to": "sym-622da0c12aaa7a83367c4b2e", + "type": "depends_on" + }, + { + "from": "sym-fddea2d2d61e84b8456298b3", + "to": "sym-622da0c12aaa7a83367c4b2e", + "type": "depends_on" + }, + { + "from": "sym-93274c44efff4b1f949f3bb9", + "to": "sym-622da0c12aaa7a83367c4b2e", + "type": "depends_on" + }, + { + "from": "sym-259ac048cb816234ef7ada5b", + "to": "sym-622da0c12aaa7a83367c4b2e", + "type": "depends_on" + }, + { + "from": "mod-ad645bf9d23cc4e8c30848fc", + "to": "mod-4700c8f714ccf0e905a08548", + "type": "depends_on" + }, + { + "from": "mod-ad645bf9d23cc4e8c30848fc", + "to": "mod-7b1b348ef9728f14361d546b", + "type": "depends_on" + }, + { + "from": "mod-ad645bf9d23cc4e8c30848fc", + "to": "mod-b4ad305201d7e6c9d3b649db", + "type": "depends_on" + }, + { + "from": "mod-ad645bf9d23cc4e8c30848fc", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-4404f892d433afa5b82ed3f4", + "to": "mod-ad645bf9d23cc4e8c30848fc", + "type": "depends_on" + }, + { + "from": "sym-ab44157beed9a9398173d77c", + "to": "mod-ad645bf9d23cc4e8c30848fc", + "type": "depends_on" + }, + { + "from": "sym-537af0b9d6bfcbb6032397db", + "to": "mod-ad645bf9d23cc4e8c30848fc", + "type": "depends_on" + }, + { + "from": "sym-e090776af88c5be10aba4a68", + "to": "mod-508ea55e640ac463afeb7e81", + "type": "depends_on" + }, + { + "from": "sym-5dbe5cd27b7f059f8e4f033b", + "to": "sym-e090776af88c5be10aba4a68", + "type": "depends_on" + }, + { + "from": "sym-cc0c03550be8730b76e8f71d", + "to": "mod-508ea55e640ac463afeb7e81", + "type": "depends_on" + }, + { + "from": "sym-051d763051b0c844395392cd", + "to": "mod-292e8f8c5a666fd4318d4859", + "type": "depends_on" + }, + { + "from": "sym-c83faa9c46614bf7cebaca16", + "to": "sym-051d763051b0c844395392cd", + "type": "depends_on" + }, + { + "from": "sym-0548e973988513ade19763cd", + "to": "mod-292e8f8c5a666fd4318d4859", + "type": "depends_on" + }, + { + "from": "sym-49a8ade963ef62d280f2e848", + "to": "sym-0548e973988513ade19763cd", + "type": "depends_on" + }, + { + "from": "sym-f400625db879f3f88d41393b", + "to": "mod-292e8f8c5a666fd4318d4859", + "type": "depends_on" + }, + { + "from": "sym-bdbcff3b286cf731b94f76b2", + "to": "sym-f400625db879f3f88d41393b", + "type": "depends_on" + }, + { + "from": "sym-f7a2710d38cf71bc22ff1334", + "to": "mod-292e8f8c5a666fd4318d4859", + "type": "depends_on" + }, + { + "from": "sym-6cdfa0f864c81211de3ff9b0", + "to": "sym-f7a2710d38cf71bc22ff1334", + "type": "depends_on" + }, + { + "from": "sym-294062945c7711d95b133b38", + "to": "sym-f7a2710d38cf71bc22ff1334", + "type": "depends_on" + }, + { + "from": "sym-9dbf2f45df69dc411b69a2a8", + "to": "sym-f7a2710d38cf71bc22ff1334", + "type": "depends_on" + }, + { + "from": "sym-81336d6a9eb6d22a151740f1", + "to": "sym-f7a2710d38cf71bc22ff1334", + "type": "depends_on" + }, + { + "from": "sym-1d174f658713e92a4c259443", + "to": "sym-f7a2710d38cf71bc22ff1334", + "type": "depends_on" + }, + { + "from": "sym-f7a2710d38cf71bc22ff1334", + "to": "sym-cc0c03550be8730b76e8f71d", + "type": "calls" + }, + { + "from": "sym-5a2acc2e51e49fbeb95ef067", + "to": "mod-99cb8cee8d94ff0cda253153", + "type": "depends_on" + }, + { + "from": "sym-d8cf8b69f000df4cc6351d0b", + "to": "sym-5a2acc2e51e49fbeb95ef067", + "type": "depends_on" + }, + { + "from": "sym-24f5eddf8ece217b1a33972f", + "to": "mod-99cb8cee8d94ff0cda253153", + "type": "depends_on" + }, + { + "from": "sym-c78e678099c0210e59787676", + "to": "sym-24f5eddf8ece217b1a33972f", + "type": "depends_on" + }, + { + "from": "sym-d3832144a7e9a4bf0fcb5986", + "to": "mod-99cb8cee8d94ff0cda253153", + "type": "depends_on" + }, + { + "from": "sym-692898daf907a5b9e4c65204", + "to": "sym-d3832144a7e9a4bf0fcb5986", + "type": "depends_on" + }, + { + "from": "sym-935a4eb2274a87e70e7dd352", + "to": "mod-99cb8cee8d94ff0cda253153", + "type": "depends_on" + }, + { + "from": "sym-c8868bf639c69391eaf998e9", + "to": "sym-935a4eb2274a87e70e7dd352", + "type": "depends_on" + }, + { + "from": "sym-2a9103f7b96eefd857128feb", + "to": "mod-99cb8cee8d94ff0cda253153", + "type": "depends_on" + }, + { + "from": "sym-21ea3e3d8b21f47296fc535a", + "to": "sym-2a9103f7b96eefd857128feb", + "type": "depends_on" + }, + { + "from": "sym-18b97e86025bc97b9979076c", + "to": "mod-99cb8cee8d94ff0cda253153", + "type": "depends_on" + }, + { + "from": "sym-5f0e7aef4f1b0d5922abb716", + "to": "sym-18b97e86025bc97b9979076c", + "type": "depends_on" + }, + { + "from": "sym-c7dffab7af29280725182e57", + "to": "mod-99cb8cee8d94ff0cda253153", + "type": "depends_on" + }, + { + "from": "sym-b4f763e263a51bb1a1e12bb8", + "to": "sym-c7dffab7af29280725182e57", + "type": "depends_on" + }, + { + "from": "sym-699ee11061314e7641979d09", + "to": "mod-99cb8cee8d94ff0cda253153", + "type": "depends_on" + }, + { + "from": "sym-a37ce98dfcb48ac1f5fcaba5", + "to": "sym-699ee11061314e7641979d09", + "type": "depends_on" + }, + { + "from": "mod-327512c4dc701f9a29037e12", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "mod-327512c4dc701f9a29037e12", + "to": "mod-7fc4f2fefdc6a8526f0d89e7", + "type": "depends_on" + }, + { + "from": "mod-327512c4dc701f9a29037e12", + "to": "mod-eb0798295c928ba399632ae3", + "type": "depends_on" + }, + { + "from": "mod-327512c4dc701f9a29037e12", + "to": "mod-ba811634639e67c5ad6dad6a", + "type": "depends_on" + }, + { + "from": "mod-327512c4dc701f9a29037e12", + "to": "mod-8178eae36aec57f1b202e180", + "type": "depends_on" + }, + { + "from": "mod-327512c4dc701f9a29037e12", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-327512c4dc701f9a29037e12", + "to": "mod-9e6a68c87b4e5c31d84a70f2", + "type": "depends_on" + }, + { + "from": "mod-327512c4dc701f9a29037e12", + "to": "mod-c85a25b09fa10c16a8188ca0", + "type": "depends_on" + }, + { + "from": "mod-327512c4dc701f9a29037e12", + "to": "mod-f67afbbcc2c394e0b6549ff8", + "type": "depends_on" + }, + { + "from": "mod-327512c4dc701f9a29037e12", + "to": "mod-f67afbbcc2c394e0b6549ff8", + "type": "depends_on" + }, + { + "from": "mod-327512c4dc701f9a29037e12", + "to": "mod-52aa016deaac90f2f1067844", + "type": "depends_on" + }, + { + "from": "mod-327512c4dc701f9a29037e12", + "to": "mod-900742fc8a97706a00e06129", + "type": "depends_on" + }, + { + "from": "mod-327512c4dc701f9a29037e12", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-327512c4dc701f9a29037e12", + "to": "mod-f87e42bd9aa4eebfae23dbd1", + "type": "depends_on" + }, + { + "from": "mod-327512c4dc701f9a29037e12", + "to": "mod-8aef488fb2fc78414791967a", + "type": "depends_on" + }, + { + "from": "mod-327512c4dc701f9a29037e12", + "to": "mod-a8a39a4fb87704dbcb720225", + "type": "depends_on" + }, + { + "from": "mod-327512c4dc701f9a29037e12", + "to": "mod-cee54b249e5709ba015c9342", + "type": "depends_on" + }, + { + "from": "mod-327512c4dc701f9a29037e12", + "to": "mod-9b1b89cd5b264f022df908d4", + "type": "depends_on" + }, + { + "from": "mod-327512c4dc701f9a29037e12", + "to": "mod-ec09ae3ca7a100b5fa55556d", + "type": "depends_on" + }, + { + "from": "mod-b14fd27b1e26707d72c1730a", + "to": "mod-3b62039e7459fe4199077784", + "type": "depends_on" + }, + { + "from": "mod-b14fd27b1e26707d72c1730a", + "to": "mod-36fe55884844248a7ff73159", + "type": "depends_on" + }, + { + "from": "mod-b14fd27b1e26707d72c1730a", + "to": "mod-4e4680ebab441dcef21432ff", + "type": "depends_on" + }, + { + "from": "mod-b14fd27b1e26707d72c1730a", + "to": "mod-f30737840d94511712dda889", + "type": "depends_on" + }, + { + "from": "mod-b14fd27b1e26707d72c1730a", + "to": "mod-a1bb18b05142b623b9fb8be4", + "type": "depends_on" + }, + { + "from": "mod-b14fd27b1e26707d72c1730a", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-b14fd27b1e26707d72c1730a", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "mod-b14fd27b1e26707d72c1730a", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "sym-e9ff6a51fed52302f183f9ff", + "to": "mod-b14fd27b1e26707d72c1730a", + "type": "depends_on" + }, + { + "from": "sym-e1860aeb3770058ff3c3984d", + "to": "mod-b14fd27b1e26707d72c1730a", + "type": "depends_on" + }, + { + "from": "sym-969cec081b320862dec672b7", + "to": "mod-b14fd27b1e26707d72c1730a", + "type": "depends_on" + }, + { + "from": "mod-4e4680ebab441dcef21432ff", + "to": "mod-f30737840d94511712dda889", + "type": "depends_on" + }, + { + "from": "mod-4e4680ebab441dcef21432ff", + "to": "mod-7656cd8b9f3c2f0776a9aaa8", + "type": "depends_on" + }, + { + "from": "sym-b922f1d9098d7a4cd4f8028e", + "to": "mod-4e4680ebab441dcef21432ff", + "type": "depends_on" + }, + { + "from": "sym-a5aa69428632eb5ff35c24d2", + "to": "sym-b922f1d9098d7a4cd4f8028e", + "type": "depends_on" + }, + { + "from": "sym-16f750165c16e7c1feabd3d1", + "to": "sym-b922f1d9098d7a4cd4f8028e", + "type": "depends_on" + }, + { + "from": "sym-d579b50fddb19045a7bbd220", + "to": "sym-b922f1d9098d7a4cd4f8028e", + "type": "depends_on" + }, + { + "from": "sym-e1d9c0b271d533213f995550", + "to": "sym-b922f1d9098d7a4cd4f8028e", + "type": "depends_on" + }, + { + "from": "mod-3b62039e7459fe4199077784", + "to": "mod-f30737840d94511712dda889", + "type": "depends_on" + }, + { + "from": "sym-1ac6951f1be4ce316fd98a61", + "to": "mod-3b62039e7459fe4199077784", + "type": "depends_on" + }, + { + "from": "sym-7052061179401b661022a562", + "to": "sym-1ac6951f1be4ce316fd98a61", + "type": "depends_on" + }, + { + "from": "sym-4ce023944953633a4e0dc5a5", + "to": "sym-1ac6951f1be4ce316fd98a61", + "type": "depends_on" + }, + { + "from": "sym-02de4cc64467c6c1e46ff17a", + "to": "sym-1ac6951f1be4ce316fd98a61", + "type": "depends_on" + }, + { + "from": "sym-f63492b60547693ff5a625f1", + "to": "sym-1ac6951f1be4ce316fd98a61", + "type": "depends_on" + }, + { + "from": "sym-a7ec4c6121891fe7bdda936f", + "to": "sym-1ac6951f1be4ce316fd98a61", + "type": "depends_on" + }, + { + "from": "mod-f30737840d94511712dda889", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-9cff97c1d186e2f747cdfad7", + "to": "mod-f30737840d94511712dda889", + "type": "depends_on" + }, + { + "from": "sym-eae3b686b7a78c12fefd52e2", + "to": "sym-9cff97c1d186e2f747cdfad7", + "type": "depends_on" + }, + { + "from": "sym-e322a0df9bf74f4fc0c0f861", + "to": "sym-9cff97c1d186e2f747cdfad7", + "type": "depends_on" + }, + { + "from": "sym-d3e903adb164fb871dcb44a5", + "to": "sym-9cff97c1d186e2f747cdfad7", + "type": "depends_on" + }, + { + "from": "sym-fbe78285d0072abe0aacde74", + "to": "sym-9cff97c1d186e2f747cdfad7", + "type": "depends_on" + }, + { + "from": "sym-1c44d24073f117db03f1ba50", + "to": "sym-9cff97c1d186e2f747cdfad7", + "type": "depends_on" + }, + { + "from": "mod-36fe55884844248a7ff73159", + "to": "mod-f30737840d94511712dda889", + "type": "depends_on" + }, + { + "from": "mod-36fe55884844248a7ff73159", + "to": "mod-a1bb18b05142b623b9fb8be4", + "type": "depends_on" + }, + { + "from": "sym-6b2c9e3fd8b741225f43d659", + "to": "mod-36fe55884844248a7ff73159", + "type": "depends_on" + }, + { + "from": "sym-1ca6e2211ead3ab2a1f77cb6", + "to": "sym-6b2c9e3fd8b741225f43d659", + "type": "depends_on" + }, + { + "from": "sym-484103a36838ad3f5a38b96b", + "to": "sym-6b2c9e3fd8b741225f43d659", + "type": "depends_on" + }, + { + "from": "sym-736b0e99fea148f91d2a7afa", + "to": "sym-6b2c9e3fd8b741225f43d659", + "type": "depends_on" + }, + { + "from": "mod-cd472ca23fca8b4aead577c4", + "to": "mod-3a3b7b050c56c146875c18fb", + "type": "depends_on" + }, + { + "from": "sym-1eb50452b11e15d996e1a4c6", + "to": "mod-cd472ca23fca8b4aead577c4", + "type": "depends_on" + }, + { + "from": "sym-764a18253934fb84aa1790b3", + "to": "sym-1eb50452b11e15d996e1a4c6", + "type": "depends_on" + }, + { + "from": "sym-e865be04c5b176c2fcef284f", + "to": "sym-1eb50452b11e15d996e1a4c6", + "type": "depends_on" + }, + { + "from": "sym-9a5684d731dd1248da6a21ef", + "to": "sym-1eb50452b11e15d996e1a4c6", + "type": "depends_on" + }, + { + "from": "sym-aa719229bc39cea907aee9db", + "to": "sym-1eb50452b11e15d996e1a4c6", + "type": "depends_on" + }, + { + "from": "sym-60cc3956d6e6308983108861", + "to": "sym-1eb50452b11e15d996e1a4c6", + "type": "depends_on" + }, + { + "from": "sym-139e5258c47864afabf7e515", + "to": "sym-1eb50452b11e15d996e1a4c6", + "type": "depends_on" + }, + { + "from": "sym-98437ac92e6266fc78125452", + "to": "mod-d6a62d75526a851c966f7b84", + "type": "depends_on" + }, + { + "from": "sym-f9714bf135b96cbdf541c7b1", + "to": "sym-98437ac92e6266fc78125452", + "type": "depends_on" + }, + { + "from": "sym-76003dd5d7d3e16989e7df26", + "to": "mod-9a663bc106327e8422201a95", + "type": "depends_on" + }, + { + "from": "sym-53c3f376c6ca6c8b45db6354", + "to": "sym-76003dd5d7d3e16989e7df26", + "type": "depends_on" + }, + { + "from": "sym-3531a9f3d8f1352b9d2dec84", + "to": "mod-12d77c813504670328c9b4f1", + "type": "depends_on" + }, + { + "from": "sym-bde7808e4f3ae52d972170ba", + "to": "sym-3531a9f3d8f1352b9d2dec84", + "type": "depends_on" + }, + { + "from": "sym-6ec12fe00dacd7937033485a", + "to": "sym-3531a9f3d8f1352b9d2dec84", + "type": "depends_on" + }, + { + "from": "sym-3dca5e0bf1988930dfd34eae", + "to": "sym-3531a9f3d8f1352b9d2dec84", + "type": "depends_on" + }, + { + "from": "mod-d0e009681585b57776f6a187", + "to": "mod-12d77c813504670328c9b4f1", + "type": "depends_on" + }, + { + "from": "mod-d0e009681585b57776f6a187", + "to": "mod-8aef488fb2fc78414791967a", + "type": "depends_on" + }, + { + "from": "mod-d0e009681585b57776f6a187", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-d0e009681585b57776f6a187", + "to": "mod-1de8a1fb6a48c6a931549f30", + "type": "depends_on" + }, + { + "from": "mod-d0e009681585b57776f6a187", + "to": "mod-84552d58b6743daab10f83b3", + "type": "depends_on" + }, + { + "from": "mod-d0e009681585b57776f6a187", + "to": "mod-16a76d1c87dfcbecec53d1e0", + "type": "depends_on" + }, + { + "from": "mod-d0e009681585b57776f6a187", + "to": "mod-c20c965c5562cff684a7448f", + "type": "depends_on" + }, + { + "from": "mod-d0e009681585b57776f6a187", + "to": "mod-ad645bf9d23cc4e8c30848fc", + "type": "depends_on" + }, + { + "from": "mod-d0e009681585b57776f6a187", + "to": "mod-c31ff6a7377bd2e29ce07160", + "type": "depends_on" + }, + { + "from": "mod-d0e009681585b57776f6a187", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-d0e009681585b57776f6a187", + "to": "mod-dc4c1cf1104faf408e942485", + "type": "depends_on" + }, + { + "from": "mod-d0e009681585b57776f6a187", + "to": "mod-205c88f6af728bd7b4ebc280", + "type": "depends_on" + }, + { + "from": "mod-d0e009681585b57776f6a187", + "to": "mod-786d72f288c1067b50b58d19", + "type": "depends_on" + }, + { + "from": "mod-d0e009681585b57776f6a187", + "to": "mod-786d72f288c1067b50b58d19", + "type": "depends_on" + }, + { + "from": "mod-d0e009681585b57776f6a187", + "to": "mod-91454010a0aa78f3ef28bd69", + "type": "depends_on" + }, + { + "from": "mod-d0e009681585b57776f6a187", + "to": "mod-e395bfa94e646748f1e3298e", + "type": "depends_on" + }, + { + "from": "sym-00e4d2471550dbf3aeb68901", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "sym-25f02bcbe29f875ab76aae3c", + "to": "sym-00e4d2471550dbf3aeb68901", + "type": "depends_on" + }, + { + "from": "sym-92a40a270894c02b37cf69d0", + "to": "sym-00e4d2471550dbf3aeb68901", + "type": "depends_on" + }, + { + "from": "sym-1ba1c6a5034cc8145e2aae35", + "to": "sym-00e4d2471550dbf3aeb68901", + "type": "depends_on" + }, + { + "from": "sym-8c2ac5f81d00901af3bea463", + "to": "sym-00e4d2471550dbf3aeb68901", + "type": "depends_on" + }, + { + "from": "sym-da62bb050091ee1e534103ae", + "to": "sym-00e4d2471550dbf3aeb68901", + "type": "depends_on" + }, + { + "from": "sym-97ec0c30212c73ea6d44f41e", + "to": "sym-00e4d2471550dbf3aeb68901", + "type": "depends_on" + }, + { + "from": "sym-ed793153e81f7ff7f544c330", + "to": "sym-00e4d2471550dbf3aeb68901", + "type": "depends_on" + }, + { + "from": "sym-bcd8d64230b3e4e1e4710afe", + "to": "sym-00e4d2471550dbf3aeb68901", + "type": "depends_on" + }, + { + "from": "sym-d5003da50d926831961f0d79", + "to": "sym-00e4d2471550dbf3aeb68901", + "type": "depends_on" + }, + { + "from": "sym-bc129c1aa7fc1f9a707643a5", + "to": "sym-00e4d2471550dbf3aeb68901", + "type": "depends_on" + }, + { + "from": "sym-62b1324f20925569af0c7d94", + "to": "sym-00e4d2471550dbf3aeb68901", + "type": "depends_on" + }, + { + "from": "sym-c98b14652a71a92d31cc89cf", + "to": "sym-00e4d2471550dbf3aeb68901", + "type": "depends_on" + }, + { + "from": "sym-1dcc44eb77d700302113243c", + "to": "sym-00e4d2471550dbf3aeb68901", + "type": "depends_on" + }, + { + "from": "sym-d6281bdc047c4680a97d4794", + "to": "sym-00e4d2471550dbf3aeb68901", + "type": "depends_on" + }, + { + "from": "sym-bce8660b398095386155235c", + "to": "sym-00e4d2471550dbf3aeb68901", + "type": "depends_on" + }, + { + "from": "sym-eba7e3ffe54ed291bd2c48ef", + "to": "sym-00e4d2471550dbf3aeb68901", + "type": "depends_on" + }, + { + "from": "sym-66abca7c0a890c9eff451b94", + "to": "sym-00e4d2471550dbf3aeb68901", + "type": "depends_on" + }, + { + "from": "sym-666e0dd7d88cb6983b6be662", + "to": "sym-00e4d2471550dbf3aeb68901", + "type": "depends_on" + }, + { + "from": "sym-5d90512dbf8aa5778c6bcb7c", + "to": "sym-00e4d2471550dbf3aeb68901", + "type": "depends_on" + }, + { + "from": "sym-3646a67443f9f0c3b575a67d", + "to": "sym-00e4d2471550dbf3aeb68901", + "type": "depends_on" + }, + { + "from": "sym-e70e7db0a823a91830f5515e", + "to": "sym-00e4d2471550dbf3aeb68901", + "type": "depends_on" + }, + { + "from": "sym-5914e64d0b069cf170aa5576", + "to": "sym-00e4d2471550dbf3aeb68901", + "type": "depends_on" + }, + { + "from": "sym-36d98395c44ece7890fcce75", + "to": "sym-00e4d2471550dbf3aeb68901", + "type": "depends_on" + }, + { + "from": "sym-c9875c12cbfb75e4c02e4966", + "to": "sym-00e4d2471550dbf3aeb68901", + "type": "depends_on" + }, + { + "from": "sym-f3eb9527e8be9c0e06a5c391", + "to": "sym-00e4d2471550dbf3aeb68901", + "type": "depends_on" + }, + { + "from": "sym-0d6db2c721dcdb828685335c", + "to": "sym-00e4d2471550dbf3aeb68901", + "type": "depends_on" + }, + { + "from": "sym-c0e0b82cf3d383210e3687ac", + "to": "sym-00e4d2471550dbf3aeb68901", + "type": "depends_on" + }, + { + "from": "sym-2ce5be0b32faebf63b290138", + "to": "sym-00e4d2471550dbf3aeb68901", + "type": "depends_on" + }, + { + "from": "sym-e6abead0194cd02f0495cc2a", + "to": "sym-00e4d2471550dbf3aeb68901", + "type": "depends_on" + }, + { + "from": "sym-20e212251cc34622794072f2", + "to": "sym-00e4d2471550dbf3aeb68901", + "type": "depends_on" + }, + { + "from": "sym-5aa3e772485150f93b70d58d", + "to": "sym-00e4d2471550dbf3aeb68901", + "type": "depends_on" + }, + { + "from": "sym-0675df5dd09d0c94ec327bd0", + "to": "sym-00e4d2471550dbf3aeb68901", + "type": "depends_on" + }, + { + "from": "sym-44b266c5d9c712e8283c7e0a", + "to": "sym-00e4d2471550dbf3aeb68901", + "type": "depends_on" + }, + { + "from": "sym-00e4d2471550dbf3aeb68901", + "to": "sym-4404f892d433afa5b82ed3f4", + "type": "calls" + }, + { + "from": "mod-91c215ca923f83144b68d625", + "to": "mod-84552d58b6743daab10f83b3", + "type": "depends_on" + }, + { + "from": "mod-91c215ca923f83144b68d625", + "to": "mod-16a76d1c87dfcbecec53d1e0", + "type": "depends_on" + }, + { + "from": "mod-91c215ca923f83144b68d625", + "to": "mod-786d72f288c1067b50b58d19", + "type": "depends_on" + }, + { + "from": "mod-91c215ca923f83144b68d625", + "to": "mod-786d72f288c1067b50b58d19", + "type": "depends_on" + }, + { + "from": "mod-91c215ca923f83144b68d625", + "to": "mod-81f929d30b493e5a0e7c38e7", + "type": "depends_on" + }, + { + "from": "mod-91c215ca923f83144b68d625", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "mod-91c215ca923f83144b68d625", + "to": "mod-996772d8748b5664e367c6c6", + "type": "depends_on" + }, + { + "from": "mod-91c215ca923f83144b68d625", + "to": "mod-652e9394671c2c32cc57b508", + "type": "depends_on" + }, + { + "from": "mod-91c215ca923f83144b68d625", + "to": "mod-e3c2dc56fd38d656d5235000", + "type": "depends_on" + }, + { + "from": "mod-91c215ca923f83144b68d625", + "to": "mod-08315e6901cb53376d13cc70", + "type": "depends_on" + }, + { + "from": "mod-91c215ca923f83144b68d625", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-91c215ca923f83144b68d625", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-91c215ca923f83144b68d625", + "to": "mod-e395bfa94e646748f1e3298e", + "type": "depends_on" + }, + { + "from": "mod-91c215ca923f83144b68d625", + "to": "mod-8aef488fb2fc78414791967a", + "type": "depends_on" + }, + { + "from": "sym-6ee2446f641e808bde4e7235", + "to": "mod-91c215ca923f83144b68d625", + "type": "depends_on" + }, + { + "from": "sym-38c603195178db449d516fac", + "to": "sym-6ee2446f641e808bde4e7235", + "type": "depends_on" + }, + { + "from": "sym-dc57bdd896327ec1e9ace624", + "to": "sym-6ee2446f641e808bde4e7235", + "type": "depends_on" + }, + { + "from": "sym-5b8a041e0679bdedd910d034", + "to": "sym-6ee2446f641e808bde4e7235", + "type": "depends_on" + }, + { + "from": "sym-e26838f941e0e2ede79144b1", + "to": "mod-91c215ca923f83144b68d625", + "type": "depends_on" + }, + { + "from": "sym-c5f31d9588601c7bab55a778", + "to": "sym-e26838f941e0e2ede79144b1", + "type": "depends_on" + }, + { + "from": "sym-18f330aab1779d66eb306b08", + "to": "mod-91c215ca923f83144b68d625", + "type": "depends_on" + }, + { + "from": "sym-9facbddf56f375064f7a6f13", + "to": "sym-18f330aab1779d66eb306b08", + "type": "depends_on" + }, + { + "from": "sym-e40519bd11de5db85a5cb89d", + "to": "sym-18f330aab1779d66eb306b08", + "type": "depends_on" + }, + { + "from": "sym-e7dfd5110b562e97bbacd645", + "to": "sym-18f330aab1779d66eb306b08", + "type": "depends_on" + }, + { + "from": "sym-46c88a0a592f6967e7590a25", + "to": "sym-18f330aab1779d66eb306b08", + "type": "depends_on" + }, + { + "from": "sym-79addca49dd8649fdbf169e0", + "to": "sym-18f330aab1779d66eb306b08", + "type": "depends_on" + }, + { + "from": "sym-d5490f6681fcd2db391197c1", + "to": "sym-18f330aab1779d66eb306b08", + "type": "depends_on" + }, + { + "from": "sym-71e6bd4c4b0b02a86349faca", + "to": "sym-18f330aab1779d66eb306b08", + "type": "depends_on" + }, + { + "from": "sym-33d96de548fdd8cbeb509c35", + "to": "sym-18f330aab1779d66eb306b08", + "type": "depends_on" + }, + { + "from": "sym-6aaff080377fc70f4d63df08", + "to": "sym-18f330aab1779d66eb306b08", + "type": "depends_on" + }, + { + "from": "sym-2debecab24f2b4a86f852c86", + "to": "sym-18f330aab1779d66eb306b08", + "type": "depends_on" + }, + { + "from": "sym-58aa0f8f51351fe7591fa958", + "to": "sym-18f330aab1779d66eb306b08", + "type": "depends_on" + }, + { + "from": "sym-d626f382c8dc9af8ff69319d", + "to": "sym-18f330aab1779d66eb306b08", + "type": "depends_on" + }, + { + "from": "sym-9e475c95e17f39691c4974b4", + "to": "sym-18f330aab1779d66eb306b08", + "type": "depends_on" + }, + { + "from": "sym-c2708b5bd2aec74c2b5a2047", + "to": "sym-18f330aab1779d66eb306b08", + "type": "depends_on" + }, + { + "from": "sym-8c622b66d95fc98d1e9153c6", + "to": "sym-18f330aab1779d66eb306b08", + "type": "depends_on" + }, + { + "from": "sym-71219d9d011df90af21998ce", + "to": "sym-18f330aab1779d66eb306b08", + "type": "depends_on" + }, + { + "from": "sym-b3c9530fe6bc8214a0c89a12", + "to": "sym-18f330aab1779d66eb306b08", + "type": "depends_on" + }, + { + "from": "sym-1c40d34e39b9c81e9db2fb4d", + "to": "sym-18f330aab1779d66eb306b08", + "type": "depends_on" + }, + { + "from": "sym-2e345d314823f39a48dd8f08", + "to": "sym-18f330aab1779d66eb306b08", + "type": "depends_on" + }, + { + "from": "sym-83027ebbdbde9ac6fbde981f", + "to": "sym-18f330aab1779d66eb306b08", + "type": "depends_on" + }, + { + "from": "sym-af61311de9bd1fdf4fd2d6b1", + "to": "sym-18f330aab1779d66eb306b08", + "type": "depends_on" + }, + { + "from": "sym-5cb1d1e9703f8d0bc245e88c", + "to": "sym-18f330aab1779d66eb306b08", + "type": "depends_on" + }, + { + "from": "sym-092836808af7c49bfd955197", + "to": "sym-18f330aab1779d66eb306b08", + "type": "depends_on" + }, + { + "from": "sym-fca070294aa37d9e0f563512", + "to": "sym-18f330aab1779d66eb306b08", + "type": "depends_on" + }, + { + "from": "sym-072403f79fd59ab5fd6649f5", + "to": "sym-18f330aab1779d66eb306b08", + "type": "depends_on" + }, + { + "from": "sym-ce7e617516b8387a1aebc005", + "to": "sym-18f330aab1779d66eb306b08", + "type": "depends_on" + }, + { + "from": "sym-85c3a202917ef7026c598fdc", + "to": "sym-18f330aab1779d66eb306b08", + "type": "depends_on" + }, + { + "from": "sym-5f6e92560d939affa395fc90", + "to": "sym-18f330aab1779d66eb306b08", + "type": "depends_on" + }, + { + "from": "mod-8786c56780e501016b92f408", + "to": "mod-e3c2dc56fd38d656d5235000", + "type": "depends_on" + }, + { + "from": "mod-8786c56780e501016b92f408", + "to": "mod-e395bfa94e646748f1e3298e", + "type": "depends_on" + }, + { + "from": "mod-8786c56780e501016b92f408", + "to": "mod-b2c7d957ae05ce535d8f8e2e", + "type": "depends_on" + }, + { + "from": "mod-8786c56780e501016b92f408", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-8786c56780e501016b92f408", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-4cf081c8a0e72521c880cd6f", + "to": "mod-8786c56780e501016b92f408", + "type": "depends_on" + }, + { + "from": "sym-e5cfd57efcf98523e19e1b24", + "to": "sym-4cf081c8a0e72521c880cd6f", + "type": "depends_on" + }, + { + "from": "sym-c9e0be9fb331c15638c40e0f", + "to": "sym-4cf081c8a0e72521c880cd6f", + "type": "depends_on" + }, + { + "from": "mod-056bc15608f58b9ec7451fc4", + "to": "mod-e3c2dc56fd38d656d5235000", + "type": "depends_on" + }, + { + "from": "mod-056bc15608f58b9ec7451fc4", + "to": "mod-e395bfa94e646748f1e3298e", + "type": "depends_on" + }, + { + "from": "mod-056bc15608f58b9ec7451fc4", + "to": "mod-b2c7d957ae05ce535d8f8e2e", + "type": "depends_on" + }, + { + "from": "mod-056bc15608f58b9ec7451fc4", + "to": "mod-1d4743119cc890fadab85fb7", + "type": "depends_on" + }, + { + "from": "mod-056bc15608f58b9ec7451fc4", + "to": "mod-84552d58b6743daab10f83b3", + "type": "depends_on" + }, + { + "from": "mod-056bc15608f58b9ec7451fc4", + "to": "mod-24557f0b00a0d628de80e5eb", + "type": "depends_on" + }, + { + "from": "mod-056bc15608f58b9ec7451fc4", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-056bc15608f58b9ec7451fc4", + "to": "mod-c5d542bba68467e14e67638a", + "type": "depends_on" + }, + { + "from": "mod-056bc15608f58b9ec7451fc4", + "to": "mod-292e8f8c5a666fd4318d4859", + "type": "depends_on" + }, + { + "from": "mod-056bc15608f58b9ec7451fc4", + "to": "mod-4700c8f714ccf0e905a08548", + "type": "depends_on" + }, + { + "from": "mod-056bc15608f58b9ec7451fc4", + "to": "mod-16a76d1c87dfcbecec53d1e0", + "type": "depends_on" + }, + { + "from": "sym-d9261695c20f2db1c1c7a30d", + "to": "mod-056bc15608f58b9ec7451fc4", + "type": "depends_on" + }, + { + "from": "sym-2366b9c6fa0a3077410d401b", + "to": "sym-d9261695c20f2db1c1c7a30d", + "type": "depends_on" + }, + { + "from": "sym-4aafd6328a7adcebef014576", + "to": "sym-d9261695c20f2db1c1c7a30d", + "type": "depends_on" + }, + { + "from": "sym-22c7330c7c1a06c23dc4e1f3", + "to": "sym-d9261695c20f2db1c1c7a30d", + "type": "depends_on" + }, + { + "from": "sym-92423687c06f0129bca83956", + "to": "sym-d9261695c20f2db1c1c7a30d", + "type": "depends_on" + }, + { + "from": "sym-197d1722f57cdf3a40c2ab0a", + "to": "sym-d9261695c20f2db1c1c7a30d", + "type": "depends_on" + }, + { + "from": "sym-c1c65f4dc014c86b200864ee", + "to": "sym-d9261695c20f2db1c1c7a30d", + "type": "depends_on" + }, + { + "from": "sym-4f027c742788729961e93bf3", + "to": "sym-d9261695c20f2db1c1c7a30d", + "type": "depends_on" + }, + { + "from": "sym-bff0ecde2776dec95ee3c547", + "to": "sym-d9261695c20f2db1c1c7a30d", + "type": "depends_on" + }, + { + "from": "sym-8c05083af24170fddc969ba7", + "to": "sym-d9261695c20f2db1c1c7a30d", + "type": "depends_on" + }, + { + "from": "sym-d8f944d79e3dc0016610f86f", + "to": "sym-d9261695c20f2db1c1c7a30d", + "type": "depends_on" + }, + { + "from": "sym-edfadc288a1910878e5c329b", + "to": "sym-d9261695c20f2db1c1c7a30d", + "type": "depends_on" + }, + { + "from": "sym-346648c4e9d12febf4429bca", + "to": "sym-d9261695c20f2db1c1c7a30d", + "type": "depends_on" + }, + { + "from": "sym-2fe54b5d30a79b4770f2eb01", + "to": "sym-d9261695c20f2db1c1c7a30d", + "type": "depends_on" + }, + { + "from": "sym-5a6c9940cb34d31053bf3690", + "to": "sym-d9261695c20f2db1c1c7a30d", + "type": "depends_on" + }, + { + "from": "sym-b9f92856c72f6227bbc63082", + "to": "sym-d9261695c20f2db1c1c7a30d", + "type": "depends_on" + }, + { + "from": "sym-265b48bf8b8cdc9d09019aa2", + "to": "sym-d9261695c20f2db1c1c7a30d", + "type": "depends_on" + }, + { + "from": "sym-73c8ae8986354a28b97fbf4c", + "to": "sym-d9261695c20f2db1c1c7a30d", + "type": "depends_on" + }, + { + "from": "sym-b5cf3e2f5dc01ee8991f324a", + "to": "sym-d9261695c20f2db1c1c7a30d", + "type": "depends_on" + }, + { + "from": "sym-d9261695c20f2db1c1c7a30d", + "to": "sym-e9ff6a51fed52302f183f9ff", + "type": "calls" + }, + { + "from": "mod-ce3b72f0515cac2e2fe5ca15", + "to": "mod-e3c2dc56fd38d656d5235000", + "type": "depends_on" + }, + { + "from": "mod-ce3b72f0515cac2e2fe5ca15", + "to": "mod-e395bfa94e646748f1e3298e", + "type": "depends_on" + }, + { + "from": "mod-ce3b72f0515cac2e2fe5ca15", + "to": "mod-b2c7d957ae05ce535d8f8e2e", + "type": "depends_on" + }, + { + "from": "mod-ce3b72f0515cac2e2fe5ca15", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-5eb556c7155bbf9a5c0934b6", + "to": "mod-ce3b72f0515cac2e2fe5ca15", + "type": "depends_on" + }, + { + "from": "sym-205554026dce7da322f2ba6b", + "to": "sym-5eb556c7155bbf9a5c0934b6", + "type": "depends_on" + }, + { + "from": "sym-65c1018c321675804e2e81bb", + "to": "sym-5eb556c7155bbf9a5c0934b6", + "type": "depends_on" + }, + { + "from": "mod-d0734ff72a9c8934deea7846", + "to": "mod-f070f31fd907efb13c1863dc", + "type": "depends_on" + }, + { + "from": "mod-d0734ff72a9c8934deea7846", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-d0734ff72a9c8934deea7846", + "to": "mod-e395bfa94e646748f1e3298e", + "type": "depends_on" + }, + { + "from": "sym-269e4fbb61c177255aec3579", + "to": "mod-d0734ff72a9c8934deea7846", + "type": "depends_on" + }, + { + "from": "sym-8ba03001bd95dd23e0d18bd3", + "to": "sym-269e4fbb61c177255aec3579", + "type": "depends_on" + }, + { + "from": "sym-c466293ba66477debca41064", + "to": "sym-269e4fbb61c177255aec3579", + "type": "depends_on" + }, + { + "from": "sym-8bc3042db4e035701f845913", + "to": "sym-269e4fbb61c177255aec3579", + "type": "depends_on" + }, + { + "from": "sym-b3f2856c4eddd3ad35183479", + "to": "sym-269e4fbb61c177255aec3579", + "type": "depends_on" + }, + { + "from": "sym-60b1dcfccd7d912d62f07c4c", + "to": "sym-269e4fbb61c177255aec3579", + "type": "depends_on" + }, + { + "from": "mod-c5d542bba68467e14e67638a", + "to": "mod-09e939d9272236688a28974a", + "type": "depends_on" + }, + { + "from": "sym-605d3a415b8b3b5bf34196c3", + "to": "mod-c5d542bba68467e14e67638a", + "type": "depends_on" + }, + { + "from": "sym-1cc5ed15187d2a43e127dda5", + "to": "sym-605d3a415b8b3b5bf34196c3", + "type": "depends_on" + }, + { + "from": "sym-b46342d64e2d554a6c0b65c8", + "to": "sym-605d3a415b8b3b5bf34196c3", + "type": "depends_on" + }, + { + "from": "sym-c495996d00ba846d0fe68da8", + "to": "sym-605d3a415b8b3b5bf34196c3", + "type": "depends_on" + }, + { + "from": "sym-34935ef1df53fbbf8e5b3d33", + "to": "sym-605d3a415b8b3b5bf34196c3", + "type": "depends_on" + }, + { + "from": "sym-750a05a8d88d303c2cdb0313", + "to": "sym-605d3a415b8b3b5bf34196c3", + "type": "depends_on" + }, + { + "from": "sym-c26fe2934565e589fa3d57da", + "to": "sym-605d3a415b8b3b5bf34196c3", + "type": "depends_on" + }, + { + "from": "sym-871a354ffe05d3ed57c9cf48", + "to": "sym-605d3a415b8b3b5bf34196c3", + "type": "depends_on" + }, + { + "from": "sym-c7515a5b3bc3b3ae64b20549", + "to": "sym-605d3a415b8b3b5bf34196c3", + "type": "depends_on" + }, + { + "from": "sym-f4182f20b12ea5995aa8f2b3", + "to": "sym-605d3a415b8b3b5bf34196c3", + "type": "depends_on" + }, + { + "from": "sym-a9f646772777a0cb950cc16a", + "to": "sym-605d3a415b8b3b5bf34196c3", + "type": "depends_on" + }, + { + "from": "sym-9ccdee42c05c560def083e01", + "to": "sym-605d3a415b8b3b5bf34196c3", + "type": "depends_on" + }, + { + "from": "sym-a71913c481b711116ffa657b", + "to": "sym-605d3a415b8b3b5bf34196c3", + "type": "depends_on" + }, + { + "from": "sym-aeb49a4780bd3f40ca3cece4", + "to": "sym-605d3a415b8b3b5bf34196c3", + "type": "depends_on" + }, + { + "from": "sym-71784c490210b3b11901f352", + "to": "sym-605d3a415b8b3b5bf34196c3", + "type": "depends_on" + }, + { + "from": "sym-a0b60f97b33a82757e742ac5", + "to": "sym-605d3a415b8b3b5bf34196c3", + "type": "depends_on" + }, + { + "from": "sym-d418522a11310eb0211f7dbf", + "to": "sym-605d3a415b8b3b5bf34196c3", + "type": "depends_on" + }, + { + "from": "sym-ca42b4774377bb461e4e6398", + "to": "sym-605d3a415b8b3b5bf34196c3", + "type": "depends_on" + }, + { + "from": "mod-a2f8e9a3ce2f5a58e00df674", + "to": "mod-8fb910e5659126b322f9fe29", + "type": "depends_on" + }, + { + "from": "mod-a2f8e9a3ce2f5a58e00df674", + "to": "mod-16a76d1c87dfcbecec53d1e0", + "type": "depends_on" + }, + { + "from": "mod-a2f8e9a3ce2f5a58e00df674", + "to": "mod-84552d58b6743daab10f83b3", + "type": "depends_on" + }, + { + "from": "mod-a2f8e9a3ce2f5a58e00df674", + "to": "mod-db1374491b6a82aa10a4e2f5", + "type": "depends_on" + }, + { + "from": "mod-a2f8e9a3ce2f5a58e00df674", + "to": "mod-786d72f288c1067b50b58d19", + "type": "depends_on" + }, + { + "from": "mod-a2f8e9a3ce2f5a58e00df674", + "to": "mod-dc4c1cf1104faf408e942485", + "type": "depends_on" + }, + { + "from": "mod-a2f8e9a3ce2f5a58e00df674", + "to": "mod-9e7f56ec932ce908db2b6d6e", + "type": "depends_on" + }, + { + "from": "sym-68bcd93b16922175db1b5cbf", + "to": "mod-a2f8e9a3ce2f5a58e00df674", + "type": "depends_on" + }, + { + "from": "mod-291d062f1bd46af2d595f119", + "to": "mod-91c215ca923f83144b68d625", + "type": "depends_on" + }, + { + "from": "sym-aff919f6ec93563946a19be3", + "to": "mod-291d062f1bd46af2d595f119", + "type": "depends_on" + }, + { + "from": "mod-fe44c1bccd2633149d023f55", + "to": "mod-91c215ca923f83144b68d625", + "type": "depends_on" + }, + { + "from": "sym-768b3d2e609c7a7d9e7e123f", + "to": "mod-fe44c1bccd2633149d023f55", + "type": "depends_on" + }, + { + "from": "mod-1d4743119cc890fadab85fb7", + "to": "mod-e395bfa94e646748f1e3298e", + "type": "depends_on" + }, + { + "from": "mod-1d4743119cc890fadab85fb7", + "to": "mod-16a76d1c87dfcbecec53d1e0", + "type": "depends_on" + }, + { + "from": "mod-1d4743119cc890fadab85fb7", + "to": "mod-e3c2dc56fd38d656d5235000", + "type": "depends_on" + }, + { + "from": "sym-fcae6dca65ab92ce6e8c43b0", + "to": "mod-1d4743119cc890fadab85fb7", + "type": "depends_on" + }, + { + "from": "mod-37b5ef5203b8d54dbbc526c9", + "to": "mod-16a76d1c87dfcbecec53d1e0", + "type": "depends_on" + }, + { + "from": "mod-37b5ef5203b8d54dbbc526c9", + "to": "mod-e3c2dc56fd38d656d5235000", + "type": "depends_on" + }, + { + "from": "sym-791e472cf07c678ab89547f5", + "to": "mod-37b5ef5203b8d54dbbc526c9", + "type": "depends_on" + }, + { + "from": "sym-2476c69d26521df4fa998292", + "to": "mod-37b5ef5203b8d54dbbc526c9", + "type": "depends_on" + }, + { + "from": "mod-652e9394671c2c32cc57b508", + "to": "mod-84552d58b6743daab10f83b3", + "type": "depends_on" + }, + { + "from": "mod-652e9394671c2c32cc57b508", + "to": "mod-16a76d1c87dfcbecec53d1e0", + "type": "depends_on" + }, + { + "from": "mod-652e9394671c2c32cc57b508", + "to": "mod-dc4c1cf1104faf408e942485", + "type": "depends_on" + }, + { + "from": "mod-652e9394671c2c32cc57b508", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "mod-652e9394671c2c32cc57b508", + "to": "mod-9e7f56ec932ce908db2b6d6e", + "type": "depends_on" + }, + { + "from": "mod-652e9394671c2c32cc57b508", + "to": "mod-786d72f288c1067b50b58d19", + "type": "depends_on" + }, + { + "from": "sym-f1ad2eeaf85b22aebcfd1d0b", + "to": "mod-652e9394671c2c32cc57b508", + "type": "depends_on" + }, + { + "from": "sym-89d3088a75cd27ac95940da2", + "to": "sym-f1ad2eeaf85b22aebcfd1d0b", + "type": "depends_on" + }, + { + "from": "sym-882a6fe5739f28b6209f2a29", + "to": "sym-f1ad2eeaf85b22aebcfd1d0b", + "type": "depends_on" + }, + { + "from": "sym-04c11175ee7e0898d4e3e531", + "to": "sym-f1ad2eeaf85b22aebcfd1d0b", + "type": "depends_on" + }, + { + "from": "mod-8d16d859c035fc1372e07e06", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-8d16d859c035fc1372e07e06", + "to": "mod-de2778e7582cc783d0c02163", + "type": "depends_on" + }, + { + "from": "sym-951698e6c9f720f735f0bfe3", + "to": "mod-8d16d859c035fc1372e07e06", + "type": "depends_on" + }, + { + "from": "sym-34489faeacbf50c7bc09dbf1", + "to": "sym-951698e6c9f720f735f0bfe3", + "type": "depends_on" + }, + { + "from": "sym-382b32b7744f4a1bcddc6aaa", + "to": "sym-951698e6c9f720f735f0bfe3", + "type": "depends_on" + }, + { + "from": "sym-951698e6c9f720f735f0bfe3", + "to": "sym-adc4065dd1b3ac679d5ba2f9", + "type": "calls" + }, + { + "from": "sym-951698e6c9f720f735f0bfe3", + "to": "sym-b4ef38925e03b3181e41e353", + "type": "calls" + }, + { + "from": "sym-951698e6c9f720f735f0bfe3", + "to": "sym-9281614f452adafc3cae1183", + "type": "calls" + }, + { + "from": "mod-43a22fa504defe4ae499272f", + "to": "mod-16a76d1c87dfcbecec53d1e0", + "type": "depends_on" + }, + { + "from": "mod-43a22fa504defe4ae499272f", + "to": "mod-84552d58b6743daab10f83b3", + "type": "depends_on" + }, + { + "from": "mod-43a22fa504defe4ae499272f", + "to": "mod-db1374491b6a82aa10a4e2f5", + "type": "depends_on" + }, + { + "from": "mod-43a22fa504defe4ae499272f", + "to": "mod-f070f31fd907efb13c1863dc", + "type": "depends_on" + }, + { + "from": "mod-43a22fa504defe4ae499272f", + "to": "mod-786d72f288c1067b50b58d19", + "type": "depends_on" + }, + { + "from": "mod-43a22fa504defe4ae499272f", + "to": "mod-dc4c1cf1104faf408e942485", + "type": "depends_on" + }, + { + "from": "mod-43a22fa504defe4ae499272f", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "mod-43a22fa504defe4ae499272f", + "to": "mod-9e7f56ec932ce908db2b6d6e", + "type": "depends_on" + }, + { + "from": "sym-56ec447a61bf949ac32f434b", + "to": "mod-43a22fa504defe4ae499272f", + "type": "depends_on" + }, + { + "from": "sym-8ae7289bebb399343fb0af1e", + "to": "mod-43a22fa504defe4ae499272f", + "type": "depends_on" + }, + { + "from": "sym-c860224b0e2990892c904249", + "to": "mod-43a22fa504defe4ae499272f", + "type": "depends_on" + }, + { + "from": "sym-a09e4498f797e281ad451c42", + "to": "mod-43a22fa504defe4ae499272f", + "type": "depends_on" + }, + { + "from": "sym-a09e4498f797e281ad451c42", + "to": "sym-56ec447a61bf949ac32f434b", + "type": "calls" + }, + { + "from": "sym-a09e4498f797e281ad451c42", + "to": "sym-8ae7289bebb399343fb0af1e", + "type": "calls" + }, + { + "from": "sym-a09e4498f797e281ad451c42", + "to": "sym-c860224b0e2990892c904249", + "type": "calls" + }, + { + "from": "sym-27459666e0f28d8c21b10cf3", + "to": "mod-43a22fa504defe4ae499272f", + "type": "depends_on" + }, + { + "from": "sym-27459666e0f28d8c21b10cf3", + "to": "sym-a09e4498f797e281ad451c42", + "type": "calls" + }, + { + "from": "mod-525c86f0484f1a8328f90e21", + "to": "mod-1d4743119cc890fadab85fb7", + "type": "depends_on" + }, + { + "from": "mod-525c86f0484f1a8328f90e21", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-525c86f0484f1a8328f90e21", + "to": "mod-1b44d7490c1bab1a28faf13b", + "type": "depends_on" + }, + { + "from": "mod-525c86f0484f1a8328f90e21", + "to": "mod-24557f0b00a0d628de80e5eb", + "type": "depends_on" + }, + { + "from": "sym-2fb8ea47d77841cb1c9c723d", + "to": "mod-525c86f0484f1a8328f90e21", + "type": "depends_on" + }, + { + "from": "sym-f5e1dae1fda06177bf332cd5", + "to": "sym-2fb8ea47d77841cb1c9c723d", + "type": "depends_on" + }, + { + "from": "sym-250be326bd2cf87c0c3c55a3", + "to": "sym-2fb8ea47d77841cb1c9c723d", + "type": "depends_on" + }, + { + "from": "sym-37d7e586ec06993e0e47be67", + "to": "sym-2fb8ea47d77841cb1c9c723d", + "type": "depends_on" + }, + { + "from": "sym-624aefaae7c50cc48d1d7856", + "to": "sym-2fb8ea47d77841cb1c9c723d", + "type": "depends_on" + }, + { + "from": "sym-6453b4a51f77b0e33e0871f2", + "to": "sym-2fb8ea47d77841cb1c9c723d", + "type": "depends_on" + }, + { + "from": "sym-be8ac4ac4c6f736c62f19940", + "to": "sym-2fb8ea47d77841cb1c9c723d", + "type": "depends_on" + }, + { + "from": "sym-ce51cedbbc722d871e574c34", + "to": "sym-2fb8ea47d77841cb1c9c723d", + "type": "depends_on" + }, + { + "from": "sym-eb769a327d251102c9539621", + "to": "sym-2fb8ea47d77841cb1c9c723d", + "type": "depends_on" + }, + { + "from": "sym-ed231c11ba266752dca686de", + "to": "sym-2fb8ea47d77841cb1c9c723d", + "type": "depends_on" + }, + { + "from": "sym-621907ad30456ba7db233704", + "to": "sym-2fb8ea47d77841cb1c9c723d", + "type": "depends_on" + }, + { + "from": "sym-c65207b5ded1f6d2eb1bf90d", + "to": "sym-2fb8ea47d77841cb1c9c723d", + "type": "depends_on" + }, + { + "from": "sym-2fb8ea47d77841cb1c9c723d", + "to": "sym-fcae6dca65ab92ce6e8c43b0", + "type": "calls" + }, + { + "from": "mod-f33c364cc30d4c989aabb467", + "to": "mod-291d062f1bd46af2d595f119", + "type": "depends_on" + }, + { + "from": "mod-f33c364cc30d4c989aabb467", + "to": "mod-fe44c1bccd2633149d023f55", + "type": "depends_on" + }, + { + "from": "mod-f33c364cc30d4c989aabb467", + "to": "mod-43a22fa504defe4ae499272f", + "type": "depends_on" + }, + { + "from": "sym-8b770fac114c0bea3fceb66d", + "to": "mod-f33c364cc30d4c989aabb467", + "type": "depends_on" + }, + { + "from": "mod-c31ff6a7377bd2e29ce07160", + "to": "mod-16a76d1c87dfcbecec53d1e0", + "type": "depends_on" + }, + { + "from": "mod-c31ff6a7377bd2e29ce07160", + "to": "mod-1d4743119cc890fadab85fb7", + "type": "depends_on" + }, + { + "from": "mod-c31ff6a7377bd2e29ce07160", + "to": "mod-e3c2dc56fd38d656d5235000", + "type": "depends_on" + }, + { + "from": "sym-949988062e958db45bd9006c", + "to": "mod-c31ff6a7377bd2e29ce07160", + "type": "depends_on" + }, + { + "from": "mod-60ac739c2c89b2f73e69a278", + "to": "mod-0a687d4a8de66750c8ed59f7", + "type": "depends_on" + }, + { + "from": "mod-60ac739c2c89b2f73e69a278", + "to": "mod-3a3b7b050c56c146875c18fb", + "type": "depends_on" + }, + { + "from": "mod-60ac739c2c89b2f73e69a278", + "to": "mod-b2c7d957ae05ce535d8f8e2e", + "type": "depends_on" + }, + { + "from": "mod-60ac739c2c89b2f73e69a278", + "to": "mod-84552d58b6743daab10f83b3", + "type": "depends_on" + }, + { + "from": "mod-60ac739c2c89b2f73e69a278", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-e55d97a832aabc5025e3f6b8", + "to": "mod-60ac739c2c89b2f73e69a278", + "type": "depends_on" + }, + { + "from": "sym-c1ce5d44ff631ef5243e34d8", + "to": "mod-e15b2a203e781bad5f15394f", + "type": "depends_on" + }, + { + "from": "sym-e137071690ac87c5a393b765", + "to": "mod-e15b2a203e781bad5f15394f", + "type": "depends_on" + }, + { + "from": "sym-e137071690ac87c5a393b765", + "to": "sym-c1ce5d44ff631ef5243e34d8", + "type": "calls" + }, + { + "from": "sym-434133fb66b01eec771c868b", + "to": "mod-e15b2a203e781bad5f15394f", + "type": "depends_on" + }, + { + "from": "sym-434133fb66b01eec771c868b", + "to": "sym-c1ce5d44ff631ef5243e34d8", + "type": "calls" + }, + { + "from": "mod-ea8ac339723e29cb2a2446ee", + "to": "mod-8fb910e5659126b322f9fe29", + "type": "depends_on" + }, + { + "from": "mod-ea8ac339723e29cb2a2446ee", + "to": "mod-b2c7d957ae05ce535d8f8e2e", + "type": "depends_on" + }, + { + "from": "mod-ea8ac339723e29cb2a2446ee", + "to": "mod-457939e5e7481c4a6a17e7a3", + "type": "depends_on" + }, + { + "from": "sym-4ceb05e530a44839153ae9e8", + "to": "mod-ea8ac339723e29cb2a2446ee", + "type": "depends_on" + }, + { + "from": "mod-be7b10b7e34156b0bae273f7", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-be7b10b7e34156b0bae273f7", + "to": "mod-525c86f0484f1a8328f90e21", + "type": "depends_on" + }, + { + "from": "mod-be7b10b7e34156b0bae273f7", + "to": "mod-1d4743119cc890fadab85fb7", + "type": "depends_on" + }, + { + "from": "mod-be7b10b7e34156b0bae273f7", + "to": "mod-e15b2a203e781bad5f15394f", + "type": "depends_on" + }, + { + "from": "mod-be7b10b7e34156b0bae273f7", + "to": "mod-b989c7daa266d9b652abd067", + "type": "depends_on" + }, + { + "from": "mod-be7b10b7e34156b0bae273f7", + "to": "mod-24557f0b00a0d628de80e5eb", + "type": "depends_on" + }, + { + "from": "sym-86dad8a3cc937e2681c558d1", + "to": "mod-be7b10b7e34156b0bae273f7", + "type": "depends_on" + }, + { + "from": "sym-b0b72ec0c9b1eac0e797bc45", + "to": "sym-86dad8a3cc937e2681c558d1", + "type": "depends_on" + }, + { + "from": "sym-790b8d8a6e814aaf6a4e7c7d", + "to": "sym-86dad8a3cc937e2681c558d1", + "type": "depends_on" + }, + { + "from": "sym-8a9ddd5405a61cd9a4baf5d6", + "to": "sym-86dad8a3cc937e2681c558d1", + "type": "depends_on" + }, + { + "from": "sym-7df1dc85869fbbaf76a62503", + "to": "sym-86dad8a3cc937e2681c558d1", + "type": "depends_on" + }, + { + "from": "sym-74dbc4492d4bf45e8d689b5b", + "to": "sym-86dad8a3cc937e2681c558d1", + "type": "depends_on" + }, + { + "from": "sym-1854d72579a983ba0293a4d3", + "to": "sym-86dad8a3cc937e2681c558d1", + "type": "depends_on" + }, + { + "from": "sym-86dad8a3cc937e2681c558d1", + "to": "sym-c1ce5d44ff631ef5243e34d8", + "type": "calls" + }, + { + "from": "sym-86dad8a3cc937e2681c558d1", + "to": "sym-fcae6dca65ab92ce6e8c43b0", + "type": "calls" + }, + { + "from": "mod-b989c7daa266d9b652abd067", + "to": "mod-9a663bc106327e8422201a95", + "type": "depends_on" + }, + { + "from": "mod-b989c7daa266d9b652abd067", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-ebadf897a746e8a865087841", + "to": "mod-b989c7daa266d9b652abd067", + "type": "depends_on" + }, + { + "from": "sym-7c8b1e597e24b16c3006ca81", + "to": "sym-ebadf897a746e8a865087841", + "type": "depends_on" + }, + { + "from": "sym-ee20da2e2f815cdc3b697b6e", + "to": "mod-b989c7daa266d9b652abd067", + "type": "depends_on" + }, + { + "from": "sym-5e11387ff92f6c4d914dc0a4", + "to": "sym-ee20da2e2f815cdc3b697b6e", + "type": "depends_on" + }, + { + "from": "sym-3a5a479984dc5cd0445c8e8e", + "to": "mod-b989c7daa266d9b652abd067", + "type": "depends_on" + }, + { + "from": "sym-3494444d4459b825581393ef", + "to": "sym-3a5a479984dc5cd0445c8e8e", + "type": "depends_on" + }, + { + "from": "sym-f4fba0d8454b5e6491208b81", + "to": "mod-b989c7daa266d9b652abd067", + "type": "depends_on" + }, + { + "from": "sym-869301cbf3cb641733e83260", + "to": "sym-f4fba0d8454b5e6491208b81", + "type": "depends_on" + }, + { + "from": "sym-e3db749d53d156363a30b86b", + "to": "mod-b989c7daa266d9b652abd067", + "type": "depends_on" + }, + { + "from": "sym-342fb500933a92e19d17cffe", + "to": "sym-e3db749d53d156363a30b86b", + "type": "depends_on" + }, + { + "from": "sym-16c80f6db3121ece6476e5d7", + "to": "mod-b989c7daa266d9b652abd067", + "type": "depends_on" + }, + { + "from": "sym-adf9d9496a3cfec4c94b94cd", + "to": "sym-16c80f6db3121ece6476e5d7", + "type": "depends_on" + }, + { + "from": "sym-4f3ca06d30e0c5991ed7ee43", + "to": "mod-b989c7daa266d9b652abd067", + "type": "depends_on" + }, + { + "from": "sym-861f69933d806c3abd4e18b8", + "to": "sym-4f3ca06d30e0c5991ed7ee43", + "type": "depends_on" + }, + { + "from": "sym-75ec46fc47366c9b781406cd", + "to": "sym-4f3ca06d30e0c5991ed7ee43", + "type": "depends_on" + }, + { + "from": "sym-da76f11367328a93d87c800b", + "to": "sym-4f3ca06d30e0c5991ed7ee43", + "type": "depends_on" + }, + { + "from": "sym-76104fafaed374671547faa6", + "to": "sym-4f3ca06d30e0c5991ed7ee43", + "type": "depends_on" + }, + { + "from": "sym-91c078071cf3bd44fed43181", + "to": "sym-4f3ca06d30e0c5991ed7ee43", + "type": "depends_on" + }, + { + "from": "sym-ae10579f5cd0544e81866e48", + "to": "sym-4f3ca06d30e0c5991ed7ee43", + "type": "depends_on" + }, + { + "from": "mod-e395bfa94e646748f1e3298e", + "to": "mod-8178eae36aec57f1b202e180", + "type": "depends_on" + }, + { + "from": "mod-e395bfa94e646748f1e3298e", + "to": "mod-db1374491b6a82aa10a4e2f5", + "type": "depends_on" + }, + { + "from": "mod-e395bfa94e646748f1e3298e", + "to": "mod-dc4c1cf1104faf408e942485", + "type": "depends_on" + }, + { + "from": "mod-e395bfa94e646748f1e3298e", + "to": "mod-16a76d1c87dfcbecec53d1e0", + "type": "depends_on" + }, + { + "from": "mod-e395bfa94e646748f1e3298e", + "to": "mod-786d72f288c1067b50b58d19", + "type": "depends_on" + }, + { + "from": "mod-e395bfa94e646748f1e3298e", + "to": "mod-786d72f288c1067b50b58d19", + "type": "depends_on" + }, + { + "from": "mod-e395bfa94e646748f1e3298e", + "to": "mod-43a22fa504defe4ae499272f", + "type": "depends_on" + }, + { + "from": "mod-e395bfa94e646748f1e3298e", + "to": "mod-37b5ef5203b8d54dbbc526c9", + "type": "depends_on" + }, + { + "from": "mod-e395bfa94e646748f1e3298e", + "to": "mod-1d4743119cc890fadab85fb7", + "type": "depends_on" + }, + { + "from": "mod-e395bfa94e646748f1e3298e", + "to": "mod-652e9394671c2c32cc57b508", + "type": "depends_on" + }, + { + "from": "mod-e395bfa94e646748f1e3298e", + "to": "mod-fe44c1bccd2633149d023f55", + "type": "depends_on" + }, + { + "from": "mod-e395bfa94e646748f1e3298e", + "to": "mod-291d062f1bd46af2d595f119", + "type": "depends_on" + }, + { + "from": "mod-e395bfa94e646748f1e3298e", + "to": "mod-525c86f0484f1a8328f90e21", + "type": "depends_on" + }, + { + "from": "mod-e395bfa94e646748f1e3298e", + "to": "mod-c31ff6a7377bd2e29ce07160", + "type": "depends_on" + }, + { + "from": "mod-e395bfa94e646748f1e3298e", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-e395bfa94e646748f1e3298e", + "to": "mod-e3c2dc56fd38d656d5235000", + "type": "depends_on" + }, + { + "from": "mod-e395bfa94e646748f1e3298e", + "to": "mod-9e7f56ec932ce908db2b6d6e", + "type": "depends_on" + }, + { + "from": "mod-e395bfa94e646748f1e3298e", + "to": "mod-8786c56780e501016b92f408", + "type": "depends_on" + }, + { + "from": "mod-e395bfa94e646748f1e3298e", + "to": "mod-ce3b72f0515cac2e2fe5ca15", + "type": "depends_on" + }, + { + "from": "mod-e395bfa94e646748f1e3298e", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "mod-e395bfa94e646748f1e3298e", + "to": "mod-056bc15608f58b9ec7451fc4", + "type": "depends_on" + }, + { + "from": "mod-e395bfa94e646748f1e3298e", + "to": "mod-d0734ff72a9c8934deea7846", + "type": "depends_on" + }, + { + "from": "mod-e395bfa94e646748f1e3298e", + "to": "mod-f070f31fd907efb13c1863dc", + "type": "depends_on" + }, + { + "from": "mod-e395bfa94e646748f1e3298e", + "to": "mod-08315e6901cb53376d13cc70", + "type": "depends_on" + }, + { + "from": "mod-e395bfa94e646748f1e3298e", + "to": "mod-de2778e7582cc783d0c02163", + "type": "depends_on" + }, + { + "from": "sym-b76986452634811c854b7bcd", + "to": "mod-e395bfa94e646748f1e3298e", + "type": "depends_on" + }, + { + "from": "sym-43d111e11c00d152f6d456d3", + "to": "sym-b76986452634811c854b7bcd", + "type": "depends_on" + }, + { + "from": "sym-11ffa0ff4b9cbe0463fa3f26", + "to": "mod-e395bfa94e646748f1e3298e", + "type": "depends_on" + }, + { + "from": "sym-19c9fcac0f3773a6015cff76", + "to": "sym-11ffa0ff4b9cbe0463fa3f26", + "type": "depends_on" + }, + { + "from": "sym-547a9804abe78ff64ea33519", + "to": "mod-e395bfa94e646748f1e3298e", + "type": "depends_on" + }, + { + "from": "sym-23c0251ed3d19e6d489193fd", + "to": "sym-547a9804abe78ff64ea33519", + "type": "depends_on" + }, + { + "from": "sym-c287354ee92d5c615d89cc43", + "to": "mod-e395bfa94e646748f1e3298e", + "type": "depends_on" + }, + { + "from": "sym-696e1561c1a2c5179fbe7b8c", + "to": "sym-c287354ee92d5c615d89cc43", + "type": "depends_on" + }, + { + "from": "sym-96eda9bc4b46c54fa62b2965", + "to": "mod-e395bfa94e646748f1e3298e", + "type": "depends_on" + }, + { + "from": "sym-23e295063ad4930534a984bc", + "to": "sym-96eda9bc4b46c54fa62b2965", + "type": "depends_on" + }, + { + "from": "sym-afa009c6b098d9d3d6e87a8f", + "to": "sym-96eda9bc4b46c54fa62b2965", + "type": "depends_on" + }, + { + "from": "sym-07c3526c86f89eb7b7bdf796", + "to": "sym-96eda9bc4b46c54fa62b2965", + "type": "depends_on" + }, + { + "from": "sym-7ead72cfe057bb368a414faf", + "to": "sym-96eda9bc4b46c54fa62b2965", + "type": "depends_on" + }, + { + "from": "sym-80ccf4dd54906ba3c0fef014", + "to": "sym-96eda9bc4b46c54fa62b2965", + "type": "depends_on" + }, + { + "from": "sym-ac3c393c58273c4f0ed0a42d", + "to": "sym-96eda9bc4b46c54fa62b2965", + "type": "depends_on" + }, + { + "from": "sym-2efee4d3250f8fd80bccd9cf", + "to": "sym-96eda9bc4b46c54fa62b2965", + "type": "depends_on" + }, + { + "from": "sym-96eda9bc4b46c54fa62b2965", + "to": "sym-adc4065dd1b3ac679d5ba2f9", + "type": "calls" + }, + { + "from": "sym-96eda9bc4b46c54fa62b2965", + "to": "sym-4e80afaf50ee6162c65e2622", + "type": "calls" + }, + { + "from": "sym-97870c7cba45e51609b21522", + "to": "mod-8fb910e5659126b322f9fe29", + "type": "depends_on" + }, + { + "from": "sym-41baf1407ad0beab3507733a", + "to": "sym-97870c7cba45e51609b21522", + "type": "depends_on" + }, + { + "from": "sym-05f548e455547493427a1712", + "to": "mod-77a2526a89e7700a956a35e1", + "type": "depends_on" + }, + { + "from": "sym-734e3a5727ae21fda3a09a43", + "to": "sym-05f548e455547493427a1712", + "type": "depends_on" + }, + { + "from": "sym-6950382b643e36b7ebb9e97f", + "to": "sym-05f548e455547493427a1712", + "type": "depends_on" + }, + { + "from": "sym-99d0edcde347cde287d80898", + "to": "mod-b46f47672e387229e73f22e6", + "type": "depends_on" + }, + { + "from": "sym-e55d437bced177f411a9e0ba", + "to": "sym-99d0edcde347cde287d80898", + "type": "depends_on" + }, + { + "from": "mod-9389bad564e097d75994d5f8", + "to": "mod-16a76d1c87dfcbecec53d1e0", + "type": "depends_on" + }, + { + "from": "mod-9389bad564e097d75994d5f8", + "to": "mod-0ccdf7c27874394c1e667fec", + "type": "depends_on" + }, + { + "from": "mod-9389bad564e097d75994d5f8", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-b96188aba996df22075f02f0", + "to": "mod-9389bad564e097d75994d5f8", + "type": "depends_on" + }, + { + "from": "sym-464d5a8a8386571779a75764", + "to": "sym-b96188aba996df22075f02f0", + "type": "depends_on" + }, + { + "from": "sym-3ad962db5915e15e9b5a34a2", + "to": "sym-b96188aba996df22075f02f0", + "type": "depends_on" + }, + { + "from": "sym-21c2ed26a4fe3b789e89579a", + "to": "sym-b96188aba996df22075f02f0", + "type": "depends_on" + }, + { + "from": "sym-8aedcb314a95fff296cdbfe5", + "to": "sym-b96188aba996df22075f02f0", + "type": "depends_on" + }, + { + "from": "sym-cfd4e7bab70a3d76e52bd76b", + "to": "sym-b96188aba996df22075f02f0", + "type": "depends_on" + }, + { + "from": "sym-609c86d82fe4ba01bc8c6426", + "to": "sym-b96188aba996df22075f02f0", + "type": "depends_on" + }, + { + "from": "mod-c8450797917dfb54fe43ca86", + "to": "mod-16a76d1c87dfcbecec53d1e0", + "type": "depends_on" + }, + { + "from": "mod-c8450797917dfb54fe43ca86", + "to": "mod-7421cc24ed6c5406e86d1752", + "type": "depends_on" + }, + { + "from": "mod-c8450797917dfb54fe43ca86", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "mod-c8450797917dfb54fe43ca86", + "to": "mod-fcbaaa2e6fedeb87a2dc2d8e", + "type": "depends_on" + }, + { + "from": "mod-c8450797917dfb54fe43ca86", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-9034b49b1dbb743c13ce4423", + "to": "mod-c8450797917dfb54fe43ca86", + "type": "depends_on" + }, + { + "from": "sym-02b934d8e3081f0cfdd54829", + "to": "mod-c8450797917dfb54fe43ca86", + "type": "depends_on" + }, + { + "from": "sym-716fbb6f4698e042f41b8e8e", + "to": "sym-02b934d8e3081f0cfdd54829", + "type": "depends_on" + }, + { + "from": "sym-a16b3eeaac4eb18401aa51da", + "to": "mod-c8450797917dfb54fe43ca86", + "type": "depends_on" + }, + { + "from": "sym-ff641b5d8ca6f513a4d3b737", + "to": "sym-a16b3eeaac4eb18401aa51da", + "type": "depends_on" + }, + { + "from": "sym-b7922ddeb799711e40b0fb1d", + "to": "sym-a16b3eeaac4eb18401aa51da", + "type": "depends_on" + }, + { + "from": "sym-b1e9c1eea121146321e34dcb", + "to": "sym-a16b3eeaac4eb18401aa51da", + "type": "depends_on" + }, + { + "from": "sym-9ca99ef032d7812c7bce60d9", + "to": "sym-a16b3eeaac4eb18401aa51da", + "type": "depends_on" + }, + { + "from": "sym-9503de3abf0ca0864a61689e", + "to": "sym-a16b3eeaac4eb18401aa51da", + "type": "depends_on" + }, + { + "from": "sym-214822ec9f3accdab1355b01", + "to": "sym-a16b3eeaac4eb18401aa51da", + "type": "depends_on" + }, + { + "from": "sym-c8fe10042fae0cfa98b678d7", + "to": "sym-a16b3eeaac4eb18401aa51da", + "type": "depends_on" + }, + { + "from": "sym-a6206915db8c9da96c5a41bc", + "to": "sym-a16b3eeaac4eb18401aa51da", + "type": "depends_on" + }, + { + "from": "sym-c4dca8104a7e770f5b14889a", + "to": "sym-a16b3eeaac4eb18401aa51da", + "type": "depends_on" + }, + { + "from": "sym-d24a5f5062450cc9e53222c7", + "to": "sym-a16b3eeaac4eb18401aa51da", + "type": "depends_on" + }, + { + "from": "sym-7e44ecf471155de43ccdb015", + "to": "sym-a16b3eeaac4eb18401aa51da", + "type": "depends_on" + }, + { + "from": "sym-a992f1d60a32575155de14ac", + "to": "sym-a16b3eeaac4eb18401aa51da", + "type": "depends_on" + }, + { + "from": "sym-0efb93278b37aa89e05f1dc5", + "to": "sym-a16b3eeaac4eb18401aa51da", + "type": "depends_on" + }, + { + "from": "sym-3a4f17c210e5304b6f3f01be", + "to": "sym-a16b3eeaac4eb18401aa51da", + "type": "depends_on" + }, + { + "from": "sym-eb28186a18ca7a82b4739ee5", + "to": "sym-a16b3eeaac4eb18401aa51da", + "type": "depends_on" + }, + { + "from": "sym-fd9b1cfd830532f47e6eb66b", + "to": "sym-a16b3eeaac4eb18401aa51da", + "type": "depends_on" + }, + { + "from": "sym-a0dfc671381543a24d283735", + "to": "sym-a16b3eeaac4eb18401aa51da", + "type": "depends_on" + }, + { + "from": "sym-856b604c8ffcc654e328cd6e", + "to": "sym-a16b3eeaac4eb18401aa51da", + "type": "depends_on" + }, + { + "from": "sym-c8933ccebe7118591c8afcc1", + "to": "sym-a16b3eeaac4eb18401aa51da", + "type": "depends_on" + }, + { + "from": "mod-8aef488fb2fc78414791967a", + "to": "mod-16a76d1c87dfcbecec53d1e0", + "type": "depends_on" + }, + { + "from": "mod-8aef488fb2fc78414791967a", + "to": "mod-1de8a1fb6a48c6a931549f30", + "type": "depends_on" + }, + { + "from": "mod-8aef488fb2fc78414791967a", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-8aef488fb2fc78414791967a", + "to": "mod-fbadd87a5bc2c6b89edc84bf", + "type": "depends_on" + }, + { + "from": "mod-8aef488fb2fc78414791967a", + "to": "mod-fcbaaa2e6fedeb87a2dc2d8e", + "type": "depends_on" + }, + { + "from": "mod-8aef488fb2fc78414791967a", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "mod-8aef488fb2fc78414791967a", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "sym-2b93335a7e40dc75286de672", + "to": "mod-8aef488fb2fc78414791967a", + "type": "depends_on" + }, + { + "from": "sym-bb965537d23959dfc7d6d13b", + "to": "sym-2b93335a7e40dc75286de672", + "type": "depends_on" + }, + { + "from": "sym-954857d9de43b16abb5dbaf4", + "to": "sym-2b93335a7e40dc75286de672", + "type": "depends_on" + }, + { + "from": "sym-078110cfc9aa1e4ba9ed2e56", + "to": "sym-2b93335a7e40dc75286de672", + "type": "depends_on" + }, + { + "from": "sym-f790c0e252480bc29cb40414", + "to": "sym-2b93335a7e40dc75286de672", + "type": "depends_on" + }, + { + "from": "sym-2319ce1d3ed21356066c5192", + "to": "sym-2b93335a7e40dc75286de672", + "type": "depends_on" + }, + { + "from": "sym-f099526ff753bd09914f1de8", + "to": "sym-2b93335a7e40dc75286de672", + "type": "depends_on" + }, + { + "from": "sym-7f5da43a0d477c46a19e3abd", + "to": "sym-2b93335a7e40dc75286de672", + "type": "depends_on" + }, + { + "from": "sym-c0c210d0df565b16c8d0d80c", + "to": "sym-2b93335a7e40dc75286de672", + "type": "depends_on" + }, + { + "from": "sym-c018307d8cc1e259cefb154e", + "to": "sym-2b93335a7e40dc75286de672", + "type": "depends_on" + }, + { + "from": "sym-d7b517c2414088a4904aeb3a", + "to": "sym-2b93335a7e40dc75286de672", + "type": "depends_on" + }, + { + "from": "sym-e3c670f7e35fe6bf834577f9", + "to": "sym-2b93335a7e40dc75286de672", + "type": "depends_on" + }, + { + "from": "mod-9e6a68c87b4e5c31d84a70f2", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-9e6a68c87b4e5c31d84a70f2", + "to": "mod-21be8fb976449bbe3589ce47", + "type": "depends_on" + }, + { + "from": "mod-9e6a68c87b4e5c31d84a70f2", + "to": "mod-074e7c12d54384c86eabf721", + "type": "depends_on" + }, + { + "from": "mod-9e6a68c87b4e5c31d84a70f2", + "to": "mod-12d77c813504670328c9b4f1", + "type": "depends_on" + }, + { + "from": "mod-9e6a68c87b4e5c31d84a70f2", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "mod-9e6a68c87b4e5c31d84a70f2", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-9e6a68c87b4e5c31d84a70f2", + "to": "mod-e395bfa94e646748f1e3298e", + "type": "depends_on" + }, + { + "from": "mod-9e6a68c87b4e5c31d84a70f2", + "to": "mod-3f601c90582b585a8d9b6d4b", + "type": "depends_on" + }, + { + "from": "mod-9e6a68c87b4e5c31d84a70f2", + "to": "mod-892576d596aa8b40bed3d2f9", + "type": "depends_on" + }, + { + "from": "mod-9e6a68c87b4e5c31d84a70f2", + "to": "mod-eb0798295c928ba399632ae3", + "type": "depends_on" + }, + { + "from": "sym-3b8254889d32edf4470206ea", + "to": "mod-9e6a68c87b4e5c31d84a70f2", + "type": "depends_on" + }, + { + "from": "sym-6a24a4d06666621c7d17bc44", + "to": "mod-9e6a68c87b4e5c31d84a70f2", + "type": "depends_on" + }, + { + "from": "sym-2c09ca6eda3f95ab06c68035", + "to": "mod-9e6a68c87b4e5c31d84a70f2", + "type": "depends_on" + }, + { + "from": "sym-c246a28d0970ec7dbe8f3a09", + "to": "mod-9e6a68c87b4e5c31d84a70f2", + "type": "depends_on" + }, + { + "from": "sym-54918e7606a7cc1733327a2c", + "to": "mod-9e6a68c87b4e5c31d84a70f2", + "type": "depends_on" + }, + { + "from": "sym-000374b63ff352aab2d82df4", + "to": "mod-9e6a68c87b4e5c31d84a70f2", + "type": "depends_on" + }, + { + "from": "mod-df9148ab5ce0a5a5115bead1", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-df9148ab5ce0a5a5115bead1", + "to": "mod-16a76d1c87dfcbecec53d1e0", + "type": "depends_on" + }, + { + "from": "mod-df9148ab5ce0a5a5115bead1", + "to": "mod-a1bb18b05142b623b9fb8be4", + "type": "depends_on" + }, + { + "from": "mod-df9148ab5ce0a5a5115bead1", + "to": "mod-e3c2dc56fd38d656d5235000", + "type": "depends_on" + }, + { + "from": "mod-df9148ab5ce0a5a5115bead1", + "to": "mod-1b44d7490c1bab1a28faf13b", + "type": "depends_on" + }, + { + "from": "mod-df9148ab5ce0a5a5115bead1", + "to": "mod-24557f0b00a0d628de80e5eb", + "type": "depends_on" + }, + { + "from": "sym-04aa1e473c32e444df8b274d", + "to": "mod-df9148ab5ce0a5a5115bead1", + "type": "depends_on" + }, + { + "from": "sym-1ef8169e505fee687e3ba380", + "to": "sym-04aa1e473c32e444df8b274d", + "type": "depends_on" + }, + { + "from": "sym-c0903a5a6dd9e6b8196aa9a4", + "to": "sym-04aa1e473c32e444df8b274d", + "type": "depends_on" + }, + { + "from": "sym-05f009619889c37708311d81", + "to": "sym-04aa1e473c32e444df8b274d", + "type": "depends_on" + }, + { + "from": "sym-a5aede25adb18f1972bc6c14", + "to": "sym-04aa1e473c32e444df8b274d", + "type": "depends_on" + }, + { + "from": "sym-d13e4e1829f9414ddb93be5a", + "to": "sym-04aa1e473c32e444df8b274d", + "type": "depends_on" + }, + { + "from": "sym-58e1cdee015b7eeec5aaadbe", + "to": "sym-04aa1e473c32e444df8b274d", + "type": "depends_on" + }, + { + "from": "mod-457939e5e7481c4a6a17e7a3", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-457939e5e7481c4a6a17e7a3", + "to": "mod-1b2ebbc2a937e6ac49f4abba", + "type": "depends_on" + }, + { + "from": "mod-457939e5e7481c4a6a17e7a3", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "mod-457939e5e7481c4a6a17e7a3", + "to": "mod-91c215ca923f83144b68d625", + "type": "depends_on" + }, + { + "from": "mod-457939e5e7481c4a6a17e7a3", + "to": "mod-1de8a1fb6a48c6a931549f30", + "type": "depends_on" + }, + { + "from": "sym-d0b2b2174c96ce5833cd9592", + "to": "mod-457939e5e7481c4a6a17e7a3", + "type": "depends_on" + }, + { + "from": "mod-7fbfbfcf1e85d7ef732d27ea", + "to": "mod-91c215ca923f83144b68d625", + "type": "depends_on" + }, + { + "from": "mod-7fbfbfcf1e85d7ef732d27ea", + "to": "mod-1de8a1fb6a48c6a931549f30", + "type": "depends_on" + }, + { + "from": "mod-7fbfbfcf1e85d7ef732d27ea", + "to": "mod-b2c7d957ae05ce535d8f8e2e", + "type": "depends_on" + }, + { + "from": "sym-b989cdce3dc1128fb557122f", + "to": "mod-7fbfbfcf1e85d7ef732d27ea", + "type": "depends_on" + }, + { + "from": "mod-996772d8748b5664e367c6c6", + "to": "mod-12d77c813504670328c9b4f1", + "type": "depends_on" + }, + { + "from": "mod-996772d8748b5664e367c6c6", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-996772d8748b5664e367c6c6", + "to": "mod-5758817d6b816e39b8e7e4b3", + "type": "depends_on" + }, + { + "from": "sym-0c7b5305038aa0a21c205aa4", + "to": "mod-996772d8748b5664e367c6c6", + "type": "depends_on" + }, + { + "from": "sym-46722d97026838058df81e45", + "to": "sym-0c7b5305038aa0a21c205aa4", + "type": "depends_on" + }, + { + "from": "sym-812eb740fd13dd1b77c10a32", + "to": "mod-996772d8748b5664e367c6c6", + "type": "depends_on" + }, + { + "from": "mod-52aa016deaac90f2f1067844", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-52aa016deaac90f2f1067844", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "mod-52aa016deaac90f2f1067844", + "to": "mod-df9148ab5ce0a5a5115bead1", + "type": "depends_on" + }, + { + "from": "sym-26b6a576d6b118ccfe6cf8ec", + "to": "mod-52aa016deaac90f2f1067844", + "type": "depends_on" + }, + { + "from": "mod-f87e42bd9aa4eebfae23dbd1", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-f87e42bd9aa4eebfae23dbd1", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-847bb4ee8faf0a5fc4c39e92", + "to": "mod-f87e42bd9aa4eebfae23dbd1", + "type": "depends_on" + }, + { + "from": "mod-5758817d6b816e39b8e7e4b3", + "to": "mod-16a76d1c87dfcbecec53d1e0", + "type": "depends_on" + }, + { + "from": "mod-5758817d6b816e39b8e7e4b3", + "to": "mod-205c88f6af728bd7b4ebc280", + "type": "depends_on" + }, + { + "from": "mod-5758817d6b816e39b8e7e4b3", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-5758817d6b816e39b8e7e4b3", + "to": "mod-12d77c813504670328c9b4f1", + "type": "depends_on" + }, + { + "from": "mod-5758817d6b816e39b8e7e4b3", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "mod-5758817d6b816e39b8e7e4b3", + "to": "mod-91c215ca923f83144b68d625", + "type": "depends_on" + }, + { + "from": "mod-5758817d6b816e39b8e7e4b3", + "to": "mod-7f4649fc39674866ce6591cc", + "type": "depends_on" + }, + { + "from": "sym-349de95fe57411b99b41c921", + "to": "mod-5758817d6b816e39b8e7e4b3", + "type": "depends_on" + }, + { + "from": "sym-1891e05e8289e29a05504569", + "to": "sym-349de95fe57411b99b41c921", + "type": "depends_on" + }, + { + "from": "sym-f9cb4b9053f2905d6ab0609b", + "to": "sym-349de95fe57411b99b41c921", + "type": "depends_on" + }, + { + "from": "sym-51e8384bb9ab40ce0e10f672", + "to": "sym-349de95fe57411b99b41c921", + "type": "depends_on" + }, + { + "from": "sym-3af7a4ef926ee336982d7cd9", + "to": "sym-349de95fe57411b99b41c921", + "type": "depends_on" + }, + { + "from": "sym-e20f8a059946a439843cfada", + "to": "sym-349de95fe57411b99b41c921", + "type": "depends_on" + }, + { + "from": "sym-77b8585e6d04e0016f59f728", + "to": "sym-349de95fe57411b99b41c921", + "type": "depends_on" + }, + { + "from": "sym-eb639a43a4aecf119bf79cb0", + "to": "sym-349de95fe57411b99b41c921", + "type": "depends_on" + }, + { + "from": "mod-20f30418ca95fd46594075af", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "mod-20f30418ca95fd46594075af", + "to": "mod-91c215ca923f83144b68d625", + "type": "depends_on" + }, + { + "from": "mod-20f30418ca95fd46594075af", + "to": "mod-457939e5e7481c4a6a17e7a3", + "type": "depends_on" + }, + { + "from": "mod-20f30418ca95fd46594075af", + "to": "mod-7fbfbfcf1e85d7ef732d27ea", + "type": "depends_on" + }, + { + "from": "mod-20f30418ca95fd46594075af", + "to": "mod-1de8a1fb6a48c6a931549f30", + "type": "depends_on" + }, + { + "from": "mod-20f30418ca95fd46594075af", + "to": "mod-3a3b7b050c56c146875c18fb", + "type": "depends_on" + }, + { + "from": "mod-20f30418ca95fd46594075af", + "to": "mod-84552d58b6743daab10f83b3", + "type": "depends_on" + }, + { + "from": "mod-20f30418ca95fd46594075af", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-20f30418ca95fd46594075af", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-20f30418ca95fd46594075af", + "to": "mod-b2c7d957ae05ce535d8f8e2e", + "type": "depends_on" + }, + { + "from": "sym-a1714406759fda051e877a2e", + "to": "mod-20f30418ca95fd46594075af", + "type": "depends_on" + }, + { + "from": "sym-95a959d434bd68d26c7ba5e6", + "to": "mod-20f30418ca95fd46594075af", + "type": "depends_on" + }, + { + "from": "sym-4128cc9e2fa3688777c26247", + "to": "mod-20f30418ca95fd46594075af", + "type": "depends_on" + }, + { + "from": "sym-4128cc9e2fa3688777c26247", + "to": "sym-b989cdce3dc1128fb557122f", + "type": "calls" + }, + { + "from": "mod-2f8fcf8b410da0c1f6892901", + "to": "mod-91c215ca923f83144b68d625", + "type": "depends_on" + }, + { + "from": "mod-2f8fcf8b410da0c1f6892901", + "to": "mod-1de8a1fb6a48c6a931549f30", + "type": "depends_on" + }, + { + "from": "sym-093389e29bebd11b68e47fb3", + "to": "mod-2f8fcf8b410da0c1f6892901", + "type": "depends_on" + }, + { + "from": "sym-a9cd5796f950012d75eae69d", + "to": "sym-093389e29bebd11b68e47fb3", + "type": "depends_on" + }, + { + "from": "sym-48770c393e18cf8b765fc100", + "to": "sym-093389e29bebd11b68e47fb3", + "type": "depends_on" + }, + { + "from": "sym-2b28a6196b9e548ce3950f99", + "to": "sym-093389e29bebd11b68e47fb3", + "type": "depends_on" + }, + { + "from": "sym-4e2725aab0d0a1de18f1eac1", + "to": "sym-093389e29bebd11b68e47fb3", + "type": "depends_on" + }, + { + "from": "mod-1de8a1fb6a48c6a931549f30", + "to": "mod-84552d58b6743daab10f83b3", + "type": "depends_on" + }, + { + "from": "mod-1de8a1fb6a48c6a931549f30", + "to": "mod-3d5f49cf64c24935d34290c4", + "type": "depends_on" + }, + { + "from": "mod-1de8a1fb6a48c6a931549f30", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-1de8a1fb6a48c6a931549f30", + "to": "mod-525c86f0484f1a8328f90e21", + "type": "depends_on" + }, + { + "from": "mod-1de8a1fb6a48c6a931549f30", + "to": "mod-24557f0b00a0d628de80e5eb", + "type": "depends_on" + }, + { + "from": "mod-1de8a1fb6a48c6a931549f30", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-feb77422b7084f0c4d2e3c5e", + "to": "mod-1de8a1fb6a48c6a931549f30", + "type": "depends_on" + }, + { + "from": "sym-6fdb260c63552dd4e0a7cecf", + "to": "sym-feb77422b7084f0c4d2e3c5e", + "type": "depends_on" + }, + { + "from": "sym-4e9414a938ee627a77f20b4d", + "to": "sym-feb77422b7084f0c4d2e3c5e", + "type": "depends_on" + }, + { + "from": "sym-cdee53ddf59cf3090aa22853", + "to": "sym-feb77422b7084f0c4d2e3c5e", + "type": "depends_on" + }, + { + "from": "sym-972af425d3e9bcdfc778ff00", + "to": "sym-feb77422b7084f0c4d2e3c5e", + "type": "depends_on" + }, + { + "from": "sym-2cd44b8eac8f99115ec71079", + "to": "sym-feb77422b7084f0c4d2e3c5e", + "type": "depends_on" + }, + { + "from": "sym-e409f5ac53d90fb28708d5f5", + "to": "sym-feb77422b7084f0c4d2e3c5e", + "type": "depends_on" + }, + { + "from": "sym-ca3b7bc9b989c0d74884a2c5", + "to": "sym-feb77422b7084f0c4d2e3c5e", + "type": "depends_on" + }, + { + "from": "sym-aa005302b41d0195a5db344b", + "to": "sym-feb77422b7084f0c4d2e3c5e", + "type": "depends_on" + }, + { + "from": "sym-87340b6f42c579b19095fad3", + "to": "sym-feb77422b7084f0c4d2e3c5e", + "type": "depends_on" + }, + { + "from": "sym-0728b731cfd7b6fb01abfe3f", + "to": "mod-3d5f49cf64c24935d34290c4", + "type": "depends_on" + }, + { + "from": "sym-e4e428838d58a143a243cba6", + "to": "sym-0728b731cfd7b6fb01abfe3f", + "type": "depends_on" + }, + { + "from": "mod-7f4649fc39674866ce6591cc", + "to": "mod-c20c965c5562cff684a7448f", + "type": "depends_on" + }, + { + "from": "mod-7f4649fc39674866ce6591cc", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "sym-8f8a5ab65ba4325bb48884e5", + "to": "mod-7f4649fc39674866ce6591cc", + "type": "depends_on" + }, + { + "from": "sym-2f9e3c7322b2c5d917683f2e", + "to": "sym-8f8a5ab65ba4325bb48884e5", + "type": "depends_on" + }, + { + "from": "sym-1e031fa7cd7911f05bf22195", + "to": "sym-8f8a5ab65ba4325bb48884e5", + "type": "depends_on" + }, + { + "from": "sym-1d0d5e7cf7a7292ad57f24e7", + "to": "sym-8f8a5ab65ba4325bb48884e5", + "type": "depends_on" + }, + { + "from": "mod-892576d596aa8b40bed3d2f9", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-892576d596aa8b40bed3d2f9", + "to": "mod-12d77c813504670328c9b4f1", + "type": "depends_on" + }, + { + "from": "mod-892576d596aa8b40bed3d2f9", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "mod-892576d596aa8b40bed3d2f9", + "to": "mod-9e6a68c87b4e5c31d84a70f2", + "type": "depends_on" + }, + { + "from": "mod-892576d596aa8b40bed3d2f9", + "to": "mod-eb0798295c928ba399632ae3", + "type": "depends_on" + }, + { + "from": "mod-892576d596aa8b40bed3d2f9", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "sym-bc830ddff78494264067c796", + "to": "mod-892576d596aa8b40bed3d2f9", + "type": "depends_on" + }, + { + "from": "sym-a64f1ca18e821cc20c7e5b5f", + "to": "sym-bc830ddff78494264067c796", + "type": "depends_on" + }, + { + "from": "sym-8903c8beb154afaae29ce04c", + "to": "sym-bc830ddff78494264067c796", + "type": "depends_on" + }, + { + "from": "sym-321f64e73c58c62ef0ee1efc", + "to": "sym-bc830ddff78494264067c796", + "type": "depends_on" + }, + { + "from": "sym-4653da5df6ecfbce9a04f0ee", + "to": "sym-bc830ddff78494264067c796", + "type": "depends_on" + }, + { + "from": "sym-24358b3224fd4341ab81efa6", + "to": "sym-bc830ddff78494264067c796", + "type": "depends_on" + }, + { + "from": "sym-bc830ddff78494264067c796", + "to": "sym-3b8254889d32edf4470206ea", + "type": "calls" + }, + { + "from": "mod-6f74719a94e9135573217051", + "to": "mod-a5c28a9abc4da2bd27d3cbb4", + "type": "depends_on" + }, + { + "from": "sym-fb3ceadeb84c52d53d5da1a5", + "to": "mod-6f74719a94e9135573217051", + "type": "depends_on" + }, + { + "from": "mod-a5c28a9abc4da2bd27d3cbb4", + "to": "mod-3a3b7b050c56c146875c18fb", + "type": "depends_on" + }, + { + "from": "mod-a5c28a9abc4da2bd27d3cbb4", + "to": "mod-84552d58b6743daab10f83b3", + "type": "depends_on" + }, + { + "from": "mod-a5c28a9abc4da2bd27d3cbb4", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-48a3b6b4e214dbf05a884bdd", + "to": "mod-a5c28a9abc4da2bd27d3cbb4", + "type": "depends_on" + }, + { + "from": "sym-5c6b366e18862aea757080c5", + "to": "sym-48a3b6b4e214dbf05a884bdd", + "type": "depends_on" + }, + { + "from": "sym-4183c8c8ba4c87b3ac71efcf", + "to": "sym-48a3b6b4e214dbf05a884bdd", + "type": "depends_on" + }, + { + "from": "sym-d902b89c70bfdaef1e7ec63c", + "to": "sym-48a3b6b4e214dbf05a884bdd", + "type": "depends_on" + }, + { + "from": "mod-a365b7714dec16f0bf79621e", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "mod-a365b7714dec16f0bf79621e", + "to": "mod-f67afbbcc2c394e0b6549ff8", + "type": "depends_on" + }, + { + "from": "mod-a365b7714dec16f0bf79621e", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-a365b7714dec16f0bf79621e", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "sym-98c4295951482a3e982049bb", + "to": "mod-a365b7714dec16f0bf79621e", + "type": "depends_on" + }, + { + "from": "mod-0fabbf7facc4e7b4b62c59ae", + "to": "mod-1de8a1fb6a48c6a931549f30", + "type": "depends_on" + }, + { + "from": "mod-0fabbf7facc4e7b4b62c59ae", + "to": "mod-91454010a0aa78f3ef28bd69", + "type": "depends_on" + }, + { + "from": "mod-0fabbf7facc4e7b4b62c59ae", + "to": "mod-8aef488fb2fc78414791967a", + "type": "depends_on" + }, + { + "from": "mod-0fabbf7facc4e7b4b62c59ae", + "to": "mod-12d77c813504670328c9b4f1", + "type": "depends_on" + }, + { + "from": "mod-0fabbf7facc4e7b4b62c59ae", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "mod-0fabbf7facc4e7b4b62c59ae", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-0fabbf7facc4e7b4b62c59ae", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-0fabbf7facc4e7b4b62c59ae", + "to": "mod-4abf6009e6ef176fec251259", + "type": "depends_on" + }, + { + "from": "mod-0fabbf7facc4e7b4b62c59ae", + "to": "mod-0265f572c93b5fdc1506bdda", + "type": "depends_on" + }, + { + "from": "mod-0fabbf7facc4e7b4b62c59ae", + "to": "mod-128ee1689e701accb1643b15", + "type": "depends_on" + }, + { + "from": "mod-0fabbf7facc4e7b4b62c59ae", + "to": "mod-a9472d145601bd72b2b81e65", + "type": "depends_on" + }, + { + "from": "mod-0fabbf7facc4e7b4b62c59ae", + "to": "mod-eafbd86811c7222ae0334af1", + "type": "depends_on" + }, + { + "from": "mod-0fabbf7facc4e7b4b62c59ae", + "to": "mod-9e6a68c87b4e5c31d84a70f2", + "type": "depends_on" + }, + { + "from": "mod-0fabbf7facc4e7b4b62c59ae", + "to": "mod-f67afbbcc2c394e0b6549ff8", + "type": "depends_on" + }, + { + "from": "mod-0fabbf7facc4e7b4b62c59ae", + "to": "mod-a2f8e9a3ce2f5a58e00df674", + "type": "depends_on" + }, + { + "from": "mod-0fabbf7facc4e7b4b62c59ae", + "to": "mod-ea8ac339723e29cb2a2446ee", + "type": "depends_on" + }, + { + "from": "mod-0fabbf7facc4e7b4b62c59ae", + "to": "mod-fcbaaa2e6fedeb87a2dc2d8e", + "type": "depends_on" + }, + { + "from": "mod-0fabbf7facc4e7b4b62c59ae", + "to": "mod-e395bfa94e646748f1e3298e", + "type": "depends_on" + }, + { + "from": "mod-0fabbf7facc4e7b4b62c59ae", + "to": "mod-0f4a4cd8bc5da602adf2a2fa", + "type": "depends_on" + }, + { + "from": "mod-0fabbf7facc4e7b4b62c59ae", + "to": "mod-eb0798295c928ba399632ae3", + "type": "depends_on" + }, + { + "from": "mod-0fabbf7facc4e7b4b62c59ae", + "to": "mod-a8a39a4fb87704dbcb720225", + "type": "depends_on" + }, + { + "from": "mod-0fabbf7facc4e7b4b62c59ae", + "to": "mod-892576d596aa8b40bed3d2f9", + "type": "depends_on" + }, + { + "from": "sym-ab85b50fe1b89f2116b32b8e", + "to": "mod-0fabbf7facc4e7b4b62c59ae", + "type": "depends_on" + }, + { + "from": "sym-9ff2092936295dca05e0edb7", + "to": "mod-0fabbf7facc4e7b4b62c59ae", + "type": "depends_on" + }, + { + "from": "sym-ca05c53ed6f6f579ada9bc57", + "to": "mod-5a3b55b43394de7f8c762546", + "type": "depends_on" + }, + { + "from": "sym-6f65f0a6507ebc9370500240", + "to": "sym-ca05c53ed6f6f579ada9bc57", + "type": "depends_on" + }, + { + "from": "sym-49e2485b99dd47aa7a15a28f", + "to": "mod-5a3b55b43394de7f8c762546", + "type": "depends_on" + }, + { + "from": "sym-f18eee79205c6745588c2717", + "to": "sym-49e2485b99dd47aa7a15a28f", + "type": "depends_on" + }, + { + "from": "mod-eafbd86811c7222ae0334af1", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-337135b7799d55bf38a2d6a9", + "to": "mod-eafbd86811c7222ae0334af1", + "type": "depends_on" + }, + { + "from": "mod-a9472d145601bd72b2b81e65", + "to": "mod-5a3b55b43394de7f8c762546", + "type": "depends_on" + }, + { + "from": "mod-a9472d145601bd72b2b81e65", + "to": "mod-12d77c813504670328c9b4f1", + "type": "depends_on" + }, + { + "from": "mod-a9472d145601bd72b2b81e65", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-a9472d145601bd72b2b81e65", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-c6ac07d6b729b12884d9b167", + "to": "mod-a9472d145601bd72b2b81e65", + "type": "depends_on" + }, + { + "from": "mod-128ee1689e701accb1643b15", + "to": "mod-12d77c813504670328c9b4f1", + "type": "depends_on" + }, + { + "from": "mod-128ee1689e701accb1643b15", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-128ee1689e701accb1643b15", + "to": "mod-84552d58b6743daab10f83b3", + "type": "depends_on" + }, + { + "from": "mod-128ee1689e701accb1643b15", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-128ee1689e701accb1643b15", + "to": "mod-21be8fb976449bbe3589ce47", + "type": "depends_on" + }, + { + "from": "mod-128ee1689e701accb1643b15", + "to": "mod-43a22fa504defe4ae499272f", + "type": "depends_on" + }, + { + "from": "mod-128ee1689e701accb1643b15", + "to": "mod-91454010a0aa78f3ef28bd69", + "type": "depends_on" + }, + { + "from": "sym-631364af116d4a86562c04f9", + "to": "mod-128ee1689e701accb1643b15", + "type": "depends_on" + }, + { + "from": "sym-1a7e0225b76935e084fa2329", + "to": "mod-128ee1689e701accb1643b15", + "type": "depends_on" + }, + { + "from": "sym-1a7e0225b76935e084fa2329", + "to": "sym-a09e4498f797e281ad451c42", + "type": "calls" + }, + { + "from": "mod-b348b25ed5a5571412a85da0", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-b348b25ed5a5571412a85da0", + "to": "mod-0fabbf7facc4e7b4b62c59ae", + "type": "depends_on" + }, + { + "from": "mod-b348b25ed5a5571412a85da0", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-9ccc28bee226a93586ef7b1d", + "to": "mod-b348b25ed5a5571412a85da0", + "type": "depends_on" + }, + { + "from": "sym-9ccc28bee226a93586ef7b1d", + "to": "sym-ab85b50fe1b89f2116b32b8e", + "type": "calls" + }, + { + "from": "mod-91454010a0aa78f3ef28bd69", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-91454010a0aa78f3ef28bd69", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "mod-91454010a0aa78f3ef28bd69", + "to": "mod-c20c965c5562cff684a7448f", + "type": "depends_on" + }, + { + "from": "mod-91454010a0aa78f3ef28bd69", + "to": "mod-84552d58b6743daab10f83b3", + "type": "depends_on" + }, + { + "from": "mod-91454010a0aa78f3ef28bd69", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-6680f554fcb4ede4631e60b2", + "to": "mod-91454010a0aa78f3ef28bd69", + "type": "depends_on" + }, + { + "from": "mod-1f38e75fd9b9f51f96a2d975", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-1f38e75fd9b9f51f96a2d975", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-1f38e75fd9b9f51f96a2d975", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "sym-304eaa4f7c51cf3fdbf89bb0", + "to": "mod-1f38e75fd9b9f51f96a2d975", + "type": "depends_on" + }, + { + "from": "mod-77aac2da6c6f0fbc37663544", + "to": "mod-1f38e75fd9b9f51f96a2d975", + "type": "depends_on" + }, + { + "from": "mod-77aac2da6c6f0fbc37663544", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-77aac2da6c6f0fbc37663544", + "to": "mod-91454010a0aa78f3ef28bd69", + "type": "depends_on" + }, + { + "from": "sym-45a76b1716a67708f11a0909", + "to": "mod-77aac2da6c6f0fbc37663544", + "type": "depends_on" + }, + { + "from": "sym-45a76b1716a67708f11a0909", + "to": "sym-6680f554fcb4ede4631e60b2", + "type": "calls" + }, + { + "from": "sym-45a76b1716a67708f11a0909", + "to": "sym-304eaa4f7c51cf3fdbf89bb0", + "type": "calls" + }, + { + "from": "mod-43e420b038a56638079168bc", + "to": "mod-5a3b55b43394de7f8c762546", + "type": "depends_on" + }, + { + "from": "mod-43e420b038a56638079168bc", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-43e420b038a56638079168bc", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-43e420b038a56638079168bc", + "to": "mod-8178eae36aec57f1b202e180", + "type": "depends_on" + }, + { + "from": "mod-43e420b038a56638079168bc", + "to": "mod-b348b25ed5a5571412a85da0", + "type": "depends_on" + }, + { + "from": "mod-43e420b038a56638079168bc", + "to": "mod-074e7c12d54384c86eabf721", + "type": "depends_on" + }, + { + "from": "mod-43e420b038a56638079168bc", + "to": "mod-91454010a0aa78f3ef28bd69", + "type": "depends_on" + }, + { + "from": "mod-43e420b038a56638079168bc", + "to": "mod-1f38e75fd9b9f51f96a2d975", + "type": "depends_on" + }, + { + "from": "sym-4a436dd527be338afbf98bdb", + "to": "mod-43e420b038a56638079168bc", + "type": "depends_on" + }, + { + "from": "sym-4a436dd527be338afbf98bdb", + "to": "sym-6680f554fcb4ede4631e60b2", + "type": "calls" + }, + { + "from": "sym-4a436dd527be338afbf98bdb", + "to": "sym-304eaa4f7c51cf3fdbf89bb0", + "type": "calls" + }, + { + "from": "sym-4a436dd527be338afbf98bdb", + "to": "sym-9ccc28bee226a93586ef7b1d", + "type": "calls" + }, + { + "from": "mod-4abf6009e6ef176fec251259", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-4abf6009e6ef176fec251259", + "to": "mod-8aef488fb2fc78414791967a", + "type": "depends_on" + }, + { + "from": "sym-b2276d6a6402e65f56fd09ad", + "to": "mod-4abf6009e6ef176fec251259", + "type": "depends_on" + }, + { + "from": "sym-717b0f06032fce2890d123ea", + "to": "mod-0265f572c93b5fdc1506bdda", + "type": "depends_on" + }, + { + "from": "mod-1b966da09e8eebb2af4ea0ae", + "to": "mod-1de8a1fb6a48c6a931549f30", + "type": "depends_on" + }, + { + "from": "sym-a70b0054aa7a6bdc502006e3", + "to": "mod-1b966da09e8eebb2af4ea0ae", + "type": "depends_on" + }, + { + "from": "mod-fcbaaa2e6fedeb87a2dc2d8e", + "to": "mod-523a32046a2c4caccecf050d", + "type": "depends_on" + }, + { + "from": "mod-fcbaaa2e6fedeb87a2dc2d8e", + "to": "mod-ecaffe079222e4664d98655f", + "type": "depends_on" + }, + { + "from": "mod-fcbaaa2e6fedeb87a2dc2d8e", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-fcbaaa2e6fedeb87a2dc2d8e", + "to": "mod-1f38e75fd9b9f51f96a2d975", + "type": "depends_on" + }, + { + "from": "mod-fcbaaa2e6fedeb87a2dc2d8e", + "to": "mod-b2c7d957ae05ce535d8f8e2e", + "type": "depends_on" + }, + { + "from": "mod-fcbaaa2e6fedeb87a2dc2d8e", + "to": "mod-eb0798295c928ba399632ae3", + "type": "depends_on" + }, + { + "from": "mod-fcbaaa2e6fedeb87a2dc2d8e", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-fcbaaa2e6fedeb87a2dc2d8e", + "to": "mod-91454010a0aa78f3ef28bd69", + "type": "depends_on" + }, + { + "from": "sym-fb2870f850b894405cc6b6f4", + "to": "mod-fcbaaa2e6fedeb87a2dc2d8e", + "type": "depends_on" + }, + { + "from": "sym-ae84450ca16ec2017225c6e2", + "to": "sym-fb2870f850b894405cc6b6f4", + "type": "depends_on" + }, + { + "from": "sym-248d2e44333f70a7724dfab9", + "to": "sym-fb2870f850b894405cc6b6f4", + "type": "depends_on" + }, + { + "from": "sym-3ea29e1b08ecca0739db484a", + "to": "sym-fb2870f850b894405cc6b6f4", + "type": "depends_on" + }, + { + "from": "sym-57d373cba5ebbb373b4dc896", + "to": "sym-fb2870f850b894405cc6b6f4", + "type": "depends_on" + }, + { + "from": "sym-f78a8502a164052f35675687", + "to": "sym-fb2870f850b894405cc6b6f4", + "type": "depends_on" + }, + { + "from": "sym-641d0700ddf43915ffca5d6b", + "to": "sym-fb2870f850b894405cc6b6f4", + "type": "depends_on" + }, + { + "from": "sym-f61ba3716295ceca715defb3", + "to": "sym-fb2870f850b894405cc6b6f4", + "type": "depends_on" + }, + { + "from": "sym-18d8719d39f12759faddaf08", + "to": "sym-fb2870f850b894405cc6b6f4", + "type": "depends_on" + }, + { + "from": "sym-71eec5a8e8af51150f452fff", + "to": "sym-fb2870f850b894405cc6b6f4", + "type": "depends_on" + }, + { + "from": "sym-daa32cea34b9049e4b060311", + "to": "sym-fb2870f850b894405cc6b6f4", + "type": "depends_on" + }, + { + "from": "sym-7b62ffb16704e1d6d9ec6baf", + "to": "sym-fb2870f850b894405cc6b6f4", + "type": "depends_on" + }, + { + "from": "sym-3ad7b7a5210718d38b4ba00d", + "to": "sym-fb2870f850b894405cc6b6f4", + "type": "depends_on" + }, + { + "from": "sym-69b2fc8c4e62020ca15890f1", + "to": "sym-fb2870f850b894405cc6b6f4", + "type": "depends_on" + }, + { + "from": "sym-5311b846d2f0732639ef5fd5", + "to": "sym-fb2870f850b894405cc6b6f4", + "type": "depends_on" + }, + { + "from": "sym-0534ba9f686cfc223b17d309", + "to": "sym-fb2870f850b894405cc6b6f4", + "type": "depends_on" + }, + { + "from": "sym-3cf158bf5511b0f35b37c016", + "to": "sym-fb2870f850b894405cc6b6f4", + "type": "depends_on" + }, + { + "from": "sym-10211a30b965f147b9b74ec5", + "to": "sym-fb2870f850b894405cc6b6f4", + "type": "depends_on" + }, + { + "from": "sym-768bb4fdd7199b0134c39dfb", + "to": "sym-fb2870f850b894405cc6b6f4", + "type": "depends_on" + }, + { + "from": "sym-48e4099783c4eb841ccd2f70", + "to": "sym-fb2870f850b894405cc6b6f4", + "type": "depends_on" + }, + { + "from": "sym-bb91b975550883cfdd44eb71", + "to": "sym-fb2870f850b894405cc6b6f4", + "type": "depends_on" + }, + { + "from": "sym-d6f03b0c7bdecce24c1a8b1d", + "to": "sym-fb2870f850b894405cc6b6f4", + "type": "depends_on" + }, + { + "from": "sym-e9eeedb988fa9f0d93d85898", + "to": "sym-fb2870f850b894405cc6b6f4", + "type": "depends_on" + }, + { + "from": "sym-a726f0c8a505dca89d7112eb", + "to": "sym-fb2870f850b894405cc6b6f4", + "type": "depends_on" + }, + { + "from": "sym-fb2870f850b894405cc6b6f4", + "to": "sym-304eaa4f7c51cf3fdbf89bb0", + "type": "calls" + }, + { + "from": "sym-fb2870f850b894405cc6b6f4", + "to": "sym-6680f554fcb4ede4631e60b2", + "type": "calls" + }, + { + "from": "mod-ecaffe079222e4664d98655f", + "to": "mod-523a32046a2c4caccecf050d", + "type": "depends_on" + }, + { + "from": "sym-e4b8097a5ba3819fbeaf9658", + "to": "mod-ecaffe079222e4664d98655f", + "type": "depends_on" + }, + { + "from": "sym-c06b4d496f43bc591932905d", + "to": "sym-e4b8097a5ba3819fbeaf9658", + "type": "depends_on" + }, + { + "from": "sym-8450a6eb559ca4627e196e23", + "to": "mod-523a32046a2c4caccecf050d", + "type": "depends_on" + }, + { + "from": "sym-268e622d0ec0e2c563283be3", + "to": "sym-8450a6eb559ca4627e196e23", + "type": "depends_on" + }, + { + "from": "sym-c01d178ff00381d6e5d2c43d", + "to": "mod-523a32046a2c4caccecf050d", + "type": "depends_on" + }, + { + "from": "sym-c2ac5bb71bdb602bdd9aa98b", + "to": "sym-c01d178ff00381d6e5d2c43d", + "type": "depends_on" + }, + { + "from": "sym-ca3dbc3c56cb1055cd0a0a89", + "to": "mod-523a32046a2c4caccecf050d", + "type": "depends_on" + }, + { + "from": "mod-3a3b7b050c56c146875c18fb", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-3a3b7b050c56c146875c18fb", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-3a3b7b050c56c146875c18fb", + "to": "mod-b2c7d957ae05ce535d8f8e2e", + "type": "depends_on" + }, + { + "from": "sym-1447dd6a4335c05fb5ed3cb2", + "to": "mod-3a3b7b050c56c146875c18fb", + "type": "depends_on" + }, + { + "from": "sym-e5d0b42c6f9912d4ac96df07", + "to": "sym-1447dd6a4335c05fb5ed3cb2", + "type": "depends_on" + }, + { + "from": "sym-c94aaedf877b31be4784c658", + "to": "sym-1447dd6a4335c05fb5ed3cb2", + "type": "depends_on" + }, + { + "from": "sym-6ad07b078d049901d4ccfed5", + "to": "sym-1447dd6a4335c05fb5ed3cb2", + "type": "depends_on" + }, + { + "from": "sym-1db75ffac09598cb3cfb34c1", + "to": "sym-1447dd6a4335c05fb5ed3cb2", + "type": "depends_on" + }, + { + "from": "sym-3e07be48eec727726678254a", + "to": "sym-1447dd6a4335c05fb5ed3cb2", + "type": "depends_on" + }, + { + "from": "sym-5fdfacd14d17871a556566d7", + "to": "sym-1447dd6a4335c05fb5ed3cb2", + "type": "depends_on" + }, + { + "from": "sym-4d5e1dcfb557a12f53357826", + "to": "sym-1447dd6a4335c05fb5ed3cb2", + "type": "depends_on" + }, + { + "from": "sym-45cd1de4f2eb8d8a20b32d8d", + "to": "sym-1447dd6a4335c05fb5ed3cb2", + "type": "depends_on" + }, + { + "from": "sym-5087892a29105232bc1c95bb", + "to": "sym-1447dd6a4335c05fb5ed3cb2", + "type": "depends_on" + }, + { + "from": "sym-3d9c34a3fca6e49261b71c65", + "to": "sym-1447dd6a4335c05fb5ed3cb2", + "type": "depends_on" + }, + { + "from": "mod-b2c7d957ae05ce535d8f8e2e", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-b62136244c8ea0814eedab1d", + "to": "mod-b2c7d957ae05ce535d8f8e2e", + "type": "depends_on" + }, + { + "from": "sym-2a8fb09cf87c7ed8b2e472f7", + "to": "mod-b2c7d957ae05ce535d8f8e2e", + "type": "depends_on" + }, + { + "from": "sym-3435e923dc5c81930b0c8a24", + "to": "mod-84552d58b6743daab10f83b3", + "type": "depends_on" + }, + { + "from": "sym-e4ce5a5590c74675e5d0843d", + "to": "sym-3435e923dc5c81930b0c8a24", + "type": "depends_on" + }, + { + "from": "sym-71f146aad1749b8d9048fdb9", + "to": "sym-3435e923dc5c81930b0c8a24", + "type": "depends_on" + }, + { + "from": "sym-e932c1609a686ad5f6432fa2", + "to": "sym-3435e923dc5c81930b0c8a24", + "type": "depends_on" + }, + { + "from": "mod-d1ccb3f2c31e96f4ad5dab3f", + "to": "mod-3a3b7b050c56c146875c18fb", + "type": "depends_on" + }, + { + "from": "mod-d1ccb3f2c31e96f4ad5dab3f", + "to": "mod-84552d58b6743daab10f83b3", + "type": "depends_on" + }, + { + "from": "mod-d1ccb3f2c31e96f4ad5dab3f", + "to": "mod-04e38e9e7bbb7be0a3e4dce7", + "type": "depends_on" + }, + { + "from": "sym-478e8ddcf7388b01c25418b2", + "to": "mod-d1ccb3f2c31e96f4ad5dab3f", + "type": "depends_on" + }, + { + "from": "sym-7ffbcc1ce07d7b3b23916771", + "to": "mod-d1ccb3f2c31e96f4ad5dab3f", + "type": "depends_on" + }, + { + "from": "sym-a066fcb7bd034599296b5c63", + "to": "mod-d1ccb3f2c31e96f4ad5dab3f", + "type": "depends_on" + }, + { + "from": "sym-de79dd64a40f89fbb6d128ae", + "to": "mod-04e38e9e7bbb7be0a3e4dce7", + "type": "depends_on" + }, + { + "from": "sym-00cbbbcdb0b955db9f940293", + "to": "sym-de79dd64a40f89fbb6d128ae", + "type": "depends_on" + }, + { + "from": "sym-80491bfd51e3d62b35bc137c", + "to": "sym-de79dd64a40f89fbb6d128ae", + "type": "depends_on" + }, + { + "from": "sym-3510b71d5489f9c401a9dc5e", + "to": "sym-de79dd64a40f89fbb6d128ae", + "type": "depends_on" + }, + { + "from": "sym-8c4521928e9d317614012781", + "to": "sym-de79dd64a40f89fbb6d128ae", + "type": "depends_on" + }, + { + "from": "sym-30eead59051be586144da020", + "to": "sym-de79dd64a40f89fbb6d128ae", + "type": "depends_on" + }, + { + "from": "sym-0c100fc39b8f04913905c496", + "to": "sym-de79dd64a40f89fbb6d128ae", + "type": "depends_on" + }, + { + "from": "mod-b5a2bbfcc551f4a8277420d0", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-b5a2bbfcc551f4a8277420d0", + "to": "mod-f235c77fff58b93b0ef4a745", + "type": "depends_on" + }, + { + "from": "mod-b5a2bbfcc551f4a8277420d0", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "sym-9246344e2f07f04e26846059", + "to": "mod-b5a2bbfcc551f4a8277420d0", + "type": "depends_on" + }, + { + "from": "sym-a2ae8aabb26ee6c4a5dcd1f1", + "to": "sym-9246344e2f07f04e26846059", + "type": "depends_on" + }, + { + "from": "sym-d96c31998797e41a6b848c0d", + "to": "sym-9246344e2f07f04e26846059", + "type": "depends_on" + }, + { + "from": "sym-a6adf2f17e7583aff2cc5411", + "to": "sym-9246344e2f07f04e26846059", + "type": "depends_on" + }, + { + "from": "sym-86e7b8627dd8998cff427159", + "to": "sym-9246344e2f07f04e26846059", + "type": "depends_on" + }, + { + "from": "sym-a03cefb08d5d832286f18983", + "to": "sym-9246344e2f07f04e26846059", + "type": "depends_on" + }, + { + "from": "sym-bc81dd6cd59401b6fd78323a", + "to": "sym-9246344e2f07f04e26846059", + "type": "depends_on" + }, + { + "from": "sym-66305b056cc80ae18d7fb7ac", + "to": "sym-9246344e2f07f04e26846059", + "type": "depends_on" + }, + { + "from": "sym-f30624819d473bf882e23852", + "to": "sym-9246344e2f07f04e26846059", + "type": "depends_on" + }, + { + "from": "sym-499b75c3978caaaad3d70456", + "to": "sym-9246344e2f07f04e26846059", + "type": "depends_on" + }, + { + "from": "mod-995b3971c802fa33d1e8772a", + "to": "mod-b5a2bbfcc551f4a8277420d0", + "type": "depends_on" + }, + { + "from": "sym-6e936872ac6e08ef9265f7e6", + "to": "mod-995b3971c802fa33d1e8772a", + "type": "depends_on" + }, + { + "from": "mod-92957ee0de7980fc9c719d03", + "to": "mod-e3c2dc56fd38d656d5235000", + "type": "depends_on" + }, + { + "from": "mod-92957ee0de7980fc9c719d03", + "to": "mod-1d4743119cc890fadab85fb7", + "type": "depends_on" + }, + { + "from": "mod-92957ee0de7980fc9c719d03", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-92957ee0de7980fc9c719d03", + "to": "mod-24557f0b00a0d628de80e5eb", + "type": "depends_on" + }, + { + "from": "mod-92957ee0de7980fc9c719d03", + "to": "mod-49040f43d8c17532e83ed67d", + "type": "depends_on" + }, + { + "from": "sym-e7651dee3e697e21bb4b173e", + "to": "mod-92957ee0de7980fc9c719d03", + "type": "depends_on" + }, + { + "from": "sym-5ae8aed9695985bfe76de157", + "to": "sym-e7651dee3e697e21bb4b173e", + "type": "depends_on" + }, + { + "from": "sym-70cd0342713e391c581bfdc1", + "to": "mod-92957ee0de7980fc9c719d03", + "type": "depends_on" + }, + { + "from": "sym-08f815d80cefd75cb3778d5c", + "to": "sym-70cd0342713e391c581bfdc1", + "type": "depends_on" + }, + { + "from": "sym-02bb643864b28ec54f6bd102", + "to": "mod-92957ee0de7980fc9c719d03", + "type": "depends_on" + }, + { + "from": "sym-d27bb0ecc07e0edfbb45db98", + "to": "sym-02bb643864b28ec54f6bd102", + "type": "depends_on" + }, + { + "from": "sym-4a18dbc9ae74cfc715acef2e", + "to": "sym-02bb643864b28ec54f6bd102", + "type": "depends_on" + }, + { + "from": "sym-cfd05571ce888587707fdf21", + "to": "sym-02bb643864b28ec54f6bd102", + "type": "depends_on" + }, + { + "from": "sym-02bb643864b28ec54f6bd102", + "to": "sym-fcae6dca65ab92ce6e8c43b0", + "type": "calls" + }, + { + "from": "sym-0d364798a0a06efaa91eb9d1", + "to": "mod-1b44d7490c1bab1a28faf13b", + "type": "depends_on" + }, + { + "from": "sym-4c50bd826d82ec0f9d3122d5", + "to": "sym-0d364798a0a06efaa91eb9d1", + "type": "depends_on" + }, + { + "from": "sym-ae837a9398f38a1b4ff93d6f", + "to": "sym-0d364798a0a06efaa91eb9d1", + "type": "depends_on" + }, + { + "from": "sym-d893e963526d03d160b5c0be", + "to": "sym-0d364798a0a06efaa91eb9d1", + "type": "depends_on" + }, + { + "from": "sym-79fe6fcef068226cd66a69bb", + "to": "sym-0d364798a0a06efaa91eb9d1", + "type": "depends_on" + }, + { + "from": "sym-6725cb4ea48529df75fd1445", + "to": "sym-0d364798a0a06efaa91eb9d1", + "type": "depends_on" + }, + { + "from": "mod-7656cd8b9f3c2f0776a9aaa8", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-8aee505c10e81a828d772a8f", + "to": "mod-7656cd8b9f3c2f0776a9aaa8", + "type": "depends_on" + }, + { + "from": "sym-3c9b9e66f6b1610394863a31", + "to": "sym-8aee505c10e81a828d772a8f", + "type": "depends_on" + }, + { + "from": "sym-1251f543b194078832e93227", + "to": "mod-7656cd8b9f3c2f0776a9aaa8", + "type": "depends_on" + }, + { + "from": "sym-2a25f06310b2ac9c6ba22a9a", + "to": "sym-1251f543b194078832e93227", + "type": "depends_on" + }, + { + "from": "sym-8c33d38f419fe8a74c58fbe1", + "to": "sym-1251f543b194078832e93227", + "type": "depends_on" + }, + { + "from": "sym-d1c3b22359c1e904c5548b0c", + "to": "sym-1251f543b194078832e93227", + "type": "depends_on" + }, + { + "from": "sym-cafb910907543389ada5a5f8", + "to": "sym-1251f543b194078832e93227", + "type": "depends_on" + }, + { + "from": "sym-dacd66cc49bfa3589fd39daf", + "to": "sym-1251f543b194078832e93227", + "type": "depends_on" + }, + { + "from": "mod-49040f43d8c17532e83ed67d", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-49040f43d8c17532e83ed67d", + "to": "mod-92957ee0de7980fc9c719d03", + "type": "depends_on" + }, + { + "from": "sym-35058dc9401f299a3ecafdd9", + "to": "mod-49040f43d8c17532e83ed67d", + "type": "depends_on" + }, + { + "from": "sym-624bf6cdfe56ca8483217b9a", + "to": "sym-35058dc9401f299a3ecafdd9", + "type": "depends_on" + }, + { + "from": "sym-a6d2f8c35523341aeef50317", + "to": "mod-49040f43d8c17532e83ed67d", + "type": "depends_on" + }, + { + "from": "sym-dcff225a257a375406e03bd6", + "to": "sym-a6d2f8c35523341aeef50317", + "type": "depends_on" + }, + { + "from": "sym-918f122ab3c74c4aed33144c", + "to": "mod-49040f43d8c17532e83ed67d", + "type": "depends_on" + }, + { + "from": "sym-f7284b2c87bedd3283d87b7c", + "to": "sym-918f122ab3c74c4aed33144c", + "type": "depends_on" + }, + { + "from": "sym-ca6bb0b08dd15d039112edce", + "to": "sym-918f122ab3c74c4aed33144c", + "type": "depends_on" + }, + { + "from": "sym-ebc7f1171082535469f04f37", + "to": "sym-918f122ab3c74c4aed33144c", + "type": "depends_on" + }, + { + "from": "mod-a1bb18b05142b623b9fb8be4", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-d70e965fb2fa15cbae8e28f6", + "to": "mod-a1bb18b05142b623b9fb8be4", + "type": "depends_on" + }, + { + "from": "sym-67a715a261c2e12742293927", + "to": "sym-d70e965fb2fa15cbae8e28f6", + "type": "depends_on" + }, + { + "from": "sym-3006ba9f0477eb57baf64679", + "to": "sym-d70e965fb2fa15cbae8e28f6", + "type": "depends_on" + }, + { + "from": "sym-20016088f1d08b5e28873771", + "to": "sym-d70e965fb2fa15cbae8e28f6", + "type": "depends_on" + }, + { + "from": "sym-69f096bbd5c10a59ec215101", + "to": "sym-d70e965fb2fa15cbae8e28f6", + "type": "depends_on" + }, + { + "from": "sym-584d8c1e5facf721d03d3b31", + "to": "sym-d70e965fb2fa15cbae8e28f6", + "type": "depends_on" + }, + { + "from": "sym-d5c23b7e0348db000e139ff7", + "to": "sym-d70e965fb2fa15cbae8e28f6", + "type": "depends_on" + }, + { + "from": "sym-ac5e1756fdf78068d6983990", + "to": "sym-d70e965fb2fa15cbae8e28f6", + "type": "depends_on" + }, + { + "from": "sym-c4426882c67f5c79e389ae4e", + "to": "sym-d70e965fb2fa15cbae8e28f6", + "type": "depends_on" + }, + { + "from": "sym-9eaab80712308d2527f57103", + "to": "sym-d70e965fb2fa15cbae8e28f6", + "type": "depends_on" + }, + { + "from": "sym-df06fb01fc8a797579c8ff4c", + "to": "sym-d70e965fb2fa15cbae8e28f6", + "type": "depends_on" + }, + { + "from": "mod-9b1b89cd5b264f022df908d4", + "to": "mod-c8450797917dfb54fe43ca86", + "type": "depends_on" + }, + { + "from": "mod-9b1b89cd5b264f022df908d4", + "to": "mod-7421cc24ed6c5406e86d1752", + "type": "depends_on" + }, + { + "from": "mod-9b1b89cd5b264f022df908d4", + "to": "mod-8aef488fb2fc78414791967a", + "type": "depends_on" + }, + { + "from": "mod-9b1b89cd5b264f022df908d4", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-9b1b89cd5b264f022df908d4", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-9b1b89cd5b264f022df908d4", + "to": "mod-7a1941c482905a159b7f2f46", + "type": "depends_on" + }, + { + "from": "mod-9b1b89cd5b264f022df908d4", + "to": "mod-f67afbbcc2c394e0b6549ff8", + "type": "depends_on" + }, + { + "from": "mod-9b1b89cd5b264f022df908d4", + "to": "mod-ffe258ffef0cb8215e2647fe", + "type": "depends_on" + }, + { + "from": "mod-9b1b89cd5b264f022df908d4", + "to": "mod-c096e9d35a0fa633ff44cda0", + "type": "depends_on" + }, + { + "from": "sym-a80634c6150e4ca0c1ff8c8e", + "to": "mod-9b1b89cd5b264f022df908d4", + "type": "depends_on" + }, + { + "from": "sym-e5cb9daa8949710c5b7c5ece", + "to": "sym-a80634c6150e4ca0c1ff8c8e", + "type": "depends_on" + }, + { + "from": "sym-e3f654b992e0b0bf06a68abf", + "to": "mod-9b1b89cd5b264f022df908d4", + "type": "depends_on" + }, + { + "from": "sym-d8d437339e4ab9fc5178e4e3", + "to": "sym-e3f654b992e0b0bf06a68abf", + "type": "depends_on" + }, + { + "from": "sym-2c271a791fcb37bd28c35865", + "to": "sym-e3f654b992e0b0bf06a68abf", + "type": "depends_on" + }, + { + "from": "sym-4c05f83ad9df2e0a4bf4345b", + "to": "sym-e3f654b992e0b0bf06a68abf", + "type": "depends_on" + }, + { + "from": "sym-a02371360ecb1b189e94f7f7", + "to": "sym-e3f654b992e0b0bf06a68abf", + "type": "depends_on" + }, + { + "from": "sym-9b3d5d43fddffa465a2e6e3a", + "to": "sym-e3f654b992e0b0bf06a68abf", + "type": "depends_on" + }, + { + "from": "sym-ad193a03f24f1159ca71a32f", + "to": "sym-e3f654b992e0b0bf06a68abf", + "type": "depends_on" + }, + { + "from": "sym-1c98b6e9b9a0b4ef1cd0ecbc", + "to": "sym-e3f654b992e0b0bf06a68abf", + "type": "depends_on" + }, + { + "from": "mod-3f601c90582b585a8d9b6d4b", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-3f601c90582b585a8d9b6d4b", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-3f601c90582b585a8d9b6d4b", + "to": "mod-c8450797917dfb54fe43ca86", + "type": "depends_on" + }, + { + "from": "sym-a0e1be197d6920a4bf0e1a91", + "to": "mod-3f601c90582b585a8d9b6d4b", + "type": "depends_on" + }, + { + "from": "sym-a21c13338ed84dbc2259e0be", + "to": "mod-3f601c90582b585a8d9b6d4b", + "type": "depends_on" + }, + { + "from": "sym-43c1406a11c590e987931561", + "to": "mod-3f601c90582b585a8d9b6d4b", + "type": "depends_on" + }, + { + "from": "sym-172932487433d3ea2b7e938b", + "to": "mod-3f601c90582b585a8d9b6d4b", + "type": "depends_on" + }, + { + "from": "sym-45c0e0b348a5d87bab178a86", + "to": "mod-3f601c90582b585a8d9b6d4b", + "type": "depends_on" + }, + { + "from": "sym-45c0e0b348a5d87bab178a86", + "to": "sym-a0e1be197d6920a4bf0e1a91", + "type": "calls" + }, + { + "from": "mod-0f4a4cd8bc5da602adf2a2fa", + "to": "mod-c096e9d35a0fa633ff44cda0", + "type": "depends_on" + }, + { + "from": "mod-0f4a4cd8bc5da602adf2a2fa", + "to": "mod-fdc4ea4eee14d55af206496c", + "type": "depends_on" + }, + { + "from": "mod-0f4a4cd8bc5da602adf2a2fa", + "to": "mod-e395bfa94e646748f1e3298e", + "type": "depends_on" + }, + { + "from": "mod-0f4a4cd8bc5da602adf2a2fa", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "mod-0f4a4cd8bc5da602adf2a2fa", + "to": "mod-c8450797917dfb54fe43ca86", + "type": "depends_on" + }, + { + "from": "mod-0f4a4cd8bc5da602adf2a2fa", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-0f4a4cd8bc5da602adf2a2fa", + "to": "mod-7a1941c482905a159b7f2f46", + "type": "depends_on" + }, + { + "from": "sym-7f56f2e032400167794c5cde", + "to": "mod-0f4a4cd8bc5da602adf2a2fa", + "type": "depends_on" + }, + { + "from": "sym-17bce899312ef74e6bda04cf", + "to": "sym-7f56f2e032400167794c5cde", + "type": "depends_on" + }, + { + "from": "sym-dfc05adc455d203de748b3a8", + "to": "mod-0f4a4cd8bc5da602adf2a2fa", + "type": "depends_on" + }, + { + "from": "sym-8bdfa293ce52a42f7652c988", + "to": "sym-dfc05adc455d203de748b3a8", + "type": "depends_on" + }, + { + "from": "sym-831248ff23fbc8a042573d3d", + "to": "sym-dfc05adc455d203de748b3a8", + "type": "depends_on" + }, + { + "from": "sym-fd41948d7ef0926f2abbef25", + "to": "sym-dfc05adc455d203de748b3a8", + "type": "depends_on" + }, + { + "from": "sym-8e801cfbfaba0ef3a4bfc08d", + "to": "sym-dfc05adc455d203de748b3a8", + "type": "depends_on" + }, + { + "from": "mod-cee54b249e5709ba015c9342", + "to": "mod-c8450797917dfb54fe43ca86", + "type": "depends_on" + }, + { + "from": "mod-cee54b249e5709ba015c9342", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-cee54b249e5709ba015c9342", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-cee54b249e5709ba015c9342", + "to": "mod-1f38e75fd9b9f51f96a2d975", + "type": "depends_on" + }, + { + "from": "mod-cee54b249e5709ba015c9342", + "to": "mod-91454010a0aa78f3ef28bd69", + "type": "depends_on" + }, + { + "from": "mod-cee54b249e5709ba015c9342", + "to": "mod-7a1941c482905a159b7f2f46", + "type": "depends_on" + }, + { + "from": "mod-cee54b249e5709ba015c9342", + "to": "mod-0e059ca33e0c78acb79559e8", + "type": "depends_on" + }, + { + "from": "mod-cee54b249e5709ba015c9342", + "to": "mod-a5b4a44206cc0f3e39469a88", + "type": "depends_on" + }, + { + "from": "mod-cee54b249e5709ba015c9342", + "to": "mod-da04ef1eca622af1ef3664c3", + "type": "depends_on" + }, + { + "from": "mod-cee54b249e5709ba015c9342", + "to": "mod-88c1741b3b46fa02af202651", + "type": "depends_on" + }, + { + "from": "mod-cee54b249e5709ba015c9342", + "to": "mod-10774a0b5dd2473051df0fad", + "type": "depends_on" + }, + { + "from": "sym-4b898ed7fd8e376c3dcc0fa4", + "to": "mod-cee54b249e5709ba015c9342", + "type": "depends_on" + }, + { + "from": "sym-47afbbc071054930760a71ec", + "to": "sym-4b898ed7fd8e376c3dcc0fa4", + "type": "depends_on" + }, + { + "from": "sym-fa7bdf8575acec072c44d87e", + "to": "sym-4b898ed7fd8e376c3dcc0fa4", + "type": "depends_on" + }, + { + "from": "sym-5806cf014947d56b477072cf", + "to": "sym-4b898ed7fd8e376c3dcc0fa4", + "type": "depends_on" + }, + { + "from": "sym-ed3191a6a92de3cca3eca041", + "to": "sym-4b898ed7fd8e376c3dcc0fa4", + "type": "depends_on" + }, + { + "from": "sym-c99cdd731f091e7b6eede0a4", + "to": "sym-4b898ed7fd8e376c3dcc0fa4", + "type": "depends_on" + }, + { + "from": "sym-08d4f6621e5868c2e7298761", + "to": "sym-4b898ed7fd8e376c3dcc0fa4", + "type": "depends_on" + }, + { + "from": "sym-ac3b2be1cf2aa6ae932b5ca3", + "to": "sym-4b898ed7fd8e376c3dcc0fa4", + "type": "depends_on" + }, + { + "from": "sym-4b898ed7fd8e376c3dcc0fa4", + "to": "sym-6680f554fcb4ede4631e60b2", + "type": "calls" + }, + { + "from": "sym-4b898ed7fd8e376c3dcc0fa4", + "to": "sym-304eaa4f7c51cf3fdbf89bb0", + "type": "calls" + }, + { + "from": "mod-c096e9d35a0fa633ff44cda0", + "to": "mod-16a76d1c87dfcbecec53d1e0", + "type": "depends_on" + }, + { + "from": "mod-c096e9d35a0fa633ff44cda0", + "to": "mod-fdc4ea4eee14d55af206496c", + "type": "depends_on" + }, + { + "from": "mod-c096e9d35a0fa633ff44cda0", + "to": "mod-84552d58b6743daab10f83b3", + "type": "depends_on" + }, + { + "from": "mod-c096e9d35a0fa633ff44cda0", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-c096e9d35a0fa633ff44cda0", + "to": "mod-7a1941c482905a159b7f2f46", + "type": "depends_on" + }, + { + "from": "sym-4291220b529d489dd8c2c906", + "to": "mod-c096e9d35a0fa633ff44cda0", + "type": "depends_on" + }, + { + "from": "sym-ab9e1f208621fd5510cbde8d", + "to": "sym-4291220b529d489dd8c2c906", + "type": "depends_on" + }, + { + "from": "sym-1589a1e584764f6eb8336b5a", + "to": "mod-c096e9d35a0fa633ff44cda0", + "type": "depends_on" + }, + { + "from": "sym-e6ccef4d3d370fbaa7572337", + "to": "sym-1589a1e584764f6eb8336b5a", + "type": "depends_on" + }, + { + "from": "sym-b21a801e0939b0bf2b33d962", + "to": "mod-c096e9d35a0fa633ff44cda0", + "type": "depends_on" + }, + { + "from": "sym-26ec3e6a23b13e6a7ed0966e", + "to": "sym-b21a801e0939b0bf2b33d962", + "type": "depends_on" + }, + { + "from": "sym-0b71fee0d1ec6d5a74be7f4c", + "to": "sym-b21a801e0939b0bf2b33d962", + "type": "depends_on" + }, + { + "from": "sym-daa74c90db8a33dcb0ec2371", + "to": "sym-b21a801e0939b0bf2b33d962", + "type": "depends_on" + }, + { + "from": "sym-2e2e66ddafbee3d7888773eb", + "to": "sym-b21a801e0939b0bf2b33d962", + "type": "depends_on" + }, + { + "from": "sym-8044943db3ed1935a237d515", + "to": "sym-b21a801e0939b0bf2b33d962", + "type": "depends_on" + }, + { + "from": "sym-6bb546b5a3ede7b2f84229b9", + "to": "sym-b21a801e0939b0bf2b33d962", + "type": "depends_on" + }, + { + "from": "sym-11e0c9793af13b02d531305d", + "to": "sym-b21a801e0939b0bf2b33d962", + "type": "depends_on" + }, + { + "from": "sym-bf14541c9f03ae606b9284e0", + "to": "sym-b21a801e0939b0bf2b33d962", + "type": "depends_on" + }, + { + "from": "sym-1c0cc65675b8167e5c4294e5", + "to": "sym-b21a801e0939b0bf2b33d962", + "type": "depends_on" + }, + { + "from": "sym-5db43f643de4a8334d9a9238", + "to": "sym-b21a801e0939b0bf2b33d962", + "type": "depends_on" + }, + { + "from": "mod-3be22133d78983422a1da0d9", + "to": "mod-16a76d1c87dfcbecec53d1e0", + "type": "depends_on" + }, + { + "from": "mod-3be22133d78983422a1da0d9", + "to": "mod-e3c2dc56fd38d656d5235000", + "type": "depends_on" + }, + { + "from": "mod-3be22133d78983422a1da0d9", + "to": "mod-193629267f30c2895ef15b17", + "type": "depends_on" + }, + { + "from": "mod-3be22133d78983422a1da0d9", + "to": "mod-c096e9d35a0fa633ff44cda0", + "type": "depends_on" + }, + { + "from": "mod-3be22133d78983422a1da0d9", + "to": "mod-e395bfa94e646748f1e3298e", + "type": "depends_on" + }, + { + "from": "mod-3be22133d78983422a1da0d9", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-3be22133d78983422a1da0d9", + "to": "mod-7a1941c482905a159b7f2f46", + "type": "depends_on" + }, + { + "from": "sym-2de50e452bfe268a492fe5f9", + "to": "mod-3be22133d78983422a1da0d9", + "type": "depends_on" + }, + { + "from": "sym-27f8cb315a1d5f9c24544f69", + "to": "sym-2de50e452bfe268a492fe5f9", + "type": "depends_on" + }, + { + "from": "sym-c9ceccc766be21a537a05305", + "to": "mod-3be22133d78983422a1da0d9", + "type": "depends_on" + }, + { + "from": "sym-19d36c36107e8655af5d7fd3", + "to": "sym-c9ceccc766be21a537a05305", + "type": "depends_on" + }, + { + "from": "sym-93b168eacf2c938baa400513", + "to": "sym-c9ceccc766be21a537a05305", + "type": "depends_on" + }, + { + "from": "sym-c307df6cb4b1b232420fa6c0", + "to": "sym-c9ceccc766be21a537a05305", + "type": "depends_on" + }, + { + "from": "sym-35fba28731561b9bc332a14a", + "to": "sym-c9ceccc766be21a537a05305", + "type": "depends_on" + }, + { + "from": "sym-3f63d6b16b75553b0e99c85d", + "to": "sym-c9ceccc766be21a537a05305", + "type": "depends_on" + }, + { + "from": "sym-c1f5d92afff2b3686df79483", + "to": "sym-c9ceccc766be21a537a05305", + "type": "depends_on" + }, + { + "from": "sym-954b6ffd923957113b0c728a", + "to": "sym-c9ceccc766be21a537a05305", + "type": "depends_on" + }, + { + "from": "sym-a4a1620ae3de23766ad15ad4", + "to": "sym-c9ceccc766be21a537a05305", + "type": "depends_on" + }, + { + "from": "sym-a822d74085d8f72397857b15", + "to": "sym-c9ceccc766be21a537a05305", + "type": "depends_on" + }, + { + "from": "sym-997a716aa0bbfede4eceda6a", + "to": "sym-c9ceccc766be21a537a05305", + "type": "depends_on" + }, + { + "from": "mod-ec09ae3ca7a100b5fa55556d", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-ec09ae3ca7a100b5fa55556d", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-ec09ae3ca7a100b5fa55556d", + "to": "mod-7a1941c482905a159b7f2f46", + "type": "depends_on" + }, + { + "from": "sym-c6e8e3bf5cc44336d4a53bdd", + "to": "mod-ec09ae3ca7a100b5fa55556d", + "type": "depends_on" + }, + { + "from": "sym-4de4b6def4e23443eeffc542", + "to": "sym-c6e8e3bf5cc44336d4a53bdd", + "type": "depends_on" + }, + { + "from": "sym-29a2b1c7f0a8a39cdffe219b", + "to": "sym-c6e8e3bf5cc44336d4a53bdd", + "type": "depends_on" + }, + { + "from": "sym-aafd9c6d9db98cc7c5c0ea56", + "to": "sym-c6e8e3bf5cc44336d4a53bdd", + "type": "depends_on" + }, + { + "from": "sym-aeaa314f6b50142cc32f9c3d", + "to": "sym-c6e8e3bf5cc44336d4a53bdd", + "type": "depends_on" + }, + { + "from": "sym-36b6cff10252161c12781dc3", + "to": "sym-c6e8e3bf5cc44336d4a53bdd", + "type": "depends_on" + }, + { + "from": "sym-8f7c95d1f4cf847566e547d8", + "to": "sym-c6e8e3bf5cc44336d4a53bdd", + "type": "depends_on" + }, + { + "from": "sym-4d0cd68dc95fdba20ca8881e", + "to": "sym-c6e8e3bf5cc44336d4a53bdd", + "type": "depends_on" + }, + { + "from": "sym-f1abc6862b1d0b36440db04a", + "to": "sym-c6e8e3bf5cc44336d4a53bdd", + "type": "depends_on" + }, + { + "from": "sym-8536e2d1ed488580c2710e4b", + "to": "sym-c6e8e3bf5cc44336d4a53bdd", + "type": "depends_on" + }, + { + "from": "sym-7dff1b0065281e707833c23b", + "to": "sym-c6e8e3bf5cc44336d4a53bdd", + "type": "depends_on" + }, + { + "from": "sym-0cabe6285a709ea15e0bd36d", + "to": "sym-c6e8e3bf5cc44336d4a53bdd", + "type": "depends_on" + }, + { + "from": "sym-5b8f00d966b8ca663f148d64", + "to": "sym-c6e8e3bf5cc44336d4a53bdd", + "type": "depends_on" + }, + { + "from": "sym-c41905143e6699f28eb26389", + "to": "sym-c6e8e3bf5cc44336d4a53bdd", + "type": "depends_on" + }, + { + "from": "sym-a21b4ff1c04b9173c57ae18b", + "to": "sym-c6e8e3bf5cc44336d4a53bdd", + "type": "depends_on" + }, + { + "from": "sym-890d5872f24fa2a22e27e2e3", + "to": "mod-df3c25d58c0f2295ea451896", + "type": "depends_on" + }, + { + "from": "sym-53d1518d6dfc17a1e9e5918d", + "to": "sym-890d5872f24fa2a22e27e2e3", + "type": "depends_on" + }, + { + "from": "sym-10a3e239cb14bdadf9258ee2", + "to": "mod-df3c25d58c0f2295ea451896", + "type": "depends_on" + }, + { + "from": "sym-b2396a7fda447bd25860da35", + "to": "sym-10a3e239cb14bdadf9258ee2", + "type": "depends_on" + }, + { + "from": "mod-f9348034f6db4a0cbf002ce1", + "to": "mod-7a1941c482905a159b7f2f46", + "type": "depends_on" + }, + { + "from": "sym-b626e437b5fab56729c32df4", + "to": "mod-f9348034f6db4a0cbf002ce1", + "type": "depends_on" + }, + { + "from": "mod-ffe258ffef0cb8215e2647fe", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-7bf31afd65c0bef1041e40b9", + "to": "mod-ffe258ffef0cb8215e2647fe", + "type": "depends_on" + }, + { + "from": "sym-bf0f461e046c6b3eda7156b6", + "to": "sym-7bf31afd65c0bef1041e40b9", + "type": "depends_on" + }, + { + "from": "sym-dc56c00366f404d1f5b2217d", + "to": "mod-ffe258ffef0cb8215e2647fe", + "type": "depends_on" + }, + { + "from": "sym-d253e7602287f9539e290e65", + "to": "sym-dc56c00366f404d1f5b2217d", + "type": "depends_on" + }, + { + "from": "sym-5609925abe4d5877637c4336", + "to": "mod-ffe258ffef0cb8215e2647fe", + "type": "depends_on" + }, + { + "from": "sym-d8c9048521b2143c9e36d13a", + "to": "sym-5609925abe4d5877637c4336", + "type": "depends_on" + }, + { + "from": "sym-734f496461dee58b5b6c7d3c", + "to": "mod-ffe258ffef0cb8215e2647fe", + "type": "depends_on" + }, + { + "from": "sym-d072989f47ace9a63dc8d63d", + "to": "sym-734f496461dee58b5b6c7d3c", + "type": "depends_on" + }, + { + "from": "sym-d0d37acf5a0af3d63226596c", + "to": "sym-734f496461dee58b5b6c7d3c", + "type": "depends_on" + }, + { + "from": "sym-cabfa6d9d630de5d0e430372", + "to": "sym-734f496461dee58b5b6c7d3c", + "type": "depends_on" + }, + { + "from": "sym-6335fab8f96515814167954f", + "to": "sym-734f496461dee58b5b6c7d3c", + "type": "depends_on" + }, + { + "from": "sym-8b01cc920d0bd06a1193a9a1", + "to": "sym-734f496461dee58b5b6c7d3c", + "type": "depends_on" + }, + { + "from": "sym-b1241e07fa5cdef9ba64f091", + "to": "sym-734f496461dee58b5b6c7d3c", + "type": "depends_on" + }, + { + "from": "sym-bf445a40231c525d7586d079", + "to": "sym-734f496461dee58b5b6c7d3c", + "type": "depends_on" + }, + { + "from": "sym-370aa540920a40ace242b281", + "to": "sym-734f496461dee58b5b6c7d3c", + "type": "depends_on" + }, + { + "from": "sym-734f496461dee58b5b6c7d3c", + "to": "sym-b626e437b5fab56729c32df4", + "type": "calls" + }, + { + "from": "sym-8b528a851f77e9286724f6be", + "to": "mod-ffe258ffef0cb8215e2647fe", + "type": "depends_on" + }, + { + "from": "sym-f4b66f329402ad34d35ebc2a", + "to": "mod-38cb481227a16780e055daf9", + "type": "depends_on" + }, + { + "from": "sym-4c7db004c865013fef5a7c4e", + "to": "sym-f4b66f329402ad34d35ebc2a", + "type": "depends_on" + }, + { + "from": "sym-b3b5244d7b171c0138f12fd5", + "to": "mod-38cb481227a16780e055daf9", + "type": "depends_on" + }, + { + "from": "sym-f4fdde41deaab86f8d60b115", + "to": "mod-38cb481227a16780e055daf9", + "type": "depends_on" + }, + { + "from": "mod-93380aca3aab056f0dd2e4e0", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-8d3749fede2b2e386f981c1a", + "to": "mod-93380aca3aab056f0dd2e4e0", + "type": "depends_on" + }, + { + "from": "sym-0e15393966ef0943f000daf9", + "to": "sym-8d3749fede2b2e386f981c1a", + "type": "depends_on" + }, + { + "from": "sym-7e71f23db4caf3a7432f457e", + "to": "mod-93380aca3aab056f0dd2e4e0", + "type": "depends_on" + }, + { + "from": "sym-95ba42084419317913e1ccd7", + "to": "sym-7e71f23db4caf3a7432f457e", + "type": "depends_on" + }, + { + "from": "sym-e7d959bae3d0df1109f3601a", + "to": "mod-93380aca3aab056f0dd2e4e0", + "type": "depends_on" + }, + { + "from": "sym-9410a1ad8409298493e17d5f", + "to": "sym-e7d959bae3d0df1109f3601a", + "type": "depends_on" + }, + { + "from": "sym-2d6c4188b92343e2456b5d18", + "to": "sym-e7d959bae3d0df1109f3601a", + "type": "depends_on" + }, + { + "from": "sym-a90e5e15eae22fe4adc31f37", + "to": "sym-e7d959bae3d0df1109f3601a", + "type": "depends_on" + }, + { + "from": "sym-f3a8a6f36f83d6d9e247d7f2", + "to": "sym-e7d959bae3d0df1109f3601a", + "type": "depends_on" + }, + { + "from": "sym-04c2ceef4c3f8944beac82f1", + "to": "sym-e7d959bae3d0df1109f3601a", + "type": "depends_on" + }, + { + "from": "sym-38b02a91ae9879e5549dc089", + "to": "sym-e7d959bae3d0df1109f3601a", + "type": "depends_on" + }, + { + "from": "sym-7a01cccc7236812081d5703b", + "to": "mod-93380aca3aab056f0dd2e4e0", + "type": "depends_on" + }, + { + "from": "sym-08c52ead6283b6512a19e7b9", + "to": "mod-93380aca3aab056f0dd2e4e0", + "type": "depends_on" + }, + { + "from": "sym-929c634b12a7aa1ec2481909", + "to": "mod-93380aca3aab056f0dd2e4e0", + "type": "depends_on" + }, + { + "from": "sym-37bb8c7ba0ff239db9cba19f", + "to": "mod-93380aca3aab056f0dd2e4e0", + "type": "depends_on" + }, + { + "from": "mod-a8a39a4fb87704dbcb720225", + "to": "mod-8aef488fb2fc78414791967a", + "type": "depends_on" + }, + { + "from": "mod-a8a39a4fb87704dbcb720225", + "to": "mod-77aac2da6c6f0fbc37663544", + "type": "depends_on" + }, + { + "from": "mod-a8a39a4fb87704dbcb720225", + "to": "mod-1f38e75fd9b9f51f96a2d975", + "type": "depends_on" + }, + { + "from": "mod-a8a39a4fb87704dbcb720225", + "to": "mod-91454010a0aa78f3ef28bd69", + "type": "depends_on" + }, + { + "from": "mod-a8a39a4fb87704dbcb720225", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-a8a39a4fb87704dbcb720225", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-a8a39a4fb87704dbcb720225", + "to": "mod-1de8a1fb6a48c6a931549f30", + "type": "depends_on" + }, + { + "from": "mod-a8a39a4fb87704dbcb720225", + "to": "mod-eb0798295c928ba399632ae3", + "type": "depends_on" + }, + { + "from": "mod-a8a39a4fb87704dbcb720225", + "to": "mod-12d77c813504670328c9b4f1", + "type": "depends_on" + }, + { + "from": "mod-a8a39a4fb87704dbcb720225", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "sym-f1d990a68c25fa7a7816bc3f", + "to": "mod-a8a39a4fb87704dbcb720225", + "type": "depends_on" + }, + { + "from": "sym-4b139176b9d6042ba0754489", + "to": "sym-f1d990a68c25fa7a7816bc3f", + "type": "depends_on" + }, + { + "from": "sym-7c3e7a7f3f7f86ea2a9dbd52", + "to": "sym-f1d990a68c25fa7a7816bc3f", + "type": "depends_on" + }, + { + "from": "sym-5c7189605b0469a06fc45888", + "to": "sym-f1d990a68c25fa7a7816bc3f", + "type": "depends_on" + }, + { + "from": "sym-57f1e8814b776abf7cfcb369", + "to": "sym-f1d990a68c25fa7a7816bc3f", + "type": "depends_on" + }, + { + "from": "sym-328f9da16ee12c0b54814b90", + "to": "sym-f1d990a68c25fa7a7816bc3f", + "type": "depends_on" + }, + { + "from": "sym-2b3c856a5d7167c51953c23a", + "to": "sym-f1d990a68c25fa7a7816bc3f", + "type": "depends_on" + }, + { + "from": "sym-810d19a7dd2eb70806b98d41", + "to": "sym-f1d990a68c25fa7a7816bc3f", + "type": "depends_on" + }, + { + "from": "sym-c2ac65367e7703953b94bddc", + "to": "sym-f1d990a68c25fa7a7816bc3f", + "type": "depends_on" + }, + { + "from": "sym-4324855c7c8b5a00929d7aca", + "to": "sym-f1d990a68c25fa7a7816bc3f", + "type": "depends_on" + }, + { + "from": "sym-6fbeed409b0c14bea654142d", + "to": "sym-f1d990a68c25fa7a7816bc3f", + "type": "depends_on" + }, + { + "from": "sym-3ef5edcc5ab93bfdbb6ea4ce", + "to": "sym-f1d990a68c25fa7a7816bc3f", + "type": "depends_on" + }, + { + "from": "sym-cdfca17855f38ef00b83818e", + "to": "sym-f1d990a68c25fa7a7816bc3f", + "type": "depends_on" + }, + { + "from": "sym-f1d990a68c25fa7a7816bc3f", + "to": "sym-6680f554fcb4ede4631e60b2", + "type": "calls" + }, + { + "from": "sym-f1d990a68c25fa7a7816bc3f", + "to": "sym-45a76b1716a67708f11a0909", + "type": "calls" + }, + { + "from": "sym-f1d990a68c25fa7a7816bc3f", + "to": "sym-304eaa4f7c51cf3fdbf89bb0", + "type": "calls" + }, + { + "from": "mod-455d4fbaf89d273aa029864d", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "mod-455d4fbaf89d273aa029864d", + "to": "mod-8aef488fb2fc78414791967a", + "type": "depends_on" + }, + { + "from": "mod-455d4fbaf89d273aa029864d", + "to": "mod-9389bad564e097d75994d5f8", + "type": "depends_on" + }, + { + "from": "mod-455d4fbaf89d273aa029864d", + "to": "mod-20f30418ca95fd46594075af", + "type": "depends_on" + }, + { + "from": "mod-455d4fbaf89d273aa029864d", + "to": "mod-3a3b7b050c56c146875c18fb", + "type": "depends_on" + }, + { + "from": "mod-455d4fbaf89d273aa029864d", + "to": "mod-84552d58b6743daab10f83b3", + "type": "depends_on" + }, + { + "from": "mod-455d4fbaf89d273aa029864d", + "to": "mod-efae4e57fd7a4c96e3e2b085", + "type": "depends_on" + }, + { + "from": "mod-455d4fbaf89d273aa029864d", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-455d4fbaf89d273aa029864d", + "to": "mod-074e7c12d54384c86eabf721", + "type": "depends_on" + }, + { + "from": "mod-455d4fbaf89d273aa029864d", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-455d4fbaf89d273aa029864d", + "to": "mod-8178eae36aec57f1b202e180", + "type": "depends_on" + }, + { + "from": "mod-455d4fbaf89d273aa029864d", + "to": "mod-77aac2da6c6f0fbc37663544", + "type": "depends_on" + }, + { + "from": "mod-455d4fbaf89d273aa029864d", + "to": "mod-1f38e75fd9b9f51f96a2d975", + "type": "depends_on" + }, + { + "from": "mod-455d4fbaf89d273aa029864d", + "to": "mod-91454010a0aa78f3ef28bd69", + "type": "depends_on" + }, + { + "from": "mod-455d4fbaf89d273aa029864d", + "to": "mod-dc9656310d022085b2936dcc", + "type": "depends_on" + }, + { + "from": "mod-455d4fbaf89d273aa029864d", + "to": "mod-6ecc959af33bffdcf9b125ac", + "type": "depends_on" + }, + { + "from": "mod-455d4fbaf89d273aa029864d", + "to": "mod-e395bfa94e646748f1e3298e", + "type": "depends_on" + }, + { + "from": "mod-455d4fbaf89d273aa029864d", + "to": "mod-55764c2c659740ce445946f7", + "type": "depends_on" + }, + { + "from": "mod-455d4fbaf89d273aa029864d", + "to": "mod-ec09ae3ca7a100b5fa55556d", + "type": "depends_on" + }, + { + "from": "mod-455d4fbaf89d273aa029864d", + "to": "mod-80ff82c43058ee3abb67247d", + "type": "depends_on" + }, + { + "from": "mod-455d4fbaf89d273aa029864d", + "to": "mod-bc30cadc96b2e14f87980a9c", + "type": "depends_on" + }, + { + "from": "mod-455d4fbaf89d273aa029864d", + "to": "mod-1159d5b65cc6179495dba86e", + "type": "depends_on" + }, + { + "from": "mod-455d4fbaf89d273aa029864d", + "to": "mod-a8a39a4fb87704dbcb720225", + "type": "depends_on" + }, + { + "from": "sym-7fe7aed70ba7c171a10dce16", + "to": "mod-455d4fbaf89d273aa029864d", + "type": "depends_on" + }, + { + "from": "sym-1040e8086b2451ce433c4283", + "to": "sym-7fe7aed70ba7c171a10dce16", + "type": "depends_on" + }, + { + "from": "sym-935db248e7fb60e78c118a28", + "to": "sym-7fe7aed70ba7c171a10dce16", + "type": "depends_on" + }, + { + "from": "sym-1716ce2cda401faf8f60ca09", + "to": "sym-7fe7aed70ba7c171a10dce16", + "type": "depends_on" + }, + { + "from": "sym-d654ce4f484f119070a59599", + "to": "sym-7fe7aed70ba7c171a10dce16", + "type": "depends_on" + }, + { + "from": "sym-29ad19f6194b9d5dc5b3d151", + "to": "sym-7fe7aed70ba7c171a10dce16", + "type": "depends_on" + }, + { + "from": "sym-b3e914af9f4c1670dfd90569", + "to": "sym-7fe7aed70ba7c171a10dce16", + "type": "depends_on" + }, + { + "from": "sym-885fad8121718032d1888dc8", + "to": "sym-7fe7aed70ba7c171a10dce16", + "type": "depends_on" + }, + { + "from": "sym-598cda53c818b18f719f656d", + "to": "sym-7fe7aed70ba7c171a10dce16", + "type": "depends_on" + }, + { + "from": "sym-9dbdd68a5833762c291f7b28", + "to": "sym-7fe7aed70ba7c171a10dce16", + "type": "depends_on" + }, + { + "from": "sym-0fa95cdb5dcb0b9e6f103b95", + "to": "sym-7fe7aed70ba7c171a10dce16", + "type": "depends_on" + }, + { + "from": "sym-51083b6c8157d81641a32e99", + "to": "sym-7fe7aed70ba7c171a10dce16", + "type": "depends_on" + }, + { + "from": "sym-b1daa6c5d31676598fdc9c3c", + "to": "sym-7fe7aed70ba7c171a10dce16", + "type": "depends_on" + }, + { + "from": "sym-2a10d01fea3eaadd6e2bc6d7", + "to": "sym-7fe7aed70ba7c171a10dce16", + "type": "depends_on" + }, + { + "from": "sym-d0b0e6f4f8117ae02923de11", + "to": "sym-7fe7aed70ba7c171a10dce16", + "type": "depends_on" + }, + { + "from": "sym-3e7ea7f35aa9b839723b2c1c", + "to": "sym-7fe7aed70ba7c171a10dce16", + "type": "depends_on" + }, + { + "from": "sym-7fe7aed70ba7c171a10dce16", + "to": "sym-a1714406759fda051e877a2e", + "type": "calls" + }, + { + "from": "sym-7fe7aed70ba7c171a10dce16", + "to": "sym-45a76b1716a67708f11a0909", + "type": "calls" + }, + { + "from": "mod-4e2125f21e95a0201a05fc85", + "to": "mod-8178eae36aec57f1b202e180", + "type": "depends_on" + }, + { + "from": "sym-cf9b266780ee9759d2183fdb", + "to": "mod-4e2125f21e95a0201a05fc85", + "type": "depends_on" + }, + { + "from": "sym-fc2927a008b8b003e851d59c", + "to": "mod-4e2125f21e95a0201a05fc85", + "type": "depends_on" + }, + { + "from": "mod-efd6ff5fba09516480c9e2e4", + "to": "mod-3a3b7b050c56c146875c18fb", + "type": "depends_on" + }, + { + "from": "mod-efd6ff5fba09516480c9e2e4", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-3cf8c47572a9e0e64d4a2a13", + "to": "mod-efd6ff5fba09516480c9e2e4", + "type": "depends_on" + }, + { + "from": "sym-c2223eb98e7971a5a84a534e", + "to": "sym-3cf8c47572a9e0e64d4a2a13", + "type": "depends_on" + }, + { + "from": "sym-813e158b993d299057988303", + "to": "mod-efd6ff5fba09516480c9e2e4", + "type": "depends_on" + }, + { + "from": "mod-2b2cb5f2f246c796e349f6aa", + "to": "mod-0bdba6781d714c651de05352", + "type": "depends_on" + }, + { + "from": "mod-2b2cb5f2f246c796e349f6aa", + "to": "mod-8178eae36aec57f1b202e180", + "type": "depends_on" + }, + { + "from": "sym-8df316cdf3ef951ce8023630", + "to": "mod-2b2cb5f2f246c796e349f6aa", + "type": "depends_on" + }, + { + "from": "mod-2e55150ffa8226bdba0597cc", + "to": "mod-91454010a0aa78f3ef28bd69", + "type": "depends_on" + }, + { + "from": "mod-2e55150ffa8226bdba0597cc", + "to": "mod-8178eae36aec57f1b202e180", + "type": "depends_on" + }, + { + "from": "mod-2e55150ffa8226bdba0597cc", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-2e55150ffa8226bdba0597cc", + "to": "mod-1f38e75fd9b9f51f96a2d975", + "type": "depends_on" + }, + { + "from": "mod-2e55150ffa8226bdba0597cc", + "to": "mod-43e420b038a56638079168bc", + "type": "depends_on" + }, + { + "from": "mod-2e55150ffa8226bdba0597cc", + "to": "mod-5a3b55b43394de7f8c762546", + "type": "depends_on" + }, + { + "from": "mod-2e55150ffa8226bdba0597cc", + "to": "mod-a365b7714dec16f0bf79621e", + "type": "depends_on" + }, + { + "from": "mod-2e55150ffa8226bdba0597cc", + "to": "mod-0fabbf7facc4e7b4b62c59ae", + "type": "depends_on" + }, + { + "from": "mod-2e55150ffa8226bdba0597cc", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-2e55150ffa8226bdba0597cc", + "to": "mod-3a3b7b050c56c146875c18fb", + "type": "depends_on" + }, + { + "from": "mod-2e55150ffa8226bdba0597cc", + "to": "mod-fcbaaa2e6fedeb87a2dc2d8e", + "type": "depends_on" + }, + { + "from": "mod-2e55150ffa8226bdba0597cc", + "to": "mod-eb0798295c928ba399632ae3", + "type": "depends_on" + }, + { + "from": "mod-2e55150ffa8226bdba0597cc", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "sym-45104794847951b00f5a9bbe", + "to": "mod-2e55150ffa8226bdba0597cc", + "type": "depends_on" + }, + { + "from": "sym-187664cf6efeb1c5567ce3c8", + "to": "sym-45104794847951b00f5a9bbe", + "type": "depends_on" + }, + { + "from": "sym-0d658d44d5b23dfd5829fc4f", + "to": "mod-2e55150ffa8226bdba0597cc", + "type": "depends_on" + }, + { + "from": "sym-0d658d44d5b23dfd5829fc4f", + "to": "sym-98c4295951482a3e982049bb", + "type": "calls" + }, + { + "from": "sym-0d658d44d5b23dfd5829fc4f", + "to": "sym-9ff2092936295dca05e0edb7", + "type": "calls" + }, + { + "from": "sym-0d658d44d5b23dfd5829fc4f", + "to": "sym-ab85b50fe1b89f2116b32b8e", + "type": "calls" + }, + { + "from": "sym-0d658d44d5b23dfd5829fc4f", + "to": "sym-6680f554fcb4ede4631e60b2", + "type": "calls" + }, + { + "from": "sym-0d658d44d5b23dfd5829fc4f", + "to": "sym-304eaa4f7c51cf3fdbf89bb0", + "type": "calls" + }, + { + "from": "sym-0d658d44d5b23dfd5829fc4f", + "to": "sym-4a436dd527be338afbf98bdb", + "type": "calls" + }, + { + "from": "mod-f1c149177b4fb9bc2b7ee080", + "to": "mod-8178eae36aec57f1b202e180", + "type": "depends_on" + }, + { + "from": "mod-f1c149177b4fb9bc2b7ee080", + "to": "mod-455d4fbaf89d273aa029864d", + "type": "depends_on" + }, + { + "from": "mod-f1c149177b4fb9bc2b7ee080", + "to": "mod-a152cd44db7715c440d48dda", + "type": "depends_on" + }, + { + "from": "mod-f1c149177b4fb9bc2b7ee080", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-235384a3d4f36552d55ac7ef", + "to": "mod-f1c149177b4fb9bc2b7ee080", + "type": "depends_on" + }, + { + "from": "mod-60e11fd9921263398a239451", + "to": "mod-525c86f0484f1a8328f90e21", + "type": "depends_on" + }, + { + "from": "mod-60e11fd9921263398a239451", + "to": "mod-8178eae36aec57f1b202e180", + "type": "depends_on" + }, + { + "from": "mod-60e11fd9921263398a239451", + "to": "mod-c5d542bba68467e14e67638a", + "type": "depends_on" + }, + { + "from": "mod-60e11fd9921263398a239451", + "to": "mod-1d4743119cc890fadab85fb7", + "type": "depends_on" + }, + { + "from": "mod-60e11fd9921263398a239451", + "to": "mod-08315e6901cb53376d13cc70", + "type": "depends_on" + }, + { + "from": "mod-60e11fd9921263398a239451", + "to": "mod-91c215ca923f83144b68d625", + "type": "depends_on" + }, + { + "from": "mod-60e11fd9921263398a239451", + "to": "mod-92957ee0de7980fc9c719d03", + "type": "depends_on" + }, + { + "from": "mod-60e11fd9921263398a239451", + "to": "mod-892576d596aa8b40bed3d2f9", + "type": "depends_on" + }, + { + "from": "sym-bfa8af7e83408600dde29446", + "to": "mod-60e11fd9921263398a239451", + "type": "depends_on" + }, + { + "from": "sym-bfa8af7e83408600dde29446", + "to": "sym-fcae6dca65ab92ce6e8c43b0", + "type": "calls" + }, + { + "from": "mod-5dd7573d658ce3d7ea74353a", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-5dd7573d658ce3d7ea74353a", + "to": "mod-21be8fb976449bbe3589ce47", + "type": "depends_on" + }, + { + "from": "mod-5dd7573d658ce3d7ea74353a", + "to": "mod-eb0798295c928ba399632ae3", + "type": "depends_on" + }, + { + "from": "mod-5dd7573d658ce3d7ea74353a", + "to": "mod-8178eae36aec57f1b202e180", + "type": "depends_on" + }, + { + "from": "mod-5dd7573d658ce3d7ea74353a", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "sym-68a8ebbbf4a944b94d5fce23", + "to": "mod-5dd7573d658ce3d7ea74353a", + "type": "depends_on" + }, + { + "from": "sym-8d8d40dad8d622f8cc5bbd11", + "to": "sym-68a8ebbbf4a944b94d5fce23", + "type": "depends_on" + }, + { + "from": "sym-1d7e1deea80d0d5c35cc1961", + "to": "mod-5dd7573d658ce3d7ea74353a", + "type": "depends_on" + }, + { + "from": "mod-025199ea4543cbbe2ddf79a8", + "to": "mod-8178eae36aec57f1b202e180", + "type": "depends_on" + }, + { + "from": "mod-025199ea4543cbbe2ddf79a8", + "to": "mod-fab341be779110d20904d642", + "type": "depends_on" + }, + { + "from": "mod-025199ea4543cbbe2ddf79a8", + "to": "mod-be77f5db5117aff014090a24", + "type": "depends_on" + }, + { + "from": "sym-54c2cfe0e786dfb0aa4c1a30", + "to": "mod-025199ea4543cbbe2ddf79a8", + "type": "depends_on" + }, + { + "from": "sym-ea53351a3682c209afbecd62", + "to": "mod-025199ea4543cbbe2ddf79a8", + "type": "depends_on" + }, + { + "from": "mod-e09bbf55f33f0d36061b2348", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "sym-ac7d7af06ace8e5f7480d85e", + "to": "mod-e09bbf55f33f0d36061b2348", + "type": "depends_on" + }, + { + "from": "mod-3f71e0e4e5c692c7690b3c86", + "to": "mod-8178eae36aec57f1b202e180", + "type": "depends_on" + }, + { + "from": "mod-3f71e0e4e5c692c7690b3c86", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "mod-3f71e0e4e5c692c7690b3c86", + "to": "mod-2d8e2ee0779d753dbf529ccf", + "type": "depends_on" + }, + { + "from": "mod-3f71e0e4e5c692c7690b3c86", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-3f71e0e4e5c692c7690b3c86", + "to": "mod-82b6a522914548c8fd24479a", + "type": "depends_on" + }, + { + "from": "mod-3f71e0e4e5c692c7690b3c86", + "to": "mod-303258444053b0a43538b62b", + "type": "depends_on" + }, + { + "from": "mod-3f71e0e4e5c692c7690b3c86", + "to": "mod-ea8a0a466499b8a4e9d2b2fd", + "type": "depends_on" + }, + { + "from": "mod-3f71e0e4e5c692c7690b3c86", + "to": "mod-4608ef549e373e94702c2215", + "type": "depends_on" + }, + { + "from": "mod-3f71e0e4e5c692c7690b3c86", + "to": "mod-eeb3f53b29866be8d2cb970f", + "type": "depends_on" + }, + { + "from": "mod-3f71e0e4e5c692c7690b3c86", + "to": "mod-5d68d5d1029351abd62fa157", + "type": "depends_on" + }, + { + "from": "mod-3f71e0e4e5c692c7690b3c86", + "to": "mod-587a0dac663054ccdc90b2bc", + "type": "depends_on" + }, + { + "from": "mod-3f71e0e4e5c692c7690b3c86", + "to": "mod-6e27fb3b8c84e1baeea2a944", + "type": "depends_on" + }, + { + "from": "mod-3f71e0e4e5c692c7690b3c86", + "to": "mod-1a126c017b2b7dd41d6846f0", + "type": "depends_on" + }, + { + "from": "mod-3f71e0e4e5c692c7690b3c86", + "to": "mod-a25839dd6ba039a8c958583f", + "type": "depends_on" + }, + { + "from": "mod-3f71e0e4e5c692c7690b3c86", + "to": "mod-00cbdca09e56b6109b846e9b", + "type": "depends_on" + }, + { + "from": "mod-3f71e0e4e5c692c7690b3c86", + "to": "mod-84552d58b6743daab10f83b3", + "type": "depends_on" + }, + { + "from": "mod-3f71e0e4e5c692c7690b3c86", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-3f71e0e4e5c692c7690b3c86", + "to": "mod-e395bfa94e646748f1e3298e", + "type": "depends_on" + }, + { + "from": "mod-3f71e0e4e5c692c7690b3c86", + "to": "mod-e3c2dc56fd38d656d5235000", + "type": "depends_on" + }, + { + "from": "mod-3f71e0e4e5c692c7690b3c86", + "to": "mod-77aac2da6c6f0fbc37663544", + "type": "depends_on" + }, + { + "from": "mod-3f71e0e4e5c692c7690b3c86", + "to": "mod-c8450797917dfb54fe43ca86", + "type": "depends_on" + }, + { + "from": "mod-3f71e0e4e5c692c7690b3c86", + "to": "mod-1de8a1fb6a48c6a931549f30", + "type": "depends_on" + }, + { + "from": "mod-3f71e0e4e5c692c7690b3c86", + "to": "mod-a1bb18b05142b623b9fb8be4", + "type": "depends_on" + }, + { + "from": "mod-3f71e0e4e5c692c7690b3c86", + "to": "mod-8aef488fb2fc78414791967a", + "type": "depends_on" + }, + { + "from": "mod-3f71e0e4e5c692c7690b3c86", + "to": "mod-1d4743119cc890fadab85fb7", + "type": "depends_on" + }, + { + "from": "mod-3f71e0e4e5c692c7690b3c86", + "to": "mod-7656cd8b9f3c2f0776a9aaa8", + "type": "depends_on" + }, + { + "from": "mod-3f71e0e4e5c692c7690b3c86", + "to": "mod-be7b10b7e34156b0bae273f7", + "type": "depends_on" + }, + { + "from": "mod-3f71e0e4e5c692c7690b3c86", + "to": "mod-a8a39a4fb87704dbcb720225", + "type": "depends_on" + }, + { + "from": "sym-3157118d1e9c323aab1ad5d4", + "to": "mod-3f71e0e4e5c692c7690b3c86", + "type": "depends_on" + }, + { + "from": "sym-278000824c34267ba77ed2e4", + "to": "sym-3157118d1e9c323aab1ad5d4", + "type": "depends_on" + }, + { + "from": "sym-5639767a6380b54d939d3083", + "to": "mod-3f71e0e4e5c692c7690b3c86", + "type": "depends_on" + }, + { + "from": "sym-5639767a6380b54d939d3083", + "to": "sym-fcae6dca65ab92ce6e8c43b0", + "type": "calls" + }, + { + "from": "sym-5639767a6380b54d939d3083", + "to": "sym-0115c78857a4e5f525339e2d", + "type": "calls" + }, + { + "from": "sym-5639767a6380b54d939d3083", + "to": "sym-5d2517b043286dce6d6847d7", + "type": "calls" + }, + { + "from": "sym-5639767a6380b54d939d3083", + "to": "sym-5057526194c060d19120572f", + "type": "calls" + }, + { + "from": "sym-5639767a6380b54d939d3083", + "to": "sym-cc16259785e538472afb2878", + "type": "calls" + }, + { + "from": "sym-5639767a6380b54d939d3083", + "to": "sym-b4ef38925e03b3181e41e353", + "type": "calls" + }, + { + "from": "sym-5639767a6380b54d939d3083", + "to": "sym-814eb4802fa432ff5ff8bc82", + "type": "calls" + }, + { + "from": "sym-5639767a6380b54d939d3083", + "to": "sym-7a7c3a1eb526becc41e434a1", + "type": "calls" + }, + { + "from": "mod-22a231e7e2a8fa48e00405d7", + "to": "mod-3a3b7b050c56c146875c18fb", + "type": "depends_on" + }, + { + "from": "mod-22a231e7e2a8fa48e00405d7", + "to": "mod-84552d58b6743daab10f83b3", + "type": "depends_on" + }, + { + "from": "mod-22a231e7e2a8fa48e00405d7", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "sym-340c7ae28f4661acc40c644e", + "to": "mod-22a231e7e2a8fa48e00405d7", + "type": "depends_on" + }, + { + "from": "sym-effd5e53e1c955d375aee994", + "to": "sym-340c7ae28f4661acc40c644e", + "type": "depends_on" + }, + { + "from": "sym-5b7e48554055803b885c211a", + "to": "mod-22a231e7e2a8fa48e00405d7", + "type": "depends_on" + }, + { + "from": "sym-1949526bac7e354d12c4d919", + "to": "sym-5b7e48554055803b885c211a", + "type": "depends_on" + }, + { + "from": "sym-e6dc4654d0467d8dcb6d5230", + "to": "sym-5b7e48554055803b885c211a", + "type": "depends_on" + }, + { + "from": "sym-72b8022bd1a30f87bde3c08e", + "to": "sym-5b7e48554055803b885c211a", + "type": "depends_on" + }, + { + "from": "sym-f8403c44d50f0ee7817f9858", + "to": "sym-5b7e48554055803b885c211a", + "type": "depends_on" + }, + { + "from": "sym-2970b8afa8e36b134fa79b40", + "to": "sym-5b7e48554055803b885c211a", + "type": "depends_on" + }, + { + "from": "sym-364dcbfe78e7ff74ebd1b118", + "to": "sym-5b7e48554055803b885c211a", + "type": "depends_on" + }, + { + "from": "mod-f215e43fe388f34d276e0935", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-f5a0b179a238fe0393fde5cf", + "to": "mod-f215e43fe388f34d276e0935", + "type": "depends_on" + }, + { + "from": "mod-5f1b8ed2b401d728855c038c", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-5f1b8ed2b401d728855c038c", + "to": "mod-93380aca3aab056f0dd2e4e0", + "type": "depends_on" + }, + { + "from": "mod-5f1b8ed2b401d728855c038c", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-5f1b8ed2b401d728855c038c", + "to": "mod-38cb481227a16780e055daf9", + "type": "depends_on" + }, + { + "from": "mod-5f1b8ed2b401d728855c038c", + "to": "mod-8eb2e47a2e706233783e8ea4", + "type": "depends_on" + }, + { + "from": "sym-a30c004044ed694e7dd2baa2", + "to": "mod-5f1b8ed2b401d728855c038c", + "type": "depends_on" + }, + { + "from": "sym-23ad4039ecded53df33512a5", + "to": "sym-a30c004044ed694e7dd2baa2", + "type": "depends_on" + }, + { + "from": "sym-0a51a789ef7d435fac22776a", + "to": "sym-a30c004044ed694e7dd2baa2", + "type": "depends_on" + }, + { + "from": "sym-b38886cc276ae1b280c9e69b", + "to": "sym-a30c004044ed694e7dd2baa2", + "type": "depends_on" + }, + { + "from": "sym-c1ea911292523868bd72a57e", + "to": "sym-a30c004044ed694e7dd2baa2", + "type": "depends_on" + }, + { + "from": "sym-e49e87255ece0a5317b1d1db", + "to": "sym-a30c004044ed694e7dd2baa2", + "type": "depends_on" + }, + { + "from": "sym-b824be730682f6d1b926c57e", + "to": "sym-a30c004044ed694e7dd2baa2", + "type": "depends_on" + }, + { + "from": "sym-043ab78b6f507bf4ae48ea53", + "to": "sym-a30c004044ed694e7dd2baa2", + "type": "depends_on" + }, + { + "from": "sym-a30c004044ed694e7dd2baa2", + "to": "sym-b3b5244d7b171c0138f12fd5", + "type": "calls" + }, + { + "from": "sym-91661b3c5c62bff622a981db", + "to": "mod-7b8929603b5d94f3dafe9dea", + "type": "depends_on" + }, + { + "from": "sym-5c346fb8b4864942959afa56", + "to": "mod-7b8929603b5d94f3dafe9dea", + "type": "depends_on" + }, + { + "from": "sym-c03360033ff46d621cf2ae17", + "to": "mod-6a73c250ca0d545930026d4a", + "type": "depends_on" + }, + { + "from": "mod-c996d6d5043c881bd6ad5b03", + "to": "mod-457939e5e7481c4a6a17e7a3", + "type": "depends_on" + }, + { + "from": "sym-62051722bb59e097df10746e", + "to": "mod-c996d6d5043c881bd6ad5b03", + "type": "depends_on" + }, + { + "from": "sym-62051722bb59e097df10746e", + "to": "sym-d0b2b2174c96ce5833cd9592", + "type": "calls" + }, + { + "from": "sym-f732c52bdfb53b3c7c57e6c1", + "to": "mod-2d8e2ee0779d753dbf529ccf", + "type": "depends_on" + }, + { + "from": "mod-d438c33c3d72df9bd7dd472a", + "to": "mod-c996d6d5043c881bd6ad5b03", + "type": "depends_on" + }, + { + "from": "sym-b5118eb6e684507b140dc13e", + "to": "mod-d438c33c3d72df9bd7dd472a", + "type": "depends_on" + }, + { + "from": "sym-c3a520c376d94fdc7518bf55", + "to": "sym-b5118eb6e684507b140dc13e", + "type": "depends_on" + }, + { + "from": "sym-60b2be41818640ffc764cb35", + "to": "mod-d438c33c3d72df9bd7dd472a", + "type": "depends_on" + }, + { + "from": "sym-60b2be41818640ffc764cb35", + "to": "sym-62051722bb59e097df10746e", + "type": "calls" + }, + { + "from": "sym-3c18c93e1cb855e2917ca012", + "to": "mod-d438c33c3d72df9bd7dd472a", + "type": "depends_on" + }, + { + "from": "sym-0714329610278a49d4d896b8", + "to": "mod-d438c33c3d72df9bd7dd472a", + "type": "depends_on" + }, + { + "from": "sym-4de139d75083bce9f07d0bf5", + "to": "mod-d438c33c3d72df9bd7dd472a", + "type": "depends_on" + }, + { + "from": "sym-5c77c8e8605a322c4a8105e9", + "to": "mod-f235c77fff58b93b0ef4a745", + "type": "depends_on" + }, + { + "from": "mod-6e27fb3b8c84e1baeea2a944", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "mod-6e27fb3b8c84e1baeea2a944", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-00a687dd7a4ac80ec046b1d9", + "to": "mod-6e27fb3b8c84e1baeea2a944", + "type": "depends_on" + }, + { + "from": "mod-587a0dac663054ccdc90b2bc", + "to": "mod-c20c965c5562cff684a7448f", + "type": "depends_on" + }, + { + "from": "mod-587a0dac663054ccdc90b2bc", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "mod-587a0dac663054ccdc90b2bc", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-911a2d4197fac2defef73b40", + "to": "mod-587a0dac663054ccdc90b2bc", + "type": "depends_on" + }, + { + "from": "mod-5d68d5d1029351abd62fa157", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "mod-5d68d5d1029351abd62fa157", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-f4c921bd7789b2105a73e6fa", + "to": "mod-5d68d5d1029351abd62fa157", + "type": "depends_on" + }, + { + "from": "mod-eeb3f53b29866be8d2cb970f", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "mod-eeb3f53b29866be8d2cb970f", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-e1ba932ee6b752b90eafb76c", + "to": "mod-eeb3f53b29866be8d2cb970f", + "type": "depends_on" + }, + { + "from": "mod-1a126c017b2b7dd41d6846f0", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "mod-1a126c017b2b7dd41d6846f0", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-1965f9efde68a4394122285f", + "to": "mod-1a126c017b2b7dd41d6846f0", + "type": "depends_on" + }, + { + "from": "mod-82b6a522914548c8fd24479a", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "sym-4830c08718fcd7f4335a117d", + "to": "mod-82b6a522914548c8fd24479a", + "type": "depends_on" + }, + { + "from": "mod-303258444053b0a43538b62b", + "to": "mod-074e7c12d54384c86eabf721", + "type": "depends_on" + }, + { + "from": "mod-303258444053b0a43538b62b", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-303258444053b0a43538b62b", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-97320893d204cc7d476e3fde", + "to": "mod-303258444053b0a43538b62b", + "type": "depends_on" + }, + { + "from": "mod-4608ef549e373e94702c2215", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "mod-4608ef549e373e94702c2215", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-c4344bea317284338ea29949", + "to": "mod-4608ef549e373e94702c2215", + "type": "depends_on" + }, + { + "from": "mod-ea8a0a466499b8a4e9d2b2fd", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "mod-ea8a0a466499b8a4e9d2b2fd", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-d2e86475bdb3136bd4dbbdef", + "to": "mod-ea8a0a466499b8a4e9d2b2fd", + "type": "depends_on" + }, + { + "from": "mod-a25839dd6ba039a8c958583f", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "mod-a25839dd6ba039a8c958583f", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-6595be3b08ea5be4fbcb7009", + "to": "mod-a25839dd6ba039a8c958583f", + "type": "depends_on" + }, + { + "from": "mod-00cbdca09e56b6109b846e9b", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-00cbdca09e56b6109b846e9b", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "sym-364a66b2b44b55df33318f93", + "to": "mod-00cbdca09e56b6109b846e9b", + "type": "depends_on" + }, + { + "from": "sym-444d637aead560497f9078f4", + "to": "mod-fab341be779110d20904d642", + "type": "depends_on" + }, + { + "from": "mod-be77f5db5117aff014090a24", + "to": "mod-3a3b7b050c56c146875c18fb", + "type": "depends_on" + }, + { + "from": "mod-be77f5db5117aff014090a24", + "to": "mod-fab341be779110d20904d642", + "type": "depends_on" + }, + { + "from": "sym-16320e5dfefd4484bf04a2b1", + "to": "mod-be77f5db5117aff014090a24", + "type": "depends_on" + }, + { + "from": "sym-7f62f790c5ca3020d63c5547", + "to": "sym-16320e5dfefd4484bf04a2b1", + "type": "depends_on" + }, + { + "from": "sym-3d14e568424b742a642a1957", + "to": "mod-be77f5db5117aff014090a24", + "type": "depends_on" + }, + { + "from": "sym-a0665fbdedc04f490c5c1ee5", + "to": "sym-3d14e568424b742a642a1957", + "type": "depends_on" + }, + { + "from": "sym-ff34e80e38862f26f8542d67", + "to": "sym-3d14e568424b742a642a1957", + "type": "depends_on" + }, + { + "from": "sym-6efc9acf51b6852ebb17b0a3", + "to": "sym-3d14e568424b742a642a1957", + "type": "depends_on" + }, + { + "from": "sym-898018ea10de7c9592a89604", + "to": "sym-3d14e568424b742a642a1957", + "type": "depends_on" + }, + { + "from": "sym-1be242ae8eea8ce44d3ac248", + "to": "sym-3d14e568424b742a642a1957", + "type": "depends_on" + }, + { + "from": "sym-cf46caf250429c89dc5b39e9", + "to": "sym-3d14e568424b742a642a1957", + "type": "depends_on" + }, + { + "from": "sym-3d14e568424b742a642a1957", + "to": "sym-444d637aead560497f9078f4", + "type": "calls" + }, + { + "from": "mod-5269202219af5585cb61f564", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-5269202219af5585cb61f564", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-5269202219af5585cb61f564", + "to": "mod-a5c28a9abc4da2bd27d3cbb4", + "type": "depends_on" + }, + { + "from": "mod-5269202219af5585cb61f564", + "to": "mod-c44377cbc773462d72dd13fa", + "type": "depends_on" + }, + { + "from": "mod-5269202219af5585cb61f564", + "to": "mod-3f71e0e4e5c692c7690b3c86", + "type": "depends_on" + }, + { + "from": "sym-b3dbfe3fa6d39217fc5d4f7d", + "to": "mod-5269202219af5585cb61f564", + "type": "depends_on" + }, + { + "from": "sym-4c471c5372546d33ace71bb3", + "to": "mod-5269202219af5585cb61f564", + "type": "depends_on" + }, + { + "from": "sym-9b8195b95964c2a498993290", + "to": "mod-c44377cbc773462d72dd13fa", + "type": "depends_on" + }, + { + "from": "sym-2ad003ec730706f8e7afa93c", + "to": "mod-c44377cbc773462d72dd13fa", + "type": "depends_on" + }, + { + "from": "sym-f06d0734196eba459ef68266", + "to": "mod-c44377cbc773462d72dd13fa", + "type": "depends_on" + }, + { + "from": "sym-0d1dcfcac0642bf15d871302", + "to": "mod-c44377cbc773462d72dd13fa", + "type": "depends_on" + }, + { + "from": "sym-0d1dcfcac0642bf15d871302", + "to": "sym-f06d0734196eba459ef68266", + "type": "calls" + }, + { + "from": "sym-a24cd6be8abd3b0215b2880d", + "to": "mod-c44377cbc773462d72dd13fa", + "type": "depends_on" + }, + { + "from": "sym-afb6526449d86d945cdb2452", + "to": "mod-c44377cbc773462d72dd13fa", + "type": "depends_on" + }, + { + "from": "sym-afb6526449d86d945cdb2452", + "to": "sym-0d1dcfcac0642bf15d871302", + "type": "calls" + }, + { + "from": "sym-7c70e690b7433ebb78afddca", + "to": "mod-c44377cbc773462d72dd13fa", + "type": "depends_on" + }, + { + "from": "sym-0ab6649bd8566881a8ffa026", + "to": "mod-c44377cbc773462d72dd13fa", + "type": "depends_on" + }, + { + "from": "sym-0ab6649bd8566881a8ffa026", + "to": "sym-7c70e690b7433ebb78afddca", + "type": "calls" + }, + { + "from": "sym-cef374c0e9418a45db67507b", + "to": "mod-c44377cbc773462d72dd13fa", + "type": "depends_on" + }, + { + "from": "mod-dc9656310d022085b2936dcc", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-dc9656310d022085b2936dcc", + "to": "mod-8178eae36aec57f1b202e180", + "type": "depends_on" + }, + { + "from": "mod-dc9656310d022085b2936dcc", + "to": "mod-a66773add774e134dc55fb9c", + "type": "depends_on" + }, + { + "from": "mod-dc9656310d022085b2936dcc", + "to": "mod-6ecc959af33bffdcf9b125ac", + "type": "depends_on" + }, + { + "from": "sym-dd2bf0489df3b5728b851e75", + "to": "mod-dc9656310d022085b2936dcc", + "type": "depends_on" + }, + { + "from": "sym-5bdeb8b177e513df30db0c8f", + "to": "sym-dd2bf0489df3b5728b851e75", + "type": "depends_on" + }, + { + "from": "sym-873aa7dadb9fae6f13424d90", + "to": "mod-dc9656310d022085b2936dcc", + "type": "depends_on" + }, + { + "from": "sym-2014db7e46724586aa33968e", + "to": "sym-873aa7dadb9fae6f13424d90", + "type": "depends_on" + }, + { + "from": "sym-3d8045d8ce322957d53c5a4f", + "to": "mod-dc9656310d022085b2936dcc", + "type": "depends_on" + }, + { + "from": "mod-b1d30e1636da57dbf8144fd7", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-b1d30e1636da57dbf8144fd7", + "to": "mod-dc9656310d022085b2936dcc", + "type": "depends_on" + }, + { + "from": "mod-b1d30e1636da57dbf8144fd7", + "to": "mod-6ecc959af33bffdcf9b125ac", + "type": "depends_on" + }, + { + "from": "mod-b1d30e1636da57dbf8144fd7", + "to": "mod-55764c2c659740ce445946f7", + "type": "depends_on" + }, + { + "from": "mod-b1d30e1636da57dbf8144fd7", + "to": "mod-efae4e57fd7a4c96e3e2b085", + "type": "depends_on" + }, + { + "from": "mod-b1d30e1636da57dbf8144fd7", + "to": "mod-3adb0b7ff3ed55bc318f2ce4", + "type": "depends_on" + }, + { + "from": "sym-eb71a8dd3518c88cba790695", + "to": "mod-b1d30e1636da57dbf8144fd7", + "type": "depends_on" + }, + { + "from": "mod-a66773add774e134dc55fb9c", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-a66773add774e134dc55fb9c", + "to": "mod-dc9656310d022085b2936dcc", + "type": "depends_on" + }, + { + "from": "mod-a66773add774e134dc55fb9c", + "to": "mod-b1d30e1636da57dbf8144fd7", + "type": "depends_on" + }, + { + "from": "sym-fb863731199cef86f8981fbe", + "to": "mod-a66773add774e134dc55fb9c", + "type": "depends_on" + }, + { + "from": "sym-fb863731199cef86f8981fbe", + "to": "sym-eb71a8dd3518c88cba790695", + "type": "calls" + }, + { + "from": "mod-bc30cadc96b2e14f87980a9c", + "to": "mod-525c86f0484f1a8328f90e21", + "type": "depends_on" + }, + { + "from": "mod-bc30cadc96b2e14f87980a9c", + "to": "mod-be7b10b7e34156b0bae273f7", + "type": "depends_on" + }, + { + "from": "mod-bc30cadc96b2e14f87980a9c", + "to": "mod-24557f0b00a0d628de80e5eb", + "type": "depends_on" + }, + { + "from": "mod-bc30cadc96b2e14f87980a9c", + "to": "mod-08315e6901cb53376d13cc70", + "type": "depends_on" + }, + { + "from": "sym-af1c37237a37962494d06df0", + "to": "mod-bc30cadc96b2e14f87980a9c", + "type": "depends_on" + }, + { + "from": "sym-af1c37237a37962494d06df0", + "to": "sym-e9ff6a51fed52302f183f9ff", + "type": "calls" + }, + { + "from": "mod-efae4e57fd7a4c96e3e2b085", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "mod-efae4e57fd7a4c96e3e2b085", + "to": "mod-1de8a1fb6a48c6a931549f30", + "type": "depends_on" + }, + { + "from": "mod-efae4e57fd7a4c96e3e2b085", + "to": "mod-8178eae36aec57f1b202e180", + "type": "depends_on" + }, + { + "from": "mod-efae4e57fd7a4c96e3e2b085", + "to": "mod-ec09ae3ca7a100b5fa55556d", + "type": "depends_on" + }, + { + "from": "mod-efae4e57fd7a4c96e3e2b085", + "to": "mod-c8450797917dfb54fe43ca86", + "type": "depends_on" + }, + { + "from": "mod-efae4e57fd7a4c96e3e2b085", + "to": "mod-3be22133d78983422a1da0d9", + "type": "depends_on" + }, + { + "from": "mod-efae4e57fd7a4c96e3e2b085", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-87aeaf45d3ccc3eda2f7754f", + "to": "mod-efae4e57fd7a4c96e3e2b085", + "type": "depends_on" + }, + { + "from": "sym-1047da550cdd7c7818b318f5", + "to": "mod-1159d5b65cc6179495dba86e", + "type": "depends_on" + }, + { + "from": "mod-3adb0b7ff3ed55bc318f2ce4", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-d6c1efb7fd3f747e6336fa5c", + "to": "mod-3adb0b7ff3ed55bc318f2ce4", + "type": "depends_on" + }, + { + "from": "mod-55764c2c659740ce445946f7", + "to": "mod-3dc939e68aaf71174e695f9e", + "type": "depends_on" + }, + { + "from": "mod-55764c2c659740ce445946f7", + "to": "mod-7866a2e46802b656e108eb43", + "type": "depends_on" + }, + { + "from": "mod-55764c2c659740ce445946f7", + "to": "mod-6efee936b845d34104bac46c", + "type": "depends_on" + }, + { + "from": "mod-55764c2c659740ce445946f7", + "to": "mod-0a6b71b6c837c68c08998d7b", + "type": "depends_on" + }, + { + "from": "mod-55764c2c659740ce445946f7", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-7e7c43222ce7463a1dcc2533", + "to": "mod-55764c2c659740ce445946f7", + "type": "depends_on" + }, + { + "from": "sym-7e7c43222ce7463a1dcc2533", + "to": "sym-c0b505bebd5393a5e4195eff", + "type": "calls" + }, + { + "from": "sym-7e7c43222ce7463a1dcc2533", + "to": "sym-df74c42f1d0883c0ac4ea037", + "type": "calls" + }, + { + "from": "sym-804bb364f18a73fb39945cba", + "to": "mod-a152cd44db7715c440d48dda", + "type": "depends_on" + }, + { + "from": "mod-8178eae36aec57f1b202e180", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-8178eae36aec57f1b202e180", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-8178eae36aec57f1b202e180", + "to": "mod-455d4fbaf89d273aa029864d", + "type": "depends_on" + }, + { + "from": "mod-8178eae36aec57f1b202e180", + "to": "mod-efd6ff5fba09516480c9e2e4", + "type": "depends_on" + }, + { + "from": "mod-8178eae36aec57f1b202e180", + "to": "mod-2e55150ffa8226bdba0597cc", + "type": "depends_on" + }, + { + "from": "mod-8178eae36aec57f1b202e180", + "to": "mod-60e11fd9921263398a239451", + "type": "depends_on" + }, + { + "from": "mod-8178eae36aec57f1b202e180", + "to": "mod-f1c149177b4fb9bc2b7ee080", + "type": "depends_on" + }, + { + "from": "mod-8178eae36aec57f1b202e180", + "to": "mod-5dd7573d658ce3d7ea74353a", + "type": "depends_on" + }, + { + "from": "mod-8178eae36aec57f1b202e180", + "to": "mod-025199ea4543cbbe2ddf79a8", + "type": "depends_on" + }, + { + "from": "mod-8178eae36aec57f1b202e180", + "to": "mod-3f71e0e4e5c692c7690b3c86", + "type": "depends_on" + }, + { + "from": "mod-8178eae36aec57f1b202e180", + "to": "mod-55764c2c659740ce445946f7", + "type": "depends_on" + }, + { + "from": "mod-8178eae36aec57f1b202e180", + "to": "mod-80ff82c43058ee3abb67247d", + "type": "depends_on" + }, + { + "from": "mod-8178eae36aec57f1b202e180", + "to": "mod-2b2cb5f2f246c796e349f6aa", + "type": "depends_on" + }, + { + "from": "mod-8178eae36aec57f1b202e180", + "to": "mod-93380aca3aab056f0dd2e4e0", + "type": "depends_on" + }, + { + "from": "mod-8178eae36aec57f1b202e180", + "to": "mod-e09bbf55f33f0d36061b2348", + "type": "depends_on" + }, + { + "from": "mod-8178eae36aec57f1b202e180", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "mod-8178eae36aec57f1b202e180", + "to": "mod-5f1b8ed2b401d728855c038c", + "type": "depends_on" + }, + { + "from": "mod-8178eae36aec57f1b202e180", + "to": "mod-38cb481227a16780e055daf9", + "type": "depends_on" + }, + { + "from": "mod-8178eae36aec57f1b202e180", + "to": "mod-91c215ca923f83144b68d625", + "type": "depends_on" + }, + { + "from": "mod-8178eae36aec57f1b202e180", + "to": "mod-292e8f8c5a666fd4318d4859", + "type": "depends_on" + }, + { + "from": "mod-8178eae36aec57f1b202e180", + "to": "mod-b4ad305201d7e6c9d3b649db", + "type": "depends_on" + }, + { + "from": "mod-8178eae36aec57f1b202e180", + "to": "mod-ad645bf9d23cc4e8c30848fc", + "type": "depends_on" + }, + { + "from": "mod-8178eae36aec57f1b202e180", + "to": "mod-16a76d1c87dfcbecec53d1e0", + "type": "depends_on" + }, + { + "from": "mod-8178eae36aec57f1b202e180", + "to": "mod-08bf03fa93f7e9b593a27d85", + "type": "depends_on" + }, + { + "from": "mod-8178eae36aec57f1b202e180", + "to": "mod-292e8f8c5a666fd4318d4859", + "type": "depends_on" + }, + { + "from": "sym-d6b52ce184f5b4b4464e72a9", + "to": "mod-8178eae36aec57f1b202e180", + "type": "depends_on" + }, + { + "from": "sym-8851eae25a7755afe330f85c", + "to": "mod-8178eae36aec57f1b202e180", + "type": "depends_on" + }, + { + "from": "sym-8851eae25a7755afe330f85c", + "to": "sym-7a01cccc7236812081d5703b", + "type": "calls" + }, + { + "from": "sym-8851eae25a7755afe330f85c", + "to": "sym-08c52ead6283b6512a19e7b9", + "type": "calls" + }, + { + "from": "sym-8851eae25a7755afe330f85c", + "to": "sym-37bb8c7ba0ff239db9cba19f", + "type": "calls" + }, + { + "from": "sym-8851eae25a7755afe330f85c", + "to": "sym-ab44157beed9a9398173d77c", + "type": "calls" + }, + { + "from": "sym-8851eae25a7755afe330f85c", + "to": "sym-f4fdde41deaab86f8d60b115", + "type": "calls" + }, + { + "from": "sym-8851eae25a7755afe330f85c", + "to": "sym-c40d1a0a528d0efe34d893f0", + "type": "calls" + }, + { + "from": "mod-8eb2e47a2e706233783e8ea4", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-eacdd884e39f2f675fcacdd6", + "to": "mod-8eb2e47a2e706233783e8ea4", + "type": "depends_on" + }, + { + "from": "sym-849aec43b27a066eb7146591", + "to": "sym-eacdd884e39f2f675fcacdd6", + "type": "depends_on" + }, + { + "from": "sym-0cff4cfd0a8b9a5024c1680a", + "to": "mod-8eb2e47a2e706233783e8ea4", + "type": "depends_on" + }, + { + "from": "sym-3e2cd2e59eb550fbfb626bcc", + "to": "mod-8eb2e47a2e706233783e8ea4", + "type": "depends_on" + }, + { + "from": "mod-0f688ec55978b6cd5ecd4803", + "to": "mod-f2ed72921c23c1fc451fd89c", + "type": "depends_on" + }, + { + "from": "mod-0f688ec55978b6cd5ecd4803", + "to": "mod-28ff727efa5c0915d4fbfbe9", + "type": "depends_on" + }, + { + "from": "sym-98134ecd770aae6dcbec90ab", + "to": "mod-0f688ec55978b6cd5ecd4803", + "type": "depends_on" + }, + { + "from": "sym-d90ac9be913c03f89de49a6a", + "to": "sym-98134ecd770aae6dcbec90ab", + "type": "depends_on" + }, + { + "from": "sym-51b1658664a464a28add7d39", + "to": "sym-98134ecd770aae6dcbec90ab", + "type": "depends_on" + }, + { + "from": "sym-dd055a2b7be616db227088cd", + "to": "sym-98134ecd770aae6dcbec90ab", + "type": "depends_on" + }, + { + "from": "sym-df685b6a9983f7afd60ba389", + "to": "sym-98134ecd770aae6dcbec90ab", + "type": "depends_on" + }, + { + "from": "sym-8daeceb7337326d9572adf7f", + "to": "mod-28ff727efa5c0915d4fbfbe9", + "type": "depends_on" + }, + { + "from": "sym-1ddfb88e111a1fc510113fb2", + "to": "sym-8daeceb7337326d9572adf7f", + "type": "depends_on" + }, + { + "from": "sym-c906e076f2017c51d5f17ad9", + "to": "mod-28ff727efa5c0915d4fbfbe9", + "type": "depends_on" + }, + { + "from": "sym-12af65c030a64890b7bdd5c5", + "to": "sym-c906e076f2017c51d5f17ad9", + "type": "depends_on" + }, + { + "from": "sym-7481da4d2551622256f79c34", + "to": "mod-28ff727efa5c0915d4fbfbe9", + "type": "depends_on" + }, + { + "from": "sym-7536e2fefc44da98f1f245f0", + "to": "sym-7481da4d2551622256f79c34", + "type": "depends_on" + }, + { + "from": "sym-9d0b831a20db10611cc45fb1", + "to": "mod-28ff727efa5c0915d4fbfbe9", + "type": "depends_on" + }, + { + "from": "sym-57cc691568b21b3800bc42b8", + "to": "sym-9d0b831a20db10611cc45fb1", + "type": "depends_on" + }, + { + "from": "mod-e421d8434312ee89ef377735", + "to": "mod-28ff727efa5c0915d4fbfbe9", + "type": "depends_on" + }, + { + "from": "mod-e421d8434312ee89ef377735", + "to": "mod-fa9dc053ab761e9fa1b23eca", + "type": "depends_on" + }, + { + "from": "mod-e421d8434312ee89ef377735", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-734d63d64bf5b1e1a55b41ae", + "to": "mod-e421d8434312ee89ef377735", + "type": "depends_on" + }, + { + "from": "sym-5262afb38ed02f6e62f0d091", + "to": "sym-734d63d64bf5b1e1a55b41ae", + "type": "depends_on" + }, + { + "from": "sym-990cc459ace9fb6d1eb373ea", + "to": "sym-734d63d64bf5b1e1a55b41ae", + "type": "depends_on" + }, + { + "from": "mod-0d23e37fd3828b9a02bf3b23", + "to": "mod-f486beaedaf6d01b3f5574b4", + "type": "depends_on" + }, + { + "from": "mod-0d23e37fd3828b9a02bf3b23", + "to": "mod-fa9dc053ab761e9fa1b23eca", + "type": "depends_on" + }, + { + "from": "mod-0d23e37fd3828b9a02bf3b23", + "to": "mod-0ec41645e6ad231f2006c934", + "type": "depends_on" + }, + { + "from": "mod-0d23e37fd3828b9a02bf3b23", + "to": "mod-0e059ca33e0c78acb79559e8", + "type": "depends_on" + }, + { + "from": "mod-0d23e37fd3828b9a02bf3b23", + "to": "mod-2c0f4f3afaaec106ad82bf77", + "type": "depends_on" + }, + { + "from": "mod-0d23e37fd3828b9a02bf3b23", + "to": "mod-fda58e5568b7fcba96a8a55c", + "type": "depends_on" + }, + { + "from": "mod-0d23e37fd3828b9a02bf3b23", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "mod-0d23e37fd3828b9a02bf3b23", + "to": "mod-318b87a4c520cdb8c42c50c8", + "type": "depends_on" + }, + { + "from": "mod-0d23e37fd3828b9a02bf3b23", + "to": "mod-da04ef1eca622af1ef3664c3", + "type": "depends_on" + }, + { + "from": "mod-0d23e37fd3828b9a02bf3b23", + "to": "mod-51a57a3bb204ec45b2b3f614", + "type": "depends_on" + }, + { + "from": "mod-0d23e37fd3828b9a02bf3b23", + "to": "mod-b08e6ddaebbb67ea6d37877c", + "type": "depends_on" + }, + { + "from": "mod-0d23e37fd3828b9a02bf3b23", + "to": "mod-28ff727efa5c0915d4fbfbe9", + "type": "depends_on" + }, + { + "from": "mod-0d23e37fd3828b9a02bf3b23", + "to": "mod-0f688ec55978b6cd5ecd4803", + "type": "depends_on" + }, + { + "from": "mod-0d23e37fd3828b9a02bf3b23", + "to": "mod-e421d8434312ee89ef377735", + "type": "depends_on" + }, + { + "from": "sym-0258ae2808ceacc5e5c7daf6", + "to": "mod-0d23e37fd3828b9a02bf3b23", + "type": "depends_on" + }, + { + "from": "sym-748b9ac5e4eefbb8f1c662db", + "to": "mod-0d23e37fd3828b9a02bf3b23", + "type": "depends_on" + }, + { + "from": "sym-905c4a303dc09878f445885a", + "to": "mod-0d23e37fd3828b9a02bf3b23", + "type": "depends_on" + }, + { + "from": "sym-13f054ebc0ac09ce91489435", + "to": "mod-0d23e37fd3828b9a02bf3b23", + "type": "depends_on" + }, + { + "from": "sym-9234875151f1a7f0cf31b9e7", + "to": "mod-0d23e37fd3828b9a02bf3b23", + "type": "depends_on" + }, + { + "from": "sym-daabbda2f57bbfdba83b8e83", + "to": "mod-0d23e37fd3828b9a02bf3b23", + "type": "depends_on" + }, + { + "from": "sym-733e1ea545c75abf365916d0", + "to": "mod-0d23e37fd3828b9a02bf3b23", + "type": "depends_on" + }, + { + "from": "sym-30146865aa7ee601c7c84c2c", + "to": "mod-0d23e37fd3828b9a02bf3b23", + "type": "depends_on" + }, + { + "from": "sym-babb5160904dfa15d9efffde", + "to": "mod-0d23e37fd3828b9a02bf3b23", + "type": "depends_on" + }, + { + "from": "sym-76bd6ff260e8e858c0a13b22", + "to": "mod-0d23e37fd3828b9a02bf3b23", + "type": "depends_on" + }, + { + "from": "sym-267418c45b8286ee4f1c6f22", + "to": "mod-0d23e37fd3828b9a02bf3b23", + "type": "depends_on" + }, + { + "from": "sym-718d0f88adf207171e198984", + "to": "mod-0d23e37fd3828b9a02bf3b23", + "type": "depends_on" + }, + { + "from": "sym-335b3635e60265c0f047f94a", + "to": "mod-0d23e37fd3828b9a02bf3b23", + "type": "depends_on" + }, + { + "from": "sym-47e8e5e81e562513babffa84", + "to": "mod-0d23e37fd3828b9a02bf3b23", + "type": "depends_on" + }, + { + "from": "sym-65fd4ae8ff6b4e80cd8e7ddf", + "to": "mod-0d23e37fd3828b9a02bf3b23", + "type": "depends_on" + }, + { + "from": "sym-9e392e3be1bb8e80b9d8eca0", + "to": "mod-0d23e37fd3828b9a02bf3b23", + "type": "depends_on" + }, + { + "from": "sym-4b548d9bad1a3f7b3b804545", + "to": "mod-0d23e37fd3828b9a02bf3b23", + "type": "depends_on" + }, + { + "from": "mod-cf03366f5eef469f1f9abae5", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-cf03366f5eef469f1f9abae5", + "to": "mod-f486beaedaf6d01b3f5574b4", + "type": "depends_on" + }, + { + "from": "mod-cf03366f5eef469f1f9abae5", + "to": "mod-a5b4a44206cc0f3e39469a88", + "type": "depends_on" + }, + { + "from": "mod-cf03366f5eef469f1f9abae5", + "to": "mod-0ec41645e6ad231f2006c934", + "type": "depends_on" + }, + { + "from": "mod-cf03366f5eef469f1f9abae5", + "to": "mod-88c1741b3b46fa02af202651", + "type": "depends_on" + }, + { + "from": "sym-906fc1a6f627adb682f73f69", + "to": "mod-cf03366f5eef469f1f9abae5", + "type": "depends_on" + }, + { + "from": "sym-8270be34adad1236a1768639", + "to": "sym-906fc1a6f627adb682f73f69", + "type": "depends_on" + }, + { + "from": "sym-33f3a54f75b5f49ab6ca4e18", + "to": "mod-cf03366f5eef469f1f9abae5", + "type": "depends_on" + }, + { + "from": "sym-98bddcf841a7edde32258eff", + "to": "sym-33f3a54f75b5f49ab6ca4e18", + "type": "depends_on" + }, + { + "from": "sym-eeda3f868c196fe0d908da30", + "to": "sym-33f3a54f75b5f49ab6ca4e18", + "type": "depends_on" + }, + { + "from": "sym-ef6157dcde41199793a2f652", + "to": "sym-33f3a54f75b5f49ab6ca4e18", + "type": "depends_on" + }, + { + "from": "sym-b3a77b32f73fa2f8e5b6eb38", + "to": "sym-33f3a54f75b5f49ab6ca4e18", + "type": "depends_on" + }, + { + "from": "sym-28b62a49592cfcedda7995b5", + "to": "sym-33f3a54f75b5f49ab6ca4e18", + "type": "depends_on" + }, + { + "from": "sym-0c27439debe25460e5640c81", + "to": "sym-33f3a54f75b5f49ab6ca4e18", + "type": "depends_on" + }, + { + "from": "sym-da8dcc5ae3bdb357233500ed", + "to": "sym-33f3a54f75b5f49ab6ca4e18", + "type": "depends_on" + }, + { + "from": "sym-fe29ef8358240f8b5d0efb67", + "to": "sym-33f3a54f75b5f49ab6ca4e18", + "type": "depends_on" + }, + { + "from": "sym-b363a17c893ebc8b8c6ae66d", + "to": "sym-33f3a54f75b5f49ab6ca4e18", + "type": "depends_on" + }, + { + "from": "sym-e04adf46980d5389c13c53f2", + "to": "sym-33f3a54f75b5f49ab6ca4e18", + "type": "depends_on" + }, + { + "from": "sym-24238aae044a9288508e528f", + "to": "sym-33f3a54f75b5f49ab6ca4e18", + "type": "depends_on" + }, + { + "from": "sym-a2b4ef37ab235210f129c582", + "to": "sym-33f3a54f75b5f49ab6ca4e18", + "type": "depends_on" + }, + { + "from": "sym-79b1cc421f7bb8225330d102", + "to": "sym-33f3a54f75b5f49ab6ca4e18", + "type": "depends_on" + }, + { + "from": "sym-2d2d0700e456ea680a685e38", + "to": "sym-33f3a54f75b5f49ab6ca4e18", + "type": "depends_on" + }, + { + "from": "sym-74ba7a042ee52e20b6cdfcc9", + "to": "sym-33f3a54f75b5f49ab6ca4e18", + "type": "depends_on" + }, + { + "from": "sym-220ff4ee1d8624cffd6e1d74", + "to": "sym-33f3a54f75b5f49ab6ca4e18", + "type": "depends_on" + }, + { + "from": "sym-2989dc3b816456aad25e312a", + "to": "sym-33f3a54f75b5f49ab6ca4e18", + "type": "depends_on" + }, + { + "from": "mod-eef3b769fd906f6d2e387d17", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-eef3b769fd906f6d2e387d17", + "to": "mod-21be8fb976449bbe3589ce47", + "type": "depends_on" + }, + { + "from": "mod-eef3b769fd906f6d2e387d17", + "to": "mod-cf03366f5eef469f1f9abae5", + "type": "depends_on" + }, + { + "from": "mod-eef3b769fd906f6d2e387d17", + "to": "mod-0e059ca33e0c78acb79559e8", + "type": "depends_on" + }, + { + "from": "mod-eef3b769fd906f6d2e387d17", + "to": "mod-7a54f789433ac1b88a2975b0", + "type": "depends_on" + }, + { + "from": "mod-eef3b769fd906f6d2e387d17", + "to": "mod-fda58e5568b7fcba96a8a55c", + "type": "depends_on" + }, + { + "from": "sym-6fc1a8d7bec38c1c054731cf", + "to": "mod-eef3b769fd906f6d2e387d17", + "type": "depends_on" + }, + { + "from": "sym-f94e3f7f5326b8f03a004c92", + "to": "sym-6fc1a8d7bec38c1c054731cf", + "type": "depends_on" + }, + { + "from": "sym-c622baacd0af9f2fa1e8a75d", + "to": "mod-eef3b769fd906f6d2e387d17", + "type": "depends_on" + }, + { + "from": "sym-f289610a972129ad1a034265", + "to": "sym-c622baacd0af9f2fa1e8a75d", + "type": "depends_on" + }, + { + "from": "sym-065cec27a89a1f96d35d9616", + "to": "sym-c622baacd0af9f2fa1e8a75d", + "type": "depends_on" + }, + { + "from": "sym-5e3c44e475fe3984a48af08e", + "to": "mod-eef3b769fd906f6d2e387d17", + "type": "depends_on" + }, + { + "from": "mod-520483a8a175e4c376a6fc66", + "to": "mod-cf03366f5eef469f1f9abae5", + "type": "depends_on" + }, + { + "from": "mod-520483a8a175e4c376a6fc66", + "to": "mod-d3bd2f24c047572fef2bb57d", + "type": "depends_on" + }, + { + "from": "mod-520483a8a175e4c376a6fc66", + "to": "mod-eef3b769fd906f6d2e387d17", + "type": "depends_on" + }, + { + "from": "mod-520483a8a175e4c376a6fc66", + "to": "mod-88c1741b3b46fa02af202651", + "type": "depends_on" + }, + { + "from": "mod-520483a8a175e4c376a6fc66", + "to": "mod-ba811634639e67c5ad6dad6a", + "type": "depends_on" + }, + { + "from": "sym-9d04b4352850e4e29d81aa9a", + "to": "mod-520483a8a175e4c376a6fc66", + "type": "depends_on" + }, + { + "from": "sym-8d46e34227aa3b82778ad701", + "to": "mod-520483a8a175e4c376a6fc66", + "type": "depends_on" + }, + { + "from": "sym-0d16d90a0af194182c7763d8", + "to": "mod-520483a8a175e4c376a6fc66", + "type": "depends_on" + }, + { + "from": "sym-294aec35de62c4328120b87f", + "to": "mod-520483a8a175e4c376a6fc66", + "type": "depends_on" + }, + { + "from": "sym-c10aa7411e9a4c559b6bf35f", + "to": "mod-520483a8a175e4c376a6fc66", + "type": "depends_on" + }, + { + "from": "sym-bb4af358ea202588d8c6fb5e", + "to": "mod-520483a8a175e4c376a6fc66", + "type": "depends_on" + }, + { + "from": "sym-4f60154a5b98b9ad1a439365", + "to": "mod-520483a8a175e4c376a6fc66", + "type": "depends_on" + }, + { + "from": "sym-8532559ab87c585dd75c711e", + "to": "mod-520483a8a175e4c376a6fc66", + "type": "depends_on" + }, + { + "from": "sym-c75dad10441655e24de54ea9", + "to": "mod-520483a8a175e4c376a6fc66", + "type": "depends_on" + }, + { + "from": "sym-32194fbfce8c990fbf259c10", + "to": "mod-520483a8a175e4c376a6fc66", + "type": "depends_on" + }, + { + "from": "sym-2b50e307c6dd33f305ef5781", + "to": "mod-520483a8a175e4c376a6fc66", + "type": "depends_on" + }, + { + "from": "sym-20fdb18a1d51a344c3e5f1a6", + "to": "mod-520483a8a175e4c376a6fc66", + "type": "depends_on" + }, + { + "from": "mod-88c1741b3b46fa02af202651", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-88c1741b3b46fa02af202651", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "sym-21f9add087cbe8548e5cfaa7", + "to": "mod-88c1741b3b46fa02af202651", + "type": "depends_on" + }, + { + "from": "sym-28528c136e20c5b9216375cc", + "to": "mod-88c1741b3b46fa02af202651", + "type": "depends_on" + }, + { + "from": "sym-125aa959f581df6cef0211c3", + "to": "mod-88c1741b3b46fa02af202651", + "type": "depends_on" + }, + { + "from": "sym-125aa959f581df6cef0211c3", + "to": "sym-28528c136e20c5b9216375cc", + "type": "calls" + }, + { + "from": "sym-1c67049066747e28049dd5e3", + "to": "mod-88c1741b3b46fa02af202651", + "type": "depends_on" + }, + { + "from": "sym-1c67049066747e28049dd5e3", + "to": "sym-21f9add087cbe8548e5cfaa7", + "type": "calls" + }, + { + "from": "sym-1c67049066747e28049dd5e3", + "to": "sym-28528c136e20c5b9216375cc", + "type": "calls" + }, + { + "from": "sym-815707b26951dca6661da541", + "to": "mod-88c1741b3b46fa02af202651", + "type": "depends_on" + }, + { + "from": "sym-815707b26951dca6661da541", + "to": "sym-21f9add087cbe8548e5cfaa7", + "type": "calls" + }, + { + "from": "sym-815707b26951dca6661da541", + "to": "sym-28528c136e20c5b9216375cc", + "type": "calls" + }, + { + "from": "mod-d3bd2f24c047572fef2bb57d", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-d3bd2f24c047572fef2bb57d", + "to": "mod-21be8fb976449bbe3589ce47", + "type": "depends_on" + }, + { + "from": "mod-d3bd2f24c047572fef2bb57d", + "to": "mod-cf03366f5eef469f1f9abae5", + "type": "depends_on" + }, + { + "from": "mod-d3bd2f24c047572fef2bb57d", + "to": "mod-fda58e5568b7fcba96a8a55c", + "type": "depends_on" + }, + { + "from": "mod-d3bd2f24c047572fef2bb57d", + "to": "mod-0e059ca33e0c78acb79559e8", + "type": "depends_on" + }, + { + "from": "sym-ef97a186c9a7b5c8aabd5a90", + "to": "mod-d3bd2f24c047572fef2bb57d", + "type": "depends_on" + }, + { + "from": "sym-8d5722b175b0c9218f6f7a1f", + "to": "sym-ef97a186c9a7b5c8aabd5a90", + "type": "depends_on" + }, + { + "from": "sym-8865a437064bf5957a1cb25d", + "to": "mod-d3bd2f24c047572fef2bb57d", + "type": "depends_on" + }, + { + "from": "sym-d4cba561cffde016f7f5b7a6", + "to": "sym-8865a437064bf5957a1cb25d", + "type": "depends_on" + }, + { + "from": "sym-0df78011e78e75646718383c", + "to": "sym-8865a437064bf5957a1cb25d", + "type": "depends_on" + }, + { + "from": "sym-3ea283854050f93f09f7bd41", + "to": "sym-8865a437064bf5957a1cb25d", + "type": "depends_on" + }, + { + "from": "mod-ba811634639e67c5ad6dad6a", + "to": "mod-21706187666573b14b262650", + "type": "depends_on" + }, + { + "from": "mod-ba811634639e67c5ad6dad6a", + "to": "mod-bee55878a628d2e61003c5cc", + "type": "depends_on" + }, + { + "from": "mod-ba811634639e67c5ad6dad6a", + "to": "mod-f6f853a3f874d365c69ba912", + "type": "depends_on" + }, + { + "from": "mod-ba811634639e67c5ad6dad6a", + "to": "mod-eff94816a8124a44948e1724", + "type": "depends_on" + }, + { + "from": "mod-ba811634639e67c5ad6dad6a", + "to": "mod-c2ea467ec2d317289746a260", + "type": "depends_on" + }, + { + "from": "mod-ba811634639e67c5ad6dad6a", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-61acf2e50e86a7b8950968d6", + "to": "mod-ba811634639e67c5ad6dad6a", + "type": "depends_on" + }, + { + "from": "sym-fb22a88dee4e13f011188bb4", + "to": "sym-61acf2e50e86a7b8950968d6", + "type": "depends_on" + }, + { + "from": "sym-38903f0502c45543a1abf916", + "to": "mod-ba811634639e67c5ad6dad6a", + "type": "depends_on" + }, + { + "from": "sym-dc1f8edeeb79e07414f75002", + "to": "mod-ba811634639e67c5ad6dad6a", + "type": "depends_on" + }, + { + "from": "sym-bc5ae08b5a8d0d4051accdc7", + "to": "mod-ba811634639e67c5ad6dad6a", + "type": "depends_on" + }, + { + "from": "sym-7a79542eed185c47fa11f698", + "to": "mod-ba811634639e67c5ad6dad6a", + "type": "depends_on" + }, + { + "from": "mod-8040973db91efbca29bd5a3f", + "to": "mod-0ec41645e6ad231f2006c934", + "type": "depends_on" + }, + { + "from": "mod-8040973db91efbca29bd5a3f", + "to": "mod-fa9dc053ab761e9fa1b23eca", + "type": "depends_on" + }, + { + "from": "mod-8040973db91efbca29bd5a3f", + "to": "mod-2c0f4f3afaaec106ad82bf77", + "type": "depends_on" + }, + { + "from": "mod-8040973db91efbca29bd5a3f", + "to": "mod-0e059ca33e0c78acb79559e8", + "type": "depends_on" + }, + { + "from": "mod-8040973db91efbca29bd5a3f", + "to": "mod-e421d8434312ee89ef377735", + "type": "depends_on" + }, + { + "from": "sym-c1d0127d63060ca93441f113", + "to": "mod-8040973db91efbca29bd5a3f", + "type": "depends_on" + }, + { + "from": "sym-d252a54842776aa74372f6f2", + "to": "sym-c1d0127d63060ca93441f113", + "type": "depends_on" + }, + { + "from": "sym-66031640dec8be166f293f56", + "to": "mod-8040973db91efbca29bd5a3f", + "type": "depends_on" + }, + { + "from": "mod-9b81da9944f3e64f4bb36898", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-9b81da9944f3e64f4bb36898", + "to": "mod-fa9dc053ab761e9fa1b23eca", + "type": "depends_on" + }, + { + "from": "mod-9b81da9944f3e64f4bb36898", + "to": "mod-7a54f789433ac1b88a2975b0", + "type": "depends_on" + }, + { + "from": "sym-55f93e8069ac7b64652c0d68", + "to": "mod-9b81da9944f3e64f4bb36898", + "type": "depends_on" + }, + { + "from": "sym-55f93e8069ac7b64652c0d68", + "to": "sym-0d658d44d5b23dfd5829fc4f", + "type": "calls" + }, + { + "from": "sym-99b0d2564383e319659c1396", + "to": "mod-9b81da9944f3e64f4bb36898", + "type": "depends_on" + }, + { + "from": "sym-99b0d2564383e319659c1396", + "to": "sym-0d658d44d5b23dfd5829fc4f", + "type": "calls" + }, + { + "from": "sym-b4dfd8c83a7fc0baf92128df", + "to": "mod-9b81da9944f3e64f4bb36898", + "type": "depends_on" + }, + { + "from": "sym-b4dfd8c83a7fc0baf92128df", + "to": "sym-0d658d44d5b23dfd5829fc4f", + "type": "calls" + }, + { + "from": "sym-1cfae654989b906d03da6705", + "to": "mod-9b81da9944f3e64f4bb36898", + "type": "depends_on" + }, + { + "from": "sym-1cfae654989b906d03da6705", + "to": "sym-0d658d44d5b23dfd5829fc4f", + "type": "calls" + }, + { + "from": "sym-28d0b0409648d85cbd16e1fa", + "to": "mod-9b81da9944f3e64f4bb36898", + "type": "depends_on" + }, + { + "from": "sym-28d0b0409648d85cbd16e1fa", + "to": "sym-0d658d44d5b23dfd5829fc4f", + "type": "calls" + }, + { + "from": "sym-e66e3cbcbd613726d7235a91", + "to": "mod-9b81da9944f3e64f4bb36898", + "type": "depends_on" + }, + { + "from": "sym-e66e3cbcbd613726d7235a91", + "to": "sym-0d658d44d5b23dfd5829fc4f", + "type": "calls" + }, + { + "from": "sym-07c2b09c468e0b5ad536e20f", + "to": "mod-9b81da9944f3e64f4bb36898", + "type": "depends_on" + }, + { + "from": "sym-07c2b09c468e0b5ad536e20f", + "to": "sym-0d658d44d5b23dfd5829fc4f", + "type": "calls" + }, + { + "from": "mod-81df5ad5e23b1f5a430705f8", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-81df5ad5e23b1f5a430705f8", + "to": "mod-fa9dc053ab761e9fa1b23eca", + "type": "depends_on" + }, + { + "from": "mod-81df5ad5e23b1f5a430705f8", + "to": "mod-fda58e5568b7fcba96a8a55c", + "type": "depends_on" + }, + { + "from": "mod-81df5ad5e23b1f5a430705f8", + "to": "mod-5dd7573d658ce3d7ea74353a", + "type": "depends_on" + }, + { + "from": "sym-f57f553914fb207445eda03d", + "to": "mod-81df5ad5e23b1f5a430705f8", + "type": "depends_on" + }, + { + "from": "sym-d71b89a0ab10dcdd511293d3", + "to": "mod-81df5ad5e23b1f5a430705f8", + "type": "depends_on" + }, + { + "from": "sym-7061b9df6db226c496e459c6", + "to": "mod-81df5ad5e23b1f5a430705f8", + "type": "depends_on" + }, + { + "from": "sym-7061b9df6db226c496e459c6", + "to": "sym-1d7e1deea80d0d5c35cc1961", + "type": "calls" + }, + { + "from": "sym-7061b9df6db226c496e459c6", + "to": "sym-0d658d44d5b23dfd5829fc4f", + "type": "calls" + }, + { + "from": "sym-7061b9df6db226c496e459c6", + "to": "sym-bfa8af7e83408600dde29446", + "type": "calls" + }, + { + "from": "sym-7061b9df6db226c496e459c6", + "to": "sym-5639767a6380b54d939d3083", + "type": "calls" + }, + { + "from": "sym-fe23be8635119990ef0c5164", + "to": "mod-81df5ad5e23b1f5a430705f8", + "type": "depends_on" + }, + { + "from": "sym-29213aa85f749813078f0b0d", + "to": "mod-81df5ad5e23b1f5a430705f8", + "type": "depends_on" + }, + { + "from": "sym-66423d47c95841fbe2ed154c", + "to": "mod-81df5ad5e23b1f5a430705f8", + "type": "depends_on" + }, + { + "from": "mod-62ff6356c1ab42c00fe12c14", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-62ff6356c1ab42c00fe12c14", + "to": "mod-fa9dc053ab761e9fa1b23eca", + "type": "depends_on" + }, + { + "from": "mod-62ff6356c1ab42c00fe12c14", + "to": "mod-da04ef1eca622af1ef3664c3", + "type": "depends_on" + }, + { + "from": "mod-62ff6356c1ab42c00fe12c14", + "to": "mod-8a38038e04d5bed97a843cbd", + "type": "depends_on" + }, + { + "from": "mod-62ff6356c1ab42c00fe12c14", + "to": "mod-318b87a4c520cdb8c42c50c8", + "type": "depends_on" + }, + { + "from": "sym-8721b786443fefdf61f3484d", + "to": "mod-62ff6356c1ab42c00fe12c14", + "type": "depends_on" + }, + { + "from": "sym-442e0e5efaae973242d3a83e", + "to": "mod-62ff6356c1ab42c00fe12c14", + "type": "depends_on" + }, + { + "from": "sym-442e0e5efaae973242d3a83e", + "to": "sym-fcae6dca65ab92ce6e8c43b0", + "type": "calls" + }, + { + "from": "sym-4a56ab36294dcc8703d06e4d", + "to": "mod-62ff6356c1ab42c00fe12c14", + "type": "depends_on" + }, + { + "from": "sym-4a56ab36294dcc8703d06e4d", + "to": "sym-bfa8af7e83408600dde29446", + "type": "calls" + }, + { + "from": "sym-8fb8125b35dabb0bb867c2c3", + "to": "mod-62ff6356c1ab42c00fe12c14", + "type": "depends_on" + }, + { + "from": "sym-8fb8125b35dabb0bb867c2c3", + "to": "sym-bfa8af7e83408600dde29446", + "type": "calls" + }, + { + "from": "sym-7e7b96a10468c1edce3a73ae", + "to": "mod-62ff6356c1ab42c00fe12c14", + "type": "depends_on" + }, + { + "from": "sym-7e7b96a10468c1edce3a73ae", + "to": "sym-bfa8af7e83408600dde29446", + "type": "calls" + }, + { + "from": "sym-c48b984748dadec99be2ea79", + "to": "mod-62ff6356c1ab42c00fe12c14", + "type": "depends_on" + }, + { + "from": "sym-c48b984748dadec99be2ea79", + "to": "sym-bfa8af7e83408600dde29446", + "type": "calls" + }, + { + "from": "sym-27adc406e8d7be915bdab915", + "to": "mod-62ff6356c1ab42c00fe12c14", + "type": "depends_on" + }, + { + "from": "sym-27adc406e8d7be915bdab915", + "to": "sym-bfa8af7e83408600dde29446", + "type": "calls" + }, + { + "from": "sym-9dfd285f7a17eac27325557e", + "to": "mod-62ff6356c1ab42c00fe12c14", + "type": "depends_on" + }, + { + "from": "sym-9dfd285f7a17eac27325557e", + "to": "sym-bfa8af7e83408600dde29446", + "type": "calls" + }, + { + "from": "sym-f6d470d11d1bce1c9ae5c46d", + "to": "mod-62ff6356c1ab42c00fe12c14", + "type": "depends_on" + }, + { + "from": "sym-f6d470d11d1bce1c9ae5c46d", + "to": "sym-bfa8af7e83408600dde29446", + "type": "calls" + }, + { + "from": "sym-dd0d6da79a6076f6a04e978a", + "to": "mod-62ff6356c1ab42c00fe12c14", + "type": "depends_on" + }, + { + "from": "sym-dd0d6da79a6076f6a04e978a", + "to": "sym-bfa8af7e83408600dde29446", + "type": "calls" + }, + { + "from": "mod-8fe5e92214e16e3971d40e48", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-8fe5e92214e16e3971d40e48", + "to": "mod-fa9dc053ab761e9fa1b23eca", + "type": "depends_on" + }, + { + "from": "mod-8fe5e92214e16e3971d40e48", + "to": "mod-da04ef1eca622af1ef3664c3", + "type": "depends_on" + }, + { + "from": "mod-8fe5e92214e16e3971d40e48", + "to": "mod-8a38038e04d5bed97a843cbd", + "type": "depends_on" + }, + { + "from": "mod-8fe5e92214e16e3971d40e48", + "to": "mod-10774a0b5dd2473051df0fad", + "type": "depends_on" + }, + { + "from": "mod-8fe5e92214e16e3971d40e48", + "to": "mod-10774a0b5dd2473051df0fad", + "type": "depends_on" + }, + { + "from": "sym-9cfa7eb6554a93203930565f", + "to": "mod-8fe5e92214e16e3971d40e48", + "type": "depends_on" + }, + { + "from": "sym-9cfa7eb6554a93203930565f", + "to": "sym-5639767a6380b54d939d3083", + "type": "calls" + }, + { + "from": "sym-0c9c446090c5e603032ab8cf", + "to": "mod-8fe5e92214e16e3971d40e48", + "type": "depends_on" + }, + { + "from": "sym-0c9c446090c5e603032ab8cf", + "to": "sym-87aeaf45d3ccc3eda2f7754f", + "type": "calls" + }, + { + "from": "sym-44d515e6bda84183724780b8", + "to": "mod-8fe5e92214e16e3971d40e48", + "type": "depends_on" + }, + { + "from": "sym-44f589250824db7b5a096f65", + "to": "mod-8fe5e92214e16e3971d40e48", + "type": "depends_on" + }, + { + "from": "sym-b97361a9401c3a71b5cb1998", + "to": "mod-8fe5e92214e16e3971d40e48", + "type": "depends_on" + }, + { + "from": "sym-92202682f16c52bae37d49f3", + "to": "mod-8fe5e92214e16e3971d40e48", + "type": "depends_on" + }, + { + "from": "sym-56f866c2f73fcd13683b856e", + "to": "mod-8fe5e92214e16e3971d40e48", + "type": "depends_on" + }, + { + "from": "sym-fc93c1389ab92ee65c717efc", + "to": "mod-8fe5e92214e16e3971d40e48", + "type": "depends_on" + }, + { + "from": "mod-b986d7806992d6c650aa2abc", + "to": "mod-fa9dc053ab761e9fa1b23eca", + "type": "depends_on" + }, + { + "from": "mod-b986d7806992d6c650aa2abc", + "to": "mod-b08e6ddaebbb67ea6d37877c", + "type": "depends_on" + }, + { + "from": "mod-b986d7806992d6c650aa2abc", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-70988e4b53bbd62ef2940b36", + "to": "mod-b986d7806992d6c650aa2abc", + "type": "depends_on" + }, + { + "from": "sym-3cf96cee618774e41d2dfe8a", + "to": "mod-b986d7806992d6c650aa2abc", + "type": "depends_on" + }, + { + "from": "sym-5e497086f6306f35948392bf", + "to": "mod-b986d7806992d6c650aa2abc", + "type": "depends_on" + }, + { + "from": "sym-5d5bc71be2e25f76fae74cf0", + "to": "mod-b986d7806992d6c650aa2abc", + "type": "depends_on" + }, + { + "from": "sym-65524c0f66e7faa0eaa27ed8", + "to": "mod-b986d7806992d6c650aa2abc", + "type": "depends_on" + }, + { + "from": "mod-a7c0beb3ec427a0c7c2c3f7f", + "to": "mod-fa9dc053ab761e9fa1b23eca", + "type": "depends_on" + }, + { + "from": "mod-a7c0beb3ec427a0c7c2c3f7f", + "to": "mod-da04ef1eca622af1ef3664c3", + "type": "depends_on" + }, + { + "from": "mod-a7c0beb3ec427a0c7c2c3f7f", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "mod-a7c0beb3ec427a0c7c2c3f7f", + "to": "mod-51a57a3bb204ec45b2b3f614", + "type": "depends_on" + }, + { + "from": "mod-a7c0beb3ec427a0c7c2c3f7f", + "to": "mod-8a38038e04d5bed97a843cbd", + "type": "depends_on" + }, + { + "from": "sym-32d856454b59fac1c5f9f097", + "to": "mod-a7c0beb3ec427a0c7c2c3f7f", + "type": "depends_on" + }, + { + "from": "sym-ef424ed39e854a4281432490", + "to": "mod-a7c0beb3ec427a0c7c2c3f7f", + "type": "depends_on" + }, + { + "from": "sym-e301fc6bbdb4b0a55d179d3b", + "to": "mod-a7c0beb3ec427a0c7c2c3f7f", + "type": "depends_on" + }, + { + "from": "sym-e301fc6bbdb4b0a55d179d3b", + "to": "sym-911a2d4197fac2defef73b40", + "type": "calls" + }, + { + "from": "sym-ea690b435ee55e2db7bcf853", + "to": "mod-a7c0beb3ec427a0c7c2c3f7f", + "type": "depends_on" + }, + { + "from": "sym-c1c3b15c1ce614072f76c61b", + "to": "mod-a7c0beb3ec427a0c7c2c3f7f", + "type": "depends_on" + }, + { + "from": "sym-7b7933aea3be7d0c5d9c4362", + "to": "mod-a7c0beb3ec427a0c7c2c3f7f", + "type": "depends_on" + }, + { + "from": "sym-951f37505baec8059fcb4a8c", + "to": "mod-a7c0beb3ec427a0c7c2c3f7f", + "type": "depends_on" + }, + { + "from": "sym-74a72391e547cae03f9273bd", + "to": "mod-a7c0beb3ec427a0c7c2c3f7f", + "type": "depends_on" + }, + { + "from": "mod-c3ac921e455e2c85a68228e4", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-c3ac921e455e2c85a68228e4", + "to": "mod-fa9dc053ab761e9fa1b23eca", + "type": "depends_on" + }, + { + "from": "mod-c3ac921e455e2c85a68228e4", + "to": "mod-da04ef1eca622af1ef3664c3", + "type": "depends_on" + }, + { + "from": "mod-c3ac921e455e2c85a68228e4", + "to": "mod-8a38038e04d5bed97a843cbd", + "type": "depends_on" + }, + { + "from": "mod-c3ac921e455e2c85a68228e4", + "to": "mod-1de8a1fb6a48c6a931549f30", + "type": "depends_on" + }, + { + "from": "sym-b37deaf5ad3d42513eeee725", + "to": "mod-c3ac921e455e2c85a68228e4", + "type": "depends_on" + }, + { + "from": "sym-b37deaf5ad3d42513eeee725", + "to": "sym-235384a3d4f36552d55ac7ef", + "type": "calls" + }, + { + "from": "sym-80af24f09cb8568074b9237b", + "to": "mod-c3ac921e455e2c85a68228e4", + "type": "depends_on" + }, + { + "from": "sym-80af24f09cb8568074b9237b", + "to": "sym-ac7d7af06ace8e5f7480d85e", + "type": "calls" + }, + { + "from": "sym-8a00aee2ef2d139bfb66e5af", + "to": "mod-c3ac921e455e2c85a68228e4", + "type": "depends_on" + }, + { + "from": "sym-8a00aee2ef2d139bfb66e5af", + "to": "sym-8df316cdf3ef951ce8023630", + "type": "calls" + }, + { + "from": "sym-52e28e3349a0587ed39bb211", + "to": "mod-c3ac921e455e2c85a68228e4", + "type": "depends_on" + }, + { + "from": "sym-52e28e3349a0587ed39bb211", + "to": "sym-235384a3d4f36552d55ac7ef", + "type": "calls" + }, + { + "from": "sym-68764677ca5ad459e67db833", + "to": "mod-c3ac921e455e2c85a68228e4", + "type": "depends_on" + }, + { + "from": "mod-8a38038e04d5bed97a843cbd", + "to": "mod-da04ef1eca622af1ef3664c3", + "type": "depends_on" + }, + { + "from": "sym-908c55c5efe8c66740e37055", + "to": "mod-8a38038e04d5bed97a843cbd", + "type": "depends_on" + }, + { + "from": "sym-40cdf81aea9ee142f33fdadf", + "to": "mod-8a38038e04d5bed97a843cbd", + "type": "depends_on" + }, + { + "from": "sym-3d600ff95898af2342185384", + "to": "mod-8a38038e04d5bed97a843cbd", + "type": "depends_on" + }, + { + "from": "sym-1a3586208ccd98a2e6978fb3", + "to": "mod-0e059ca33e0c78acb79559e8", + "type": "depends_on" + }, + { + "from": "sym-a5031dfc8e0cc73fef0da379", + "to": "sym-1a3586208ccd98a2e6978fb3", + "type": "depends_on" + }, + { + "from": "sym-5c8e5e8a39104aecb286893f", + "to": "mod-0e059ca33e0c78acb79559e8", + "type": "depends_on" + }, + { + "from": "sym-1e4bb01db213569973c9fb34", + "to": "mod-0e059ca33e0c78acb79559e8", + "type": "depends_on" + }, + { + "from": "mod-2c0f4f3afaaec106ad82bf77", + "to": "mod-fa9dc053ab761e9fa1b23eca", + "type": "depends_on" + }, + { + "from": "mod-2c0f4f3afaaec106ad82bf77", + "to": "mod-0e059ca33e0c78acb79559e8", + "type": "depends_on" + }, + { + "from": "mod-2c0f4f3afaaec106ad82bf77", + "to": "mod-81df5ad5e23b1f5a430705f8", + "type": "depends_on" + }, + { + "from": "mod-2c0f4f3afaaec106ad82bf77", + "to": "mod-a7c0beb3ec427a0c7c2c3f7f", + "type": "depends_on" + }, + { + "from": "mod-2c0f4f3afaaec106ad82bf77", + "to": "mod-62ff6356c1ab42c00fe12c14", + "type": "depends_on" + }, + { + "from": "mod-2c0f4f3afaaec106ad82bf77", + "to": "mod-c3ac921e455e2c85a68228e4", + "type": "depends_on" + }, + { + "from": "mod-2c0f4f3afaaec106ad82bf77", + "to": "mod-b986d7806992d6c650aa2abc", + "type": "depends_on" + }, + { + "from": "mod-2c0f4f3afaaec106ad82bf77", + "to": "mod-9b81da9944f3e64f4bb36898", + "type": "depends_on" + }, + { + "from": "mod-2c0f4f3afaaec106ad82bf77", + "to": "mod-8fe5e92214e16e3971d40e48", + "type": "depends_on" + }, + { + "from": "sym-465a6407cdbddf468c7c3251", + "to": "mod-2c0f4f3afaaec106ad82bf77", + "type": "depends_on" + }, + { + "from": "sym-386b941d76f4c8f10a187435", + "to": "sym-465a6407cdbddf468c7c3251", + "type": "depends_on" + }, + { + "from": "sym-66f6973f6288a7f36a7c1d28", + "to": "mod-2c0f4f3afaaec106ad82bf77", + "type": "depends_on" + }, + { + "from": "sym-90e4a197be8ff419ed66d830", + "to": "sym-66f6973f6288a7f36a7c1d28", + "type": "depends_on" + }, + { + "from": "sym-af3f501ea2464a1d43010bea", + "to": "mod-2c0f4f3afaaec106ad82bf77", + "type": "depends_on" + }, + { + "from": "sym-7109d15742026d0f311996ea", + "to": "mod-2c0f4f3afaaec106ad82bf77", + "type": "depends_on" + }, + { + "from": "mod-88b203dbc16db3025123970b", + "to": "mod-c2ea467ec2d317289746a260", + "type": "depends_on" + }, + { + "from": "sym-86a02fdc381985fdd13f023b", + "to": "mod-88b203dbc16db3025123970b", + "type": "depends_on" + }, + { + "from": "sym-534438d5ba67b8592440eefb", + "to": "sym-86a02fdc381985fdd13f023b", + "type": "depends_on" + }, + { + "from": "sym-c48ae3e66b0f174a70e412e5", + "to": "sym-86a02fdc381985fdd13f023b", + "type": "depends_on" + }, + { + "from": "sym-4e12f25c5ce54e2bbda81d0c", + "to": "sym-86a02fdc381985fdd13f023b", + "type": "depends_on" + }, + { + "from": "sym-cdc874c6e398062ee16c8b38", + "to": "sym-86a02fdc381985fdd13f023b", + "type": "depends_on" + }, + { + "from": "sym-89e994f15545e398c7e2addc", + "to": "sym-86a02fdc381985fdd13f023b", + "type": "depends_on" + }, + { + "from": "sym-e955b50b1f96f9bc3aaa5e9c", + "to": "sym-86a02fdc381985fdd13f023b", + "type": "depends_on" + }, + { + "from": "sym-76dcb81a85f54822054465ae", + "to": "sym-86a02fdc381985fdd13f023b", + "type": "depends_on" + }, + { + "from": "sym-a2efbf53ab67834889766768", + "to": "sym-86a02fdc381985fdd13f023b", + "type": "depends_on" + }, + { + "from": "sym-36bf66ddb8ab891b109dc444", + "to": "sym-86a02fdc381985fdd13f023b", + "type": "depends_on" + }, + { + "from": "sym-bc1c20fd0bfb030ddaff6c17", + "to": "sym-86a02fdc381985fdd13f023b", + "type": "depends_on" + }, + { + "from": "sym-ed1b2b7a517b4236d13f0fc8", + "to": "sym-86a02fdc381985fdd13f023b", + "type": "depends_on" + }, + { + "from": "mod-7ff977b2cc6a6dde99d1c4a1", + "to": "mod-c2ea467ec2d317289746a260", + "type": "depends_on" + }, + { + "from": "mod-7ff977b2cc6a6dde99d1c4a1", + "to": "mod-88b203dbc16db3025123970b", + "type": "depends_on" + }, + { + "from": "sym-859e3974653a78d99db2f73e", + "to": "mod-7ff977b2cc6a6dde99d1c4a1", + "type": "depends_on" + }, + { + "from": "sym-ac44c01f6c74fd8f6a21f2c7", + "to": "mod-7ff977b2cc6a6dde99d1c4a1", + "type": "depends_on" + }, + { + "from": "sym-ebc9cfd3e7f365a40b76b5b8", + "to": "mod-c2ea467ec2d317289746a260", + "type": "depends_on" + }, + { + "from": "sym-8e107677b94e23a6f3b219d6", + "to": "sym-ebc9cfd3e7f365a40b76b5b8", + "type": "depends_on" + }, + { + "from": "sym-4339ce5f095732b35ef16575", + "to": "mod-c2ea467ec2d317289746a260", + "type": "depends_on" + }, + { + "from": "sym-aff49eab772515d5b833ef34", + "to": "sym-4339ce5f095732b35ef16575", + "type": "depends_on" + }, + { + "from": "sym-4de085ac34821b291958ca8d", + "to": "mod-c2ea467ec2d317289746a260", + "type": "depends_on" + }, + { + "from": "sym-5b3fdf7b2257820a91eb1e24", + "to": "sym-4de085ac34821b291958ca8d", + "type": "depends_on" + }, + { + "from": "sym-a929d1427bf0e28aee1d273a", + "to": "mod-c2ea467ec2d317289746a260", + "type": "depends_on" + }, + { + "from": "sym-43063258f1f591add1ec17d8", + "to": "sym-a929d1427bf0e28aee1d273a", + "type": "depends_on" + }, + { + "from": "mod-7a54f789433ac1b88a2975b0", + "to": "mod-f2ed72921c23c1fc451fd89c", + "type": "depends_on" + }, + { + "from": "sym-7d64282ce8c2fd92b6a0242d", + "to": "mod-7a54f789433ac1b88a2975b0", + "type": "depends_on" + }, + { + "from": "sym-28d49c217cc2b5c0bca3f7cf", + "to": "sym-7d64282ce8c2fd92b6a0242d", + "type": "depends_on" + }, + { + "from": "sym-bbe82027196a1293546adf88", + "to": "mod-7a54f789433ac1b88a2975b0", + "type": "depends_on" + }, + { + "from": "sym-707d977f3ee1ecf261ddd6a2", + "to": "mod-7a54f789433ac1b88a2975b0", + "type": "depends_on" + }, + { + "from": "sym-12945c6469674a2c8ca1664d", + "to": "mod-7a54f789433ac1b88a2975b0", + "type": "depends_on" + }, + { + "from": "sym-667ee77a33a8cdaab7b8e881", + "to": "sym-12945c6469674a2c8ca1664d", + "type": "depends_on" + }, + { + "from": "sym-484518bac829f3d8d0b68bed", + "to": "mod-7a54f789433ac1b88a2975b0", + "type": "depends_on" + }, + { + "from": "sym-3c9e74c5cd69037300664055", + "to": "mod-7a54f789433ac1b88a2975b0", + "type": "depends_on" + }, + { + "from": "sym-f7c2c4bf481ceac8b676e139", + "to": "mod-7a54f789433ac1b88a2975b0", + "type": "depends_on" + }, + { + "from": "sym-facf67dec0a9f34ec0a49331", + "to": "sym-f7c2c4bf481ceac8b676e139", + "type": "depends_on" + }, + { + "from": "sym-7e98febf42ce02edfc8af727", + "to": "mod-7a54f789433ac1b88a2975b0", + "type": "depends_on" + }, + { + "from": "sym-81026f67f67aeb62d631535d", + "to": "mod-7a54f789433ac1b88a2975b0", + "type": "depends_on" + }, + { + "from": "sym-6e5873ef0b08194d76c50da7", + "to": "sym-81026f67f67aeb62d631535d", + "type": "depends_on" + }, + { + "from": "sym-fa254e205c76ea44e4b0521c", + "to": "mod-7a54f789433ac1b88a2975b0", + "type": "depends_on" + }, + { + "from": "sym-531050568d58da423745f877", + "to": "mod-7a54f789433ac1b88a2975b0", + "type": "depends_on" + }, + { + "from": "sym-9d509c324983c22418cb1b1a", + "to": "sym-531050568d58da423745f877", + "type": "depends_on" + }, + { + "from": "sym-d7fd53b8db8be40361088b41", + "to": "mod-7a54f789433ac1b88a2975b0", + "type": "depends_on" + }, + { + "from": "sym-1f0f4f159ed45d15de2bdb16", + "to": "mod-7a54f789433ac1b88a2975b0", + "type": "depends_on" + }, + { + "from": "sym-8736e8fe142316bf9549f1a8", + "to": "mod-7a54f789433ac1b88a2975b0", + "type": "depends_on" + }, + { + "from": "sym-ec3b887388af632075e349e1", + "to": "sym-8736e8fe142316bf9549f1a8", + "type": "depends_on" + }, + { + "from": "sym-44872549830e75384171fc2b", + "to": "mod-7a54f789433ac1b88a2975b0", + "type": "depends_on" + }, + { + "from": "sym-cd9eaecd5f72fe65de09076a", + "to": "mod-7a54f789433ac1b88a2975b0", + "type": "depends_on" + }, + { + "from": "sym-cdf87a7aca678cd914268866", + "to": "mod-7a54f789433ac1b88a2975b0", + "type": "depends_on" + }, + { + "from": "sym-d541dd4d784440f63678a4e3", + "to": "sym-cdf87a7aca678cd914268866", + "type": "depends_on" + }, + { + "from": "sym-50906bc466402f2083e8ab59", + "to": "mod-7a54f789433ac1b88a2975b0", + "type": "depends_on" + }, + { + "from": "sym-c8763836bff4ea42fba470e9", + "to": "mod-7a54f789433ac1b88a2975b0", + "type": "depends_on" + }, + { + "from": "sym-72a34cb08372cf0ac8f3fb22", + "to": "mod-7a54f789433ac1b88a2975b0", + "type": "depends_on" + }, + { + "from": "sym-968a498798178d6738491d83", + "to": "sym-72a34cb08372cf0ac8f3fb22", + "type": "depends_on" + }, + { + "from": "sym-9e648f9c7fcc2000961ea0f5", + "to": "mod-7a54f789433ac1b88a2975b0", + "type": "depends_on" + }, + { + "from": "sym-5eac4ba7590c3f59ec0ba280", + "to": "mod-7a54f789433ac1b88a2975b0", + "type": "depends_on" + }, + { + "from": "sym-c2ca91c5458f62906d47361f", + "to": "mod-7a54f789433ac1b88a2975b0", + "type": "depends_on" + }, + { + "from": "sym-b6ef2a80b24cff47652860e8", + "to": "sym-c2ca91c5458f62906d47361f", + "type": "depends_on" + }, + { + "from": "sym-74d82230f4dfa750c17ed391", + "to": "mod-7a54f789433ac1b88a2975b0", + "type": "depends_on" + }, + { + "from": "sym-25c69489da5bd52abf8384dc", + "to": "mod-7a54f789433ac1b88a2975b0", + "type": "depends_on" + }, + { + "from": "sym-4772b06d07bc4b22972f4952", + "to": "sym-25c69489da5bd52abf8384dc", + "type": "depends_on" + }, + { + "from": "sym-e3e86d2049745e57873fd98b", + "to": "mod-7a54f789433ac1b88a2975b0", + "type": "depends_on" + }, + { + "from": "mod-fda58e5568b7fcba96a8a55c", + "to": "mod-f2ed72921c23c1fc451fd89c", + "type": "depends_on" + }, + { + "from": "sym-481361719769269bbcc2e42e", + "to": "mod-fda58e5568b7fcba96a8a55c", + "type": "depends_on" + }, + { + "from": "sym-c67c6857215adc29562ba837", + "to": "sym-481361719769269bbcc2e42e", + "type": "depends_on" + }, + { + "from": "sym-ea8e70c31d2e96bfbddc5728", + "to": "mod-fda58e5568b7fcba96a8a55c", + "type": "depends_on" + }, + { + "from": "sym-1c7b74b127fc73ce782ddde8", + "to": "sym-ea8e70c31d2e96bfbddc5728", + "type": "depends_on" + }, + { + "from": "sym-6f8e6e4f31b5962fa750ff76", + "to": "mod-fda58e5568b7fcba96a8a55c", + "type": "depends_on" + }, + { + "from": "sym-55dc68dc14be56917edfd871", + "to": "sym-6f8e6e4f31b5962fa750ff76", + "type": "depends_on" + }, + { + "from": "sym-0dc97a487d76eed091d62752", + "to": "mod-fda58e5568b7fcba96a8a55c", + "type": "depends_on" + }, + { + "from": "sym-c2a23fae15322adc98caeb29", + "to": "sym-0dc97a487d76eed091d62752", + "type": "depends_on" + }, + { + "from": "sym-13ac1dce8147d23e90ebd1e2", + "to": "mod-fda58e5568b7fcba96a8a55c", + "type": "depends_on" + }, + { + "from": "sym-f8a0c4666cb0b4b98b3ac6f2", + "to": "sym-13ac1dce8147d23e90ebd1e2", + "type": "depends_on" + }, + { + "from": "sym-3b5febcb27a4551c38d4e5da", + "to": "mod-fda58e5568b7fcba96a8a55c", + "type": "depends_on" + }, + { + "from": "sym-9f79d2d01eb8704a8a3f667a", + "to": "sym-3b5febcb27a4551c38d4e5da", + "type": "depends_on" + }, + { + "from": "sym-bc7a00fb36defa4547dc4e66", + "to": "mod-fda58e5568b7fcba96a8a55c", + "type": "depends_on" + }, + { + "from": "sym-d06a0d03433985f473292d4f", + "to": "mod-fda58e5568b7fcba96a8a55c", + "type": "depends_on" + }, + { + "from": "sym-90a66cf85e974a26a58d0020", + "to": "mod-fda58e5568b7fcba96a8a55c", + "type": "depends_on" + }, + { + "from": "sym-90b3c0e9e4b19ddeb943e4dd", + "to": "mod-fda58e5568b7fcba96a8a55c", + "type": "depends_on" + }, + { + "from": "sym-f4ccdcb40b8b555b7a08fcb6", + "to": "mod-fda58e5568b7fcba96a8a55c", + "type": "depends_on" + }, + { + "from": "sym-9351362dec91626ae107ca56", + "to": "mod-fda58e5568b7fcba96a8a55c", + "type": "depends_on" + }, + { + "from": "sym-c5fa908fa5581b730fc5d09c", + "to": "mod-fda58e5568b7fcba96a8a55c", + "type": "depends_on" + }, + { + "from": "sym-8229616c5a767a0d5dbfefda", + "to": "mod-fda58e5568b7fcba96a8a55c", + "type": "depends_on" + }, + { + "from": "sym-88f33bf5560b48d40472b9d9", + "to": "mod-fda58e5568b7fcba96a8a55c", + "type": "depends_on" + }, + { + "from": "sym-20b5f591af45ea9097a1eca8", + "to": "mod-fda58e5568b7fcba96a8a55c", + "type": "depends_on" + }, + { + "from": "sym-12b4c077de9faa8c83463abd", + "to": "mod-fda58e5568b7fcba96a8a55c", + "type": "depends_on" + }, + { + "from": "sym-4c7c069d6afb88dd0645bd92", + "to": "mod-fda58e5568b7fcba96a8a55c", + "type": "depends_on" + }, + { + "from": "sym-04a3e5bb96f8917c9379915c", + "to": "mod-fda58e5568b7fcba96a8a55c", + "type": "depends_on" + }, + { + "from": "sym-f75ed5d703b6d0859d13b84a", + "to": "mod-fda58e5568b7fcba96a8a55c", + "type": "depends_on" + }, + { + "from": "mod-318b87a4c520cdb8c42c50c8", + "to": "mod-f2ed72921c23c1fc451fd89c", + "type": "depends_on" + }, + { + "from": "sym-4bd857e92a09ab312df3fac6", + "to": "mod-318b87a4c520cdb8c42c50c8", + "type": "depends_on" + }, + { + "from": "sym-39deee8a65b6d288793699df", + "to": "sym-4bd857e92a09ab312df3fac6", + "type": "depends_on" + }, + { + "from": "sym-4f96470733f0fe1d8997c6c3", + "to": "mod-318b87a4c520cdb8c42c50c8", + "type": "depends_on" + }, + { + "from": "sym-d98c42026c34023c6273d50c", + "to": "mod-318b87a4c520cdb8c42c50c8", + "type": "depends_on" + }, + { + "from": "mod-da04ef1eca622af1ef3664c3", + "to": "mod-f2ed72921c23c1fc451fd89c", + "type": "depends_on" + }, + { + "from": "sym-bd3a95e736c86b11a47a00ad", + "to": "mod-da04ef1eca622af1ef3664c3", + "type": "depends_on" + }, + { + "from": "sym-ef238a74a16593944be3fbd3", + "to": "mod-da04ef1eca622af1ef3664c3", + "type": "depends_on" + }, + { + "from": "sym-3b31c5edccb093881690ab96", + "to": "mod-da04ef1eca622af1ef3664c3", + "type": "depends_on" + }, + { + "from": "sym-b173258f48b4dfdf435372f4", + "to": "mod-da04ef1eca622af1ef3664c3", + "type": "depends_on" + }, + { + "from": "mod-10774a0b5dd2473051df0fad", + "to": "mod-f2ed72921c23c1fc451fd89c", + "type": "depends_on" + }, + { + "from": "sym-defd3a4003779e6064cede3d", + "to": "mod-10774a0b5dd2473051df0fad", + "type": "depends_on" + }, + { + "from": "sym-6b49bfaa683ae21eaa9fc761", + "to": "sym-defd3a4003779e6064cede3d", + "type": "depends_on" + }, + { + "from": "sym-dda21973087d6e481c8037b4", + "to": "mod-10774a0b5dd2473051df0fad", + "type": "depends_on" + }, + { + "from": "sym-74af9f448201a71e785ad7af", + "to": "sym-dda21973087d6e481c8037b4", + "type": "depends_on" + }, + { + "from": "sym-0951823a296655a3ade22fdb", + "to": "mod-10774a0b5dd2473051df0fad", + "type": "depends_on" + }, + { + "from": "sym-68c51d1daa2e84a19b1ef286", + "to": "sym-0951823a296655a3ade22fdb", + "type": "depends_on" + }, + { + "from": "sym-bc9523b68a00abef0beae972", + "to": "mod-10774a0b5dd2473051df0fad", + "type": "depends_on" + }, + { + "from": "sym-be50e4d09b490b0ebb403162", + "to": "sym-bc9523b68a00abef0beae972", + "type": "depends_on" + }, + { + "from": "sym-46bef75b389f3a525f564868", + "to": "mod-10774a0b5dd2473051df0fad", + "type": "depends_on" + }, + { + "from": "sym-bc80da23c0788cbb96e525e7", + "to": "sym-46bef75b389f3a525f564868", + "type": "depends_on" + }, + { + "from": "sym-0b8fbb71f8c6a15f84f89c18", + "to": "mod-10774a0b5dd2473051df0fad", + "type": "depends_on" + }, + { + "from": "sym-07a6cec5a5c3a95ab1252789", + "to": "sym-0b8fbb71f8c6a15f84f89c18", + "type": "depends_on" + }, + { + "from": "sym-bad9b7515020680a9f2efcd4", + "to": "mod-10774a0b5dd2473051df0fad", + "type": "depends_on" + }, + { + "from": "sym-7f84a166c1f6ed5e7713d53f", + "to": "sym-bad9b7515020680a9f2efcd4", + "type": "depends_on" + }, + { + "from": "sym-3e83d82facdcd6b51a624587", + "to": "mod-10774a0b5dd2473051df0fad", + "type": "depends_on" + }, + { + "from": "sym-8b8eec8e7dac3de610bd552f", + "to": "mod-10774a0b5dd2473051df0fad", + "type": "depends_on" + }, + { + "from": "sym-9d5f9036c3a61f194222ddc9", + "to": "mod-10774a0b5dd2473051df0fad", + "type": "depends_on" + }, + { + "from": "sym-684a2dfd8c5944d2cc9e9e73", + "to": "sym-9d5f9036c3a61f194222ddc9", + "type": "depends_on" + }, + { + "from": "sym-1dd5bedf2f00e69d75db3984", + "to": "mod-10774a0b5dd2473051df0fad", + "type": "depends_on" + }, + { + "from": "sym-bce363e2ed8fe28874f6e8d7", + "to": "mod-10774a0b5dd2473051df0fad", + "type": "depends_on" + }, + { + "from": "sym-24c86701e405a5e93d569d27", + "to": "mod-10774a0b5dd2473051df0fad", + "type": "depends_on" + }, + { + "from": "sym-9482969157730c21f53bda3a", + "to": "sym-24c86701e405a5e93d569d27", + "type": "depends_on" + }, + { + "from": "sym-b5f2992ee061fa9af8d170bf", + "to": "mod-10774a0b5dd2473051df0fad", + "type": "depends_on" + }, + { + "from": "sym-015b2d24689c8f1a98fd94fa", + "to": "mod-10774a0b5dd2473051df0fad", + "type": "depends_on" + }, + { + "from": "mod-b08e6ddaebbb67ea6d37877c", + "to": "mod-f2ed72921c23c1fc451fd89c", + "type": "depends_on" + }, + { + "from": "sym-c59dda13f33be0983f2e2f24", + "to": "mod-b08e6ddaebbb67ea6d37877c", + "type": "depends_on" + }, + { + "from": "sym-6a92728b97295df4add532cc", + "to": "sym-c59dda13f33be0983f2e2f24", + "type": "depends_on" + }, + { + "from": "sym-00caa963c5b5c3b283cc6f2a", + "to": "mod-b08e6ddaebbb67ea6d37877c", + "type": "depends_on" + }, + { + "from": "sym-393a656c99e379da83261270", + "to": "sym-00caa963c5b5c3b283cc6f2a", + "type": "depends_on" + }, + { + "from": "sym-3d4a17b03c78e440e8521bac", + "to": "mod-b08e6ddaebbb67ea6d37877c", + "type": "depends_on" + }, + { + "from": "sym-839486393ec3777f098c4138", + "to": "mod-b08e6ddaebbb67ea6d37877c", + "type": "depends_on" + }, + { + "from": "sym-a0fe73ba5a4c3b5e9571f894", + "to": "mod-b08e6ddaebbb67ea6d37877c", + "type": "depends_on" + }, + { + "from": "sym-cdee1d1ee123471a2fe8ccba", + "to": "sym-a0fe73ba5a4c3b5e9571f894", + "type": "depends_on" + }, + { + "from": "sym-649a1a18feb266499520cbe5", + "to": "mod-b08e6ddaebbb67ea6d37877c", + "type": "depends_on" + }, + { + "from": "sym-ce4b61abdd638d7f7a2a015c", + "to": "sym-649a1a18feb266499520cbe5", + "type": "depends_on" + }, + { + "from": "sym-704e246d81608f800aed67ad", + "to": "mod-b08e6ddaebbb67ea6d37877c", + "type": "depends_on" + }, + { + "from": "sym-bfefc17bb5d1c65cc36c0843", + "to": "sym-704e246d81608f800aed67ad", + "type": "depends_on" + }, + { + "from": "sym-02417a6365edd0198fd75264", + "to": "mod-b08e6ddaebbb67ea6d37877c", + "type": "depends_on" + }, + { + "from": "sym-eeb4fc775c7436b1dcc8a3c3", + "to": "mod-b08e6ddaebbb67ea6d37877c", + "type": "depends_on" + }, + { + "from": "sym-b4556341831fecb80421ac68", + "to": "mod-b08e6ddaebbb67ea6d37877c", + "type": "depends_on" + }, + { + "from": "sym-e3d213bc363306b53393ab4f", + "to": "sym-b4556341831fecb80421ac68", + "type": "depends_on" + }, + { + "from": "sym-6cd8e16677b8cf80dd1ad744", + "to": "mod-b08e6ddaebbb67ea6d37877c", + "type": "depends_on" + }, + { + "from": "sym-9f28799d05d13c0d15a531c2", + "to": "mod-b08e6ddaebbb67ea6d37877c", + "type": "depends_on" + }, + { + "from": "sym-07dcd771e2b390047f2e6a55", + "to": "mod-b08e6ddaebbb67ea6d37877c", + "type": "depends_on" + }, + { + "from": "sym-2a8e22fd4ddb063dd986f7e4", + "to": "sym-07dcd771e2b390047f2e6a55", + "type": "depends_on" + }, + { + "from": "sym-b82d83e2bc3aa3aa35dc2364", + "to": "mod-b08e6ddaebbb67ea6d37877c", + "type": "depends_on" + }, + { + "from": "sym-d91a4ce131bb705db219070a", + "to": "mod-b08e6ddaebbb67ea6d37877c", + "type": "depends_on" + }, + { + "from": "sym-79d31f302ae00821c9b091e7", + "to": "sym-d91a4ce131bb705db219070a", + "type": "depends_on" + }, + { + "from": "sym-81eae4b46a28fb84e48f06ad", + "to": "mod-b08e6ddaebbb67ea6d37877c", + "type": "depends_on" + }, + { + "from": "sym-04be92096edfe026f0b98854", + "to": "mod-b08e6ddaebbb67ea6d37877c", + "type": "depends_on" + }, + { + "from": "sym-82a1161ce70b04b888c2f0b6", + "to": "sym-04be92096edfe026f0b98854", + "type": "depends_on" + }, + { + "from": "sym-e7c776ab0eba1f5599be7fcb", + "to": "mod-b08e6ddaebbb67ea6d37877c", + "type": "depends_on" + }, + { + "from": "sym-cdea7aa1b6de2749159f6e96", + "to": "mod-b08e6ddaebbb67ea6d37877c", + "type": "depends_on" + }, + { + "from": "sym-97131dcb1a2dffeac2eaa164", + "to": "mod-f2ed72921c23c1fc451fd89c", + "type": "depends_on" + }, + { + "from": "sym-c615dbb155d43299ba7b7acd", + "to": "sym-97131dcb1a2dffeac2eaa164", + "type": "depends_on" + }, + { + "from": "sym-115a795c311c05a660b0cfaf", + "to": "sym-97131dcb1a2dffeac2eaa164", + "type": "depends_on" + }, + { + "from": "sym-88b5df7ef753f6b018ea90ab", + "to": "sym-97131dcb1a2dffeac2eaa164", + "type": "depends_on" + }, + { + "from": "sym-84c84d61c9c8f4b14650344e", + "to": "sym-97131dcb1a2dffeac2eaa164", + "type": "depends_on" + }, + { + "from": "sym-ebcdfff7c8f26147d49f7e68", + "to": "sym-97131dcb1a2dffeac2eaa164", + "type": "depends_on" + }, + { + "from": "sym-a44f26a28d524913f6c5ae0d", + "to": "sym-97131dcb1a2dffeac2eaa164", + "type": "depends_on" + }, + { + "from": "sym-96c322c3230b3318cb0bfef3", + "to": "sym-97131dcb1a2dffeac2eaa164", + "type": "depends_on" + }, + { + "from": "sym-053ecef7be1b74553f59efc7", + "to": "sym-97131dcb1a2dffeac2eaa164", + "type": "depends_on" + }, + { + "from": "sym-3fe76fd5033992560ddc2bb5", + "to": "sym-97131dcb1a2dffeac2eaa164", + "type": "depends_on" + }, + { + "from": "sym-ee9fcadb697329d2357af877", + "to": "mod-f2ed72921c23c1fc451fd89c", + "type": "depends_on" + }, + { + "from": "sym-c8e4c282ac82ce5a43c6dabc", + "to": "sym-ee9fcadb697329d2357af877", + "type": "depends_on" + }, + { + "from": "sym-156b046ec0b458f750d6c8ac", + "to": "sym-ee9fcadb697329d2357af877", + "type": "depends_on" + }, + { + "from": "sym-2c13707cee1ca19b78229934", + "to": "sym-ee9fcadb697329d2357af877", + "type": "depends_on" + }, + { + "from": "sym-cde19651d1f29828454ec4b6", + "to": "sym-ee9fcadb697329d2357af877", + "type": "depends_on" + }, + { + "from": "sym-b7b7764b5f8752a3680783e8", + "to": "sym-ee9fcadb697329d2357af877", + "type": "depends_on" + }, + { + "from": "sym-134f63188f756ad86c2a544c", + "to": "sym-ee9fcadb697329d2357af877", + "type": "depends_on" + }, + { + "from": "sym-5e360294a26cb37091a37018", + "to": "sym-ee9fcadb697329d2357af877", + "type": "depends_on" + }, + { + "from": "sym-3b67e628eb4b9ff604126a19", + "to": "sym-ee9fcadb697329d2357af877", + "type": "depends_on" + }, + { + "from": "sym-8f72c9a1055bca2bc71f0167", + "to": "sym-ee9fcadb697329d2357af877", + "type": "depends_on" + }, + { + "from": "mod-60762ca0d2e77317b47957f2", + "to": "mod-f2ed72921c23c1fc451fd89c", + "type": "depends_on" + }, + { + "from": "sym-c8dc6d5802b95dedf621862d", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "sym-398f49ae51bd5320d95176c5", + "to": "sym-c8dc6d5802b95dedf621862d", + "type": "depends_on" + }, + { + "from": "sym-f06f1dcb2dfd8d7e4dd48292", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "sym-205b5cb1bf996c3482d66431", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "sym-3b474985222cfc997a5d0ef7", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "sym-b0d0846d390faea344a260a3", + "to": "sym-3b474985222cfc997a5d0ef7", + "type": "depends_on" + }, + { + "from": "sym-2745d8771ea38a82ffaeea95", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "sym-2998e1ceb03e2f98134e96d9", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "sym-aa28f8a1e849d532b667906d", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "sym-0e202b84aaada6b86ce3e501", + "to": "sym-aa28f8a1e849d532b667906d", + "type": "depends_on" + }, + { + "from": "sym-3934bcc10c9b4f2e9c2d0959", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "sym-685b7b28fe67a4cc44e434de", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "sym-63c9672a710d076dc0e06cf3", + "to": "sym-685b7b28fe67a4cc44e434de", + "type": "depends_on" + }, + { + "from": "sym-7fa32da41eaee8452f8bd9a5", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "sym-1c22efc6afd12d2cefe35a3d", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "sym-50385a967901d4552b638fc9", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "sym-b75fc6c5dace7ee100cd6671", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "sym-34d2413a3679dfdbfae04b85", + "to": "sym-b75fc6c5dace7ee100cd6671", + "type": "depends_on" + }, + { + "from": "sym-e2d7a7040dc244cb0c9a5e1e", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "sym-640fafbc00c2c677cbe674d4", + "to": "sym-e2d7a7040dc244cb0c9a5e1e", + "type": "depends_on" + }, + { + "from": "sym-638ca9f97a7186e06d2d59ad", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "sym-12924b2bd0070b6b03d3764a", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "sym-f5257582e7cf3f5b4295d85b", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "sym-aadb6a479fc23c9ae89a48dc", + "to": "sym-f5257582e7cf3f5b4295d85b", + "type": "depends_on" + }, + { + "from": "sym-83065379d4a1c2d6f3b97b0d", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "sym-d3398ecb720878008124bdce", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "sym-a6aea358d016932d28dc7be5", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "sym-370c23cf8df49a2d85fd00c3", + "to": "sym-a6aea358d016932d28dc7be5", + "type": "depends_on" + }, + { + "from": "sym-4557b22ff4878be5f4a83de0", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "sym-5ebf3bd250ee5182d48cabb6", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "sym-9d09479e95ac975cf01cb1c9", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "sym-ac0a1e228d4998787a688f49", + "to": "sym-9d09479e95ac975cf01cb1c9", + "type": "depends_on" + }, + { + "from": "sym-cad0c5620a82457ff3fd1caa", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "sym-3cf7208af311e74228536b19", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "sym-c3d439caa60d66c084b242cb", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "sym-12308ff860a88b22d3988316", + "to": "sym-c3d439caa60d66c084b242cb", + "type": "depends_on" + }, + { + "from": "sym-fb874babcae55f743d4ff85e", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "sym-fb874babcae55f743d4ff85e", + "to": "sym-4557b22ff4878be5f4a83de0", + "type": "calls" + }, + { + "from": "sym-f0b5e63d32e47917e6917e37", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "sym-94a4bc0bef1261cd6df79681", + "to": "sym-f0b5e63d32e47917e6917e37", + "type": "depends_on" + }, + { + "from": "sym-10bf3623222ef5c352c92e57", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "sym-5a6498b588eb7b9202c2278f", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "sym-2a16d473fb82483974822634", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "sym-3efe476db2668ba9240cd9fa", + "to": "sym-2a16d473fb82483974822634", + "type": "depends_on" + }, + { + "from": "sym-0429407686d62d7981518349", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "sym-a389b419600f623779bfb957", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "sym-084f4ac4cc731f2eecd2e15b", + "to": "sym-a389b419600f623779bfb957", + "type": "depends_on" + }, + { + "from": "sym-0da9ed27a8edc8d60500c437", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "sym-682349dca1db65816dbb8d40", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "sym-0d519bd0d8d725bd68e90b74", + "to": "sym-682349dca1db65816dbb8d40", + "type": "depends_on" + }, + { + "from": "sym-cd38e297a920fb3851693005", + "to": "mod-60762ca0d2e77317b47957f2", + "type": "depends_on" + }, + { + "from": "mod-51a57a3bb204ec45b2b3f614", + "to": "mod-f2ed72921c23c1fc451fd89c", + "type": "depends_on" + }, + { + "from": "sym-fde5c332b3442bce93cbd4cf", + "to": "mod-51a57a3bb204ec45b2b3f614", + "type": "depends_on" + }, + { + "from": "sym-d5cca436cb4085a64e3fbc81", + "to": "sym-fde5c332b3442bce93cbd4cf", + "type": "depends_on" + }, + { + "from": "sym-4d2cf98a651cd5dd3389e832", + "to": "mod-51a57a3bb204ec45b2b3f614", + "type": "depends_on" + }, + { + "from": "sym-6deebd259361408f0a65993f", + "to": "mod-51a57a3bb204ec45b2b3f614", + "type": "depends_on" + }, + { + "from": "sym-bff9f5e26c04692e57a8c205", + "to": "mod-51a57a3bb204ec45b2b3f614", + "type": "depends_on" + }, + { + "from": "sym-d0d4887ab09527b9257a1405", + "to": "sym-bff9f5e26c04692e57a8c205", + "type": "depends_on" + }, + { + "from": "sym-a35dd0f41512f99872e7738b", + "to": "mod-51a57a3bb204ec45b2b3f614", + "type": "depends_on" + }, + { + "from": "sym-bf562992f64a168eef732a5d", + "to": "mod-51a57a3bb204ec45b2b3f614", + "type": "depends_on" + }, + { + "from": "sym-bf562992f64a168eef732a5d", + "to": "sym-6deebd259361408f0a65993f", + "type": "calls" + }, + { + "from": "mod-c7ad59fd02de9e38e55f238d", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-c7ad59fd02de9e38e55f238d", + "to": "mod-28add79b36597a8f639320cc", + "type": "depends_on" + }, + { + "from": "mod-c7ad59fd02de9e38e55f238d", + "to": "mod-8040973db91efbca29bd5a3f", + "type": "depends_on" + }, + { + "from": "mod-c7ad59fd02de9e38e55f238d", + "to": "mod-fa9dc053ab761e9fa1b23eca", + "type": "depends_on" + }, + { + "from": "mod-c7ad59fd02de9e38e55f238d", + "to": "mod-0ec41645e6ad231f2006c934", + "type": "depends_on" + }, + { + "from": "sym-b36ae142dc9718ede23c06bc", + "to": "mod-c7ad59fd02de9e38e55f238d", + "type": "depends_on" + }, + { + "from": "sym-6aff8c1e4a946b504755b96c", + "to": "sym-b36ae142dc9718ede23c06bc", + "type": "depends_on" + }, + { + "from": "sym-651d97a1d371ba00f5ed8ef7", + "to": "mod-c7ad59fd02de9e38e55f238d", + "type": "depends_on" + }, + { + "from": "sym-d19c4eedb3523566ec96367b", + "to": "sym-651d97a1d371ba00f5ed8ef7", + "type": "depends_on" + }, + { + "from": "sym-133421c4f44d097284fdc1e1", + "to": "mod-c7ad59fd02de9e38e55f238d", + "type": "depends_on" + }, + { + "from": "sym-8f1b556c30494585319ff2a8", + "to": "sym-133421c4f44d097284fdc1e1", + "type": "depends_on" + }, + { + "from": "sym-8b4d74629cafce4fcd265da5", + "to": "sym-133421c4f44d097284fdc1e1", + "type": "depends_on" + }, + { + "from": "sym-0e38f768aa845af8152f9371", + "to": "sym-133421c4f44d097284fdc1e1", + "type": "depends_on" + }, + { + "from": "sym-c16a7a59d6bd44f47f669061", + "to": "sym-133421c4f44d097284fdc1e1", + "type": "depends_on" + }, + { + "from": "sym-4f3b527ae6c1a92b1e08382e", + "to": "sym-133421c4f44d097284fdc1e1", + "type": "depends_on" + }, + { + "from": "sym-d5457eadb39d5b88b40a0b7f", + "to": "sym-133421c4f44d097284fdc1e1", + "type": "depends_on" + }, + { + "from": "sym-3211b4fb8cd96a09dddc5945", + "to": "sym-133421c4f44d097284fdc1e1", + "type": "depends_on" + }, + { + "from": "sym-133421c4f44d097284fdc1e1", + "to": "sym-66031640dec8be166f293f56", + "type": "calls" + }, + { + "from": "mod-21706187666573b14b262650", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-21706187666573b14b262650", + "to": "mod-ca241437dd7ea992b976eec8", + "type": "depends_on" + }, + { + "from": "sym-5f956142286a9ffd6b89aff8", + "to": "mod-21706187666573b14b262650", + "type": "depends_on" + }, + { + "from": "sym-1f9b056f12bdcb651b98c9e9", + "to": "sym-5f956142286a9ffd6b89aff8", + "type": "depends_on" + }, + { + "from": "sym-683faf499d47d1002dcc9c9a", + "to": "mod-21706187666573b14b262650", + "type": "depends_on" + }, + { + "from": "sym-4fd98aa9a051f922a1be1738", + "to": "sym-683faf499d47d1002dcc9c9a", + "type": "depends_on" + }, + { + "from": "sym-2a9f3b24c688a8f4c7c6ca77", + "to": "sym-683faf499d47d1002dcc9c9a", + "type": "depends_on" + }, + { + "from": "sym-3e5a52e4a3288e9197169dd5", + "to": "sym-683faf499d47d1002dcc9c9a", + "type": "depends_on" + }, + { + "from": "sym-d47afa81e1b42216c57c4f17", + "to": "sym-683faf499d47d1002dcc9c9a", + "type": "depends_on" + }, + { + "from": "sym-3f2e207330d30a047d942f8a", + "to": "sym-683faf499d47d1002dcc9c9a", + "type": "depends_on" + }, + { + "from": "mod-ca241437dd7ea992b976eec8", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-ca241437dd7ea992b976eec8", + "to": "mod-c7ad59fd02de9e38e55f238d", + "type": "depends_on" + }, + { + "from": "sym-1c96385260a214f0ef0cd31a", + "to": "mod-ca241437dd7ea992b976eec8", + "type": "depends_on" + }, + { + "from": "sym-b11e93b10772d5d3f91d3bf7", + "to": "sym-1c96385260a214f0ef0cd31a", + "type": "depends_on" + }, + { + "from": "sym-10c1513a04a2c8cb11ddbcf4", + "to": "mod-ca241437dd7ea992b976eec8", + "type": "depends_on" + }, + { + "from": "sym-15a0cf677c65f5feb1acda3d", + "to": "sym-10c1513a04a2c8cb11ddbcf4", + "type": "depends_on" + }, + { + "from": "sym-52b7361894d97b4a7afdc494", + "to": "sym-10c1513a04a2c8cb11ddbcf4", + "type": "depends_on" + }, + { + "from": "sym-c63340bdbd01e0a374f72ca1", + "to": "sym-10c1513a04a2c8cb11ddbcf4", + "type": "depends_on" + }, + { + "from": "sym-e7404e24dcc9f40c5540555a", + "to": "sym-10c1513a04a2c8cb11ddbcf4", + "type": "depends_on" + }, + { + "from": "sym-b1b47df78ce6450e30e86f6b", + "to": "sym-10c1513a04a2c8cb11ddbcf4", + "type": "depends_on" + }, + { + "from": "mod-bee55878a628d2e61003c5cc", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-bee55878a628d2e61003c5cc", + "to": "mod-ca241437dd7ea992b976eec8", + "type": "depends_on" + }, + { + "from": "mod-bee55878a628d2e61003c5cc", + "to": "mod-eff94816a8124a44948e1724", + "type": "depends_on" + }, + { + "from": "mod-bee55878a628d2e61003c5cc", + "to": "mod-eff94816a8124a44948e1724", + "type": "depends_on" + }, + { + "from": "mod-bee55878a628d2e61003c5cc", + "to": "mod-ee32d301b857ba4c7de679c2", + "type": "depends_on" + }, + { + "from": "sym-3933e7b0dfc4cd713ec68e39", + "to": "mod-bee55878a628d2e61003c5cc", + "type": "depends_on" + }, + { + "from": "sym-0fe09e1aac44a856be580a75", + "to": "sym-3933e7b0dfc4cd713ec68e39", + "type": "depends_on" + }, + { + "from": "sym-48085842ddef714b8a2ad15f", + "to": "mod-bee55878a628d2e61003c5cc", + "type": "depends_on" + }, + { + "from": "sym-d94986c2fa52214663d393ae", + "to": "sym-48085842ddef714b8a2ad15f", + "type": "depends_on" + }, + { + "from": "sym-a14c227a9792d32d04b2396f", + "to": "sym-48085842ddef714b8a2ad15f", + "type": "depends_on" + }, + { + "from": "sym-866db34b995ad59a88ac4252", + "to": "sym-48085842ddef714b8a2ad15f", + "type": "depends_on" + }, + { + "from": "sym-f339a578b038105b43659b18", + "to": "sym-48085842ddef714b8a2ad15f", + "type": "depends_on" + }, + { + "from": "sym-b51ea5558814c2899f1e2975", + "to": "sym-48085842ddef714b8a2ad15f", + "type": "depends_on" + }, + { + "from": "sym-80b2e1bd784169672ba37388", + "to": "sym-48085842ddef714b8a2ad15f", + "type": "depends_on" + }, + { + "from": "sym-38003f377d941f1aed705c15", + "to": "sym-48085842ddef714b8a2ad15f", + "type": "depends_on" + }, + { + "from": "mod-992e96869304ba6455a502bd", + "to": "mod-21706187666573b14b262650", + "type": "depends_on" + }, + { + "from": "mod-992e96869304ba6455a502bd", + "to": "mod-ca241437dd7ea992b976eec8", + "type": "depends_on" + }, + { + "from": "mod-992e96869304ba6455a502bd", + "to": "mod-c7ad59fd02de9e38e55f238d", + "type": "depends_on" + }, + { + "from": "mod-992e96869304ba6455a502bd", + "to": "mod-bee55878a628d2e61003c5cc", + "type": "depends_on" + }, + { + "from": "sym-310c5f7a70cf1d3ad6f355af", + "to": "mod-992e96869304ba6455a502bd", + "type": "depends_on" + }, + { + "from": "sym-6122e71601390d54325a01b8", + "to": "mod-992e96869304ba6455a502bd", + "type": "depends_on" + }, + { + "from": "sym-87969fcca7bf7172f21ef7f3", + "to": "mod-992e96869304ba6455a502bd", + "type": "depends_on" + }, + { + "from": "sym-cccbec68264c6804aba0e890", + "to": "mod-992e96869304ba6455a502bd", + "type": "depends_on" + }, + { + "from": "mod-ee32d301b857ba4c7de679c2", + "to": "mod-eff94816a8124a44948e1724", + "type": "depends_on" + }, + { + "from": "mod-ee32d301b857ba4c7de679c2", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-40e6b962c5f9e8eb4faf3e94", + "to": "mod-ee32d301b857ba4c7de679c2", + "type": "depends_on" + }, + { + "from": "sym-38d0a492948f82e34e85ee87", + "to": "mod-ee32d301b857ba4c7de679c2", + "type": "depends_on" + }, + { + "from": "sym-5bdade31fc0d63b3de669cf8", + "to": "mod-ee32d301b857ba4c7de679c2", + "type": "depends_on" + }, + { + "from": "sym-5bdade31fc0d63b3de669cf8", + "to": "sym-38d0a492948f82e34e85ee87", + "type": "calls" + }, + { + "from": "sym-eb812ea9d1ab7667cac73686", + "to": "mod-ee32d301b857ba4c7de679c2", + "type": "depends_on" + }, + { + "from": "sym-eb812ea9d1ab7667cac73686", + "to": "sym-38d0a492948f82e34e85ee87", + "type": "calls" + }, + { + "from": "sym-bfbcfa89f57581fb2c56e102", + "to": "mod-ee32d301b857ba4c7de679c2", + "type": "depends_on" + }, + { + "from": "sym-bfbcfa89f57581fb2c56e102", + "to": "sym-38d0a492948f82e34e85ee87", + "type": "calls" + }, + { + "from": "sym-bd397dfc2ea87521bf16c24b", + "to": "mod-ee32d301b857ba4c7de679c2", + "type": "depends_on" + }, + { + "from": "sym-1c718042ed0590db80445128", + "to": "mod-ee32d301b857ba4c7de679c2", + "type": "depends_on" + }, + { + "from": "sym-16c7a605ac6fdbdd9e7f493c", + "to": "mod-ee32d301b857ba4c7de679c2", + "type": "depends_on" + }, + { + "from": "sym-16c7a605ac6fdbdd9e7f493c", + "to": "sym-38d0a492948f82e34e85ee87", + "type": "calls" + }, + { + "from": "sym-16c7a605ac6fdbdd9e7f493c", + "to": "sym-bfbcfa89f57581fb2c56e102", + "type": "calls" + }, + { + "from": "mod-f34f89c5406499b05c630026", + "to": "mod-eff94816a8124a44948e1724", + "type": "depends_on" + }, + { + "from": "mod-f34f89c5406499b05c630026", + "to": "mod-ee32d301b857ba4c7de679c2", + "type": "depends_on" + }, + { + "from": "mod-f34f89c5406499b05c630026", + "to": "mod-f6f853a3f874d365c69ba912", + "type": "depends_on" + }, + { + "from": "sym-3f0dd3972baf18443d586478", + "to": "mod-f34f89c5406499b05c630026", + "type": "depends_on" + }, + { + "from": "sym-023f23876208fe3644656fea", + "to": "mod-f34f89c5406499b05c630026", + "type": "depends_on" + }, + { + "from": "sym-f75161cce5821340e3206b23", + "to": "mod-f34f89c5406499b05c630026", + "type": "depends_on" + }, + { + "from": "mod-f6f853a3f874d365c69ba912", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-f6f853a3f874d365c69ba912", + "to": "mod-ee32d301b857ba4c7de679c2", + "type": "depends_on" + }, + { + "from": "sym-f93acea713b02d00af75e846", + "to": "mod-f6f853a3f874d365c69ba912", + "type": "depends_on" + }, + { + "from": "sym-ba52215a94401bdbb33683e6", + "to": "sym-f93acea713b02d00af75e846", + "type": "depends_on" + }, + { + "from": "sym-b3b9f472b2f3019657cef489", + "to": "mod-f6f853a3f874d365c69ba912", + "type": "depends_on" + }, + { + "from": "sym-b3b9f472b2f3019657cef489", + "to": "sym-1c718042ed0590db80445128", + "type": "calls" + }, + { + "from": "sym-b3b9f472b2f3019657cef489", + "to": "sym-bd397dfc2ea87521bf16c24b", + "type": "calls" + }, + { + "from": "sym-b3b9f472b2f3019657cef489", + "to": "sym-eb812ea9d1ab7667cac73686", + "type": "calls" + }, + { + "from": "sym-b3b9f472b2f3019657cef489", + "to": "sym-40e6b962c5f9e8eb4faf3e94", + "type": "calls" + }, + { + "from": "sym-b3b9f472b2f3019657cef489", + "to": "sym-bfbcfa89f57581fb2c56e102", + "type": "calls" + }, + { + "from": "sym-b3b9f472b2f3019657cef489", + "to": "sym-16c7a605ac6fdbdd9e7f493c", + "type": "calls" + }, + { + "from": "sym-35e335b14ed79ab5eb0dcaa4", + "to": "mod-f6f853a3f874d365c69ba912", + "type": "depends_on" + }, + { + "from": "sym-cfc610bda4c5eda04a009f49", + "to": "mod-eff94816a8124a44948e1724", + "type": "depends_on" + }, + { + "from": "sym-2fe92e48fc1f13dd643e705a", + "to": "sym-cfc610bda4c5eda04a009f49", + "type": "depends_on" + }, + { + "from": "sym-026247379bacd97457f16ffc", + "to": "mod-eff94816a8124a44948e1724", + "type": "depends_on" + }, + { + "from": "sym-881a2a8d37c9e7b761bfa51e", + "to": "sym-026247379bacd97457f16ffc", + "type": "depends_on" + }, + { + "from": "sym-984b0552359747b6c5c827e5", + "to": "mod-eff94816a8124a44948e1724", + "type": "depends_on" + }, + { + "from": "sym-aad1fbde112489a0e0a55886", + "to": "sym-984b0552359747b6c5c827e5", + "type": "depends_on" + }, + { + "from": "sym-1c76a6289fd857f7afde3e67", + "to": "mod-eff94816a8124a44948e1724", + "type": "depends_on" + }, + { + "from": "mod-0dd8c1befae8423fcc7d4fcd", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-0dd8c1befae8423fcc7d4fcd", + "to": "mod-a877268ad21d1ba59035ea1f", + "type": "depends_on" + }, + { + "from": "mod-0dd8c1befae8423fcc7d4fcd", + "to": "mod-a65de7b43b60edb96e04a5d1", + "type": "depends_on" + }, + { + "from": "mod-0dd8c1befae8423fcc7d4fcd", + "to": "mod-eac0ec2113f231fdec114b7c", + "type": "depends_on" + }, + { + "from": "mod-0dd8c1befae8423fcc7d4fcd", + "to": "mod-eff94816a8124a44948e1724", + "type": "depends_on" + }, + { + "from": "sym-f6079a5941a4aa6aabf4e4d1", + "to": "mod-0dd8c1befae8423fcc7d4fcd", + "type": "depends_on" + }, + { + "from": "sym-1dc1e1b29ddff1c012139bcb", + "to": "sym-f6079a5941a4aa6aabf4e4d1", + "type": "depends_on" + }, + { + "from": "sym-693efbe3e685c5a46c951e19", + "to": "sym-f6079a5941a4aa6aabf4e4d1", + "type": "depends_on" + }, + { + "from": "sym-de270da8d0f039197a169102", + "to": "sym-f6079a5941a4aa6aabf4e4d1", + "type": "depends_on" + }, + { + "from": "sym-cd66f4576418400b50aaab41", + "to": "sym-f6079a5941a4aa6aabf4e4d1", + "type": "depends_on" + }, + { + "from": "mod-a5b4a44206cc0f3e39469a88", + "to": "mod-a877268ad21d1ba59035ea1f", + "type": "depends_on" + }, + { + "from": "mod-a5b4a44206cc0f3e39469a88", + "to": "mod-eac0ec2113f231fdec114b7c", + "type": "depends_on" + }, + { + "from": "mod-a5b4a44206cc0f3e39469a88", + "to": "mod-0ec41645e6ad231f2006c934", + "type": "depends_on" + }, + { + "from": "mod-a5b4a44206cc0f3e39469a88", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-132f69711099ffece36b4018", + "to": "mod-a5b4a44206cc0f3e39469a88", + "type": "depends_on" + }, + { + "from": "sym-79d733c4fe52875b36ca1dc2", + "to": "sym-132f69711099ffece36b4018", + "type": "depends_on" + }, + { + "from": "sym-f4ad00f9b85e424de28b078e", + "to": "sym-132f69711099ffece36b4018", + "type": "depends_on" + }, + { + "from": "sym-07a7afa8b7a80b81d8daa204", + "to": "sym-132f69711099ffece36b4018", + "type": "depends_on" + }, + { + "from": "sym-67b329b6d5edf0c52f1f94ce", + "to": "sym-132f69711099ffece36b4018", + "type": "depends_on" + }, + { + "from": "sym-a6b5d0bbd8d6fb578aaa2c51", + "to": "sym-132f69711099ffece36b4018", + "type": "depends_on" + }, + { + "from": "sym-91a7207033d6adc49e3ac3cf", + "to": "sym-132f69711099ffece36b4018", + "type": "depends_on" + }, + { + "from": "sym-d7e19777ecfc8f5fc6abb39e", + "to": "sym-132f69711099ffece36b4018", + "type": "depends_on" + }, + { + "from": "sym-b3946213b56c00a758511c93", + "to": "sym-132f69711099ffece36b4018", + "type": "depends_on" + }, + { + "from": "sym-c03790d11131253fa310918d", + "to": "sym-132f69711099ffece36b4018", + "type": "depends_on" + }, + { + "from": "mod-28add79b36597a8f639320cc", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-28add79b36597a8f639320cc", + "to": "mod-fa9dc053ab761e9fa1b23eca", + "type": "depends_on" + }, + { + "from": "mod-28add79b36597a8f639320cc", + "to": "mod-f2ed72921c23c1fc451fd89c", + "type": "depends_on" + }, + { + "from": "mod-28add79b36597a8f639320cc", + "to": "mod-0f688ec55978b6cd5ecd4803", + "type": "depends_on" + }, + { + "from": "mod-28add79b36597a8f639320cc", + "to": "mod-28ff727efa5c0915d4fbfbe9", + "type": "depends_on" + }, + { + "from": "mod-28add79b36597a8f639320cc", + "to": "mod-0ec41645e6ad231f2006c934", + "type": "depends_on" + }, + { + "from": "sym-3defead0134f1d92758a8884", + "to": "mod-28add79b36597a8f639320cc", + "type": "depends_on" + }, + { + "from": "sym-e027e1d71fc94eda35062eb3", + "to": "sym-3defead0134f1d92758a8884", + "type": "depends_on" + }, + { + "from": "sym-b918906007bcfe0fb5eb9bc7", + "to": "sym-3defead0134f1d92758a8884", + "type": "depends_on" + }, + { + "from": "sym-00c53ac8685951a1aae5b41e", + "to": "sym-3defead0134f1d92758a8884", + "type": "depends_on" + }, + { + "from": "sym-889e2f691903588bf21c0b00", + "to": "sym-3defead0134f1d92758a8884", + "type": "depends_on" + }, + { + "from": "sym-ad22d7f770482a70786aa980", + "to": "sym-3defead0134f1d92758a8884", + "type": "depends_on" + }, + { + "from": "sym-e0d9fa8b7626b4186b317c58", + "to": "sym-3defead0134f1d92758a8884", + "type": "depends_on" + }, + { + "from": "sym-6bc616937536685e5c6d82bd", + "to": "sym-3defead0134f1d92758a8884", + "type": "depends_on" + }, + { + "from": "mod-a877268ad21d1ba59035ea1f", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-a877268ad21d1ba59035ea1f", + "to": "mod-28add79b36597a8f639320cc", + "type": "depends_on" + }, + { + "from": "mod-a877268ad21d1ba59035ea1f", + "to": "mod-fa9dc053ab761e9fa1b23eca", + "type": "depends_on" + }, + { + "from": "mod-a877268ad21d1ba59035ea1f", + "to": "mod-28ff727efa5c0915d4fbfbe9", + "type": "depends_on" + }, + { + "from": "mod-a877268ad21d1ba59035ea1f", + "to": "mod-28ff727efa5c0915d4fbfbe9", + "type": "depends_on" + }, + { + "from": "mod-a877268ad21d1ba59035ea1f", + "to": "mod-eac0ec2113f231fdec114b7c", + "type": "depends_on" + }, + { + "from": "mod-a877268ad21d1ba59035ea1f", + "to": "mod-eac0ec2113f231fdec114b7c", + "type": "depends_on" + }, + { + "from": "mod-a877268ad21d1ba59035ea1f", + "to": "mod-0ec41645e6ad231f2006c934", + "type": "depends_on" + }, + { + "from": "mod-a877268ad21d1ba59035ea1f", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "sym-8f81b1eefb86ab1c33cc1d76", + "to": "mod-a877268ad21d1ba59035ea1f", + "type": "depends_on" + }, + { + "from": "sym-adb33d12f46d9a08f5ecf324", + "to": "sym-8f81b1eefb86ab1c33cc1d76", + "type": "depends_on" + }, + { + "from": "sym-6f64d68020f1fe3df5c8e9e6", + "to": "sym-8f81b1eefb86ab1c33cc1d76", + "type": "depends_on" + }, + { + "from": "sym-1a2a490aef95273821ccdc0d", + "to": "sym-8f81b1eefb86ab1c33cc1d76", + "type": "depends_on" + }, + { + "from": "sym-f6c819fdb3819f2341dab918", + "to": "sym-8f81b1eefb86ab1c33cc1d76", + "type": "depends_on" + }, + { + "from": "sym-bb4d0afe9c08b0d45f72ea92", + "to": "sym-8f81b1eefb86ab1c33cc1d76", + "type": "depends_on" + }, + { + "from": "sym-5a41fca09ae8208ecfd47a0c", + "to": "sym-8f81b1eefb86ab1c33cc1d76", + "type": "depends_on" + }, + { + "from": "sym-bada2309fd0b6b83697bff29", + "to": "sym-8f81b1eefb86ab1c33cc1d76", + "type": "depends_on" + }, + { + "from": "sym-1d2d03535b4f805902059dc8", + "to": "sym-8f81b1eefb86ab1c33cc1d76", + "type": "depends_on" + }, + { + "from": "sym-a9384b6851bcfa0236066e93", + "to": "sym-8f81b1eefb86ab1c33cc1d76", + "type": "depends_on" + }, + { + "from": "sym-9ef2634fb1ee3a33ea7c36ec", + "to": "sym-8f81b1eefb86ab1c33cc1d76", + "type": "depends_on" + }, + { + "from": "mod-a65de7b43b60edb96e04a5d1", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-a65de7b43b60edb96e04a5d1", + "to": "mod-a877268ad21d1ba59035ea1f", + "type": "depends_on" + }, + { + "from": "mod-a65de7b43b60edb96e04a5d1", + "to": "mod-eac0ec2113f231fdec114b7c", + "type": "depends_on" + }, + { + "from": "mod-a65de7b43b60edb96e04a5d1", + "to": "mod-eff94816a8124a44948e1724", + "type": "depends_on" + }, + { + "from": "mod-a65de7b43b60edb96e04a5d1", + "to": "mod-ee32d301b857ba4c7de679c2", + "type": "depends_on" + }, + { + "from": "sym-904f441fa1a49268b1cef08f", + "to": "mod-a65de7b43b60edb96e04a5d1", + "type": "depends_on" + }, + { + "from": "sym-30817f02ab11a1de7c63c3e4", + "to": "sym-904f441fa1a49268b1cef08f", + "type": "depends_on" + }, + { + "from": "sym-f0e0331218c3df6f87ccf4fc", + "to": "sym-904f441fa1a49268b1cef08f", + "type": "depends_on" + }, + { + "from": "sym-1c217afbacd1399fff13d6db", + "to": "sym-904f441fa1a49268b1cef08f", + "type": "depends_on" + }, + { + "from": "mod-eac0ec2113f231fdec114b7c", + "to": "mod-0ec41645e6ad231f2006c934", + "type": "depends_on" + }, + { + "from": "sym-fc35b6613e7a65cdd4ea5e06", + "to": "mod-eac0ec2113f231fdec114b7c", + "type": "depends_on" + }, + { + "from": "sym-8574fa16baefd1d36d740e08", + "to": "sym-fc35b6613e7a65cdd4ea5e06", + "type": "depends_on" + }, + { + "from": "sym-e057876fb864c3507b96e2ec", + "to": "mod-eac0ec2113f231fdec114b7c", + "type": "depends_on" + }, + { + "from": "sym-e03bc6663c48f335b7e718c0", + "to": "sym-e057876fb864c3507b96e2ec", + "type": "depends_on" + }, + { + "from": "sym-5bd380f96888898be81a62d2", + "to": "mod-eac0ec2113f231fdec114b7c", + "type": "depends_on" + }, + { + "from": "sym-664024d03f5a3eebad0f7ca6", + "to": "sym-5bd380f96888898be81a62d2", + "type": "depends_on" + }, + { + "from": "sym-28e0e30ee3f838c528a8ca6f", + "to": "mod-eac0ec2113f231fdec114b7c", + "type": "depends_on" + }, + { + "from": "sym-9a8d9ad815a0ff16982c54fe", + "to": "sym-28e0e30ee3f838c528a8ca6f", + "type": "depends_on" + }, + { + "from": "sym-8f350d3b1915ecc6427767b3", + "to": "mod-eac0ec2113f231fdec114b7c", + "type": "depends_on" + }, + { + "from": "sym-c315cfc3ad282c2d02ded07c", + "to": "sym-8f350d3b1915ecc6427767b3", + "type": "depends_on" + }, + { + "from": "sym-1e03020c93407a3c93000806", + "to": "mod-eac0ec2113f231fdec114b7c", + "type": "depends_on" + }, + { + "from": "sym-255d674916b5051a77923baf", + "to": "sym-1e03020c93407a3c93000806", + "type": "depends_on" + }, + { + "from": "sym-d004ecd8bd5430d39a4084f0", + "to": "mod-eac0ec2113f231fdec114b7c", + "type": "depends_on" + }, + { + "from": "sym-85b6f3f95870701af130fde6", + "to": "sym-d004ecd8bd5430d39a4084f0", + "type": "depends_on" + }, + { + "from": "sym-0a454006c43bd2d6cb2b165f", + "to": "mod-eac0ec2113f231fdec114b7c", + "type": "depends_on" + }, + { + "from": "sym-3fb22f8b02267a42caee9850", + "to": "mod-eac0ec2113f231fdec114b7c", + "type": "depends_on" + }, + { + "from": "sym-4431cb1bbb71c0fa9d65d5c0", + "to": "mod-eac0ec2113f231fdec114b7c", + "type": "depends_on" + }, + { + "from": "sym-a49b7e959d6c7ec989554af4", + "to": "mod-eac0ec2113f231fdec114b7c", + "type": "depends_on" + }, + { + "from": "sym-12728d553b87eda8baeb8a42", + "to": "mod-f486beaedaf6d01b3f5574b4", + "type": "depends_on" + }, + { + "from": "sym-5a1f2f5309251555b04b8813", + "to": "sym-12728d553b87eda8baeb8a42", + "type": "depends_on" + }, + { + "from": "sym-daf739626627c36496ea6014", + "to": "mod-f486beaedaf6d01b3f5574b4", + "type": "depends_on" + }, + { + "from": "sym-753aa2bc31b78364585e7d9d", + "to": "sym-daf739626627c36496ea6014", + "type": "depends_on" + }, + { + "from": "sym-78928c613b02b7f6c1a80fab", + "to": "mod-f486beaedaf6d01b3f5574b4", + "type": "depends_on" + }, + { + "from": "sym-d0a13459da194a8f53ee0247", + "to": "sym-78928c613b02b7f6c1a80fab", + "type": "depends_on" + }, + { + "from": "sym-819e1e0416b0f28eaf5ed236", + "to": "mod-f486beaedaf6d01b3f5574b4", + "type": "depends_on" + }, + { + "from": "sym-489b5423810e31ea232d4353", + "to": "sym-819e1e0416b0f28eaf5ed236", + "type": "depends_on" + }, + { + "from": "sym-5bb0e442514b6deb156754f7", + "to": "mod-f486beaedaf6d01b3f5574b4", + "type": "depends_on" + }, + { + "from": "sym-b6021c676c4a1f965feff831", + "to": "sym-5bb0e442514b6deb156754f7", + "type": "depends_on" + }, + { + "from": "sym-86050540b5cdafabf655a318", + "to": "mod-f486beaedaf6d01b3f5574b4", + "type": "depends_on" + }, + { + "from": "mod-0ec41645e6ad231f2006c934", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-1a701004046591cc89d802c1", + "to": "mod-0ec41645e6ad231f2006c934", + "type": "depends_on" + }, + { + "from": "sym-6a368152f3da8c7e05d9c3e2", + "to": "sym-1a701004046591cc89d802c1", + "type": "depends_on" + }, + { + "from": "sym-18e29bf3ececed5a786a3220", + "to": "mod-0ec41645e6ad231f2006c934", + "type": "depends_on" + }, + { + "from": "sym-14fff9a7611385fafbfcd369", + "to": "sym-18e29bf3ececed5a786a3220", + "type": "depends_on" + }, + { + "from": "sym-bc80379ae4fb29cd835e4f82", + "to": "mod-0ec41645e6ad231f2006c934", + "type": "depends_on" + }, + { + "from": "sym-08304213d4db7e29a2be6ae5", + "to": "sym-bc80379ae4fb29cd835e4f82", + "type": "depends_on" + }, + { + "from": "sym-ca69d3acc363aa763fbebab6", + "to": "mod-0ec41645e6ad231f2006c934", + "type": "depends_on" + }, + { + "from": "sym-2ac98efb9ef2f047c0723ad4", + "to": "sym-ca69d3acc363aa763fbebab6", + "type": "depends_on" + }, + { + "from": "sym-2e45f8d9367c70fd9ac27d12", + "to": "mod-0ec41645e6ad231f2006c934", + "type": "depends_on" + }, + { + "from": "sym-70f59c14b502b91dab97cc4d", + "to": "sym-2e45f8d9367c70fd9ac27d12", + "type": "depends_on" + }, + { + "from": "sym-f234ca94e0f28862daa8332d", + "to": "mod-0ec41645e6ad231f2006c934", + "type": "depends_on" + }, + { + "from": "sym-a0ddba0f62825b1fb8ce23cc", + "to": "sym-f234ca94e0f28862daa8332d", + "type": "depends_on" + }, + { + "from": "sym-ce29808e8a6ade436f793870", + "to": "mod-0ec41645e6ad231f2006c934", + "type": "depends_on" + }, + { + "from": "sym-98af13518137efa778ae79bc", + "to": "sym-ce29808e8a6ade436f793870", + "type": "depends_on" + }, + { + "from": "sym-9e6b52349458fafbb3157661", + "to": "mod-0ec41645e6ad231f2006c934", + "type": "depends_on" + }, + { + "from": "sym-bc53793db5ee706870868edf", + "to": "sym-9e6b52349458fafbb3157661", + "type": "depends_on" + }, + { + "from": "mod-fa9dc053ab761e9fa1b23eca", + "to": "mod-28ff727efa5c0915d4fbfbe9", + "type": "depends_on" + }, + { + "from": "sym-4ff325a0d88ae90ec4620e7f", + "to": "mod-fa9dc053ab761e9fa1b23eca", + "type": "depends_on" + }, + { + "from": "sym-eed0819744b119afe726ef91", + "to": "sym-4ff325a0d88ae90ec4620e7f", + "type": "depends_on" + }, + { + "from": "sym-4c35acfa5aa3bc6964a871bf", + "to": "mod-fa9dc053ab761e9fa1b23eca", + "type": "depends_on" + }, + { + "from": "sym-43a7d916067ab16295a2da7f", + "to": "sym-4c35acfa5aa3bc6964a871bf", + "type": "depends_on" + }, + { + "from": "sym-f317b708fa9ca031a9e7d8b0", + "to": "mod-fa9dc053ab761e9fa1b23eca", + "type": "depends_on" + }, + { + "from": "sym-a4b0c9eb7b86bd7e222a7d46", + "to": "sym-f317b708fa9ca031a9e7d8b0", + "type": "depends_on" + }, + { + "from": "sym-c02dce70ca17720992e2965a", + "to": "mod-fa9dc053ab761e9fa1b23eca", + "type": "depends_on" + }, + { + "from": "sym-640c35128c28e3dc693f35d9", + "to": "sym-c02dce70ca17720992e2965a", + "type": "depends_on" + }, + { + "from": "sym-acecec26be342c6988a8ba1b", + "to": "mod-fa9dc053ab761e9fa1b23eca", + "type": "depends_on" + }, + { + "from": "sym-7b190b069571083db01583e6", + "to": "sym-acecec26be342c6988a8ba1b", + "type": "depends_on" + }, + { + "from": "sym-06618dbe51dad33d81910717", + "to": "mod-fa9dc053ab761e9fa1b23eca", + "type": "depends_on" + }, + { + "from": "sym-e0482e7dfc65b897da6d1fb5", + "to": "sym-06618dbe51dad33d81910717", + "type": "depends_on" + }, + { + "from": "sym-f8769b7cfd3da0a0ab0300be", + "to": "mod-fa9dc053ab761e9fa1b23eca", + "type": "depends_on" + }, + { + "from": "sym-cae5a2c114b3f66d2987abbc", + "to": "sym-f8769b7cfd3da0a0ab0300be", + "type": "depends_on" + }, + { + "from": "mod-21be8fb976449bbe3589ce47", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-21be8fb976449bbe3589ce47", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-21be8fb976449bbe3589ce47", + "to": "mod-3a3b7b050c56c146875c18fb", + "type": "depends_on" + }, + { + "from": "mod-21be8fb976449bbe3589ce47", + "to": "mod-3f71e0e4e5c692c7690b3c86", + "type": "depends_on" + }, + { + "from": "mod-21be8fb976449bbe3589ce47", + "to": "mod-074e7c12d54384c86eabf721", + "type": "depends_on" + }, + { + "from": "sym-6a88381f69d2ff19513514f9", + "to": "mod-21be8fb976449bbe3589ce47", + "type": "depends_on" + }, + { + "from": "sym-661d03f4e5784c0a2d0b6544", + "to": "sym-6a88381f69d2ff19513514f9", + "type": "depends_on" + }, + { + "from": "sym-41423ec32029e11bd983cf86", + "to": "mod-21be8fb976449bbe3589ce47", + "type": "depends_on" + }, + { + "from": "sym-3ed365637156e5886b2430e1", + "to": "sym-41423ec32029e11bd983cf86", + "type": "depends_on" + }, + { + "from": "sym-0497c0336e7724275dd24b2a", + "to": "mod-21be8fb976449bbe3589ce47", + "type": "depends_on" + }, + { + "from": "sym-32549e20799e67cabed77eb0", + "to": "sym-0497c0336e7724275dd24b2a", + "type": "depends_on" + }, + { + "from": "sym-3ec00abf9378255291f328ba", + "to": "sym-0497c0336e7724275dd24b2a", + "type": "depends_on" + }, + { + "from": "sym-1785290f202a54c64ef008ab", + "to": "sym-0497c0336e7724275dd24b2a", + "type": "depends_on" + }, + { + "from": "sym-acd7986d5b1c15e8a18170eb", + "to": "sym-0497c0336e7724275dd24b2a", + "type": "depends_on" + }, + { + "from": "sym-0b62749220ca3c47b62ccf00", + "to": "sym-0497c0336e7724275dd24b2a", + "type": "depends_on" + }, + { + "from": "sym-12fffd704728885f498c0037", + "to": "sym-0497c0336e7724275dd24b2a", + "type": "depends_on" + }, + { + "from": "sym-bd8984a504446064677a7397", + "to": "sym-0497c0336e7724275dd24b2a", + "type": "depends_on" + }, + { + "from": "sym-bb415a6db3f3be45da09dc82", + "to": "sym-0497c0336e7724275dd24b2a", + "type": "depends_on" + }, + { + "from": "sym-0879b9af4d0e77714361c60e", + "to": "sym-0497c0336e7724275dd24b2a", + "type": "depends_on" + }, + { + "from": "sym-94480ae117d6af9376d303d6", + "to": "sym-0497c0336e7724275dd24b2a", + "type": "depends_on" + }, + { + "from": "sym-86d360eaa4e47e6515361b3e", + "to": "sym-0497c0336e7724275dd24b2a", + "type": "depends_on" + }, + { + "from": "sym-9548b5379a6c8ec675785e23", + "to": "sym-0497c0336e7724275dd24b2a", + "type": "depends_on" + }, + { + "from": "mod-074e7c12d54384c86eabf721", + "to": "mod-21be8fb976449bbe3589ce47", + "type": "depends_on" + }, + { + "from": "mod-074e7c12d54384c86eabf721", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-074e7c12d54384c86eabf721", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-074e7c12d54384c86eabf721", + "to": "mod-5dd7573d658ce3d7ea74353a", + "type": "depends_on" + }, + { + "from": "sym-eeadc99e419ca0c544740317", + "to": "mod-074e7c12d54384c86eabf721", + "type": "depends_on" + }, + { + "from": "sym-b4f76041f6f542375c7208ae", + "to": "sym-eeadc99e419ca0c544740317", + "type": "depends_on" + }, + { + "from": "sym-f3979d567f5fd32def4d8855", + "to": "sym-eeadc99e419ca0c544740317", + "type": "depends_on" + }, + { + "from": "sym-ade643bdd7cda96b430e99d4", + "to": "sym-eeadc99e419ca0c544740317", + "type": "depends_on" + }, + { + "from": "sym-1a7ef26a3c84b1bb6f1319af", + "to": "sym-eeadc99e419ca0c544740317", + "type": "depends_on" + }, + { + "from": "sym-3c3d12eee32c244255ef9b32", + "to": "sym-eeadc99e419ca0c544740317", + "type": "depends_on" + }, + { + "from": "sym-272f439f60fc2a0765247475", + "to": "sym-eeadc99e419ca0c544740317", + "type": "depends_on" + }, + { + "from": "sym-a9848a76b049f852ff3d7ce3", + "to": "sym-eeadc99e419ca0c544740317", + "type": "depends_on" + }, + { + "from": "sym-1f1368eeff0182700d9dcd10", + "to": "sym-eeadc99e419ca0c544740317", + "type": "depends_on" + }, + { + "from": "sym-578657e21b5a3a4d127afbcb", + "to": "sym-eeadc99e419ca0c544740317", + "type": "depends_on" + }, + { + "from": "sym-1e186c591f76fa97520879c1", + "to": "sym-eeadc99e419ca0c544740317", + "type": "depends_on" + }, + { + "from": "sym-7ff87e8fc66ad36a882a3021", + "to": "sym-eeadc99e419ca0c544740317", + "type": "depends_on" + }, + { + "from": "sym-1639a75acd50f9d99a2e547c", + "to": "sym-eeadc99e419ca0c544740317", + "type": "depends_on" + }, + { + "from": "sym-b76ed554a4cca4a4bcc88e54", + "to": "sym-eeadc99e419ca0c544740317", + "type": "depends_on" + }, + { + "from": "sym-1a10700034b2fee76fa42e9e", + "to": "sym-eeadc99e419ca0c544740317", + "type": "depends_on" + }, + { + "from": "sym-5885524573626c72a4d28772", + "to": "sym-eeadc99e419ca0c544740317", + "type": "depends_on" + }, + { + "from": "sym-3bdf2ba8edf49dedd17d9ee9", + "to": "sym-eeadc99e419ca0c544740317", + "type": "depends_on" + }, + { + "from": "sym-93ff6928b9f6bcb407e8acec", + "to": "sym-eeadc99e419ca0c544740317", + "type": "depends_on" + }, + { + "from": "sym-809f75f515541b77a78044ad", + "to": "sym-eeadc99e419ca0c544740317", + "type": "depends_on" + }, + { + "from": "sym-517ad4280b63bf24958ad374", + "to": "sym-eeadc99e419ca0c544740317", + "type": "depends_on" + }, + { + "from": "sym-817fe42ff9a8d09ce64b56d0", + "to": "sym-eeadc99e419ca0c544740317", + "type": "depends_on" + }, + { + "from": "sym-9637ce234a9fed75eecebc9f", + "to": "sym-eeadc99e419ca0c544740317", + "type": "depends_on" + }, + { + "from": "sym-84bcdc73a52cba5c012302b0", + "to": "sym-eeadc99e419ca0c544740317", + "type": "depends_on" + }, + { + "from": "sym-bdddd2117e2db154d9a4c598", + "to": "sym-eeadc99e419ca0c544740317", + "type": "depends_on" + }, + { + "from": "sym-0fa2de08eb318625daca5c60", + "to": "sym-eeadc99e419ca0c544740317", + "type": "depends_on" + }, + { + "from": "mod-f6d94e4d95aaab72efaa757c", + "to": "mod-21be8fb976449bbe3589ce47", + "type": "depends_on" + }, + { + "from": "mod-f6d94e4d95aaab72efaa757c", + "to": "mod-074e7c12d54384c86eabf721", + "type": "depends_on" + }, + { + "from": "sym-6e00d04229c1802756b1975f", + "to": "mod-f6d94e4d95aaab72efaa757c", + "type": "depends_on" + }, + { + "from": "sym-a6ab1495ce4987876fc9f25f", + "to": "mod-f6d94e4d95aaab72efaa757c", + "type": "depends_on" + }, + { + "from": "mod-94b639d8e332eed46da2f8af", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-94b639d8e332eed46da2f8af", + "to": "mod-21be8fb976449bbe3589ce47", + "type": "depends_on" + }, + { + "from": "mod-c16d69bfcfaea5546b2859a7", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-c16d69bfcfaea5546b2859a7", + "to": "mod-074e7c12d54384c86eabf721", + "type": "depends_on" + }, + { + "from": "mod-c16d69bfcfaea5546b2859a7", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "sym-183e357d6e4b9fc61cb96c84", + "to": "mod-c16d69bfcfaea5546b2859a7", + "type": "depends_on" + }, + { + "from": "mod-570eac54a9d81c36302eb6d0", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-570eac54a9d81c36302eb6d0", + "to": "mod-a5c28a9abc4da2bd27d3cbb4", + "type": "depends_on" + }, + { + "from": "mod-570eac54a9d81c36302eb6d0", + "to": "mod-21be8fb976449bbe3589ce47", + "type": "depends_on" + }, + { + "from": "mod-570eac54a9d81c36302eb6d0", + "to": "mod-3f71e0e4e5c692c7690b3c86", + "type": "depends_on" + }, + { + "from": "sym-1b1b238c239648c3a26135b1", + "to": "mod-570eac54a9d81c36302eb6d0", + "type": "depends_on" + }, + { + "from": "mod-a216d9e19ade66b2cdd92076", + "to": "mod-3f71e0e4e5c692c7690b3c86", + "type": "depends_on" + }, + { + "from": "mod-a216d9e19ade66b2cdd92076", + "to": "mod-21be8fb976449bbe3589ce47", + "type": "depends_on" + }, + { + "from": "mod-a216d9e19ade66b2cdd92076", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-a216d9e19ade66b2cdd92076", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-0391b851d3e5a4718b2228d0", + "to": "mod-a216d9e19ade66b2cdd92076", + "type": "depends_on" + }, + { + "from": "sym-326a78cdb13b0efab268273b", + "to": "mod-a216d9e19ade66b2cdd92076", + "type": "depends_on" + }, + { + "from": "mod-33ee18e613fc6fedad6673e0", + "to": "mod-21be8fb976449bbe3589ce47", + "type": "depends_on" + }, + { + "from": "mod-33ee18e613fc6fedad6673e0", + "to": "mod-074e7c12d54384c86eabf721", + "type": "depends_on" + }, + { + "from": "sym-a206dfbda18fedfe73a5ad0e", + "to": "mod-33ee18e613fc6fedad6673e0", + "type": "depends_on" + }, + { + "from": "mod-c85a25b09fa10c16a8188ca0", + "to": "mod-21be8fb976449bbe3589ce47", + "type": "depends_on" + }, + { + "from": "mod-c85a25b09fa10c16a8188ca0", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-c85a25b09fa10c16a8188ca0", + "to": "mod-074e7c12d54384c86eabf721", + "type": "depends_on" + }, + { + "from": "mod-c85a25b09fa10c16a8188ca0", + "to": "mod-84552d58b6743daab10f83b3", + "type": "depends_on" + }, + { + "from": "mod-c85a25b09fa10c16a8188ca0", + "to": "mod-a216d9e19ade66b2cdd92076", + "type": "depends_on" + }, + { + "from": "mod-c85a25b09fa10c16a8188ca0", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "sym-10146aed3ff6460f03348bd6", + "to": "mod-c85a25b09fa10c16a8188ca0", + "type": "depends_on" + }, + { + "from": "mod-dcce6518be2af59c2b776acc", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-dcce6518be2af59c2b776acc", + "to": "mod-21be8fb976449bbe3589ce47", + "type": "depends_on" + }, + { + "from": "mod-dcce6518be2af59c2b776acc", + "to": "mod-074e7c12d54384c86eabf721", + "type": "depends_on" + }, + { + "from": "mod-dcce6518be2af59c2b776acc", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-dcce6518be2af59c2b776acc", + "to": "mod-84552d58b6743daab10f83b3", + "type": "depends_on" + }, + { + "from": "sym-ee248ef99b44bf2044c37a34", + "to": "mod-dcce6518be2af59c2b776acc", + "type": "depends_on" + }, + { + "from": "mod-90e071af56fbf11e5911520b", + "to": "mod-52720c35cbea3e8d81ae7a70", + "type": "depends_on" + }, + { + "from": "sym-c2d8b5b28fe3cc41329f99cb", + "to": "mod-90e071af56fbf11e5911520b", + "type": "depends_on" + }, + { + "from": "sym-dc58d63e979e42e358b16ea6", + "to": "mod-90e071af56fbf11e5911520b", + "type": "depends_on" + }, + { + "from": "sym-75f6a2f7f2ad31c317cf79f8", + "to": "mod-90e071af56fbf11e5911520b", + "type": "depends_on" + }, + { + "from": "sym-1bf49566faed1da0dcba3009", + "to": "mod-90e071af56fbf11e5911520b", + "type": "depends_on" + }, + { + "from": "sym-84993bf3e876f664101fcc17", + "to": "mod-90e071af56fbf11e5911520b", + "type": "depends_on" + }, + { + "from": "sym-d562c23ff661fbe0ef42089b", + "to": "mod-90e071af56fbf11e5911520b", + "type": "depends_on" + }, + { + "from": "sym-d23312505c23fae4dc06be00", + "to": "mod-90e071af56fbf11e5911520b", + "type": "depends_on" + }, + { + "from": "sym-9901aa04325b7f6c0903f9f4", + "to": "mod-90e071af56fbf11e5911520b", + "type": "depends_on" + }, + { + "from": "sym-78fc7f8b4ac08f8070f840bb", + "to": "mod-90e071af56fbf11e5911520b", + "type": "depends_on" + }, + { + "from": "sym-17f82be72583b24d6d13609c", + "to": "mod-90e071af56fbf11e5911520b", + "type": "depends_on" + }, + { + "from": "sym-eca13e9d4bd164b366b683d1", + "to": "mod-90e071af56fbf11e5911520b", + "type": "depends_on" + }, + { + "from": "sym-ef0f5bfd816bc229c72e0c35", + "to": "mod-90e071af56fbf11e5911520b", + "type": "depends_on" + }, + { + "from": "sym-1ffe30e3f9e9ec69de0b043f", + "to": "mod-90e071af56fbf11e5911520b", + "type": "depends_on" + }, + { + "from": "sym-8a2eac9723e69b529c4e0514", + "to": "mod-90e071af56fbf11e5911520b", + "type": "depends_on" + }, + { + "from": "mod-52720c35cbea3e8d81ae7a70", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-52720c35cbea3e8d81ae7a70", + "to": "mod-84552d58b6743daab10f83b3", + "type": "depends_on" + }, + { + "from": "sym-c6bb3135c8146d1451aae8cd", + "to": "mod-52720c35cbea3e8d81ae7a70", + "type": "depends_on" + }, + { + "from": "sym-ad5a2bb922e635e167b0a1f7", + "to": "sym-c6bb3135c8146d1451aae8cd", + "type": "depends_on" + }, + { + "from": "sym-0ac6a67e5c7935ee3500dadd", + "to": "mod-52720c35cbea3e8d81ae7a70", + "type": "depends_on" + }, + { + "from": "sym-6b9cfbe2d7820383823fdee2", + "to": "sym-0ac6a67e5c7935ee3500dadd", + "type": "depends_on" + }, + { + "from": "sym-096ad0f73e0e17beacb24c4a", + "to": "mod-52720c35cbea3e8d81ae7a70", + "type": "depends_on" + }, + { + "from": "sym-f85858789af68b90715a0e59", + "to": "sym-096ad0f73e0e17beacb24c4a", + "type": "depends_on" + }, + { + "from": "sym-2fa24d97f88754f23868ed8a", + "to": "mod-52720c35cbea3e8d81ae7a70", + "type": "depends_on" + }, + { + "from": "sym-432492a10ef3e4316486ffdc", + "to": "sym-2fa24d97f88754f23868ed8a", + "type": "depends_on" + }, + { + "from": "sym-dda27ab76638052e234613e4", + "to": "mod-52720c35cbea3e8d81ae7a70", + "type": "depends_on" + }, + { + "from": "sym-dbd3b3d0c2d3155a70a21f71", + "to": "sym-dda27ab76638052e234613e4", + "type": "depends_on" + }, + { + "from": "sym-7070f715178072511180d1ae", + "to": "mod-52720c35cbea3e8d81ae7a70", + "type": "depends_on" + }, + { + "from": "sym-51133611d7e6c5e4b505bc99", + "to": "sym-7070f715178072511180d1ae", + "type": "depends_on" + }, + { + "from": "sym-28ad78be84afd8498d0ee4b4", + "to": "mod-52720c35cbea3e8d81ae7a70", + "type": "depends_on" + }, + { + "from": "sym-41e55f80f40f455b49fcf88c", + "to": "sym-28ad78be84afd8498d0ee4b4", + "type": "depends_on" + }, + { + "from": "sym-470f39829bffe7893f2ea0e2", + "to": "mod-52720c35cbea3e8d81ae7a70", + "type": "depends_on" + }, + { + "from": "sym-fcef4fc2c1ba7fcc07b60612", + "to": "sym-470f39829bffe7893f2ea0e2", + "type": "depends_on" + }, + { + "from": "sym-ed9fcd140ea0db08b16f717b", + "to": "mod-52720c35cbea3e8d81ae7a70", + "type": "depends_on" + }, + { + "from": "sym-dc57077c3f71cf5583df43ba", + "to": "mod-52720c35cbea3e8d81ae7a70", + "type": "depends_on" + }, + { + "from": "sym-d75c9f3079017aca76e583c6", + "to": "mod-52720c35cbea3e8d81ae7a70", + "type": "depends_on" + }, + { + "from": "sym-ce938bb3c92c54f842d83329", + "to": "mod-52720c35cbea3e8d81ae7a70", + "type": "depends_on" + }, + { + "from": "sym-e2d1e70a3d514491ae4cb58d", + "to": "mod-52720c35cbea3e8d81ae7a70", + "type": "depends_on" + }, + { + "from": "sym-a9987febfc88a0ffd7f1c055", + "to": "mod-52720c35cbea3e8d81ae7a70", + "type": "depends_on" + }, + { + "from": "sym-a9987febfc88a0ffd7f1c055", + "to": "sym-d75c9f3079017aca76e583c6", + "type": "calls" + }, + { + "from": "sym-a9987febfc88a0ffd7f1c055", + "to": "sym-e2d1e70a3d514491ae4cb58d", + "type": "calls" + }, + { + "from": "mod-f67afbbcc2c394e0b6549ff8", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-f67afbbcc2c394e0b6549ff8", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-27e8f46173445442055bad50", + "to": "mod-f67afbbcc2c394e0b6549ff8", + "type": "depends_on" + }, + { + "from": "sym-51fdc77527108ef2abcc0f25", + "to": "mod-f67afbbcc2c394e0b6549ff8", + "type": "depends_on" + }, + { + "from": "sym-4f4a52a70377dfe5c3548f1a", + "to": "mod-1275104cbadf8ae764bfc2cd", + "type": "depends_on" + }, + { + "from": "sym-e03296c834ef296a8caa23db", + "to": "sym-4f4a52a70377dfe5c3548f1a", + "type": "depends_on" + }, + { + "from": "sym-9993f577e1770fb7b5e38ecf", + "to": "sym-4f4a52a70377dfe5c3548f1a", + "type": "depends_on" + }, + { + "from": "sym-91687f17412aca4f5193a902", + "to": "sym-4f4a52a70377dfe5c3548f1a", + "type": "depends_on" + }, + { + "from": "sym-7d2f7a0b1cf0caf34582b977", + "to": "sym-4f4a52a70377dfe5c3548f1a", + "type": "depends_on" + }, + { + "from": "mod-4dda3c12aae4a0b02bbb9bc6", + "to": "mod-84552d58b6743daab10f83b3", + "type": "depends_on" + }, + { + "from": "mod-4dda3c12aae4a0b02bbb9bc6", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-4dda3c12aae4a0b02bbb9bc6", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-4dda3c12aae4a0b02bbb9bc6", + "to": "mod-1de8a1fb6a48c6a931549f30", + "type": "depends_on" + }, + { + "from": "sym-77e5e7993b25576d2999ea8c", + "to": "mod-4dda3c12aae4a0b02bbb9bc6", + "type": "depends_on" + }, + { + "from": "sym-900a6338c5478895e2c4742e", + "to": "sym-77e5e7993b25576d2999ea8c", + "type": "depends_on" + }, + { + "from": "sym-3d99231a3655eb0dd8af0e2b", + "to": "mod-4dda3c12aae4a0b02bbb9bc6", + "type": "depends_on" + }, + { + "from": "sym-a5b4619fea543f605234aa1b", + "to": "mod-4dda3c12aae4a0b02bbb9bc6", + "type": "depends_on" + }, + { + "from": "sym-b726a947efed2cf0a17e7409", + "to": "mod-4dda3c12aae4a0b02bbb9bc6", + "type": "depends_on" + }, + { + "from": "sym-4069525e6763cbd7833a89b5", + "to": "mod-4dda3c12aae4a0b02bbb9bc6", + "type": "depends_on" + }, + { + "from": "sym-de1d440563386a4ef7ff5f5b", + "to": "mod-4dda3c12aae4a0b02bbb9bc6", + "type": "depends_on" + }, + { + "from": "sym-9fa63f30b350e32bba75f730", + "to": "mod-01f50a9581dc3e727fc130d5", + "type": "depends_on" + }, + { + "from": "sym-3643b3470e0f5a5599a17396", + "to": "sym-9fa63f30b350e32bba75f730", + "type": "depends_on" + }, + { + "from": "sym-490d48113345917bc5a63921", + "to": "sym-9fa63f30b350e32bba75f730", + "type": "depends_on" + }, + { + "from": "sym-d3adbd4ce3535aa69f189242", + "to": "sym-9fa63f30b350e32bba75f730", + "type": "depends_on" + }, + { + "from": "mod-7450e07dbc1823bd1d8e3fe2", + "to": "mod-ff98cde0370b2a3126edc022", + "type": "depends_on" + }, + { + "from": "mod-7450e07dbc1823bd1d8e3fe2", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-7450e07dbc1823bd1d8e3fe2", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-704450fa33a12221e2776326", + "to": "mod-7450e07dbc1823bd1d8e3fe2", + "type": "depends_on" + }, + { + "from": "sym-682e20b92410fcede30f0021", + "to": "sym-704450fa33a12221e2776326", + "type": "depends_on" + }, + { + "from": "sym-07e2d8617467f36ebce4c401", + "to": "sym-704450fa33a12221e2776326", + "type": "depends_on" + }, + { + "from": "sym-7b19cb835cde652ea2d4b818", + "to": "sym-704450fa33a12221e2776326", + "type": "depends_on" + }, + { + "from": "sym-e8f822cf4eeae4222e624550", + "to": "sym-704450fa33a12221e2776326", + "type": "depends_on" + }, + { + "from": "sym-36d1d3f62671a7f649aad1f4", + "to": "sym-704450fa33a12221e2776326", + "type": "depends_on" + }, + { + "from": "mod-8d759e4c7b88f1b808059f1c", + "to": "mod-9acd412d29faec50fbeccd6a", + "type": "depends_on" + }, + { + "from": "mod-8d759e4c7b88f1b808059f1c", + "to": "mod-3a5d1ce49d5562fbff9b9306", + "type": "depends_on" + }, + { + "from": "mod-8d759e4c7b88f1b808059f1c", + "to": "mod-1275104cbadf8ae764bfc2cd", + "type": "depends_on" + }, + { + "from": "sym-51ed75590fc88559bcdd99a5", + "to": "mod-8d759e4c7b88f1b808059f1c", + "type": "depends_on" + }, + { + "from": "sym-7f9193fb325d05e4b86c1af4", + "to": "mod-8d759e4c7b88f1b808059f1c", + "type": "depends_on" + }, + { + "from": "sym-85a1a933e82bfe8a1a6f86cf", + "to": "mod-8d759e4c7b88f1b808059f1c", + "type": "depends_on" + }, + { + "from": "mod-3a5d1ce49d5562fbff9b9306", + "to": "mod-12d77c813504670328c9b4f1", + "type": "depends_on" + }, + { + "from": "mod-3a5d1ce49d5562fbff9b9306", + "to": "mod-1de8a1fb6a48c6a931549f30", + "type": "depends_on" + }, + { + "from": "mod-3a5d1ce49d5562fbff9b9306", + "to": "mod-a5c28a9abc4da2bd27d3cbb4", + "type": "depends_on" + }, + { + "from": "sym-009fe89cf915be1693de1c3c", + "to": "mod-3a5d1ce49d5562fbff9b9306", + "type": "depends_on" + }, + { + "from": "mod-9acd412d29faec50fbeccd6a", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-eb488aa202c169568fd9a0f5", + "to": "mod-9acd412d29faec50fbeccd6a", + "type": "depends_on" + }, + { + "from": "mod-e89fa4423bde3e1df39acf0e", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-80ff82c43058ee3abb67247d", + "to": "mod-ff98cde0370b2a3126edc022", + "type": "depends_on" + }, + { + "from": "sym-e1fcd597c2ed4ecc8eebea8b", + "to": "mod-80ff82c43058ee3abb67247d", + "type": "depends_on" + }, + { + "from": "mod-16a76d1c87dfcbecec53d1e0", + "to": "mod-edb169ce79c580ad64535bf1", + "type": "depends_on" + }, + { + "from": "sym-f8f1b8ece68bb301d37853b4", + "to": "mod-16a76d1c87dfcbecec53d1e0", + "type": "depends_on" + }, + { + "from": "sym-7e6731647346994ea09b3100", + "to": "mod-16a76d1c87dfcbecec53d1e0", + "type": "depends_on" + }, + { + "from": "sym-273a3bb08cf959b425025d19", + "to": "mod-c20c965c5562cff684a7448f", + "type": "depends_on" + }, + { + "from": "sym-fa1a915f1e8443b44b343ab0", + "to": "sym-273a3bb08cf959b425025d19", + "type": "depends_on" + }, + { + "from": "sym-31925771acdffdf321dbfcd2", + "to": "mod-81f4b7f4c2872e1255eeab2b", + "type": "depends_on" + }, + { + "from": "sym-e6c769e5bb3cfb82f5aa433b", + "to": "sym-31925771acdffdf321dbfcd2", + "type": "depends_on" + }, + { + "from": "mod-9e7f56ec932ce908db2b6d6e", + "to": "mod-24557f0b00a0d628de80e5eb", + "type": "depends_on" + }, + { + "from": "sym-11fa9facc95211cb9965cbe9", + "to": "mod-9e7f56ec932ce908db2b6d6e", + "type": "depends_on" + }, + { + "from": "sym-9f5368fd7c3327b9a0371d11", + "to": "sym-11fa9facc95211cb9965cbe9", + "type": "depends_on" + }, + { + "from": "mod-786d72f288c1067b50b58d19", + "to": "mod-24557f0b00a0d628de80e5eb", + "type": "depends_on" + }, + { + "from": "sym-3e265dc44fcae446b81692d2", + "to": "mod-786d72f288c1067b50b58d19", + "type": "depends_on" + }, + { + "from": "sym-3315efc63ad9d0fb4f02984d", + "to": "sym-3e265dc44fcae446b81692d2", + "type": "depends_on" + }, + { + "from": "sym-90952e192029ad3314e72b78", + "to": "mod-786d72f288c1067b50b58d19", + "type": "depends_on" + }, + { + "from": "sym-4cf291b0bfd4bf7301073577", + "to": "sym-90952e192029ad3314e72b78", + "type": "depends_on" + }, + { + "from": "sym-bc26298182cffd2f040a7fae", + "to": "mod-786d72f288c1067b50b58d19", + "type": "depends_on" + }, + { + "from": "sym-581811b0ab0948b5c77ee25b", + "to": "sym-bc26298182cffd2f040a7fae", + "type": "depends_on" + }, + { + "from": "sym-d7707cb16f292d46163b119c", + "to": "mod-dc4c1cf1104faf408e942485", + "type": "depends_on" + }, + { + "from": "sym-218c97e2732ce0f4288eea2b", + "to": "sym-d7707cb16f292d46163b119c", + "type": "depends_on" + }, + { + "from": "sym-f931d21daeae8267bd2a3672", + "to": "mod-db1374491b6a82aa10a4e2f5", + "type": "depends_on" + }, + { + "from": "sym-9e2540c9a28f6b2baa412870", + "to": "sym-f931d21daeae8267bd2a3672", + "type": "depends_on" + }, + { + "from": "mod-e3c2dc56fd38d656d5235000", + "to": "mod-24557f0b00a0d628de80e5eb", + "type": "depends_on" + }, + { + "from": "sym-f9e58c36e26f3179ae66e51b", + "to": "mod-e3c2dc56fd38d656d5235000", + "type": "depends_on" + }, + { + "from": "sym-32c67ccf53645c1c5dd20c2f", + "to": "sym-f9e58c36e26f3179ae66e51b", + "type": "depends_on" + }, + { + "from": "sym-9a4fcacf7bad77db5516aebe", + "to": "mod-f070f31fd907efb13c1863dc", + "type": "depends_on" + }, + { + "from": "sym-661263dc9f108fc8dfbe2edb", + "to": "sym-9a4fcacf7bad77db5516aebe", + "type": "depends_on" + }, + { + "from": "sym-b669e2e1ce53f44203a8e3bc", + "to": "mod-4700c8f714ccf0e905a08548", + "type": "depends_on" + }, + { + "from": "sym-da9c02d35d28f02067af7242", + "to": "sym-b669e2e1ce53f44203a8e3bc", + "type": "depends_on" + }, + { + "from": "sym-851653e97eff490ca57f6fae", + "to": "mod-7b1b348ef9728f14361d546b", + "type": "depends_on" + }, + { + "from": "sym-c28c0fb32a4c66f8f59399f8", + "to": "sym-851653e97eff490ca57f6fae", + "type": "depends_on" + }, + { + "from": "sym-87354513813df45f7bae9436", + "to": "mod-08bf03fa93f7e9b593a27d85", + "type": "depends_on" + }, + { + "from": "sym-a12c2af51d9be861b946bf8a", + "to": "sym-87354513813df45f7bae9436", + "type": "depends_on" + }, + { + "from": "sym-f55ae29e0c44c841e86925cd", + "to": "mod-0ccdf7c27874394c1e667fec", + "type": "depends_on" + }, + { + "from": "sym-9d8a4d5edc2a9113cfe92b59", + "to": "sym-f55ae29e0c44c841e86925cd", + "type": "depends_on" + }, + { + "from": "sym-b687ce25ee01734bed3a9734", + "to": "mod-7421cc24ed6c5406e86d1752", + "type": "depends_on" + }, + { + "from": "sym-bbaaf5c619b0e3e00385a5ec", + "to": "sym-b687ce25ee01734bed3a9734", + "type": "depends_on" + }, + { + "from": "sym-b38c644fc6d294d21e0b92fe", + "to": "mod-fdc4ea4eee14d55af206496c", + "type": "depends_on" + }, + { + "from": "sym-abe2545e9c2ebd54c099a28d", + "to": "sym-b38c644fc6d294d21e0b92fe", + "type": "depends_on" + }, + { + "from": "sym-52fb32ee859d9bfa08437a4a", + "to": "mod-fdc4ea4eee14d55af206496c", + "type": "depends_on" + }, + { + "from": "sym-394db654ca55a7ce952cadba", + "to": "sym-52fb32ee859d9bfa08437a4a", + "type": "depends_on" + }, + { + "from": "sym-37183cf62db7f8f1984bc448", + "to": "mod-193629267f30c2895ef15b17", + "type": "depends_on" + }, + { + "from": "sym-d293748a5d5f76087f5cfc4d", + "to": "sym-37183cf62db7f8f1984bc448", + "type": "depends_on" + }, + { + "from": "sym-817dd1dc2a1ba735addc3c06", + "to": "mod-fbadd87a5bc2c6b89edc84bf", + "type": "depends_on" + }, + { + "from": "sym-e27c9724ee7cdd1968538619", + "to": "sym-817dd1dc2a1ba735addc3c06", + "type": "depends_on" + }, + { + "from": "sym-ba02a04f4880a609013cceb4", + "to": "mod-edb169ce79c580ad64535bf1", + "type": "depends_on" + }, + { + "from": "sym-1685a05c77c5b9538f2d6f6e", + "to": "sym-ba02a04f4880a609013cceb4", + "type": "depends_on" + }, + { + "from": "sym-97f5211aee4fd55dffefc0f4", + "to": "mod-97abb7050d49b46b468439ff", + "type": "depends_on" + }, + { + "from": "sym-ae2a9b9fa48d29e5c53f6315", + "to": "sym-97f5211aee4fd55dffefc0f4", + "type": "depends_on" + }, + { + "from": "sym-b52cab11144006e9acefd1dc", + "to": "mod-205c88f6af728bd7b4ebc280", + "type": "depends_on" + }, + { + "from": "sym-6717edaabd144f47f1841978", + "to": "sym-b52cab11144006e9acefd1dc", + "type": "depends_on" + }, + { + "from": "sym-35c46231b7bc7e15f6fd6d3f", + "to": "mod-81f929d30b493e5a0e7c38e7", + "type": "depends_on" + }, + { + "from": "sym-11e4601dc05715cd7d6f7b40", + "to": "sym-35c46231b7bc7e15f6fd6d3f", + "type": "depends_on" + }, + { + "from": "sym-7e3e2f730f05083adf736213", + "to": "mod-24557f0b00a0d628de80e5eb", + "type": "depends_on" + }, + { + "from": "sym-b68535929d68ca1588c954d8", + "to": "sym-7e3e2f730f05083adf736213", + "type": "depends_on" + }, + { + "from": "sym-59bf9a4e447c40f8b0baca83", + "to": "mod-24557f0b00a0d628de80e5eb", + "type": "depends_on" + }, + { + "from": "sym-a23822177d9cbf28a5e2874d", + "to": "sym-59bf9a4e447c40f8b0baca83", + "type": "depends_on" + }, + { + "from": "sym-8ff3fa0da48c6a51968f7cdd", + "to": "mod-24557f0b00a0d628de80e5eb", + "type": "depends_on" + }, + { + "from": "sym-b76bb78b92b2a5e28bd022a1", + "to": "sym-8ff3fa0da48c6a51968f7cdd", + "type": "depends_on" + }, + { + "from": "sym-f46b4d4547c9976189a5969a", + "to": "mod-24557f0b00a0d628de80e5eb", + "type": "depends_on" + }, + { + "from": "sym-50b53dc25f5cb1b69d653b9b", + "to": "sym-f46b4d4547c9976189a5969a", + "type": "depends_on" + }, + { + "from": "sym-1ee5c28fcddc2de7a3b145cd", + "to": "mod-24557f0b00a0d628de80e5eb", + "type": "depends_on" + }, + { + "from": "sym-0744fffce72263b25b57ae9c", + "to": "sym-1ee5c28fcddc2de7a3b145cd", + "type": "depends_on" + }, + { + "from": "sym-6b1a819551d2749fcdcaebb8", + "to": "mod-24557f0b00a0d628de80e5eb", + "type": "depends_on" + }, + { + "from": "sym-90cda6a95c5811e344c7d7ca", + "to": "sym-6b1a819551d2749fcdcaebb8", + "type": "depends_on" + }, + { + "from": "sym-09674205f4dd1e66aa3a00c9", + "to": "mod-24557f0b00a0d628de80e5eb", + "type": "depends_on" + }, + { + "from": "sym-4ce8fd563a7ed5439d625943", + "to": "sym-09674205f4dd1e66aa3a00c9", + "type": "depends_on" + }, + { + "from": "mod-f02071779c134bf1f3cd986f", + "to": "mod-508ea55e640ac463afeb7e81", + "type": "depends_on" + }, + { + "from": "mod-7934829c1407caf63ff17dbb", + "to": "mod-508ea55e640ac463afeb7e81", + "type": "depends_on" + }, + { + "from": "mod-8205b641d5e954ae76b97abb", + "to": "mod-292e8f8c5a666fd4318d4859", + "type": "depends_on" + }, + { + "from": "mod-5e2ab8dff60a96c7ee548337", + "to": "mod-1de8a1fb6a48c6a931549f30", + "type": "depends_on" + }, + { + "from": "mod-5e2ab8dff60a96c7ee548337", + "to": "mod-b5a2bbfcc551f4a8277420d0", + "type": "depends_on" + }, + { + "from": "mod-5e2ab8dff60a96c7ee548337", + "to": "mod-d46e3dca63550b5d88963cef", + "type": "depends_on" + }, + { + "from": "mod-d46e3dca63550b5d88963cef", + "to": "mod-12d77c813504670328c9b4f1", + "type": "depends_on" + }, + { + "from": "mod-d46e3dca63550b5d88963cef", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "mod-d46e3dca63550b5d88963cef", + "to": "mod-91c215ca923f83144b68d625", + "type": "depends_on" + }, + { + "from": "mod-d46e3dca63550b5d88963cef", + "to": "mod-1de8a1fb6a48c6a931549f30", + "type": "depends_on" + }, + { + "from": "mod-d46e3dca63550b5d88963cef", + "to": "mod-3a3b7b050c56c146875c18fb", + "type": "depends_on" + }, + { + "from": "mod-d46e3dca63550b5d88963cef", + "to": "mod-84552d58b6743daab10f83b3", + "type": "depends_on" + }, + { + "from": "mod-d46e3dca63550b5d88963cef", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "sym-0ac70d873414c331ce910f6d", + "to": "mod-d46e3dca63550b5d88963cef", + "type": "depends_on" + }, + { + "from": "sym-0c9acc5940a82087d8399864", + "to": "sym-0ac70d873414c331ce910f6d", + "type": "depends_on" + }, + { + "from": "sym-f3743738bcabc5b59659d442", + "to": "sym-0ac70d873414c331ce910f6d", + "type": "depends_on" + }, + { + "from": "sym-688bcc85271dede8317525a4", + "to": "sym-0ac70d873414c331ce910f6d", + "type": "depends_on" + }, + { + "from": "sym-0da3c2c2c043289abfb4e4c4", + "to": "sym-0ac70d873414c331ce910f6d", + "type": "depends_on" + }, + { + "from": "sym-7e8dfc0604be1a84071b6545", + "to": "mod-aedcf7cff384ad96bb4dd624", + "type": "depends_on" + }, + { + "from": "sym-7a48994bdf441ad2593ddeeb", + "to": "sym-7e8dfc0604be1a84071b6545", + "type": "depends_on" + }, + { + "from": "sym-6914083e3bf3fbedbec2224e", + "to": "mod-aedcf7cff384ad96bb4dd624", + "type": "depends_on" + }, + { + "from": "sym-f7ebe48c44eac8606e31e9ed", + "to": "sym-6914083e3bf3fbedbec2224e", + "type": "depends_on" + }, + { + "from": "sym-4dcfdaff3d358f5913dd0fe3", + "to": "mod-aedcf7cff384ad96bb4dd624", + "type": "depends_on" + }, + { + "from": "mod-aec11f5957298897d75000d1", + "to": "mod-ff98cde0370b2a3126edc022", + "type": "depends_on" + }, + { + "from": "mod-aec11f5957298897d75000d1", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-4b87c6bde0ba6922be1ab091", + "to": "mod-aec11f5957298897d75000d1", + "type": "depends_on" + }, + { + "from": "mod-9efb2c33ee124a3e24fea523", + "to": "mod-8b99d278a4bd1dda5f119d4b", + "type": "depends_on" + }, + { + "from": "sym-590ef991f7c0feb60db38948", + "to": "mod-9efb2c33ee124a3e24fea523", + "type": "depends_on" + }, + { + "from": "sym-fdc6a680519985c47038e2a5", + "to": "sym-590ef991f7c0feb60db38948", + "type": "depends_on" + }, + { + "from": "sym-613fa096bf763d0acf01da9b", + "to": "sym-590ef991f7c0feb60db38948", + "type": "depends_on" + }, + { + "from": "sym-8766b00e6fa3be7a2892fe99", + "to": "sym-590ef991f7c0feb60db38948", + "type": "depends_on" + }, + { + "from": "sym-8799af631ff3a4143d43a850", + "to": "sym-590ef991f7c0feb60db38948", + "type": "depends_on" + }, + { + "from": "sym-54138acd411fe89df0e2c98c", + "to": "sym-590ef991f7c0feb60db38948", + "type": "depends_on" + }, + { + "from": "sym-a5e5e709921d64076470bc4a", + "to": "mod-8b99d278a4bd1dda5f119d4b", + "type": "depends_on" + }, + { + "from": "sym-8d5e227a00f1424f513b0a29", + "to": "sym-a5e5e709921d64076470bc4a", + "type": "depends_on" + }, + { + "from": "sym-96217b85b15e0cb5db4e930b", + "to": "mod-8b99d278a4bd1dda5f119d4b", + "type": "depends_on" + }, + { + "from": "sym-f8c0eeed3baccb3e7fa467c0", + "to": "sym-96217b85b15e0cb5db4e930b", + "type": "depends_on" + }, + { + "from": "sym-e17fcd94a4eb8771ace31fc3", + "to": "sym-96217b85b15e0cb5db4e930b", + "type": "depends_on" + }, + { + "from": "sym-603aaafef984c97bc1fb36f7", + "to": "sym-96217b85b15e0cb5db4e930b", + "type": "depends_on" + }, + { + "from": "sym-040c390bafa53749618b519b", + "to": "sym-96217b85b15e0cb5db4e930b", + "type": "depends_on" + }, + { + "from": "sym-d23bb70b07f37cd7d66c695a", + "to": "sym-96217b85b15e0cb5db4e930b", + "type": "depends_on" + }, + { + "from": "sym-88f912051e9647b32d55b9c7", + "to": "sym-96217b85b15e0cb5db4e930b", + "type": "depends_on" + }, + { + "from": "sym-337b0b893f91850a1c499081", + "to": "sym-96217b85b15e0cb5db4e930b", + "type": "depends_on" + }, + { + "from": "mod-7411cdffb6063d8aa54dc02d", + "to": "mod-9efb2c33ee124a3e24fea523", + "type": "depends_on" + }, + { + "from": "mod-7411cdffb6063d8aa54dc02d", + "to": "mod-8b99d278a4bd1dda5f119d4b", + "type": "depends_on" + }, + { + "from": "sym-927f4a859c94422559dd19ec", + "to": "mod-7411cdffb6063d8aa54dc02d", + "type": "depends_on" + }, + { + "from": "sym-f299dd21cf070dca1c4a0501", + "to": "mod-7a1941c482905a159b7f2f46", + "type": "depends_on" + }, + { + "from": "sym-a4795a434717a476bb688e27", + "to": "mod-fed8e983d33351c85dd25540", + "type": "depends_on" + }, + { + "from": "sym-efeccf4a0839b992818e1b61", + "to": "sym-a4795a434717a476bb688e27", + "type": "depends_on" + }, + { + "from": "sym-348c100bdcd3654ff72438e9", + "to": "mod-fed8e983d33351c85dd25540", + "type": "depends_on" + }, + { + "from": "mod-719cd7393843802b8bff160e", + "to": "mod-84552d58b6743daab10f83b3", + "type": "depends_on" + }, + { + "from": "sym-41ce297760c0b065fc403d2c", + "to": "mod-719cd7393843802b8bff160e", + "type": "depends_on" + }, + { + "from": "sym-744d1d1b0780d485e5d250ad", + "to": "mod-199bee3bfdf8ff3ae8ddfb47", + "type": "depends_on" + }, + { + "from": "mod-54aa1c38c91b1598c048b7e1", + "to": "mod-481b5289c108ab245dd3ad27", + "type": "depends_on" + }, + { + "from": "mod-54aa1c38c91b1598c048b7e1", + "to": "mod-481b5289c108ab245dd3ad27", + "type": "depends_on" + }, + { + "from": "sym-d9d6fc11a7df506cb0a07142", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-01c888a08356d8f28943c97f", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-44d33a50cc54e0d3d967b0c0", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-19868805b0694b2d85e8eaf2", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-7e2f44f7dfbc0b389d5076cc", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-7591b4ab3452279a9b3202d6", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-7d6290b416ca33e2810a2d84", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-98ec34896e82c3ec91f745c8", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-7fc4f2fefdc6a8526f0d89e7", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "mod-7fc4f2fefdc6a8526f0d89e7", + "to": "mod-9e6a68c87b4e5c31d84a70f2", + "type": "depends_on" + }, + { + "from": "mod-7fc4f2fefdc6a8526f0d89e7", + "to": "mod-0fabbf7facc4e7b4b62c59ae", + "type": "depends_on" + }, + { + "from": "mod-7fc4f2fefdc6a8526f0d89e7", + "to": "mod-c16d69bfcfaea5546b2859a7", + "type": "depends_on" + }, + { + "from": "mod-7fc4f2fefdc6a8526f0d89e7", + "to": "mod-aedcf7cff384ad96bb4dd624", + "type": "depends_on" + }, + { + "from": "mod-7fc4f2fefdc6a8526f0d89e7", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-7fc4f2fefdc6a8526f0d89e7", + "to": "mod-a365b7714dec16f0bf79621e", + "type": "depends_on" + }, + { + "from": "mod-7fc4f2fefdc6a8526f0d89e7", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "mod-7fc4f2fefdc6a8526f0d89e7", + "to": "mod-dcce6518be2af59c2b776acc", + "type": "depends_on" + }, + { + "from": "sym-f340304e2dcd18aeab7bea66", + "to": "mod-7fc4f2fefdc6a8526f0d89e7", + "type": "depends_on" + }, + { + "from": "sym-310ddf06d9f20af042a081ae", + "to": "mod-ff98cde0370b2a3126edc022", + "type": "depends_on" + }, + { + "from": "sym-da54c6138fbebaf88017312e", + "to": "sym-310ddf06d9f20af042a081ae", + "type": "depends_on" + }, + { + "from": "sym-1fb3c00ffd51337ee0856546", + "to": "mod-ff98cde0370b2a3126edc022", + "type": "depends_on" + }, + { + "from": "sym-eb5223c80d97fb8805435919", + "to": "mod-afcd806760f135d6236304f7", + "type": "depends_on" + }, + { + "from": "sym-73a0a16ce379f82c4cf209c2", + "to": "mod-79fbe6e699a260de286c1916", + "type": "depends_on" + }, + { + "from": "mod-59e682c774f84720b4dbee26", + "to": "mod-12d77c813504670328c9b4f1", + "type": "depends_on" + }, + { + "from": "mod-59e682c774f84720b4dbee26", + "to": "mod-d0e009681585b57776f6a187", + "type": "depends_on" + }, + { + "from": "mod-59e682c774f84720b4dbee26", + "to": "mod-d3bd2f24c047572fef2bb57d", + "type": "depends_on" + }, + { + "from": "mod-59e682c774f84720b4dbee26", + "to": "mod-f486beaedaf6d01b3f5574b4", + "type": "depends_on" + }, + { + "from": "mod-59e682c774f84720b4dbee26", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "mod-59e682c774f84720b4dbee26", + "to": "mod-94f67b12c658d567d29471e0", + "type": "depends_on" + }, + { + "from": "mod-59e682c774f84720b4dbee26", + "to": "mod-de2778e7582cc783d0c02163", + "type": "depends_on" + }, + { + "from": "sym-b744b3f0ca52230821cd7c09", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "sym-52d5306f84e203c25cde4d63", + "to": "sym-b744b3f0ca52230821cd7c09", + "type": "depends_on" + }, + { + "from": "sym-63378d99f547426255e3c6b2", + "to": "sym-b744b3f0ca52230821cd7c09", + "type": "depends_on" + }, + { + "from": "sym-2fe136d4f31355269119cc07", + "to": "sym-b744b3f0ca52230821cd7c09", + "type": "depends_on" + }, + { + "from": "sym-2006e105b13b6da460a2f036", + "to": "sym-b744b3f0ca52230821cd7c09", + "type": "depends_on" + }, + { + "from": "sym-fd5416bb9f103468749a2fb6", + "to": "sym-b744b3f0ca52230821cd7c09", + "type": "depends_on" + }, + { + "from": "sym-e730f1acbf64d766fa3ab2c5", + "to": "sym-b744b3f0ca52230821cd7c09", + "type": "depends_on" + }, + { + "from": "sym-27eafd904c9cc9f3be773db2", + "to": "sym-b744b3f0ca52230821cd7c09", + "type": "depends_on" + }, + { + "from": "sym-9a7c16a46499c4474bfa9c28", + "to": "sym-b744b3f0ca52230821cd7c09", + "type": "depends_on" + }, + { + "from": "sym-5abf751f46445a56272194fe", + "to": "sym-b744b3f0ca52230821cd7c09", + "type": "depends_on" + }, + { + "from": "sym-f4c49cb6c933e15281dc470d", + "to": "sym-b744b3f0ca52230821cd7c09", + "type": "depends_on" + }, + { + "from": "sym-204abff3c5eec17740212ccd", + "to": "sym-b744b3f0ca52230821cd7c09", + "type": "depends_on" + }, + { + "from": "sym-bce0a60c8b027a23cbb66a0b", + "to": "sym-b744b3f0ca52230821cd7c09", + "type": "depends_on" + }, + { + "from": "sym-2bf80b379b628fe1463b323d", + "to": "sym-b744b3f0ca52230821cd7c09", + "type": "depends_on" + }, + { + "from": "sym-3b9e32f6d2845b4593c6cf03", + "to": "sym-b744b3f0ca52230821cd7c09", + "type": "depends_on" + }, + { + "from": "sym-dfc183b8a51720a3c7acb951", + "to": "sym-b744b3f0ca52230821cd7c09", + "type": "depends_on" + }, + { + "from": "sym-fdea233f51c4f9253f57b5fa", + "to": "sym-b744b3f0ca52230821cd7c09", + "type": "depends_on" + }, + { + "from": "sym-409ae2c860c3d547932b22bf", + "to": "sym-b744b3f0ca52230821cd7c09", + "type": "depends_on" + }, + { + "from": "sym-f1b2b407c8dfa52f9ea4da3a", + "to": "sym-b744b3f0ca52230821cd7c09", + "type": "depends_on" + }, + { + "from": "sym-23c9f147a5e10bca9cda218d", + "to": "sym-b744b3f0ca52230821cd7c09", + "type": "depends_on" + }, + { + "from": "sym-d3aa764874845bfa486fda13", + "to": "sym-b744b3f0ca52230821cd7c09", + "type": "depends_on" + }, + { + "from": "sym-ed461adfd8dc4f058d796f5b", + "to": "mod-1b2ebbc2a937e6ac49f4abba", + "type": "depends_on" + }, + { + "from": "sym-94693360f161a1af80920aaa", + "to": "mod-af922777bca2943d44bdba1f", + "type": "depends_on" + }, + { + "from": "sym-ba3b3568b45ce5bc207be950", + "to": "sym-94693360f161a1af80920aaa", + "type": "depends_on" + }, + { + "from": "sym-c23128ccef9064fd5a9eb6be", + "to": "mod-af922777bca2943d44bdba1f", + "type": "depends_on" + }, + { + "from": "sym-9bf79a1b040d2b717c1a5b1c", + "to": "sym-c23128ccef9064fd5a9eb6be", + "type": "depends_on" + }, + { + "from": "sym-ae4c5105ad70fa5d16a460d4", + "to": "mod-af922777bca2943d44bdba1f", + "type": "depends_on" + }, + { + "from": "sym-76e9719e4a837d746f1fa769", + "to": "sym-ae4c5105ad70fa5d16a460d4", + "type": "depends_on" + }, + { + "from": "sym-7877e2c46b0481d30b1295d8", + "to": "mod-af922777bca2943d44bdba1f", + "type": "depends_on" + }, + { + "from": "sym-d4b1406d39589498a37359a6", + "to": "sym-7877e2c46b0481d30b1295d8", + "type": "depends_on" + }, + { + "from": "sym-d399da6b951448492878f2f3", + "to": "mod-af922777bca2943d44bdba1f", + "type": "depends_on" + }, + { + "from": "sym-781b5402e62da25888f26f70", + "to": "sym-d399da6b951448492878f2f3", + "type": "depends_on" + }, + { + "from": "sym-2f9702f503e3a0e90c14043d", + "to": "sym-d399da6b951448492878f2f3", + "type": "depends_on" + }, + { + "from": "sym-04f86cd0f12ab44263506f89", + "to": "sym-d399da6b951448492878f2f3", + "type": "depends_on" + }, + { + "from": "sym-72d5ce5c5a92d40503d3413c", + "to": "sym-d399da6b951448492878f2f3", + "type": "depends_on" + }, + { + "from": "sym-cdd197a381f19cac93a75638", + "to": "sym-d399da6b951448492878f2f3", + "type": "depends_on" + }, + { + "from": "sym-c3d369dafd1d67373ba6737a", + "to": "sym-d399da6b951448492878f2f3", + "type": "depends_on" + }, + { + "from": "sym-6c15138dd9db2d1c461b5f11", + "to": "sym-d399da6b951448492878f2f3", + "type": "depends_on" + }, + { + "from": "sym-ee0653128098a581b53941db", + "to": "sym-d399da6b951448492878f2f3", + "type": "depends_on" + }, + { + "from": "sym-55213cf6f6edcbb76ee59eaa", + "to": "sym-d399da6b951448492878f2f3", + "type": "depends_on" + }, + { + "from": "sym-b0c8f99e6c93ca9706d1f8ee", + "to": "sym-d399da6b951448492878f2f3", + "type": "depends_on" + }, + { + "from": "sym-ac0e2088100b56d149dae697", + "to": "sym-d399da6b951448492878f2f3", + "type": "depends_on" + }, + { + "from": "sym-43d5acdefe01681708b5270d", + "to": "sym-d399da6b951448492878f2f3", + "type": "depends_on" + }, + { + "from": "sym-5da4340e9bf03a4ed4cbb269", + "to": "sym-d399da6b951448492878f2f3", + "type": "depends_on" + }, + { + "from": "sym-1d0c0bdd7a0a0aa7bb5a8132", + "to": "sym-d399da6b951448492878f2f3", + "type": "depends_on" + }, + { + "from": "sym-6f44a6b4d80bb5efb733bbba", + "to": "sym-d399da6b951448492878f2f3", + "type": "depends_on" + }, + { + "from": "sym-86d08eb8a6c3bae40f8bde7f", + "to": "sym-d399da6b951448492878f2f3", + "type": "depends_on" + }, + { + "from": "sym-8e9dd2a259270ebe8d2e9e75", + "to": "sym-d399da6b951448492878f2f3", + "type": "depends_on" + }, + { + "from": "sym-18cc014a13ffb8e6794c9864", + "to": "sym-d399da6b951448492878f2f3", + "type": "depends_on" + }, + { + "from": "sym-fe8380a376b6e0e2a1cc0bd8", + "to": "sym-d399da6b951448492878f2f3", + "type": "depends_on" + }, + { + "from": "sym-b79e1fe7188c4b7b8e158cb0", + "to": "sym-d399da6b951448492878f2f3", + "type": "depends_on" + }, + { + "from": "sym-eae366c1c6cebf792390d7b7", + "to": "sym-d399da6b951448492878f2f3", + "type": "depends_on" + }, + { + "from": "sym-0c7b7ace29b6cdc63325e02d", + "to": "sym-d399da6b951448492878f2f3", + "type": "depends_on" + }, + { + "from": "sym-f9dc91b5e70e8a5b5d1ffa7e", + "to": "sym-d399da6b951448492878f2f3", + "type": "depends_on" + }, + { + "from": "sym-9f05d203f674eec06b233dae", + "to": "sym-d399da6b951448492878f2f3", + "type": "depends_on" + }, + { + "from": "sym-2026315fe1b610a31721ea8f", + "to": "sym-d399da6b951448492878f2f3", + "type": "depends_on" + }, + { + "from": "sym-dde7c60f79b0e85c17c546b2", + "to": "sym-d399da6b951448492878f2f3", + "type": "depends_on" + }, + { + "from": "sym-055fb7e7be06d0d4dec566a4", + "to": "sym-d399da6b951448492878f2f3", + "type": "depends_on" + }, + { + "from": "sym-4fd1128f7dfc625d822a7318", + "to": "mod-af922777bca2943d44bdba1f", + "type": "depends_on" + }, + { + "from": "mod-481b5289c108ab245dd3ad27", + "to": "mod-af922777bca2943d44bdba1f", + "type": "depends_on" + }, + { + "from": "mod-481b5289c108ab245dd3ad27", + "to": "mod-d9d28659a6e092680fe7bfe4", + "type": "depends_on" + }, + { + "from": "mod-481b5289c108ab245dd3ad27", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "sym-c921746d54e98ddfe4ccb299", + "to": "mod-481b5289c108ab245dd3ad27", + "type": "depends_on" + }, + { + "from": "sym-9899d1280b44b8b713f7186b", + "to": "sym-c921746d54e98ddfe4ccb299", + "type": "depends_on" + }, + { + "from": "sym-80f5f7dcc6c29f5b623336a5", + "to": "sym-c921746d54e98ddfe4ccb299", + "type": "depends_on" + }, + { + "from": "sym-4f7092b7f911ab928f6cefb0", + "to": "sym-c921746d54e98ddfe4ccb299", + "type": "depends_on" + }, + { + "from": "sym-dbc8f2bdea6abafb20dc6f3a", + "to": "sym-c921746d54e98ddfe4ccb299", + "type": "depends_on" + }, + { + "from": "sym-a211dc84b6ff98afb9cfc21b", + "to": "sym-c921746d54e98ddfe4ccb299", + "type": "depends_on" + }, + { + "from": "sym-82203bf45ef4bb93c42253b9", + "to": "sym-c921746d54e98ddfe4ccb299", + "type": "depends_on" + }, + { + "from": "sym-fddd74010c8fb6ebd080f084", + "to": "sym-c921746d54e98ddfe4ccb299", + "type": "depends_on" + }, + { + "from": "sym-082591d771f4e89c0f59f037", + "to": "sym-c921746d54e98ddfe4ccb299", + "type": "depends_on" + }, + { + "from": "sym-d7e2be3959a27cc0115a6278", + "to": "sym-c921746d54e98ddfe4ccb299", + "type": "depends_on" + }, + { + "from": "sym-dda97a72bb6e5d1d00d712f9", + "to": "sym-c921746d54e98ddfe4ccb299", + "type": "depends_on" + }, + { + "from": "sym-dfa2433e9d331751425b8dae", + "to": "sym-c921746d54e98ddfe4ccb299", + "type": "depends_on" + }, + { + "from": "sym-45dc1c54cecce36c5ec15a0c", + "to": "sym-c921746d54e98ddfe4ccb299", + "type": "depends_on" + }, + { + "from": "sym-9564380b7ebb2e63900652de", + "to": "sym-c921746d54e98ddfe4ccb299", + "type": "depends_on" + }, + { + "from": "sym-17375e0b9ac1fb49cdfd2f17", + "to": "sym-c921746d54e98ddfe4ccb299", + "type": "depends_on" + }, + { + "from": "sym-4ab7557f715a615f22a172ff", + "to": "sym-c921746d54e98ddfe4ccb299", + "type": "depends_on" + }, + { + "from": "sym-d3a9dd89e91e26e2a9f0ce24", + "to": "sym-c921746d54e98ddfe4ccb299", + "type": "depends_on" + }, + { + "from": "sym-0a750a740b1b99f0d75cb6cb", + "to": "sym-c921746d54e98ddfe4ccb299", + "type": "depends_on" + }, + { + "from": "mod-9066efb52e5f511aa3343c63", + "to": "mod-af922777bca2943d44bdba1f", + "type": "depends_on" + }, + { + "from": "mod-9066efb52e5f511aa3343c63", + "to": "mod-d9d28659a6e092680fe7bfe4", + "type": "depends_on" + }, + { + "from": "mod-9066efb52e5f511aa3343c63", + "to": "mod-59e682c774f84720b4dbee26", + "type": "depends_on" + }, + { + "from": "sym-0f1cb478ccecdbc8fd539805", + "to": "mod-9066efb52e5f511aa3343c63", + "type": "depends_on" + }, + { + "from": "sym-c9824622ec971ea3d7836742", + "to": "sym-0f1cb478ccecdbc8fd539805", + "type": "depends_on" + }, + { + "from": "sym-68723b3207631cc64e03a451", + "to": "mod-9066efb52e5f511aa3343c63", + "type": "depends_on" + }, + { + "from": "sym-aec4be2724359a1e9a6546dd", + "to": "sym-68723b3207631cc64e03a451", + "type": "depends_on" + }, + { + "from": "sym-26c9da6ec5614cb93a5cbe2c", + "to": "mod-9066efb52e5f511aa3343c63", + "type": "depends_on" + }, + { + "from": "sym-1ee36baf48ad1c31f1bd864a", + "to": "sym-26c9da6ec5614cb93a5cbe2c", + "type": "depends_on" + }, + { + "from": "sym-1584cdd93ecbeecaf0d06785", + "to": "sym-26c9da6ec5614cb93a5cbe2c", + "type": "depends_on" + }, + { + "from": "sym-aaa74a6a96d21052af1b6ccd", + "to": "sym-26c9da6ec5614cb93a5cbe2c", + "type": "depends_on" + }, + { + "from": "sym-603fda2dd0ee016efe3f346d", + "to": "sym-26c9da6ec5614cb93a5cbe2c", + "type": "depends_on" + }, + { + "from": "sym-6d22d6ded32c3dd355956301", + "to": "sym-26c9da6ec5614cb93a5cbe2c", + "type": "depends_on" + }, + { + "from": "sym-e0c1948adba5f44503e6bedf", + "to": "sym-26c9da6ec5614cb93a5cbe2c", + "type": "depends_on" + }, + { + "from": "sym-ec7aeba1622d8fa5b5e46748", + "to": "sym-26c9da6ec5614cb93a5cbe2c", + "type": "depends_on" + }, + { + "from": "sym-8910a56520e9fd20039ba58a", + "to": "sym-26c9da6ec5614cb93a5cbe2c", + "type": "depends_on" + }, + { + "from": "sym-cf09bd7a00a0fff651c887d5", + "to": "sym-26c9da6ec5614cb93a5cbe2c", + "type": "depends_on" + }, + { + "from": "sym-e7df602bf2c2cdf1b6e81783", + "to": "sym-26c9da6ec5614cb93a5cbe2c", + "type": "depends_on" + }, + { + "from": "sym-d5aac31d3222f78ac81d1cce", + "to": "sym-26c9da6ec5614cb93a5cbe2c", + "type": "depends_on" + }, + { + "from": "sym-7437b3859c8f71906b326942", + "to": "sym-26c9da6ec5614cb93a5cbe2c", + "type": "depends_on" + }, + { + "from": "sym-21f8970b0263857feb2076bd", + "to": "sym-26c9da6ec5614cb93a5cbe2c", + "type": "depends_on" + }, + { + "from": "sym-56cc7d0a4fbf72d5761c93c6", + "to": "sym-26c9da6ec5614cb93a5cbe2c", + "type": "depends_on" + }, + { + "from": "sym-d573864fe75ac3cf41e023b1", + "to": "sym-26c9da6ec5614cb93a5cbe2c", + "type": "depends_on" + }, + { + "from": "sym-998a3174e4ea3a870d968db4", + "to": "sym-26c9da6ec5614cb93a5cbe2c", + "type": "depends_on" + }, + { + "from": "sym-7843fb24dcdf29e0ad1a89c4", + "to": "sym-26c9da6ec5614cb93a5cbe2c", + "type": "depends_on" + }, + { + "from": "sym-9daff3528e190c43c7fadfb4", + "to": "sym-26c9da6ec5614cb93a5cbe2c", + "type": "depends_on" + }, + { + "from": "sym-bbf1ba131604cac1e3b85d2b", + "to": "sym-26c9da6ec5614cb93a5cbe2c", + "type": "depends_on" + }, + { + "from": "sym-722a0a340f4e87cb3ce49574", + "to": "sym-26c9da6ec5614cb93a5cbe2c", + "type": "depends_on" + }, + { + "from": "sym-f0ddfadb3965aa19186ce2d4", + "to": "sym-26c9da6ec5614cb93a5cbe2c", + "type": "depends_on" + }, + { + "from": "sym-0cbb1488218c6c01fa1169f5", + "to": "sym-26c9da6ec5614cb93a5cbe2c", + "type": "depends_on" + }, + { + "from": "sym-88560f9541ccc56b6891aa20", + "to": "sym-26c9da6ec5614cb93a5cbe2c", + "type": "depends_on" + }, + { + "from": "mod-afb8062b9c4d4f2ec0da49a0", + "to": "mod-af922777bca2943d44bdba1f", + "type": "depends_on" + }, + { + "from": "mod-afb8062b9c4d4f2ec0da49a0", + "to": "mod-af922777bca2943d44bdba1f", + "type": "depends_on" + }, + { + "from": "mod-afb8062b9c4d4f2ec0da49a0", + "to": "mod-481b5289c108ab245dd3ad27", + "type": "depends_on" + }, + { + "from": "mod-afb8062b9c4d4f2ec0da49a0", + "to": "mod-9066efb52e5f511aa3343c63", + "type": "depends_on" + }, + { + "from": "mod-afb8062b9c4d4f2ec0da49a0", + "to": "mod-9066efb52e5f511aa3343c63", + "type": "depends_on" + }, + { + "from": "mod-afb8062b9c4d4f2ec0da49a0", + "to": "mod-af922777bca2943d44bdba1f", + "type": "depends_on" + }, + { + "from": "sym-fcf030aedb37dcce1a78108d", + "to": "mod-afb8062b9c4d4f2ec0da49a0", + "type": "depends_on" + }, + { + "from": "sym-0f16b4cda74d61ad3da42579", + "to": "mod-afb8062b9c4d4f2ec0da49a0", + "type": "depends_on" + }, + { + "from": "sym-97c7f2bb4907e815e518d1fe", + "to": "mod-afb8062b9c4d4f2ec0da49a0", + "type": "depends_on" + }, + { + "from": "sym-80057b3541e00f7cc0458b89", + "to": "mod-afb8062b9c4d4f2ec0da49a0", + "type": "depends_on" + }, + { + "from": "sym-1e715c26e0832b512c931708", + "to": "mod-afb8062b9c4d4f2ec0da49a0", + "type": "depends_on" + }, + { + "from": "sym-c5dba2bba8b1f3ee3b45609e", + "to": "mod-afb8062b9c4d4f2ec0da49a0", + "type": "depends_on" + }, + { + "from": "sym-1fdf4231b9ddd41ccb09bca4", + "to": "mod-afb8062b9c4d4f2ec0da49a0", + "type": "depends_on" + }, + { + "from": "sym-7b2ceeaaadffca84918cad19", + "to": "mod-afb8062b9c4d4f2ec0da49a0", + "type": "depends_on" + }, + { + "from": "sym-e8a4ffa5ce3c70489f1f1aa7", + "to": "mod-afb8062b9c4d4f2ec0da49a0", + "type": "depends_on" + }, + { + "from": "sym-862a65237685e8c946afd441", + "to": "mod-afb8062b9c4d4f2ec0da49a0", + "type": "depends_on" + }, + { + "from": "mod-d9d28659a6e092680fe7bfe4", + "to": "mod-af922777bca2943d44bdba1f", + "type": "depends_on" + }, + { + "from": "mod-d9d28659a6e092680fe7bfe4", + "to": "mod-af922777bca2943d44bdba1f", + "type": "depends_on" + }, + { + "from": "sym-a335758e6a5c9270bc4e17d4", + "to": "mod-d9d28659a6e092680fe7bfe4", + "type": "depends_on" + }, + { + "from": "sym-8a35aa0b8db3d2a1c36ae2a2", + "to": "mod-d9d28659a6e092680fe7bfe4", + "type": "depends_on" + }, + { + "from": "sym-991e8f624f9a0de36c800ed6", + "to": "mod-8e3a02ebf4990dac5ac1f328", + "type": "depends_on" + }, + { + "from": "mod-eb0798295c928ba399632ae3", + "to": "mod-54aa1c38c91b1598c048b7e1", + "type": "depends_on" + }, + { + "from": "sym-b51b7f2293f00327da000bdb", + "to": "mod-eb0798295c928ba399632ae3", + "type": "depends_on" + }, + { + "from": "sym-03e2b3d5d7abb5be53bc31ef", + "to": "sym-b51b7f2293f00327da000bdb", + "type": "depends_on" + }, + { + "from": "sym-038a71a0f9c7bcd839c5e263", + "to": "sym-b51b7f2293f00327da000bdb", + "type": "depends_on" + }, + { + "from": "sym-8ee49e77dbe7d64bf9b0692a", + "to": "sym-b51b7f2293f00327da000bdb", + "type": "depends_on" + }, + { + "from": "sym-b22108e7980a952d6d61b0a7", + "to": "sym-b51b7f2293f00327da000bdb", + "type": "depends_on" + }, + { + "from": "sym-197422eff9f09646d17a07e0", + "to": "sym-b51b7f2293f00327da000bdb", + "type": "depends_on" + }, + { + "from": "sym-00610ea7a3c22dc0f5fc4392", + "to": "sym-b51b7f2293f00327da000bdb", + "type": "depends_on" + }, + { + "from": "sym-ab821687a4299d0d579d49c7", + "to": "mod-877c0c159531ba36f25904bc", + "type": "depends_on" + }, + { + "from": "sym-2189d115ce2b9c3d49fa0191", + "to": "sym-ab821687a4299d0d579d49c7", + "type": "depends_on" + }, + { + "from": "sym-42527a84666c4a40976bd94d", + "to": "mod-877c0c159531ba36f25904bc", + "type": "depends_on" + }, + { + "from": "sym-baed646297ac7a253a25f030", + "to": "mod-b4394327e0a18b4da4f0b23a", + "type": "depends_on" + }, + { + "from": "sym-64c96a6fbf2a162737330407", + "to": "mod-97a0284402c885a38947f96c", + "type": "depends_on" + }, + { + "from": "sym-832e0134a9591de63a109c96", + "to": "mod-97a0284402c885a38947f96c", + "type": "depends_on" + }, + { + "from": "sym-9f42e311e2a8e48662a9fef9", + "to": "mod-97a0284402c885a38947f96c", + "type": "depends_on" + }, + { + "from": "sym-7bfe6f65424b8f960729882b", + "to": "mod-bd7e6bb16e1ad3ce391d135f", + "type": "depends_on" + }, + { + "from": "sym-647f63977118e939cf37b752", + "to": "sym-7bfe6f65424b8f960729882b", + "type": "depends_on" + }, + { + "from": "sym-f1d873115e6af0e4c19fc30d", + "to": "mod-bd7e6bb16e1ad3ce391d135f", + "type": "depends_on" + }, + { + "from": "sym-4874e5e75c46b3ce04368854", + "to": "sym-f1d873115e6af0e4c19fc30d", + "type": "depends_on" + }, + { + "from": "sym-a7b3d969f28a61c51429f843", + "to": "mod-bd7e6bb16e1ad3ce391d135f", + "type": "depends_on" + }, + { + "from": "sym-ef1200ce6553b633be306d70", + "to": "sym-a7b3d969f28a61c51429f843", + "type": "depends_on" + }, + { + "from": "sym-5357f545e8ae455cf1dae173", + "to": "mod-bd7e6bb16e1ad3ce391d135f", + "type": "depends_on" + }, + { + "from": "sym-7c99fb8ffcbe7d2ec41d5a8e", + "to": "sym-5357f545e8ae455cf1dae173", + "type": "depends_on" + }, + { + "from": "sym-8ae3c2ab051a29a3e38274dd", + "to": "mod-bd7e6bb16e1ad3ce391d135f", + "type": "depends_on" + }, + { + "from": "sym-b99103f09316ae6f02324395", + "to": "sym-8ae3c2ab051a29a3e38274dd", + "type": "depends_on" + }, + { + "from": "sym-a9a76108c6152698a3e7bac3", + "to": "mod-bd7e6bb16e1ad3ce391d135f", + "type": "depends_on" + }, + { + "from": "sym-6fad996cd780f83fa32a107f", + "to": "sym-a9a76108c6152698a3e7bac3", + "type": "depends_on" + }, + { + "from": "sym-9e3a0cabaea4ec69a300f18d", + "to": "mod-bd7e6bb16e1ad3ce391d135f", + "type": "depends_on" + }, + { + "from": "sym-32aa27e94fd2c2b4253f8599", + "to": "sym-9e3a0cabaea4ec69a300f18d", + "type": "depends_on" + }, + { + "from": "sym-d06a4eb520adc83b781eb1b7", + "to": "mod-bd7e6bb16e1ad3ce391d135f", + "type": "depends_on" + }, + { + "from": "sym-2781fd4676b367f79a014c51", + "to": "sym-d06a4eb520adc83b781eb1b7", + "type": "depends_on" + }, + { + "from": "sym-e563ba4e1cba0422d3f6d351", + "to": "mod-bd7e6bb16e1ad3ce391d135f", + "type": "depends_on" + }, + { + "from": "sym-782b8dfbf51fdf9fc11a6129", + "to": "sym-e563ba4e1cba0422d3f6d351", + "type": "depends_on" + }, + { + "from": "sym-38a97c77e145541444f5b557", + "to": "mod-bd7e6bb16e1ad3ce391d135f", + "type": "depends_on" + }, + { + "from": "sym-e9dd6caad492c208cbaa408f", + "to": "sym-38a97c77e145541444f5b557", + "type": "depends_on" + }, + { + "from": "sym-77698a6f7f42a84ed2ee5769", + "to": "mod-bd7e6bb16e1ad3ce391d135f", + "type": "depends_on" + }, + { + "from": "sym-021d447da9c9cdc0a8828fbd", + "to": "sym-77698a6f7f42a84ed2ee5769", + "type": "depends_on" + }, + { + "from": "sym-99dbc8dc422257de18a23cde", + "to": "mod-bd7e6bb16e1ad3ce391d135f", + "type": "depends_on" + }, + { + "from": "sym-84cccde4cee5a59c48e09624", + "to": "sym-99dbc8dc422257de18a23cde", + "type": "depends_on" + }, + { + "from": "sym-f5cd26473ebc041f634af528", + "to": "mod-bd7e6bb16e1ad3ce391d135f", + "type": "depends_on" + }, + { + "from": "sym-6a5dac941b174a6b10665841", + "to": "sym-f5cd26473ebc041f634af528", + "type": "depends_on" + }, + { + "from": "sym-2e7f6d391d8c13d0a27849db", + "to": "mod-bd7e6bb16e1ad3ce391d135f", + "type": "depends_on" + }, + { + "from": "sym-115190a05383b21a4bb3023b", + "to": "sym-2e7f6d391d8c13d0a27849db", + "type": "depends_on" + }, + { + "from": "sym-0303db1a28d7da98e3bd3feb", + "to": "mod-bd7e6bb16e1ad3ce391d135f", + "type": "depends_on" + }, + { + "from": "sym-a3469c23bd9262143421b370", + "to": "sym-0303db1a28d7da98e3bd3feb", + "type": "depends_on" + }, + { + "from": "sym-1bb487944cb5b12d3757f07c", + "to": "mod-bd7e6bb16e1ad3ce391d135f", + "type": "depends_on" + }, + { + "from": "sym-fd659db04515e442facc5b02", + "to": "sym-1bb487944cb5b12d3757f07c", + "type": "depends_on" + }, + { + "from": "sym-42ab5fb64ac1e70a6473f6e5", + "to": "mod-bd7e6bb16e1ad3ce391d135f", + "type": "depends_on" + }, + { + "from": "sym-f1687c66376fa28aeb417788", + "to": "sym-42ab5fb64ac1e70a6473f6e5", + "type": "depends_on" + }, + { + "from": "sym-b487a1ce833804d2271e3c96", + "to": "mod-78abcf74349b520bc900b4b4", + "type": "depends_on" + }, + { + "from": "sym-3a10c16293fdd85144fa70cb", + "to": "sym-b487a1ce833804d2271e3c96", + "type": "depends_on" + }, + { + "from": "sym-611b4918c4bdad73125bf034", + "to": "sym-b487a1ce833804d2271e3c96", + "type": "depends_on" + }, + { + "from": "sym-5b4465fe4b287e6087e57cea", + "to": "sym-b487a1ce833804d2271e3c96", + "type": "depends_on" + }, + { + "from": "sym-3c1f2e978ed4af636838378b", + "to": "mod-78abcf74349b520bc900b4b4", + "type": "depends_on" + }, + { + "from": "sym-a5fcf79ed272694d8bed0a7f", + "to": "mod-39dd430c0afde7c4cff40e35", + "type": "depends_on" + }, + { + "from": "sym-6a06789ec5630226d1606761", + "to": "mod-39dd430c0afde7c4cff40e35", + "type": "depends_on" + }, + { + "from": "sym-252318ccecdf3dae90cd765a", + "to": "mod-39dd430c0afde7c4cff40e35", + "type": "depends_on" + }, + { + "from": "sym-95315e0446bf0d1ca7c636ed", + "to": "mod-39dd430c0afde7c4cff40e35", + "type": "depends_on" + }, + { + "from": "mod-a7ed1878dc1aee852010d3b6", + "to": "mod-7a54f789433ac1b88a2975b0", + "type": "depends_on" + }, + { + "from": "mod-e54e69b88583bdd6e9367055", + "to": "mod-da04ef1eca622af1ef3664c3", + "type": "depends_on" + }, + { + "from": "mod-6df30845bc1a45d2d4602890", + "to": "mod-fa9dc053ab761e9fa1b23eca", + "type": "depends_on" + }, + { + "from": "mod-937d387706a55ae219092722", + "to": "mod-da04ef1eca622af1ef3664c3", + "type": "depends_on" + } + ] +} diff --git a/repository-semantic-map/consumption-guide.md b/repository-semantic-map/consumption-guide.md new file mode 100644 index 000000000..08e115a95 --- /dev/null +++ b/repository-semantic-map/consumption-guide.md @@ -0,0 +1,13 @@ +# Consumption Guide + +**Index version:** 1.0.2 +**Git ref:** `a454f37e` + +## Maintenance protocol + +On each re-index: +1. Compute changed files via `git diff --name-only ..`. +2. Re-run generator; in a future iteration, restrict parsing to affected modules and update `versioning/deltas/`. +3. Re-scan generated artifacts for leaked secrets before committing. + +Current mode: full re-index (fast enough for this repo), patch version bump on each run. diff --git a/repository-semantic-map/cross-references/adr-index.json b/repository-semantic-map/cross-references/adr-index.json new file mode 100644 index 000000000..5a15efc2b --- /dev/null +++ b/repository-semantic-map/cross-references/adr-index.json @@ -0,0 +1,5 @@ +{ + "generated_at": "2026-02-22T00:00:00.000Z", + "adrs": [] +} + diff --git a/repository-semantic-map/cross-references/doc-index.json b/repository-semantic-map/cross-references/doc-index.json new file mode 100644 index 000000000..065f2f070 --- /dev/null +++ b/repository-semantic-map/cross-references/doc-index.json @@ -0,0 +1,65 @@ +{ + "generated_at": "2026-02-22T19:12:05.352Z", + "docs": [ + { + "path": "README.md", + "bytes": 8591, + "sha1": "54be0e786c089d4811a772de8daa59ab1772871a" + }, + { + "path": "INSTALL.md", + "bytes": 12592, + "sha1": "a8ac5cb73c95cf47bdbd1edc6d2561bdc8d708ac" + }, + { + "path": "CONTRIBUTING.md", + "bytes": 5732, + "sha1": "423c7fc817bbb39fceab4cd738167e2841b472d9" + }, + { + "path": "OMNIPROTOCOL_SETUP.md", + "bytes": 5923, + "sha1": "87ad7151fe7294aed3fc2dd08296f97c6c90e68d" + }, + { + "path": "L2PS_TESTING.md", + "bytes": 13228, + "sha1": "aabe9fdb424cc12da4bb36a1d7ada4cadae30c7c" + }, + { + "path": ".planning/codebase/STACK.md", + "bytes": 3254, + "sha1": "fe7adf59672cb776f8a0cd54bb007b576ff2f80d" + }, + { + "path": ".planning/codebase/INTEGRATIONS.md", + "bytes": 3131, + "sha1": "a19a1c4eb14239f57095cc90ba2522df76966cf9" + }, + { + "path": ".planning/codebase/ARCHITECTURE.md", + "bytes": 2735, + "sha1": "ae8f6194e395dd7da336c5309ed51fd55f503cbf" + }, + { + "path": ".planning/codebase/STRUCTURE.md", + "bytes": 2560, + "sha1": "fd8adc09d3b7bc12892c88da520ece8914ca0d3b" + }, + { + "path": ".planning/codebase/CONVENTIONS.md", + "bytes": 1809, + "sha1": "1ac1cb9696de93a7bd4dc72ad4b231adf05c9a49" + }, + { + "path": ".planning/codebase/TESTING.md", + "bytes": 907, + "sha1": "4d745fbe375e020f0fb5c15f2beffa42626fc713" + }, + { + "path": ".planning/codebase/CONCERNS.md", + "bytes": 2703, + "sha1": "4a84f0b59ce275738c30c5addb3fb70aa61798a0" + } + ] +} diff --git a/repository-semantic-map/cross-references/issue-tracker-mapping.json b/repository-semantic-map/cross-references/issue-tracker-mapping.json new file mode 100644 index 000000000..f52de3009 --- /dev/null +++ b/repository-semantic-map/cross-references/issue-tracker-mapping.json @@ -0,0 +1,6 @@ +{ + "generated_at": "2026-02-22T00:00:00.000Z", + "system": "beads", + "mappings": [] +} + diff --git a/repository-semantic-map/domain-ontologies/demos-network-terms.json b/repository-semantic-map/domain-ontologies/demos-network-terms.json new file mode 100644 index 000000000..ddc498920 --- /dev/null +++ b/repository-semantic-map/domain-ontologies/demos-network-terms.json @@ -0,0 +1,216 @@ +{ + "generated_at": "2026-02-22T19:12:05.352Z", + "terms": [ + { + "term": "bun", + "count": 11, + "sources": [ + ".planning/codebase/ARCHITECTURE.md", + ".planning/codebase/CONVENTIONS.md", + ".planning/codebase/INTEGRATIONS.md", + ".planning/codebase/STACK.md", + ".planning/codebase/STRUCTURE.md", + ".planning/codebase/TESTING.md", + "CONTRIBUTING.md", + "INSTALL.md", + "OMNIPROTOCOL_SETUP.md", + "README.md", + "seed" + ] + }, + { + "term": "peer", + "count": 9, + "sources": [ + ".planning/codebase/ARCHITECTURE.md", + ".planning/codebase/INTEGRATIONS.md", + ".planning/codebase/STACK.md", + ".planning/codebase/STRUCTURE.md", + "INSTALL.md", + "L2PS_TESTING.md", + "OMNIPROTOCOL_SETUP.md", + "README.md", + "seed" + ] + }, + { + "term": "block", + "count": 8, + "sources": [ + ".planning/codebase/ARCHITECTURE.md", + ".planning/codebase/CONCERNS.md", + ".planning/codebase/STACK.md", + ".planning/codebase/STRUCTURE.md", + "INSTALL.md", + "L2PS_TESTING.md", + "README.md", + "seed" + ] + }, + { + "term": "omniprotocol", + "count": 8, + "sources": [ + ".planning/codebase/ARCHITECTURE.md", + ".planning/codebase/INTEGRATIONS.md", + ".planning/codebase/STACK.md", + ".planning/codebase/STRUCTURE.md", + "INSTALL.md", + "OMNIPROTOCOL_SETUP.md", + "README.md", + "seed" + ] + }, + { + "term": "typeorm", + "count": 8, + "sources": [ + ".planning/codebase/ARCHITECTURE.md", + ".planning/codebase/CONCERNS.md", + ".planning/codebase/INTEGRATIONS.md", + ".planning/codebase/STACK.md", + ".planning/codebase/STRUCTURE.md", + "L2PS_TESTING.md", + "README.md", + "seed" + ] + }, + { + "term": "postgresql", + "count": 6, + "sources": [ + ".planning/codebase/INTEGRATIONS.md", + ".planning/codebase/STACK.md", + "CONTRIBUTING.md", + "INSTALL.md", + "README.md", + "seed" + ] + }, + { + "term": "tlsnotary", + "count": 6, + "sources": [ + ".planning/codebase/ARCHITECTURE.md", + ".planning/codebase/INTEGRATIONS.md", + ".planning/codebase/STRUCTURE.md", + "INSTALL.md", + "README.md", + "seed" + ] + }, + { + "term": "transaction", + "count": 6, + "sources": [ + ".planning/codebase/ARCHITECTURE.md", + ".planning/codebase/CONCERNS.md", + "CONTRIBUTING.md", + "L2PS_TESTING.md", + "README.md", + "seed" + ] + }, + { + "term": "bridge", + "count": 5, + "sources": [ + ".planning/codebase/CONCERNS.md", + ".planning/codebase/INTEGRATIONS.md", + ".planning/codebase/STACK.md", + "INSTALL.md", + "seed" + ] + }, + { + "term": "mcp", + "count": 5, + "sources": [ + ".planning/codebase/ARCHITECTURE.md", + ".planning/codebase/INTEGRATIONS.md", + ".planning/codebase/STACK.md", + ".planning/codebase/STRUCTURE.md", + "seed" + ] + }, + { + "term": "demos network", + "count": 4, + "sources": [ + "CONTRIBUTING.md", + "INSTALL.md", + "README.md", + "seed" + ] + }, + { + "term": "mempool", + "count": 4, + "sources": [ + ".planning/codebase/ARCHITECTURE.md", + ".planning/codebase/CONCERNS.md", + "L2PS_TESTING.md", + "seed" + ] + }, + { + "term": "gcr", + "count": 3, + "sources": [ + ".planning/codebase/ARCHITECTURE.md", + ".planning/codebase/CONCERNS.md", + "seed" + ] + }, + { + "term": "porbft", + "count": 3, + "sources": [ + ".planning/codebase/ARCHITECTURE.md", + ".planning/codebase/STRUCTURE.md", + "seed" + ] + }, + { + "term": "validator", + "count": 3, + "sources": [ + "L2PS_TESTING.md", + "README.md", + "seed" + ] + }, + { + "term": "zk", + "count": 3, + "sources": [ + ".planning/codebase/ARCHITECTURE.md", + ".planning/codebase/STRUCTURE.md", + "seed" + ] + }, + { + "term": "l2ps", + "count": 2, + "sources": [ + "L2PS_TESTING.md", + "seed" + ] + }, + { + "term": "rubic", + "count": 2, + "sources": [ + ".planning/codebase/INTEGRATIONS.md", + "seed" + ] + }, + { + "term": "merkle tree", + "count": 1, + "sources": [ + "seed" + ] + } + ] +} diff --git a/repository-semantic-map/embeddings/README.md b/repository-semantic-map/embeddings/README.md new file mode 100644 index 000000000..b414b7315 --- /dev/null +++ b/repository-semantic-map/embeddings/README.md @@ -0,0 +1,42 @@ +# Embeddings + +This index run does not include pre-computed embedding vectors by default. + +## Generate embeddings (automated) + +This repo includes an embedding generator that produces: +- `repository-semantic-map/embeddings/semantic-fingerprints.npy` (float32 matrix, shape `[atoms, dim]`) +- `repository-semantic-map/embeddings/uuid-mapping.json` (row index → uuid) + +### Local embeddings (recommended) + +One-shot local embedding generation (downloads an ONNX model the first time): +```bash +uv run --with fastembed --with numpy python scripts/semantic-map/embed_local.py +``` + +Optional env vars: +- `EMBED_LOCAL_MODEL` (default `BAAI/bge-small-en-v1.5`) +- `EMBED_BATCH_SIZE` (default `128`) + +### Configure an embedding endpoint + +The script supports a **generic HTTP provider** compatible with: +`POST { model, input: string[] } -> { data: [{ embedding: number[] }] }` + +Set env vars: +- `EMBED_PROVIDER=http` +- `EMBED_HTTP_ENDPOINT` (required) — full URL to your embeddings endpoint +- `EMBED_HTTP_API_KEY` (optional) — bearer token +- `EMBED_MODEL` (optional) — model name sent in the request +- `EMBED_BATCH_SIZE` (optional, default `64`) + +Run: +```bash +bun scripts/semantic-map/embed.ts +``` + +Outputs: +- `repository-semantic-map/embeddings/semantic-fingerprints.npy` +- `repository-semantic-map/embeddings/uuid-mapping.json` +- `repository-semantic-map/embeddings/meta.json` diff --git a/repository-semantic-map/embeddings/meta.json b/repository-semantic-map/embeddings/meta.json new file mode 100644 index 000000000..53fd46ab5 --- /dev/null +++ b/repository-semantic-map/embeddings/meta.json @@ -0,0 +1,15 @@ +{ + "generated_at": "2026-02-22T19:26:27.811195Z", + "index_path": "repository-semantic-map/semantic-index.jsonl", + "npy_path": "repository-semantic-map/embeddings/semantic-fingerprints.npy", + "mapping_path": "repository-semantic-map/embeddings/uuid-mapping.json", + "provider": { + "name": "fastembed", + "model": "BAAI/bge-small-en-v1.5", + "dim": 384 + }, + "notes": { + "text_source": "semantic_fingerprint.natural_language_descriptions (joined)", + "batch_size": 128 + } +} diff --git a/repository-semantic-map/embeddings/semantic-fingerprints.npy b/repository-semantic-map/embeddings/semantic-fingerprints.npy new file mode 100644 index 000000000..a90e1119a Binary files /dev/null and b/repository-semantic-map/embeddings/semantic-fingerprints.npy differ diff --git a/repository-semantic-map/embeddings/uuid-mapping.json b/repository-semantic-map/embeddings/uuid-mapping.json new file mode 100644 index 000000000..10f61c495 --- /dev/null +++ b/repository-semantic-map/embeddings/uuid-mapping.json @@ -0,0 +1,2484 @@ +{ + "generated_at": "2026-02-22T19:26:27.810526Z", + "provider": { + "name": "fastembed", + "model": "BAAI/bge-small-en-v1.5", + "dim": 384 + }, + "rows": 2472, + "cols": 384, + "uuids": [ + "repo-de99fc85f0e0189637618ce6", + "mod-30226d79668e34a62a286090", + "mod-4f240da290d74961db3018c1", + "mod-b339b6e2d177dff30e54ad47", + "mod-2546b562762a3da08a65696c", + "mod-840f81eb11629800896bc68c", + "mod-e4f5fbdce58ae4c9460982f1", + "mod-a11e8e55a0387f976794ebc2", + "mod-2c27076bd0cea424b3f31b08", + "mod-5616093476c766ebb88973fc", + "mod-8199ebab294ab6b8aa0e2c60", + "mod-61ec49ba22d46e7eeff82d2c", + "mod-5fd74e18c62882ed9c84a4c4", + "mod-4f82a94b1d6cb4bf9aed1178", + "mod-c49fd7aa51f86aec35688868", + "mod-38ca26657f3ebd4b61cbc829", + "mod-0a687d4a8de66750c8ed59f7", + "mod-d9efcaa28359a29a24e998ca", + "mod-e0ccf1cd36e1b4bd9f23a160", + "mod-900742fc8a97706a00e06129", + "mod-3653cf91ec233fdbb23d4d78", + "mod-a0a399c17b09d2d59cb4c8a4", + "mod-7b49c1b727b9aee8612f7ada", + "mod-8dfd4cfe7c92238e8a295176", + "mod-0fc27af2e03da13014e76beb", + "mod-dba449d7aefb98c5518cd61d", + "mod-5284e69a41b77e33ceb347d7", + "mod-0bdba6781d714c651de05352", + "mod-966e17be37a66604fed3722e", + "mod-fedfa2f8f2d69ea52cabd065", + "mod-09e939d9272236688a28974a", + "mod-08315e6901cb53376d13cc70", + "mod-cb6612b0371b0a6c53802c79", + "mod-462ce83c6905bcaa92b4f893", + "mod-b826ecdcb08532bf626dec5e", + "mod-dc90a845649336ae35fd57a4", + "mod-26a73e0f3287d341c809bbb6", + "mod-e97de8ffbc5205710572c9db", + "mod-73734de2bfb341ec8ba4023b", + "mod-3f28b6264133cacdcde0f639", + "mod-7446738bdaf5f0b85a43ab05", + "mod-6ecc959af33bffdcf9b125ac", + "mod-bd407f0c01e58fd2d40eb1c3", + "mod-ff7a988dbc672250517763db", + "mod-a722cbd7e6a0808c95591ad6", + "mod-6b0f117020c528624559fc33", + "mod-3940e5b1c6e49d5c3f17fd5e", + "mod-52fc6e5b8ec086dcc9f4237e", + "mod-f57990696544256723fdd185", + "mod-ace15f11a231cf8b7077f58e", + "mod-116da4b57fafe340c5775211", + "mod-374a312e43c2c9f2d7013463", + "mod-293d53ea089a85fc8fe53c13", + "mod-0b89d77ed9ae905feafbc9e1", + "mod-6468589b59a97501083efac5", + "mod-d890484b676af2e8fe7bd2b6", + "mod-94f67b12c658d567d29471e0", + "mod-7913910232f2f61a1d86ca8d", + "mod-de2778e7582cc783d0c02163", + "mod-3dc939e68aaf71174e695f9e", + "mod-6efee936b845d34104bac46c", + "mod-7866a2e46802b656e108eb43", + "mod-ea8114d37c6855f0420f3753", + "mod-f7793bcd210b9ccdb36c1561", + "mod-30ed0e66ac618e803ffb888b", + "mod-0a6b71b6c837c68c08998d7b", + "mod-825d778a3cf48930d8e88db3", + "mod-2ac3497f7072a203f8c62d92", + "mod-fbf651cd0a1f5d59d8f3f9b2", + "mod-b4ad305201d7e6c9d3b649db", + "mod-ad645bf9d23cc4e8c30848fc", + "mod-508ea55e640ac463afeb7e81", + "mod-292e8f8c5a666fd4318d4859", + "mod-4d1bc1d25c03a3c9c82135b1", + "mod-db9458152523ec94914f1b7c", + "mod-001692bb5454fe9b0d78d445", + "mod-a9d75338e497f9b16630d4cf", + "mod-99cb8cee8d94ff0cda253153", + "mod-327512c4dc701f9a29037e12", + "mod-b14fd27b1e26707d72c1730a", + "mod-4e4680ebab441dcef21432ff", + "mod-3b62039e7459fe4199077784", + "mod-f30737840d94511712dda889", + "mod-36fe55884844248a7ff73159", + "mod-cd472ca23fca8b4aead577c4", + "mod-d6a62d75526a851c966f7b84", + "mod-9a663bc106327e8422201a95", + "mod-12d77c813504670328c9b4f1", + "mod-d0e009681585b57776f6a187", + "mod-91c215ca923f83144b68d625", + "mod-8786c56780e501016b92f408", + "mod-056bc15608f58b9ec7451fc4", + "mod-ce3b72f0515cac2e2fe5ca15", + "mod-d0734ff72a9c8934deea7846", + "mod-c5d542bba68467e14e67638a", + "mod-a2f8e9a3ce2f5a58e00df674", + "mod-291d062f1bd46af2d595f119", + "mod-fe44c1bccd2633149d023f55", + "mod-1d4743119cc890fadab85fb7", + "mod-37b5ef5203b8d54dbbc526c9", + "mod-652e9394671c2c32cc57b508", + "mod-8d16d859c035fc1372e07e06", + "mod-43a22fa504defe4ae499272f", + "mod-525c86f0484f1a8328f90e21", + "mod-f33c364cc30d4c989aabb467", + "mod-c31ff6a7377bd2e29ce07160", + "mod-60ac739c2c89b2f73e69a278", + "mod-e15b2a203e781bad5f15394f", + "mod-ea8ac339723e29cb2a2446ee", + "mod-be7b10b7e34156b0bae273f7", + "mod-b989c7daa266d9b652abd067", + "mod-e395bfa94e646748f1e3298e", + "mod-8fb910e5659126b322f9fe29", + "mod-77a2526a89e7700a956a35e1", + "mod-b46f47672e387229e73f22e6", + "mod-9389bad564e097d75994d5f8", + "mod-c8450797917dfb54fe43ca86", + "mod-8aef488fb2fc78414791967a", + "mod-9e6a68c87b4e5c31d84a70f2", + "mod-df9148ab5ce0a5a5115bead1", + "mod-457939e5e7481c4a6a17e7a3", + "mod-7fbfbfcf1e85d7ef732d27ea", + "mod-996772d8748b5664e367c6c6", + "mod-52aa016deaac90f2f1067844", + "mod-f87e42bd9aa4eebfae23dbd1", + "mod-5758817d6b816e39b8e7e4b3", + "mod-20f30418ca95fd46594075af", + "mod-2f8fcf8b410da0c1f6892901", + "mod-1de8a1fb6a48c6a931549f30", + "mod-3d5f49cf64c24935d34290c4", + "mod-7f4649fc39674866ce6591cc", + "mod-892576d596aa8b40bed3d2f9", + "mod-6f74719a94e9135573217051", + "mod-a5c28a9abc4da2bd27d3cbb4", + "mod-a365b7714dec16f0bf79621e", + "mod-0fabbf7facc4e7b4b62c59ae", + "mod-5a3b55b43394de7f8c762546", + "mod-eafbd86811c7222ae0334af1", + "mod-a9472d145601bd72b2b81e65", + "mod-128ee1689e701accb1643b15", + "mod-b348b25ed5a5571412a85da0", + "mod-91454010a0aa78f3ef28bd69", + "mod-1f38e75fd9b9f51f96a2d975", + "mod-77aac2da6c6f0fbc37663544", + "mod-43e420b038a56638079168bc", + "mod-4abf6009e6ef176fec251259", + "mod-0265f572c93b5fdc1506bdda", + "mod-1b966da09e8eebb2af4ea0ae", + "mod-fcbaaa2e6fedeb87a2dc2d8e", + "mod-ecaffe079222e4664d98655f", + "mod-523a32046a2c4caccecf050d", + "mod-3a3b7b050c56c146875c18fb", + "mod-b2c7d957ae05ce535d8f8e2e", + "mod-84552d58b6743daab10f83b3", + "mod-d1ccb3f2c31e96f4ad5dab3f", + "mod-04e38e9e7bbb7be0a3e4dce7", + "mod-b5a2bbfcc551f4a8277420d0", + "mod-995b3971c802fa33d1e8772a", + "mod-92957ee0de7980fc9c719d03", + "mod-1b44d7490c1bab1a28faf13b", + "mod-7656cd8b9f3c2f0776a9aaa8", + "mod-49040f43d8c17532e83ed67d", + "mod-a1bb18b05142b623b9fb8be4", + "mod-9b1b89cd5b264f022df908d4", + "mod-3f601c90582b585a8d9b6d4b", + "mod-0f4a4cd8bc5da602adf2a2fa", + "mod-cee54b249e5709ba015c9342", + "mod-c096e9d35a0fa633ff44cda0", + "mod-3be22133d78983422a1da0d9", + "mod-ec09ae3ca7a100b5fa55556d", + "mod-df3c25d58c0f2295ea451896", + "mod-f9348034f6db4a0cbf002ce1", + "mod-ffe258ffef0cb8215e2647fe", + "mod-2fded54dba25de314f5f89fc", + "mod-7e2f3258e284cbd5d3adac6d", + "mod-60eb69f9fe1fbcab27fafb79", + "mod-38cb481227a16780e055daf9", + "mod-93380aca3aab056f0dd2e4e0", + "mod-a8a39a4fb87704dbcb720225", + "mod-455d4fbaf89d273aa029864d", + "mod-4e2125f21e95a0201a05fc85", + "mod-efd6ff5fba09516480c9e2e4", + "mod-2b2cb5f2f246c796e349f6aa", + "mod-2e55150ffa8226bdba0597cc", + "mod-f1c149177b4fb9bc2b7ee080", + "mod-60e11fd9921263398a239451", + "mod-5dd7573d658ce3d7ea74353a", + "mod-025199ea4543cbbe2ddf79a8", + "mod-e09bbf55f33f0d36061b2348", + "mod-3f71e0e4e5c692c7690b3c86", + "mod-22a231e7e2a8fa48e00405d7", + "mod-f215e43fe388f34d276e0935", + "mod-5f1b8ed2b401d728855c038c", + "mod-7b8929603b5d94f3dafe9dea", + "mod-6a73c250ca0d545930026d4a", + "mod-c996d6d5043c881bd6ad5b03", + "mod-2d8e2ee0779d753dbf529ccf", + "mod-d438c33c3d72df9bd7dd472a", + "mod-f235c77fff58b93b0ef4a745", + "mod-6e27fb3b8c84e1baeea2a944", + "mod-587a0dac663054ccdc90b2bc", + "mod-5d68d5d1029351abd62fa157", + "mod-eeb3f53b29866be8d2cb970f", + "mod-1a126c017b2b7dd41d6846f0", + "mod-82b6a522914548c8fd24479a", + "mod-303258444053b0a43538b62b", + "mod-4608ef549e373e94702c2215", + "mod-ea8a0a466499b8a4e9d2b2fd", + "mod-a25839dd6ba039a8c958583f", + "mod-00cbdca09e56b6109b846e9b", + "mod-fab341be779110d20904d642", + "mod-be77f5db5117aff014090a24", + "mod-5269202219af5585cb61f564", + "mod-c44377cbc773462d72dd13fa", + "mod-dc9656310d022085b2936dcc", + "mod-b1d30e1636da57dbf8144fd7", + "mod-a66773add774e134dc55fb9c", + "mod-bc30cadc96b2e14f87980a9c", + "mod-efae4e57fd7a4c96e3e2b085", + "mod-1159d5b65cc6179495dba86e", + "mod-3adb0b7ff3ed55bc318f2ce4", + "mod-55764c2c659740ce445946f7", + "mod-a152cd44db7715c440d48dda", + "mod-8178eae36aec57f1b202e180", + "mod-8eb2e47a2e706233783e8ea4", + "mod-0f688ec55978b6cd5ecd4803", + "mod-28ff727efa5c0915d4fbfbe9", + "mod-e421d8434312ee89ef377735", + "mod-0d23e37fd3828b9a02bf3b23", + "mod-cf03366f5eef469f1f9abae5", + "mod-eef3b769fd906f6d2e387d17", + "mod-520483a8a175e4c376a6fc66", + "mod-88c1741b3b46fa02af202651", + "mod-d3bd2f24c047572fef2bb57d", + "mod-ba811634639e67c5ad6dad6a", + "mod-8040973db91efbca29bd5a3f", + "mod-9b81da9944f3e64f4bb36898", + "mod-81df5ad5e23b1f5a430705f8", + "mod-62ff6356c1ab42c00fe12c14", + "mod-8fe5e92214e16e3971d40e48", + "mod-b986d7806992d6c650aa2abc", + "mod-a7c0beb3ec427a0c7c2c3f7f", + "mod-c3ac921e455e2c85a68228e4", + "mod-8a38038e04d5bed97a843cbd", + "mod-0e059ca33e0c78acb79559e8", + "mod-2c0f4f3afaaec106ad82bf77", + "mod-88b203dbc16db3025123970b", + "mod-7ff977b2cc6a6dde99d1c4a1", + "mod-c2ea467ec2d317289746a260", + "mod-7a54f789433ac1b88a2975b0", + "mod-fda58e5568b7fcba96a8a55c", + "mod-318b87a4c520cdb8c42c50c8", + "mod-da04ef1eca622af1ef3664c3", + "mod-10774a0b5dd2473051df0fad", + "mod-b08e6ddaebbb67ea6d37877c", + "mod-f2ed72921c23c1fc451fd89c", + "mod-60762ca0d2e77317b47957f2", + "mod-51a57a3bb204ec45b2b3f614", + "mod-c7ad59fd02de9e38e55f238d", + "mod-21706187666573b14b262650", + "mod-ca241437dd7ea992b976eec8", + "mod-bee55878a628d2e61003c5cc", + "mod-992e96869304ba6455a502bd", + "mod-ee32d301b857ba4c7de679c2", + "mod-f34f89c5406499b05c630026", + "mod-f6f853a3f874d365c69ba912", + "mod-eff94816a8124a44948e1724", + "mod-0dd8c1befae8423fcc7d4fcd", + "mod-a5b4a44206cc0f3e39469a88", + "mod-28add79b36597a8f639320cc", + "mod-a877268ad21d1ba59035ea1f", + "mod-a65de7b43b60edb96e04a5d1", + "mod-eac0ec2113f231fdec114b7c", + "mod-f486beaedaf6d01b3f5574b4", + "mod-0ec41645e6ad231f2006c934", + "mod-fa9dc053ab761e9fa1b23eca", + "mod-21be8fb976449bbe3589ce47", + "mod-074e7c12d54384c86eabf721", + "mod-f6d94e4d95aaab72efaa757c", + "mod-94b639d8e332eed46da2f8af", + "mod-c16d69bfcfaea5546b2859a7", + "mod-570eac54a9d81c36302eb6d0", + "mod-a216d9e19ade66b2cdd92076", + "mod-33ee18e613fc6fedad6673e0", + "mod-c85a25b09fa10c16a8188ca0", + "mod-dcce6518be2af59c2b776acc", + "mod-90e071af56fbf11e5911520b", + "mod-52720c35cbea3e8d81ae7a70", + "mod-f67afbbcc2c394e0b6549ff8", + "mod-1275104cbadf8ae764bfc2cd", + "mod-4dda3c12aae4a0b02bbb9bc6", + "mod-01f50a9581dc3e727fc130d5", + "mod-7450e07dbc1823bd1d8e3fe2", + "mod-8d759e4c7b88f1b808059f1c", + "mod-3a5d1ce49d5562fbff9b9306", + "mod-9acd412d29faec50fbeccd6a", + "mod-495a8cfd97cb61dc39d6d45a", + "mod-e89fa4423bde3e1df39acf0e", + "mod-106e970ac525b6ac06d425f6", + "mod-80ff82c43058ee3abb67247d", + "mod-3672cbce400c58600f903b87", + "mod-16a76d1c87dfcbecec53d1e0", + "mod-c20c965c5562cff684a7448f", + "mod-81f4b7f4c2872e1255eeab2b", + "mod-9e7f56ec932ce908db2b6d6e", + "mod-786d72f288c1067b50b58d19", + "mod-dc4c1cf1104faf408e942485", + "mod-db1374491b6a82aa10a4e2f5", + "mod-e3c2dc56fd38d656d5235000", + "mod-f070f31fd907efb13c1863dc", + "mod-4700c8f714ccf0e905a08548", + "mod-7b1b348ef9728f14361d546b", + "mod-08bf03fa93f7e9b593a27d85", + "mod-0ccdf7c27874394c1e667fec", + "mod-7421cc24ed6c5406e86d1752", + "mod-fdc4ea4eee14d55af206496c", + "mod-193629267f30c2895ef15b17", + "mod-fbadd87a5bc2c6b89edc84bf", + "mod-edb169ce79c580ad64535bf1", + "mod-97abb7050d49b46b468439ff", + "mod-205c88f6af728bd7b4ebc280", + "mod-81f929d30b493e5a0e7c38e7", + "mod-24557f0b00a0d628de80e5eb", + "mod-f02071779c134bf1f3cd986f", + "mod-7934829c1407caf63ff17dbb", + "mod-8205b641d5e954ae76b97abb", + "mod-bd690c0739e6d69fef5168df", + "mod-eb0874681a80fb675aa35fa9", + "mod-3656e78dc552244814365733", + "mod-5e2ab8dff60a96c7ee548337", + "mod-d46e3dca63550b5d88963cef", + "mod-e2398716441b49081c77cc4b", + "mod-aedcf7cff384ad96bb4dd624", + "mod-ed207ef8c636062a5e6b4824", + "mod-aec11f5957298897d75000d1", + "mod-9efb2c33ee124a3e24fea523", + "mod-8b99d278a4bd1dda5f119d4b", + "mod-7411cdffb6063d8aa54dc02d", + "mod-7a1941c482905a159b7f2f46", + "mod-fed8e983d33351c85dd25540", + "mod-719cd7393843802b8bff160e", + "mod-199bee3bfdf8ff3ae8ddfb47", + "mod-804948765f192d7a33e792cb", + "mod-54aa1c38c91b1598c048b7e1", + "mod-7fc4f2fefdc6a8526f0d89e7", + "mod-ff98cde0370b2a3126edc022", + "mod-afcd806760f135d6236304f7", + "mod-79fbe6e699a260de286c1916", + "mod-59e682c774f84720b4dbee26", + "mod-1b2ebbc2a937e6ac49f4abba", + "mod-af922777bca2943d44bdba1f", + "mod-481b5289c108ab245dd3ad27", + "mod-9066efb52e5f511aa3343c63", + "mod-afb8062b9c4d4f2ec0da49a0", + "mod-d9d28659a6e092680fe7bfe4", + "mod-8e3a02ebf4990dac5ac1f328", + "mod-eb0798295c928ba399632ae3", + "mod-877c0c159531ba36f25904bc", + "mod-b4394327e0a18b4da4f0b23a", + "mod-97a0284402c885a38947f96c", + "mod-bd7e6bb16e1ad3ce391d135f", + "mod-78abcf74349b520bc900b4b4", + "mod-39dd430c0afde7c4cff40e35", + "mod-a7ed1878dc1aee852010d3b6", + "mod-0d61128881019eb50babac8d", + "mod-bc1007721c3fa6b589fb67e6", + "mod-e54e69b88583bdd6e9367055", + "mod-b5400cea84fe87579754fb90", + "mod-945ca38aa8afc3373e859950", + "mod-6df30845bc1a45d2d4602890", + "mod-937d387706a55ae219092722", + "sym-4ed35d165f49e04872c7e4c4", + "sym-a3457454de6108179f1ec8da", + "sym-aaf45e8b9a20d0605c7b9457", + "sym-021316b8a7f0f31c1deb509c", + "sym-4c758022ba1409f727162ccd", + "sym-ba61b2da568a8430957bebda", + "sym-e900ebe76ecce43aaf5d24f2", + "sym-901bc277fa06e0174b43ba7b", + "sym-3f4bb30871f440aa6fe225dd", + "sym-6504c0a9f99e4155e106ee87", + "sym-391cd0ad29e526ec762b9e17", + "sym-f635182864f3ac12fd146b08", + "sym-1b784c11203f8434f7a7b422", + "sym-c0866f4c8525a7cda3643511", + "sym-330150d457066afcda5b7a46", + "sym-03745b230e975b586dc777a1", + "sym-b1dca79c5b291f8dd61a833d", + "sym-df323420a40015574b5089aa", + "sym-9ccdf92e4adf9fa07a7e377e", + "sym-c3502e1f3d90c7c26761f5f4", + "sym-ad0e77bff9ee77397c79a3fa", + "sym-06f0bf4480d67cccc3add52b", + "sym-95dd67d0cd361cb5f2b88afa", + "sym-2b40125fbedf0cb6fba89e95", + "sym-f3028da883261e86359dccc8", + "sym-4d24e52bc3a5c0bdcd452d4c", + "sym-1139b73552af9d40288f4c90", + "sym-1d808b63fbf2c67fb439c095", + "sym-e32e44bfcebdf49d9a969318", + "sym-1ec5df753d7d6df2a3c0b665", + "sym-0d9241c6cb29dc51ca2476e4", + "sym-916fdcbe410020e10dd53012", + "sym-313f38ec2adc5733ed48c0e8", + "sym-68ad200c1f9a7b73f1767104", + "sym-7f0e02118f2b037cac8e5b61", + "sym-896653dd09ecab6ef18eeafb", + "sym-ce6b65968084be2fc0039e97", + "sym-92037a825e30d024067d8c76", + "sym-c401ae9aee36cb4f36786f2f", + "sym-96977030f2cd4aa7455c21d3", + "sym-c016626e9c331280cdb4d8fc", + "sym-d740cb976f6edd060dd118c8", + "sym-7f843674679cf60bbd6f5a72", + "sym-87c14fd05b89eaba4fbda8d2", + "sym-73c5d831e416f436360bae24", + "sym-38287d16f095005b0eb7a36e", + "sym-f7735d839019e173ccdd3e4f", + "sym-e39ea46175ad44de17c9efe4", + "sym-8bc60a2dd19a6fdb5e3076e8", + "sym-2b5fdb6334800012c0c21e0a", + "sym-4bc719fa7ed33d0c0fb06639", + "sym-e192f30b074d1edf17119667", + "sym-b8035411223e72d7f64883ff", + "sym-09396517c2f92c1491430417", + "sym-e19a1b0efe47dafc170c58ba", + "sym-715811d58eff5b235d047fe4", + "sym-29cdb4a3679630a0358d0bb9", + "sym-e7f1193634eb6a1432bab90e", + "sym-39ad83de6dbc734ee6f2eae9", + "sym-b24fcbb1e6da7606d5ab956d", + "sym-a97260d74feb8d40b8159924", + "sym-3d6be09763d2fc4d2f20bd02", + "sym-da8ad413c16f675f9c1bd0db", + "sym-044c0cd881405407920926a2", + "sym-f9fd6387097446254eb935c8", + "sym-e22d61e07c82d37fa1f79792", + "sym-64f05073eb8b63e0b34daf41", + "sym-dbefc3247e30a5823c8b43ce", + "sym-c4370920fdeb465ef17c8b21", + "sym-7188ccb0ba83016cd3801872", + "sym-6d351d10f2f5649ab968f2b2", + "sym-883a5cc83569ae7c58e412a3", + "sym-8372518a1ed84643b175aa1f", + "sym-a51c939dff4a5e40a1fec4f4", + "sym-f6143006b5bb02e58d1cdfd1", + "sym-93b583f25b39dd5043a57609", + "sym-6a61ddc900f83502ce966c87", + "sym-1dc16c4d97767da5a8ba92df", + "sym-8a36fd0bc7a6c7246c94552d", + "sym-b1ecce6dd13426331f10ff7a", + "sym-3ccaac6d613ab621d48c1bd6", + "sym-03d2f03f466628c99110c9fe", + "sym-e301425e702840c7c452eb5a", + "sym-65612d35e155d68ea523c22f", + "sym-94068717fb4cbb8a20aef4a9", + "sym-73813058cbafe75d8bc014cb", + "sym-72b80bba0d6d6f79a03804c0", + "sym-6e63a24523fe42cfb5e7eb17", + "sym-593116d1b2ae359f4e87ea11", + "sym-435a8eb4599ff7a416f89497", + "sym-f87642844d289130eabd697d", + "sym-dedd79d84d7229103a1ddb7a", + "sym-7adc23abf4e8a8acec688f93", + "sym-7f14f88347bcca244cf8a411", + "sym-c982f2f82f706d9d86aea680", + "sym-3a341cd97aa6d9e263ab4efe", + "sym-05e822a8c9768075cd3112d1", + "sym-55f1e23922682c986d5e78a8", + "sym-75bce596d3a3b20b32eae3a9", + "sym-f8a68c982e390715737b8a34", + "sym-2d3d0f8001aa1e3e157f6635", + "sym-04bc154da92633243986d7b2", + "sym-9ec9d14b420c136f2ad055ab", + "sym-22888f94aabf4d19027aa29a", + "sym-476f58f0f712fc1238cd3339", + "sym-c24ee6e9b89588b68d37c5a7", + "sym-b058a864b0147b40ef22dc34", + "sym-182e4b2c4ed82c4649e788c8", + "sym-8189287fafe28f1a29259bb6", + "sym-2fb5f502d3c62d4198da0ce5", + "sym-28727c3b132db5057f5a96ec", + "sym-cde4ce83d38070c40a1ce899", + "sym-5d646fd1cfe0e17cb51346f1", + "sym-b9b90d82b944c88c1ab58de0", + "sym-31c33be12d870d49abebd5fa", + "sym-d0d64d4fc8e8d4b4ec31835f", + "sym-7bf629517168329e74c2bd32", + "sym-b29e811fe491350308ac06b8", + "sym-ff86ceaf6364a62d78d53ed6", + "sym-6995a8f5087f01da57510a6e", + "sym-0555c3e21f71d512bf2aa06d", + "sym-088e4feca2d65625730710af", + "sym-ff403e1dfce4c56345763593", + "sym-9b067f8328467594edb11d13", + "sym-abd0fb38bc1e2e1d78131296", + "sym-4b53ce0334c9ff70017d9dc3", + "sym-bc3b3eca912b76099c1af0ea", + "sym-77782c5a42eb69b7fd33faae", + "sym-f9cb8e510b8cba2d08e78e80", + "sym-bc376883c47b9974b3f9b40c", + "sym-9385a1b99111b59f02ea3be7", + "sym-0f0d4600642782084b3b828a", + "sym-2ee3f05cec0b12fa40875f34", + "sym-3f102a31789c1c42742dd190", + "sym-209ff12f41847b166015e17c", + "sym-94e5bb176f153bde3b6b48f1", + "sym-d5346fe3bb91b90eb51eb9fa", + "sym-6ca98de3ad27618164209729", + "sym-b2460ed9e3b163b181092bcc", + "sym-b87588e88bbf56a9c070e278", + "sym-755339ce0913bac7334bd721", + "sym-6a818f9fd5c21fcf47ae40c4", + "sym-df496a4e47a52c356dd44bd2", + "sym-b06a527d10cdb09ebee088fe", + "sym-64c02007f5239e713862e1db", + "sym-339a2a1eb569d6c4680bbda8", + "sym-9f409942f5777e727bcd79d0", + "sym-a2fe879a8fff114fb29f5cdb", + "sym-067794a5bdac5eb41b6783ce", + "sym-e2d757f6294a7b7db7835f28", + "sym-f4915d23263a4a38cda16b6f", + "sym-4dd122b47d1fafd381209f0f", + "sym-5ec4994d7fb7b6b3ae9a0569", + "sym-723d9c080f5c28442e40a92a", + "sym-ac52cb0edf8f80fa1d5943d9", + "sym-ff5862c98f8ad4262dd9f150", + "sym-718e6d8d70f9f926e9064096", + "sym-3e3fab842036c0147cdb56ee", + "sym-b1b117fa3a6d894bb68dbdfb", + "sym-6518ddb5bf692e5dc79df999", + "sym-4a3d8ad1a77f9be2e1f5855d", + "sym-dbb2421ec5e12a04cb4554bf", + "sym-a405536da4e1154d16dd67dd", + "sym-34946fb6c2cc5dbd7ae1d6d1", + "sym-a5f718702300aa3a1b6e9670", + "sym-120689569dff13e791a616c8", + "sym-b76ea08541bcf547d731520d", + "sym-c8bc37824a3f00b4db708df5", + "sym-b497e588d7117800565edd70", + "sym-9686ef766bebe88367bd5a98", + "sym-43560768d664ccc48d7626ef", + "sym-b93468135cbb23c483ae9407", + "sym-6961c3ce5bea80c5e10fcfe9", + "sym-0e90fe9ca3e727a8bdbb6299", + "sym-b78e473ee66613e6c4a99edd", + "sym-65c1fbabdc4bea0ce4367edf", + "sym-2e9114061b17b842b34526c6", + "sym-85147fb17e218d35bff6a383", + "sym-edb7ecfb5537fdae3d513479", + "sym-11f7a29a146a7fdb768afe1a", + "sym-667af0a47dceb57dbcf36f54", + "sym-a208d8b1bc05ca8277e67bee", + "sym-23c18a98f6390b1fbd465c26", + "sym-6c526fdd4a4360870f257f57", + "sym-ed8c8ef93f74a3c81ea0d113", + "sym-e274f79c394eebcbf37f069e", + "sym-55751e8a0705973956c52eff", + "sym-7d347d343f5583f3108ef749", + "sym-814fc78d247f82dc6129930b", + "sym-0871aa6e102abda94617af19", + "sym-c3e4b175ff01e1f274c41db5", + "sym-5a244f6ce76a00ba0de25fcd", + "sym-1f47eb8005b28cb7189d3c8f", + "sym-13e86d885df58c87136c464c", + "sym-50a6eecae9b02798eedd15b0", + "sym-86f1c2ba6df80c3462f73386", + "sym-5419cc7c70d6dc28ede67184", + "sym-e1b45754c758f023c3a5e76e", + "sym-e6743ad14bcf55d20f8632e3", + "sym-4dd84807257cb62b4ac704ff", + "sym-8b3c2bd15265d305e67cb209", + "sym-645d9fff4e883a5deccf2de4", + "sym-31a2691b3ced1d256bc49903", + "sym-2da70688fa2715a568e76a1f", + "sym-a0930292275c225961600b94", + "sym-a1a6438fb523e84b0d6a5acf", + "sym-a1c65ad34d586b28bb063b79", + "sym-64d2a4f2172c14753f59c989", + "sym-907f082ef9ac5c2229ea0ade", + "sym-f84154f8b969f50e418d2285", + "sym-932261b29f07de11300dfdcf", + "sym-5f5d6e223d521c533f38067a", + "sym-56374d4ad2ef16c38050375a", + "sym-ddbf97b6be2197cf825559bf", + "sym-70953d217354d6fc5f8b32fb", + "sym-4ef8918153352cb83bb60850", + "sym-0ebd17d9651bf9b3835ff6af", + "sym-dc33aec7c6d3c82fd7bd0a4f", + "sym-dda40d6be392e4d7e2dd40d2", + "sym-f8d8b4330b78b1b42308a5c2", + "sym-76a4b520bf86dde1eb2b6c88", + "sym-0bf6b255d48cad9282284e39", + "sym-d44e2bcce98f6909553185c0", + "sym-f4ce6b69642416527938b724", + "sym-150f5307db44a90b224f17d4", + "sym-0ec81c1dcbfd47ac209657f9", + "sym-06248a66cb4f78f1d5eb3312", + "sym-b41d4e0f6a11ac4ee0968d86", + "sym-b0da639ac5f946767bab1148", + "sym-d1e74c9c937cbfe8354cb820", + "sym-dfffa627fdec4d63848c4107", + "sym-280dbc4ff098279a68fc5bc2", + "sym-abdb3236602cdc869ad06b13", + "sym-0d501f564f166a8a56829af5", + "sym-bcc166dd7435c0d06d00377c", + "sym-2931981d6814493aa9f3b614", + "sym-fea639e9aff6c5a0e542aa41", + "sym-8945ebc15041ef139fd5f4a7", + "sym-36a378064a0ed4fb5a6da40f", + "sym-79e697a24600f39d08905f79", + "sym-93adcb2760142502f3e2b5e0", + "sym-fbd5550518428a5f3c1d429d", + "sym-776bf1dc921966d24ee32cbd", + "sym-c9635b7880669c0bb6c6b77e", + "sym-e99088c9d2a798506405e322", + "sym-aff2e2fa35c9fd1deaa22c77", + "sym-80e15d6a392a3396e9a9cddd", + "sym-b6804e6844dd104bd67125b2", + "sym-e197ea41443939ee72ecb053", + "sym-4af6c1457b565dcbdb9ae1ec", + "sym-13ba93caee7dafdc0a34cf8f", + "sym-64773d11ed0dc075e88451fd", + "sym-bff46c872aa7a5d5524729d8", + "sym-b886e68b7cb3206a20572929", + "sym-f0ecd914d2af1f74266eb89f", + "sym-353b1994007d3e786d57e4a5", + "sym-33ad11cf35db2f305b0f2502", + "sym-744ab442808467ce063eecd8", + "sym-466b012a63df499de8b9409f", + "sym-58d4853a8ea7f7468daf5394", + "sym-4ce553c86e8336504c8eb620", + "sym-c2a6707fd089bf08cac9cc30", + "sym-53a5db12c86a79f27769e3ca", + "sym-dfde38af76c341720d753903", + "sym-5647f82a940e1e86a9d6bf3b", + "sym-f3b88c82370c15bc11afbc17", + "sym-08acd048f40a94dcfb5034b2", + "sym-0a3a10f403b5b77d947e96cf", + "sym-e3fa5fe2f1165ee2f85b2da0", + "sym-7a74034dc52098492d0b71dc", + "sym-d5a0e6506cccbcfea1745132", + "sym-cbd20435eb5b4e9750787653", + "sym-b219d03ed055f1f7b729a6a7", + "sym-4b8d14a11dda7e8103b0d44a", + "sym-6b75b0851a7f9511ae3bdd20", + "sym-338b16ec8f5b69d81a074d2d", + "sym-1026fbb4213fe879c3de7679", + "sym-5c0261c1abb8cef11691bfe3", + "sym-ae7b21a626aad5c215c5336b", + "sym-c0d7489cdd6eb46002210ed9", + "sym-8da3ea034cf83decf1f3a0ab", + "sym-bd1b00d8d06df07a62457168", + "sym-449dc953195e16bbfb9147ce", + "sym-4081da70b1188501521a21dc", + "sym-7ef5dea300b4021b74264879", + "sym-758f05405496c1c7b69159ea", + "sym-758256edbb484a330fd44fbb", + "sym-93c4622ced07c39637c1e143", + "sym-93205ff0d514f7be865d6def", + "sym-720f8262db55a416213d05d7", + "sym-2403c7117e90a27729574deb", + "sym-873410bea0fdf1494ec40a5b", + "sym-0a358f0bf6c9d69cb6cf6a65", + "sym-f8da7f288f0c8f5d8a43e672", + "sym-4d25122117d46c00f28b41c7", + "sym-d954c9ed7804d9c7e265b086", + "sym-929fb3ff8a3cf6d97191a8fc", + "sym-2bff24216394c4d238452642", + "sym-a850bd115879fbb3dfd1c754", + "sym-cc16259785e538472afb2878", + "sym-5d4d5843ec2f6746187582cb", + "sym-758c7ae0108c14cea2c81f77", + "sym-3a737e2cbc5ab28709b77f2f", + "sym-0c7adeaa8d4e009a44877ca9", + "sym-d17cdfb4aef3087444b3b0a5", + "sym-1e9d4d2f1ab5748a2c1c1613", + "sym-1f2728924b585fa470a24818", + "sym-65cd5481814fe9600aa05460", + "sym-b3c4e54a35894e6f75f582f8", + "sym-3263681afc7b0a4a70999632", + "sym-db7de0d1f554c5e6d55d2b56", + "sym-363a8258c584c40b62a678fd", + "sym-e3c02dbe29b87117fa9b04db", + "sym-e32897b8d4bc13fd2ec355c3", + "sym-7e6112dd781d795b89a0d740", + "sym-9a8e120674ffb3d5976882cd", + "sym-266f75531942cf49359b72a4", + "sym-4c6ce39e98ae4ab81939824f", + "sym-dc90f4d9772ae4e497b4d0fb", + "sym-15181e6b0024657af6420bb3", + "sym-f22d728c52d0e3f559ffbb8a", + "sym-17663c6ac3e09ee99af6cbfc", + "sym-a9c92d2af5e8dba2d840eb22", + "sym-fc707a99e6953bbe1224a9c7", + "sym-26cbeaf8371240e40a439ffd", + "sym-907710b9e6031b27ee27d792", + "sym-297ca357cdc84e9e674a3d04", + "sym-62a7a1c4aacf761c94364b47", + "sym-3db558af1680fcbc9c209696", + "sym-c591da5cf9fd5033796fad52", + "sym-f16008b8cfe1c5b3dc8f9be0", + "sym-0235109d7d5578b7564492f0", + "sym-7983e9e5facf67e208691a4a", + "sym-af4dfd683d1a5aaafa97f71b", + "sym-b20154660e4ffdb468116aa2", + "sym-b4012c771eba259cf8dd4592", + "sym-4435b2ba48da9de578ec8950", + "sym-5d2517b043286dce6d6847d7", + "sym-1d9d546626598e46d80a33e3", + "sym-30522ef6077dd999b7f172c6", + "sym-debcbb487e8f163b6358c170", + "sym-c40d1a0a528d0efe34d893f0", + "sym-719fa881592657d7ae9efe07", + "sym-433666f8a3a3ca195a6c43b9", + "sym-3bf1037e30906da22b26b10b", + "sym-1bc6f773d7c81a2ab06a3280", + "sym-d8616b9f73c4507701982752", + "sym-c40372def081f07b71bd4712", + "sym-c6c98cc6d0c52307aa196164", + "sym-33df031e22a2d073aff29d0a", + "sym-adc4065dd1b3ac679d5ba2f9", + "sym-4e80afaf50ee6162c65e2622", + "sym-2e9af8ad888cbeef0ea5caea", + "sym-ad0f36d2976eaf60bf419c15", + "sym-0115c78857a4e5f525339e2d", + "sym-5057526194c060d19120572f", + "sym-fb41addf4b834b1cd33edc92", + "sym-9281614f452adafc3cae1183", + "sym-b4ef38925e03b3181e41e353", + "sym-814eb4802fa432ff5ff8bc82", + "sym-f954c7b798e4f9310812532d", + "sym-7a7c3a1eb526becc41e434a1", + "sym-4722e7f6cce02aa7a45c0ca8", + "sym-8e6fb1c5edb7ed62e201d405", + "sym-954b96385b9de9e9207933cc", + "sym-0e15f799bb0693f0511b578d", + "sym-3d6899724c0d41cfd6f474f0", + "sym-7cfb9cd62ef3a3bcba6133d6", + "sym-e627965d04649dc42cc45b54", + "sym-5115d455ff0b3f7736ab7b40", + "sym-646106dbb39ff99ccb6a16d6", + "sym-29dba20c5dbe8beee9ac139b", + "sym-c876049c95a83447cb3011f5", + "sym-d37277bb65ea84e12d02d020", + "sym-c0b505bebd5393a5e4195eff", + "sym-abf9a552e1b6a1741fd89eea", + "sym-9b202e46a4d2e18367b66d73", + "sym-aca57b52879b4144d90ddf08", + "sym-bfe9e935a34dd0614090ce99", + "sym-a3370fbc057c5e1c22e7793b", + "sym-7694c211fe907466d8273a7e", + "sym-2fbba88417d7be653ece3499", + "sym-329d6cd73bd648317027d590", + "sym-355d9ea302b96d2ada7be226", + "sym-d85124f8888456a01864d0d7", + "sym-01250ff7b457022d57f75b23", + "sym-7bc468f24d0bd68c3716ca14", + "sym-27a071409a6448a327c75916", + "sym-df74c42f1d0883c0ac4ea037", + "sym-30f023b8001b0d2954548e94", + "sym-a6fa2da71477acd8ca019d69", + "sym-fa476f03eef817925c888ff3", + "sym-890d84899d1bd8ff66074d19", + "sym-8ac635c37f1b1f7426a5dcec", + "sym-5a46c4d2478308967a03a599", + "sym-87e02332b5d839c8021e1d17", + "sym-10c6bfb19ea88d09f9c7c87a", + "sym-8246e2dd08e08f2ea2f20be6", + "sym-495cf45bc0377d9a5afbc045", + "sym-d5c01fc2a6daf358ad0614de", + "sym-447a5e701a52a48725db1804", + "sym-59da84ea7c765c8210c5f666", + "sym-e1df23cfd63cd30cd63d4a24", + "sym-fc7baad9b538d0a808c7d220", + "sym-02558c28bb9eb59cc31e9119", + "sym-fddea2d2d61e84b8456298b3", + "sym-93274c44efff4b1f949f3bb9", + "sym-259ac048cb816234ef7ada5b", + "sym-622da0c12aaa7a83367c4b2e", + "sym-4404f892d433afa5b82ed3f4", + "sym-ab44157beed9a9398173d77c", + "sym-537af0b9d6bfcbb6032397db", + "sym-5dbe5cd27b7f059f8e4f033b", + "sym-e090776af88c5be10aba4a68", + "sym-cc0c03550be8730b76e8f71d", + "sym-c83faa9c46614bf7cebaca16", + "sym-051d763051b0c844395392cd", + "sym-49a8ade963ef62d280f2e848", + "sym-0548e973988513ade19763cd", + "sym-bdbcff3b286cf731b94f76b2", + "sym-f400625db879f3f88d41393b", + "sym-6cdfa0f864c81211de3ff9b0", + "sym-294062945c7711d95b133b38", + "sym-9dbf2f45df69dc411b69a2a8", + "sym-81336d6a9eb6d22a151740f1", + "sym-1d174f658713e92a4c259443", + "sym-f7a2710d38cf71bc22ff1334", + "sym-d8cf8b69f000df4cc6351d0b", + "sym-5a2acc2e51e49fbeb95ef067", + "sym-c78e678099c0210e59787676", + "sym-24f5eddf8ece217b1a33972f", + "sym-692898daf907a5b9e4c65204", + "sym-d3832144a7e9a4bf0fcb5986", + "sym-c8868bf639c69391eaf998e9", + "sym-935a4eb2274a87e70e7dd352", + "sym-21ea3e3d8b21f47296fc535a", + "sym-2a9103f7b96eefd857128feb", + "sym-5f0e7aef4f1b0d5922abb716", + "sym-18b97e86025bc97b9979076c", + "sym-b4f763e263a51bb1a1e12bb8", + "sym-c7dffab7af29280725182e57", + "sym-a37ce98dfcb48ac1f5fcaba5", + "sym-699ee11061314e7641979d09", + "sym-e9ff6a51fed52302f183f9ff", + "sym-e1860aeb3770058ff3c3984d", + "sym-969cec081b320862dec672b7", + "sym-a5aa69428632eb5ff35c24d2", + "sym-16f750165c16e7c1feabd3d1", + "sym-d579b50fddb19045a7bbd220", + "sym-e1d9c0b271d533213f995550", + "sym-b922f1d9098d7a4cd4f8028e", + "sym-7052061179401b661022a562", + "sym-4ce023944953633a4e0dc5a5", + "sym-02de4cc64467c6c1e46ff17a", + "sym-f63492b60547693ff5a625f1", + "sym-a7ec4c6121891fe7bdda936f", + "sym-1ac6951f1be4ce316fd98a61", + "sym-eae3b686b7a78c12fefd52e2", + "sym-e322a0df9bf74f4fc0c0f861", + "sym-d3e903adb164fb871dcb44a5", + "sym-fbe78285d0072abe0aacde74", + "sym-1c44d24073f117db03f1ba50", + "sym-9cff97c1d186e2f747cdfad7", + "sym-1ca6e2211ead3ab2a1f77cb6", + "sym-484103a36838ad3f5a38b96b", + "sym-736b0e99fea148f91d2a7afa", + "sym-6b2c9e3fd8b741225f43d659", + "sym-764a18253934fb84aa1790b3", + "sym-e865be04c5b176c2fcef284f", + "sym-9a5684d731dd1248da6a21ef", + "sym-aa719229bc39cea907aee9db", + "sym-60cc3956d6e6308983108861", + "sym-139e5258c47864afabf7e515", + "sym-1eb50452b11e15d996e1a4c6", + "sym-f9714bf135b96cbdf541c7b1", + "sym-98437ac92e6266fc78125452", + "sym-53c3f376c6ca6c8b45db6354", + "sym-76003dd5d7d3e16989e7df26", + "sym-bde7808e4f3ae52d972170ba", + "sym-6ec12fe00dacd7937033485a", + "sym-3dca5e0bf1988930dfd34eae", + "sym-3531a9f3d8f1352b9d2dec84", + "sym-25f02bcbe29f875ab76aae3c", + "sym-92a40a270894c02b37cf69d0", + "sym-1ba1c6a5034cc8145e2aae35", + "sym-8c2ac5f81d00901af3bea463", + "sym-da62bb050091ee1e534103ae", + "sym-97ec0c30212c73ea6d44f41e", + "sym-ed793153e81f7ff7f544c330", + "sym-bcd8d64230b3e4e1e4710afe", + "sym-d5003da50d926831961f0d79", + "sym-bc129c1aa7fc1f9a707643a5", + "sym-62b1324f20925569af0c7d94", + "sym-c98b14652a71a92d31cc89cf", + "sym-1dcc44eb77d700302113243c", + "sym-d6281bdc047c4680a97d4794", + "sym-bce8660b398095386155235c", + "sym-eba7e3ffe54ed291bd2c48ef", + "sym-66abca7c0a890c9eff451b94", + "sym-666e0dd7d88cb6983b6be662", + "sym-5d90512dbf8aa5778c6bcb7c", + "sym-3646a67443f9f0c3b575a67d", + "sym-e70e7db0a823a91830f5515e", + "sym-5914e64d0b069cf170aa5576", + "sym-36d98395c44ece7890fcce75", + "sym-c9875c12cbfb75e4c02e4966", + "sym-f3eb9527e8be9c0e06a5c391", + "sym-0d6db2c721dcdb828685335c", + "sym-c0e0b82cf3d383210e3687ac", + "sym-2ce5be0b32faebf63b290138", + "sym-e6abead0194cd02f0495cc2a", + "sym-20e212251cc34622794072f2", + "sym-5aa3e772485150f93b70d58d", + "sym-0675df5dd09d0c94ec327bd0", + "sym-44b266c5d9c712e8283c7e0a", + "sym-00e4d2471550dbf3aeb68901", + "sym-38c603195178db449d516fac", + "sym-dc57bdd896327ec1e9ace624", + "sym-5b8a041e0679bdedd910d034", + "sym-6ee2446f641e808bde4e7235", + "sym-c5f31d9588601c7bab55a778", + "sym-e26838f941e0e2ede79144b1", + "sym-9facbddf56f375064f7a6f13", + "sym-e40519bd11de5db85a5cb89d", + "sym-e7dfd5110b562e97bbacd645", + "sym-46c88a0a592f6967e7590a25", + "sym-79addca49dd8649fdbf169e0", + "sym-d5490f6681fcd2db391197c1", + "sym-71e6bd4c4b0b02a86349faca", + "sym-33d96de548fdd8cbeb509c35", + "sym-6aaff080377fc70f4d63df08", + "sym-2debecab24f2b4a86f852c86", + "sym-58aa0f8f51351fe7591fa958", + "sym-d626f382c8dc9af8ff69319d", + "sym-9e475c95e17f39691c4974b4", + "sym-c2708b5bd2aec74c2b5a2047", + "sym-8c622b66d95fc98d1e9153c6", + "sym-71219d9d011df90af21998ce", + "sym-b3c9530fe6bc8214a0c89a12", + "sym-1c40d34e39b9c81e9db2fb4d", + "sym-2e345d314823f39a48dd8f08", + "sym-83027ebbdbde9ac6fbde981f", + "sym-af61311de9bd1fdf4fd2d6b1", + "sym-5cb1d1e9703f8d0bc245e88c", + "sym-092836808af7c49bfd955197", + "sym-fca070294aa37d9e0f563512", + "sym-072403f79fd59ab5fd6649f5", + "sym-ce7e617516b8387a1aebc005", + "sym-85c3a202917ef7026c598fdc", + "sym-5f6e92560d939affa395fc90", + "sym-18f330aab1779d66eb306b08", + "sym-e5cfd57efcf98523e19e1b24", + "sym-c9e0be9fb331c15638c40e0f", + "sym-4cf081c8a0e72521c880cd6f", + "sym-2366b9c6fa0a3077410d401b", + "sym-4aafd6328a7adcebef014576", + "sym-22c7330c7c1a06c23dc4e1f3", + "sym-92423687c06f0129bca83956", + "sym-197d1722f57cdf3a40c2ab0a", + "sym-c1c65f4dc014c86b200864ee", + "sym-4f027c742788729961e93bf3", + "sym-bff0ecde2776dec95ee3c547", + "sym-8c05083af24170fddc969ba7", + "sym-d8f944d79e3dc0016610f86f", + "sym-edfadc288a1910878e5c329b", + "sym-346648c4e9d12febf4429bca", + "sym-2fe54b5d30a79b4770f2eb01", + "sym-5a6c9940cb34d31053bf3690", + "sym-b9f92856c72f6227bbc63082", + "sym-265b48bf8b8cdc9d09019aa2", + "sym-73c8ae8986354a28b97fbf4c", + "sym-b5cf3e2f5dc01ee8991f324a", + "sym-d9261695c20f2db1c1c7a30d", + "sym-205554026dce7da322f2ba6b", + "sym-65c1018c321675804e2e81bb", + "sym-5eb556c7155bbf9a5c0934b6", + "sym-8ba03001bd95dd23e0d18bd3", + "sym-c466293ba66477debca41064", + "sym-8bc3042db4e035701f845913", + "sym-b3f2856c4eddd3ad35183479", + "sym-60b1dcfccd7d912d62f07c4c", + "sym-269e4fbb61c177255aec3579", + "sym-1cc5ed15187d2a43e127dda5", + "sym-b46342d64e2d554a6c0b65c8", + "sym-c495996d00ba846d0fe68da8", + "sym-34935ef1df53fbbf8e5b3d33", + "sym-750a05a8d88d303c2cdb0313", + "sym-c26fe2934565e589fa3d57da", + "sym-871a354ffe05d3ed57c9cf48", + "sym-c7515a5b3bc3b3ae64b20549", + "sym-f4182f20b12ea5995aa8f2b3", + "sym-a9f646772777a0cb950cc16a", + "sym-9ccdee42c05c560def083e01", + "sym-a71913c481b711116ffa657b", + "sym-aeb49a4780bd3f40ca3cece4", + "sym-71784c490210b3b11901f352", + "sym-a0b60f97b33a82757e742ac5", + "sym-d418522a11310eb0211f7dbf", + "sym-ca42b4774377bb461e4e6398", + "sym-605d3a415b8b3b5bf34196c3", + "sym-68bcd93b16922175db1b5cbf", + "sym-aff919f6ec93563946a19be3", + "sym-768b3d2e609c7a7d9e7e123f", + "sym-fcae6dca65ab92ce6e8c43b0", + "sym-791e472cf07c678ab89547f5", + "sym-2476c69d26521df4fa998292", + "sym-89d3088a75cd27ac95940da2", + "sym-882a6fe5739f28b6209f2a29", + "sym-04c11175ee7e0898d4e3e531", + "sym-f1ad2eeaf85b22aebcfd1d0b", + "sym-34489faeacbf50c7bc09dbf1", + "sym-382b32b7744f4a1bcddc6aaa", + "sym-951698e6c9f720f735f0bfe3", + "sym-56ec447a61bf949ac32f434b", + "sym-8ae7289bebb399343fb0af1e", + "sym-c860224b0e2990892c904249", + "sym-a09e4498f797e281ad451c42", + "sym-27459666e0f28d8c21b10cf3", + "sym-f5e1dae1fda06177bf332cd5", + "sym-250be326bd2cf87c0c3c55a3", + "sym-37d7e586ec06993e0e47be67", + "sym-624aefaae7c50cc48d1d7856", + "sym-6453b4a51f77b0e33e0871f2", + "sym-be8ac4ac4c6f736c62f19940", + "sym-ce51cedbbc722d871e574c34", + "sym-eb769a327d251102c9539621", + "sym-ed231c11ba266752dca686de", + "sym-621907ad30456ba7db233704", + "sym-c65207b5ded1f6d2eb1bf90d", + "sym-2fb8ea47d77841cb1c9c723d", + "sym-8b770fac114c0bea3fceb66d", + "sym-949988062e958db45bd9006c", + "sym-e55d97a832aabc5025e3f6b8", + "sym-c1ce5d44ff631ef5243e34d8", + "sym-e137071690ac87c5a393b765", + "sym-434133fb66b01eec771c868b", + "sym-4ceb05e530a44839153ae9e8", + "sym-b0b72ec0c9b1eac0e797bc45", + "sym-790b8d8a6e814aaf6a4e7c7d", + "sym-8a9ddd5405a61cd9a4baf5d6", + "sym-7df1dc85869fbbaf76a62503", + "sym-74dbc4492d4bf45e8d689b5b", + "sym-1854d72579a983ba0293a4d3", + "sym-86dad8a3cc937e2681c558d1", + "sym-7c8b1e597e24b16c3006ca81", + "sym-ebadf897a746e8a865087841", + "sym-5e11387ff92f6c4d914dc0a4", + "sym-ee20da2e2f815cdc3b697b6e", + "sym-3494444d4459b825581393ef", + "sym-3a5a479984dc5cd0445c8e8e", + "sym-869301cbf3cb641733e83260", + "sym-f4fba0d8454b5e6491208b81", + "sym-342fb500933a92e19d17cffe", + "sym-e3db749d53d156363a30b86b", + "sym-adf9d9496a3cfec4c94b94cd", + "sym-16c80f6db3121ece6476e5d7", + "sym-861f69933d806c3abd4e18b8", + "sym-75ec46fc47366c9b781406cd", + "sym-da76f11367328a93d87c800b", + "sym-76104fafaed374671547faa6", + "sym-91c078071cf3bd44fed43181", + "sym-ae10579f5cd0544e81866e48", + "sym-4f3ca06d30e0c5991ed7ee43", + "sym-43d111e11c00d152f6d456d3", + "sym-b76986452634811c854b7bcd", + "sym-19c9fcac0f3773a6015cff76", + "sym-11ffa0ff4b9cbe0463fa3f26", + "sym-23c0251ed3d19e6d489193fd", + "sym-547a9804abe78ff64ea33519", + "sym-696e1561c1a2c5179fbe7b8c", + "sym-c287354ee92d5c615d89cc43", + "sym-23e295063ad4930534a984bc", + "sym-afa009c6b098d9d3d6e87a8f", + "sym-07c3526c86f89eb7b7bdf796", + "sym-7ead72cfe057bb368a414faf", + "sym-80ccf4dd54906ba3c0fef014", + "sym-ac3c393c58273c4f0ed0a42d", + "sym-2efee4d3250f8fd80bccd9cf", + "sym-96eda9bc4b46c54fa62b2965", + "sym-41baf1407ad0beab3507733a", + "sym-97870c7cba45e51609b21522", + "sym-734e3a5727ae21fda3a09a43", + "sym-6950382b643e36b7ebb9e97f", + "sym-05f548e455547493427a1712", + "sym-e55d437bced177f411a9e0ba", + "sym-99d0edcde347cde287d80898", + "sym-464d5a8a8386571779a75764", + "sym-3ad962db5915e15e9b5a34a2", + "sym-21c2ed26a4fe3b789e89579a", + "sym-8aedcb314a95fff296cdbfe5", + "sym-cfd4e7bab70a3d76e52bd76b", + "sym-609c86d82fe4ba01bc8c6426", + "sym-b96188aba996df22075f02f0", + "sym-9034b49b1dbb743c13ce4423", + "sym-716fbb6f4698e042f41b8e8e", + "sym-02b934d8e3081f0cfdd54829", + "sym-ff641b5d8ca6f513a4d3b737", + "sym-b7922ddeb799711e40b0fb1d", + "sym-b1e9c1eea121146321e34dcb", + "sym-9ca99ef032d7812c7bce60d9", + "sym-9503de3abf0ca0864a61689e", + "sym-214822ec9f3accdab1355b01", + "sym-c8fe10042fae0cfa98b678d7", + "sym-a6206915db8c9da96c5a41bc", + "sym-c4dca8104a7e770f5b14889a", + "sym-d24a5f5062450cc9e53222c7", + "sym-7e44ecf471155de43ccdb015", + "sym-a992f1d60a32575155de14ac", + "sym-0efb93278b37aa89e05f1dc5", + "sym-3a4f17c210e5304b6f3f01be", + "sym-eb28186a18ca7a82b4739ee5", + "sym-fd9b1cfd830532f47e6eb66b", + "sym-a0dfc671381543a24d283735", + "sym-856b604c8ffcc654e328cd6e", + "sym-c8933ccebe7118591c8afcc1", + "sym-a16b3eeaac4eb18401aa51da", + "sym-bb965537d23959dfc7d6d13b", + "sym-954857d9de43b16abb5dbaf4", + "sym-078110cfc9aa1e4ba9ed2e56", + "sym-f790c0e252480bc29cb40414", + "sym-2319ce1d3ed21356066c5192", + "sym-f099526ff753bd09914f1de8", + "sym-7f5da43a0d477c46a19e3abd", + "sym-c0c210d0df565b16c8d0d80c", + "sym-c018307d8cc1e259cefb154e", + "sym-d7b517c2414088a4904aeb3a", + "sym-e3c670f7e35fe6bf834577f9", + "sym-2b93335a7e40dc75286de672", + "sym-3b8254889d32edf4470206ea", + "sym-6a24a4d06666621c7d17bc44", + "sym-2c09ca6eda3f95ab06c68035", + "sym-c246a28d0970ec7dbe8f3a09", + "sym-54918e7606a7cc1733327a2c", + "sym-000374b63ff352aab2d82df4", + "sym-1ef8169e505fee687e3ba380", + "sym-c0903a5a6dd9e6b8196aa9a4", + "sym-05f009619889c37708311d81", + "sym-a5aede25adb18f1972bc6c14", + "sym-d13e4e1829f9414ddb93be5a", + "sym-58e1cdee015b7eeec5aaadbe", + "sym-04aa1e473c32e444df8b274d", + "sym-d0b2b2174c96ce5833cd9592", + "sym-b989cdce3dc1128fb557122f", + "sym-46722d97026838058df81e45", + "sym-0c7b5305038aa0a21c205aa4", + "sym-812eb740fd13dd1b77c10a32", + "sym-26b6a576d6b118ccfe6cf8ec", + "sym-847bb4ee8faf0a5fc4c39e92", + "sym-1891e05e8289e29a05504569", + "sym-f9cb4b9053f2905d6ab0609b", + "sym-51e8384bb9ab40ce0e10f672", + "sym-3af7a4ef926ee336982d7cd9", + "sym-e20f8a059946a439843cfada", + "sym-77b8585e6d04e0016f59f728", + "sym-eb639a43a4aecf119bf79cb0", + "sym-349de95fe57411b99b41c921", + "sym-a1714406759fda051e877a2e", + "sym-95a959d434bd68d26c7ba5e6", + "sym-4128cc9e2fa3688777c26247", + "sym-a9cd5796f950012d75eae69d", + "sym-48770c393e18cf8b765fc100", + "sym-2b28a6196b9e548ce3950f99", + "sym-4e2725aab0d0a1de18f1eac1", + "sym-093389e29bebd11b68e47fb3", + "sym-6fdb260c63552dd4e0a7cecf", + "sym-4e9414a938ee627a77f20b4d", + "sym-cdee53ddf59cf3090aa22853", + "sym-972af425d3e9bcdfc778ff00", + "sym-2cd44b8eac8f99115ec71079", + "sym-e409f5ac53d90fb28708d5f5", + "sym-ca3b7bc9b989c0d74884a2c5", + "sym-aa005302b41d0195a5db344b", + "sym-87340b6f42c579b19095fad3", + "sym-feb77422b7084f0c4d2e3c5e", + "sym-e4e428838d58a143a243cba6", + "sym-0728b731cfd7b6fb01abfe3f", + "sym-2f9e3c7322b2c5d917683f2e", + "sym-1e031fa7cd7911f05bf22195", + "sym-1d0d5e7cf7a7292ad57f24e7", + "sym-8f8a5ab65ba4325bb48884e5", + "sym-a64f1ca18e821cc20c7e5b5f", + "sym-8903c8beb154afaae29ce04c", + "sym-321f64e73c58c62ef0ee1efc", + "sym-4653da5df6ecfbce9a04f0ee", + "sym-24358b3224fd4341ab81efa6", + "sym-bc830ddff78494264067c796", + "sym-fb3ceadeb84c52d53d5da1a5", + "sym-5c6b366e18862aea757080c5", + "sym-4183c8c8ba4c87b3ac71efcf", + "sym-d902b89c70bfdaef1e7ec63c", + "sym-48a3b6b4e214dbf05a884bdd", + "sym-98c4295951482a3e982049bb", + "sym-ab85b50fe1b89f2116b32b8e", + "sym-9ff2092936295dca05e0edb7", + "sym-6f65f0a6507ebc9370500240", + "sym-ca05c53ed6f6f579ada9bc57", + "sym-f18eee79205c6745588c2717", + "sym-49e2485b99dd47aa7a15a28f", + "sym-337135b7799d55bf38a2d6a9", + "sym-c6ac07d6b729b12884d9b167", + "sym-631364af116d4a86562c04f9", + "sym-1a7e0225b76935e084fa2329", + "sym-9ccc28bee226a93586ef7b1d", + "sym-6680f554fcb4ede4631e60b2", + "sym-304eaa4f7c51cf3fdbf89bb0", + "sym-45a76b1716a67708f11a0909", + "sym-4a436dd527be338afbf98bdb", + "sym-b2276d6a6402e65f56fd09ad", + "sym-717b0f06032fce2890d123ea", + "sym-a70b0054aa7a6bdc502006e3", + "sym-ae84450ca16ec2017225c6e2", + "sym-248d2e44333f70a7724dfab9", + "sym-3ea29e1b08ecca0739db484a", + "sym-57d373cba5ebbb373b4dc896", + "sym-f78a8502a164052f35675687", + "sym-641d0700ddf43915ffca5d6b", + "sym-f61ba3716295ceca715defb3", + "sym-18d8719d39f12759faddaf08", + "sym-71eec5a8e8af51150f452fff", + "sym-daa32cea34b9049e4b060311", + "sym-7b62ffb16704e1d6d9ec6baf", + "sym-3ad7b7a5210718d38b4ba00d", + "sym-69b2fc8c4e62020ca15890f1", + "sym-5311b846d2f0732639ef5fd5", + "sym-0534ba9f686cfc223b17d309", + "sym-3cf158bf5511b0f35b37c016", + "sym-10211a30b965f147b9b74ec5", + "sym-768bb4fdd7199b0134c39dfb", + "sym-48e4099783c4eb841ccd2f70", + "sym-bb91b975550883cfdd44eb71", + "sym-d6f03b0c7bdecce24c1a8b1d", + "sym-e9eeedb988fa9f0d93d85898", + "sym-a726f0c8a505dca89d7112eb", + "sym-fb2870f850b894405cc6b6f4", + "sym-c06b4d496f43bc591932905d", + "sym-e4b8097a5ba3819fbeaf9658", + "sym-268e622d0ec0e2c563283be3", + "sym-8450a6eb559ca4627e196e23", + "sym-c2ac5bb71bdb602bdd9aa98b", + "sym-c01d178ff00381d6e5d2c43d", + "sym-ca3dbc3c56cb1055cd0a0a89", + "sym-e5d0b42c6f9912d4ac96df07", + "sym-c94aaedf877b31be4784c658", + "sym-6ad07b078d049901d4ccfed5", + "sym-1db75ffac09598cb3cfb34c1", + "sym-3e07be48eec727726678254a", + "sym-5fdfacd14d17871a556566d7", + "sym-4d5e1dcfb557a12f53357826", + "sym-45cd1de4f2eb8d8a20b32d8d", + "sym-5087892a29105232bc1c95bb", + "sym-3d9c34a3fca6e49261b71c65", + "sym-1447dd6a4335c05fb5ed3cb2", + "sym-b62136244c8ea0814eedab1d", + "sym-2a8fb09cf87c7ed8b2e472f7", + "sym-e4ce5a5590c74675e5d0843d", + "sym-71f146aad1749b8d9048fdb9", + "sym-e932c1609a686ad5f6432fa2", + "sym-3435e923dc5c81930b0c8a24", + "sym-478e8ddcf7388b01c25418b2", + "sym-7ffbcc1ce07d7b3b23916771", + "sym-a066fcb7bd034599296b5c63", + "sym-00cbbbcdb0b955db9f940293", + "sym-80491bfd51e3d62b35bc137c", + "sym-3510b71d5489f9c401a9dc5e", + "sym-8c4521928e9d317614012781", + "sym-30eead59051be586144da020", + "sym-0c100fc39b8f04913905c496", + "sym-de79dd64a40f89fbb6d128ae", + "sym-a2ae8aabb26ee6c4a5dcd1f1", + "sym-d96c31998797e41a6b848c0d", + "sym-a6adf2f17e7583aff2cc5411", + "sym-86e7b8627dd8998cff427159", + "sym-a03cefb08d5d832286f18983", + "sym-bc81dd6cd59401b6fd78323a", + "sym-66305b056cc80ae18d7fb7ac", + "sym-f30624819d473bf882e23852", + "sym-499b75c3978caaaad3d70456", + "sym-9246344e2f07f04e26846059", + "sym-6e936872ac6e08ef9265f7e6", + "sym-5ae8aed9695985bfe76de157", + "sym-e7651dee3e697e21bb4b173e", + "sym-08f815d80cefd75cb3778d5c", + "sym-70cd0342713e391c581bfdc1", + "sym-d27bb0ecc07e0edfbb45db98", + "sym-4a18dbc9ae74cfc715acef2e", + "sym-cfd05571ce888587707fdf21", + "sym-02bb643864b28ec54f6bd102", + "sym-4c50bd826d82ec0f9d3122d5", + "sym-ae837a9398f38a1b4ff93d6f", + "sym-d893e963526d03d160b5c0be", + "sym-79fe6fcef068226cd66a69bb", + "sym-6725cb4ea48529df75fd1445", + "sym-0d364798a0a06efaa91eb9d1", + "sym-3c9b9e66f6b1610394863a31", + "sym-8aee505c10e81a828d772a8f", + "sym-2a25f06310b2ac9c6ba22a9a", + "sym-8c33d38f419fe8a74c58fbe1", + "sym-d1c3b22359c1e904c5548b0c", + "sym-cafb910907543389ada5a5f8", + "sym-dacd66cc49bfa3589fd39daf", + "sym-1251f543b194078832e93227", + "sym-624bf6cdfe56ca8483217b9a", + "sym-35058dc9401f299a3ecafdd9", + "sym-dcff225a257a375406e03bd6", + "sym-a6d2f8c35523341aeef50317", + "sym-f7284b2c87bedd3283d87b7c", + "sym-ca6bb0b08dd15d039112edce", + "sym-ebc7f1171082535469f04f37", + "sym-918f122ab3c74c4aed33144c", + "sym-67a715a261c2e12742293927", + "sym-3006ba9f0477eb57baf64679", + "sym-20016088f1d08b5e28873771", + "sym-69f096bbd5c10a59ec215101", + "sym-584d8c1e5facf721d03d3b31", + "sym-d5c23b7e0348db000e139ff7", + "sym-ac5e1756fdf78068d6983990", + "sym-c4426882c67f5c79e389ae4e", + "sym-9eaab80712308d2527f57103", + "sym-df06fb01fc8a797579c8ff4c", + "sym-d70e965fb2fa15cbae8e28f6", + "sym-e5cb9daa8949710c5b7c5ece", + "sym-a80634c6150e4ca0c1ff8c8e", + "sym-d8d437339e4ab9fc5178e4e3", + "sym-2c271a791fcb37bd28c35865", + "sym-4c05f83ad9df2e0a4bf4345b", + "sym-a02371360ecb1b189e94f7f7", + "sym-9b3d5d43fddffa465a2e6e3a", + "sym-ad193a03f24f1159ca71a32f", + "sym-1c98b6e9b9a0b4ef1cd0ecbc", + "sym-e3f654b992e0b0bf06a68abf", + "sym-a0e1be197d6920a4bf0e1a91", + "sym-a21c13338ed84dbc2259e0be", + "sym-43c1406a11c590e987931561", + "sym-172932487433d3ea2b7e938b", + "sym-45c0e0b348a5d87bab178a86", + "sym-17bce899312ef74e6bda04cf", + "sym-7f56f2e032400167794c5cde", + "sym-8bdfa293ce52a42f7652c988", + "sym-831248ff23fbc8a042573d3d", + "sym-fd41948d7ef0926f2abbef25", + "sym-8e801cfbfaba0ef3a4bfc08d", + "sym-dfc05adc455d203de748b3a8", + "sym-47afbbc071054930760a71ec", + "sym-fa7bdf8575acec072c44d87e", + "sym-5806cf014947d56b477072cf", + "sym-ed3191a6a92de3cca3eca041", + "sym-c99cdd731f091e7b6eede0a4", + "sym-08d4f6621e5868c2e7298761", + "sym-ac3b2be1cf2aa6ae932b5ca3", + "sym-4b898ed7fd8e376c3dcc0fa4", + "sym-ab9e1f208621fd5510cbde8d", + "sym-4291220b529d489dd8c2c906", + "sym-e6ccef4d3d370fbaa7572337", + "sym-1589a1e584764f6eb8336b5a", + "sym-26ec3e6a23b13e6a7ed0966e", + "sym-0b71fee0d1ec6d5a74be7f4c", + "sym-daa74c90db8a33dcb0ec2371", + "sym-2e2e66ddafbee3d7888773eb", + "sym-8044943db3ed1935a237d515", + "sym-6bb546b5a3ede7b2f84229b9", + "sym-11e0c9793af13b02d531305d", + "sym-bf14541c9f03ae606b9284e0", + "sym-1c0cc65675b8167e5c4294e5", + "sym-5db43f643de4a8334d9a9238", + "sym-b21a801e0939b0bf2b33d962", + "sym-27f8cb315a1d5f9c24544f69", + "sym-2de50e452bfe268a492fe5f9", + "sym-19d36c36107e8655af5d7fd3", + "sym-93b168eacf2c938baa400513", + "sym-c307df6cb4b1b232420fa6c0", + "sym-35fba28731561b9bc332a14a", + "sym-3f63d6b16b75553b0e99c85d", + "sym-c1f5d92afff2b3686df79483", + "sym-954b6ffd923957113b0c728a", + "sym-a4a1620ae3de23766ad15ad4", + "sym-a822d74085d8f72397857b15", + "sym-997a716aa0bbfede4eceda6a", + "sym-c9ceccc766be21a537a05305", + "sym-4de4b6def4e23443eeffc542", + "sym-29a2b1c7f0a8a39cdffe219b", + "sym-aafd9c6d9db98cc7c5c0ea56", + "sym-aeaa314f6b50142cc32f9c3d", + "sym-36b6cff10252161c12781dc3", + "sym-8f7c95d1f4cf847566e547d8", + "sym-4d0cd68dc95fdba20ca8881e", + "sym-f1abc6862b1d0b36440db04a", + "sym-8536e2d1ed488580c2710e4b", + "sym-7dff1b0065281e707833c23b", + "sym-0cabe6285a709ea15e0bd36d", + "sym-5b8f00d966b8ca663f148d64", + "sym-c41905143e6699f28eb26389", + "sym-a21b4ff1c04b9173c57ae18b", + "sym-c6e8e3bf5cc44336d4a53bdd", + "sym-53d1518d6dfc17a1e9e5918d", + "sym-890d5872f24fa2a22e27e2e3", + "sym-b2396a7fda447bd25860da35", + "sym-10a3e239cb14bdadf9258ee2", + "sym-b626e437b5fab56729c32df4", + "sym-bf0f461e046c6b3eda7156b6", + "sym-7bf31afd65c0bef1041e40b9", + "sym-d253e7602287f9539e290e65", + "sym-dc56c00366f404d1f5b2217d", + "sym-d8c9048521b2143c9e36d13a", + "sym-5609925abe4d5877637c4336", + "sym-d072989f47ace9a63dc8d63d", + "sym-d0d37acf5a0af3d63226596c", + "sym-cabfa6d9d630de5d0e430372", + "sym-6335fab8f96515814167954f", + "sym-8b01cc920d0bd06a1193a9a1", + "sym-b1241e07fa5cdef9ba64f091", + "sym-bf445a40231c525d7586d079", + "sym-370aa540920a40ace242b281", + "sym-734f496461dee58b5b6c7d3c", + "sym-8b528a851f77e9286724f6be", + "sym-4c7db004c865013fef5a7c4e", + "sym-f4b66f329402ad34d35ebc2a", + "sym-b3b5244d7b171c0138f12fd5", + "sym-f4fdde41deaab86f8d60b115", + "sym-0e15393966ef0943f000daf9", + "sym-8d3749fede2b2e386f981c1a", + "sym-95ba42084419317913e1ccd7", + "sym-7e71f23db4caf3a7432f457e", + "sym-9410a1ad8409298493e17d5f", + "sym-2d6c4188b92343e2456b5d18", + "sym-a90e5e15eae22fe4adc31f37", + "sym-f3a8a6f36f83d6d9e247d7f2", + "sym-04c2ceef4c3f8944beac82f1", + "sym-38b02a91ae9879e5549dc089", + "sym-e7d959bae3d0df1109f3601a", + "sym-7a01cccc7236812081d5703b", + "sym-08c52ead6283b6512a19e7b9", + "sym-929c634b12a7aa1ec2481909", + "sym-37bb8c7ba0ff239db9cba19f", + "sym-4b139176b9d6042ba0754489", + "sym-7c3e7a7f3f7f86ea2a9dbd52", + "sym-5c7189605b0469a06fc45888", + "sym-57f1e8814b776abf7cfcb369", + "sym-328f9da16ee12c0b54814b90", + "sym-2b3c856a5d7167c51953c23a", + "sym-810d19a7dd2eb70806b98d41", + "sym-c2ac65367e7703953b94bddc", + "sym-4324855c7c8b5a00929d7aca", + "sym-6fbeed409b0c14bea654142d", + "sym-3ef5edcc5ab93bfdbb6ea4ce", + "sym-cdfca17855f38ef00b83818e", + "sym-f1d990a68c25fa7a7816bc3f", + "sym-1040e8086b2451ce433c4283", + "sym-935db248e7fb60e78c118a28", + "sym-1716ce2cda401faf8f60ca09", + "sym-d654ce4f484f119070a59599", + "sym-29ad19f6194b9d5dc5b3d151", + "sym-b3e914af9f4c1670dfd90569", + "sym-885fad8121718032d1888dc8", + "sym-598cda53c818b18f719f656d", + "sym-9dbdd68a5833762c291f7b28", + "sym-0fa95cdb5dcb0b9e6f103b95", + "sym-51083b6c8157d81641a32e99", + "sym-b1daa6c5d31676598fdc9c3c", + "sym-2a10d01fea3eaadd6e2bc6d7", + "sym-d0b0e6f4f8117ae02923de11", + "sym-3e7ea7f35aa9b839723b2c1c", + "sym-7fe7aed70ba7c171a10dce16", + "sym-cf9b266780ee9759d2183fdb", + "sym-fc2927a008b8b003e851d59c", + "sym-c2223eb98e7971a5a84a534e", + "sym-3cf8c47572a9e0e64d4a2a13", + "sym-813e158b993d299057988303", + "sym-8df316cdf3ef951ce8023630", + "sym-187664cf6efeb1c5567ce3c8", + "sym-45104794847951b00f5a9bbe", + "sym-0d658d44d5b23dfd5829fc4f", + "sym-235384a3d4f36552d55ac7ef", + "sym-bfa8af7e83408600dde29446", + "sym-8d8d40dad8d622f8cc5bbd11", + "sym-68a8ebbbf4a944b94d5fce23", + "sym-1d7e1deea80d0d5c35cc1961", + "sym-54c2cfe0e786dfb0aa4c1a30", + "sym-ea53351a3682c209afbecd62", + "sym-ac7d7af06ace8e5f7480d85e", + "sym-278000824c34267ba77ed2e4", + "sym-3157118d1e9c323aab1ad5d4", + "sym-5639767a6380b54d939d3083", + "sym-effd5e53e1c955d375aee994", + "sym-340c7ae28f4661acc40c644e", + "sym-1949526bac7e354d12c4d919", + "sym-e6dc4654d0467d8dcb6d5230", + "sym-72b8022bd1a30f87bde3c08e", + "sym-f8403c44d50f0ee7817f9858", + "sym-2970b8afa8e36b134fa79b40", + "sym-364dcbfe78e7ff74ebd1b118", + "sym-5b7e48554055803b885c211a", + "sym-f5a0b179a238fe0393fde5cf", + "sym-23ad4039ecded53df33512a5", + "sym-0a51a789ef7d435fac22776a", + "sym-b38886cc276ae1b280c9e69b", + "sym-c1ea911292523868bd72a57e", + "sym-e49e87255ece0a5317b1d1db", + "sym-b824be730682f6d1b926c57e", + "sym-043ab78b6f507bf4ae48ea53", + "sym-a30c004044ed694e7dd2baa2", + "sym-91661b3c5c62bff622a981db", + "sym-5c346fb8b4864942959afa56", + "sym-c03360033ff46d621cf2ae17", + "sym-62051722bb59e097df10746e", + "sym-f732c52bdfb53b3c7c57e6c1", + "sym-c3a520c376d94fdc7518bf55", + "sym-b5118eb6e684507b140dc13e", + "sym-60b2be41818640ffc764cb35", + "sym-3c18c93e1cb855e2917ca012", + "sym-0714329610278a49d4d896b8", + "sym-4de139d75083bce9f07d0bf5", + "sym-5c77c8e8605a322c4a8105e9", + "sym-00a687dd7a4ac80ec046b1d9", + "sym-911a2d4197fac2defef73b40", + "sym-f4c921bd7789b2105a73e6fa", + "sym-e1ba932ee6b752b90eafb76c", + "sym-1965f9efde68a4394122285f", + "sym-4830c08718fcd7f4335a117d", + "sym-97320893d204cc7d476e3fde", + "sym-c4344bea317284338ea29949", + "sym-d2e86475bdb3136bd4dbbdef", + "sym-6595be3b08ea5be4fbcb7009", + "sym-364a66b2b44b55df33318f93", + "sym-444d637aead560497f9078f4", + "sym-7f62f790c5ca3020d63c5547", + "sym-16320e5dfefd4484bf04a2b1", + "sym-a0665fbdedc04f490c5c1ee5", + "sym-ff34e80e38862f26f8542d67", + "sym-6efc9acf51b6852ebb17b0a3", + "sym-898018ea10de7c9592a89604", + "sym-1be242ae8eea8ce44d3ac248", + "sym-cf46caf250429c89dc5b39e9", + "sym-3d14e568424b742a642a1957", + "sym-b3dbfe3fa6d39217fc5d4f7d", + "sym-4c471c5372546d33ace71bb3", + "sym-9b8195b95964c2a498993290", + "sym-2ad003ec730706f8e7afa93c", + "sym-f06d0734196eba459ef68266", + "sym-0d1dcfcac0642bf15d871302", + "sym-a24cd6be8abd3b0215b2880d", + "sym-afb6526449d86d945cdb2452", + "sym-7c70e690b7433ebb78afddca", + "sym-0ab6649bd8566881a8ffa026", + "sym-cef374c0e9418a45db67507b", + "sym-5bdeb8b177e513df30db0c8f", + "sym-dd2bf0489df3b5728b851e75", + "sym-2014db7e46724586aa33968e", + "sym-873aa7dadb9fae6f13424d90", + "sym-3d8045d8ce322957d53c5a4f", + "sym-eb71a8dd3518c88cba790695", + "sym-fb863731199cef86f8981fbe", + "sym-af1c37237a37962494d06df0", + "sym-87aeaf45d3ccc3eda2f7754f", + "sym-1047da550cdd7c7818b318f5", + "sym-d6c1efb7fd3f747e6336fa5c", + "sym-7e7c43222ce7463a1dcc2533", + "sym-804bb364f18a73fb39945cba", + "sym-d6b52ce184f5b4b4464e72a9", + "sym-8851eae25a7755afe330f85c", + "sym-849aec43b27a066eb7146591", + "sym-eacdd884e39f2f675fcacdd6", + "sym-0cff4cfd0a8b9a5024c1680a", + "sym-3e2cd2e59eb550fbfb626bcc", + "sym-d90ac9be913c03f89de49a6a", + "sym-51b1658664a464a28add7d39", + "sym-dd055a2b7be616db227088cd", + "sym-df685b6a9983f7afd60ba389", + "sym-98134ecd770aae6dcbec90ab", + "sym-1ddfb88e111a1fc510113fb2", + "sym-8daeceb7337326d9572adf7f", + "sym-12af65c030a64890b7bdd5c5", + "sym-c906e076f2017c51d5f17ad9", + "sym-7536e2fefc44da98f1f245f0", + "sym-7481da4d2551622256f79c34", + "sym-57cc691568b21b3800bc42b8", + "sym-9d0b831a20db10611cc45fb1", + "sym-5262afb38ed02f6e62f0d091", + "sym-990cc459ace9fb6d1eb373ea", + "sym-734d63d64bf5b1e1a55b41ae", + "sym-0258ae2808ceacc5e5c7daf6", + "sym-748b9ac5e4eefbb8f1c662db", + "sym-905c4a303dc09878f445885a", + "sym-13f054ebc0ac09ce91489435", + "sym-9234875151f1a7f0cf31b9e7", + "sym-daabbda2f57bbfdba83b8e83", + "sym-733e1ea545c75abf365916d0", + "sym-30146865aa7ee601c7c84c2c", + "sym-babb5160904dfa15d9efffde", + "sym-76bd6ff260e8e858c0a13b22", + "sym-267418c45b8286ee4f1c6f22", + "sym-718d0f88adf207171e198984", + "sym-335b3635e60265c0f047f94a", + "sym-47e8e5e81e562513babffa84", + "sym-65fd4ae8ff6b4e80cd8e7ddf", + "sym-9e392e3be1bb8e80b9d8eca0", + "sym-4b548d9bad1a3f7b3b804545", + "sym-8270be34adad1236a1768639", + "sym-906fc1a6f627adb682f73f69", + "sym-98bddcf841a7edde32258eff", + "sym-eeda3f868c196fe0d908da30", + "sym-ef6157dcde41199793a2f652", + "sym-b3a77b32f73fa2f8e5b6eb38", + "sym-28b62a49592cfcedda7995b5", + "sym-0c27439debe25460e5640c81", + "sym-da8dcc5ae3bdb357233500ed", + "sym-fe29ef8358240f8b5d0efb67", + "sym-b363a17c893ebc8b8c6ae66d", + "sym-e04adf46980d5389c13c53f2", + "sym-24238aae044a9288508e528f", + "sym-a2b4ef37ab235210f129c582", + "sym-79b1cc421f7bb8225330d102", + "sym-2d2d0700e456ea680a685e38", + "sym-74ba7a042ee52e20b6cdfcc9", + "sym-220ff4ee1d8624cffd6e1d74", + "sym-2989dc3b816456aad25e312a", + "sym-33f3a54f75b5f49ab6ca4e18", + "sym-f94e3f7f5326b8f03a004c92", + "sym-6fc1a8d7bec38c1c054731cf", + "sym-f289610a972129ad1a034265", + "sym-065cec27a89a1f96d35d9616", + "sym-c622baacd0af9f2fa1e8a75d", + "sym-5e3c44e475fe3984a48af08e", + "sym-9d04b4352850e4e29d81aa9a", + "sym-8d46e34227aa3b82778ad701", + "sym-0d16d90a0af194182c7763d8", + "sym-294aec35de62c4328120b87f", + "sym-c10aa7411e9a4c559b6bf35f", + "sym-bb4af358ea202588d8c6fb5e", + "sym-4f60154a5b98b9ad1a439365", + "sym-8532559ab87c585dd75c711e", + "sym-c75dad10441655e24de54ea9", + "sym-32194fbfce8c990fbf259c10", + "sym-2b50e307c6dd33f305ef5781", + "sym-20fdb18a1d51a344c3e5f1a6", + "sym-21f9add087cbe8548e5cfaa7", + "sym-28528c136e20c5b9216375cc", + "sym-125aa959f581df6cef0211c3", + "sym-1c67049066747e28049dd5e3", + "sym-815707b26951dca6661da541", + "sym-8d5722b175b0c9218f6f7a1f", + "sym-ef97a186c9a7b5c8aabd5a90", + "sym-d4cba561cffde016f7f5b7a6", + "sym-0df78011e78e75646718383c", + "sym-3ea283854050f93f09f7bd41", + "sym-8865a437064bf5957a1cb25d", + "sym-fb22a88dee4e13f011188bb4", + "sym-61acf2e50e86a7b8950968d6", + "sym-38903f0502c45543a1abf916", + "sym-dc1f8edeeb79e07414f75002", + "sym-bc5ae08b5a8d0d4051accdc7", + "sym-7a79542eed185c47fa11f698", + "sym-d252a54842776aa74372f6f2", + "sym-c1d0127d63060ca93441f113", + "sym-66031640dec8be166f293f56", + "sym-55f93e8069ac7b64652c0d68", + "sym-99b0d2564383e319659c1396", + "sym-b4dfd8c83a7fc0baf92128df", + "sym-1cfae654989b906d03da6705", + "sym-28d0b0409648d85cbd16e1fa", + "sym-e66e3cbcbd613726d7235a91", + "sym-07c2b09c468e0b5ad536e20f", + "sym-f57f553914fb207445eda03d", + "sym-d71b89a0ab10dcdd511293d3", + "sym-7061b9df6db226c496e459c6", + "sym-fe23be8635119990ef0c5164", + "sym-29213aa85f749813078f0b0d", + "sym-66423d47c95841fbe2ed154c", + "sym-8721b786443fefdf61f3484d", + "sym-442e0e5efaae973242d3a83e", + "sym-4a56ab36294dcc8703d06e4d", + "sym-8fb8125b35dabb0bb867c2c3", + "sym-7e7b96a10468c1edce3a73ae", + "sym-c48b984748dadec99be2ea79", + "sym-27adc406e8d7be915bdab915", + "sym-9dfd285f7a17eac27325557e", + "sym-f6d470d11d1bce1c9ae5c46d", + "sym-dd0d6da79a6076f6a04e978a", + "sym-9cfa7eb6554a93203930565f", + "sym-0c9c446090c5e603032ab8cf", + "sym-44d515e6bda84183724780b8", + "sym-44f589250824db7b5a096f65", + "sym-b97361a9401c3a71b5cb1998", + "sym-92202682f16c52bae37d49f3", + "sym-56f866c2f73fcd13683b856e", + "sym-fc93c1389ab92ee65c717efc", + "sym-70988e4b53bbd62ef2940b36", + "sym-3cf96cee618774e41d2dfe8a", + "sym-5e497086f6306f35948392bf", + "sym-5d5bc71be2e25f76fae74cf0", + "sym-65524c0f66e7faa0eaa27ed8", + "sym-32d856454b59fac1c5f9f097", + "sym-ef424ed39e854a4281432490", + "sym-e301fc6bbdb4b0a55d179d3b", + "sym-ea690b435ee55e2db7bcf853", + "sym-c1c3b15c1ce614072f76c61b", + "sym-7b7933aea3be7d0c5d9c4362", + "sym-951f37505baec8059fcb4a8c", + "sym-74a72391e547cae03f9273bd", + "sym-b37deaf5ad3d42513eeee725", + "sym-80af24f09cb8568074b9237b", + "sym-8a00aee2ef2d139bfb66e5af", + "sym-52e28e3349a0587ed39bb211", + "sym-68764677ca5ad459e67db833", + "sym-908c55c5efe8c66740e37055", + "sym-40cdf81aea9ee142f33fdadf", + "sym-3d600ff95898af2342185384", + "sym-a5031dfc8e0cc73fef0da379", + "sym-1a3586208ccd98a2e6978fb3", + "sym-5c8e5e8a39104aecb286893f", + "sym-1e4bb01db213569973c9fb34", + "sym-386b941d76f4c8f10a187435", + "sym-465a6407cdbddf468c7c3251", + "sym-90e4a197be8ff419ed66d830", + "sym-66f6973f6288a7f36a7c1d28", + "sym-af3f501ea2464a1d43010bea", + "sym-7109d15742026d0f311996ea", + "sym-534438d5ba67b8592440eefb", + "sym-c48ae3e66b0f174a70e412e5", + "sym-4e12f25c5ce54e2bbda81d0c", + "sym-cdc874c6e398062ee16c8b38", + "sym-89e994f15545e398c7e2addc", + "sym-e955b50b1f96f9bc3aaa5e9c", + "sym-76dcb81a85f54822054465ae", + "sym-a2efbf53ab67834889766768", + "sym-36bf66ddb8ab891b109dc444", + "sym-bc1c20fd0bfb030ddaff6c17", + "sym-ed1b2b7a517b4236d13f0fc8", + "sym-86a02fdc381985fdd13f023b", + "sym-859e3974653a78d99db2f73e", + "sym-ac44c01f6c74fd8f6a21f2c7", + "sym-8e107677b94e23a6f3b219d6", + "sym-ebc9cfd3e7f365a40b76b5b8", + "sym-aff49eab772515d5b833ef34", + "sym-4339ce5f095732b35ef16575", + "sym-5b3fdf7b2257820a91eb1e24", + "sym-4de085ac34821b291958ca8d", + "sym-43063258f1f591add1ec17d8", + "sym-a929d1427bf0e28aee1d273a", + "sym-28d49c217cc2b5c0bca3f7cf", + "sym-7d64282ce8c2fd92b6a0242d", + "sym-bbe82027196a1293546adf88", + "sym-707d977f3ee1ecf261ddd6a2", + "sym-667ee77a33a8cdaab7b8e881", + "sym-12945c6469674a2c8ca1664d", + "sym-484518bac829f3d8d0b68bed", + "sym-3c9e74c5cd69037300664055", + "sym-facf67dec0a9f34ec0a49331", + "sym-f7c2c4bf481ceac8b676e139", + "sym-7e98febf42ce02edfc8af727", + "sym-6e5873ef0b08194d76c50da7", + "sym-81026f67f67aeb62d631535d", + "sym-fa254e205c76ea44e4b0521c", + "sym-9d509c324983c22418cb1b1a", + "sym-531050568d58da423745f877", + "sym-d7fd53b8db8be40361088b41", + "sym-1f0f4f159ed45d15de2bdb16", + "sym-ec3b887388af632075e349e1", + "sym-8736e8fe142316bf9549f1a8", + "sym-44872549830e75384171fc2b", + "sym-cd9eaecd5f72fe65de09076a", + "sym-d541dd4d784440f63678a4e3", + "sym-cdf87a7aca678cd914268866", + "sym-50906bc466402f2083e8ab59", + "sym-c8763836bff4ea42fba470e9", + "sym-968a498798178d6738491d83", + "sym-72a34cb08372cf0ac8f3fb22", + "sym-9e648f9c7fcc2000961ea0f5", + "sym-5eac4ba7590c3f59ec0ba280", + "sym-b6ef2a80b24cff47652860e8", + "sym-c2ca91c5458f62906d47361f", + "sym-74d82230f4dfa750c17ed391", + "sym-4772b06d07bc4b22972f4952", + "sym-25c69489da5bd52abf8384dc", + "sym-e3e86d2049745e57873fd98b", + "sym-c67c6857215adc29562ba837", + "sym-481361719769269bbcc2e42e", + "sym-1c7b74b127fc73ce782ddde8", + "sym-ea8e70c31d2e96bfbddc5728", + "sym-55dc68dc14be56917edfd871", + "sym-6f8e6e4f31b5962fa750ff76", + "sym-c2a23fae15322adc98caeb29", + "sym-0dc97a487d76eed091d62752", + "sym-f8a0c4666cb0b4b98b3ac6f2", + "sym-13ac1dce8147d23e90ebd1e2", + "sym-9f79d2d01eb8704a8a3f667a", + "sym-3b5febcb27a4551c38d4e5da", + "sym-bc7a00fb36defa4547dc4e66", + "sym-d06a0d03433985f473292d4f", + "sym-90a66cf85e974a26a58d0020", + "sym-90b3c0e9e4b19ddeb943e4dd", + "sym-f4ccdcb40b8b555b7a08fcb6", + "sym-9351362dec91626ae107ca56", + "sym-c5fa908fa5581b730fc5d09c", + "sym-8229616c5a767a0d5dbfefda", + "sym-88f33bf5560b48d40472b9d9", + "sym-20b5f591af45ea9097a1eca8", + "sym-12b4c077de9faa8c83463abd", + "sym-4c7c069d6afb88dd0645bd92", + "sym-04a3e5bb96f8917c9379915c", + "sym-f75ed5d703b6d0859d13b84a", + "sym-39deee8a65b6d288793699df", + "sym-4bd857e92a09ab312df3fac6", + "sym-4f96470733f0fe1d8997c6c3", + "sym-d98c42026c34023c6273d50c", + "sym-bd3a95e736c86b11a47a00ad", + "sym-ef238a74a16593944be3fbd3", + "sym-3b31c5edccb093881690ab96", + "sym-b173258f48b4dfdf435372f4", + "sym-6b49bfaa683ae21eaa9fc761", + "sym-defd3a4003779e6064cede3d", + "sym-74af9f448201a71e785ad7af", + "sym-dda21973087d6e481c8037b4", + "sym-68c51d1daa2e84a19b1ef286", + "sym-0951823a296655a3ade22fdb", + "sym-be50e4d09b490b0ebb403162", + "sym-bc9523b68a00abef0beae972", + "sym-bc80da23c0788cbb96e525e7", + "sym-46bef75b389f3a525f564868", + "sym-07a6cec5a5c3a95ab1252789", + "sym-0b8fbb71f8c6a15f84f89c18", + "sym-7f84a166c1f6ed5e7713d53f", + "sym-bad9b7515020680a9f2efcd4", + "sym-3e83d82facdcd6b51a624587", + "sym-8b8eec8e7dac3de610bd552f", + "sym-684a2dfd8c5944d2cc9e9e73", + "sym-9d5f9036c3a61f194222ddc9", + "sym-1dd5bedf2f00e69d75db3984", + "sym-bce363e2ed8fe28874f6e8d7", + "sym-9482969157730c21f53bda3a", + "sym-24c86701e405a5e93d569d27", + "sym-b5f2992ee061fa9af8d170bf", + "sym-015b2d24689c8f1a98fd94fa", + "sym-6a92728b97295df4add532cc", + "sym-c59dda13f33be0983f2e2f24", + "sym-393a656c99e379da83261270", + "sym-00caa963c5b5c3b283cc6f2a", + "sym-3d4a17b03c78e440e8521bac", + "sym-839486393ec3777f098c4138", + "sym-cdee1d1ee123471a2fe8ccba", + "sym-a0fe73ba5a4c3b5e9571f894", + "sym-ce4b61abdd638d7f7a2a015c", + "sym-649a1a18feb266499520cbe5", + "sym-bfefc17bb5d1c65cc36c0843", + "sym-704e246d81608f800aed67ad", + "sym-02417a6365edd0198fd75264", + "sym-eeb4fc775c7436b1dcc8a3c3", + "sym-e3d213bc363306b53393ab4f", + "sym-b4556341831fecb80421ac68", + "sym-6cd8e16677b8cf80dd1ad744", + "sym-9f28799d05d13c0d15a531c2", + "sym-2a8e22fd4ddb063dd986f7e4", + "sym-07dcd771e2b390047f2e6a55", + "sym-b82d83e2bc3aa3aa35dc2364", + "sym-79d31f302ae00821c9b091e7", + "sym-d91a4ce131bb705db219070a", + "sym-81eae4b46a28fb84e48f06ad", + "sym-82a1161ce70b04b888c2f0b6", + "sym-04be92096edfe026f0b98854", + "sym-e7c776ab0eba1f5599be7fcb", + "sym-cdea7aa1b6de2749159f6e96", + "sym-c615dbb155d43299ba7b7acd", + "sym-115a795c311c05a660b0cfaf", + "sym-88b5df7ef753f6b018ea90ab", + "sym-84c84d61c9c8f4b14650344e", + "sym-ebcdfff7c8f26147d49f7e68", + "sym-a44f26a28d524913f6c5ae0d", + "sym-96c322c3230b3318cb0bfef3", + "sym-053ecef7be1b74553f59efc7", + "sym-3fe76fd5033992560ddc2bb5", + "sym-97131dcb1a2dffeac2eaa164", + "sym-c8e4c282ac82ce5a43c6dabc", + "sym-156b046ec0b458f750d6c8ac", + "sym-2c13707cee1ca19b78229934", + "sym-cde19651d1f29828454ec4b6", + "sym-b7b7764b5f8752a3680783e8", + "sym-134f63188f756ad86c2a544c", + "sym-5e360294a26cb37091a37018", + "sym-3b67e628eb4b9ff604126a19", + "sym-8f72c9a1055bca2bc71f0167", + "sym-ee9fcadb697329d2357af877", + "sym-398f49ae51bd5320d95176c5", + "sym-c8dc6d5802b95dedf621862d", + "sym-f06f1dcb2dfd8d7e4dd48292", + "sym-205b5cb1bf996c3482d66431", + "sym-b0d0846d390faea344a260a3", + "sym-3b474985222cfc997a5d0ef7", + "sym-2745d8771ea38a82ffaeea95", + "sym-2998e1ceb03e2f98134e96d9", + "sym-0e202b84aaada6b86ce3e501", + "sym-aa28f8a1e849d532b667906d", + "sym-3934bcc10c9b4f2e9c2d0959", + "sym-63c9672a710d076dc0e06cf3", + "sym-685b7b28fe67a4cc44e434de", + "sym-7fa32da41eaee8452f8bd9a5", + "sym-1c22efc6afd12d2cefe35a3d", + "sym-50385a967901d4552b638fc9", + "sym-34d2413a3679dfdbfae04b85", + "sym-b75fc6c5dace7ee100cd6671", + "sym-640fafbc00c2c677cbe674d4", + "sym-e2d7a7040dc244cb0c9a5e1e", + "sym-638ca9f97a7186e06d2d59ad", + "sym-12924b2bd0070b6b03d3764a", + "sym-aadb6a479fc23c9ae89a48dc", + "sym-f5257582e7cf3f5b4295d85b", + "sym-83065379d4a1c2d6f3b97b0d", + "sym-d3398ecb720878008124bdce", + "sym-370c23cf8df49a2d85fd00c3", + "sym-a6aea358d016932d28dc7be5", + "sym-4557b22ff4878be5f4a83de0", + "sym-5ebf3bd250ee5182d48cabb6", + "sym-ac0a1e228d4998787a688f49", + "sym-9d09479e95ac975cf01cb1c9", + "sym-cad0c5620a82457ff3fd1caa", + "sym-3cf7208af311e74228536b19", + "sym-12308ff860a88b22d3988316", + "sym-c3d439caa60d66c084b242cb", + "sym-fb874babcae55f743d4ff85e", + "sym-94a4bc0bef1261cd6df79681", + "sym-f0b5e63d32e47917e6917e37", + "sym-10bf3623222ef5c352c92e57", + "sym-5a6498b588eb7b9202c2278f", + "sym-3efe476db2668ba9240cd9fa", + "sym-2a16d473fb82483974822634", + "sym-0429407686d62d7981518349", + "sym-084f4ac4cc731f2eecd2e15b", + "sym-a389b419600f623779bfb957", + "sym-0da9ed27a8edc8d60500c437", + "sym-0d519bd0d8d725bd68e90b74", + "sym-682349dca1db65816dbb8d40", + "sym-cd38e297a920fb3851693005", + "sym-d5cca436cb4085a64e3fbc81", + "sym-fde5c332b3442bce93cbd4cf", + "sym-4d2cf98a651cd5dd3389e832", + "sym-6deebd259361408f0a65993f", + "sym-d0d4887ab09527b9257a1405", + "sym-bff9f5e26c04692e57a8c205", + "sym-a35dd0f41512f99872e7738b", + "sym-bf562992f64a168eef732a5d", + "sym-6aff8c1e4a946b504755b96c", + "sym-b36ae142dc9718ede23c06bc", + "sym-d19c4eedb3523566ec96367b", + "sym-651d97a1d371ba00f5ed8ef7", + "sym-8f1b556c30494585319ff2a8", + "sym-8b4d74629cafce4fcd265da5", + "sym-0e38f768aa845af8152f9371", + "sym-c16a7a59d6bd44f47f669061", + "sym-4f3b527ae6c1a92b1e08382e", + "sym-d5457eadb39d5b88b40a0b7f", + "sym-3211b4fb8cd96a09dddc5945", + "sym-133421c4f44d097284fdc1e1", + "sym-1f9b056f12bdcb651b98c9e9", + "sym-5f956142286a9ffd6b89aff8", + "sym-4fd98aa9a051f922a1be1738", + "sym-2a9f3b24c688a8f4c7c6ca77", + "sym-3e5a52e4a3288e9197169dd5", + "sym-d47afa81e1b42216c57c4f17", + "sym-3f2e207330d30a047d942f8a", + "sym-683faf499d47d1002dcc9c9a", + "sym-b11e93b10772d5d3f91d3bf7", + "sym-1c96385260a214f0ef0cd31a", + "sym-15a0cf677c65f5feb1acda3d", + "sym-52b7361894d97b4a7afdc494", + "sym-c63340bdbd01e0a374f72ca1", + "sym-e7404e24dcc9f40c5540555a", + "sym-b1b47df78ce6450e30e86f6b", + "sym-10c1513a04a2c8cb11ddbcf4", + "sym-0fe09e1aac44a856be580a75", + "sym-3933e7b0dfc4cd713ec68e39", + "sym-d94986c2fa52214663d393ae", + "sym-a14c227a9792d32d04b2396f", + "sym-866db34b995ad59a88ac4252", + "sym-f339a578b038105b43659b18", + "sym-b51ea5558814c2899f1e2975", + "sym-80b2e1bd784169672ba37388", + "sym-38003f377d941f1aed705c15", + "sym-48085842ddef714b8a2ad15f", + "sym-310c5f7a70cf1d3ad6f355af", + "sym-6122e71601390d54325a01b8", + "sym-87969fcca7bf7172f21ef7f3", + "sym-cccbec68264c6804aba0e890", + "sym-40e6b962c5f9e8eb4faf3e94", + "sym-38d0a492948f82e34e85ee87", + "sym-5bdade31fc0d63b3de669cf8", + "sym-eb812ea9d1ab7667cac73686", + "sym-bfbcfa89f57581fb2c56e102", + "sym-bd397dfc2ea87521bf16c24b", + "sym-1c718042ed0590db80445128", + "sym-16c7a605ac6fdbdd9e7f493c", + "sym-3f0dd3972baf18443d586478", + "sym-023f23876208fe3644656fea", + "sym-f75161cce5821340e3206b23", + "sym-ba52215a94401bdbb33683e6", + "sym-f93acea713b02d00af75e846", + "sym-b3b9f472b2f3019657cef489", + "sym-35e335b14ed79ab5eb0dcaa4", + "sym-2fe92e48fc1f13dd643e705a", + "sym-cfc610bda4c5eda04a009f49", + "sym-881a2a8d37c9e7b761bfa51e", + "sym-026247379bacd97457f16ffc", + "sym-aad1fbde112489a0e0a55886", + "sym-984b0552359747b6c5c827e5", + "sym-1c76a6289fd857f7afde3e67", + "sym-1dc1e1b29ddff1c012139bcb", + "sym-693efbe3e685c5a46c951e19", + "sym-de270da8d0f039197a169102", + "sym-cd66f4576418400b50aaab41", + "sym-f6079a5941a4aa6aabf4e4d1", + "sym-79d733c4fe52875b36ca1dc2", + "sym-f4ad00f9b85e424de28b078e", + "sym-07a7afa8b7a80b81d8daa204", + "sym-67b329b6d5edf0c52f1f94ce", + "sym-a6b5d0bbd8d6fb578aaa2c51", + "sym-91a7207033d6adc49e3ac3cf", + "sym-d7e19777ecfc8f5fc6abb39e", + "sym-b3946213b56c00a758511c93", + "sym-c03790d11131253fa310918d", + "sym-132f69711099ffece36b4018", + "sym-e027e1d71fc94eda35062eb3", + "sym-b918906007bcfe0fb5eb9bc7", + "sym-00c53ac8685951a1aae5b41e", + "sym-889e2f691903588bf21c0b00", + "sym-ad22d7f770482a70786aa980", + "sym-e0d9fa8b7626b4186b317c58", + "sym-6bc616937536685e5c6d82bd", + "sym-3defead0134f1d92758a8884", + "sym-adb33d12f46d9a08f5ecf324", + "sym-6f64d68020f1fe3df5c8e9e6", + "sym-1a2a490aef95273821ccdc0d", + "sym-f6c819fdb3819f2341dab918", + "sym-bb4d0afe9c08b0d45f72ea92", + "sym-5a41fca09ae8208ecfd47a0c", + "sym-bada2309fd0b6b83697bff29", + "sym-1d2d03535b4f805902059dc8", + "sym-a9384b6851bcfa0236066e93", + "sym-9ef2634fb1ee3a33ea7c36ec", + "sym-8f81b1eefb86ab1c33cc1d76", + "sym-30817f02ab11a1de7c63c3e4", + "sym-f0e0331218c3df6f87ccf4fc", + "sym-1c217afbacd1399fff13d6db", + "sym-904f441fa1a49268b1cef08f", + "sym-8574fa16baefd1d36d740e08", + "sym-fc35b6613e7a65cdd4ea5e06", + "sym-e03bc6663c48f335b7e718c0", + "sym-e057876fb864c3507b96e2ec", + "sym-664024d03f5a3eebad0f7ca6", + "sym-5bd380f96888898be81a62d2", + "sym-9a8d9ad815a0ff16982c54fe", + "sym-28e0e30ee3f838c528a8ca6f", + "sym-c315cfc3ad282c2d02ded07c", + "sym-8f350d3b1915ecc6427767b3", + "sym-255d674916b5051a77923baf", + "sym-1e03020c93407a3c93000806", + "sym-85b6f3f95870701af130fde6", + "sym-d004ecd8bd5430d39a4084f0", + "sym-0a454006c43bd2d6cb2b165f", + "sym-3fb22f8b02267a42caee9850", + "sym-4431cb1bbb71c0fa9d65d5c0", + "sym-a49b7e959d6c7ec989554af4", + "sym-5a1f2f5309251555b04b8813", + "sym-12728d553b87eda8baeb8a42", + "sym-753aa2bc31b78364585e7d9d", + "sym-daf739626627c36496ea6014", + "sym-d0a13459da194a8f53ee0247", + "sym-78928c613b02b7f6c1a80fab", + "sym-489b5423810e31ea232d4353", + "sym-819e1e0416b0f28eaf5ed236", + "sym-b6021c676c4a1f965feff831", + "sym-5bb0e442514b6deb156754f7", + "sym-86050540b5cdafabf655a318", + "sym-6a368152f3da8c7e05d9c3e2", + "sym-1a701004046591cc89d802c1", + "sym-14fff9a7611385fafbfcd369", + "sym-18e29bf3ececed5a786a3220", + "sym-08304213d4db7e29a2be6ae5", + "sym-bc80379ae4fb29cd835e4f82", + "sym-2ac98efb9ef2f047c0723ad4", + "sym-ca69d3acc363aa763fbebab6", + "sym-70f59c14b502b91dab97cc4d", + "sym-2e45f8d9367c70fd9ac27d12", + "sym-a0ddba0f62825b1fb8ce23cc", + "sym-f234ca94e0f28862daa8332d", + "sym-98af13518137efa778ae79bc", + "sym-ce29808e8a6ade436f793870", + "sym-bc53793db5ee706870868edf", + "sym-9e6b52349458fafbb3157661", + "sym-eed0819744b119afe726ef91", + "sym-4ff325a0d88ae90ec4620e7f", + "sym-43a7d916067ab16295a2da7f", + "sym-4c35acfa5aa3bc6964a871bf", + "sym-a4b0c9eb7b86bd7e222a7d46", + "sym-f317b708fa9ca031a9e7d8b0", + "sym-640c35128c28e3dc693f35d9", + "sym-c02dce70ca17720992e2965a", + "sym-7b190b069571083db01583e6", + "sym-acecec26be342c6988a8ba1b", + "sym-e0482e7dfc65b897da6d1fb5", + "sym-06618dbe51dad33d81910717", + "sym-cae5a2c114b3f66d2987abbc", + "sym-f8769b7cfd3da0a0ab0300be", + "sym-661d03f4e5784c0a2d0b6544", + "sym-6a88381f69d2ff19513514f9", + "sym-3ed365637156e5886b2430e1", + "sym-41423ec32029e11bd983cf86", + "sym-32549e20799e67cabed77eb0", + "sym-3ec00abf9378255291f328ba", + "sym-1785290f202a54c64ef008ab", + "sym-acd7986d5b1c15e8a18170eb", + "sym-0b62749220ca3c47b62ccf00", + "sym-12fffd704728885f498c0037", + "sym-bd8984a504446064677a7397", + "sym-bb415a6db3f3be45da09dc82", + "sym-0879b9af4d0e77714361c60e", + "sym-94480ae117d6af9376d303d6", + "sym-86d360eaa4e47e6515361b3e", + "sym-9548b5379a6c8ec675785e23", + "sym-0497c0336e7724275dd24b2a", + "sym-b4f76041f6f542375c7208ae", + "sym-f3979d567f5fd32def4d8855", + "sym-ade643bdd7cda96b430e99d4", + "sym-1a7ef26a3c84b1bb6f1319af", + "sym-3c3d12eee32c244255ef9b32", + "sym-272f439f60fc2a0765247475", + "sym-a9848a76b049f852ff3d7ce3", + "sym-1f1368eeff0182700d9dcd10", + "sym-578657e21b5a3a4d127afbcb", + "sym-1e186c591f76fa97520879c1", + "sym-7ff87e8fc66ad36a882a3021", + "sym-1639a75acd50f9d99a2e547c", + "sym-b76ed554a4cca4a4bcc88e54", + "sym-1a10700034b2fee76fa42e9e", + "sym-5885524573626c72a4d28772", + "sym-3bdf2ba8edf49dedd17d9ee9", + "sym-93ff6928b9f6bcb407e8acec", + "sym-809f75f515541b77a78044ad", + "sym-517ad4280b63bf24958ad374", + "sym-817fe42ff9a8d09ce64b56d0", + "sym-9637ce234a9fed75eecebc9f", + "sym-84bcdc73a52cba5c012302b0", + "sym-bdddd2117e2db154d9a4c598", + "sym-0fa2de08eb318625daca5c60", + "sym-eeadc99e419ca0c544740317", + "sym-6e00d04229c1802756b1975f", + "sym-a6ab1495ce4987876fc9f25f", + "sym-183e357d6e4b9fc61cb96c84", + "sym-1b1b238c239648c3a26135b1", + "sym-0391b851d3e5a4718b2228d0", + "sym-326a78cdb13b0efab268273b", + "sym-a206dfbda18fedfe73a5ad0e", + "sym-10146aed3ff6460f03348bd6", + "sym-ee248ef99b44bf2044c37a34", + "sym-c2d8b5b28fe3cc41329f99cb", + "sym-dc58d63e979e42e358b16ea6", + "sym-75f6a2f7f2ad31c317cf79f8", + "sym-1bf49566faed1da0dcba3009", + "sym-84993bf3e876f664101fcc17", + "sym-d562c23ff661fbe0ef42089b", + "sym-d23312505c23fae4dc06be00", + "sym-9901aa04325b7f6c0903f9f4", + "sym-78fc7f8b4ac08f8070f840bb", + "sym-17f82be72583b24d6d13609c", + "sym-eca13e9d4bd164b366b683d1", + "sym-ef0f5bfd816bc229c72e0c35", + "sym-1ffe30e3f9e9ec69de0b043f", + "sym-8a2eac9723e69b529c4e0514", + "sym-ad5a2bb922e635e167b0a1f7", + "sym-c6bb3135c8146d1451aae8cd", + "sym-6b9cfbe2d7820383823fdee2", + "sym-0ac6a67e5c7935ee3500dadd", + "sym-f85858789af68b90715a0e59", + "sym-096ad0f73e0e17beacb24c4a", + "sym-432492a10ef3e4316486ffdc", + "sym-2fa24d97f88754f23868ed8a", + "sym-dbd3b3d0c2d3155a70a21f71", + "sym-dda27ab76638052e234613e4", + "sym-51133611d7e6c5e4b505bc99", + "sym-7070f715178072511180d1ae", + "sym-41e55f80f40f455b49fcf88c", + "sym-28ad78be84afd8498d0ee4b4", + "sym-fcef4fc2c1ba7fcc07b60612", + "sym-470f39829bffe7893f2ea0e2", + "sym-ed9fcd140ea0db08b16f717b", + "sym-dc57077c3f71cf5583df43ba", + "sym-d75c9f3079017aca76e583c6", + "sym-ce938bb3c92c54f842d83329", + "sym-e2d1e70a3d514491ae4cb58d", + "sym-a9987febfc88a0ffd7f1c055", + "sym-27e8f46173445442055bad50", + "sym-51fdc77527108ef2abcc0f25", + "sym-e03296c834ef296a8caa23db", + "sym-9993f577e1770fb7b5e38ecf", + "sym-91687f17412aca4f5193a902", + "sym-7d2f7a0b1cf0caf34582b977", + "sym-4f4a52a70377dfe5c3548f1a", + "sym-900a6338c5478895e2c4742e", + "sym-77e5e7993b25576d2999ea8c", + "sym-3d99231a3655eb0dd8af0e2b", + "sym-a5b4619fea543f605234aa1b", + "sym-b726a947efed2cf0a17e7409", + "sym-4069525e6763cbd7833a89b5", + "sym-de1d440563386a4ef7ff5f5b", + "sym-3643b3470e0f5a5599a17396", + "sym-490d48113345917bc5a63921", + "sym-d3adbd4ce3535aa69f189242", + "sym-9fa63f30b350e32bba75f730", + "sym-682e20b92410fcede30f0021", + "sym-07e2d8617467f36ebce4c401", + "sym-7b19cb835cde652ea2d4b818", + "sym-e8f822cf4eeae4222e624550", + "sym-36d1d3f62671a7f649aad1f4", + "sym-704450fa33a12221e2776326", + "sym-51ed75590fc88559bcdd99a5", + "sym-7f9193fb325d05e4b86c1af4", + "sym-85a1a933e82bfe8a1a6f86cf", + "sym-009fe89cf915be1693de1c3c", + "sym-eb488aa202c169568fd9a0f5", + "sym-e1fcd597c2ed4ecc8eebea8b", + "sym-f8f1b8ece68bb301d37853b4", + "sym-7e6731647346994ea09b3100", + "sym-fa1a915f1e8443b44b343ab0", + "sym-273a3bb08cf959b425025d19", + "sym-e6c769e5bb3cfb82f5aa433b", + "sym-31925771acdffdf321dbfcd2", + "sym-9f5368fd7c3327b9a0371d11", + "sym-11fa9facc95211cb9965cbe9", + "sym-3315efc63ad9d0fb4f02984d", + "sym-3e265dc44fcae446b81692d2", + "sym-4cf291b0bfd4bf7301073577", + "sym-90952e192029ad3314e72b78", + "sym-581811b0ab0948b5c77ee25b", + "sym-bc26298182cffd2f040a7fae", + "sym-218c97e2732ce0f4288eea2b", + "sym-d7707cb16f292d46163b119c", + "sym-9e2540c9a28f6b2baa412870", + "sym-f931d21daeae8267bd2a3672", + "sym-32c67ccf53645c1c5dd20c2f", + "sym-f9e58c36e26f3179ae66e51b", + "sym-661263dc9f108fc8dfbe2edb", + "sym-9a4fcacf7bad77db5516aebe", + "sym-da9c02d35d28f02067af7242", + "sym-b669e2e1ce53f44203a8e3bc", + "sym-c28c0fb32a4c66f8f59399f8", + "sym-851653e97eff490ca57f6fae", + "sym-a12c2af51d9be861b946bf8a", + "sym-87354513813df45f7bae9436", + "sym-9d8a4d5edc2a9113cfe92b59", + "sym-f55ae29e0c44c841e86925cd", + "sym-bbaaf5c619b0e3e00385a5ec", + "sym-b687ce25ee01734bed3a9734", + "sym-abe2545e9c2ebd54c099a28d", + "sym-b38c644fc6d294d21e0b92fe", + "sym-394db654ca55a7ce952cadba", + "sym-52fb32ee859d9bfa08437a4a", + "sym-d293748a5d5f76087f5cfc4d", + "sym-37183cf62db7f8f1984bc448", + "sym-e27c9724ee7cdd1968538619", + "sym-817dd1dc2a1ba735addc3c06", + "sym-1685a05c77c5b9538f2d6f6e", + "sym-ba02a04f4880a609013cceb4", + "sym-ae2a9b9fa48d29e5c53f6315", + "sym-97f5211aee4fd55dffefc0f4", + "sym-6717edaabd144f47f1841978", + "sym-b52cab11144006e9acefd1dc", + "sym-11e4601dc05715cd7d6f7b40", + "sym-35c46231b7bc7e15f6fd6d3f", + "sym-b68535929d68ca1588c954d8", + "sym-7e3e2f730f05083adf736213", + "sym-a23822177d9cbf28a5e2874d", + "sym-59bf9a4e447c40f8b0baca83", + "sym-b76bb78b92b2a5e28bd022a1", + "sym-8ff3fa0da48c6a51968f7cdd", + "sym-50b53dc25f5cb1b69d653b9b", + "sym-f46b4d4547c9976189a5969a", + "sym-0744fffce72263b25b57ae9c", + "sym-1ee5c28fcddc2de7a3b145cd", + "sym-90cda6a95c5811e344c7d7ca", + "sym-6b1a819551d2749fcdcaebb8", + "sym-4ce8fd563a7ed5439d625943", + "sym-09674205f4dd1e66aa3a00c9", + "sym-0c9acc5940a82087d8399864", + "sym-f3743738bcabc5b59659d442", + "sym-688bcc85271dede8317525a4", + "sym-0da3c2c2c043289abfb4e4c4", + "sym-0ac70d873414c331ce910f6d", + "sym-7a48994bdf441ad2593ddeeb", + "sym-7e8dfc0604be1a84071b6545", + "sym-f7ebe48c44eac8606e31e9ed", + "sym-6914083e3bf3fbedbec2224e", + "sym-4dcfdaff3d358f5913dd0fe3", + "sym-4b87c6bde0ba6922be1ab091", + "sym-fdc6a680519985c47038e2a5", + "sym-613fa096bf763d0acf01da9b", + "sym-8766b00e6fa3be7a2892fe99", + "sym-8799af631ff3a4143d43a850", + "sym-54138acd411fe89df0e2c98c", + "sym-590ef991f7c0feb60db38948", + "sym-8d5e227a00f1424f513b0a29", + "sym-a5e5e709921d64076470bc4a", + "sym-f8c0eeed3baccb3e7fa467c0", + "sym-e17fcd94a4eb8771ace31fc3", + "sym-603aaafef984c97bc1fb36f7", + "sym-040c390bafa53749618b519b", + "sym-d23bb70b07f37cd7d66c695a", + "sym-88f912051e9647b32d55b9c7", + "sym-337b0b893f91850a1c499081", + "sym-96217b85b15e0cb5db4e930b", + "sym-927f4a859c94422559dd19ec", + "sym-f299dd21cf070dca1c4a0501", + "sym-efeccf4a0839b992818e1b61", + "sym-a4795a434717a476bb688e27", + "sym-348c100bdcd3654ff72438e9", + "sym-41ce297760c0b065fc403d2c", + "sym-744d1d1b0780d485e5d250ad", + "sym-d9d6fc11a7df506cb0a07142", + "sym-01c888a08356d8f28943c97f", + "sym-44d33a50cc54e0d3d967b0c0", + "sym-19868805b0694b2d85e8eaf2", + "sym-7e2f44f7dfbc0b389d5076cc", + "sym-7591b4ab3452279a9b3202d6", + "sym-7d6290b416ca33e2810a2d84", + "sym-98ec34896e82c3ec91f745c8", + "sym-f340304e2dcd18aeab7bea66", + "sym-da54c6138fbebaf88017312e", + "sym-310ddf06d9f20af042a081ae", + "sym-1fb3c00ffd51337ee0856546", + "sym-eb5223c80d97fb8805435919", + "sym-73a0a16ce379f82c4cf209c2", + "sym-52d5306f84e203c25cde4d63", + "sym-63378d99f547426255e3c6b2", + "sym-2fe136d4f31355269119cc07", + "sym-2006e105b13b6da460a2f036", + "sym-fd5416bb9f103468749a2fb6", + "sym-e730f1acbf64d766fa3ab2c5", + "sym-27eafd904c9cc9f3be773db2", + "sym-9a7c16a46499c4474bfa9c28", + "sym-5abf751f46445a56272194fe", + "sym-f4c49cb6c933e15281dc470d", + "sym-204abff3c5eec17740212ccd", + "sym-bce0a60c8b027a23cbb66a0b", + "sym-2bf80b379b628fe1463b323d", + "sym-3b9e32f6d2845b4593c6cf03", + "sym-dfc183b8a51720a3c7acb951", + "sym-fdea233f51c4f9253f57b5fa", + "sym-409ae2c860c3d547932b22bf", + "sym-f1b2b407c8dfa52f9ea4da3a", + "sym-23c9f147a5e10bca9cda218d", + "sym-d3aa764874845bfa486fda13", + "sym-b744b3f0ca52230821cd7c09", + "sym-ed461adfd8dc4f058d796f5b", + "sym-ba3b3568b45ce5bc207be950", + "sym-94693360f161a1af80920aaa", + "sym-9bf79a1b040d2b717c1a5b1c", + "sym-c23128ccef9064fd5a9eb6be", + "sym-76e9719e4a837d746f1fa769", + "sym-ae4c5105ad70fa5d16a460d4", + "sym-d4b1406d39589498a37359a6", + "sym-7877e2c46b0481d30b1295d8", + "sym-781b5402e62da25888f26f70", + "sym-2f9702f503e3a0e90c14043d", + "sym-04f86cd0f12ab44263506f89", + "sym-72d5ce5c5a92d40503d3413c", + "sym-cdd197a381f19cac93a75638", + "sym-c3d369dafd1d67373ba6737a", + "sym-6c15138dd9db2d1c461b5f11", + "sym-ee0653128098a581b53941db", + "sym-55213cf6f6edcbb76ee59eaa", + "sym-b0c8f99e6c93ca9706d1f8ee", + "sym-ac0e2088100b56d149dae697", + "sym-43d5acdefe01681708b5270d", + "sym-5da4340e9bf03a4ed4cbb269", + "sym-1d0c0bdd7a0a0aa7bb5a8132", + "sym-6f44a6b4d80bb5efb733bbba", + "sym-86d08eb8a6c3bae40f8bde7f", + "sym-8e9dd2a259270ebe8d2e9e75", + "sym-18cc014a13ffb8e6794c9864", + "sym-fe8380a376b6e0e2a1cc0bd8", + "sym-b79e1fe7188c4b7b8e158cb0", + "sym-eae366c1c6cebf792390d7b7", + "sym-0c7b7ace29b6cdc63325e02d", + "sym-f9dc91b5e70e8a5b5d1ffa7e", + "sym-9f05d203f674eec06b233dae", + "sym-2026315fe1b610a31721ea8f", + "sym-dde7c60f79b0e85c17c546b2", + "sym-055fb7e7be06d0d4dec566a4", + "sym-d399da6b951448492878f2f3", + "sym-4fd1128f7dfc625d822a7318", + "sym-9899d1280b44b8b713f7186b", + "sym-80f5f7dcc6c29f5b623336a5", + "sym-4f7092b7f911ab928f6cefb0", + "sym-dbc8f2bdea6abafb20dc6f3a", + "sym-a211dc84b6ff98afb9cfc21b", + "sym-82203bf45ef4bb93c42253b9", + "sym-fddd74010c8fb6ebd080f084", + "sym-082591d771f4e89c0f59f037", + "sym-d7e2be3959a27cc0115a6278", + "sym-dda97a72bb6e5d1d00d712f9", + "sym-dfa2433e9d331751425b8dae", + "sym-45dc1c54cecce36c5ec15a0c", + "sym-9564380b7ebb2e63900652de", + "sym-17375e0b9ac1fb49cdfd2f17", + "sym-4ab7557f715a615f22a172ff", + "sym-d3a9dd89e91e26e2a9f0ce24", + "sym-0a750a740b1b99f0d75cb6cb", + "sym-c921746d54e98ddfe4ccb299", + "sym-c9824622ec971ea3d7836742", + "sym-0f1cb478ccecdbc8fd539805", + "sym-aec4be2724359a1e9a6546dd", + "sym-68723b3207631cc64e03a451", + "sym-1ee36baf48ad1c31f1bd864a", + "sym-1584cdd93ecbeecaf0d06785", + "sym-aaa74a6a96d21052af1b6ccd", + "sym-603fda2dd0ee016efe3f346d", + "sym-6d22d6ded32c3dd355956301", + "sym-e0c1948adba5f44503e6bedf", + "sym-ec7aeba1622d8fa5b5e46748", + "sym-8910a56520e9fd20039ba58a", + "sym-cf09bd7a00a0fff651c887d5", + "sym-e7df602bf2c2cdf1b6e81783", + "sym-d5aac31d3222f78ac81d1cce", + "sym-7437b3859c8f71906b326942", + "sym-21f8970b0263857feb2076bd", + "sym-56cc7d0a4fbf72d5761c93c6", + "sym-d573864fe75ac3cf41e023b1", + "sym-998a3174e4ea3a870d968db4", + "sym-7843fb24dcdf29e0ad1a89c4", + "sym-9daff3528e190c43c7fadfb4", + "sym-bbf1ba131604cac1e3b85d2b", + "sym-722a0a340f4e87cb3ce49574", + "sym-f0ddfadb3965aa19186ce2d4", + "sym-0cbb1488218c6c01fa1169f5", + "sym-88560f9541ccc56b6891aa20", + "sym-26c9da6ec5614cb93a5cbe2c", + "sym-fcf030aedb37dcce1a78108d", + "sym-0f16b4cda74d61ad3da42579", + "sym-97c7f2bb4907e815e518d1fe", + "sym-80057b3541e00f7cc0458b89", + "sym-1e715c26e0832b512c931708", + "sym-c5dba2bba8b1f3ee3b45609e", + "sym-1fdf4231b9ddd41ccb09bca4", + "sym-7b2ceeaaadffca84918cad19", + "sym-e8a4ffa5ce3c70489f1f1aa7", + "sym-862a65237685e8c946afd441", + "sym-a335758e6a5c9270bc4e17d4", + "sym-8a35aa0b8db3d2a1c36ae2a2", + "sym-991e8f624f9a0de36c800ed6", + "sym-03e2b3d5d7abb5be53bc31ef", + "sym-038a71a0f9c7bcd839c5e263", + "sym-8ee49e77dbe7d64bf9b0692a", + "sym-b22108e7980a952d6d61b0a7", + "sym-197422eff9f09646d17a07e0", + "sym-00610ea7a3c22dc0f5fc4392", + "sym-b51b7f2293f00327da000bdb", + "sym-2189d115ce2b9c3d49fa0191", + "sym-ab821687a4299d0d579d49c7", + "sym-42527a84666c4a40976bd94d", + "sym-baed646297ac7a253a25f030", + "sym-64c96a6fbf2a162737330407", + "sym-832e0134a9591de63a109c96", + "sym-9f42e311e2a8e48662a9fef9", + "sym-647f63977118e939cf37b752", + "sym-7bfe6f65424b8f960729882b", + "sym-4874e5e75c46b3ce04368854", + "sym-f1d873115e6af0e4c19fc30d", + "sym-ef1200ce6553b633be306d70", + "sym-a7b3d969f28a61c51429f843", + "sym-7c99fb8ffcbe7d2ec41d5a8e", + "sym-5357f545e8ae455cf1dae173", + "sym-b99103f09316ae6f02324395", + "sym-8ae3c2ab051a29a3e38274dd", + "sym-6fad996cd780f83fa32a107f", + "sym-a9a76108c6152698a3e7bac3", + "sym-32aa27e94fd2c2b4253f8599", + "sym-9e3a0cabaea4ec69a300f18d", + "sym-2781fd4676b367f79a014c51", + "sym-d06a4eb520adc83b781eb1b7", + "sym-782b8dfbf51fdf9fc11a6129", + "sym-e563ba4e1cba0422d3f6d351", + "sym-e9dd6caad492c208cbaa408f", + "sym-38a97c77e145541444f5b557", + "sym-021d447da9c9cdc0a8828fbd", + "sym-77698a6f7f42a84ed2ee5769", + "sym-84cccde4cee5a59c48e09624", + "sym-99dbc8dc422257de18a23cde", + "sym-6a5dac941b174a6b10665841", + "sym-f5cd26473ebc041f634af528", + "sym-115190a05383b21a4bb3023b", + "sym-2e7f6d391d8c13d0a27849db", + "sym-a3469c23bd9262143421b370", + "sym-0303db1a28d7da98e3bd3feb", + "sym-fd659db04515e442facc5b02", + "sym-1bb487944cb5b12d3757f07c", + "sym-f1687c66376fa28aeb417788", + "sym-42ab5fb64ac1e70a6473f6e5", + "sym-3a10c16293fdd85144fa70cb", + "sym-611b4918c4bdad73125bf034", + "sym-5b4465fe4b287e6087e57cea", + "sym-b487a1ce833804d2271e3c96", + "sym-3c1f2e978ed4af636838378b", + "sym-a5fcf79ed272694d8bed0a7f", + "sym-6a06789ec5630226d1606761", + "sym-252318ccecdf3dae90cd765a", + "sym-95315e0446bf0d1ca7c636ed" + ] +} diff --git a/repository-semantic-map/manifest.json b/repository-semantic-map/manifest.json new file mode 100644 index 000000000..0a4f036ee --- /dev/null +++ b/repository-semantic-map/manifest.json @@ -0,0 +1,102 @@ +{ + "generated_at": "2026-02-22T19:12:05.352Z", + "git_ref": "a454f37e", + "version": "1.0.2", + "scope": { + "tracked_ts_files": 370, + "exclude_paths": [ + ".planning/**", + "dist/**", + "node_modules/**", + "local_tests/**", + "omniprotocol_fixtures_scripts/**", + "sdk/**" + ] + }, + "inputs": { + "docs_used": [ + { + "path": "README.md", + "bytes": 8591, + "sha1": "54be0e786c089d4811a772de8daa59ab1772871a" + }, + { + "path": "INSTALL.md", + "bytes": 12592, + "sha1": "a8ac5cb73c95cf47bdbd1edc6d2561bdc8d708ac" + }, + { + "path": "CONTRIBUTING.md", + "bytes": 5732, + "sha1": "423c7fc817bbb39fceab4cd738167e2841b472d9" + }, + { + "path": "OMNIPROTOCOL_SETUP.md", + "bytes": 5923, + "sha1": "87ad7151fe7294aed3fc2dd08296f97c6c90e68d" + }, + { + "path": "L2PS_TESTING.md", + "bytes": 13228, + "sha1": "aabe9fdb424cc12da4bb36a1d7ada4cadae30c7c" + }, + { + "path": ".planning/codebase/STACK.md", + "bytes": 3254, + "sha1": "fe7adf59672cb776f8a0cd54bb007b576ff2f80d" + }, + { + "path": ".planning/codebase/INTEGRATIONS.md", + "bytes": 3131, + "sha1": "a19a1c4eb14239f57095cc90ba2522df76966cf9" + }, + { + "path": ".planning/codebase/ARCHITECTURE.md", + "bytes": 2735, + "sha1": "ae8f6194e395dd7da336c5309ed51fd55f503cbf" + }, + { + "path": ".planning/codebase/STRUCTURE.md", + "bytes": 2560, + "sha1": "fd8adc09d3b7bc12892c88da520ece8914ca0d3b" + }, + { + "path": ".planning/codebase/CONVENTIONS.md", + "bytes": 1809, + "sha1": "1ac1cb9696de93a7bd4dc72ad4b231adf05c9a49" + }, + { + "path": ".planning/codebase/TESTING.md", + "bytes": 907, + "sha1": "4d745fbe375e020f0fb5c15f2beffa42626fc713" + }, + { + "path": ".planning/codebase/CONCERNS.md", + "bytes": 2703, + "sha1": "4a84f0b59ce275738c30c5addb3fb70aa61798a0" + } + ], + "codebase_docs_used": [ + ".planning/codebase/STACK.md", + ".planning/codebase/INTEGRATIONS.md", + ".planning/codebase/ARCHITECTURE.md", + ".planning/codebase/STRUCTURE.md", + ".planning/codebase/CONVENTIONS.md", + ".planning/codebase/TESTING.md", + ".planning/codebase/CONCERNS.md" + ] + }, + "statistics": { + "total_atoms": 2472, + "total_edges": 3262, + "exported_atoms": 2101, + "files_indexed": 370, + "confidence_avg": 0.7536124595469386, + "min_confidence": 0.7, + "max_confidence": 0.92 + }, + "quality_gates": { + "exported_symbols_have_atoms": true, + "note": "Exported symbols are detected via syntax (`export` modifiers and export declarations). Exported class members are also indexed as L3 atoms." + } +} diff --git a/repository-semantic-map/query-api.md b/repository-semantic-map/query-api.md new file mode 100644 index 000000000..b2f6148e6 --- /dev/null +++ b/repository-semantic-map/query-api.md @@ -0,0 +1,55 @@ +# Query API + +**Index version:** 1.0.2 +**Git ref:** `a454f37e` + +Artifacts: +- `repository-semantic-map/semantic-index.jsonl` (JSONL atoms) +- `repository-semantic-map/code-graph.json` (nodes/edges graph) +- `repository-semantic-map/manifest.json` (metadata + stats) + +## Basic retrieval (JSONL) + +Examples using `jq`: +```bash +jq -r 'select(.semantic_fingerprint.intent_vectors[]? == "consensus") | .code_location.file_path + ":" + (.code_location.line_range[0]|tostring) + " " + (.code_location.symbol_name//"")' repository-semantic-map/semantic-index.jsonl | head +``` + +## Query patterns + +```yaml +Query Patterns: + - "Where is consensus implemented?" + -> Search: intent_vectors contains "consensus" + level in [L2,L3] + -> Return: `src/libs/consensus/v2/PoRBFT.ts` + callers in `src/utilities/mainLoop.ts` + + - "How does the RPC server route requests?" + -> Search: intent_vectors contains "rpc" + file_path contains "src/libs/network" + -> Return: chain from `server_rpc.ts` to per-method managers + + - "Which code touches process.env?" + -> Search: implementation_details.external_integrations contains entries starting with "env:" + -> Return: env-bound code paths (ports, keys, feature toggles) + + - "What depends on the consensus routine?" + -> Graph traversal: find symbol 'consensusRoutine' -> called_by depth 2 +``` + +## Notes + +- `calls` edges are conservative: only intra-file identifier calls are linked. +- `depends_on` includes a symbol -> module edge plus module import edges where resolvable. + +## Index stats (this run) + +```json +{ + "total_atoms": 2472, + "total_edges": 3262, + "exported_atoms": 2101, + "files_indexed": 370, + "confidence_avg": 0.7536124595469386, + "min_confidence": 0.7, + "max_confidence": 0.92 +} +``` diff --git a/repository-semantic-map/semantic-index.jsonl b/repository-semantic-map/semantic-index.jsonl new file mode 100644 index 000000000..e8188b314 --- /dev/null +++ b/repository-semantic-map/semantic-index.jsonl @@ -0,0 +1,2472 @@ +{"uuid":"repo-de99fc85f0e0189637618ce6","level":"L0","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Demos Network Node implementation: a single-process validator/node with RPC networking, consensus, storage, and optional feature modules.","Implements P2P networking, blockchain state, consensus (PoRBFT), and supporting services (MCP, metrics, TLSNotary, multichain, ZK features)."],"intent_vectors":["blockchain","consensus","rpc","p2p-networking","node-operator","cryptography"],"domain_ontology_tags":["demos-network","validator-node","gcr","omniprotocol","porbft"],"behavioral_contracts":["async","event-loop-driven"]},"code_location":{"file_path":null,"line_range":null,"symbol_name":null,"language":"unknown","module_resolution_path":null},"relationships":{"depends_on":[],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await; event loop main cycle","persistence_layer":["postgres","typeorm"],"external_integrations":["@kynesyslabs/demosdk"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":".planning/codebase/*.md","related_adr":null,"last_modified":null,"authors":[]}} +{"uuid":"mod-30226d79668e34a62a286090","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `devnet/scripts/generate-identity-helper.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"devnet/scripts/generate-identity-helper.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"devnet/scripts/generate-identity-helper"},"relationships":{"depends_on":[],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.868Z","authors":[]}} +{"uuid":"mod-4f240da290d74961db3018c1","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `jest.config.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"jest.config.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"jest.config"},"relationships":{"depends_on":[],"depended_by":["sym-4ed35d165f49e04872c7e4c4"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["ts-jest"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.600Z","authors":[]}} +{"uuid":"mod-b339b6e2d177dff30e54ad47","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `scripts/generate-test-wallets.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"scripts/generate-test-wallets.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"scripts/generate-test-wallets"},"relationships":{"depends_on":[],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node:fs","node:path","@kynesyslabs/demosdk/websdk","bip39"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.601Z","authors":[]}} +{"uuid":"mod-2546b562762a3da08a65696c","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `scripts/l2ps-load-test.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"scripts/l2ps-load-test.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"scripts/l2ps-load-test"},"relationships":{"depends_on":["mod-7a1941c482905a159b7f2f46"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node:fs","node:path","node-forge","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/l2ps","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.601Z","authors":[]}} +{"uuid":"mod-840f81eb11629800896bc68c","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `scripts/l2ps-stress-test.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"scripts/l2ps-stress-test.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"scripts/l2ps-stress-test"},"relationships":{"depends_on":["mod-7a1941c482905a159b7f2f46"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node:fs","node:path","node-forge","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/l2ps","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.601Z","authors":[]}} +{"uuid":"mod-e4f5fbdce58ae4c9460982f1","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `scripts/semantic-map/generate.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"scripts/semantic-map/generate.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"scripts/semantic-map/generate"},"relationships":{"depends_on":[],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","path","crypto","typescript"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T19:10:18.456Z","authors":[]}} +{"uuid":"mod-a11e8e55a0387f976794ebc2","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `scripts/send-l2-batch.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"scripts/send-l2-batch.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"scripts/send-l2-batch"},"relationships":{"depends_on":["mod-7a1941c482905a159b7f2f46"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node:fs","node:path","node:process","node-forge","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/l2ps","@kynesyslabs/demosdk/types","process.env"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.601Z","authors":[]}} +{"uuid":"mod-2c27076bd0cea424b3f31b08","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `scripts/setup-zk-all.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"scripts/setup-zk-all.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"scripts/setup-zk-all"},"relationships":{"depends_on":[],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","child_process","path","crypto","url"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"mod-5616093476c766ebb88973fc","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/benchmark.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/benchmark.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/benchmark"},"relationships":{"depends_on":["mod-aedcf7cff384ad96bb4dd624"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["cli-progress"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"mod-8199ebab294ab6b8aa0e2c60","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/client/client.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/client/client.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/client/client"},"relationships":{"depends_on":["mod-61ec49ba22d46e7eeff82d2c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["readline"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"mod-61ec49ba22d46e7eeff82d2c","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/client/libs/client_class.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/client/libs/client_class.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/client/libs/client_class"},"relationships":{"depends_on":["mod-5fd74e18c62882ed9c84a4c4"],"depended_by":["mod-8199ebab294ab6b8aa0e2c60","sym-4c758022ba1409f727162ccd"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge","socket.io","socket.io-client"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"mod-5fd74e18c62882ed9c84a4c4","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/client/libs/network.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/client/libs/network.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/client/libs/network"},"relationships":{"depends_on":[],"depended_by":["mod-61ec49ba22d46e7eeff82d2c","sym-901bc277fa06e0174b43ba7b"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["socket.io-client"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"mod-4f82a94b1d6cb4bf9aed1178","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/exceptions/index.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/exceptions/index.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/exceptions/index"},"relationships":{"depends_on":[],"depended_by":["sym-6504c0a9f99e4155e106ee87","sym-f635182864f3ac12fd146b08","sym-c0866f4c8525a7cda3643511","sym-03745b230e975b586dc777a1","sym-df323420a40015574b5089aa","sym-c3502e1f3d90c7c26761f5f4","sym-06f0bf4480d67cccc3add52b"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"mod-c49fd7aa51f86aec35688868","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/InstantMessagingProtocol/index.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/index.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/index"},"relationships":{"depends_on":["mod-900742fc8a97706a00e06129"],"depended_by":["sym-95dd67d0cd361cb5f2b88afa"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"mod-38ca26657f3ebd4b61cbc829","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/InstantMessagingProtocol/old/instantMessagingProtocol.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/old/instantMessagingProtocol.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/old/instantMessagingProtocol"},"relationships":{"depends_on":["mod-0a687d4a8de66750c8ed59f7"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"mod-0a687d4a8de66750c8ed59f7","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/InstantMessagingProtocol/old/types/IMSession.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/old/types/IMSession.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/old/types/IMSession"},"relationships":{"depends_on":["mod-3a3b7b050c56c146875c18fb","mod-b2c7d957ae05ce535d8f8e2e"],"depended_by":["mod-38ca26657f3ebd4b61cbc829","mod-d9efcaa28359a29a24e998ca","mod-60ac739c2c89b2f73e69a278","sym-f3028da883261e86359dccc8","sym-1139b73552af9d40288f4c90","sym-313f38ec2adc5733ed48c0e8"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"mod-d9efcaa28359a29a24e998ca","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/InstantMessagingProtocol/old/types/IMStorage.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/old/types/IMStorage.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/old/types/IMStorage"},"relationships":{"depends_on":["mod-3a3b7b050c56c146875c18fb","mod-b2c7d957ae05ce535d8f8e2e","mod-0a687d4a8de66750c8ed59f7"],"depended_by":["sym-7f0e02118f2b037cac8e5b61","sym-c016626e9c331280cdb4d8fc"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"mod-e0ccf1cd36e1b4bd9f23a160","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/InstantMessagingProtocol/signalingServer/ImPeers.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/signalingServer/ImPeers.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/signalingServer/ImPeers"},"relationships":{"depends_on":[],"depended_by":["mod-900742fc8a97706a00e06129","sym-7f843674679cf60bbd6f5a72"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"mod-900742fc8a97706a00e06129","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/InstantMessagingProtocol/signalingServer/signalingServer.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/signalingServer/signalingServer.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/signalingServer/signalingServer"},"relationships":{"depends_on":["mod-e0ccf1cd36e1b4bd9f23a160","mod-3653cf91ec233fdbb23d4d78","mod-a0a399c17b09d2d59cb4c8a4","mod-1de8a1fb6a48c6a931549f30","mod-d0e009681585b57776f6a187","mod-8aef488fb2fc78414791967a","mod-84552d58b6743daab10f83b3","mod-59e682c774f84720b4dbee26","mod-16a76d1c87dfcbecec53d1e0","mod-edb169ce79c580ad64535bf1","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-c49fd7aa51f86aec35688868","mod-327512c4dc701f9a29037e12","sym-38287d16f095005b0eb7a36e"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun","async-mutex","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/utils"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"mod-3653cf91ec233fdbb23d4d78","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/InstantMessagingProtocol/signalingServer/types/Errors.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/signalingServer/types/Errors.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/signalingServer/types/Errors"},"relationships":{"depends_on":[],"depended_by":["mod-900742fc8a97706a00e06129","sym-e39ea46175ad44de17c9efe4"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"mod-a0a399c17b09d2d59cb4c8a4","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/InstantMessagingProtocol/signalingServer/types/IMMessage.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/signalingServer/types/IMMessage.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/signalingServer/types/IMMessage"},"relationships":{"depends_on":[],"depended_by":["mod-900742fc8a97706a00e06129","sym-2b5fdb6334800012c0c21e0a","sym-e192f30b074d1edf17119667","sym-09396517c2f92c1491430417","sym-715811d58eff5b235d047fe4","sym-e7f1193634eb6a1432bab90e"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"mod-7b49c1b727b9aee8612f7ada","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/activitypub/fedistore.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/activitypub/fedistore.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/activitypub/fedistore"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-0fc27af2e03da13014e76beb","sym-044c0cd881405407920926a2"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["sqlite3"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"mod-8dfd4cfe7c92238e8a295176","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/activitypub/feditypes.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/activitypub/feditypes.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/activitypub/feditypes"},"relationships":{"depends_on":[],"depended_by":["sym-e22d61e07c82d37fa1f79792","sym-dbefc3247e30a5823c8b43ce","sym-7188ccb0ba83016cd3801872","sym-6d351d10f2f5649ab968f2b2","sym-883a5cc83569ae7c58e412a3","sym-8372518a1ed84643b175aa1f","sym-a51c939dff4a5e40a1fec4f4","sym-f6143006b5bb02e58d1cdfd1","sym-93b583f25b39dd5043a57609","sym-6a61ddc900f83502ce966c87","sym-1dc16c4d97767da5a8ba92df","sym-8a36fd0bc7a6c7246c94552d","sym-b1ecce6dd13426331f10ff7a","sym-3ccaac6d613ab621d48c1bd6","sym-03d2f03f466628c99110c9fe","sym-e301425e702840c7c452eb5a","sym-65612d35e155d68ea523c22f","sym-94068717fb4cbb8a20aef4a9"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.944Z","authors":[]}} +{"uuid":"mod-0fc27af2e03da13014e76beb","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/activitypub/fediverse.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/activitypub/fediverse.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/activitypub/fediverse"},"relationships":{"depends_on":["mod-7b49c1b727b9aee8612f7ada","mod-54aa1c38c91b1598c048b7e1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["express","helmet","process.env"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.944Z","authors":[]}} +{"uuid":"mod-dba449d7aefb98c5518cd61d","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/bridges/bridgeUtils.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/bridges/bridgeUtils.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/bridges/bridgeUtils"},"relationships":{"depends_on":[],"depended_by":["mod-0bdba6781d714c651de05352","sym-73813058cbafe75d8bc014cb","sym-72b80bba0d6d6f79a03804c0","sym-6e63a24523fe42cfb5e7eb17","sym-593116d1b2ae359f4e87ea11","sym-435a8eb4599ff7a416f89497","sym-dedd79d84d7229103a1ddb7a","sym-7f14f88347bcca244cf8a411","sym-3a341cd97aa6d9e263ab4efe"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["rubic-sdk","process.env"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.944Z","authors":[]}} +{"uuid":"mod-5284e69a41b77e33ceb347d7","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/bridges/bridges.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/bridges/bridges.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/bridges/bridges"},"relationships":{"depends_on":[],"depended_by":["sym-55f1e23922682c986d5e78a8","sym-f8a68c982e390715737b8a34","sym-04bc154da92633243986d7b2","sym-9ec9d14b420c136f2ad055ab","sym-22888f94aabf4d19027aa29a"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.945Z","authors":[]}} +{"uuid":"mod-0bdba6781d714c651de05352","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/bridges/rubic.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/bridges/rubic.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/bridges/rubic"},"relationships":{"depends_on":["mod-dba449d7aefb98c5518cd61d","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-2b2cb5f2f246c796e349f6aa","sym-28727c3b132db5057f5a96ec"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["web3","rubic-sdk","@kynesyslabs/demosdk/types","@solana/web3.js"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.945Z","authors":[]}} +{"uuid":"mod-966e17be37a66604fed3722e","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/fhe/FHE.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/fhe/FHE.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/fhe/FHE"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-fedfa2f8f2d69ea52cabd065","sym-31c33be12d870d49abebd5fa"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-seal","node-seal/implementation/batch-encoder","node-seal/implementation/cipher-text","node-seal/implementation/context","node-seal/implementation/decryptor","node-seal/implementation/encryption-parameters","node-seal/implementation/encryptor","node-seal/implementation/evaluator","node-seal/implementation/key-generator","node-seal/implementation/public-key","node-seal/implementation/seal","node-seal/implementation/secret-key"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.945Z","authors":[]}} +{"uuid":"mod-fedfa2f8f2d69ea52cabd065","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/fhe/fhe_test.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/fhe/fhe_test.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/fhe/fhe_test"},"relationships":{"depends_on":["mod-966e17be37a66604fed3722e","mod-54aa1c38c91b1598c048b7e1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"mod-09e939d9272236688a28974a","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/incentive/PointSystem.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/incentive/PointSystem.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/incentive/PointSystem"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-08315e6901cb53376d13cc70","mod-16a76d1c87dfcbecec53d1e0","mod-e395bfa94e646748f1e3298e","mod-e3c2dc56fd38d656d5235000","mod-525c86f0484f1a8328f90e21","mod-1d4743119cc890fadab85fb7","mod-a1bb18b05142b623b9fb8be4","mod-be7b10b7e34156b0bae273f7","mod-24557f0b00a0d628de80e5eb"],"depended_by":["mod-c5d542bba68467e14e67638a","sym-3f102a31789c1c42742dd190"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/abstraction"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"mod-08315e6901cb53376d13cc70","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/incentive/referrals.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/incentive/referrals.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/incentive/referrals"},"relationships":{"depends_on":["mod-84552d58b6743daab10f83b3","mod-16a76d1c87dfcbecec53d1e0","mod-e3c2dc56fd38d656d5235000"],"depended_by":["mod-09e939d9272236688a28974a","mod-91c215ca923f83144b68d625","mod-e395bfa94e646748f1e3298e","mod-60e11fd9921263398a239451","mod-bc30cadc96b2e14f87980a9c","sym-755339ce0913bac7334bd721"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bs58"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"mod-cb6612b0371b0a6c53802c79","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/mcp/MCPServer.ts`."],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/mcp/MCPServer.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/mcp/MCPServer"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-dc90a845649336ae35fd57a4","mod-26a73e0f3287d341c809bbb6","sym-df496a4e47a52c356dd44bd2","sym-64c02007f5239e713862e1db","sym-9f409942f5777e727bcd79d0","sym-ff5862c98f8ad4262dd9f150","sym-718e6d8d70f9f926e9064096"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@modelcontextprotocol/sdk/server/index.js","@modelcontextprotocol/sdk/server/stdio.js","@modelcontextprotocol/sdk/server/sse.js","@modelcontextprotocol/sdk/types.js","zod","express","helmet","cors","http"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"mod-462ce83c6905bcaa92b4f893","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/mcp/examples/remoteExample.ts`."],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/mcp/examples/remoteExample.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/mcp/examples/remoteExample"},"relationships":{"depends_on":["mod-dc90a845649336ae35fd57a4","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["sym-3e3fab842036c0147cdb56ee","sym-b1b117fa3a6d894bb68dbdfb","sym-6518ddb5bf692e5dc79df999"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"mod-b826ecdcb08532bf626dec5e","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/mcp/examples/simpleExample.ts`."],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/mcp/examples/simpleExample.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/mcp/examples/simpleExample"},"relationships":{"depends_on":["mod-dc90a845649336ae35fd57a4","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["sym-4a3d8ad1a77f9be2e1f5855d","sym-dbb2421ec5e12a04cb4554bf","sym-a405536da4e1154d16dd67dd"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"mod-dc90a845649336ae35fd57a4","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/mcp/index.ts`."],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/mcp/index.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/mcp/index"},"relationships":{"depends_on":["mod-cb6612b0371b0a6c53802c79","mod-26a73e0f3287d341c809bbb6"],"depended_by":["mod-462ce83c6905bcaa92b4f893","mod-b826ecdcb08532bf626dec5e","sym-34946fb6c2cc5dbd7ae1d6d1","sym-a5f718702300aa3a1b6e9670","sym-120689569dff13e791a616c8","sym-b76ea08541bcf547d731520d","sym-c8bc37824a3f00b4db708df5","sym-b497e588d7117800565edd70","sym-9686ef766bebe88367bd5a98","sym-43560768d664ccc48d7626ef","sym-b93468135cbb23c483ae9407","sym-6961c3ce5bea80c5e10fcfe9","sym-0e90fe9ca3e727a8bdbb6299"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@modelcontextprotocol/sdk/types.js"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"mod-26a73e0f3287d341c809bbb6","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/mcp/tools/demosTools.ts`."],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/mcp/tools/demosTools.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/mcp/tools/demosTools"},"relationships":{"depends_on":["mod-cb6612b0371b0a6c53802c79","mod-59e682c774f84720b4dbee26","mod-d0e009681585b57776f6a187","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-dc90a845649336ae35fd57a4","sym-65c1fbabdc4bea0ce4367edf","sym-2e9114061b17b842b34526c6"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["zod"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"mod-e97de8ffbc5205710572c9db","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/metrics/MetricsCollector.ts`."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsCollector.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/metrics/MetricsCollector"},"relationships":{"depends_on":["mod-3f28b6264133cacdcde0f639","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-7446738bdaf5f0b85a43ab05","sym-edb7ecfb5537fdae3d513479","sym-ed8c8ef93f74a3c81ea0d113","sym-e274f79c394eebcbf37f069e","sym-55751e8a0705973956c52eff"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node:os","node:child_process","node:util","process.env"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"mod-73734de2bfb341ec8ba4023b","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/metrics/MetricsServer.ts`."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsServer.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/metrics/MetricsServer"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-3f28b6264133cacdcde0f639"],"depended_by":["mod-7446738bdaf5f0b85a43ab05","sym-814fc78d247f82dc6129930b","sym-50a6eecae9b02798eedd15b0","sym-86f1c2ba6df80c3462f73386","sym-5419cc7c70d6dc28ede67184"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun","process.env"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"mod-3f28b6264133cacdcde0f639","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/metrics/MetricsService.ts`."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsService.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/metrics/MetricsService"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-e97de8ffbc5205710572c9db","mod-73734de2bfb341ec8ba4023b","mod-7446738bdaf5f0b85a43ab05","sym-e6743ad14bcf55d20f8632e3","sym-76a4b520bf86dde1eb2b6c88","sym-0bf6b255d48cad9282284e39","sym-d44e2bcce98f6909553185c0"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["prom-client","process.env"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"mod-7446738bdaf5f0b85a43ab05","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/metrics/index.ts`."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/index.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/metrics/index"},"relationships":{"depends_on":["mod-3f28b6264133cacdcde0f639","mod-73734de2bfb341ec8ba4023b","mod-e97de8ffbc5205710572c9db"],"depended_by":["sym-f4ce6b69642416527938b724","sym-150f5307db44a90b224f17d4","sym-0ec81c1dcbfd47ac209657f9","sym-06248a66cb4f78f1d5eb3312","sym-b41d4e0f6a11ac4ee0968d86","sym-b0da639ac5f946767bab1148","sym-d1e74c9c937cbfe8354cb820","sym-dfffa627fdec4d63848c4107","sym-280dbc4ff098279a68fc5bc2"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.946Z","authors":[]}} +{"uuid":"mod-6ecc959af33bffdcf9b125ac","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/multichain/XMDispatcher.ts`."],"intent_vectors":["multichain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/multichain/XMDispatcher.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/multichain/XMDispatcher"},"relationships":{"depends_on":["mod-ff7a988dbc672250517763db","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-455d4fbaf89d273aa029864d","mod-dc9656310d022085b2936dcc","mod-b1d30e1636da57dbf8144fd7","sym-fea639e9aff6c5a0e542aa41"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"mod-bd407f0c01e58fd2d40eb1c3","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/multichain/assetWrapping.ts`."],"intent_vectors":["multichain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/multichain/assetWrapping.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/multichain/assetWrapping"},"relationships":{"depends_on":[],"depended_by":["sym-36a378064a0ed4fb5a6da40f"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.946Z","authors":[]}} +{"uuid":"mod-ff7a988dbc672250517763db","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/multichain/routines/XMParser.ts`."],"intent_vectors":["multichain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/multichain/routines/XMParser.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/multichain/routines/XMParser"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-374a312e43c2c9f2d7013463","mod-ace15f11a231cf8b7077f58e","mod-116da4b57fafe340c5775211","mod-f57990696544256723fdd185"],"depended_by":["mod-6ecc959af33bffdcf9b125ac","sym-79e697a24600f39d08905f79"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","@kynesyslabs/demosdk/xm-localsdk","@kynesyslabs/demosdk/types","sdk/localsdk/multichain/configs/chainIds"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"mod-a722cbd7e6a0808c95591ad6","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/multichain/routines/executors/aptos_balance_query.ts`."],"intent_vectors":["multichain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/multichain/routines/executors/aptos_balance_query.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/multichain/routines/executors/aptos_balance_query"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-f57990696544256723fdd185","sym-93adcb2760142502f3e2b5e0"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/xm-localsdk","sdk/localsdk/multichain/configs/chainProviders","@aptos-labs/ts-sdk"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"mod-6b0f117020c528624559fc33","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/multichain/routines/executors/aptos_contract_read.ts`."],"intent_vectors":["multichain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/multichain/routines/executors/aptos_contract_read.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/multichain/routines/executors/aptos_contract_read"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-ace15f11a231cf8b7077f58e","sym-fbd5550518428a5f3c1d429d","sym-776bf1dc921966d24ee32cbd"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/xm-localsdk","sdk/localsdk/multichain/configs/chainProviders","@aptos-labs/ts-sdk","axios"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.946Z","authors":[]}} +{"uuid":"mod-3940e5b1c6e49d5c3f17fd5e","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/multichain/routines/executors/aptos_contract_write.ts`."],"intent_vectors":["multichain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/multichain/routines/executors/aptos_contract_write.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/multichain/routines/executors/aptos_contract_write"},"relationships":{"depends_on":["mod-52fc6e5b8ec086dcc9f4237e","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-116da4b57fafe340c5775211","sym-c9635b7880669c0bb6c6b77e"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/xm-localsdk","sdk/localsdk/multichain/configs/chainProviders","@aptos-labs/ts-sdk"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"mod-52fc6e5b8ec086dcc9f4237e","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/multichain/routines/executors/aptos_pay_rest.ts`."],"intent_vectors":["multichain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/multichain/routines/executors/aptos_pay_rest.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/multichain/routines/executors/aptos_pay_rest"},"relationships":{"depends_on":[],"depended_by":["mod-3940e5b1c6e49d5c3f17fd5e","mod-374a312e43c2c9f2d7013463","sym-e99088c9d2a798506405e322"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["axios","@aptos-labs/ts-sdk","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption","sdk/localsdk/multichain/configs/chainProviders","node_modules/@kynesyslabs/demosdk/build/multichain/core/types/interfaces"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.946Z","authors":[]}} +{"uuid":"mod-f57990696544256723fdd185","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/multichain/routines/executors/balance_query.ts`."],"intent_vectors":["multichain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/multichain/routines/executors/balance_query.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/multichain/routines/executors/balance_query"},"relationships":{"depends_on":["mod-a722cbd7e6a0808c95591ad6","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-ff7a988dbc672250517763db","sym-aff2e2fa35c9fd1deaa22c77"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"mod-ace15f11a231cf8b7077f58e","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/multichain/routines/executors/contract_read.ts`."],"intent_vectors":["multichain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/multichain/routines/executors/contract_read.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/multichain/routines/executors/contract_read"},"relationships":{"depends_on":["mod-6b0f117020c528624559fc33","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-ff7a988dbc672250517763db","sym-80e15d6a392a3396e9a9cddd"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/xm-localsdk","sdk/localsdk/multichain/configs/evmProviders"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.946Z","authors":[]}} +{"uuid":"mod-116da4b57fafe340c5775211","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/multichain/routines/executors/contract_write.ts`."],"intent_vectors":["multichain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/multichain/routines/executors/contract_write.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/multichain/routines/executors/contract_write"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-3940e5b1c6e49d5c3f17fd5e","mod-374a312e43c2c9f2d7013463"],"depended_by":["mod-ff7a988dbc672250517763db","sym-b6804e6844dd104bd67125b2"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/xm-localsdk","sdk/localsdk/multichain/configs/evmProviders","sdk/localsdk/multichain/configs/chainProviders"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.947Z","authors":[]}} +{"uuid":"mod-374a312e43c2c9f2d7013463","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/multichain/routines/executors/pay.ts`."],"intent_vectors":["multichain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/multichain/routines/executors/pay.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/multichain/routines/executors/pay"},"relationships":{"depends_on":["mod-aec11f5957298897d75000d1","mod-8e3a02ebf4990dac5ac1f328","mod-52fc6e5b8ec086dcc9f4237e","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-ff7a988dbc672250517763db","mod-116da4b57fafe340c5775211","sym-e197ea41443939ee72ecb053","sym-4af6c1457b565dcbdb9ae1ec"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/xm-localsdk","sdk/localsdk/multichain/configs/chainProviders","sdk/localsdk/multichain/configs/evmProviders","sdk/localsdk/multichain/types/multichain","@solana/web3.js"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"mod-293d53ea089a85fc8fe53c13","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/tlsnotary/TLSNotaryService.ts`."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/TLSNotaryService.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/tlsnotary/TLSNotaryService"},"relationships":{"depends_on":["mod-0b89d77ed9ae905feafbc9e1","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-6468589b59a97501083efac5","mod-7913910232f2f61a1d86ca8d","sym-64773d11ed0dc075e88451fd","sym-b886e68b7cb3206a20572929","sym-353b1994007d3e786d57e4a5","sym-33ad11cf35db2f305b0f2502","sym-744ab442808467ce063eecd8","sym-466b012a63df499de8b9409f","sym-58d4853a8ea7f7468daf5394","sym-338b16ec8f5b69d81a074d2d","sym-1026fbb4213fe879c3de7679","sym-5c0261c1abb8cef11691bfe3","sym-ae7b21a626aad5c215c5336b","sym-c0d7489cdd6eb46002210ed9"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","path","crypto","process.env"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"mod-0b89d77ed9ae905feafbc9e1","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/tlsnotary/ffi.ts`."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/ffi.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/tlsnotary/ffi"},"relationships":{"depends_on":[],"depended_by":["mod-293d53ea089a85fc8fe53c13","mod-6468589b59a97501083efac5","sym-bd1b00d8d06df07a62457168","sym-4081da70b1188501521a21dc","sym-758f05405496c1c7b69159ea","sym-929fb3ff8a3cf6d97191a8fc","sym-2bff24216394c4d238452642"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun:ffi","path"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"mod-6468589b59a97501083efac5","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/tlsnotary/index.ts`."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/index.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/tlsnotary/index"},"relationships":{"depends_on":["mod-93380aca3aab056f0dd2e4e0","mod-293d53ea089a85fc8fe53c13","mod-7913910232f2f61a1d86ca8d","mod-54aa1c38c91b1598c048b7e1","mod-0b89d77ed9ae905feafbc9e1"],"depended_by":["sym-a850bd115879fbb3dfd1c754","sym-cc16259785e538472afb2878","sym-5d4d5843ec2f6746187582cb","sym-758c7ae0108c14cea2c81f77","sym-3a737e2cbc5ab28709b77f2f","sym-0c7adeaa8d4e009a44877ca9","sym-d17cdfb4aef3087444b3b0a5","sym-1e9d4d2f1ab5748a2c1c1613","sym-1f2728924b585fa470a24818","sym-65cd5481814fe9600aa05460","sym-b3c4e54a35894e6f75f582f8","sym-3263681afc7b0a4a70999632","sym-db7de0d1f554c5e6d55d2b56","sym-363a8258c584c40b62a678fd","sym-e3c02dbe29b87117fa9b04db","sym-e32897b8d4bc13fd2ec355c3","sym-7e6112dd781d795b89a0d740"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"mod-d890484b676af2e8fe7bd2b6","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/tlsnotary/portAllocator.ts`."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/portAllocator.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/tlsnotary/portAllocator"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-94f67b12c658d567d29471e0","sym-9a8e120674ffb3d5976882cd","sym-4c6ce39e98ae4ab81939824f","sym-dc90f4d9772ae4e497b4d0fb","sym-15181e6b0024657af6420bb3","sym-f22d728c52d0e3f559ffbb8a","sym-17663c6ac3e09ee99af6cbfc","sym-a9c92d2af5e8dba2d840eb22"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"mod-94f67b12c658d567d29471e0","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/tlsnotary/proxyManager.ts`."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/proxyManager.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/tlsnotary/proxyManager"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-59e682c774f84720b4dbee26","mod-d890484b676af2e8fe7bd2b6"],"depended_by":["mod-59e682c774f84720b4dbee26","sym-26cbeaf8371240e40a439ffd","sym-297ca357cdc84e9e674a3d04","sym-3db558af1680fcbc9c209696","sym-f16008b8cfe1c5b3dc8f9be0","sym-7983e9e5facf67e208691a4a","sym-af4dfd683d1a5aaafa97f71b","sym-b20154660e4ffdb468116aa2","sym-b4012c771eba259cf8dd4592","sym-4435b2ba48da9de578ec8950","sym-5d2517b043286dce6d6847d7","sym-1d9d546626598e46d80a33e3","sym-30522ef6077dd999b7f172c6","sym-debcbb487e8f163b6358c170"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["child_process","util","process.env"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"mod-7913910232f2f61a1d86ca8d","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/tlsnotary/routes.ts`."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/routes.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/tlsnotary/routes"},"relationships":{"depends_on":["mod-293d53ea089a85fc8fe53c13","mod-93380aca3aab056f0dd2e4e0","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-6468589b59a97501083efac5","sym-c40d1a0a528d0efe34d893f0","sym-719fa881592657d7ae9efe07"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"mod-de2778e7582cc783d0c02163","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/tlsnotary/tokenManager.ts`."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/tokenManager.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/tlsnotary/tokenManager"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-59e682c774f84720b4dbee26"],"depended_by":["mod-8d16d859c035fc1372e07e06","mod-e395bfa94e646748f1e3298e","mod-59e682c774f84720b4dbee26","sym-433666f8a3a3ca195a6c43b9","sym-1bc6f773d7c81a2ab06a3280","sym-c40372def081f07b71bd4712","sym-33df031e22a2d073aff29d0a","sym-adc4065dd1b3ac679d5ba2f9","sym-4e80afaf50ee6162c65e2622","sym-ad0f36d2976eaf60bf419c15","sym-0115c78857a4e5f525339e2d","sym-5057526194c060d19120572f","sym-fb41addf4b834b1cd33edc92","sym-9281614f452adafc3cae1183","sym-b4ef38925e03b3181e41e353","sym-814eb4802fa432ff5ff8bc82","sym-f954c7b798e4f9310812532d","sym-7a7c3a1eb526becc41e434a1"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["crypto"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"mod-3dc939e68aaf71174e695f9e","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/web2/dahr/DAHR.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/web2/dahr/DAHR.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/web2/dahr/DAHR"},"relationships":{"depends_on":["mod-ea8114d37c6855f0420f3753","mod-f7793bcd210b9ccdb36c1561","mod-ff98cde0370b2a3126edc022","mod-719cd7393843802b8bff160e","mod-30ed0e66ac618e803ffb888b","mod-0a6b71b6c837c68c08998d7b"],"depended_by":["mod-6efee936b845d34104bac46c","mod-7866a2e46802b656e108eb43","mod-55764c2c659740ce445946f7","sym-e627965d04649dc42cc45b54"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"mod-6efee936b845d34104bac46c","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/web2/dahr/DAHRFactory.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/web2/dahr/DAHRFactory.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/web2/dahr/DAHRFactory"},"relationships":{"depends_on":["mod-3dc939e68aaf71174e695f9e","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-7866a2e46802b656e108eb43","mod-55764c2c659740ce445946f7","sym-d37277bb65ea84e12d02d020"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"mod-7866a2e46802b656e108eb43","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/web2/handleWeb2.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/web2/handleWeb2.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/web2/handleWeb2"},"relationships":{"depends_on":["mod-6efee936b845d34104bac46c","mod-3dc939e68aaf71174e695f9e","mod-30ed0e66ac618e803ffb888b","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-55764c2c659740ce445946f7","sym-c0b505bebd5393a5e4195eff"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.947Z","authors":[]}} +{"uuid":"mod-ea8114d37c6855f0420f3753","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/web2/proxy/Proxy.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/web2/proxy/Proxy.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/web2/proxy/Proxy"},"relationships":{"depends_on":["mod-ff98cde0370b2a3126edc022","mod-59e682c774f84720b4dbee26","mod-84552d58b6743daab10f83b3","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-3dc939e68aaf71174e695f9e","mod-f7793bcd210b9ccdb36c1561","sym-bfe9e935a34dd0614090ce99"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["https","http","http-proxy","url","net","node:dns/promises","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"mod-f7793bcd210b9ccdb36c1561","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/web2/proxy/ProxyFactory.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/web2/proxy/ProxyFactory.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/web2/proxy/ProxyFactory"},"relationships":{"depends_on":["mod-ea8114d37c6855f0420f3753"],"depended_by":["mod-3dc939e68aaf71174e695f9e","sym-2fbba88417d7be653ece3499"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.947Z","authors":[]}} +{"uuid":"mod-30ed0e66ac618e803ffb888b","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/web2/sanitizeWeb2Request.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/web2/sanitizeWeb2Request.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/web2/sanitizeWeb2Request"},"relationships":{"depends_on":[],"depended_by":["mod-3dc939e68aaf71174e695f9e","mod-7866a2e46802b656e108eb43","sym-329d6cd73bd648317027d590","sym-355d9ea302b96d2ada7be226","sym-d85124f8888456a01864d0d7","sym-01250ff7b457022d57f75b23"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"mod-0a6b71b6c837c68c08998d7b","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/web2/validator.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/web2/validator.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/web2/validator"},"relationships":{"depends_on":[],"depended_by":["mod-3dc939e68aaf71174e695f9e","mod-55764c2c659740ce445946f7","sym-27a071409a6448a327c75916","sym-df74c42f1d0883c0ac4ea037"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node:net"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"mod-825d778a3cf48930d8e88db3","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/zk/iZKP/test.ts`."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/iZKP/test.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/zk/iZKP/test"},"relationships":{"depends_on":["mod-2ac3497f7072a203f8c62d92","mod-fbf651cd0a1f5d59d8f3f9b2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["big-integer","terminal-kit"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"mod-2ac3497f7072a203f8c62d92","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/zk/iZKP/zk.ts`."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/iZKP/zk.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/zk/iZKP/zk"},"relationships":{"depends_on":["mod-fbf651cd0a1f5d59d8f3f9b2"],"depended_by":["mod-825d778a3cf48930d8e88db3","sym-890d84899d1bd8ff66074d19","sym-10c6bfb19ea88d09f9c7c87a"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["big-integer"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"mod-fbf651cd0a1f5d59d8f3f9b2","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/zk/iZKP/zkPrimer.ts`."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/iZKP/zkPrimer.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/zk/iZKP/zkPrimer"},"relationships":{"depends_on":[],"depended_by":["mod-825d778a3cf48930d8e88db3","mod-2ac3497f7072a203f8c62d92","sym-8246e2dd08e08f2ea2f20be6"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["big-integer"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"mod-b4ad305201d7e6c9d3b649db","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/zk/merkle/MerkleTreeManager.ts`."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/merkle/MerkleTreeManager.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/zk/merkle/MerkleTreeManager"},"relationships":{"depends_on":[],"depended_by":["mod-ad645bf9d23cc4e8c30848fc","mod-8178eae36aec57f1b202e180","sym-622da0c12aaa7a83367c4b2e"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@zk-kit/incremental-merkle-tree","poseidon-lite","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"mod-ad645bf9d23cc4e8c30848fc","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/zk/merkle/updateMerkleTreeAfterBlock.ts`."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/merkle/updateMerkleTreeAfterBlock.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/zk/merkle/updateMerkleTreeAfterBlock"},"relationships":{"depends_on":["mod-4700c8f714ccf0e905a08548","mod-7b1b348ef9728f14361d546b","mod-b4ad305201d7e6c9d3b649db","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-d0e009681585b57776f6a187","mod-8178eae36aec57f1b202e180","sym-4404f892d433afa5b82ed3f4","sym-ab44157beed9a9398173d77c","sym-537af0b9d6bfcbb6032397db"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"mod-508ea55e640ac463afeb7e81","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/zk/proof/BunSnarkjsWrapper.ts`."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/proof/BunSnarkjsWrapper.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/zk/proof/BunSnarkjsWrapper"},"relationships":{"depends_on":[],"depended_by":["mod-f02071779c134bf1f3cd986f","mod-7934829c1407caf63ff17dbb","sym-e090776af88c5be10aba4a68","sym-cc0c03550be8730b76e8f71d"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["ffjavascript"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"mod-292e8f8c5a666fd4318d4859","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/zk/proof/ProofVerifier.ts`."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/proof/ProofVerifier.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/zk/proof/ProofVerifier"},"relationships":{"depends_on":[],"depended_by":["mod-056bc15608f58b9ec7451fc4","mod-8178eae36aec57f1b202e180","mod-8205b641d5e954ae76b97abb","sym-051d763051b0c844395392cd","sym-0548e973988513ade19763cd","sym-f400625db879f3f88d41393b","sym-f7a2710d38cf71bc22ff1334"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["snarkjs","fs/promises","path","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"mod-4d1bc1d25c03a3c9c82135b1","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/zk/scripts/ceremony.ts`."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/scripts/ceremony.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/zk/scripts/ceremony"},"relationships":{"depends_on":[],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","child_process","path","crypto"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"mod-db9458152523ec94914f1b7c","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/zk/scripts/setup-zk.ts`."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/scripts/setup-zk.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/zk/scripts/setup-zk"},"relationships":{"depends_on":[],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","child_process","path","crypto"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"mod-001692bb5454fe9b0d78d445","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/zk/tests/merkle.test.ts`."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/tests/merkle.test.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/zk/tests/merkle.test"},"relationships":{"depends_on":[],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun:test"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"mod-a9d75338e497f9b16630d4cf","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/zk/tests/proof-verifier.test.ts`."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/tests/proof-verifier.test.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/zk/tests/proof-verifier.test"},"relationships":{"depends_on":[],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun:test","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"mod-99cb8cee8d94ff0cda253153","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/features/zk/types/index.ts`."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/types/index.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/features/zk/types/index"},"relationships":{"depends_on":[],"depended_by":["sym-5a2acc2e51e49fbeb95ef067","sym-24f5eddf8ece217b1a33972f","sym-d3832144a7e9a4bf0fcb5986","sym-935a4eb2274a87e70e7dd352","sym-2a9103f7b96eefd857128feb","sym-18b97e86025bc97b9979076c","sym-c7dffab7af29280725182e57","sym-699ee11061314e7641979d09"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"mod-327512c4dc701f9a29037e12","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/index.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/index.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/index"},"relationships":{"depends_on":["mod-d0e009681585b57776f6a187","mod-7fc4f2fefdc6a8526f0d89e7","mod-eb0798295c928ba399632ae3","mod-ba811634639e67c5ad6dad6a","mod-8178eae36aec57f1b202e180","mod-59e682c774f84720b4dbee26","mod-9e6a68c87b4e5c31d84a70f2","mod-c85a25b09fa10c16a8188ca0","mod-f67afbbcc2c394e0b6549ff8","mod-52aa016deaac90f2f1067844","mod-900742fc8a97706a00e06129","mod-54aa1c38c91b1598c048b7e1","mod-f87e42bd9aa4eebfae23dbd1","mod-8aef488fb2fc78414791967a","mod-a8a39a4fb87704dbcb720225","mod-cee54b249e5709ba015c9342","mod-9b1b89cd5b264f022df908d4","mod-ec09ae3ca7a100b5fa55556d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","fs","reflect-metadata","dotenv","@kynesyslabs/demosdk/encryption","process.env"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"mod-b14fd27b1e26707d72c1730a","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/abstraction/index.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/abstraction/index.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/abstraction/index"},"relationships":{"depends_on":["mod-3b62039e7459fe4199077784","mod-36fe55884844248a7ff73159","mod-4e4680ebab441dcef21432ff","mod-f30737840d94511712dda889","mod-a1bb18b05142b623b9fb8be4","mod-54aa1c38c91b1598c048b7e1","mod-d0e009681585b57776f6a187","mod-59e682c774f84720b4dbee26"],"depended_by":["sym-e9ff6a51fed52302f183f9ff","sym-e1860aeb3770058ff3c3984d","sym-969cec081b320862dec672b7"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/encryption","node_modules/@kynesyslabs/demosdk/build/types/blockchain/blocks","lodash","fs"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"mod-4e4680ebab441dcef21432ff","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/abstraction/web2/discord.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/abstraction/web2/discord.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/abstraction/web2/discord"},"relationships":{"depends_on":["mod-f30737840d94511712dda889","mod-7656cd8b9f3c2f0776a9aaa8"],"depended_by":["mod-b14fd27b1e26707d72c1730a","sym-b922f1d9098d7a4cd4f8028e"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"mod-3b62039e7459fe4199077784","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/abstraction/web2/github.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/abstraction/web2/github.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/abstraction/web2/github"},"relationships":{"depends_on":["mod-f30737840d94511712dda889"],"depended_by":["mod-b14fd27b1e26707d72c1730a","sym-1ac6951f1be4ce316fd98a61"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["axios","@octokit/core","@kynesyslabs/demosdk/types","process.env"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"mod-f30737840d94511712dda889","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/abstraction/web2/parsers.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/abstraction/web2/parsers.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/abstraction/web2/parsers"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-b14fd27b1e26707d72c1730a","mod-4e4680ebab441dcef21432ff","mod-3b62039e7459fe4199077784","mod-36fe55884844248a7ff73159","sym-9cff97c1d186e2f747cdfad7"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"mod-36fe55884844248a7ff73159","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/abstraction/web2/twitter.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/abstraction/web2/twitter.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/abstraction/web2/twitter"},"relationships":{"depends_on":["mod-f30737840d94511712dda889","mod-a1bb18b05142b623b9fb8be4"],"depended_by":["mod-b14fd27b1e26707d72c1730a","sym-6b2c9e3fd8b741225f43d659"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"mod-cd472ca23fca8b4aead577c4","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/assets/FungibleToken.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/assets/FungibleToken.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/assets/FungibleToken"},"relationships":{"depends_on":["mod-3a3b7b050c56c146875c18fb"],"depended_by":["sym-1eb50452b11e15d996e1a4c6"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"mod-d6a62d75526a851c966f7b84","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/assets/NonFungibleToken.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/assets/NonFungibleToken.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/assets/NonFungibleToken"},"relationships":{"depends_on":[],"depended_by":["sym-98437ac92e6266fc78125452"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"mod-9a663bc106327e8422201a95","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/UDTypes/uns_sol.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/UDTypes/uns_sol.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/UDTypes/uns_sol"},"relationships":{"depends_on":[],"depended_by":["mod-b989c7daa266d9b652abd067","sym-76003dd5d7d3e16989e7df26"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"mod-12d77c813504670328c9b4f1","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/block.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/block.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/block"},"relationships":{"depends_on":[],"depended_by":["mod-d0e009681585b57776f6a187","mod-9e6a68c87b4e5c31d84a70f2","mod-996772d8748b5664e367c6c6","mod-5758817d6b816e39b8e7e4b3","mod-892576d596aa8b40bed3d2f9","mod-0fabbf7facc4e7b4b62c59ae","mod-a9472d145601bd72b2b81e65","mod-128ee1689e701accb1643b15","mod-a8a39a4fb87704dbcb720225","mod-3a5d1ce49d5562fbff9b9306","mod-d46e3dca63550b5d88963cef","mod-59e682c774f84720b4dbee26","sym-3531a9f3d8f1352b9d2dec84"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"mod-d0e009681585b57776f6a187","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/chain.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/chain.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/chain"},"relationships":{"depends_on":["mod-12d77c813504670328c9b4f1","mod-8aef488fb2fc78414791967a","mod-54aa1c38c91b1598c048b7e1","mod-1de8a1fb6a48c6a931549f30","mod-84552d58b6743daab10f83b3","mod-16a76d1c87dfcbecec53d1e0","mod-c20c965c5562cff684a7448f","mod-ad645bf9d23cc4e8c30848fc","mod-c31ff6a7377bd2e29ce07160","mod-59e682c774f84720b4dbee26","mod-dc4c1cf1104faf408e942485","mod-205c88f6af728bd7b4ebc280","mod-786d72f288c1067b50b58d19","mod-91454010a0aa78f3ef28bd69","mod-e395bfa94e646748f1e3298e"],"depended_by":["mod-900742fc8a97706a00e06129","mod-26a73e0f3287d341c809bbb6","mod-327512c4dc701f9a29037e12","mod-b14fd27b1e26707d72c1730a","mod-91c215ca923f83144b68d625","mod-652e9394671c2c32cc57b508","mod-43a22fa504defe4ae499272f","mod-e395bfa94e646748f1e3298e","mod-c8450797917dfb54fe43ca86","mod-8aef488fb2fc78414791967a","mod-9e6a68c87b4e5c31d84a70f2","mod-457939e5e7481c4a6a17e7a3","mod-52aa016deaac90f2f1067844","mod-5758817d6b816e39b8e7e4b3","mod-20f30418ca95fd46594075af","mod-7f4649fc39674866ce6591cc","mod-892576d596aa8b40bed3d2f9","mod-a365b7714dec16f0bf79621e","mod-0fabbf7facc4e7b4b62c59ae","mod-91454010a0aa78f3ef28bd69","mod-1f38e75fd9b9f51f96a2d975","mod-0f4a4cd8bc5da602adf2a2fa","mod-a8a39a4fb87704dbcb720225","mod-455d4fbaf89d273aa029864d","mod-2e55150ffa8226bdba0597cc","mod-3f71e0e4e5c692c7690b3c86","mod-6e27fb3b8c84e1baeea2a944","mod-587a0dac663054ccdc90b2bc","mod-5d68d5d1029351abd62fa157","mod-eeb3f53b29866be8d2cb970f","mod-1a126c017b2b7dd41d6846f0","mod-4608ef549e373e94702c2215","mod-ea8a0a466499b8a4e9d2b2fd","mod-a25839dd6ba039a8c958583f","mod-00cbdca09e56b6109b846e9b","mod-efae4e57fd7a4c96e3e2b085","mod-8178eae36aec57f1b202e180","mod-d46e3dca63550b5d88963cef","mod-7fc4f2fefdc6a8526f0d89e7","mod-59e682c774f84720b4dbee26","sym-00e4d2471550dbf3aeb68901"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"mod-91c215ca923f83144b68d625","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/gcr/gcr.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["mod-84552d58b6743daab10f83b3","mod-16a76d1c87dfcbecec53d1e0","mod-786d72f288c1067b50b58d19","mod-81f929d30b493e5a0e7c38e7","mod-d0e009681585b57776f6a187","mod-996772d8748b5664e367c6c6","mod-652e9394671c2c32cc57b508","mod-e3c2dc56fd38d656d5235000","mod-08315e6901cb53376d13cc70","mod-54aa1c38c91b1598c048b7e1","mod-59e682c774f84720b4dbee26","mod-e395bfa94e646748f1e3298e","mod-8aef488fb2fc78414791967a"],"depended_by":["mod-291d062f1bd46af2d595f119","mod-fe44c1bccd2633149d023f55","mod-457939e5e7481c4a6a17e7a3","mod-7fbfbfcf1e85d7ef732d27ea","mod-5758817d6b816e39b8e7e4b3","mod-20f30418ca95fd46594075af","mod-2f8fcf8b410da0c1f6892901","mod-60e11fd9921263398a239451","mod-8178eae36aec57f1b202e180","mod-d46e3dca63550b5d88963cef","sym-6ee2446f641e808bde4e7235","sym-e26838f941e0e2ede79144b1","sym-18f330aab1779d66eb306b08"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"mod-8786c56780e501016b92f408","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/gcr/gcr_routines/GCRBalanceRoutines.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/GCRBalanceRoutines.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/GCRBalanceRoutines"},"relationships":{"depends_on":["mod-e3c2dc56fd38d656d5235000","mod-e395bfa94e646748f1e3298e","mod-b2c7d957ae05ce535d8f8e2e","mod-59e682c774f84720b4dbee26","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-e395bfa94e646748f1e3298e","sym-4cf081c8a0e72521c880cd6f"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","typeorm"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.949Z","authors":[]}} +{"uuid":"mod-056bc15608f58b9ec7451fc4","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines"},"relationships":{"depends_on":["mod-e3c2dc56fd38d656d5235000","mod-e395bfa94e646748f1e3298e","mod-b2c7d957ae05ce535d8f8e2e","mod-1d4743119cc890fadab85fb7","mod-84552d58b6743daab10f83b3","mod-24557f0b00a0d628de80e5eb","mod-54aa1c38c91b1598c048b7e1","mod-c5d542bba68467e14e67638a","mod-292e8f8c5a666fd4318d4859","mod-4700c8f714ccf0e905a08548","mod-16a76d1c87dfcbecec53d1e0"],"depended_by":["mod-e395bfa94e646748f1e3298e","sym-d9261695c20f2db1c1c7a30d"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","typeorm","process.env"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"mod-ce3b72f0515cac2e2fe5ca15","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/gcr/gcr_routines/GCRNonceRoutines.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/GCRNonceRoutines.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/GCRNonceRoutines"},"relationships":{"depends_on":["mod-e3c2dc56fd38d656d5235000","mod-e395bfa94e646748f1e3298e","mod-b2c7d957ae05ce535d8f8e2e","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-e395bfa94e646748f1e3298e","sym-5eb556c7155bbf9a5c0934b6"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","typeorm"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.949Z","authors":[]}} +{"uuid":"mod-d0734ff72a9c8934deea7846","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/gcr/gcr_routines/GCRTLSNotaryRoutines.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/GCRTLSNotaryRoutines.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/GCRTLSNotaryRoutines"},"relationships":{"depends_on":["mod-f070f31fd907efb13c1863dc","mod-54aa1c38c91b1598c048b7e1","mod-e395bfa94e646748f1e3298e"],"depended_by":["mod-e395bfa94e646748f1e3298e","sym-269e4fbb61c177255aec3579"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["typeorm","node_modules/@kynesyslabs/demosdk/build/types/blockchain/GCREdit"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"mod-c5d542bba68467e14e67638a","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/IncentiveManager"},"relationships":{"depends_on":["mod-09e939d9272236688a28974a"],"depended_by":["mod-056bc15608f58b9ec7451fc4","mod-60e11fd9921263398a239451","sym-605d3a415b8b3b5bf34196c3"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"mod-a2f8e9a3ce2f5a58e00df674","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/gcr/gcr_routines/applyGCROperation.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/applyGCROperation.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/applyGCROperation"},"relationships":{"depends_on":["mod-8fb910e5659126b322f9fe29","mod-16a76d1c87dfcbecec53d1e0","mod-84552d58b6743daab10f83b3","mod-db1374491b6a82aa10a4e2f5","mod-786d72f288c1067b50b58d19","mod-dc4c1cf1104faf408e942485","mod-9e7f56ec932ce908db2b6d6e"],"depended_by":["mod-0fabbf7facc4e7b4b62c59ae","sym-68bcd93b16922175db1b5cbf"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["typeorm"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.949Z","authors":[]}} +{"uuid":"mod-291d062f1bd46af2d595f119","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/gcr/gcr_routines/assignWeb2.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/assignWeb2.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/assignWeb2"},"relationships":{"depends_on":["mod-91c215ca923f83144b68d625"],"depended_by":["mod-f33c364cc30d4c989aabb467","mod-e395bfa94e646748f1e3298e","sym-aff919f6ec93563946a19be3"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.949Z","authors":[]}} +{"uuid":"mod-fe44c1bccd2633149d023f55","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/gcr/gcr_routines/assignXM.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/assignXM.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/assignXM"},"relationships":{"depends_on":["mod-91c215ca923f83144b68d625"],"depended_by":["mod-f33c364cc30d4c989aabb467","mod-e395bfa94e646748f1e3298e","sym-768b3d2e609c7a7d9e7e123f"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.949Z","authors":[]}} +{"uuid":"mod-1d4743119cc890fadab85fb7","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/gcr/gcr_routines/ensureGCRForUser.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/ensureGCRForUser.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/ensureGCRForUser"},"relationships":{"depends_on":["mod-e395bfa94e646748f1e3298e","mod-16a76d1c87dfcbecec53d1e0","mod-e3c2dc56fd38d656d5235000"],"depended_by":["mod-09e939d9272236688a28974a","mod-056bc15608f58b9ec7451fc4","mod-525c86f0484f1a8328f90e21","mod-c31ff6a7377bd2e29ce07160","mod-be7b10b7e34156b0bae273f7","mod-e395bfa94e646748f1e3298e","mod-92957ee0de7980fc9c719d03","mod-60e11fd9921263398a239451","mod-3f71e0e4e5c692c7690b3c86","sym-fcae6dca65ab92ce6e8c43b0"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/utils"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.949Z","authors":[]}} +{"uuid":"mod-37b5ef5203b8d54dbbc526c9","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/gcr/gcr_routines/gcrJSONBHandler.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/gcrJSONBHandler.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/gcrJSONBHandler"},"relationships":{"depends_on":["mod-16a76d1c87dfcbecec53d1e0","mod-e3c2dc56fd38d656d5235000"],"depended_by":["mod-e395bfa94e646748f1e3298e","sym-791e472cf07c678ab89547f5","sym-2476c69d26521df4fa998292"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.949Z","authors":[]}} +{"uuid":"mod-652e9394671c2c32cc57b508","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/gcr/gcr_routines/gcrStateSaverHelper.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/gcrStateSaverHelper.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/gcrStateSaverHelper"},"relationships":{"depends_on":["mod-84552d58b6743daab10f83b3","mod-16a76d1c87dfcbecec53d1e0","mod-dc4c1cf1104faf408e942485","mod-d0e009681585b57776f6a187","mod-9e7f56ec932ce908db2b6d6e","mod-786d72f288c1067b50b58d19"],"depended_by":["mod-91c215ca923f83144b68d625","mod-e395bfa94e646748f1e3298e","sym-f1ad2eeaf85b22aebcfd1d0b"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["crypto","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"mod-8d16d859c035fc1372e07e06","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/gcr/gcr_routines/handleNativeOperations.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/handleNativeOperations.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/handleNativeOperations"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-de2778e7582cc783d0c02163"],"depended_by":["sym-951698e6c9f720f735f0bfe3"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node_modules/@kynesyslabs/demosdk/build/types/blockchain/GCREdit","node_modules/@kynesyslabs/demosdk/build/types/blockchain/Transaction","node_modules/@kynesyslabs/demosdk/build/types/native"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"mod-43a22fa504defe4ae499272f","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/gcr/gcr_routines/hashGCR.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/hashGCR.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/hashGCR"},"relationships":{"depends_on":["mod-16a76d1c87dfcbecec53d1e0","mod-84552d58b6743daab10f83b3","mod-db1374491b6a82aa10a4e2f5","mod-f070f31fd907efb13c1863dc","mod-786d72f288c1067b50b58d19","mod-dc4c1cf1104faf408e942485","mod-d0e009681585b57776f6a187","mod-9e7f56ec932ce908db2b6d6e"],"depended_by":["mod-f33c364cc30d4c989aabb467","mod-e395bfa94e646748f1e3298e","mod-128ee1689e701accb1643b15","sym-56ec447a61bf949ac32f434b","sym-8ae7289bebb399343fb0af1e","sym-c860224b0e2990892c904249","sym-a09e4498f797e281ad451c42","sym-27459666e0f28d8c21b10cf3"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"mod-525c86f0484f1a8328f90e21","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/gcr/gcr_routines/identityManager.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/identityManager.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/identityManager"},"relationships":{"depends_on":["mod-1d4743119cc890fadab85fb7","mod-54aa1c38c91b1598c048b7e1","mod-1b44d7490c1bab1a28faf13b","mod-24557f0b00a0d628de80e5eb"],"depended_by":["mod-09e939d9272236688a28974a","mod-be7b10b7e34156b0bae273f7","mod-e395bfa94e646748f1e3298e","mod-1de8a1fb6a48c6a931549f30","mod-60e11fd9921263398a239451","mod-bc30cadc96b2e14f87980a9c","sym-2fb8ea47d77841cb1c9c723d"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node_modules/@kynesyslabs/demosdk/build/multichain/core","@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/xm-localsdk","node_modules/@kynesyslabs/demosdk/build/types/abstraction","@kynesyslabs/demosdk/encryption","sdk/localsdk/multichain/configs/chainIds"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.950Z","authors":[]}} +{"uuid":"mod-f33c364cc30d4c989aabb467","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/gcr/gcr_routines/index.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/index.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/index"},"relationships":{"depends_on":["mod-291d062f1bd46af2d595f119","mod-fe44c1bccd2633149d023f55","mod-43a22fa504defe4ae499272f"],"depended_by":["sym-8b770fac114c0bea3fceb66d"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.950Z","authors":[]}} +{"uuid":"mod-c31ff6a7377bd2e29ce07160","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/gcr/gcr_routines/manageNative.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/manageNative.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/manageNative"},"relationships":{"depends_on":["mod-16a76d1c87dfcbecec53d1e0","mod-1d4743119cc890fadab85fb7","mod-e3c2dc56fd38d656d5235000"],"depended_by":["mod-d0e009681585b57776f6a187","mod-e395bfa94e646748f1e3298e","sym-949988062e958db45bd9006c"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.950Z","authors":[]}} +{"uuid":"mod-60ac739c2c89b2f73e69a278","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/gcr/gcr_routines/registerIMPData.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/registerIMPData.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/registerIMPData"},"relationships":{"depends_on":["mod-0a687d4a8de66750c8ed59f7","mod-3a3b7b050c56c146875c18fb","mod-b2c7d957ae05ce535d8f8e2e","mod-84552d58b6743daab10f83b3","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["sym-e55d97a832aabc5025e3f6b8"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["crypto"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.950Z","authors":[]}} +{"uuid":"mod-e15b2a203e781bad5f15394f","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/gcr/gcr_routines/signatureDetector.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/signatureDetector.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/signatureDetector"},"relationships":{"depends_on":[],"depended_by":["mod-be7b10b7e34156b0bae273f7","sym-c1ce5d44ff631ef5243e34d8","sym-e137071690ac87c5a393b765","sym-434133fb66b01eec771c868b"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.950Z","authors":[]}} +{"uuid":"mod-ea8ac339723e29cb2a2446ee","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/gcr/gcr_routines/txToGCROperation.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/txToGCROperation.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/txToGCROperation"},"relationships":{"depends_on":["mod-8fb910e5659126b322f9fe29","mod-b2c7d957ae05ce535d8f8e2e","mod-457939e5e7481c4a6a17e7a3"],"depended_by":["mod-0fabbf7facc4e7b4b62c59ae","sym-4ceb05e530a44839153ae9e8"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/demoswork","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.950Z","authors":[]}} +{"uuid":"mod-be7b10b7e34156b0bae273f7","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/gcr/gcr_routines/udIdentityManager.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/udIdentityManager.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/udIdentityManager"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-525c86f0484f1a8328f90e21","mod-1d4743119cc890fadab85fb7","mod-e15b2a203e781bad5f15394f","mod-b989c7daa266d9b652abd067","mod-24557f0b00a0d628de80e5eb"],"depended_by":["mod-09e939d9272236688a28974a","mod-3f71e0e4e5c692c7690b3c86","mod-bc30cadc96b2e14f87980a9c","sym-86dad8a3cc937e2681c558d1"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["ethers","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/xmcore"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"mod-b989c7daa266d9b652abd067","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper"},"relationships":{"depends_on":["mod-9a663bc106327e8422201a95","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-be7b10b7e34156b0bae273f7","sym-ebadf897a746e8a865087841","sym-ee20da2e2f815cdc3b697b6e","sym-3a5a479984dc5cd0445c8e8e","sym-f4fba0d8454b5e6491208b81","sym-e3db749d53d156363a30b86b","sym-16c80f6db3121ece6476e5d7","sym-4f3ca06d30e0c5991ed7ee43"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@coral-xyz/anchor","@coral-xyz/anchor/dist/cjs/nodewallet","@solana/web3.js","crypto","sdk/localsdk/multichain/configs/chainProviders","process.env"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"mod-e395bfa94e646748f1e3298e","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/gcr/handleGCR.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/handleGCR.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/handleGCR"},"relationships":{"depends_on":["mod-8178eae36aec57f1b202e180","mod-db1374491b6a82aa10a4e2f5","mod-dc4c1cf1104faf408e942485","mod-16a76d1c87dfcbecec53d1e0","mod-786d72f288c1067b50b58d19","mod-43a22fa504defe4ae499272f","mod-37b5ef5203b8d54dbbc526c9","mod-1d4743119cc890fadab85fb7","mod-652e9394671c2c32cc57b508","mod-fe44c1bccd2633149d023f55","mod-291d062f1bd46af2d595f119","mod-525c86f0484f1a8328f90e21","mod-c31ff6a7377bd2e29ce07160","mod-54aa1c38c91b1598c048b7e1","mod-e3c2dc56fd38d656d5235000","mod-9e7f56ec932ce908db2b6d6e","mod-8786c56780e501016b92f408","mod-ce3b72f0515cac2e2fe5ca15","mod-d0e009681585b57776f6a187","mod-056bc15608f58b9ec7451fc4","mod-d0734ff72a9c8934deea7846","mod-f070f31fd907efb13c1863dc","mod-08315e6901cb53376d13cc70","mod-de2778e7582cc783d0c02163"],"depended_by":["mod-09e939d9272236688a28974a","mod-d0e009681585b57776f6a187","mod-91c215ca923f83144b68d625","mod-8786c56780e501016b92f408","mod-056bc15608f58b9ec7451fc4","mod-ce3b72f0515cac2e2fe5ca15","mod-d0734ff72a9c8934deea7846","mod-1d4743119cc890fadab85fb7","mod-9e6a68c87b4e5c31d84a70f2","mod-0fabbf7facc4e7b4b62c59ae","mod-0f4a4cd8bc5da602adf2a2fa","mod-3be22133d78983422a1da0d9","mod-455d4fbaf89d273aa029864d","mod-3f71e0e4e5c692c7690b3c86","sym-b76986452634811c854b7bcd","sym-11ffa0ff4b9cbe0463fa3f26","sym-547a9804abe78ff64ea33519","sym-c287354ee92d5c615d89cc43","sym-96eda9bc4b46c54fa62b2965"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["lodash","@kynesyslabs/demosdk/types","typeorm"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"mod-8fb910e5659126b322f9fe29","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/gcr/types/GCROperations.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/types/GCROperations.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/types/GCROperations"},"relationships":{"depends_on":[],"depended_by":["mod-a2f8e9a3ce2f5a58e00df674","mod-ea8ac339723e29cb2a2446ee","sym-97870c7cba45e51609b21522"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.950Z","authors":[]}} +{"uuid":"mod-77a2526a89e7700a956a35e1","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/gcr/types/NFT.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/types/NFT.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/types/NFT"},"relationships":{"depends_on":[],"depended_by":["sym-05f548e455547493427a1712"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.950Z","authors":[]}} +{"uuid":"mod-b46f47672e387229e73f22e6","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/gcr/types/Token.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/types/Token.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/types/Token"},"relationships":{"depends_on":[],"depended_by":["sym-99d0edcde347cde287d80898"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.950Z","authors":[]}} +{"uuid":"mod-9389bad564e097d75994d5f8","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/l2ps_hashes.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/l2ps_hashes.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/l2ps_hashes"},"relationships":{"depends_on":["mod-16a76d1c87dfcbecec53d1e0","mod-0ccdf7c27874394c1e667fec","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-455d4fbaf89d273aa029864d","sym-b96188aba996df22075f02f0"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["typeorm"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"mod-c8450797917dfb54fe43ca86","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/l2ps_mempool.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/l2ps_mempool.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/l2ps_mempool"},"relationships":{"depends_on":["mod-16a76d1c87dfcbecec53d1e0","mod-7421cc24ed6c5406e86d1752","mod-d0e009681585b57776f6a187","mod-fcbaaa2e6fedeb87a2dc2d8e","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-9b1b89cd5b264f022df908d4","mod-3f601c90582b585a8d9b6d4b","mod-0f4a4cd8bc5da602adf2a2fa","mod-cee54b249e5709ba015c9342","mod-3f71e0e4e5c692c7690b3c86","mod-efae4e57fd7a4c96e3e2b085","sym-9034b49b1dbb743c13ce4423","sym-02b934d8e3081f0cfdd54829","sym-a16b3eeaac4eb18401aa51da"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"mod-8aef488fb2fc78414791967a","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/mempool_v2.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/mempool_v2.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/mempool_v2"},"relationships":{"depends_on":["mod-16a76d1c87dfcbecec53d1e0","mod-1de8a1fb6a48c6a931549f30","mod-54aa1c38c91b1598c048b7e1","mod-fbadd87a5bc2c6b89edc84bf","mod-fcbaaa2e6fedeb87a2dc2d8e","mod-d0e009681585b57776f6a187","mod-59e682c774f84720b4dbee26"],"depended_by":["mod-900742fc8a97706a00e06129","mod-327512c4dc701f9a29037e12","mod-d0e009681585b57776f6a187","mod-91c215ca923f83144b68d625","mod-0fabbf7facc4e7b4b62c59ae","mod-4abf6009e6ef176fec251259","mod-9b1b89cd5b264f022df908d4","mod-a8a39a4fb87704dbcb720225","mod-455d4fbaf89d273aa029864d","mod-3f71e0e4e5c692c7690b3c86","sym-2b93335a7e40dc75286de672"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"mod-9e6a68c87b4e5c31d84a70f2","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/routines/Sync.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/routines/Sync.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/routines/Sync"},"relationships":{"depends_on":["mod-59e682c774f84720b4dbee26","mod-21be8fb976449bbe3589ce47","mod-074e7c12d54384c86eabf721","mod-12d77c813504670328c9b4f1","mod-d0e009681585b57776f6a187","mod-54aa1c38c91b1598c048b7e1","mod-e395bfa94e646748f1e3298e","mod-3f601c90582b585a8d9b6d4b","mod-892576d596aa8b40bed3d2f9","mod-eb0798295c928ba399632ae3"],"depended_by":["mod-327512c4dc701f9a29037e12","mod-892576d596aa8b40bed3d2f9","mod-0fabbf7facc4e7b4b62c59ae","mod-7fc4f2fefdc6a8526f0d89e7","sym-3b8254889d32edf4470206ea","sym-6a24a4d06666621c7d17bc44","sym-2c09ca6eda3f95ab06c68035","sym-c246a28d0970ec7dbe8f3a09","sym-54918e7606a7cc1733327a2c","sym-000374b63ff352aab2d82df4"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"mod-df9148ab5ce0a5a5115bead1","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/routines/beforeFindGenesisHooks.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/routines/beforeFindGenesisHooks.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/routines/beforeFindGenesisHooks"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-16a76d1c87dfcbecec53d1e0","mod-a1bb18b05142b623b9fb8be4","mod-e3c2dc56fd38d656d5235000","mod-1b44d7490c1bab1a28faf13b","mod-24557f0b00a0d628de80e5eb"],"depended_by":["mod-52aa016deaac90f2f1067844","sym-04aa1e473c32e444df8b274d"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"mod-457939e5e7481c4a6a17e7a3","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/routines/calculateCurrentGas.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/routines/calculateCurrentGas.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/routines/calculateCurrentGas"},"relationships":{"depends_on":["mod-59e682c774f84720b4dbee26","mod-1b2ebbc2a937e6ac49f4abba","mod-d0e009681585b57776f6a187","mod-91c215ca923f83144b68d625","mod-1de8a1fb6a48c6a931549f30"],"depended_by":["mod-ea8ac339723e29cb2a2446ee","mod-20f30418ca95fd46594075af","mod-c996d6d5043c881bd6ad5b03","sym-d0b2b2174c96ce5833cd9592"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.951Z","authors":[]}} +{"uuid":"mod-7fbfbfcf1e85d7ef732d27ea","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/routines/executeNativeTransaction.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/routines/executeNativeTransaction.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/routines/executeNativeTransaction"},"relationships":{"depends_on":["mod-91c215ca923f83144b68d625","mod-1de8a1fb6a48c6a931549f30","mod-b2c7d957ae05ce535d8f8e2e"],"depended_by":["mod-20f30418ca95fd46594075af","sym-b989cdce3dc1128fb557122f"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"mod-996772d8748b5664e367c6c6","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/routines/executeOperations.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/routines/executeOperations.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/routines/executeOperations"},"relationships":{"depends_on":["mod-12d77c813504670328c9b4f1","mod-54aa1c38c91b1598c048b7e1","mod-5758817d6b816e39b8e7e4b3"],"depended_by":["mod-91c215ca923f83144b68d625","sym-0c7b5305038aa0a21c205aa4","sym-812eb740fd13dd1b77c10a32"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.951Z","authors":[]}} +{"uuid":"mod-52aa016deaac90f2f1067844","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/routines/findGenesisBlock.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/routines/findGenesisBlock.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/routines/findGenesisBlock"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-d0e009681585b57776f6a187","mod-df9148ab5ce0a5a5115bead1"],"depended_by":["mod-327512c4dc701f9a29037e12","sym-26b6a576d6b118ccfe6cf8ec"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","process.env"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.951Z","authors":[]}} +{"uuid":"mod-f87e42bd9aa4eebfae23dbd1","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/routines/loadGenesisIdentities.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/routines/loadGenesisIdentities.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/routines/loadGenesisIdentities"},"relationships":{"depends_on":["mod-59e682c774f84720b4dbee26","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-327512c4dc701f9a29037e12","sym-847bb4ee8faf0a5fc4c39e92"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.951Z","authors":[]}} +{"uuid":"mod-5758817d6b816e39b8e7e4b3","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/routines/subOperations.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/routines/subOperations.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/routines/subOperations"},"relationships":{"depends_on":["mod-16a76d1c87dfcbecec53d1e0","mod-205c88f6af728bd7b4ebc280","mod-54aa1c38c91b1598c048b7e1","mod-12d77c813504670328c9b4f1","mod-d0e009681585b57776f6a187","mod-91c215ca923f83144b68d625","mod-7f4649fc39674866ce6591cc"],"depended_by":["mod-996772d8748b5664e367c6c6","sym-349de95fe57411b99b41c921"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"mod-20f30418ca95fd46594075af","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/routines/validateTransaction.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/routines/validateTransaction.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/routines/validateTransaction"},"relationships":{"depends_on":["mod-d0e009681585b57776f6a187","mod-91c215ca923f83144b68d625","mod-457939e5e7481c4a6a17e7a3","mod-7fbfbfcf1e85d7ef732d27ea","mod-1de8a1fb6a48c6a931549f30","mod-3a3b7b050c56c146875c18fb","mod-84552d58b6743daab10f83b3","mod-59e682c774f84720b4dbee26","mod-54aa1c38c91b1598c048b7e1","mod-b2c7d957ae05ce535d8f8e2e"],"depended_by":["mod-455d4fbaf89d273aa029864d","sym-a1714406759fda051e877a2e","sym-95a959d434bd68d26c7ba5e6","sym-4128cc9e2fa3688777c26247"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge","@kynesyslabs/demosdk/types","lodash","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"mod-2f8fcf8b410da0c1f6892901","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/routines/validatorsManagement.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/routines/validatorsManagement.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/routines/validatorsManagement"},"relationships":{"depends_on":["mod-91c215ca923f83144b68d625","mod-1de8a1fb6a48c6a931549f30"],"depended_by":["sym-093389e29bebd11b68e47fb3"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.951Z","authors":[]}} +{"uuid":"mod-1de8a1fb6a48c6a931549f30","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/transaction.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/transaction.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/transaction"},"relationships":{"depends_on":["mod-84552d58b6743daab10f83b3","mod-3d5f49cf64c24935d34290c4","mod-59e682c774f84720b4dbee26","mod-525c86f0484f1a8328f90e21","mod-24557f0b00a0d628de80e5eb","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-900742fc8a97706a00e06129","mod-d0e009681585b57776f6a187","mod-8aef488fb2fc78414791967a","mod-457939e5e7481c4a6a17e7a3","mod-7fbfbfcf1e85d7ef732d27ea","mod-20f30418ca95fd46594075af","mod-2f8fcf8b410da0c1f6892901","mod-0fabbf7facc4e7b4b62c59ae","mod-1b966da09e8eebb2af4ea0ae","mod-a8a39a4fb87704dbcb720225","mod-3f71e0e4e5c692c7690b3c86","mod-efae4e57fd7a4c96e3e2b085","mod-c3ac921e455e2c85a68228e4","mod-4dda3c12aae4a0b02bbb9bc6","mod-3a5d1ce49d5562fbff9b9306","mod-5e2ab8dff60a96c7ee548337","mod-d46e3dca63550b5d88963cef","sym-feb77422b7084f0c4d2e3c5e"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"mod-3d5f49cf64c24935d34290c4","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/types/confirmation.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/types/confirmation.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/types/confirmation"},"relationships":{"depends_on":[],"depended_by":["mod-1de8a1fb6a48c6a931549f30","sym-0728b731cfd7b6fb01abfe3f"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.951Z","authors":[]}} +{"uuid":"mod-7f4649fc39674866ce6591cc","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/blockchain/types/genesisTypes.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/types/genesisTypes.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/blockchain/types/genesisTypes"},"relationships":{"depends_on":["mod-c20c965c5562cff684a7448f","mod-d0e009681585b57776f6a187"],"depended_by":["mod-5758817d6b816e39b8e7e4b3","sym-8f8a5ab65ba4325bb48884e5"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.951Z","authors":[]}} +{"uuid":"mod-892576d596aa8b40bed3d2f9","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/communications/broadcastManager.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/communications/broadcastManager.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/communications/broadcastManager"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-12d77c813504670328c9b4f1","mod-d0e009681585b57776f6a187","mod-9e6a68c87b4e5c31d84a70f2","mod-eb0798295c928ba399632ae3","mod-59e682c774f84720b4dbee26"],"depended_by":["mod-9e6a68c87b4e5c31d84a70f2","mod-0fabbf7facc4e7b4b62c59ae","mod-60e11fd9921263398a239451","sym-bc830ddff78494264067c796"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"mod-6f74719a94e9135573217051","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/communications/index.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/communications/index.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/communications/index"},"relationships":{"depends_on":["mod-a5c28a9abc4da2bd27d3cbb4"],"depended_by":["sym-fb3ceadeb84c52d53d5da1a5"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.951Z","authors":[]}} +{"uuid":"mod-a5c28a9abc4da2bd27d3cbb4","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/communications/transmission.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/communications/transmission.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/communications/transmission"},"relationships":{"depends_on":["mod-3a3b7b050c56c146875c18fb","mod-84552d58b6743daab10f83b3","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-6f74719a94e9135573217051","mod-5269202219af5585cb61f564","mod-570eac54a9d81c36302eb6d0","mod-3a5d1ce49d5562fbff9b9306","sym-48a3b6b4e214dbf05a884bdd"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.951Z","authors":[]}} +{"uuid":"mod-a365b7714dec16f0bf79621e","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/consensus/routines/consensusTime.ts`."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/routines/consensusTime.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/consensus/routines/consensusTime"},"relationships":{"depends_on":["mod-d0e009681585b57776f6a187","mod-f67afbbcc2c394e0b6549ff8","mod-54aa1c38c91b1598c048b7e1","mod-59e682c774f84720b4dbee26"],"depended_by":["mod-2e55150ffa8226bdba0597cc","mod-7fc4f2fefdc6a8526f0d89e7","sym-98c4295951482a3e982049bb"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["terminal-kit"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"mod-0fabbf7facc4e7b4b62c59ae","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/consensus/v2/PoRBFT.ts`."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/PoRBFT.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/consensus/v2/PoRBFT"},"relationships":{"depends_on":["mod-1de8a1fb6a48c6a931549f30","mod-91454010a0aa78f3ef28bd69","mod-8aef488fb2fc78414791967a","mod-12d77c813504670328c9b4f1","mod-d0e009681585b57776f6a187","mod-59e682c774f84720b4dbee26","mod-54aa1c38c91b1598c048b7e1","mod-4abf6009e6ef176fec251259","mod-0265f572c93b5fdc1506bdda","mod-128ee1689e701accb1643b15","mod-a9472d145601bd72b2b81e65","mod-eafbd86811c7222ae0334af1","mod-9e6a68c87b4e5c31d84a70f2","mod-f67afbbcc2c394e0b6549ff8","mod-a2f8e9a3ce2f5a58e00df674","mod-ea8ac339723e29cb2a2446ee","mod-fcbaaa2e6fedeb87a2dc2d8e","mod-e395bfa94e646748f1e3298e","mod-0f4a4cd8bc5da602adf2a2fa","mod-eb0798295c928ba399632ae3","mod-a8a39a4fb87704dbcb720225","mod-892576d596aa8b40bed3d2f9"],"depended_by":["mod-b348b25ed5a5571412a85da0","mod-2e55150ffa8226bdba0597cc","mod-7fc4f2fefdc6a8526f0d89e7","sym-ab85b50fe1b89f2116b32b8e","sym-9ff2092936295dca05e0edb7"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"mod-5a3b55b43394de7f8c762546","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/consensus/v2/interfaces.ts`."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/interfaces.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/consensus/v2/interfaces"},"relationships":{"depends_on":[],"depended_by":["mod-a9472d145601bd72b2b81e65","mod-43e420b038a56638079168bc","mod-2e55150ffa8226bdba0597cc","sym-ca05c53ed6f6f579ada9bc57","sym-49e2485b99dd47aa7a15a28f"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"mod-eafbd86811c7222ae0334af1","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/consensus/v2/routines/averageTimestamp.ts`."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/routines/averageTimestamp.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/consensus/v2/routines/averageTimestamp"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-0fabbf7facc4e7b4b62c59ae","sym-337135b7799d55bf38a2d6a9"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"mod-a9472d145601bd72b2b81e65","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/consensus/v2/routines/broadcastBlockHash.ts`."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/routines/broadcastBlockHash.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/consensus/v2/routines/broadcastBlockHash"},"relationships":{"depends_on":["mod-5a3b55b43394de7f8c762546","mod-12d77c813504670328c9b4f1","mod-59e682c774f84720b4dbee26","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-0fabbf7facc4e7b4b62c59ae","sym-c6ac07d6b729b12884d9b167"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"mod-128ee1689e701accb1643b15","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/consensus/v2/routines/createBlock.ts`."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/routines/createBlock.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/consensus/v2/routines/createBlock"},"relationships":{"depends_on":["mod-12d77c813504670328c9b4f1","mod-59e682c774f84720b4dbee26","mod-84552d58b6743daab10f83b3","mod-54aa1c38c91b1598c048b7e1","mod-21be8fb976449bbe3589ce47","mod-43a22fa504defe4ae499272f","mod-91454010a0aa78f3ef28bd69"],"depended_by":["mod-0fabbf7facc4e7b4b62c59ae","sym-631364af116d4a86562c04f9","sym-1a7e0225b76935e084fa2329"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"mod-b348b25ed5a5571412a85da0","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/consensus/v2/routines/ensureCandidateBlockFormed.ts`."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/routines/ensureCandidateBlockFormed.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/consensus/v2/routines/ensureCandidateBlockFormed"},"relationships":{"depends_on":["mod-59e682c774f84720b4dbee26","mod-0fabbf7facc4e7b4b62c59ae","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-43e420b038a56638079168bc","sym-9ccc28bee226a93586ef7b1d"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"mod-91454010a0aa78f3ef28bd69","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/consensus/v2/routines/getCommonValidatorSeed.ts`."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/routines/getCommonValidatorSeed.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/consensus/v2/routines/getCommonValidatorSeed"},"relationships":{"depends_on":["mod-59e682c774f84720b4dbee26","mod-d0e009681585b57776f6a187","mod-c20c965c5562cff684a7448f","mod-84552d58b6743daab10f83b3","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-d0e009681585b57776f6a187","mod-0fabbf7facc4e7b4b62c59ae","mod-128ee1689e701accb1643b15","mod-77aac2da6c6f0fbc37663544","mod-43e420b038a56638079168bc","mod-fcbaaa2e6fedeb87a2dc2d8e","mod-cee54b249e5709ba015c9342","mod-a8a39a4fb87704dbcb720225","mod-455d4fbaf89d273aa029864d","mod-2e55150ffa8226bdba0597cc","sym-6680f554fcb4ede4631e60b2"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"mod-1f38e75fd9b9f51f96a2d975","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/consensus/v2/routines/getShard.ts`."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/routines/getShard.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/consensus/v2/routines/getShard"},"relationships":{"depends_on":["mod-59e682c774f84720b4dbee26","mod-54aa1c38c91b1598c048b7e1","mod-d0e009681585b57776f6a187"],"depended_by":["mod-77aac2da6c6f0fbc37663544","mod-43e420b038a56638079168bc","mod-fcbaaa2e6fedeb87a2dc2d8e","mod-cee54b249e5709ba015c9342","mod-a8a39a4fb87704dbcb720225","mod-455d4fbaf89d273aa029864d","mod-2e55150ffa8226bdba0597cc","sym-304eaa4f7c51cf3fdbf89bb0"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["alea"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"mod-77aac2da6c6f0fbc37663544","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/consensus/v2/routines/isValidator.ts`."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/routines/isValidator.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/consensus/v2/routines/isValidator"},"relationships":{"depends_on":["mod-1f38e75fd9b9f51f96a2d975","mod-59e682c774f84720b4dbee26","mod-91454010a0aa78f3ef28bd69"],"depended_by":["mod-a8a39a4fb87704dbcb720225","mod-455d4fbaf89d273aa029864d","mod-3f71e0e4e5c692c7690b3c86","sym-45a76b1716a67708f11a0909"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"mod-43e420b038a56638079168bc","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/consensus/v2/routines/manageProposeBlockHash.ts`."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/routines/manageProposeBlockHash.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/consensus/v2/routines/manageProposeBlockHash"},"relationships":{"depends_on":["mod-5a3b55b43394de7f8c762546","mod-54aa1c38c91b1598c048b7e1","mod-59e682c774f84720b4dbee26","mod-8178eae36aec57f1b202e180","mod-b348b25ed5a5571412a85da0","mod-074e7c12d54384c86eabf721","mod-91454010a0aa78f3ef28bd69","mod-1f38e75fd9b9f51f96a2d975"],"depended_by":["mod-2e55150ffa8226bdba0597cc","sym-4a436dd527be338afbf98bdb"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","lodash","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"mod-4abf6009e6ef176fec251259","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/consensus/v2/routines/mergeMempools.ts`."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/routines/mergeMempools.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/consensus/v2/routines/mergeMempools"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-8aef488fb2fc78414791967a"],"depended_by":["mod-0fabbf7facc4e7b4b62c59ae","sym-b2276d6a6402e65f56fd09ad"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"mod-0265f572c93b5fdc1506bdda","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/consensus/v2/routines/mergePeerlist.ts`."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/routines/mergePeerlist.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/consensus/v2/routines/mergePeerlist"},"relationships":{"depends_on":[],"depended_by":["mod-0fabbf7facc4e7b4b62c59ae","sym-717b0f06032fce2890d123ea"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"mod-1b966da09e8eebb2af4ea0ae","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/consensus/v2/routines/orderTransactions.ts`."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/routines/orderTransactions.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/consensus/v2/routines/orderTransactions"},"relationships":{"depends_on":["mod-1de8a1fb6a48c6a931549f30"],"depended_by":["sym-a70b0054aa7a6bdc502006e3"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"mod-fcbaaa2e6fedeb87a2dc2d8e","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/consensus/v2/types/secretaryManager.ts`."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/types/secretaryManager.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/consensus/v2/types/secretaryManager"},"relationships":{"depends_on":["mod-523a32046a2c4caccecf050d","mod-ecaffe079222e4664d98655f","mod-59e682c774f84720b4dbee26","mod-1f38e75fd9b9f51f96a2d975","mod-b2c7d957ae05ce535d8f8e2e","mod-eb0798295c928ba399632ae3","mod-54aa1c38c91b1598c048b7e1","mod-91454010a0aa78f3ef28bd69"],"depended_by":["mod-c8450797917dfb54fe43ca86","mod-8aef488fb2fc78414791967a","mod-0fabbf7facc4e7b4b62c59ae","mod-2e55150ffa8226bdba0597cc","sym-fb2870f850b894405cc6b6f4"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"mod-ecaffe079222e4664d98655f","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/consensus/v2/types/shardTypes.ts`."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/types/shardTypes.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/consensus/v2/types/shardTypes"},"relationships":{"depends_on":["mod-523a32046a2c4caccecf050d"],"depended_by":["mod-fcbaaa2e6fedeb87a2dc2d8e","sym-e4b8097a5ba3819fbeaf9658"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"mod-523a32046a2c4caccecf050d","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/consensus/v2/types/validationStatusTypes.ts`."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/types/validationStatusTypes.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/consensus/v2/types/validationStatusTypes"},"relationships":{"depends_on":[],"depended_by":["mod-fcbaaa2e6fedeb87a2dc2d8e","mod-ecaffe079222e4664d98655f","sym-8450a6eb559ca4627e196e23","sym-c01d178ff00381d6e5d2c43d","sym-ca3dbc3c56cb1055cd0a0a89"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"mod-3a3b7b050c56c146875c18fb","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/crypto/cryptography.ts`."],"intent_vectors":["cryptography"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/crypto/cryptography.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/crypto/cryptography"},"relationships":{"depends_on":["mod-59e682c774f84720b4dbee26","mod-54aa1c38c91b1598c048b7e1","mod-b2c7d957ae05ce535d8f8e2e"],"depended_by":["mod-0a687d4a8de66750c8ed59f7","mod-d9efcaa28359a29a24e998ca","mod-cd472ca23fca8b4aead577c4","mod-60ac739c2c89b2f73e69a278","mod-20f30418ca95fd46594075af","mod-a5c28a9abc4da2bd27d3cbb4","mod-d1ccb3f2c31e96f4ad5dab3f","mod-455d4fbaf89d273aa029864d","mod-efd6ff5fba09516480c9e2e4","mod-2e55150ffa8226bdba0597cc","mod-22a231e7e2a8fa48e00405d7","mod-be77f5db5117aff014090a24","mod-21be8fb976449bbe3589ce47","mod-d46e3dca63550b5d88963cef","sym-1447dd6a4335c05fb5ed3cb2"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"mod-b2c7d957ae05ce535d8f8e2e","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/crypto/forgeUtils.ts`."],"intent_vectors":["cryptography"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/crypto/forgeUtils.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/crypto/forgeUtils"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-0a687d4a8de66750c8ed59f7","mod-d9efcaa28359a29a24e998ca","mod-8786c56780e501016b92f408","mod-056bc15608f58b9ec7451fc4","mod-ce3b72f0515cac2e2fe5ca15","mod-60ac739c2c89b2f73e69a278","mod-ea8ac339723e29cb2a2446ee","mod-7fbfbfcf1e85d7ef732d27ea","mod-20f30418ca95fd46594075af","mod-fcbaaa2e6fedeb87a2dc2d8e","mod-3a3b7b050c56c146875c18fb","sym-b62136244c8ea0814eedab1d","sym-2a8fb09cf87c7ed8b2e472f7"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"mod-84552d58b6743daab10f83b3","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/crypto/hashing.ts`."],"intent_vectors":["cryptography"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/crypto/hashing.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/crypto/hashing"},"relationships":{"depends_on":[],"depended_by":["mod-900742fc8a97706a00e06129","mod-08315e6901cb53376d13cc70","mod-ea8114d37c6855f0420f3753","mod-d0e009681585b57776f6a187","mod-91c215ca923f83144b68d625","mod-056bc15608f58b9ec7451fc4","mod-a2f8e9a3ce2f5a58e00df674","mod-652e9394671c2c32cc57b508","mod-43a22fa504defe4ae499272f","mod-60ac739c2c89b2f73e69a278","mod-20f30418ca95fd46594075af","mod-1de8a1fb6a48c6a931549f30","mod-a5c28a9abc4da2bd27d3cbb4","mod-128ee1689e701accb1643b15","mod-91454010a0aa78f3ef28bd69","mod-d1ccb3f2c31e96f4ad5dab3f","mod-c096e9d35a0fa633ff44cda0","mod-455d4fbaf89d273aa029864d","mod-3f71e0e4e5c692c7690b3c86","mod-22a231e7e2a8fa48e00405d7","mod-c85a25b09fa10c16a8188ca0","mod-dcce6518be2af59c2b776acc","mod-52720c35cbea3e8d81ae7a70","mod-4dda3c12aae4a0b02bbb9bc6","mod-d46e3dca63550b5d88963cef","mod-719cd7393843802b8bff160e","sym-3435e923dc5c81930b0c8a24"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge","crypto"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"mod-d1ccb3f2c31e96f4ad5dab3f","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/crypto/index.ts`."],"intent_vectors":["cryptography"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/crypto/index.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/crypto/index"},"relationships":{"depends_on":["mod-3a3b7b050c56c146875c18fb","mod-84552d58b6743daab10f83b3","mod-04e38e9e7bbb7be0a3e4dce7"],"depended_by":["sym-478e8ddcf7388b01c25418b2","sym-7ffbcc1ce07d7b3b23916771","sym-a066fcb7bd034599296b5c63"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"mod-04e38e9e7bbb7be0a3e4dce7","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/crypto/rsa.ts`."],"intent_vectors":["cryptography"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/crypto/rsa.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/crypto/rsa"},"relationships":{"depends_on":[],"depended_by":["mod-d1ccb3f2c31e96f4ad5dab3f","sym-de79dd64a40f89fbb6d128ae"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"mod-b5a2bbfcc551f4a8277420d0","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/identity/identity.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/identity.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/identity/identity"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-f235c77fff58b93b0ef4a745","mod-59e682c774f84720b4dbee26"],"depended_by":["mod-995b3971c802fa33d1e8772a","mod-5e2ab8dff60a96c7ee548337","sym-9246344e2f07f04e26846059"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","node-forge","bip39","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption","@scure/bip39/wordlists/english.js"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"mod-995b3971c802fa33d1e8772a","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/identity/index.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/index.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/identity/index"},"relationships":{"depends_on":["mod-b5a2bbfcc551f4a8277420d0"],"depended_by":["sym-6e936872ac6e08ef9265f7e6"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"mod-92957ee0de7980fc9c719d03","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/identity/providers/nomisIdentityProvider.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/providers/nomisIdentityProvider.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/identity/providers/nomisIdentityProvider"},"relationships":{"depends_on":["mod-e3c2dc56fd38d656d5235000","mod-1d4743119cc890fadab85fb7","mod-54aa1c38c91b1598c048b7e1","mod-24557f0b00a0d628de80e5eb","mod-49040f43d8c17532e83ed67d"],"depended_by":["mod-49040f43d8c17532e83ed67d","mod-60e11fd9921263398a239451","sym-e7651dee3e697e21bb4b173e","sym-70cd0342713e391c581bfdc1","sym-02bb643864b28ec54f6bd102"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"mod-1b44d7490c1bab1a28faf13b","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/identity/tools/crosschain.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/tools/crosschain.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/identity/tools/crosschain"},"relationships":{"depends_on":[],"depended_by":["mod-525c86f0484f1a8328f90e21","mod-df9148ab5ce0a5a5115bead1","sym-0d364798a0a06efaa91eb9d1"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["axios","@kynesyslabs/demosdk/types","process.env"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"mod-7656cd8b9f3c2f0776a9aaa8","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/identity/tools/discord.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/tools/discord.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/identity/tools/discord"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-4e4680ebab441dcef21432ff","mod-3f71e0e4e5c692c7690b3c86","sym-8aee505c10e81a828d772a8f","sym-1251f543b194078832e93227"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["axios","url","process.env"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"mod-49040f43d8c17532e83ed67d","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/identity/tools/nomis.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/tools/nomis.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/identity/tools/nomis"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-92957ee0de7980fc9c719d03"],"depended_by":["mod-92957ee0de7980fc9c719d03","sym-35058dc9401f299a3ecafdd9","sym-a6d2f8c35523341aeef50317","sym-918f122ab3c74c4aed33144c"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["axios","process.env"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"mod-a1bb18b05142b623b9fb8be4","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/identity/tools/twitter.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/tools/twitter.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/identity/tools/twitter"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-09e939d9272236688a28974a","mod-b14fd27b1e26707d72c1730a","mod-36fe55884844248a7ff73159","mod-df9148ab5ce0a5a5115bead1","mod-3f71e0e4e5c692c7690b3c86","sym-d70e965fb2fa15cbae8e28f6"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","axios","@kynesyslabs/demosdk/types","process.env"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"mod-9b1b89cd5b264f022df908d4","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/l2ps/L2PSBatchAggregator.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/L2PSBatchAggregator.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSBatchAggregator"},"relationships":{"depends_on":["mod-c8450797917dfb54fe43ca86","mod-7421cc24ed6c5406e86d1752","mod-8aef488fb2fc78414791967a","mod-59e682c774f84720b4dbee26","mod-54aa1c38c91b1598c048b7e1","mod-7a1941c482905a159b7f2f46","mod-f67afbbcc2c394e0b6549ff8","mod-ffe258ffef0cb8215e2647fe","mod-c096e9d35a0fa633ff44cda0"],"depended_by":["mod-327512c4dc701f9a29037e12","sym-a80634c6150e4ca0c1ff8c8e","sym-e3f654b992e0b0bf06a68abf"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption","crypto","@kynesyslabs/demosdk/types","process.env"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"mod-3f601c90582b585a8d9b6d4b","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/l2ps/L2PSConcurrentSync.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/L2PSConcurrentSync.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSConcurrentSync"},"relationships":{"depends_on":["mod-59e682c774f84720b4dbee26","mod-54aa1c38c91b1598c048b7e1","mod-c8450797917dfb54fe43ca86"],"depended_by":["mod-9e6a68c87b4e5c31d84a70f2","sym-a0e1be197d6920a4bf0e1a91","sym-a21c13338ed84dbc2259e0be","sym-43c1406a11c590e987931561","sym-172932487433d3ea2b7e938b","sym-45c0e0b348a5d87bab178a86"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"mod-0f4a4cd8bc5da602adf2a2fa","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/l2ps/L2PSConsensus.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/L2PSConsensus.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSConsensus"},"relationships":{"depends_on":["mod-c096e9d35a0fa633ff44cda0","mod-fdc4ea4eee14d55af206496c","mod-e395bfa94e646748f1e3298e","mod-d0e009681585b57776f6a187","mod-c8450797917dfb54fe43ca86","mod-54aa1c38c91b1598c048b7e1","mod-7a1941c482905a159b7f2f46"],"depended_by":["mod-0fabbf7facc4e7b4b62c59ae","sym-7f56f2e032400167794c5cde","sym-dfc05adc455d203de748b3a8"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"mod-cee54b249e5709ba015c9342","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/l2ps/L2PSHashService.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/L2PSHashService.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSHashService"},"relationships":{"depends_on":["mod-c8450797917dfb54fe43ca86","mod-59e682c774f84720b4dbee26","mod-54aa1c38c91b1598c048b7e1","mod-1f38e75fd9b9f51f96a2d975","mod-91454010a0aa78f3ef28bd69","mod-7a1941c482905a159b7f2f46","mod-0e059ca33e0c78acb79559e8","mod-a5b4a44206cc0f3e39469a88","mod-da04ef1eca622af1ef3664c3","mod-88c1741b3b46fa02af202651","mod-10774a0b5dd2473051df0fad"],"depended_by":["mod-327512c4dc701f9a29037e12","sym-4b898ed7fd8e376c3dcc0fa4"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/websdk","process.env"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"mod-c096e9d35a0fa633ff44cda0","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/l2ps/L2PSProofManager.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/L2PSProofManager.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSProofManager"},"relationships":{"depends_on":["mod-16a76d1c87dfcbecec53d1e0","mod-fdc4ea4eee14d55af206496c","mod-84552d58b6743daab10f83b3","mod-54aa1c38c91b1598c048b7e1","mod-7a1941c482905a159b7f2f46"],"depended_by":["mod-9b1b89cd5b264f022df908d4","mod-0f4a4cd8bc5da602adf2a2fa","mod-3be22133d78983422a1da0d9","sym-4291220b529d489dd8c2c906","sym-1589a1e584764f6eb8336b5a","sym-b21a801e0939b0bf2b33d962"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"mod-3be22133d78983422a1da0d9","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/l2ps/L2PSTransactionExecutor.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/L2PSTransactionExecutor.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSTransactionExecutor"},"relationships":{"depends_on":["mod-16a76d1c87dfcbecec53d1e0","mod-e3c2dc56fd38d656d5235000","mod-193629267f30c2895ef15b17","mod-c096e9d35a0fa633ff44cda0","mod-e395bfa94e646748f1e3298e","mod-54aa1c38c91b1598c048b7e1","mod-7a1941c482905a159b7f2f46"],"depended_by":["mod-efae4e57fd7a4c96e3e2b085","sym-2de50e452bfe268a492fe5f9","sym-c9ceccc766be21a537a05305"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"mod-ec09ae3ca7a100b5fa55556d","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/l2ps/parallelNetworks.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/parallelNetworks.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/l2ps/parallelNetworks"},"relationships":{"depends_on":["mod-59e682c774f84720b4dbee26","mod-54aa1c38c91b1598c048b7e1","mod-7a1941c482905a159b7f2f46"],"depended_by":["mod-327512c4dc701f9a29037e12","mod-455d4fbaf89d273aa029864d","mod-efae4e57fd7a4c96e3e2b085","sym-c6e8e3bf5cc44336d4a53bdd"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption","node-forge","node:fs","node:path","@kynesyslabs/demosdk/l2ps","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"mod-df3c25d58c0f2295ea451896","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/l2ps/types.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/types.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/l2ps/types"},"relationships":{"depends_on":[],"depended_by":["sym-890d5872f24fa2a22e27e2e3","sym-10a3e239cb14bdadf9258ee2"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"mod-f9348034f6db4a0cbf002ce1","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/l2ps/zk/BunPlonkWrapper.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/zk/BunPlonkWrapper.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/l2ps/zk/BunPlonkWrapper"},"relationships":{"depends_on":["mod-7a1941c482905a159b7f2f46"],"depended_by":["sym-b626e437b5fab56729c32df4"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["ffjavascript","js-sha3"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"mod-ffe258ffef0cb8215e2647fe","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/l2ps/zk/L2PSBatchProver.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/zk/L2PSBatchProver.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/l2ps/zk/L2PSBatchProver"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-9b1b89cd5b264f022df908d4","sym-7bf31afd65c0bef1041e40b9","sym-dc56c00366f404d1f5b2217d","sym-5609925abe4d5877637c4336","sym-734f496461dee58b5b6c7d3c","sym-8b528a851f77e9286724f6be"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["snarkjs","circomlibjs","node:path","node:fs","node:url","node:child_process","process.env"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"mod-2fded54dba25de314f5f89fc","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/l2ps/zk/circomlibjs.d.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/zk/circomlibjs.d.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/l2ps/zk/circomlibjs.d"},"relationships":{"depends_on":[],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"mod-7e2f3258e284cbd5d3adac6d","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/l2ps/zk/snarkjs.d.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/zk/snarkjs.d.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/l2ps/zk/snarkjs.d"},"relationships":{"depends_on":[],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"mod-60eb69f9fe1fbcab27fafb79","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/l2ps/zk/zkProofProcess.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/zk/zkProofProcess.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/l2ps/zk/zkProofProcess"},"relationships":{"depends_on":[],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["snarkjs","circomlibjs","node:path","node:fs","node:readline"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"mod-38cb481227a16780e055daf9","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/authContext.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/authContext.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/authContext"},"relationships":{"depends_on":[],"depended_by":["mod-5f1b8ed2b401d728855c038c","mod-8178eae36aec57f1b202e180","sym-f4b66f329402ad34d35ebc2a","sym-b3b5244d7b171c0138f12fd5","sym-f4fdde41deaab86f8d60b115"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"mod-93380aca3aab056f0dd2e4e0","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/bunServer.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/bunServer.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/bunServer"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-6468589b59a97501083efac5","mod-7913910232f2f61a1d86ca8d","mod-5f1b8ed2b401d728855c038c","mod-8178eae36aec57f1b202e180","sym-8d3749fede2b2e386f981c1a","sym-7e71f23db4caf3a7432f457e","sym-e7d959bae3d0df1109f3601a","sym-7a01cccc7236812081d5703b","sym-08c52ead6283b6512a19e7b9","sym-929c634b12a7aa1ec2481909","sym-37bb8c7ba0ff239db9cba19f"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun","node-fetch"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"mod-a8a39a4fb87704dbcb720225","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/dtr/dtrmanager.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/dtr/dtrmanager.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/dtr/dtrmanager"},"relationships":{"depends_on":["mod-8aef488fb2fc78414791967a","mod-77aac2da6c6f0fbc37663544","mod-1f38e75fd9b9f51f96a2d975","mod-91454010a0aa78f3ef28bd69","mod-59e682c774f84720b4dbee26","mod-54aa1c38c91b1598c048b7e1","mod-1de8a1fb6a48c6a931549f30","mod-eb0798295c928ba399632ae3","mod-12d77c813504670328c9b4f1","mod-d0e009681585b57776f6a187"],"depended_by":["mod-327512c4dc701f9a29037e12","mod-0fabbf7facc4e7b4b62c59ae","mod-455d4fbaf89d273aa029864d","mod-3f71e0e4e5c692c7690b3c86","sym-f1d990a68c25fa7a7816bc3f"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"mod-455d4fbaf89d273aa029864d","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/endpointHandlers.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/endpointHandlers.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/endpointHandlers"},"relationships":{"depends_on":["mod-d0e009681585b57776f6a187","mod-8aef488fb2fc78414791967a","mod-9389bad564e097d75994d5f8","mod-20f30418ca95fd46594075af","mod-3a3b7b050c56c146875c18fb","mod-84552d58b6743daab10f83b3","mod-efae4e57fd7a4c96e3e2b085","mod-59e682c774f84720b4dbee26","mod-074e7c12d54384c86eabf721","mod-54aa1c38c91b1598c048b7e1","mod-8178eae36aec57f1b202e180","mod-77aac2da6c6f0fbc37663544","mod-1f38e75fd9b9f51f96a2d975","mod-91454010a0aa78f3ef28bd69","mod-dc9656310d022085b2936dcc","mod-6ecc959af33bffdcf9b125ac","mod-e395bfa94e646748f1e3298e","mod-55764c2c659740ce445946f7","mod-ec09ae3ca7a100b5fa55556d","mod-80ff82c43058ee3abb67247d","mod-bc30cadc96b2e14f87980a9c","mod-1159d5b65cc6179495dba86e","mod-a8a39a4fb87704dbcb720225"],"depended_by":["mod-f1c149177b4fb9bc2b7ee080","mod-8178eae36aec57f1b202e180","sym-7fe7aed70ba7c171a10dce16"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/bridge"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"mod-4e2125f21e95a0201a05fc85","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/index.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/index.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/index"},"relationships":{"depends_on":["mod-8178eae36aec57f1b202e180"],"depended_by":["sym-cf9b266780ee9759d2183fdb","sym-fc2927a008b8b003e851d59c"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"mod-efd6ff5fba09516480c9e2e4","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/manageAuth.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/manageAuth.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/manageAuth"},"relationships":{"depends_on":["mod-3a3b7b050c56c146875c18fb","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-8178eae36aec57f1b202e180","sym-3cf8c47572a9e0e64d4a2a13","sym-813e158b993d299057988303"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"mod-2b2cb5f2f246c796e349f6aa","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/manageBridge.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/manageBridge.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/manageBridge"},"relationships":{"depends_on":["mod-0bdba6781d714c651de05352","mod-8178eae36aec57f1b202e180"],"depended_by":["mod-8178eae36aec57f1b202e180","sym-8df316cdf3ef951ce8023630"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","lodash","rubic-sdk"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"mod-2e55150ffa8226bdba0597cc","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/manageConsensusRoutines.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/manageConsensusRoutines.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/manageConsensusRoutines"},"relationships":{"depends_on":["mod-91454010a0aa78f3ef28bd69","mod-8178eae36aec57f1b202e180","mod-59e682c774f84720b4dbee26","mod-1f38e75fd9b9f51f96a2d975","mod-43e420b038a56638079168bc","mod-5a3b55b43394de7f8c762546","mod-a365b7714dec16f0bf79621e","mod-0fabbf7facc4e7b4b62c59ae","mod-54aa1c38c91b1598c048b7e1","mod-3a3b7b050c56c146875c18fb","mod-fcbaaa2e6fedeb87a2dc2d8e","mod-eb0798295c928ba399632ae3","mod-d0e009681585b57776f6a187"],"depended_by":["mod-8178eae36aec57f1b202e180","sym-45104794847951b00f5a9bbe","sym-0d658d44d5b23dfd5829fc4f"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","lodash"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"mod-f1c149177b4fb9bc2b7ee080","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/manageExecution.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/manageExecution.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/manageExecution"},"relationships":{"depends_on":["mod-8178eae36aec57f1b202e180","mod-455d4fbaf89d273aa029864d","mod-a152cd44db7715c440d48dda","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-8178eae36aec57f1b202e180","sym-235384a3d4f36552d55ac7ef"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","lodash"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"mod-60e11fd9921263398a239451","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/manageGCRRoutines.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/manageGCRRoutines.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/manageGCRRoutines"},"relationships":{"depends_on":["mod-525c86f0484f1a8328f90e21","mod-8178eae36aec57f1b202e180","mod-c5d542bba68467e14e67638a","mod-1d4743119cc890fadab85fb7","mod-08315e6901cb53376d13cc70","mod-91c215ca923f83144b68d625","mod-92957ee0de7980fc9c719d03","mod-892576d596aa8b40bed3d2f9"],"depended_by":["mod-8178eae36aec57f1b202e180","sym-bfa8af7e83408600dde29446"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","lodash"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"mod-5dd7573d658ce3d7ea74353a","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/manageHelloPeer.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/manageHelloPeer.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/manageHelloPeer"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-21be8fb976449bbe3589ce47","mod-eb0798295c928ba399632ae3","mod-8178eae36aec57f1b202e180","mod-59e682c774f84720b4dbee26"],"depended_by":["mod-8178eae36aec57f1b202e180","mod-81df5ad5e23b1f5a430705f8","mod-074e7c12d54384c86eabf721","sym-68a8ebbbf4a944b94d5fce23","sym-1d7e1deea80d0d5c35cc1961"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["lodash","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"mod-025199ea4543cbbe2ddf79a8","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/manageLogin.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/manageLogin.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/manageLogin"},"relationships":{"depends_on":["mod-8178eae36aec57f1b202e180","mod-fab341be779110d20904d642","mod-be77f5db5117aff014090a24"],"depended_by":["mod-8178eae36aec57f1b202e180","sym-54c2cfe0e786dfb0aa4c1a30","sym-ea53351a3682c209afbecd62"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","lodash"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"mod-e09bbf55f33f0d36061b2348","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/manageNativeBridge.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/manageNativeBridge.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/manageNativeBridge"},"relationships":{"depends_on":["mod-59e682c774f84720b4dbee26"],"depended_by":["mod-8178eae36aec57f1b202e180","sym-ac7d7af06ace8e5f7480d85e"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"mod-3f71e0e4e5c692c7690b3c86","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/manageNodeCall.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/manageNodeCall.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/manageNodeCall"},"relationships":{"depends_on":["mod-8178eae36aec57f1b202e180","mod-d0e009681585b57776f6a187","mod-2d8e2ee0779d753dbf529ccf","mod-59e682c774f84720b4dbee26","mod-82b6a522914548c8fd24479a","mod-303258444053b0a43538b62b","mod-ea8a0a466499b8a4e9d2b2fd","mod-4608ef549e373e94702c2215","mod-eeb3f53b29866be8d2cb970f","mod-5d68d5d1029351abd62fa157","mod-587a0dac663054ccdc90b2bc","mod-6e27fb3b8c84e1baeea2a944","mod-1a126c017b2b7dd41d6846f0","mod-a25839dd6ba039a8c958583f","mod-00cbdca09e56b6109b846e9b","mod-84552d58b6743daab10f83b3","mod-54aa1c38c91b1598c048b7e1","mod-e395bfa94e646748f1e3298e","mod-e3c2dc56fd38d656d5235000","mod-77aac2da6c6f0fbc37663544","mod-c8450797917dfb54fe43ca86","mod-1de8a1fb6a48c6a931549f30","mod-a1bb18b05142b623b9fb8be4","mod-8aef488fb2fc78414791967a","mod-1d4743119cc890fadab85fb7","mod-7656cd8b9f3c2f0776a9aaa8","mod-be7b10b7e34156b0bae273f7","mod-a8a39a4fb87704dbcb720225"],"depended_by":["mod-5269202219af5585cb61f564","mod-8178eae36aec57f1b202e180","mod-21be8fb976449bbe3589ce47","mod-570eac54a9d81c36302eb6d0","mod-a216d9e19ade66b2cdd92076","sym-3157118d1e9c323aab1ad5d4","sym-5639767a6380b54d939d3083"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption","process.env"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"mod-22a231e7e2a8fa48e00405d7","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/manageP2P.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/manageP2P.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/manageP2P"},"relationships":{"depends_on":["mod-3a3b7b050c56c146875c18fb","mod-84552d58b6743daab10f83b3","mod-59e682c774f84720b4dbee26"],"depended_by":["sym-340c7ae28f4661acc40c644e","sym-5b7e48554055803b885c211a"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"mod-f215e43fe388f34d276e0935","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/methodListing.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/methodListing.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/methodListing"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1"],"depended_by":["sym-f5a0b179a238fe0393fde5cf"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fastify"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"mod-5f1b8ed2b401d728855c038c","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/middleware/rateLimiter.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/middleware/rateLimiter.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/middleware/rateLimiter"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-93380aca3aab056f0dd2e4e0","mod-59e682c774f84720b4dbee26","mod-38cb481227a16780e055daf9","mod-8eb2e47a2e706233783e8ea4"],"depended_by":["mod-8178eae36aec57f1b202e180","sym-a30c004044ed694e7dd2baa2"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","bun"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"mod-7b8929603b5d94f3dafe9dea","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/openApiSpec.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/openApiSpec.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/openApiSpec"},"relationships":{"depends_on":[],"depended_by":["sym-91661b3c5c62bff622a981db","sym-5c346fb8b4864942959afa56"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fastify","@fastify/swagger","@fastify/swagger-ui","fs","path","url"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"mod-6a73c250ca0d545930026d4a","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/routines/checkGasPriorOperation.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/checkGasPriorOperation.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/routines/checkGasPriorOperation"},"relationships":{"depends_on":[],"depended_by":["sym-c03360033ff46d621cf2ae17"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"mod-c996d6d5043c881bd6ad5b03","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/routines/determineGasForOperation.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/determineGasForOperation.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/routines/determineGasForOperation"},"relationships":{"depends_on":["mod-457939e5e7481c4a6a17e7a3"],"depended_by":["mod-d438c33c3d72df9bd7dd472a","sym-62051722bb59e097df10746e"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"mod-2d8e2ee0779d753dbf529ccf","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/routines/eggs.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/eggs.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/routines/eggs"},"relationships":{"depends_on":[],"depended_by":["mod-3f71e0e4e5c692c7690b3c86","sym-f732c52bdfb53b3c7c57e6c1"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"mod-d438c33c3d72df9bd7dd472a","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/routines/gasDeal.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/gasDeal.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/routines/gasDeal"},"relationships":{"depends_on":["mod-c996d6d5043c881bd6ad5b03"],"depended_by":["sym-b5118eb6e684507b140dc13e","sym-60b2be41818640ffc764cb35","sym-3c18c93e1cb855e2917ca012","sym-0714329610278a49d4d896b8","sym-4de139d75083bce9f07d0bf5"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"mod-f235c77fff58b93b0ef4a745","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/routines/getRemoteIP.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/getRemoteIP.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/routines/getRemoteIP"},"relationships":{"depends_on":[],"depended_by":["mod-b5a2bbfcc551f4a8277420d0","sym-5c77c8e8605a322c4a8105e9"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-fetch"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"mod-6e27fb3b8c84e1baeea2a944","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/routines/nodecalls/getBlockByHash.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/nodecalls/getBlockByHash.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/routines/nodecalls/getBlockByHash"},"relationships":{"depends_on":["mod-d0e009681585b57776f6a187","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-3f71e0e4e5c692c7690b3c86","sym-00a687dd7a4ac80ec046b1d9"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"mod-587a0dac663054ccdc90b2bc","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/routines/nodecalls/getBlockByNumber.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/nodecalls/getBlockByNumber.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/routines/nodecalls/getBlockByNumber"},"relationships":{"depends_on":["mod-c20c965c5562cff684a7448f","mod-d0e009681585b57776f6a187","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-3f71e0e4e5c692c7690b3c86","sym-911a2d4197fac2defef73b40"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"mod-5d68d5d1029351abd62fa157","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/routines/nodecalls/getBlockHeaderByHash.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/nodecalls/getBlockHeaderByHash.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/routines/nodecalls/getBlockHeaderByHash"},"relationships":{"depends_on":["mod-d0e009681585b57776f6a187","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-3f71e0e4e5c692c7690b3c86","sym-f4c921bd7789b2105a73e6fa"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"mod-eeb3f53b29866be8d2cb970f","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/routines/nodecalls/getBlockHeaderByNumber.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/nodecalls/getBlockHeaderByNumber.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/routines/nodecalls/getBlockHeaderByNumber"},"relationships":{"depends_on":["mod-d0e009681585b57776f6a187","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-3f71e0e4e5c692c7690b3c86","sym-e1ba932ee6b752b90eafb76c"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"mod-1a126c017b2b7dd41d6846f0","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/routines/nodecalls/getBlocks.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/nodecalls/getBlocks.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/routines/nodecalls/getBlocks"},"relationships":{"depends_on":["mod-d0e009681585b57776f6a187","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-3f71e0e4e5c692c7690b3c86","sym-1965f9efde68a4394122285f"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"mod-82b6a522914548c8fd24479a","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/routines/nodecalls/getPeerInfo.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/nodecalls/getPeerInfo.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/routines/nodecalls/getPeerInfo"},"relationships":{"depends_on":["mod-59e682c774f84720b4dbee26"],"depended_by":["mod-3f71e0e4e5c692c7690b3c86","sym-4830c08718fcd7f4335a117d"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"mod-303258444053b0a43538b62b","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/routines/nodecalls/getPeerlist.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/nodecalls/getPeerlist.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/routines/nodecalls/getPeerlist"},"relationships":{"depends_on":["mod-074e7c12d54384c86eabf721","mod-59e682c774f84720b4dbee26","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-3f71e0e4e5c692c7690b3c86","sym-97320893d204cc7d476e3fde"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"mod-4608ef549e373e94702c2215","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/routines/nodecalls/getPreviousHashFromBlockHash.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/nodecalls/getPreviousHashFromBlockHash.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/routines/nodecalls/getPreviousHashFromBlockHash"},"relationships":{"depends_on":["mod-d0e009681585b57776f6a187","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-3f71e0e4e5c692c7690b3c86","sym-c4344bea317284338ea29949"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"mod-ea8a0a466499b8a4e9d2b2fd","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/routines/nodecalls/getPreviousHashFromBlockNumber.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/nodecalls/getPreviousHashFromBlockNumber.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/routines/nodecalls/getPreviousHashFromBlockNumber"},"relationships":{"depends_on":["mod-d0e009681585b57776f6a187","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-3f71e0e4e5c692c7690b3c86","sym-d2e86475bdb3136bd4dbbdef"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"mod-a25839dd6ba039a8c958583f","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/routines/nodecalls/getTransactions.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/nodecalls/getTransactions.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/routines/nodecalls/getTransactions"},"relationships":{"depends_on":["mod-d0e009681585b57776f6a187","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-3f71e0e4e5c692c7690b3c86","sym-6595be3b08ea5be4fbcb7009"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"mod-00cbdca09e56b6109b846e9b","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/routines/nodecalls/getTxsByHashes.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/nodecalls/getTxsByHashes.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/routines/nodecalls/getTxsByHashes"},"relationships":{"depends_on":["mod-59e682c774f84720b4dbee26","mod-d0e009681585b57776f6a187"],"depended_by":["mod-3f71e0e4e5c692c7690b3c86","sym-364a66b2b44b55df33318f93"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"mod-fab341be779110d20904d642","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/routines/normalizeWebBuffers.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/normalizeWebBuffers.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/routines/normalizeWebBuffers"},"relationships":{"depends_on":[],"depended_by":["mod-025199ea4543cbbe2ddf79a8","mod-be77f5db5117aff014090a24","sym-444d637aead560497f9078f4"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"mod-be77f5db5117aff014090a24","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/routines/sessionManager.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/sessionManager.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/routines/sessionManager"},"relationships":{"depends_on":["mod-3a3b7b050c56c146875c18fb","mod-fab341be779110d20904d642"],"depended_by":["mod-025199ea4543cbbe2ddf79a8","sym-16320e5dfefd4484bf04a2b1","sym-3d14e568424b742a642a1957"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"mod-5269202219af5585cb61f564","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/routines/timeSync.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/timeSync.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/routines/timeSync"},"relationships":{"depends_on":["mod-59e682c774f84720b4dbee26","mod-54aa1c38c91b1598c048b7e1","mod-a5c28a9abc4da2bd27d3cbb4","mod-c44377cbc773462d72dd13fa","mod-3f71e0e4e5c692c7690b3c86"],"depended_by":["sym-b3dbfe3fa6d39217fc5d4f7d","sym-4c471c5372546d33ace71bb3"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["util"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"mod-c44377cbc773462d72dd13fa","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/routines/timeSyncUtils.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/timeSyncUtils.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/routines/timeSyncUtils"},"relationships":{"depends_on":[],"depended_by":["mod-5269202219af5585cb61f564","sym-9b8195b95964c2a498993290","sym-2ad003ec730706f8e7afa93c","sym-f06d0734196eba459ef68266","sym-0d1dcfcac0642bf15d871302","sym-a24cd6be8abd3b0215b2880d","sym-afb6526449d86d945cdb2452","sym-7c70e690b7433ebb78afddca","sym-0ab6649bd8566881a8ffa026","sym-cef374c0e9418a45db67507b"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"mod-dc9656310d022085b2936dcc","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/routines/transactions/demosWork/handleDemosWorkRequest.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/transactions/demosWork/handleDemosWorkRequest.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/routines/transactions/demosWork/handleDemosWorkRequest"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-8178eae36aec57f1b202e180","mod-a66773add774e134dc55fb9c","mod-6ecc959af33bffdcf9b125ac"],"depended_by":["mod-455d4fbaf89d273aa029864d","mod-b1d30e1636da57dbf8144fd7","mod-a66773add774e134dc55fb9c","sym-dd2bf0489df3b5728b851e75","sym-873aa7dadb9fae6f13424d90","sym-3d8045d8ce322957d53c5a4f"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/demoswork","@kynesyslabs/demosdk/types","lodash"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"mod-b1d30e1636da57dbf8144fd7","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/routines/transactions/demosWork/handleStep.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/transactions/demosWork/handleStep.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/routines/transactions/demosWork/handleStep"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-dc9656310d022085b2936dcc","mod-6ecc959af33bffdcf9b125ac","mod-55764c2c659740ce445946f7","mod-efae4e57fd7a4c96e3e2b085","mod-3adb0b7ff3ed55bc318f2ce4"],"depended_by":["mod-a66773add774e134dc55fb9c","sym-eb71a8dd3518c88cba790695"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/demoswork","@kynesyslabs/demosdk/types","node_modules/@kynesyslabs/demosdk/build/types/native","lodash"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"mod-a66773add774e134dc55fb9c","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/routines/transactions/demosWork/processOperations.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/transactions/demosWork/processOperations.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/routines/transactions/demosWork/processOperations"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-dc9656310d022085b2936dcc","mod-b1d30e1636da57dbf8144fd7"],"depended_by":["mod-dc9656310d022085b2936dcc","sym-fb863731199cef86f8981fbe"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"mod-bc30cadc96b2e14f87980a9c","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/routines/transactions/handleIdentityRequest.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/transactions/handleIdentityRequest.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/routines/transactions/handleIdentityRequest"},"relationships":{"depends_on":["mod-525c86f0484f1a8328f90e21","mod-be7b10b7e34156b0bae273f7","mod-24557f0b00a0d628de80e5eb","mod-08315e6901cb53376d13cc70"],"depended_by":["mod-455d4fbaf89d273aa029864d","sym-af1c37237a37962494d06df0"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"mod-efae4e57fd7a4c96e3e2b085","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/routines/transactions/handleL2PS.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/transactions/handleL2PS.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/routines/transactions/handleL2PS"},"relationships":{"depends_on":["mod-d0e009681585b57776f6a187","mod-1de8a1fb6a48c6a931549f30","mod-8178eae36aec57f1b202e180","mod-ec09ae3ca7a100b5fa55556d","mod-c8450797917dfb54fe43ca86","mod-3be22133d78983422a1da0d9","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-455d4fbaf89d273aa029864d","mod-b1d30e1636da57dbf8144fd7","sym-87aeaf45d3ccc3eda2f7754f"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/l2ps"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"mod-1159d5b65cc6179495dba86e","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/routines/transactions/handleNativeBridgeTx.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/transactions/handleNativeBridgeTx.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/routines/transactions/handleNativeBridgeTx"},"relationships":{"depends_on":[],"depended_by":["mod-455d4fbaf89d273aa029864d","sym-1047da550cdd7c7818b318f5"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/bridge"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.956Z","authors":[]}} +{"uuid":"mod-3adb0b7ff3ed55bc318f2ce4","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/routines/transactions/handleNativeRequest.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/transactions/handleNativeRequest.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/routines/transactions/handleNativeRequest"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-b1d30e1636da57dbf8144fd7","sym-d6c1efb7fd3f747e6336fa5c"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","node_modules/@kynesyslabs/demosdk/build/types/native"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.956Z","authors":[]}} +{"uuid":"mod-55764c2c659740ce445946f7","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/routines/transactions/handleWeb2ProxyRequest.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/transactions/handleWeb2ProxyRequest.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/routines/transactions/handleWeb2ProxyRequest"},"relationships":{"depends_on":["mod-3dc939e68aaf71174e695f9e","mod-7866a2e46802b656e108eb43","mod-6efee936b845d34104bac46c","mod-0a6b71b6c837c68c08998d7b","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-455d4fbaf89d273aa029864d","mod-b1d30e1636da57dbf8144fd7","mod-8178eae36aec57f1b202e180","sym-7e7c43222ce7463a1dcc2533"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"mod-a152cd44db7715c440d48dda","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/securityModule.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/securityModule.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/securityModule"},"relationships":{"depends_on":[],"depended_by":["mod-f1c149177b4fb9bc2b7ee080","sym-804bb364f18a73fb39945cba"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.956Z","authors":[]}} +{"uuid":"mod-8178eae36aec57f1b202e180","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/server_rpc.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/server_rpc.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/server_rpc"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-59e682c774f84720b4dbee26","mod-455d4fbaf89d273aa029864d","mod-efd6ff5fba09516480c9e2e4","mod-2e55150ffa8226bdba0597cc","mod-60e11fd9921263398a239451","mod-f1c149177b4fb9bc2b7ee080","mod-5dd7573d658ce3d7ea74353a","mod-025199ea4543cbbe2ddf79a8","mod-3f71e0e4e5c692c7690b3c86","mod-55764c2c659740ce445946f7","mod-80ff82c43058ee3abb67247d","mod-2b2cb5f2f246c796e349f6aa","mod-93380aca3aab056f0dd2e4e0","mod-e09bbf55f33f0d36061b2348","mod-d0e009681585b57776f6a187","mod-5f1b8ed2b401d728855c038c","mod-38cb481227a16780e055daf9","mod-91c215ca923f83144b68d625","mod-292e8f8c5a666fd4318d4859","mod-b4ad305201d7e6c9d3b649db","mod-ad645bf9d23cc4e8c30848fc","mod-16a76d1c87dfcbecec53d1e0","mod-08bf03fa93f7e9b593a27d85"],"depended_by":["mod-327512c4dc701f9a29037e12","mod-e395bfa94e646748f1e3298e","mod-43e420b038a56638079168bc","mod-455d4fbaf89d273aa029864d","mod-4e2125f21e95a0201a05fc85","mod-2b2cb5f2f246c796e349f6aa","mod-2e55150ffa8226bdba0597cc","mod-f1c149177b4fb9bc2b7ee080","mod-60e11fd9921263398a239451","mod-5dd7573d658ce3d7ea74353a","mod-025199ea4543cbbe2ddf79a8","mod-3f71e0e4e5c692c7690b3c86","mod-dc9656310d022085b2936dcc","mod-efae4e57fd7a4c96e3e2b085","sym-d6b52ce184f5b4b4464e72a9","sym-8851eae25a7755afe330f85c"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk","process.env"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"mod-8eb2e47a2e706233783e8ea4","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/network/verifySignature.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/verifySignature.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/network/verifySignature"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-5f1b8ed2b401d728855c038c","sym-eacdd884e39f2f675fcacdd6","sym-0cff4cfd0a8b9a5024c1680a","sym-3e2cd2e59eb550fbfb626bcc"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"mod-0f688ec55978b6cd5ecd4803","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/auth/parser.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/auth/parser.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/auth/parser"},"relationships":{"depends_on":["mod-f2ed72921c23c1fc451fd89c","mod-28ff727efa5c0915d4fbfbe9"],"depended_by":["mod-0d23e37fd3828b9a02bf3b23","mod-28add79b36597a8f639320cc","sym-98134ecd770aae6dcbec90ab"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"mod-28ff727efa5c0915d4fbfbe9","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/auth/types.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/auth/types.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/auth/types"},"relationships":{"depends_on":[],"depended_by":["mod-0f688ec55978b6cd5ecd4803","mod-e421d8434312ee89ef377735","mod-0d23e37fd3828b9a02bf3b23","mod-28add79b36597a8f639320cc","mod-a877268ad21d1ba59035ea1f","mod-fa9dc053ab761e9fa1b23eca","sym-8daeceb7337326d9572adf7f","sym-c906e076f2017c51d5f17ad9","sym-7481da4d2551622256f79c34","sym-9d0b831a20db10611cc45fb1"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"mod-e421d8434312ee89ef377735","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/auth/verifier.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/auth/verifier.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/auth/verifier"},"relationships":{"depends_on":["mod-28ff727efa5c0915d4fbfbe9","mod-fa9dc053ab761e9fa1b23eca","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-0d23e37fd3828b9a02bf3b23","mod-8040973db91efbca29bd5a3f","sym-734d63d64bf5b1e1a55b41ae"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge","@noble/hashes/sha3.js"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"mod-0d23e37fd3828b9a02bf3b23","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/index.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/index"},"relationships":{"depends_on":["mod-f486beaedaf6d01b3f5574b4","mod-fa9dc053ab761e9fa1b23eca","mod-0ec41645e6ad231f2006c934","mod-0e059ca33e0c78acb79559e8","mod-2c0f4f3afaaec106ad82bf77","mod-fda58e5568b7fcba96a8a55c","mod-60762ca0d2e77317b47957f2","mod-318b87a4c520cdb8c42c50c8","mod-da04ef1eca622af1ef3664c3","mod-51a57a3bb204ec45b2b3f614","mod-b08e6ddaebbb67ea6d37877c","mod-28ff727efa5c0915d4fbfbe9","mod-0f688ec55978b6cd5ecd4803","mod-e421d8434312ee89ef377735"],"depended_by":["sym-0258ae2808ceacc5e5c7daf6","sym-748b9ac5e4eefbb8f1c662db","sym-905c4a303dc09878f445885a","sym-13f054ebc0ac09ce91489435","sym-9234875151f1a7f0cf31b9e7","sym-daabbda2f57bbfdba83b8e83","sym-733e1ea545c75abf365916d0","sym-30146865aa7ee601c7c84c2c","sym-babb5160904dfa15d9efffde","sym-76bd6ff260e8e858c0a13b22","sym-267418c45b8286ee4f1c6f22","sym-718d0f88adf207171e198984","sym-335b3635e60265c0f047f94a","sym-47e8e5e81e562513babffa84","sym-65fd4ae8ff6b4e80cd8e7ddf","sym-9e392e3be1bb8e80b9d8eca0","sym-4b548d9bad1a3f7b3b804545"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.956Z","authors":[]}} +{"uuid":"mod-cf03366f5eef469f1f9abae5","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/integration/BaseAdapter.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/BaseAdapter.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/BaseAdapter"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-f486beaedaf6d01b3f5574b4","mod-a5b4a44206cc0f3e39469a88","mod-0ec41645e6ad231f2006c934","mod-88c1741b3b46fa02af202651"],"depended_by":["mod-eef3b769fd906f6d2e387d17","mod-520483a8a175e4c376a6fc66","mod-d3bd2f24c047572fef2bb57d","sym-906fc1a6f627adb682f73f69","sym-33f3a54f75b5f49ab6ca4e18"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["process.env"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"mod-eef3b769fd906f6d2e387d17","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/integration/consensusAdapter.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/consensusAdapter.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/consensusAdapter"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-21be8fb976449bbe3589ce47","mod-cf03366f5eef469f1f9abae5","mod-0e059ca33e0c78acb79559e8","mod-7a54f789433ac1b88a2975b0","mod-fda58e5568b7fcba96a8a55c"],"depended_by":["mod-520483a8a175e4c376a6fc66","sym-6fc1a8d7bec38c1c054731cf","sym-c622baacd0af9f2fa1e8a75d","sym-5e3c44e475fe3984a48af08e"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"mod-520483a8a175e4c376a6fc66","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/integration/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/index.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/index"},"relationships":{"depends_on":["mod-cf03366f5eef469f1f9abae5","mod-d3bd2f24c047572fef2bb57d","mod-eef3b769fd906f6d2e387d17","mod-88c1741b3b46fa02af202651","mod-ba811634639e67c5ad6dad6a"],"depended_by":["sym-9d04b4352850e4e29d81aa9a","sym-8d46e34227aa3b82778ad701","sym-0d16d90a0af194182c7763d8","sym-294aec35de62c4328120b87f","sym-c10aa7411e9a4c559b6bf35f","sym-bb4af358ea202588d8c6fb5e","sym-4f60154a5b98b9ad1a439365","sym-8532559ab87c585dd75c711e","sym-c75dad10441655e24de54ea9","sym-32194fbfce8c990fbf259c10","sym-2b50e307c6dd33f305ef5781","sym-20fdb18a1d51a344c3e5f1a6"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"mod-88c1741b3b46fa02af202651","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/integration/keys.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/keys.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/keys"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-59e682c774f84720b4dbee26"],"depended_by":["mod-cee54b249e5709ba015c9342","mod-cf03366f5eef469f1f9abae5","mod-520483a8a175e4c376a6fc66","sym-21f9add087cbe8548e5cfaa7","sym-28528c136e20c5b9216375cc","sym-125aa959f581df6cef0211c3","sym-1c67049066747e28049dd5e3","sym-815707b26951dca6661da541"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.956Z","authors":[]}} +{"uuid":"mod-d3bd2f24c047572fef2bb57d","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/integration/peerAdapter.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/peerAdapter.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/peerAdapter"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-21be8fb976449bbe3589ce47","mod-cf03366f5eef469f1f9abae5","mod-fda58e5568b7fcba96a8a55c","mod-0e059ca33e0c78acb79559e8"],"depended_by":["mod-520483a8a175e4c376a6fc66","mod-59e682c774f84720b4dbee26","sym-ef97a186c9a7b5c8aabd5a90","sym-8865a437064bf5957a1cb25d"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"mod-ba811634639e67c5ad6dad6a","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/integration/startup.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/startup.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/startup"},"relationships":{"depends_on":["mod-21706187666573b14b262650","mod-bee55878a628d2e61003c5cc","mod-f6f853a3f874d365c69ba912","mod-eff94816a8124a44948e1724","mod-c2ea467ec2d317289746a260","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-327512c4dc701f9a29037e12","mod-520483a8a175e4c376a6fc66","sym-61acf2e50e86a7b8950968d6","sym-38903f0502c45543a1abf916","sym-dc1f8edeeb79e07414f75002","sym-bc5ae08b5a8d0d4051accdc7","sym-7a79542eed185c47fa11f698"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["process.env"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"mod-8040973db91efbca29bd5a3f","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/protocol/dispatcher.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/dispatcher.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/dispatcher"},"relationships":{"depends_on":["mod-0ec41645e6ad231f2006c934","mod-fa9dc053ab761e9fa1b23eca","mod-2c0f4f3afaaec106ad82bf77","mod-0e059ca33e0c78acb79559e8","mod-e421d8434312ee89ef377735"],"depended_by":["mod-c7ad59fd02de9e38e55f238d","sym-c1d0127d63060ca93441f113","sym-66031640dec8be166f293f56"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"mod-9b81da9944f3e64f4bb36898","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/protocol/handlers/consensus.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/consensus.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/consensus"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-fa9dc053ab761e9fa1b23eca","mod-7a54f789433ac1b88a2975b0"],"depended_by":["mod-2c0f4f3afaaec106ad82bf77","sym-55f93e8069ac7b64652c0d68","sym-99b0d2564383e319659c1396","sym-b4dfd8c83a7fc0baf92128df","sym-1cfae654989b906d03da6705","sym-28d0b0409648d85cbd16e1fa","sym-e66e3cbcbd613726d7235a91","sym-07c2b09c468e0b5ad536e20f"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"mod-81df5ad5e23b1f5a430705f8","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/protocol/handlers/control.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/control.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/control"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-fa9dc053ab761e9fa1b23eca","mod-fda58e5568b7fcba96a8a55c","mod-5dd7573d658ce3d7ea74353a"],"depended_by":["mod-2c0f4f3afaaec106ad82bf77","sym-f57f553914fb207445eda03d","sym-d71b89a0ab10dcdd511293d3","sym-7061b9df6db226c496e459c6","sym-fe23be8635119990ef0c5164","sym-29213aa85f749813078f0b0d","sym-66423d47c95841fbe2ed154c"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"mod-62ff6356c1ab42c00fe12c14","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/protocol/handlers/gcr.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/gcr.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/gcr"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-fa9dc053ab761e9fa1b23eca","mod-da04ef1eca622af1ef3664c3","mod-8a38038e04d5bed97a843cbd","mod-318b87a4c520cdb8c42c50c8"],"depended_by":["mod-2c0f4f3afaaec106ad82bf77","sym-8721b786443fefdf61f3484d","sym-442e0e5efaae973242d3a83e","sym-4a56ab36294dcc8703d06e4d","sym-8fb8125b35dabb0bb867c2c3","sym-7e7b96a10468c1edce3a73ae","sym-c48b984748dadec99be2ea79","sym-27adc406e8d7be915bdab915","sym-9dfd285f7a17eac27325557e","sym-f6d470d11d1bce1c9ae5c46d","sym-dd0d6da79a6076f6a04e978a"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.420Z","authors":[]}} +{"uuid":"mod-8fe5e92214e16e3971d40e48","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/protocol/handlers/l2ps.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/l2ps.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/l2ps"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-fa9dc053ab761e9fa1b23eca","mod-da04ef1eca622af1ef3664c3","mod-8a38038e04d5bed97a843cbd","mod-10774a0b5dd2473051df0fad"],"depended_by":["mod-2c0f4f3afaaec106ad82bf77","sym-9cfa7eb6554a93203930565f","sym-0c9c446090c5e603032ab8cf","sym-44d515e6bda84183724780b8","sym-44f589250824db7b5a096f65","sym-b97361a9401c3a71b5cb1998","sym-92202682f16c52bae37d49f3","sym-56f866c2f73fcd13683b856e","sym-fc93c1389ab92ee65c717efc"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"mod-b986d7806992d6c650aa2abc","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/protocol/handlers/meta.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/meta.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/meta"},"relationships":{"depends_on":["mod-fa9dc053ab761e9fa1b23eca","mod-b08e6ddaebbb67ea6d37877c","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-2c0f4f3afaaec106ad82bf77","sym-70988e4b53bbd62ef2940b36","sym-3cf96cee618774e41d2dfe8a","sym-5e497086f6306f35948392bf","sym-5d5bc71be2e25f76fae74cf0","sym-65524c0f66e7faa0eaa27ed8"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"mod-a7c0beb3ec427a0c7c2c3f7f","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/protocol/handlers/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/sync.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/sync"},"relationships":{"depends_on":["mod-fa9dc053ab761e9fa1b23eca","mod-da04ef1eca622af1ef3664c3","mod-60762ca0d2e77317b47957f2","mod-51a57a3bb204ec45b2b3f614","mod-8a38038e04d5bed97a843cbd"],"depended_by":["mod-2c0f4f3afaaec106ad82bf77","sym-32d856454b59fac1c5f9f097","sym-ef424ed39e854a4281432490","sym-e301fc6bbdb4b0a55d179d3b","sym-ea690b435ee55e2db7bcf853","sym-c1c3b15c1ce614072f76c61b","sym-7b7933aea3be7d0c5d9c4362","sym-951f37505baec8059fcb4a8c","sym-74a72391e547cae03f9273bd"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"mod-c3ac921e455e2c85a68228e4","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/protocol/handlers/transaction.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/transaction.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/transaction"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-fa9dc053ab761e9fa1b23eca","mod-da04ef1eca622af1ef3664c3","mod-8a38038e04d5bed97a843cbd","mod-1de8a1fb6a48c6a931549f30"],"depended_by":["mod-2c0f4f3afaaec106ad82bf77","sym-b37deaf5ad3d42513eeee725","sym-80af24f09cb8568074b9237b","sym-8a00aee2ef2d139bfb66e5af","sym-52e28e3349a0587ed39bb211","sym-68764677ca5ad459e67db833"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/bridge"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"mod-8a38038e04d5bed97a843cbd","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/protocol/handlers/utils.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/utils.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/utils"},"relationships":{"depends_on":["mod-da04ef1eca622af1ef3664c3"],"depended_by":["mod-62ff6356c1ab42c00fe12c14","mod-8fe5e92214e16e3971d40e48","mod-a7c0beb3ec427a0c7c2c3f7f","mod-c3ac921e455e2c85a68228e4","sym-908c55c5efe8c66740e37055","sym-40cdf81aea9ee142f33fdadf","sym-3d600ff95898af2342185384"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"mod-0e059ca33e0c78acb79559e8","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/protocol/opcodes.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/opcodes.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/opcodes"},"relationships":{"depends_on":[],"depended_by":["mod-cee54b249e5709ba015c9342","mod-0d23e37fd3828b9a02bf3b23","mod-eef3b769fd906f6d2e387d17","mod-d3bd2f24c047572fef2bb57d","mod-8040973db91efbca29bd5a3f","mod-2c0f4f3afaaec106ad82bf77","sym-1a3586208ccd98a2e6978fb3","sym-5c8e5e8a39104aecb286893f","sym-1e4bb01db213569973c9fb34"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"mod-2c0f4f3afaaec106ad82bf77","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/protocol/registry.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/registry.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/registry"},"relationships":{"depends_on":["mod-fa9dc053ab761e9fa1b23eca","mod-0e059ca33e0c78acb79559e8","mod-81df5ad5e23b1f5a430705f8","mod-a7c0beb3ec427a0c7c2c3f7f","mod-62ff6356c1ab42c00fe12c14","mod-c3ac921e455e2c85a68228e4","mod-b986d7806992d6c650aa2abc","mod-9b81da9944f3e64f4bb36898","mod-8fe5e92214e16e3971d40e48"],"depended_by":["mod-0d23e37fd3828b9a02bf3b23","mod-8040973db91efbca29bd5a3f","sym-465a6407cdbddf468c7c3251","sym-66f6973f6288a7f36a7c1d28","sym-af3f501ea2464a1d43010bea","sym-7109d15742026d0f311996ea"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"mod-88b203dbc16db3025123970b","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/ratelimit/RateLimiter.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/ratelimit/RateLimiter.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/ratelimit/RateLimiter"},"relationships":{"depends_on":["mod-c2ea467ec2d317289746a260"],"depended_by":["mod-7ff977b2cc6a6dde99d1c4a1","sym-86a02fdc381985fdd13f023b"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"mod-7ff977b2cc6a6dde99d1c4a1","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/ratelimit/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/ratelimit/index.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/ratelimit/index"},"relationships":{"depends_on":["mod-c2ea467ec2d317289746a260","mod-88b203dbc16db3025123970b"],"depended_by":["sym-859e3974653a78d99db2f73e","sym-ac44c01f6c74fd8f6a21f2c7"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.957Z","authors":[]}} +{"uuid":"mod-c2ea467ec2d317289746a260","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/ratelimit/types.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/ratelimit/types.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/ratelimit/types"},"relationships":{"depends_on":[],"depended_by":["mod-ba811634639e67c5ad6dad6a","mod-88b203dbc16db3025123970b","mod-7ff977b2cc6a6dde99d1c4a1","sym-ebc9cfd3e7f365a40b76b5b8","sym-4339ce5f095732b35ef16575","sym-4de085ac34821b291958ca8d","sym-a929d1427bf0e28aee1d273a"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.957Z","authors":[]}} +{"uuid":"mod-7a54f789433ac1b88a2975b0","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/serialization/consensus.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["mod-f2ed72921c23c1fc451fd89c"],"depended_by":["mod-eef3b769fd906f6d2e387d17","mod-9b81da9944f3e64f4bb36898","mod-a7ed1878dc1aee852010d3b6","sym-7d64282ce8c2fd92b6a0242d","sym-bbe82027196a1293546adf88","sym-707d977f3ee1ecf261ddd6a2","sym-12945c6469674a2c8ca1664d","sym-484518bac829f3d8d0b68bed","sym-3c9e74c5cd69037300664055","sym-f7c2c4bf481ceac8b676e139","sym-7e98febf42ce02edfc8af727","sym-81026f67f67aeb62d631535d","sym-fa254e205c76ea44e4b0521c","sym-531050568d58da423745f877","sym-d7fd53b8db8be40361088b41","sym-1f0f4f159ed45d15de2bdb16","sym-8736e8fe142316bf9549f1a8","sym-44872549830e75384171fc2b","sym-cd9eaecd5f72fe65de09076a","sym-cdf87a7aca678cd914268866","sym-50906bc466402f2083e8ab59","sym-c8763836bff4ea42fba470e9","sym-72a34cb08372cf0ac8f3fb22","sym-9e648f9c7fcc2000961ea0f5","sym-5eac4ba7590c3f59ec0ba280","sym-c2ca91c5458f62906d47361f","sym-74d82230f4dfa750c17ed391","sym-25c69489da5bd52abf8384dc","sym-e3e86d2049745e57873fd98b"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"mod-fda58e5568b7fcba96a8a55c","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/serialization/control.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/control.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/control"},"relationships":{"depends_on":["mod-f2ed72921c23c1fc451fd89c"],"depended_by":["mod-0d23e37fd3828b9a02bf3b23","mod-eef3b769fd906f6d2e387d17","mod-d3bd2f24c047572fef2bb57d","mod-81df5ad5e23b1f5a430705f8","sym-481361719769269bbcc2e42e","sym-ea8e70c31d2e96bfbddc5728","sym-6f8e6e4f31b5962fa750ff76","sym-0dc97a487d76eed091d62752","sym-13ac1dce8147d23e90ebd1e2","sym-3b5febcb27a4551c38d4e5da","sym-bc7a00fb36defa4547dc4e66","sym-d06a0d03433985f473292d4f","sym-90a66cf85e974a26a58d0020","sym-90b3c0e9e4b19ddeb943e4dd","sym-f4ccdcb40b8b555b7a08fcb6","sym-9351362dec91626ae107ca56","sym-c5fa908fa5581b730fc5d09c","sym-8229616c5a767a0d5dbfefda","sym-88f33bf5560b48d40472b9d9","sym-20b5f591af45ea9097a1eca8","sym-12b4c077de9faa8c83463abd","sym-4c7c069d6afb88dd0645bd92","sym-04a3e5bb96f8917c9379915c","sym-f75ed5d703b6d0859d13b84a"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"mod-318b87a4c520cdb8c42c50c8","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/serialization/gcr.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/gcr.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/gcr"},"relationships":{"depends_on":["mod-f2ed72921c23c1fc451fd89c"],"depended_by":["mod-0d23e37fd3828b9a02bf3b23","mod-62ff6356c1ab42c00fe12c14","sym-4bd857e92a09ab312df3fac6","sym-4f96470733f0fe1d8997c6c3","sym-d98c42026c34023c6273d50c"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"mod-da04ef1eca622af1ef3664c3","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/serialization/jsonEnvelope.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/jsonEnvelope.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/jsonEnvelope"},"relationships":{"depends_on":["mod-f2ed72921c23c1fc451fd89c"],"depended_by":["mod-cee54b249e5709ba015c9342","mod-0d23e37fd3828b9a02bf3b23","mod-62ff6356c1ab42c00fe12c14","mod-8fe5e92214e16e3971d40e48","mod-a7c0beb3ec427a0c7c2c3f7f","mod-c3ac921e455e2c85a68228e4","mod-8a38038e04d5bed97a843cbd","mod-e54e69b88583bdd6e9367055","mod-937d387706a55ae219092722","sym-bd3a95e736c86b11a47a00ad","sym-ef238a74a16593944be3fbd3","sym-3b31c5edccb093881690ab96","sym-b173258f48b4dfdf435372f4"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"mod-10774a0b5dd2473051df0fad","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/serialization/l2ps.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/l2ps.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/l2ps"},"relationships":{"depends_on":["mod-f2ed72921c23c1fc451fd89c"],"depended_by":["mod-cee54b249e5709ba015c9342","mod-8fe5e92214e16e3971d40e48","sym-defd3a4003779e6064cede3d","sym-dda21973087d6e481c8037b4","sym-0951823a296655a3ade22fdb","sym-bc9523b68a00abef0beae972","sym-46bef75b389f3a525f564868","sym-0b8fbb71f8c6a15f84f89c18","sym-bad9b7515020680a9f2efcd4","sym-3e83d82facdcd6b51a624587","sym-8b8eec8e7dac3de610bd552f","sym-9d5f9036c3a61f194222ddc9","sym-1dd5bedf2f00e69d75db3984","sym-bce363e2ed8fe28874f6e8d7","sym-24c86701e405a5e93d569d27","sym-b5f2992ee061fa9af8d170bf","sym-015b2d24689c8f1a98fd94fa"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"mod-b08e6ddaebbb67ea6d37877c","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/serialization/meta.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/meta.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/meta"},"relationships":{"depends_on":["mod-f2ed72921c23c1fc451fd89c"],"depended_by":["mod-0d23e37fd3828b9a02bf3b23","mod-b986d7806992d6c650aa2abc","sym-c59dda13f33be0983f2e2f24","sym-00caa963c5b5c3b283cc6f2a","sym-3d4a17b03c78e440e8521bac","sym-839486393ec3777f098c4138","sym-a0fe73ba5a4c3b5e9571f894","sym-649a1a18feb266499520cbe5","sym-704e246d81608f800aed67ad","sym-02417a6365edd0198fd75264","sym-eeb4fc775c7436b1dcc8a3c3","sym-b4556341831fecb80421ac68","sym-6cd8e16677b8cf80dd1ad744","sym-9f28799d05d13c0d15a531c2","sym-07dcd771e2b390047f2e6a55","sym-b82d83e2bc3aa3aa35dc2364","sym-d91a4ce131bb705db219070a","sym-81eae4b46a28fb84e48f06ad","sym-04be92096edfe026f0b98854","sym-e7c776ab0eba1f5599be7fcb","sym-cdea7aa1b6de2749159f6e96"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"mod-f2ed72921c23c1fc451fd89c","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/serialization/primitives.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/primitives.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/primitives"},"relationships":{"depends_on":[],"depended_by":["mod-0f688ec55978b6cd5ecd4803","mod-7a54f789433ac1b88a2975b0","mod-fda58e5568b7fcba96a8a55c","mod-318b87a4c520cdb8c42c50c8","mod-da04ef1eca622af1ef3664c3","mod-10774a0b5dd2473051df0fad","mod-b08e6ddaebbb67ea6d37877c","mod-60762ca0d2e77317b47957f2","mod-51a57a3bb204ec45b2b3f614","mod-28add79b36597a8f639320cc","sym-97131dcb1a2dffeac2eaa164","sym-ee9fcadb697329d2357af877"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"mod-60762ca0d2e77317b47957f2","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/serialization/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-f2ed72921c23c1fc451fd89c"],"depended_by":["mod-0d23e37fd3828b9a02bf3b23","mod-a7c0beb3ec427a0c7c2c3f7f","sym-c8dc6d5802b95dedf621862d","sym-f06f1dcb2dfd8d7e4dd48292","sym-205b5cb1bf996c3482d66431","sym-3b474985222cfc997a5d0ef7","sym-2745d8771ea38a82ffaeea95","sym-2998e1ceb03e2f98134e96d9","sym-aa28f8a1e849d532b667906d","sym-3934bcc10c9b4f2e9c2d0959","sym-685b7b28fe67a4cc44e434de","sym-7fa32da41eaee8452f8bd9a5","sym-1c22efc6afd12d2cefe35a3d","sym-50385a967901d4552b638fc9","sym-b75fc6c5dace7ee100cd6671","sym-e2d7a7040dc244cb0c9a5e1e","sym-638ca9f97a7186e06d2d59ad","sym-12924b2bd0070b6b03d3764a","sym-f5257582e7cf3f5b4295d85b","sym-83065379d4a1c2d6f3b97b0d","sym-d3398ecb720878008124bdce","sym-a6aea358d016932d28dc7be5","sym-4557b22ff4878be5f4a83de0","sym-5ebf3bd250ee5182d48cabb6","sym-9d09479e95ac975cf01cb1c9","sym-cad0c5620a82457ff3fd1caa","sym-3cf7208af311e74228536b19","sym-c3d439caa60d66c084b242cb","sym-fb874babcae55f743d4ff85e","sym-f0b5e63d32e47917e6917e37","sym-10bf3623222ef5c352c92e57","sym-5a6498b588eb7b9202c2278f","sym-2a16d473fb82483974822634","sym-0429407686d62d7981518349","sym-a389b419600f623779bfb957","sym-0da9ed27a8edc8d60500c437","sym-682349dca1db65816dbb8d40","sym-cd38e297a920fb3851693005"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"mod-51a57a3bb204ec45b2b3f614","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/serialization/transaction.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/transaction.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/transaction"},"relationships":{"depends_on":["mod-f2ed72921c23c1fc451fd89c"],"depended_by":["mod-0d23e37fd3828b9a02bf3b23","mod-a7c0beb3ec427a0c7c2c3f7f","sym-fde5c332b3442bce93cbd4cf","sym-4d2cf98a651cd5dd3389e832","sym-6deebd259361408f0a65993f","sym-bff9f5e26c04692e57a8c205","sym-a35dd0f41512f99872e7738b","sym-bf562992f64a168eef732a5d"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"mod-c7ad59fd02de9e38e55f238d","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/server/InboundConnection.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/InboundConnection.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/InboundConnection"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-28add79b36597a8f639320cc","mod-8040973db91efbca29bd5a3f","mod-fa9dc053ab761e9fa1b23eca","mod-0ec41645e6ad231f2006c934"],"depended_by":["mod-ca241437dd7ea992b976eec8","mod-992e96869304ba6455a502bd","sym-b36ae142dc9718ede23c06bc","sym-651d97a1d371ba00f5ed8ef7","sym-133421c4f44d097284fdc1e1"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","events"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"mod-21706187666573b14b262650","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/server/OmniProtocolServer.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/OmniProtocolServer.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/OmniProtocolServer"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-ca241437dd7ea992b976eec8"],"depended_by":["mod-ba811634639e67c5ad6dad6a","mod-992e96869304ba6455a502bd","sym-5f956142286a9ffd6b89aff8","sym-683faf499d47d1002dcc9c9a"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","events","process.env"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"mod-ca241437dd7ea992b976eec8","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/server/ServerConnectionManager.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/ServerConnectionManager.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/ServerConnectionManager"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-c7ad59fd02de9e38e55f238d"],"depended_by":["mod-21706187666573b14b262650","mod-bee55878a628d2e61003c5cc","mod-992e96869304ba6455a502bd","sym-1c96385260a214f0ef0cd31a","sym-10c1513a04a2c8cb11ddbcf4"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","events"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"mod-bee55878a628d2e61003c5cc","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/server/TLSServer.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/TLSServer.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/TLSServer"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-ca241437dd7ea992b976eec8","mod-eff94816a8124a44948e1724","mod-ee32d301b857ba4c7de679c2"],"depended_by":["mod-ba811634639e67c5ad6dad6a","mod-992e96869304ba6455a502bd","sym-3933e7b0dfc4cd713ec68e39","sym-48085842ddef714b8a2ad15f"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["tls","fs","events"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"mod-992e96869304ba6455a502bd","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/server/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/index.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/index"},"relationships":{"depends_on":["mod-21706187666573b14b262650","mod-ca241437dd7ea992b976eec8","mod-c7ad59fd02de9e38e55f238d","mod-bee55878a628d2e61003c5cc"],"depended_by":["sym-310c5f7a70cf1d3ad6f355af","sym-6122e71601390d54325a01b8","sym-87969fcca7bf7172f21ef7f3","sym-cccbec68264c6804aba0e890"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.957Z","authors":[]}} +{"uuid":"mod-ee32d301b857ba4c7de679c2","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/tls/certificates.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/tls/certificates.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/tls/certificates"},"relationships":{"depends_on":["mod-eff94816a8124a44948e1724","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-bee55878a628d2e61003c5cc","mod-f34f89c5406499b05c630026","mod-f6f853a3f874d365c69ba912","mod-a65de7b43b60edb96e04a5d1","sym-40e6b962c5f9e8eb4faf3e94","sym-38d0a492948f82e34e85ee87","sym-5bdade31fc0d63b3de669cf8","sym-eb812ea9d1ab7667cac73686","sym-bfbcfa89f57581fb2c56e102","sym-bd397dfc2ea87521bf16c24b","sym-1c718042ed0590db80445128","sym-16c7a605ac6fdbdd9e7f493c"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["crypto","fs","path","util"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"mod-f34f89c5406499b05c630026","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/tls/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/tls/index.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/tls/index"},"relationships":{"depends_on":["mod-eff94816a8124a44948e1724","mod-ee32d301b857ba4c7de679c2","mod-f6f853a3f874d365c69ba912"],"depended_by":["sym-3f0dd3972baf18443d586478","sym-023f23876208fe3644656fea","sym-f75161cce5821340e3206b23"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.957Z","authors":[]}} +{"uuid":"mod-f6f853a3f874d365c69ba912","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/tls/initialize.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/tls/initialize.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/tls/initialize"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-ee32d301b857ba4c7de679c2"],"depended_by":["mod-ba811634639e67c5ad6dad6a","mod-f34f89c5406499b05c630026","sym-f93acea713b02d00af75e846","sym-b3b9f472b2f3019657cef489","sym-35e335b14ed79ab5eb0dcaa4"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["path"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"mod-eff94816a8124a44948e1724","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/tls/types.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/tls/types.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/tls/types"},"relationships":{"depends_on":[],"depended_by":["mod-ba811634639e67c5ad6dad6a","mod-bee55878a628d2e61003c5cc","mod-ee32d301b857ba4c7de679c2","mod-f34f89c5406499b05c630026","mod-0dd8c1befae8423fcc7d4fcd","mod-a65de7b43b60edb96e04a5d1","sym-cfc610bda4c5eda04a009f49","sym-026247379bacd97457f16ffc","sym-984b0552359747b6c5c827e5","sym-1c76a6289fd857f7afde3e67"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"mod-0dd8c1befae8423fcc7d4fcd","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/transport/ConnectionFactory.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/ConnectionFactory.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/ConnectionFactory"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-a877268ad21d1ba59035ea1f","mod-a65de7b43b60edb96e04a5d1","mod-eac0ec2113f231fdec114b7c","mod-eff94816a8124a44948e1724"],"depended_by":["sym-f6079a5941a4aa6aabf4e4d1"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"mod-a5b4a44206cc0f3e39469a88","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/transport/ConnectionPool.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/ConnectionPool.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/ConnectionPool"},"relationships":{"depends_on":["mod-a877268ad21d1ba59035ea1f","mod-eac0ec2113f231fdec114b7c","mod-0ec41645e6ad231f2006c934","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-cee54b249e5709ba015c9342","mod-cf03366f5eef469f1f9abae5","sym-132f69711099ffece36b4018"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"mod-28add79b36597a8f639320cc","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/transport/MessageFramer.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/MessageFramer.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/MessageFramer"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-fa9dc053ab761e9fa1b23eca","mod-f2ed72921c23c1fc451fd89c","mod-0f688ec55978b6cd5ecd4803","mod-28ff727efa5c0915d4fbfbe9","mod-0ec41645e6ad231f2006c934"],"depended_by":["mod-c7ad59fd02de9e38e55f238d","mod-a877268ad21d1ba59035ea1f","sym-3defead0134f1d92758a8884"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["buffer","crc"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"mod-a877268ad21d1ba59035ea1f","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/transport/PeerConnection.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/PeerConnection.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/PeerConnection"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-28add79b36597a8f639320cc","mod-fa9dc053ab761e9fa1b23eca","mod-28ff727efa5c0915d4fbfbe9","mod-eac0ec2113f231fdec114b7c","mod-0ec41645e6ad231f2006c934","mod-59e682c774f84720b4dbee26"],"depended_by":["mod-0dd8c1befae8423fcc7d4fcd","mod-a5b4a44206cc0f3e39469a88","mod-a65de7b43b60edb96e04a5d1","sym-8f81b1eefb86ab1c33cc1d76"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","node-forge","@noble/hashes/sha3.js"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"mod-a65de7b43b60edb96e04a5d1","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/transport/TLSConnection.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/TLSConnection.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/TLSConnection"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-a877268ad21d1ba59035ea1f","mod-eac0ec2113f231fdec114b7c","mod-eff94816a8124a44948e1724","mod-ee32d301b857ba4c7de679c2"],"depended_by":["mod-0dd8c1befae8423fcc7d4fcd","sym-904f441fa1a49268b1cef08f"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["tls","fs"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"mod-eac0ec2113f231fdec114b7c","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/transport/types.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/types.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/types"},"relationships":{"depends_on":["mod-0ec41645e6ad231f2006c934"],"depended_by":["mod-0dd8c1befae8423fcc7d4fcd","mod-a5b4a44206cc0f3e39469a88","mod-a877268ad21d1ba59035ea1f","mod-a65de7b43b60edb96e04a5d1","sym-fc35b6613e7a65cdd4ea5e06","sym-e057876fb864c3507b96e2ec","sym-5bd380f96888898be81a62d2","sym-28e0e30ee3f838c528a8ca6f","sym-8f350d3b1915ecc6427767b3","sym-1e03020c93407a3c93000806","sym-d004ecd8bd5430d39a4084f0","sym-0a454006c43bd2d6cb2b165f","sym-3fb22f8b02267a42caee9850","sym-4431cb1bbb71c0fa9d65d5c0","sym-a49b7e959d6c7ec989554af4"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"mod-f486beaedaf6d01b3f5574b4","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/types/config.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/config.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/config"},"relationships":{"depends_on":[],"depended_by":["mod-0d23e37fd3828b9a02bf3b23","mod-cf03366f5eef469f1f9abae5","mod-59e682c774f84720b4dbee26","sym-12728d553b87eda8baeb8a42","sym-daf739626627c36496ea6014","sym-78928c613b02b7f6c1a80fab","sym-819e1e0416b0f28eaf5ed236","sym-5bb0e442514b6deb156754f7","sym-86050540b5cdafabf655a318"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"mod-0ec41645e6ad231f2006c934","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/types/errors.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/errors.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/errors"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-0d23e37fd3828b9a02bf3b23","mod-cf03366f5eef469f1f9abae5","mod-8040973db91efbca29bd5a3f","mod-c7ad59fd02de9e38e55f238d","mod-a5b4a44206cc0f3e39469a88","mod-28add79b36597a8f639320cc","mod-a877268ad21d1ba59035ea1f","mod-eac0ec2113f231fdec114b7c","sym-1a701004046591cc89d802c1","sym-18e29bf3ececed5a786a3220","sym-bc80379ae4fb29cd835e4f82","sym-ca69d3acc363aa763fbebab6","sym-2e45f8d9367c70fd9ac27d12","sym-f234ca94e0f28862daa8332d","sym-ce29808e8a6ade436f793870","sym-9e6b52349458fafbb3157661"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["process.env"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"mod-fa9dc053ab761e9fa1b23eca","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/omniprotocol/types/message.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/message.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/message"},"relationships":{"depends_on":["mod-28ff727efa5c0915d4fbfbe9"],"depended_by":["mod-e421d8434312ee89ef377735","mod-0d23e37fd3828b9a02bf3b23","mod-8040973db91efbca29bd5a3f","mod-9b81da9944f3e64f4bb36898","mod-81df5ad5e23b1f5a430705f8","mod-62ff6356c1ab42c00fe12c14","mod-8fe5e92214e16e3971d40e48","mod-b986d7806992d6c650aa2abc","mod-a7c0beb3ec427a0c7c2c3f7f","mod-c3ac921e455e2c85a68228e4","mod-2c0f4f3afaaec106ad82bf77","mod-c7ad59fd02de9e38e55f238d","mod-28add79b36597a8f639320cc","mod-a877268ad21d1ba59035ea1f","mod-6df30845bc1a45d2d4602890","sym-4ff325a0d88ae90ec4620e7f","sym-4c35acfa5aa3bc6964a871bf","sym-f317b708fa9ca031a9e7d8b0","sym-c02dce70ca17720992e2965a","sym-acecec26be342c6988a8ba1b","sym-06618dbe51dad33d81910717","sym-f8769b7cfd3da0a0ab0300be"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["buffer"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"mod-21be8fb976449bbe3589ce47","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/peer/Peer.ts`."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/Peer.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/peer/Peer"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-59e682c774f84720b4dbee26","mod-3a3b7b050c56c146875c18fb","mod-3f71e0e4e5c692c7690b3c86","mod-074e7c12d54384c86eabf721"],"depended_by":["mod-9e6a68c87b4e5c31d84a70f2","mod-128ee1689e701accb1643b15","mod-5dd7573d658ce3d7ea74353a","mod-eef3b769fd906f6d2e387d17","mod-d3bd2f24c047572fef2bb57d","mod-074e7c12d54384c86eabf721","mod-f6d94e4d95aaab72efaa757c","mod-94b639d8e332eed46da2f8af","mod-570eac54a9d81c36302eb6d0","mod-a216d9e19ade66b2cdd92076","mod-33ee18e613fc6fedad6673e0","mod-c85a25b09fa10c16a8188ca0","mod-dcce6518be2af59c2b776acc","sym-6a88381f69d2ff19513514f9","sym-41423ec32029e11bd983cf86","sym-0497c0336e7724275dd24b2a"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","axios","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/utils"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"mod-074e7c12d54384c86eabf721","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/peer/PeerManager.ts`."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/PeerManager.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/peer/PeerManager"},"relationships":{"depends_on":["mod-21be8fb976449bbe3589ce47","mod-54aa1c38c91b1598c048b7e1","mod-59e682c774f84720b4dbee26","mod-5dd7573d658ce3d7ea74353a"],"depended_by":["mod-9e6a68c87b4e5c31d84a70f2","mod-43e420b038a56638079168bc","mod-455d4fbaf89d273aa029864d","mod-303258444053b0a43538b62b","mod-21be8fb976449bbe3589ce47","mod-f6d94e4d95aaab72efaa757c","mod-c16d69bfcfaea5546b2859a7","mod-33ee18e613fc6fedad6673e0","mod-c85a25b09fa10c16a8188ca0","mod-dcce6518be2af59c2b776acc","sym-eeadc99e419ca0c544740317"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"mod-f6d94e4d95aaab72efaa757c","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/peer/index.ts`."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/index.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/peer/index"},"relationships":{"depends_on":["mod-21be8fb976449bbe3589ce47","mod-074e7c12d54384c86eabf721"],"depended_by":["sym-6e00d04229c1802756b1975f","sym-a6ab1495ce4987876fc9f25f"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"mod-94b639d8e332eed46da2f8af","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/peer/routines/broadcast.ts`."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/routines/broadcast.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/peer/routines/broadcast"},"relationships":{"depends_on":["mod-59e682c774f84720b4dbee26","mod-21be8fb976449bbe3589ce47"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.610Z","authors":[]}} +{"uuid":"mod-c16d69bfcfaea5546b2859a7","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/peer/routines/checkOfflinePeers.ts`."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/routines/checkOfflinePeers.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/peer/routines/checkOfflinePeers"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-074e7c12d54384c86eabf721","mod-59e682c774f84720b4dbee26"],"depended_by":["mod-7fc4f2fefdc6a8526f0d89e7","sym-183e357d6e4b9fc61cb96c84"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"mod-570eac54a9d81c36302eb6d0","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/peer/routines/getPeerConnectionString.ts`."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/routines/getPeerConnectionString.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/peer/routines/getPeerConnectionString"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-a5c28a9abc4da2bd27d3cbb4","mod-21be8fb976449bbe3589ce47","mod-3f71e0e4e5c692c7690b3c86"],"depended_by":["sym-1b1b238c239648c3a26135b1"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["socket.io"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.610Z","authors":[]}} +{"uuid":"mod-a216d9e19ade66b2cdd92076","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/peer/routines/getPeerIdentity.ts`."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/routines/getPeerIdentity.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/peer/routines/getPeerIdentity"},"relationships":{"depends_on":["mod-3f71e0e4e5c692c7690b3c86","mod-21be8fb976449bbe3589ce47","mod-59e682c774f84720b4dbee26","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-c85a25b09fa10c16a8188ca0","sym-0391b851d3e5a4718b2228d0","sym-326a78cdb13b0efab268273b"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption","node:crypto"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.610Z","authors":[]}} +{"uuid":"mod-33ee18e613fc6fedad6673e0","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/peer/routines/isPeerInList.ts`."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/routines/isPeerInList.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/peer/routines/isPeerInList"},"relationships":{"depends_on":["mod-21be8fb976449bbe3589ce47","mod-074e7c12d54384c86eabf721"],"depended_by":["sym-a206dfbda18fedfe73a5ad0e"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"mod-c85a25b09fa10c16a8188ca0","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/peer/routines/peerBootstrap.ts`."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/routines/peerBootstrap.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/peer/routines/peerBootstrap"},"relationships":{"depends_on":["mod-21be8fb976449bbe3589ce47","mod-54aa1c38c91b1598c048b7e1","mod-074e7c12d54384c86eabf721","mod-84552d58b6743daab10f83b3","mod-a216d9e19ade66b2cdd92076","mod-59e682c774f84720b4dbee26"],"depended_by":["mod-327512c4dc701f9a29037e12","sym-10146aed3ff6460f03348bd6"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","axios","@kynesyslabs/demosdk/utils","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.610Z","authors":[]}} +{"uuid":"mod-dcce6518be2af59c2b776acc","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/peer/routines/peerGossip.ts`."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/routines/peerGossip.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/peer/routines/peerGossip"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-21be8fb976449bbe3589ce47","mod-074e7c12d54384c86eabf721","mod-59e682c774f84720b4dbee26","mod-84552d58b6743daab10f83b3"],"depended_by":["mod-7fc4f2fefdc6a8526f0d89e7","sym-ee248ef99b44bf2044c37a34"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.610Z","authors":[]}} +{"uuid":"mod-90e071af56fbf11e5911520b","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/tlsnotary/index.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/tlsnotary/index.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/tlsnotary/index"},"relationships":{"depends_on":["mod-52720c35cbea3e8d81ae7a70"],"depended_by":["sym-c2d8b5b28fe3cc41329f99cb","sym-dc58d63e979e42e358b16ea6","sym-75f6a2f7f2ad31c317cf79f8","sym-1bf49566faed1da0dcba3009","sym-84993bf3e876f664101fcc17","sym-d562c23ff661fbe0ef42089b","sym-d23312505c23fae4dc06be00","sym-9901aa04325b7f6c0903f9f4","sym-78fc7f8b4ac08f8070f840bb","sym-17f82be72583b24d6d13609c","sym-eca13e9d4bd164b366b683d1","sym-ef0f5bfd816bc229c72e0c35","sym-1ffe30e3f9e9ec69de0b043f","sym-8a2eac9723e69b529c4e0514"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.420Z","authors":[]}} +{"uuid":"mod-52720c35cbea3e8d81ae7a70","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/tlsnotary/verifier.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/tlsnotary/verifier.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/tlsnotary/verifier"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1","mod-84552d58b6743daab10f83b3"],"depended_by":["mod-90e071af56fbf11e5911520b","sym-c6bb3135c8146d1451aae8cd","sym-0ac6a67e5c7935ee3500dadd","sym-096ad0f73e0e17beacb24c4a","sym-2fa24d97f88754f23868ed8a","sym-dda27ab76638052e234613e4","sym-7070f715178072511180d1ae","sym-28ad78be84afd8498d0ee4b4","sym-470f39829bffe7893f2ea0e2","sym-ed9fcd140ea0db08b16f717b","sym-dc57077c3f71cf5583df43ba","sym-d75c9f3079017aca76e583c6","sym-ce938bb3c92c54f842d83329","sym-e2d1e70a3d514491ae4cb58d","sym-a9987febfc88a0ffd7f1c055"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.421Z","authors":[]}} +{"uuid":"mod-f67afbbcc2c394e0b6549ff8","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/utils/calibrateTime.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/utils/calibrateTime.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/utils/calibrateTime"},"relationships":{"depends_on":["mod-59e682c774f84720b4dbee26","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-327512c4dc701f9a29037e12","mod-a365b7714dec16f0bf79621e","mod-0fabbf7facc4e7b4b62c59ae","mod-9b1b89cd5b264f022df908d4","sym-27e8f46173445442055bad50","sym-51fdc77527108ef2abcc0f25"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["ntp-client"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.610Z","authors":[]}} +{"uuid":"mod-1275104cbadf8ae764bfc2cd","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/utils/demostdlib/NodeStorage.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/utils/demostdlib/NodeStorage.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/utils/demostdlib/NodeStorage"},"relationships":{"depends_on":[],"depended_by":["mod-8d759e4c7b88f1b808059f1c","sym-4f4a52a70377dfe5c3548f1a"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"mod-4dda3c12aae4a0b02bbb9bc6","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/utils/demostdlib/deriveMempoolOperation.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/utils/demostdlib/deriveMempoolOperation.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/utils/demostdlib/deriveMempoolOperation"},"relationships":{"depends_on":["mod-84552d58b6743daab10f83b3","mod-59e682c774f84720b4dbee26","mod-54aa1c38c91b1598c048b7e1","mod-1de8a1fb6a48c6a931549f30"],"depended_by":["sym-77e5e7993b25576d2999ea8c","sym-3d99231a3655eb0dd8af0e2b","sym-a5b4619fea543f605234aa1b","sym-b726a947efed2cf0a17e7409","sym-4069525e6763cbd7833a89b5","sym-de1d440563386a4ef7ff5f5b"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"mod-01f50a9581dc3e727fc130d5","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/utils/demostdlib/encodecode.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/utils/demostdlib/encodecode.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/utils/demostdlib/encodecode"},"relationships":{"depends_on":[],"depended_by":["sym-9fa63f30b350e32bba75f730"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"mod-7450e07dbc1823bd1d8e3fe2","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/utils/demostdlib/groundControl.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/utils/demostdlib/groundControl.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/utils/demostdlib/groundControl"},"relationships":{"depends_on":["mod-ff98cde0370b2a3126edc022","mod-59e682c774f84720b4dbee26","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["sym-704450fa33a12221e2776326"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","node:http","node:https"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.610Z","authors":[]}} +{"uuid":"mod-8d759e4c7b88f1b808059f1c","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/utils/demostdlib/index.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/utils/demostdlib/index.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/utils/demostdlib/index"},"relationships":{"depends_on":["mod-9acd412d29faec50fbeccd6a","mod-3a5d1ce49d5562fbff9b9306","mod-1275104cbadf8ae764bfc2cd"],"depended_by":["sym-51ed75590fc88559bcdd99a5","sym-7f9193fb325d05e4b86c1af4","sym-85a1a933e82bfe8a1a6f86cf"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"mod-3a5d1ce49d5562fbff9b9306","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/utils/demostdlib/payloadSize.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/utils/demostdlib/payloadSize.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/utils/demostdlib/payloadSize"},"relationships":{"depends_on":["mod-12d77c813504670328c9b4f1","mod-1de8a1fb6a48c6a931549f30","mod-a5c28a9abc4da2bd27d3cbb4"],"depended_by":["mod-8d759e4c7b88f1b808059f1c","sym-009fe89cf915be1693de1c3c"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["object-sizeof"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"mod-9acd412d29faec50fbeccd6a","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/utils/demostdlib/peerOperations.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/utils/demostdlib/peerOperations.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/utils/demostdlib/peerOperations"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-8d759e4c7b88f1b808059f1c","sym-eb488aa202c169568fd9a0f5"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["socket.io-client"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"mod-495a8cfd97cb61dc39d6d45a","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/utils/index.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/utils/index.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/utils/index"},"relationships":{"depends_on":[],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"mod-e89fa4423bde3e1df39acf0e","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/utils/keyMaker.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/utils/keyMaker.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/utils/keyMaker"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.610Z","authors":[]}} +{"uuid":"mod-106e970ac525b6ac06d425f6","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/utils/showPubkey.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/utils/showPubkey.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/utils/showPubkey"},"relationships":{"depends_on":[],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","bip39","@scure/bip39/wordlists/english.js","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/types","dotenv","process.env"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.610Z","authors":[]}} +{"uuid":"mod-80ff82c43058ee3abb67247d","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/libs/utils/web2RequestUtils.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/utils/web2RequestUtils.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/libs/utils/web2RequestUtils"},"relationships":{"depends_on":["mod-ff98cde0370b2a3126edc022"],"depended_by":["mod-455d4fbaf89d273aa029864d","mod-8178eae36aec57f1b202e180","sym-e1fcd597c2ed4ecc8eebea8b"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"mod-3672cbce400c58600f903b87","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/migrations/AddReferralSupport.ts`."],"intent_vectors":["database-migrations"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/migrations/AddReferralSupport.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/migrations/AddReferralSupport"},"relationships":{"depends_on":[],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.610Z","authors":[]}} +{"uuid":"mod-16a76d1c87dfcbecec53d1e0","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/model/datasource.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/datasource.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/model/datasource"},"relationships":{"depends_on":["mod-edb169ce79c580ad64535bf1"],"depended_by":["mod-900742fc8a97706a00e06129","mod-09e939d9272236688a28974a","mod-08315e6901cb53376d13cc70","mod-d0e009681585b57776f6a187","mod-91c215ca923f83144b68d625","mod-056bc15608f58b9ec7451fc4","mod-a2f8e9a3ce2f5a58e00df674","mod-1d4743119cc890fadab85fb7","mod-37b5ef5203b8d54dbbc526c9","mod-652e9394671c2c32cc57b508","mod-43a22fa504defe4ae499272f","mod-c31ff6a7377bd2e29ce07160","mod-e395bfa94e646748f1e3298e","mod-9389bad564e097d75994d5f8","mod-c8450797917dfb54fe43ca86","mod-8aef488fb2fc78414791967a","mod-df9148ab5ce0a5a5115bead1","mod-5758817d6b816e39b8e7e4b3","mod-c096e9d35a0fa633ff44cda0","mod-3be22133d78983422a1da0d9","mod-8178eae36aec57f1b202e180","sym-f8f1b8ece68bb301d37853b4","sym-7e6731647346994ea09b3100"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["typeorm","process.env"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"mod-c20c965c5562cff684a7448f","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/model/entities/Blocks.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/Blocks.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/model/entities/Blocks"},"relationships":{"depends_on":[],"depended_by":["mod-d0e009681585b57776f6a187","mod-7f4649fc39674866ce6591cc","mod-91454010a0aa78f3ef28bd69","mod-587a0dac663054ccdc90b2bc","sym-273a3bb08cf959b425025d19"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"mod-81f4b7f4c2872e1255eeab2b","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/model/entities/Consensus.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/Consensus.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/model/entities/Consensus"},"relationships":{"depends_on":[],"depended_by":["sym-31925771acdffdf321dbfcd2"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"mod-9e7f56ec932ce908db2b6d6e","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/model/entities/GCR/GCRTracker.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/GCR/GCRTracker.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/model/entities/GCR/GCRTracker"},"relationships":{"depends_on":["mod-24557f0b00a0d628de80e5eb"],"depended_by":["mod-a2f8e9a3ce2f5a58e00df674","mod-652e9394671c2c32cc57b508","mod-43a22fa504defe4ae499272f","mod-e395bfa94e646748f1e3298e","sym-11fa9facc95211cb9965cbe9"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"mod-786d72f288c1067b50b58d19","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/model/entities/GCR/GlobalChangeRegistry.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/GCR/GlobalChangeRegistry.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/model/entities/GCR/GlobalChangeRegistry"},"relationships":{"depends_on":["mod-24557f0b00a0d628de80e5eb"],"depended_by":["mod-d0e009681585b57776f6a187","mod-91c215ca923f83144b68d625","mod-a2f8e9a3ce2f5a58e00df674","mod-652e9394671c2c32cc57b508","mod-43a22fa504defe4ae499272f","mod-e395bfa94e646748f1e3298e","sym-3e265dc44fcae446b81692d2","sym-90952e192029ad3314e72b78","sym-bc26298182cffd2f040a7fae"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"mod-dc4c1cf1104faf408e942485","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/model/entities/GCRv2/GCRHashes.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/GCRv2/GCRHashes.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/model/entities/GCRv2/GCRHashes"},"relationships":{"depends_on":[],"depended_by":["mod-d0e009681585b57776f6a187","mod-a2f8e9a3ce2f5a58e00df674","mod-652e9394671c2c32cc57b508","mod-43a22fa504defe4ae499272f","mod-e395bfa94e646748f1e3298e","sym-d7707cb16f292d46163b119c"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"mod-db1374491b6a82aa10a4e2f5","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/model/entities/GCRv2/GCRSubnetsTxs.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/GCRv2/GCRSubnetsTxs.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/model/entities/GCRv2/GCRSubnetsTxs"},"relationships":{"depends_on":[],"depended_by":["mod-a2f8e9a3ce2f5a58e00df674","mod-43a22fa504defe4ae499272f","mod-e395bfa94e646748f1e3298e","sym-f931d21daeae8267bd2a3672"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"mod-e3c2dc56fd38d656d5235000","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/model/entities/GCRv2/GCR_Main.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/GCRv2/GCR_Main.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/model/entities/GCRv2/GCR_Main"},"relationships":{"depends_on":["mod-24557f0b00a0d628de80e5eb"],"depended_by":["mod-09e939d9272236688a28974a","mod-08315e6901cb53376d13cc70","mod-91c215ca923f83144b68d625","mod-8786c56780e501016b92f408","mod-056bc15608f58b9ec7451fc4","mod-ce3b72f0515cac2e2fe5ca15","mod-1d4743119cc890fadab85fb7","mod-37b5ef5203b8d54dbbc526c9","mod-c31ff6a7377bd2e29ce07160","mod-e395bfa94e646748f1e3298e","mod-df9148ab5ce0a5a5115bead1","mod-92957ee0de7980fc9c719d03","mod-3be22133d78983422a1da0d9","mod-3f71e0e4e5c692c7690b3c86","sym-f9e58c36e26f3179ae66e51b"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.421Z","authors":[]}} +{"uuid":"mod-f070f31fd907efb13c1863dc","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/model/entities/GCRv2/GCR_TLSNotary.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/GCRv2/GCR_TLSNotary.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/model/entities/GCRv2/GCR_TLSNotary"},"relationships":{"depends_on":[],"depended_by":["mod-d0734ff72a9c8934deea7846","mod-43a22fa504defe4ae499272f","mod-e395bfa94e646748f1e3298e","sym-9a4fcacf7bad77db5516aebe"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"mod-4700c8f714ccf0e905a08548","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/model/entities/GCRv2/IdentityCommitment.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/GCRv2/IdentityCommitment.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/model/entities/GCRv2/IdentityCommitment"},"relationships":{"depends_on":[],"depended_by":["mod-ad645bf9d23cc4e8c30848fc","mod-056bc15608f58b9ec7451fc4","sym-b669e2e1ce53f44203a8e3bc"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"mod-7b1b348ef9728f14361d546b","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/model/entities/GCRv2/MerkleTreeState.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/GCRv2/MerkleTreeState.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/model/entities/GCRv2/MerkleTreeState"},"relationships":{"depends_on":[],"depended_by":["mod-ad645bf9d23cc4e8c30848fc","sym-851653e97eff490ca57f6fae"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"mod-08bf03fa93f7e9b593a27d85","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/model/entities/GCRv2/UsedNullifier.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/GCRv2/UsedNullifier.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/model/entities/GCRv2/UsedNullifier"},"relationships":{"depends_on":[],"depended_by":["mod-8178eae36aec57f1b202e180","sym-87354513813df45f7bae9436"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"mod-0ccdf7c27874394c1e667fec","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/model/entities/L2PSHashes.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/L2PSHashes.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/model/entities/L2PSHashes"},"relationships":{"depends_on":[],"depended_by":["mod-9389bad564e097d75994d5f8","sym-f55ae29e0c44c841e86925cd"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"mod-7421cc24ed6c5406e86d1752","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/model/entities/L2PSMempool.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/L2PSMempool.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/model/entities/L2PSMempool"},"relationships":{"depends_on":[],"depended_by":["mod-c8450797917dfb54fe43ca86","mod-9b1b89cd5b264f022df908d4","sym-b687ce25ee01734bed3a9734"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"mod-fdc4ea4eee14d55af206496c","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/model/entities/L2PSProofs.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/L2PSProofs.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/model/entities/L2PSProofs"},"relationships":{"depends_on":[],"depended_by":["mod-0f4a4cd8bc5da602adf2a2fa","mod-c096e9d35a0fa633ff44cda0","sym-b38c644fc6d294d21e0b92fe","sym-52fb32ee859d9bfa08437a4a"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"mod-193629267f30c2895ef15b17","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/model/entities/L2PSTransactions.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/L2PSTransactions.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/model/entities/L2PSTransactions"},"relationships":{"depends_on":[],"depended_by":["mod-3be22133d78983422a1da0d9","sym-37183cf62db7f8f1984bc448"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"mod-fbadd87a5bc2c6b89edc84bf","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/model/entities/Mempool.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/Mempool.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/model/entities/Mempool"},"relationships":{"depends_on":[],"depended_by":["mod-8aef488fb2fc78414791967a","sym-817dd1dc2a1ba735addc3c06"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"mod-edb169ce79c580ad64535bf1","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/model/entities/OfflineMessages.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/OfflineMessages.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/model/entities/OfflineMessages"},"relationships":{"depends_on":[],"depended_by":["mod-900742fc8a97706a00e06129","mod-16a76d1c87dfcbecec53d1e0","sym-ba02a04f4880a609013cceb4"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"mod-97abb7050d49b46b468439ff","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/model/entities/PgpKeyServer.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/PgpKeyServer.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/model/entities/PgpKeyServer"},"relationships":{"depends_on":[],"depended_by":["sym-97f5211aee4fd55dffefc0f4"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"mod-205c88f6af728bd7b4ebc280","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/model/entities/Transactions.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/Transactions.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/model/entities/Transactions"},"relationships":{"depends_on":[],"depended_by":["mod-d0e009681585b57776f6a187","mod-5758817d6b816e39b8e7e4b3","sym-b52cab11144006e9acefd1dc"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"mod-81f929d30b493e5a0e7c38e7","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/model/entities/Validators.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/Validators.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/model/entities/Validators"},"relationships":{"depends_on":[],"depended_by":["mod-91c215ca923f83144b68d625","sym-35c46231b7bc7e15f6fd6d3f"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"mod-24557f0b00a0d628de80e5eb","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/model/entities/types/IdentityTypes.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/types/IdentityTypes.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/model/entities/types/IdentityTypes"},"relationships":{"depends_on":[],"depended_by":["mod-09e939d9272236688a28974a","mod-056bc15608f58b9ec7451fc4","mod-525c86f0484f1a8328f90e21","mod-be7b10b7e34156b0bae273f7","mod-df9148ab5ce0a5a5115bead1","mod-1de8a1fb6a48c6a931549f30","mod-92957ee0de7980fc9c719d03","mod-bc30cadc96b2e14f87980a9c","mod-9e7f56ec932ce908db2b6d6e","mod-786d72f288c1067b50b58d19","mod-e3c2dc56fd38d656d5235000","sym-7e3e2f730f05083adf736213","sym-59bf9a4e447c40f8b0baca83","sym-8ff3fa0da48c6a51968f7cdd","sym-f46b4d4547c9976189a5969a","sym-1ee5c28fcddc2de7a3b145cd","sym-6b1a819551d2749fcdcaebb8","sym-09674205f4dd1e66aa3a00c9"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"mod-f02071779c134bf1f3cd986f","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/tests/test_bun_wrapper.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/tests/test_bun_wrapper.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/tests/test_bun_wrapper"},"relationships":{"depends_on":["mod-508ea55e640ac463afeb7e81"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","path"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"mod-7934829c1407caf63ff17dbb","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/tests/test_identity_verification.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/tests/test_identity_verification.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/tests/test_identity_verification"},"relationships":{"depends_on":["mod-508ea55e640ac463afeb7e81"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","path"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"mod-8205b641d5e954ae76b97abb","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/tests/test_production_verification.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/tests/test_production_verification.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/tests/test_production_verification"},"relationships":{"depends_on":["mod-292e8f8c5a666fd4318d4859"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"mod-bd690c0739e6d69fef5168df","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/tests/test_snarkjs_bun.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/tests/test_snarkjs_bun.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/tests/test_snarkjs_bun"},"relationships":{"depends_on":[],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["snarkjs","fs","path","url"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"mod-eb0874681a80fb675aa35fa9","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/tests/test_zk_no_node.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/tests/test_zk_no_node.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/tests/test_zk_no_node"},"relationships":{"depends_on":[],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["snarkjs","fs","path"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"mod-3656e78dc552244814365733","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/tests/test_zk_simple.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/tests/test_zk_simple.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/tests/test_zk_simple"},"relationships":{"depends_on":[],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","path"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"mod-5e2ab8dff60a96c7ee548337","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/tests/transactionTester.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/tests/transactionTester.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/tests/transactionTester"},"relationships":{"depends_on":["mod-1de8a1fb6a48c6a931549f30","mod-b5a2bbfcc551f4a8277420d0","mod-d46e3dca63550b5d88963cef"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"mod-d46e3dca63550b5d88963cef","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/tests/types/testingEnvironment.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/tests/types/testingEnvironment.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/tests/types/testingEnvironment"},"relationships":{"depends_on":["mod-12d77c813504670328c9b4f1","mod-d0e009681585b57776f6a187","mod-91c215ca923f83144b68d625","mod-1de8a1fb6a48c6a931549f30","mod-3a3b7b050c56c146875c18fb","mod-84552d58b6743daab10f83b3","mod-59e682c774f84720b4dbee26"],"depended_by":["mod-5e2ab8dff60a96c7ee548337","sym-0ac70d873414c331ce910f6d"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["socket.io","socket.io-client","process.env"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"mod-e2398716441b49081c77cc4b","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/types/nomis-augmentations.d.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/types/nomis-augmentations.d.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/types/nomis-augmentations.d"},"relationships":{"depends_on":[],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/build/types/blockchain/GCREdit"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"mod-aedcf7cff384ad96bb4dd624","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/utilities/Diagnostic.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/Diagnostic.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/utilities/Diagnostic"},"relationships":{"depends_on":[],"depended_by":["mod-5616093476c766ebb88973fc","mod-7fc4f2fefdc6a8526f0d89e7","sym-7e8dfc0604be1a84071b6545","sym-6914083e3bf3fbedbec2224e","sym-4dcfdaff3d358f5913dd0fe3"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["cli-progress","dotenv","fs","https","node-disk-info","os","process.env"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"mod-ed207ef8c636062a5e6b4824","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/utilities/backupAndRestore.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/backupAndRestore.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/utilities/backupAndRestore"},"relationships":{"depends_on":[],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["pg","fs","path","dotenv","process.env"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"mod-aec11f5957298897d75000d1","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/utilities/checkSignedPayloads.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/checkSignedPayloads.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/utilities/checkSignedPayloads"},"relationships":{"depends_on":["mod-ff98cde0370b2a3126edc022","mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-374a312e43c2c9f2d7013463","sym-4b87c6bde0ba6922be1ab091"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"mod-9efb2c33ee124a3e24fea523","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/utilities/cli_libraries/cryptography.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/cli_libraries/cryptography.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/utilities/cli_libraries/cryptography"},"relationships":{"depends_on":["mod-8b99d278a4bd1dda5f119d4b"],"depended_by":["mod-7411cdffb6063d8aa54dc02d","sym-590ef991f7c0feb60db38948"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"mod-8b99d278a4bd1dda5f119d4b","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/utilities/cli_libraries/wallet.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/cli_libraries/wallet.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/utilities/cli_libraries/wallet"},"relationships":{"depends_on":[],"depended_by":["mod-9efb2c33ee124a3e24fea523","mod-7411cdffb6063d8aa54dc02d","sym-a5e5e709921d64076470bc4a","sym-96217b85b15e0cb5db4e930b"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"mod-7411cdffb6063d8aa54dc02d","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/utilities/commandLine.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/commandLine.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/utilities/commandLine"},"relationships":{"depends_on":["mod-9efb2c33ee124a3e24fea523","mod-8b99d278a4bd1dda5f119d4b"],"depended_by":["sym-927f4a859c94422559dd19ec"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"mod-7a1941c482905a159b7f2f46","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/utilities/errorMessage.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/errorMessage.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/utilities/errorMessage"},"relationships":{"depends_on":[],"depended_by":["mod-2546b562762a3da08a65696c","mod-840f81eb11629800896bc68c","mod-a11e8e55a0387f976794ebc2","mod-9b1b89cd5b264f022df908d4","mod-0f4a4cd8bc5da602adf2a2fa","mod-cee54b249e5709ba015c9342","mod-c096e9d35a0fa633ff44cda0","mod-3be22133d78983422a1da0d9","mod-ec09ae3ca7a100b5fa55556d","mod-f9348034f6db4a0cbf002ce1","sym-f299dd21cf070dca1c4a0501"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node:util"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"mod-fed8e983d33351c85dd25540","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/utilities/evmInfo.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/evmInfo.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/utilities/evmInfo"},"relationships":{"depends_on":[],"depended_by":["sym-a4795a434717a476bb688e27","sym-348c100bdcd3654ff72438e9"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","path"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"mod-719cd7393843802b8bff160e","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/utilities/generateUniqueId.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/generateUniqueId.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/utilities/generateUniqueId"},"relationships":{"depends_on":["mod-84552d58b6743daab10f83b3"],"depended_by":["mod-3dc939e68aaf71174e695f9e","sym-41ce297760c0b065fc403d2c"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"mod-199bee3bfdf8ff3ae8ddfb47","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/utilities/getPublicIP.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/getPublicIP.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/utilities/getPublicIP"},"relationships":{"depends_on":[],"depended_by":["sym-744d1d1b0780d485e5d250ad"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["axios"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"mod-804948765f192d7a33e792cb","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/utilities/index.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/index.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/utilities/index"},"relationships":{"depends_on":[],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"mod-54aa1c38c91b1598c048b7e1","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/utilities/logger.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/logger.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/utilities/logger"},"relationships":{"depends_on":["mod-481b5289c108ab245dd3ad27"],"depended_by":["mod-900742fc8a97706a00e06129","mod-7b49c1b727b9aee8612f7ada","mod-0fc27af2e03da13014e76beb","mod-0bdba6781d714c651de05352","mod-966e17be37a66604fed3722e","mod-fedfa2f8f2d69ea52cabd065","mod-09e939d9272236688a28974a","mod-cb6612b0371b0a6c53802c79","mod-462ce83c6905bcaa92b4f893","mod-b826ecdcb08532bf626dec5e","mod-26a73e0f3287d341c809bbb6","mod-e97de8ffbc5205710572c9db","mod-73734de2bfb341ec8ba4023b","mod-3f28b6264133cacdcde0f639","mod-6ecc959af33bffdcf9b125ac","mod-ff7a988dbc672250517763db","mod-a722cbd7e6a0808c95591ad6","mod-6b0f117020c528624559fc33","mod-3940e5b1c6e49d5c3f17fd5e","mod-f57990696544256723fdd185","mod-ace15f11a231cf8b7077f58e","mod-116da4b57fafe340c5775211","mod-374a312e43c2c9f2d7013463","mod-293d53ea089a85fc8fe53c13","mod-6468589b59a97501083efac5","mod-d890484b676af2e8fe7bd2b6","mod-94f67b12c658d567d29471e0","mod-7913910232f2f61a1d86ca8d","mod-de2778e7582cc783d0c02163","mod-6efee936b845d34104bac46c","mod-7866a2e46802b656e108eb43","mod-ea8114d37c6855f0420f3753","mod-ad645bf9d23cc4e8c30848fc","mod-327512c4dc701f9a29037e12","mod-b14fd27b1e26707d72c1730a","mod-f30737840d94511712dda889","mod-d0e009681585b57776f6a187","mod-91c215ca923f83144b68d625","mod-8786c56780e501016b92f408","mod-056bc15608f58b9ec7451fc4","mod-ce3b72f0515cac2e2fe5ca15","mod-d0734ff72a9c8934deea7846","mod-8d16d859c035fc1372e07e06","mod-525c86f0484f1a8328f90e21","mod-60ac739c2c89b2f73e69a278","mod-be7b10b7e34156b0bae273f7","mod-b989c7daa266d9b652abd067","mod-e395bfa94e646748f1e3298e","mod-9389bad564e097d75994d5f8","mod-c8450797917dfb54fe43ca86","mod-8aef488fb2fc78414791967a","mod-9e6a68c87b4e5c31d84a70f2","mod-df9148ab5ce0a5a5115bead1","mod-996772d8748b5664e367c6c6","mod-52aa016deaac90f2f1067844","mod-f87e42bd9aa4eebfae23dbd1","mod-5758817d6b816e39b8e7e4b3","mod-20f30418ca95fd46594075af","mod-1de8a1fb6a48c6a931549f30","mod-892576d596aa8b40bed3d2f9","mod-a5c28a9abc4da2bd27d3cbb4","mod-a365b7714dec16f0bf79621e","mod-0fabbf7facc4e7b4b62c59ae","mod-eafbd86811c7222ae0334af1","mod-a9472d145601bd72b2b81e65","mod-128ee1689e701accb1643b15","mod-b348b25ed5a5571412a85da0","mod-91454010a0aa78f3ef28bd69","mod-1f38e75fd9b9f51f96a2d975","mod-43e420b038a56638079168bc","mod-4abf6009e6ef176fec251259","mod-fcbaaa2e6fedeb87a2dc2d8e","mod-3a3b7b050c56c146875c18fb","mod-b2c7d957ae05ce535d8f8e2e","mod-b5a2bbfcc551f4a8277420d0","mod-92957ee0de7980fc9c719d03","mod-7656cd8b9f3c2f0776a9aaa8","mod-49040f43d8c17532e83ed67d","mod-a1bb18b05142b623b9fb8be4","mod-9b1b89cd5b264f022df908d4","mod-3f601c90582b585a8d9b6d4b","mod-0f4a4cd8bc5da602adf2a2fa","mod-cee54b249e5709ba015c9342","mod-c096e9d35a0fa633ff44cda0","mod-3be22133d78983422a1da0d9","mod-ec09ae3ca7a100b5fa55556d","mod-ffe258ffef0cb8215e2647fe","mod-93380aca3aab056f0dd2e4e0","mod-a8a39a4fb87704dbcb720225","mod-455d4fbaf89d273aa029864d","mod-efd6ff5fba09516480c9e2e4","mod-2e55150ffa8226bdba0597cc","mod-f1c149177b4fb9bc2b7ee080","mod-5dd7573d658ce3d7ea74353a","mod-3f71e0e4e5c692c7690b3c86","mod-f215e43fe388f34d276e0935","mod-5f1b8ed2b401d728855c038c","mod-6e27fb3b8c84e1baeea2a944","mod-587a0dac663054ccdc90b2bc","mod-5d68d5d1029351abd62fa157","mod-eeb3f53b29866be8d2cb970f","mod-1a126c017b2b7dd41d6846f0","mod-303258444053b0a43538b62b","mod-4608ef549e373e94702c2215","mod-ea8a0a466499b8a4e9d2b2fd","mod-a25839dd6ba039a8c958583f","mod-5269202219af5585cb61f564","mod-dc9656310d022085b2936dcc","mod-b1d30e1636da57dbf8144fd7","mod-a66773add774e134dc55fb9c","mod-efae4e57fd7a4c96e3e2b085","mod-3adb0b7ff3ed55bc318f2ce4","mod-55764c2c659740ce445946f7","mod-8178eae36aec57f1b202e180","mod-8eb2e47a2e706233783e8ea4","mod-e421d8434312ee89ef377735","mod-cf03366f5eef469f1f9abae5","mod-eef3b769fd906f6d2e387d17","mod-88c1741b3b46fa02af202651","mod-d3bd2f24c047572fef2bb57d","mod-ba811634639e67c5ad6dad6a","mod-9b81da9944f3e64f4bb36898","mod-81df5ad5e23b1f5a430705f8","mod-62ff6356c1ab42c00fe12c14","mod-8fe5e92214e16e3971d40e48","mod-b986d7806992d6c650aa2abc","mod-c3ac921e455e2c85a68228e4","mod-c7ad59fd02de9e38e55f238d","mod-21706187666573b14b262650","mod-ca241437dd7ea992b976eec8","mod-bee55878a628d2e61003c5cc","mod-ee32d301b857ba4c7de679c2","mod-f6f853a3f874d365c69ba912","mod-0dd8c1befae8423fcc7d4fcd","mod-a5b4a44206cc0f3e39469a88","mod-28add79b36597a8f639320cc","mod-a877268ad21d1ba59035ea1f","mod-a65de7b43b60edb96e04a5d1","mod-0ec41645e6ad231f2006c934","mod-21be8fb976449bbe3589ce47","mod-074e7c12d54384c86eabf721","mod-c16d69bfcfaea5546b2859a7","mod-570eac54a9d81c36302eb6d0","mod-a216d9e19ade66b2cdd92076","mod-c85a25b09fa10c16a8188ca0","mod-dcce6518be2af59c2b776acc","mod-52720c35cbea3e8d81ae7a70","mod-f67afbbcc2c394e0b6549ff8","mod-4dda3c12aae4a0b02bbb9bc6","mod-7450e07dbc1823bd1d8e3fe2","mod-9acd412d29faec50fbeccd6a","mod-e89fa4423bde3e1df39acf0e","mod-aec11f5957298897d75000d1","mod-7fc4f2fefdc6a8526f0d89e7","mod-59e682c774f84720b4dbee26","mod-eb0798295c928ba399632ae3","sym-d9d6fc11a7df506cb0a07142","sym-01c888a08356d8f28943c97f","sym-44d33a50cc54e0d3d967b0c0","sym-19868805b0694b2d85e8eaf2","sym-7e2f44f7dfbc0b389d5076cc","sym-7591b4ab3452279a9b3202d6","sym-7d6290b416ca33e2810a2d84","sym-98ec34896e82c3ec91f745c8"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"mod-7fc4f2fefdc6a8526f0d89e7","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/utilities/mainLoop.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/mainLoop.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/utilities/mainLoop"},"relationships":{"depends_on":["mod-d0e009681585b57776f6a187","mod-9e6a68c87b4e5c31d84a70f2","mod-0fabbf7facc4e7b4b62c59ae","mod-c16d69bfcfaea5546b2859a7","mod-aedcf7cff384ad96bb4dd624","mod-54aa1c38c91b1598c048b7e1","mod-a365b7714dec16f0bf79621e","mod-59e682c774f84720b4dbee26","mod-dcce6518be2af59c2b776acc"],"depended_by":["mod-327512c4dc701f9a29037e12","sym-f340304e2dcd18aeab7bea66"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"mod-ff98cde0370b2a3126edc022","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/utilities/required.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/required.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/utilities/required"},"relationships":{"depends_on":[],"depended_by":["mod-3dc939e68aaf71174e695f9e","mod-ea8114d37c6855f0420f3753","mod-7450e07dbc1823bd1d8e3fe2","mod-80ff82c43058ee3abb67247d","mod-aec11f5957298897d75000d1","sym-310ddf06d9f20af042a081ae","sym-1fb3c00ffd51337ee0856546"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"mod-afcd806760f135d6236304f7","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/utilities/selfCheckPort.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/selfCheckPort.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/utilities/selfCheckPort"},"relationships":{"depends_on":[],"depended_by":["sym-eb5223c80d97fb8805435919"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","util"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"mod-79fbe6e699a260de286c1916","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/utilities/selfPeer.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/selfPeer.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/utilities/selfPeer"},"relationships":{"depends_on":[],"depended_by":["sym-73a0a16ce379f82c4cf209c2"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","process.env"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"mod-59e682c774f84720b4dbee26","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/utilities/sharedState.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/sharedState.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/utilities/sharedState"},"relationships":{"depends_on":["mod-12d77c813504670328c9b4f1","mod-d0e009681585b57776f6a187","mod-d3bd2f24c047572fef2bb57d","mod-f486beaedaf6d01b3f5574b4","mod-54aa1c38c91b1598c048b7e1","mod-94f67b12c658d567d29471e0","mod-de2778e7582cc783d0c02163"],"depended_by":["mod-900742fc8a97706a00e06129","mod-26a73e0f3287d341c809bbb6","mod-94f67b12c658d567d29471e0","mod-de2778e7582cc783d0c02163","mod-ea8114d37c6855f0420f3753","mod-327512c4dc701f9a29037e12","mod-b14fd27b1e26707d72c1730a","mod-d0e009681585b57776f6a187","mod-91c215ca923f83144b68d625","mod-8786c56780e501016b92f408","mod-8aef488fb2fc78414791967a","mod-9e6a68c87b4e5c31d84a70f2","mod-457939e5e7481c4a6a17e7a3","mod-f87e42bd9aa4eebfae23dbd1","mod-20f30418ca95fd46594075af","mod-1de8a1fb6a48c6a931549f30","mod-892576d596aa8b40bed3d2f9","mod-a365b7714dec16f0bf79621e","mod-0fabbf7facc4e7b4b62c59ae","mod-a9472d145601bd72b2b81e65","mod-128ee1689e701accb1643b15","mod-b348b25ed5a5571412a85da0","mod-91454010a0aa78f3ef28bd69","mod-1f38e75fd9b9f51f96a2d975","mod-77aac2da6c6f0fbc37663544","mod-43e420b038a56638079168bc","mod-fcbaaa2e6fedeb87a2dc2d8e","mod-3a3b7b050c56c146875c18fb","mod-b5a2bbfcc551f4a8277420d0","mod-9b1b89cd5b264f022df908d4","mod-3f601c90582b585a8d9b6d4b","mod-cee54b249e5709ba015c9342","mod-ec09ae3ca7a100b5fa55556d","mod-a8a39a4fb87704dbcb720225","mod-455d4fbaf89d273aa029864d","mod-2e55150ffa8226bdba0597cc","mod-5dd7573d658ce3d7ea74353a","mod-e09bbf55f33f0d36061b2348","mod-3f71e0e4e5c692c7690b3c86","mod-22a231e7e2a8fa48e00405d7","mod-5f1b8ed2b401d728855c038c","mod-82b6a522914548c8fd24479a","mod-303258444053b0a43538b62b","mod-00cbdca09e56b6109b846e9b","mod-5269202219af5585cb61f564","mod-8178eae36aec57f1b202e180","mod-88c1741b3b46fa02af202651","mod-a877268ad21d1ba59035ea1f","mod-21be8fb976449bbe3589ce47","mod-074e7c12d54384c86eabf721","mod-94b639d8e332eed46da2f8af","mod-c16d69bfcfaea5546b2859a7","mod-a216d9e19ade66b2cdd92076","mod-c85a25b09fa10c16a8188ca0","mod-dcce6518be2af59c2b776acc","mod-f67afbbcc2c394e0b6549ff8","mod-4dda3c12aae4a0b02bbb9bc6","mod-7450e07dbc1823bd1d8e3fe2","mod-d46e3dca63550b5d88963cef","mod-7fc4f2fefdc6a8526f0d89e7","mod-481b5289c108ab245dd3ad27","mod-9066efb52e5f511aa3343c63","sym-b744b3f0ca52230821cd7c09"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["dotenv","node-forge","ntp-client","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption","process.env"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"mod-1b2ebbc2a937e6ac49f4abba","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/utilities/sizeOf.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/sizeOf.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/utilities/sizeOf"},"relationships":{"depends_on":[],"depended_by":["mod-457939e5e7481c4a6a17e7a3","sym-ed461adfd8dc4f058d796f5b"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"mod-af922777bca2943d44bdba1f","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/utilities/tui/CategorizedLogger.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":[],"depended_by":["mod-481b5289c108ab245dd3ad27","mod-9066efb52e5f511aa3343c63","mod-afb8062b9c4d4f2ec0da49a0","mod-d9d28659a6e092680fe7bfe4","sym-94693360f161a1af80920aaa","sym-c23128ccef9064fd5a9eb6be","sym-ae4c5105ad70fa5d16a460d4","sym-7877e2c46b0481d30b1295d8","sym-d399da6b951448492878f2f3","sym-4fd1128f7dfc625d822a7318"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","process.env"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"mod-481b5289c108ab245dd3ad27","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/utilities/tui/LegacyLoggerAdapter.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/LegacyLoggerAdapter.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/utilities/tui/LegacyLoggerAdapter"},"relationships":{"depends_on":["mod-af922777bca2943d44bdba1f","mod-d9d28659a6e092680fe7bfe4","mod-59e682c774f84720b4dbee26"],"depended_by":["mod-54aa1c38c91b1598c048b7e1","mod-afb8062b9c4d4f2ec0da49a0","sym-c921746d54e98ddfe4ccb299"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"mod-9066efb52e5f511aa3343c63","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/utilities/tui/TUIManager.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/TUIManager.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/utilities/tui/TUIManager"},"relationships":{"depends_on":["mod-af922777bca2943d44bdba1f","mod-d9d28659a6e092680fe7bfe4","mod-59e682c774f84720b4dbee26"],"depended_by":["mod-afb8062b9c4d4f2ec0da49a0","sym-0f1cb478ccecdbc8fd539805","sym-68723b3207631cc64e03a451","sym-26c9da6ec5614cb93a5cbe2c"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["terminal-kit","events"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"mod-afb8062b9c4d4f2ec0da49a0","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/utilities/tui/index.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/index.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/utilities/tui/index"},"relationships":{"depends_on":["mod-af922777bca2943d44bdba1f","mod-481b5289c108ab245dd3ad27","mod-9066efb52e5f511aa3343c63"],"depended_by":["sym-fcf030aedb37dcce1a78108d","sym-0f16b4cda74d61ad3da42579","sym-97c7f2bb4907e815e518d1fe","sym-80057b3541e00f7cc0458b89","sym-1e715c26e0832b512c931708","sym-c5dba2bba8b1f3ee3b45609e","sym-1fdf4231b9ddd41ccb09bca4","sym-7b2ceeaaadffca84918cad19","sym-e8a4ffa5ce3c70489f1f1aa7","sym-862a65237685e8c946afd441"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"mod-d9d28659a6e092680fe7bfe4","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/utilities/tui/tagCategories.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/tagCategories.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/utilities/tui/tagCategories"},"relationships":{"depends_on":["mod-af922777bca2943d44bdba1f"],"depended_by":["mod-481b5289c108ab245dd3ad27","mod-9066efb52e5f511aa3343c63","sym-a335758e6a5c9270bc4e17d4","sym-8a35aa0b8db3d2a1c36ae2a2"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"mod-8e3a02ebf4990dac5ac1f328","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/utilities/validateUint8Array.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/validateUint8Array.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/utilities/validateUint8Array"},"relationships":{"depends_on":[],"depended_by":["mod-374a312e43c2c9f2d7013463","sym-991e8f624f9a0de36c800ed6"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"mod-eb0798295c928ba399632ae3","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `src/utilities/waiter.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/waiter.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"@/utilities/waiter"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1"],"depended_by":["mod-327512c4dc701f9a29037e12","mod-9e6a68c87b4e5c31d84a70f2","mod-892576d596aa8b40bed3d2f9","mod-0fabbf7facc4e7b4b62c59ae","mod-fcbaaa2e6fedeb87a2dc2d8e","mod-a8a39a4fb87704dbcb720225","mod-2e55150ffa8226bdba0597cc","mod-5dd7573d658ce3d7ea74353a","sym-b51b7f2293f00327da000bdb"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"mod-877c0c159531ba36f25904bc","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `tests/mocks/demosdk-abstraction.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-abstraction.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"tests/mocks/demosdk-abstraction"},"relationships":{"depends_on":[],"depended_by":["sym-ab821687a4299d0d579d49c7","sym-42527a84666c4a40976bd94d"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"mod-b4394327e0a18b4da4f0b23a","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `tests/mocks/demosdk-build.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-build.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"tests/mocks/demosdk-build"},"relationships":{"depends_on":[],"depended_by":["sym-baed646297ac7a253a25f030"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"mod-97a0284402c885a38947f96c","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `tests/mocks/demosdk-encryption.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-encryption.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"tests/mocks/demosdk-encryption"},"relationships":{"depends_on":[],"depended_by":["sym-64c96a6fbf2a162737330407","sym-832e0134a9591de63a109c96","sym-9f42e311e2a8e48662a9fef9"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["buffer"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"mod-bd7e6bb16e1ad3ce391d135f","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `tests/mocks/demosdk-types.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-types.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"tests/mocks/demosdk-types"},"relationships":{"depends_on":[],"depended_by":["sym-7bfe6f65424b8f960729882b","sym-f1d873115e6af0e4c19fc30d","sym-a7b3d969f28a61c51429f843","sym-5357f545e8ae455cf1dae173","sym-8ae3c2ab051a29a3e38274dd","sym-a9a76108c6152698a3e7bac3","sym-9e3a0cabaea4ec69a300f18d","sym-d06a4eb520adc83b781eb1b7","sym-e563ba4e1cba0422d3f6d351","sym-38a97c77e145541444f5b557","sym-77698a6f7f42a84ed2ee5769","sym-99dbc8dc422257de18a23cde","sym-f5cd26473ebc041f634af528","sym-2e7f6d391d8c13d0a27849db","sym-0303db1a28d7da98e3bd3feb","sym-1bb487944cb5b12d3757f07c","sym-42ab5fb64ac1e70a6473f6e5"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"mod-78abcf74349b520bc900b4b4","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `tests/mocks/demosdk-websdk.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-websdk.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"tests/mocks/demosdk-websdk"},"relationships":{"depends_on":[],"depended_by":["sym-b487a1ce833804d2271e3c96","sym-3c1f2e978ed4af636838378b"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"mod-39dd430c0afde7c4cff40e35","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `tests/mocks/demosdk-xm-localsdk.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-xm-localsdk.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"tests/mocks/demosdk-xm-localsdk"},"relationships":{"depends_on":[],"depended_by":["sym-a5fcf79ed272694d8bed0a7f","sym-6a06789ec5630226d1606761","sym-252318ccecdf3dae90cd765a","sym-95315e0446bf0d1ca7c636ed"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"mod-a7ed1878dc1aee852010d3b6","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `tests/omniprotocol/consensus.test.ts`."],"intent_vectors":["p2p-protocol","testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/omniprotocol/consensus.test.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"tests/omniprotocol/consensus.test"},"relationships":{"depends_on":["mod-7a54f789433ac1b88a2975b0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@jest/globals","fs","path"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"mod-0d61128881019eb50babac8d","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `tests/omniprotocol/dispatcher.test.ts`."],"intent_vectors":["p2p-protocol","testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/omniprotocol/dispatcher.test.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"tests/omniprotocol/dispatcher.test"},"relationships":{"depends_on":[],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@jest/globals"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.961Z","authors":[]}} +{"uuid":"mod-bc1007721c3fa6b589fb67e6","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `tests/omniprotocol/fixtures.test.ts`."],"intent_vectors":["p2p-protocol","testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/omniprotocol/fixtures.test.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"tests/omniprotocol/fixtures.test"},"relationships":{"depends_on":[],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@jest/globals","fs","path"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"mod-e54e69b88583bdd6e9367055","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `tests/omniprotocol/gcr.test.ts`."],"intent_vectors":["p2p-protocol","testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/omniprotocol/gcr.test.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"tests/omniprotocol/gcr.test"},"relationships":{"depends_on":["mod-da04ef1eca622af1ef3664c3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@jest/globals","fs","path"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"mod-b5400cea84fe87579754fb90","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `tests/omniprotocol/handlers.test.ts`."],"intent_vectors":["p2p-protocol","testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/omniprotocol/handlers.test.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"tests/omniprotocol/handlers.test"},"relationships":{"depends_on":[],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@jest/globals","fs","path","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.961Z","authors":[]}} +{"uuid":"mod-945ca38aa8afc3373e859950","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `tests/omniprotocol/peerOmniAdapter.test.ts`."],"intent_vectors":["p2p-protocol","testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/omniprotocol/peerOmniAdapter.test.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"tests/omniprotocol/peerOmniAdapter.test"},"relationships":{"depends_on":[],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@jest/globals"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"mod-6df30845bc1a45d2d4602890","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `tests/omniprotocol/registry.test.ts`."],"intent_vectors":["p2p-protocol","testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/omniprotocol/registry.test.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"tests/omniprotocol/registry.test"},"relationships":{"depends_on":["mod-fa9dc053ab761e9fa1b23eca"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@jest/globals"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.961Z","authors":[]}} +{"uuid":"mod-937d387706a55ae219092722","level":"L1","extraction_confidence":0.8,"documentation_quality":"sparse","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Module/file boundary for `tests/omniprotocol/transaction.test.ts`."],"intent_vectors":["p2p-protocol","testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/omniprotocol/transaction.test.ts","line_range":[1,1],"symbol_name":null,"language":"typescript","module_resolution_path":"tests/omniprotocol/transaction.test"},"relationships":{"depends_on":["mod-da04ef1eca622af1ef3664c3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@jest/globals"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-4ed35d165f49e04872c7e4c4","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["default (export_default) exported from `jest.config.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"jest.config.ts","line_range":[40,40],"symbol_name":"default","language":"typescript","module_resolution_path":"jest.config"},"relationships":{"depends_on":["mod-4f240da290d74961db3018c1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["ts-jest"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.600Z","authors":[]}} +{"uuid":"sym-a3457454de6108179f1ec8da","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `Client` in `src/client/libs/client_class.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/client/libs/client_class.ts","line_range":[7,49],"symbol_name":"Client::api","language":"typescript","module_resolution_path":"@/client/libs/client_class"},"relationships":{"depends_on":["sym-4c758022ba1409f727162ccd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge","socket.io","socket.io-client"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-aaf45e8b9a20d0605c7b9457","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Client.connect method on exported class `Client` in `src/client/libs/client_class.ts`.","TypeScript signature: (url: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/client/libs/client_class.ts","line_range":[26,38],"symbol_name":"Client.connect","language":"typescript","module_resolution_path":"@/client/libs/client_class"},"relationships":{"depends_on":["sym-4c758022ba1409f727162ccd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node-forge","socket.io","socket.io-client"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-021316b8a7f0f31c1deb509c","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Client.disconnect method on exported class `Client` in `src/client/libs/client_class.ts`.","TypeScript signature: () => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/client/libs/client_class.ts","line_range":[40,46],"symbol_name":"Client.disconnect","language":"typescript","module_resolution_path":"@/client/libs/client_class"},"relationships":{"depends_on":["sym-4c758022ba1409f727162ccd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node-forge","socket.io","socket.io-client"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-4c758022ba1409f727162ccd","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Client (class) exported from `src/client/libs/client_class.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/client/libs/client_class.ts","line_range":[7,49],"symbol_name":"Client","language":"typescript","module_resolution_path":"@/client/libs/client_class"},"relationships":{"depends_on":["mod-61ec49ba22d46e7eeff82d2c"],"depended_by":["sym-a3457454de6108179f1ec8da","sym-aaf45e8b9a20d0605c7b9457","sym-021316b8a7f0f31c1deb509c"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge","socket.io","socket.io-client"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-ba61b2da568a8430957bebda","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `Network` in `src/client/libs/network.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/client/libs/network.ts","line_range":[3,29],"symbol_name":"Network::api","language":"typescript","module_resolution_path":"@/client/libs/network"},"relationships":{"depends_on":["sym-901bc277fa06e0174b43ba7b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["socket.io-client"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-e900ebe76ecce43aaf5d24f2","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Network.rpcConnect method on exported class `Network` in `src/client/libs/network.ts`.","TypeScript signature: (rpcUrl: string, socket: socket_client.Socket) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/client/libs/network.ts","line_range":[4,28],"symbol_name":"Network.rpcConnect","language":"typescript","module_resolution_path":"@/client/libs/network"},"relationships":{"depends_on":["sym-901bc277fa06e0174b43ba7b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["socket.io-client"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-901bc277fa06e0174b43ba7b","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Network (class) exported from `src/client/libs/network.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/client/libs/network.ts","line_range":[3,29],"symbol_name":"Network","language":"typescript","module_resolution_path":"@/client/libs/network"},"relationships":{"depends_on":["mod-5fd74e18c62882ed9c84a4c4"],"depended_by":["sym-ba61b2da568a8430957bebda","sym-e900ebe76ecce43aaf5d24f2"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["socket.io-client"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-3f4bb30871f440aa6fe225dd","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `TimeoutError` in `src/exceptions/index.ts`.","Thrown when a Waiter event times out"],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/exceptions/index.ts","line_range":[4,9],"symbol_name":"TimeoutError::api","language":"typescript","module_resolution_path":"@/exceptions/index"},"relationships":{"depends_on":["sym-6504c0a9f99e4155e106ee87"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 1-3","related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-6504c0a9f99e4155e106ee87","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TimeoutError (class) exported from `src/exceptions/index.ts`.","Thrown when a Waiter event times out"],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/exceptions/index.ts","line_range":[4,9],"symbol_name":"TimeoutError","language":"typescript","module_resolution_path":"@/exceptions/index"},"relationships":{"depends_on":["mod-4f82a94b1d6cb4bf9aed1178"],"depended_by":["sym-3f4bb30871f440aa6fe225dd"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 1-3","related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-391cd0ad29e526ec762b9e17","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `AbortError` in `src/exceptions/index.ts`.","Thrown when a Waiter event is aborted"],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/exceptions/index.ts","line_range":[14,19],"symbol_name":"AbortError::api","language":"typescript","module_resolution_path":"@/exceptions/index"},"relationships":{"depends_on":["sym-f635182864f3ac12fd146b08"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 11-13","related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-f635182864f3ac12fd146b08","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["AbortError (class) exported from `src/exceptions/index.ts`.","Thrown when a Waiter event is aborted"],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/exceptions/index.ts","line_range":[14,19],"symbol_name":"AbortError","language":"typescript","module_resolution_path":"@/exceptions/index"},"relationships":{"depends_on":["mod-4f82a94b1d6cb4bf9aed1178"],"depended_by":["sym-391cd0ad29e526ec762b9e17"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 11-13","related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-1b784c11203f8434f7a7b422","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `BlockNotFoundError` in `src/exceptions/index.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/exceptions/index.ts","line_range":[21,26],"symbol_name":"BlockNotFoundError::api","language":"typescript","module_resolution_path":"@/exceptions/index"},"relationships":{"depends_on":["sym-c0866f4c8525a7cda3643511"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-c0866f4c8525a7cda3643511","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BlockNotFoundError (class) exported from `src/exceptions/index.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/exceptions/index.ts","line_range":[21,26],"symbol_name":"BlockNotFoundError","language":"typescript","module_resolution_path":"@/exceptions/index"},"relationships":{"depends_on":["mod-4f82a94b1d6cb4bf9aed1178"],"depended_by":["sym-1b784c11203f8434f7a7b422"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-330150d457066afcda5b7a46","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `PeerUnreachableError` in `src/exceptions/index.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/exceptions/index.ts","line_range":[28,33],"symbol_name":"PeerUnreachableError::api","language":"typescript","module_resolution_path":"@/exceptions/index"},"relationships":{"depends_on":["sym-03745b230e975b586dc777a1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-03745b230e975b586dc777a1","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerUnreachableError (class) exported from `src/exceptions/index.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/exceptions/index.ts","line_range":[28,33],"symbol_name":"PeerUnreachableError","language":"typescript","module_resolution_path":"@/exceptions/index"},"relationships":{"depends_on":["mod-4f82a94b1d6cb4bf9aed1178"],"depended_by":["sym-330150d457066afcda5b7a46"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-b1dca79c5b291f8dd61a833d","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `NotInShardError` in `src/exceptions/index.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/exceptions/index.ts","line_range":[35,40],"symbol_name":"NotInShardError::api","language":"typescript","module_resolution_path":"@/exceptions/index"},"relationships":{"depends_on":["sym-df323420a40015574b5089aa"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-df323420a40015574b5089aa","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["NotInShardError (class) exported from `src/exceptions/index.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/exceptions/index.ts","line_range":[35,40],"symbol_name":"NotInShardError","language":"typescript","module_resolution_path":"@/exceptions/index"},"relationships":{"depends_on":["mod-4f82a94b1d6cb4bf9aed1178"],"depended_by":["sym-b1dca79c5b291f8dd61a833d"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-9ccdf92e4adf9fa07a7e377e","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `ForgingEndedError` in `src/exceptions/index.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/exceptions/index.ts","line_range":[42,47],"symbol_name":"ForgingEndedError::api","language":"typescript","module_resolution_path":"@/exceptions/index"},"relationships":{"depends_on":["sym-c3502e1f3d90c7c26761f5f4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-c3502e1f3d90c7c26761f5f4","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ForgingEndedError (class) exported from `src/exceptions/index.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/exceptions/index.ts","line_range":[42,47],"symbol_name":"ForgingEndedError","language":"typescript","module_resolution_path":"@/exceptions/index"},"relationships":{"depends_on":["mod-4f82a94b1d6cb4bf9aed1178"],"depended_by":["sym-9ccdf92e4adf9fa07a7e377e"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-ad0e77bff9ee77397c79a3fa","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `BlockInvalidError` in `src/exceptions/index.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/exceptions/index.ts","line_range":[49,54],"symbol_name":"BlockInvalidError::api","language":"typescript","module_resolution_path":"@/exceptions/index"},"relationships":{"depends_on":["sym-06f0bf4480d67cccc3add52b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-06f0bf4480d67cccc3add52b","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BlockInvalidError (class) exported from `src/exceptions/index.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/exceptions/index.ts","line_range":[49,54],"symbol_name":"BlockInvalidError","language":"typescript","module_resolution_path":"@/exceptions/index"},"relationships":{"depends_on":["mod-4f82a94b1d6cb4bf9aed1178"],"depended_by":["sym-ad0e77bff9ee77397c79a3fa"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-95dd67d0cd361cb5f2b88afa","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["SignalingServer (re_export) exported from `src/features/InstantMessagingProtocol/index.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/index.ts","line_range":[3,3],"symbol_name":"SignalingServer","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/index"},"relationships":{"depends_on":["mod-c49fd7aa51f86aec35688868"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-2b40125fbedf0cb6fba89e95","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ImHandshake` in `src/features/InstantMessagingProtocol/old/types/IMSession.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/old/types/IMSession.ts","line_range":[18,26],"symbol_name":"ImHandshake::api","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/old/types/IMSession"},"relationships":{"depends_on":["sym-f3028da883261e86359dccc8"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-f3028da883261e86359dccc8","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ImHandshake (interface) exported from `src/features/InstantMessagingProtocol/old/types/IMSession.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/old/types/IMSession.ts","line_range":[18,26],"symbol_name":"ImHandshake","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/old/types/IMSession"},"relationships":{"depends_on":["mod-0a687d4a8de66750c8ed59f7"],"depended_by":["sym-2b40125fbedf0cb6fba89e95"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-4d24e52bc3a5c0bdcd452d4c","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ImMessage` in `src/features/InstantMessagingProtocol/old/types/IMSession.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/old/types/IMSession.ts","line_range":[30,38],"symbol_name":"ImMessage::api","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/old/types/IMSession"},"relationships":{"depends_on":["sym-1139b73552af9d40288f4c90"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-1139b73552af9d40288f4c90","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ImMessage (interface) exported from `src/features/InstantMessagingProtocol/old/types/IMSession.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/old/types/IMSession.ts","line_range":[30,38],"symbol_name":"ImMessage","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/old/types/IMSession"},"relationships":{"depends_on":["mod-0a687d4a8de66750c8ed59f7"],"depended_by":["sym-4d24e52bc3a5c0bdcd452d4c"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-1d808b63fbf2c67fb439c095","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `IMSession` in `src/features/InstantMessagingProtocol/old/types/IMSession.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/old/types/IMSession.ts","line_range":[40,170],"symbol_name":"IMSession::api","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/old/types/IMSession"},"relationships":{"depends_on":["sym-313f38ec2adc5733ed48c0e8"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-e32e44bfcebdf49d9a969318","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IMSession.doHandshake method on exported class `IMSession` in `src/features/InstantMessagingProtocol/old/types/IMSession.ts`.","TypeScript signature: (publicKey: string, signedPublicKey: string) => [boolean, string]."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/old/types/IMSession.ts","line_range":[56,81],"symbol_name":"IMSession.doHandshake","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/old/types/IMSession"},"relationships":{"depends_on":["sym-313f38ec2adc5733ed48c0e8"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-1ec5df753d7d6df2a3c0b665","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IMSession.hasHandshaked method on exported class `IMSession` in `src/features/InstantMessagingProtocol/old/types/IMSession.ts`.","TypeScript signature: () => boolean."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/old/types/IMSession.ts","line_range":[84,92],"symbol_name":"IMSession.hasHandshaked","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/old/types/IMSession"},"relationships":{"depends_on":["sym-313f38ec2adc5733ed48c0e8"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-0d9241c6cb29dc51ca2476e4","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IMSession.addMessage method on exported class `IMSession` in `src/features/InstantMessagingProtocol/old/types/IMSession.ts`.","TypeScript signature: (protoMessage: ImMessage, publicKey: string, signedKey: string) => [boolean, ImMessage | string]."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/old/types/IMSession.ts","line_range":[125,143],"symbol_name":"IMSession.addMessage","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/old/types/IMSession"},"relationships":{"depends_on":["sym-313f38ec2adc5733ed48c0e8"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-916fdcbe410020e10dd53012","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IMSession.retrieveMessages method on exported class `IMSession` in `src/features/InstantMessagingProtocol/old/types/IMSession.ts`.","TypeScript signature: (publicKey: string, signedKey: string, since: number, to: number) => [boolean, ImMessage[] | string]."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/old/types/IMSession.ts","line_range":[146,169],"symbol_name":"IMSession.retrieveMessages","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/old/types/IMSession"},"relationships":{"depends_on":["sym-313f38ec2adc5733ed48c0e8"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-313f38ec2adc5733ed48c0e8","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IMSession (class) exported from `src/features/InstantMessagingProtocol/old/types/IMSession.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/old/types/IMSession.ts","line_range":[40,170],"symbol_name":"IMSession","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/old/types/IMSession"},"relationships":{"depends_on":["mod-0a687d4a8de66750c8ed59f7"],"depended_by":["sym-1d808b63fbf2c67fb439c095","sym-e32e44bfcebdf49d9a969318","sym-1ec5df753d7d6df2a3c0b665","sym-0d9241c6cb29dc51ca2476e4","sym-916fdcbe410020e10dd53012"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-68ad200c1f9a7b73f1767104","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ImStorage` in `src/features/InstantMessagingProtocol/old/types/IMStorage.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/old/types/IMStorage.ts","line_range":[13,16],"symbol_name":"ImStorage::api","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/old/types/IMStorage"},"relationships":{"depends_on":["sym-7f0e02118f2b037cac8e5b61"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-7f0e02118f2b037cac8e5b61","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ImStorage (interface) exported from `src/features/InstantMessagingProtocol/old/types/IMStorage.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/old/types/IMStorage.ts","line_range":[13,16],"symbol_name":"ImStorage","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/old/types/IMStorage"},"relationships":{"depends_on":["mod-d9efcaa28359a29a24e998ca"],"depended_by":["sym-68ad200c1f9a7b73f1767104"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-896653dd09ecab6ef18eeafb","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `IMStorageInstance` in `src/features/InstantMessagingProtocol/old/types/IMStorage.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/old/types/IMStorage.ts","line_range":[18,109],"symbol_name":"IMStorageInstance::api","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/old/types/IMStorage"},"relationships":{"depends_on":["sym-c016626e9c331280cdb4d8fc"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-ce6b65968084be2fc0039e97","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IMStorageInstance.getOutboxes method on exported class `IMStorageInstance` in `src/features/InstantMessagingProtocol/old/types/IMStorage.ts`.","TypeScript signature: (publicKey: string) => [boolean, ImMessage[] | string]."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/old/types/IMStorage.ts","line_range":[61,69],"symbol_name":"IMStorageInstance.getOutboxes","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/old/types/IMStorage"},"relationships":{"depends_on":["sym-c016626e9c331280cdb4d8fc"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-92037a825e30d024067d8c76","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IMStorageInstance.writeToOutbox method on exported class `IMStorageInstance` in `src/features/InstantMessagingProtocol/old/types/IMStorage.ts`.","TypeScript signature: (publicKey: string, signedKey: string, message: ImMessage) => unknown."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/old/types/IMStorage.ts","line_range":[70,83],"symbol_name":"IMStorageInstance.writeToOutbox","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/old/types/IMStorage"},"relationships":{"depends_on":["sym-c016626e9c331280cdb4d8fc"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-c401ae9aee36cb4f36786f2f","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IMStorageInstance.getInboxes method on exported class `IMStorageInstance` in `src/features/InstantMessagingProtocol/old/types/IMStorage.ts`.","TypeScript signature: (publicKey: string, signedKey: string) => [boolean, ImMessage[] | string]."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/old/types/IMStorage.ts","line_range":[86,96],"symbol_name":"IMStorageInstance.getInboxes","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/old/types/IMStorage"},"relationships":{"depends_on":["sym-c016626e9c331280cdb4d8fc"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-96977030f2cd4aa7455c21d3","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IMStorageInstance.writeToInbox method on exported class `IMStorageInstance` in `src/features/InstantMessagingProtocol/old/types/IMStorage.ts`.","TypeScript signature: (publicKey: string, message: ImMessage) => [boolean, string]."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/old/types/IMStorage.ts","line_range":[97,108],"symbol_name":"IMStorageInstance.writeToInbox","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/old/types/IMStorage"},"relationships":{"depends_on":["sym-c016626e9c331280cdb4d8fc"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-c016626e9c331280cdb4d8fc","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IMStorageInstance (class) exported from `src/features/InstantMessagingProtocol/old/types/IMStorage.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/old/types/IMStorage.ts","line_range":[18,109],"symbol_name":"IMStorageInstance","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/old/types/IMStorage"},"relationships":{"depends_on":["mod-d9efcaa28359a29a24e998ca"],"depended_by":["sym-896653dd09ecab6ef18eeafb","sym-ce6b65968084be2fc0039e97","sym-92037a825e30d024067d8c76","sym-c401ae9aee36cb4f36786f2f","sym-96977030f2cd4aa7455c21d3"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-d740cb976f6edd060dd118c8","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ImPeer` in `src/features/InstantMessagingProtocol/signalingServer/ImPeers.ts`.","Represents a connected peer in the signaling server"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/signalingServer/ImPeers.ts","line_range":[4,9],"symbol_name":"ImPeer::api","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/signalingServer/ImPeers"},"relationships":{"depends_on":["sym-7f843674679cf60bbd6f5a72"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 1-3","related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-7f843674679cf60bbd6f5a72","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ImPeer (interface) exported from `src/features/InstantMessagingProtocol/signalingServer/ImPeers.ts`.","Represents a connected peer in the signaling server"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/signalingServer/ImPeers.ts","line_range":[4,9],"symbol_name":"ImPeer","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/signalingServer/ImPeers"},"relationships":{"depends_on":["mod-e0ccf1cd36e1b4bd9f23a160"],"depended_by":["sym-d740cb976f6edd060dd118c8"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 1-3","related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-87c14fd05b89eaba4fbda8d2","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `SignalingServer` in `src/features/InstantMessagingProtocol/signalingServer/signalingServer.ts`.","SignalingServer class that manages peer connections and message routing"],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/signalingServer/signalingServer.ts","line_range":[77,880],"symbol_name":"SignalingServer::api","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/signalingServer/signalingServer"},"relationships":{"depends_on":["sym-38287d16f095005b0eb7a36e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun","async-mutex","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/utils"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 74-76","related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-73c5d831e416f436360bae24","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SignalingServer.disconnect method on exported class `SignalingServer` in `src/features/InstantMessagingProtocol/signalingServer/signalingServer.ts`.","TypeScript signature: () => void."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/signalingServer/signalingServer.ts","line_range":[862,879],"symbol_name":"SignalingServer.disconnect","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/signalingServer/signalingServer"},"relationships":{"depends_on":["sym-38287d16f095005b0eb7a36e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun","async-mutex","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/utils"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-38287d16f095005b0eb7a36e","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SignalingServer (class) exported from `src/features/InstantMessagingProtocol/signalingServer/signalingServer.ts`.","SignalingServer class that manages peer connections and message routing"],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/signalingServer/signalingServer.ts","line_range":[77,880],"symbol_name":"SignalingServer","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/signalingServer/signalingServer"},"relationships":{"depends_on":["mod-900742fc8a97706a00e06129"],"depended_by":["sym-87c14fd05b89eaba4fbda8d2","sym-73c5d831e416f436360bae24"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun","async-mutex","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/utils"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 74-76","related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-f7735d839019e173ccdd3e4f","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported enum `ImErrorType` in `src/features/InstantMessagingProtocol/signalingServer/types/Errors.ts`.","Error types that can occur in the signaling server"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/signalingServer/types/Errors.ts","line_range":[4,12],"symbol_name":"ImErrorType::api","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/signalingServer/types/Errors"},"relationships":{"depends_on":["sym-e39ea46175ad44de17c9efe4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 1-3","related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-e39ea46175ad44de17c9efe4","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ImErrorType (enum) exported from `src/features/InstantMessagingProtocol/signalingServer/types/Errors.ts`.","Error types that can occur in the signaling server"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/signalingServer/types/Errors.ts","line_range":[4,12],"symbol_name":"ImErrorType","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/signalingServer/types/Errors"},"relationships":{"depends_on":["mod-3653cf91ec233fdbb23d4d78"],"depended_by":["sym-f7735d839019e173ccdd3e4f"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 1-3","related_adr":null,"last_modified":"2026-02-13T14:41:04.943Z","authors":[]}} +{"uuid":"sym-8bc60a2dd19a6fdb5e3076e8","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ImBaseMessage` in `src/features/InstantMessagingProtocol/signalingServer/types/IMMessage.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/signalingServer/types/IMMessage.ts","line_range":[3,6],"symbol_name":"ImBaseMessage::api","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/signalingServer/types/IMMessage"},"relationships":{"depends_on":["sym-2b5fdb6334800012c0c21e0a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-2b5fdb6334800012c0c21e0a","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ImBaseMessage (interface) exported from `src/features/InstantMessagingProtocol/signalingServer/types/IMMessage.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/signalingServer/types/IMMessage.ts","line_range":[3,6],"symbol_name":"ImBaseMessage","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/signalingServer/types/IMMessage"},"relationships":{"depends_on":["mod-a0a399c17b09d2d59cb4c8a4"],"depended_by":["sym-8bc60a2dd19a6fdb5e3076e8"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-4bc719fa7ed33d0c0fb06639","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ImRegisterMessage` in `src/features/InstantMessagingProtocol/signalingServer/types/IMMessage.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/signalingServer/types/IMMessage.ts","line_range":[8,15],"symbol_name":"ImRegisterMessage::api","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/signalingServer/types/IMMessage"},"relationships":{"depends_on":["sym-e192f30b074d1edf17119667"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-e192f30b074d1edf17119667","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ImRegisterMessage (interface) exported from `src/features/InstantMessagingProtocol/signalingServer/types/IMMessage.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/signalingServer/types/IMMessage.ts","line_range":[8,15],"symbol_name":"ImRegisterMessage","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/signalingServer/types/IMMessage"},"relationships":{"depends_on":["mod-a0a399c17b09d2d59cb4c8a4"],"depended_by":["sym-4bc719fa7ed33d0c0fb06639"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-b8035411223e72d7f64883ff","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ImDiscoverMessage` in `src/features/InstantMessagingProtocol/signalingServer/types/IMMessage.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/signalingServer/types/IMMessage.ts","line_range":[17,20],"symbol_name":"ImDiscoverMessage::api","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/signalingServer/types/IMMessage"},"relationships":{"depends_on":["sym-09396517c2f92c1491430417"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-09396517c2f92c1491430417","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ImDiscoverMessage (interface) exported from `src/features/InstantMessagingProtocol/signalingServer/types/IMMessage.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/signalingServer/types/IMMessage.ts","line_range":[17,20],"symbol_name":"ImDiscoverMessage","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/signalingServer/types/IMMessage"},"relationships":{"depends_on":["mod-a0a399c17b09d2d59cb4c8a4"],"depended_by":["sym-b8035411223e72d7f64883ff"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-e19a1b0efe47dafc170c58ba","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ImPeerMessage` in `src/features/InstantMessagingProtocol/signalingServer/types/IMMessage.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/signalingServer/types/IMMessage.ts","line_range":[23,29],"symbol_name":"ImPeerMessage::api","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/signalingServer/types/IMMessage"},"relationships":{"depends_on":["sym-715811d58eff5b235d047fe4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-715811d58eff5b235d047fe4","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ImPeerMessage (interface) exported from `src/features/InstantMessagingProtocol/signalingServer/types/IMMessage.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/signalingServer/types/IMMessage.ts","line_range":[23,29],"symbol_name":"ImPeerMessage","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/signalingServer/types/IMMessage"},"relationships":{"depends_on":["mod-a0a399c17b09d2d59cb4c8a4"],"depended_by":["sym-e19a1b0efe47dafc170c58ba"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-29cdb4a3679630a0358d0bb9","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ImPublicKeyRequestMessage` in `src/features/InstantMessagingProtocol/signalingServer/types/IMMessage.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/signalingServer/types/IMMessage.ts","line_range":[31,36],"symbol_name":"ImPublicKeyRequestMessage::api","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/signalingServer/types/IMMessage"},"relationships":{"depends_on":["sym-e7f1193634eb6a1432bab90e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-e7f1193634eb6a1432bab90e","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ImPublicKeyRequestMessage (interface) exported from `src/features/InstantMessagingProtocol/signalingServer/types/IMMessage.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/InstantMessagingProtocol/signalingServer/types/IMMessage.ts","line_range":[31,36],"symbol_name":"ImPublicKeyRequestMessage","language":"typescript","module_resolution_path":"@/features/InstantMessagingProtocol/signalingServer/types/IMMessage"},"relationships":{"depends_on":["mod-a0a399c17b09d2d59cb4c8a4"],"depended_by":["sym-29cdb4a3679630a0358d0bb9"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-39ad83de6dbc734ee6f2eae9","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `ActivityPubStorage` in `src/features/activitypub/fedistore.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/activitypub/fedistore.ts","line_range":[4,90],"symbol_name":"ActivityPubStorage::api","language":"typescript","module_resolution_path":"@/features/activitypub/fedistore"},"relationships":{"depends_on":["sym-044c0cd881405407920926a2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["sqlite3"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-b24fcbb1e6da7606d5ab956d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ActivityPubStorage.createTables method on exported class `ActivityPubStorage` in `src/features/activitypub/fedistore.ts`.","TypeScript signature: () => unknown."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/activitypub/fedistore.ts","line_range":[45,50],"symbol_name":"ActivityPubStorage.createTables","language":"typescript","module_resolution_path":"@/features/activitypub/fedistore"},"relationships":{"depends_on":["sym-044c0cd881405407920926a2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["sqlite3"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-a97260d74feb8d40b8159924","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ActivityPubStorage.saveItem method on exported class `ActivityPubStorage` in `src/features/activitypub/fedistore.ts`.","TypeScript signature: (collection: unknown, item: unknown) => unknown."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/activitypub/fedistore.ts","line_range":[52,61],"symbol_name":"ActivityPubStorage.saveItem","language":"typescript","module_resolution_path":"@/features/activitypub/fedistore"},"relationships":{"depends_on":["sym-044c0cd881405407920926a2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["sqlite3"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-3d6be09763d2fc4d2f20bd02","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ActivityPubStorage.getItem method on exported class `ActivityPubStorage` in `src/features/activitypub/fedistore.ts`.","TypeScript signature: (collection: unknown, id: unknown, callback: unknown) => unknown."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/activitypub/fedistore.ts","line_range":[63,78],"symbol_name":"ActivityPubStorage.getItem","language":"typescript","module_resolution_path":"@/features/activitypub/fedistore"},"relationships":{"depends_on":["sym-044c0cd881405407920926a2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["sqlite3"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-da8ad413c16f675f9c1bd0db","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ActivityPubStorage.deleteItem method on exported class `ActivityPubStorage` in `src/features/activitypub/fedistore.ts`.","TypeScript signature: (collection: unknown, id: unknown) => unknown."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/activitypub/fedistore.ts","line_range":[80,89],"symbol_name":"ActivityPubStorage.deleteItem","language":"typescript","module_resolution_path":"@/features/activitypub/fedistore"},"relationships":{"depends_on":["sym-044c0cd881405407920926a2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["sqlite3"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-044c0cd881405407920926a2","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ActivityPubStorage (class) exported from `src/features/activitypub/fedistore.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/activitypub/fedistore.ts","line_range":[4,90],"symbol_name":"ActivityPubStorage","language":"typescript","module_resolution_path":"@/features/activitypub/fedistore"},"relationships":{"depends_on":["mod-7b49c1b727b9aee8612f7ada"],"depended_by":["sym-39ad83de6dbc734ee6f2eae9","sym-b24fcbb1e6da7606d5ab956d","sym-a97260d74feb8d40b8159924","sym-3d6be09763d2fc4d2f20bd02","sym-da8ad413c16f675f9c1bd0db"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["sqlite3"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-f9fd6387097446254eb935c8","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ActivityPubObject` in `src/features/activitypub/feditypes.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/activitypub/feditypes.ts","line_range":[2,8],"symbol_name":"ActivityPubObject::api","language":"typescript","module_resolution_path":"@/features/activitypub/feditypes"},"relationships":{"depends_on":["sym-e22d61e07c82d37fa1f79792"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.944Z","authors":[]}} +{"uuid":"sym-e22d61e07c82d37fa1f79792","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ActivityPubObject (interface) exported from `src/features/activitypub/feditypes.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/activitypub/feditypes.ts","line_range":[2,8],"symbol_name":"ActivityPubObject","language":"typescript","module_resolution_path":"@/features/activitypub/feditypes"},"relationships":{"depends_on":["mod-8dfd4cfe7c92238e8a295176"],"depended_by":["sym-f9fd6387097446254eb935c8"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.944Z","authors":[]}} +{"uuid":"sym-64f05073eb8b63e0b34daf41","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `Actor` in `src/features/activitypub/feditypes.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/activitypub/feditypes.ts","line_range":[10,17],"symbol_name":"Actor::api","language":"typescript","module_resolution_path":"@/features/activitypub/feditypes"},"relationships":{"depends_on":["sym-dbefc3247e30a5823c8b43ce"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.944Z","authors":[]}} +{"uuid":"sym-dbefc3247e30a5823c8b43ce","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Actor (interface) exported from `src/features/activitypub/feditypes.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/activitypub/feditypes.ts","line_range":[10,17],"symbol_name":"Actor","language":"typescript","module_resolution_path":"@/features/activitypub/feditypes"},"relationships":{"depends_on":["mod-8dfd4cfe7c92238e8a295176"],"depended_by":["sym-64f05073eb8b63e0b34daf41"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.944Z","authors":[]}} +{"uuid":"sym-c4370920fdeb465ef17c8b21","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `Collection` in `src/features/activitypub/feditypes.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/activitypub/feditypes.ts","line_range":[19,23],"symbol_name":"Collection::api","language":"typescript","module_resolution_path":"@/features/activitypub/feditypes"},"relationships":{"depends_on":["sym-7188ccb0ba83016cd3801872"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.944Z","authors":[]}} +{"uuid":"sym-7188ccb0ba83016cd3801872","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Collection (interface) exported from `src/features/activitypub/feditypes.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/activitypub/feditypes.ts","line_range":[19,23],"symbol_name":"Collection","language":"typescript","module_resolution_path":"@/features/activitypub/feditypes"},"relationships":{"depends_on":["mod-8dfd4cfe7c92238e8a295176"],"depended_by":["sym-c4370920fdeb465ef17c8b21"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.944Z","authors":[]}} +{"uuid":"sym-6d351d10f2f5649ab968f2b2","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["initializeActivityPubObject (function) exported from `src/features/activitypub/feditypes.ts`.","TypeScript signature: (type: string) => ActivityPubObject."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/activitypub/feditypes.ts","line_range":[26,32],"symbol_name":"initializeActivityPubObject","language":"typescript","module_resolution_path":"@/features/activitypub/feditypes"},"relationships":{"depends_on":["mod-8dfd4cfe7c92238e8a295176"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-8372518a1ed84643b175aa1f","sym-a51c939dff4a5e40a1fec4f4"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.944Z","authors":[]}} +{"uuid":"sym-883a5cc83569ae7c58e412a3","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["initializeCollection (function) exported from `src/features/activitypub/feditypes.ts`.","TypeScript signature: () => Collection."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/activitypub/feditypes.ts","line_range":[35,41],"symbol_name":"initializeCollection","language":"typescript","module_resolution_path":"@/features/activitypub/feditypes"},"relationships":{"depends_on":["mod-8dfd4cfe7c92238e8a295176"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-f6143006b5bb02e58d1cdfd1","sym-93b583f25b39dd5043a57609","sym-6a61ddc900f83502ce966c87","sym-1dc16c4d97767da5a8ba92df","sym-8a36fd0bc7a6c7246c94552d","sym-b1ecce6dd13426331f10ff7a","sym-3ccaac6d613ab621d48c1bd6","sym-03d2f03f466628c99110c9fe","sym-e301425e702840c7c452eb5a","sym-65612d35e155d68ea523c22f","sym-94068717fb4cbb8a20aef4a9"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.944Z","authors":[]}} +{"uuid":"sym-8372518a1ed84643b175aa1f","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["activityPubObject (variable) exported from `src/features/activitypub/feditypes.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/activitypub/feditypes.ts","line_range":[44,44],"symbol_name":"activityPubObject","language":"typescript","module_resolution_path":"@/features/activitypub/feditypes"},"relationships":{"depends_on":["mod-8dfd4cfe7c92238e8a295176"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-6d351d10f2f5649ab968f2b2"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.944Z","authors":[]}} +{"uuid":"sym-a51c939dff4a5e40a1fec4f4","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["actor (variable) exported from `src/features/activitypub/feditypes.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/activitypub/feditypes.ts","line_range":[45,53],"symbol_name":"actor","language":"typescript","module_resolution_path":"@/features/activitypub/feditypes"},"relationships":{"depends_on":["mod-8dfd4cfe7c92238e8a295176"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-6d351d10f2f5649ab968f2b2"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.944Z","authors":[]}} +{"uuid":"sym-f6143006b5bb02e58d1cdfd1","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["collection (variable) exported from `src/features/activitypub/feditypes.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/activitypub/feditypes.ts","line_range":[54,54],"symbol_name":"collection","language":"typescript","module_resolution_path":"@/features/activitypub/feditypes"},"relationships":{"depends_on":["mod-8dfd4cfe7c92238e8a295176"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-883a5cc83569ae7c58e412a3"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.944Z","authors":[]}} +{"uuid":"sym-93b583f25b39dd5043a57609","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["inbox (variable) exported from `src/features/activitypub/feditypes.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/activitypub/feditypes.ts","line_range":[55,55],"symbol_name":"inbox","language":"typescript","module_resolution_path":"@/features/activitypub/feditypes"},"relationships":{"depends_on":["mod-8dfd4cfe7c92238e8a295176"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-883a5cc83569ae7c58e412a3"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.944Z","authors":[]}} +{"uuid":"sym-6a61ddc900f83502ce966c87","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["outbox (variable) exported from `src/features/activitypub/feditypes.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/activitypub/feditypes.ts","line_range":[56,56],"symbol_name":"outbox","language":"typescript","module_resolution_path":"@/features/activitypub/feditypes"},"relationships":{"depends_on":["mod-8dfd4cfe7c92238e8a295176"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-883a5cc83569ae7c58e412a3"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.944Z","authors":[]}} +{"uuid":"sym-1dc16c4d97767da5a8ba92df","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["followers (variable) exported from `src/features/activitypub/feditypes.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/activitypub/feditypes.ts","line_range":[57,57],"symbol_name":"followers","language":"typescript","module_resolution_path":"@/features/activitypub/feditypes"},"relationships":{"depends_on":["mod-8dfd4cfe7c92238e8a295176"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-883a5cc83569ae7c58e412a3"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.944Z","authors":[]}} +{"uuid":"sym-8a36fd0bc7a6c7246c94552d","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["following (variable) exported from `src/features/activitypub/feditypes.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/activitypub/feditypes.ts","line_range":[58,58],"symbol_name":"following","language":"typescript","module_resolution_path":"@/features/activitypub/feditypes"},"relationships":{"depends_on":["mod-8dfd4cfe7c92238e8a295176"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-883a5cc83569ae7c58e412a3"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.944Z","authors":[]}} +{"uuid":"sym-b1ecce6dd13426331f10ff7a","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["liked (variable) exported from `src/features/activitypub/feditypes.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/activitypub/feditypes.ts","line_range":[59,59],"symbol_name":"liked","language":"typescript","module_resolution_path":"@/features/activitypub/feditypes"},"relationships":{"depends_on":["mod-8dfd4cfe7c92238e8a295176"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-883a5cc83569ae7c58e412a3"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.944Z","authors":[]}} +{"uuid":"sym-3ccaac6d613ab621d48c1bd6","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["blocked (variable) exported from `src/features/activitypub/feditypes.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/activitypub/feditypes.ts","line_range":[60,60],"symbol_name":"blocked","language":"typescript","module_resolution_path":"@/features/activitypub/feditypes"},"relationships":{"depends_on":["mod-8dfd4cfe7c92238e8a295176"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-883a5cc83569ae7c58e412a3"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.944Z","authors":[]}} +{"uuid":"sym-03d2f03f466628c99110c9fe","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["rejections (variable) exported from `src/features/activitypub/feditypes.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/activitypub/feditypes.ts","line_range":[61,61],"symbol_name":"rejections","language":"typescript","module_resolution_path":"@/features/activitypub/feditypes"},"relationships":{"depends_on":["mod-8dfd4cfe7c92238e8a295176"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-883a5cc83569ae7c58e412a3"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.944Z","authors":[]}} +{"uuid":"sym-e301425e702840c7c452eb5a","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["rejected (variable) exported from `src/features/activitypub/feditypes.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/activitypub/feditypes.ts","line_range":[62,62],"symbol_name":"rejected","language":"typescript","module_resolution_path":"@/features/activitypub/feditypes"},"relationships":{"depends_on":["mod-8dfd4cfe7c92238e8a295176"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-883a5cc83569ae7c58e412a3"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.944Z","authors":[]}} +{"uuid":"sym-65612d35e155d68ea523c22f","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["shares (variable) exported from `src/features/activitypub/feditypes.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/activitypub/feditypes.ts","line_range":[63,63],"symbol_name":"shares","language":"typescript","module_resolution_path":"@/features/activitypub/feditypes"},"relationships":{"depends_on":["mod-8dfd4cfe7c92238e8a295176"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-883a5cc83569ae7c58e412a3"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.944Z","authors":[]}} +{"uuid":"sym-94068717fb4cbb8a20aef4a9","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["likes (variable) exported from `src/features/activitypub/feditypes.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/activitypub/feditypes.ts","line_range":[64,64],"symbol_name":"likes","language":"typescript","module_resolution_path":"@/features/activitypub/feditypes"},"relationships":{"depends_on":["mod-8dfd4cfe7c92238e8a295176"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-883a5cc83569ae7c58e412a3"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.944Z","authors":[]}} +{"uuid":"sym-73813058cbafe75d8bc014cb","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BRIDGE_PROTOCOLS (variable) exported from `src/features/bridges/bridgeUtils.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/bridges/bridgeUtils.ts","line_range":[4,11],"symbol_name":"BRIDGE_PROTOCOLS","language":"typescript","module_resolution_path":"@/features/bridges/bridgeUtils"},"relationships":{"depends_on":["mod-dba449d7aefb98c5518cd61d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["rubic-sdk","env:RUBIC_API_INTEGRATOR_ADDRESS","env:RUBIC_API_REFERRER_ADDRESS"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.944Z","authors":[]}} +{"uuid":"sym-72b80bba0d6d6f79a03804c0","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RUBIC_API_REFERRER_ADDRESS (variable) exported from `src/features/bridges/bridgeUtils.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/bridges/bridgeUtils.ts","line_range":[13,14],"symbol_name":"RUBIC_API_REFERRER_ADDRESS","language":"typescript","module_resolution_path":"@/features/bridges/bridgeUtils"},"relationships":{"depends_on":["mod-dba449d7aefb98c5518cd61d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["rubic-sdk","env:RUBIC_API_INTEGRATOR_ADDRESS","env:RUBIC_API_REFERRER_ADDRESS"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.944Z","authors":[]}} +{"uuid":"sym-6e63a24523fe42cfb5e7eb17","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RUBIC_API_INTEGRATOR_ADDRESS (variable) exported from `src/features/bridges/bridgeUtils.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/bridges/bridgeUtils.ts","line_range":[15,17],"symbol_name":"RUBIC_API_INTEGRATOR_ADDRESS","language":"typescript","module_resolution_path":"@/features/bridges/bridgeUtils"},"relationships":{"depends_on":["mod-dba449d7aefb98c5518cd61d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["rubic-sdk","env:RUBIC_API_INTEGRATOR_ADDRESS","env:RUBIC_API_REFERRER_ADDRESS"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.944Z","authors":[]}} +{"uuid":"sym-593116d1b2ae359f4e87ea11","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RUBIC_API_V2_BASE_URL (variable) exported from `src/features/bridges/bridgeUtils.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/bridges/bridgeUtils.ts","line_range":[18,18],"symbol_name":"RUBIC_API_V2_BASE_URL","language":"typescript","module_resolution_path":"@/features/bridges/bridgeUtils"},"relationships":{"depends_on":["mod-dba449d7aefb98c5518cd61d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["rubic-sdk","env:RUBIC_API_INTEGRATOR_ADDRESS","env:RUBIC_API_REFERRER_ADDRESS"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.944Z","authors":[]}} +{"uuid":"sym-435a8eb4599ff7a416f89497","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RUBIC_API_V2_ROUTES (variable) exported from `src/features/bridges/bridgeUtils.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/bridges/bridgeUtils.ts","line_range":[19,22],"symbol_name":"RUBIC_API_V2_ROUTES","language":"typescript","module_resolution_path":"@/features/bridges/bridgeUtils"},"relationships":{"depends_on":["mod-dba449d7aefb98c5518cd61d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["rubic-sdk","env:RUBIC_API_INTEGRATOR_ADDRESS","env:RUBIC_API_REFERRER_ADDRESS"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.944Z","authors":[]}} +{"uuid":"sym-f87642844d289130eabd697d","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ExtendedCrossChainManagerCalculationOptions` in `src/features/bridges/bridgeUtils.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/bridges/bridgeUtils.ts","line_range":[24,27],"symbol_name":"ExtendedCrossChainManagerCalculationOptions::api","language":"typescript","module_resolution_path":"@/features/bridges/bridgeUtils"},"relationships":{"depends_on":["sym-dedd79d84d7229103a1ddb7a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["rubic-sdk","env:RUBIC_API_INTEGRATOR_ADDRESS","env:RUBIC_API_REFERRER_ADDRESS"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.944Z","authors":[]}} +{"uuid":"sym-dedd79d84d7229103a1ddb7a","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ExtendedCrossChainManagerCalculationOptions (interface) exported from `src/features/bridges/bridgeUtils.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/bridges/bridgeUtils.ts","line_range":[24,27],"symbol_name":"ExtendedCrossChainManagerCalculationOptions","language":"typescript","module_resolution_path":"@/features/bridges/bridgeUtils"},"relationships":{"depends_on":["mod-dba449d7aefb98c5518cd61d"],"depended_by":["sym-f87642844d289130eabd697d"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["rubic-sdk","env:RUBIC_API_INTEGRATOR_ADDRESS","env:RUBIC_API_REFERRER_ADDRESS"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.944Z","authors":[]}} +{"uuid":"sym-7adc23abf4e8a8acec688f93","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `BlockchainName` in `src/features/bridges/bridgeUtils.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/bridges/bridgeUtils.ts","line_range":[29,30],"symbol_name":"BlockchainName::api","language":"typescript","module_resolution_path":"@/features/bridges/bridgeUtils"},"relationships":{"depends_on":["sym-7f14f88347bcca244cf8a411"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["rubic-sdk","env:RUBIC_API_INTEGRATOR_ADDRESS","env:RUBIC_API_REFERRER_ADDRESS"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.944Z","authors":[]}} +{"uuid":"sym-7f14f88347bcca244cf8a411","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BlockchainName (type) exported from `src/features/bridges/bridgeUtils.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/bridges/bridgeUtils.ts","line_range":[29,30],"symbol_name":"BlockchainName","language":"typescript","module_resolution_path":"@/features/bridges/bridgeUtils"},"relationships":{"depends_on":["mod-dba449d7aefb98c5518cd61d"],"depended_by":["sym-7adc23abf4e8a8acec688f93"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["rubic-sdk","env:RUBIC_API_INTEGRATOR_ADDRESS","env:RUBIC_API_REFERRER_ADDRESS"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.944Z","authors":[]}} +{"uuid":"sym-c982f2f82f706d9d86aea680","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `BridgeProtocol` in `src/features/bridges/bridgeUtils.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/bridges/bridgeUtils.ts","line_range":[32,32],"symbol_name":"BridgeProtocol::api","language":"typescript","module_resolution_path":"@/features/bridges/bridgeUtils"},"relationships":{"depends_on":["sym-3a341cd97aa6d9e263ab4efe"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["rubic-sdk","env:RUBIC_API_INTEGRATOR_ADDRESS","env:RUBIC_API_REFERRER_ADDRESS"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.944Z","authors":[]}} +{"uuid":"sym-3a341cd97aa6d9e263ab4efe","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BridgeProtocol (type) exported from `src/features/bridges/bridgeUtils.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/bridges/bridgeUtils.ts","line_range":[32,32],"symbol_name":"BridgeProtocol","language":"typescript","module_resolution_path":"@/features/bridges/bridgeUtils"},"relationships":{"depends_on":["mod-dba449d7aefb98c5518cd61d"],"depended_by":["sym-c982f2f82f706d9d86aea680"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["rubic-sdk","env:RUBIC_API_INTEGRATOR_ADDRESS","env:RUBIC_API_REFERRER_ADDRESS"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.944Z","authors":[]}} +{"uuid":"sym-05e822a8c9768075cd3112d1","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `BridgeContext` in `src/features/bridges/bridges.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/bridges/bridges.ts","line_range":[3,13],"symbol_name":"BridgeContext::api","language":"typescript","module_resolution_path":"@/features/bridges/bridges"},"relationships":{"depends_on":["sym-55f1e23922682c986d5e78a8"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.945Z","authors":[]}} +{"uuid":"sym-55f1e23922682c986d5e78a8","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BridgeContext (interface) exported from `src/features/bridges/bridges.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/bridges/bridges.ts","line_range":[3,13],"symbol_name":"BridgeContext","language":"typescript","module_resolution_path":"@/features/bridges/bridges"},"relationships":{"depends_on":["mod-5284e69a41b77e33ceb347d7"],"depended_by":["sym-05e822a8c9768075cd3112d1"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.945Z","authors":[]}} +{"uuid":"sym-75bce596d3a3b20b32eae3a9","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `BridgeOperation` in `src/features/bridges/bridges.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/bridges/bridges.ts","line_range":[16,26],"symbol_name":"BridgeOperation::api","language":"typescript","module_resolution_path":"@/features/bridges/bridges"},"relationships":{"depends_on":["sym-f8a68c982e390715737b8a34"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.945Z","authors":[]}} +{"uuid":"sym-f8a68c982e390715737b8a34","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BridgeOperation (interface) exported from `src/features/bridges/bridges.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/bridges/bridges.ts","line_range":[16,26],"symbol_name":"BridgeOperation","language":"typescript","module_resolution_path":"@/features/bridges/bridges"},"relationships":{"depends_on":["mod-5284e69a41b77e33ceb347d7"],"depended_by":["sym-75bce596d3a3b20b32eae3a9"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.945Z","authors":[]}} +{"uuid":"sym-2d3d0f8001aa1e3e157f6635","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `BridgeOperationResult` in `src/features/bridges/bridges.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/bridges/bridges.ts","line_range":[30,35],"symbol_name":"BridgeOperationResult::api","language":"typescript","module_resolution_path":"@/features/bridges/bridges"},"relationships":{"depends_on":["sym-04bc154da92633243986d7b2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.945Z","authors":[]}} +{"uuid":"sym-04bc154da92633243986d7b2","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BridgeOperationResult (interface) exported from `src/features/bridges/bridges.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/bridges/bridges.ts","line_range":[30,35],"symbol_name":"BridgeOperationResult","language":"typescript","module_resolution_path":"@/features/bridges/bridges"},"relationships":{"depends_on":["mod-5284e69a41b77e33ceb347d7"],"depended_by":["sym-2d3d0f8001aa1e3e157f6635"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.945Z","authors":[]}} +{"uuid":"sym-9ec9d14b420c136f2ad055ab","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Bridge (re_export) exported from `src/features/bridges/bridges.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/bridges/bridges.ts","line_range":[113,113],"symbol_name":"Bridge","language":"typescript","module_resolution_path":"@/features/bridges/bridges"},"relationships":{"depends_on":["mod-5284e69a41b77e33ceb347d7"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.945Z","authors":[]}} +{"uuid":"sym-22888f94aabf4d19027aa29a","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["BridgesControls (re_export) exported from `src/features/bridges/bridges.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/bridges/bridges.ts","line_range":[113,113],"symbol_name":"BridgesControls","language":"typescript","module_resolution_path":"@/features/bridges/bridges"},"relationships":{"depends_on":["mod-5284e69a41b77e33ceb347d7"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.945Z","authors":[]}} +{"uuid":"sym-476f58f0f712fc1238cd3339","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `RubicService` in `src/features/bridges/rubic.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/bridges/rubic.ts","line_range":[21,212],"symbol_name":"RubicService::api","language":"typescript","module_resolution_path":"@/features/bridges/rubic"},"relationships":{"depends_on":["sym-28727c3b132db5057f5a96ec"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["web3","rubic-sdk","@kynesyslabs/demosdk/types","@solana/web3.js"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.945Z","authors":[]}} +{"uuid":"sym-c24ee6e9b89588b68d37c5a7","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RubicService.getTokenAddress method on exported class `RubicService` in `src/features/bridges/rubic.ts`.","TypeScript signature: (chainId: number, symbol: \"NATIVE\" | \"USDC\" | \"USDT\") => string."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/bridges/rubic.ts","line_range":[22,28],"symbol_name":"RubicService.getTokenAddress","language":"typescript","module_resolution_path":"@/features/bridges/rubic"},"relationships":{"depends_on":["sym-28727c3b132db5057f5a96ec"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["web3","rubic-sdk","@kynesyslabs/demosdk/types","@solana/web3.js"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.945Z","authors":[]}} +{"uuid":"sym-b058a864b0147b40ef22dc34","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RubicService.getQuoteFromApi method on exported class `RubicService` in `src/features/bridges/rubic.ts`.","TypeScript signature: (payload: BridgeTradePayload) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/bridges/rubic.ts","line_range":[36,79],"symbol_name":"RubicService.getQuoteFromApi","language":"typescript","module_resolution_path":"@/features/bridges/rubic"},"relationships":{"depends_on":["sym-28727c3b132db5057f5a96ec"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["web3","rubic-sdk","@kynesyslabs/demosdk/types","@solana/web3.js"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.945Z","authors":[]}} +{"uuid":"sym-182e4b2c4ed82c4649e788c8","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RubicService.getSwapDataFromApi method on exported class `RubicService` in `src/features/bridges/rubic.ts`.","TypeScript signature: (payload: BridgeTradePayload & {\n fromAddress: string\n toAddress?: string\n quoteId: string\n }) => unknown."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/bridges/rubic.ts","line_range":[87,150],"symbol_name":"RubicService.getSwapDataFromApi","language":"typescript","module_resolution_path":"@/features/bridges/rubic"},"relationships":{"depends_on":["sym-28727c3b132db5057f5a96ec"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["web3","rubic-sdk","@kynesyslabs/demosdk/types","@solana/web3.js"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.945Z","authors":[]}} +{"uuid":"sym-8189287fafe28f1a29259bb6","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RubicService.sendRawTransaction method on exported class `RubicService` in `src/features/bridges/rubic.ts`.","TypeScript signature: (rawTx: string, chainId: number) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/bridges/rubic.ts","line_range":[158,186],"symbol_name":"RubicService.sendRawTransaction","language":"typescript","module_resolution_path":"@/features/bridges/rubic"},"relationships":{"depends_on":["sym-28727c3b132db5057f5a96ec"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["web3","rubic-sdk","@kynesyslabs/demosdk/types","@solana/web3.js"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.945Z","authors":[]}} +{"uuid":"sym-2fb5f502d3c62d4198da0ce5","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RubicService.getBlockchainName method on exported class `RubicService` in `src/features/bridges/rubic.ts`.","TypeScript signature: (chainId: number) => BlockchainName."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/bridges/rubic.ts","line_range":[188,211],"symbol_name":"RubicService.getBlockchainName","language":"typescript","module_resolution_path":"@/features/bridges/rubic"},"relationships":{"depends_on":["sym-28727c3b132db5057f5a96ec"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["web3","rubic-sdk","@kynesyslabs/demosdk/types","@solana/web3.js"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.945Z","authors":[]}} +{"uuid":"sym-28727c3b132db5057f5a96ec","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RubicService (class) exported from `src/features/bridges/rubic.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/bridges/rubic.ts","line_range":[21,212],"symbol_name":"RubicService","language":"typescript","module_resolution_path":"@/features/bridges/rubic"},"relationships":{"depends_on":["mod-0bdba6781d714c651de05352"],"depended_by":["sym-476f58f0f712fc1238cd3339","sym-c24ee6e9b89588b68d37c5a7","sym-b058a864b0147b40ef22dc34","sym-182e4b2c4ed82c4649e788c8","sym-8189287fafe28f1a29259bb6","sym-2fb5f502d3c62d4198da0ce5"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["web3","rubic-sdk","@kynesyslabs/demosdk/types","@solana/web3.js"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.945Z","authors":[]}} +{"uuid":"sym-cde4ce83d38070c40a1ce899","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `FHE` in `src/features/fhe/FHE.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/fhe/FHE.ts","line_range":[15,195],"symbol_name":"FHE::api","language":"typescript","module_resolution_path":"@/features/fhe/FHE"},"relationships":{"depends_on":["sym-31c33be12d870d49abebd5fa"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-seal","node-seal/implementation/batch-encoder","node-seal/implementation/cipher-text","node-seal/implementation/context","node-seal/implementation/decryptor","node-seal/implementation/encryption-parameters","node-seal/implementation/encryptor","node-seal/implementation/evaluator","node-seal/implementation/key-generator","node-seal/implementation/public-key","node-seal/implementation/seal","node-seal/implementation/secret-key"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.945Z","authors":[]}} +{"uuid":"sym-5d646fd1cfe0e17cb51346f1","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["FHE.getInstance method on exported class `FHE` in `src/features/fhe/FHE.ts`.","TypeScript signature: () => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/fhe/FHE.ts","line_range":[44,51],"symbol_name":"FHE.getInstance","language":"typescript","module_resolution_path":"@/features/fhe/FHE"},"relationships":{"depends_on":["sym-31c33be12d870d49abebd5fa"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node-seal","node-seal/implementation/batch-encoder","node-seal/implementation/cipher-text","node-seal/implementation/context","node-seal/implementation/decryptor","node-seal/implementation/encryption-parameters","node-seal/implementation/encryptor","node-seal/implementation/evaluator","node-seal/implementation/key-generator","node-seal/implementation/public-key","node-seal/implementation/seal","node-seal/implementation/secret-key"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.945Z","authors":[]}} +{"uuid":"sym-b9b90d82b944c88c1ab58de0","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["FHE.call method on exported class `FHE` in `src/features/fhe/FHE.ts`.","TypeScript signature: (methodName: string, [cipherText1, cipherText2]: any[]) => unknown."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/fhe/FHE.ts","line_range":[187,194],"symbol_name":"FHE.call","language":"typescript","module_resolution_path":"@/features/fhe/FHE"},"relationships":{"depends_on":["sym-31c33be12d870d49abebd5fa"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node-seal","node-seal/implementation/batch-encoder","node-seal/implementation/cipher-text","node-seal/implementation/context","node-seal/implementation/decryptor","node-seal/implementation/encryption-parameters","node-seal/implementation/encryptor","node-seal/implementation/evaluator","node-seal/implementation/key-generator","node-seal/implementation/public-key","node-seal/implementation/seal","node-seal/implementation/secret-key"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.945Z","authors":[]}} +{"uuid":"sym-31c33be12d870d49abebd5fa","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["FHE (class) exported from `src/features/fhe/FHE.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/fhe/FHE.ts","line_range":[15,195],"symbol_name":"FHE","language":"typescript","module_resolution_path":"@/features/fhe/FHE"},"relationships":{"depends_on":["mod-966e17be37a66604fed3722e"],"depended_by":["sym-cde4ce83d38070c40a1ce899","sym-5d646fd1cfe0e17cb51346f1","sym-b9b90d82b944c88c1ab58de0"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-seal","node-seal/implementation/batch-encoder","node-seal/implementation/cipher-text","node-seal/implementation/context","node-seal/implementation/decryptor","node-seal/implementation/encryption-parameters","node-seal/implementation/encryptor","node-seal/implementation/evaluator","node-seal/implementation/key-generator","node-seal/implementation/public-key","node-seal/implementation/seal","node-seal/implementation/secret-key"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.945Z","authors":[]}} +{"uuid":"sym-d0d64d4fc8e8d4b4ec31835f","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `PointSystem` in `src/features/incentive/PointSystem.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/incentive/PointSystem.ts","line_range":[26,1649],"symbol_name":"PointSystem::api","language":"typescript","module_resolution_path":"@/features/incentive/PointSystem"},"relationships":{"depends_on":["sym-3f102a31789c1c42742dd190"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/abstraction"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-7bf629517168329e74c2bd32","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PointSystem.getInstance method on exported class `PointSystem` in `src/features/incentive/PointSystem.ts`.","TypeScript signature: () => PointSystem."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/incentive/PointSystem.ts","line_range":[31,36],"symbol_name":"PointSystem.getInstance","language":"typescript","module_resolution_path":"@/features/incentive/PointSystem"},"relationships":{"depends_on":["sym-3f102a31789c1c42742dd190"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/abstraction"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-b29e811fe491350308ac06b8","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PointSystem.getUserPoints method on exported class `PointSystem` in `src/features/incentive/PointSystem.ts`.","TypeScript signature: (userId: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/incentive/PointSystem.ts","line_range":[367,388],"symbol_name":"PointSystem.getUserPoints","language":"typescript","module_resolution_path":"@/features/incentive/PointSystem"},"relationships":{"depends_on":["sym-3f102a31789c1c42742dd190"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/abstraction"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-ff86ceaf6364a62d78d53ed6","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PointSystem.awardWeb3WalletPoints method on exported class `PointSystem` in `src/features/incentive/PointSystem.ts`.","TypeScript signature: (userId: string, walletAddress: string, chain: string, referralCode: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/incentive/PointSystem.ts","line_range":[398,486],"symbol_name":"PointSystem.awardWeb3WalletPoints","language":"typescript","module_resolution_path":"@/features/incentive/PointSystem"},"relationships":{"depends_on":["sym-3f102a31789c1c42742dd190"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/abstraction"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-6995a8f5087f01da57510a6e","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PointSystem.awardTwitterPoints method on exported class `PointSystem` in `src/features/incentive/PointSystem.ts`.","TypeScript signature: (userId: string, twitterUserId: string, referralCode: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/incentive/PointSystem.ts","line_range":[494,550],"symbol_name":"PointSystem.awardTwitterPoints","language":"typescript","module_resolution_path":"@/features/incentive/PointSystem"},"relationships":{"depends_on":["sym-3f102a31789c1c42742dd190"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/abstraction"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-0555c3e21f71d512bf2aa06d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PointSystem.awardGithubPoints method on exported class `PointSystem` in `src/features/incentive/PointSystem.ts`.","TypeScript signature: (userId: string, githubUserId: string, referralCode: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/incentive/PointSystem.ts","line_range":[559,637],"symbol_name":"PointSystem.awardGithubPoints","language":"typescript","module_resolution_path":"@/features/incentive/PointSystem"},"relationships":{"depends_on":["sym-3f102a31789c1c42742dd190"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/abstraction"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-088e4feca2d65625730710af","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PointSystem.deductWeb3WalletPoints method on exported class `PointSystem` in `src/features/incentive/PointSystem.ts`.","TypeScript signature: (userId: string, walletAddress: string, chain: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/incentive/PointSystem.ts","line_range":[647,685],"symbol_name":"PointSystem.deductWeb3WalletPoints","language":"typescript","module_resolution_path":"@/features/incentive/PointSystem"},"relationships":{"depends_on":["sym-3f102a31789c1c42742dd190"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/abstraction"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-ff403e1dfce4c56345763593","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PointSystem.deductTwitterPoints method on exported class `PointSystem` in `src/features/incentive/PointSystem.ts`.","TypeScript signature: (userId: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/incentive/PointSystem.ts","line_range":[693,757],"symbol_name":"PointSystem.deductTwitterPoints","language":"typescript","module_resolution_path":"@/features/incentive/PointSystem"},"relationships":{"depends_on":["sym-3f102a31789c1c42742dd190"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/abstraction"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-9b067f8328467594edb11d13","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PointSystem.deductGithubPoints method on exported class `PointSystem` in `src/features/incentive/PointSystem.ts`.","TypeScript signature: (userId: string, githubUserId: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/incentive/PointSystem.ts","line_range":[765,820],"symbol_name":"PointSystem.deductGithubPoints","language":"typescript","module_resolution_path":"@/features/incentive/PointSystem"},"relationships":{"depends_on":["sym-3f102a31789c1c42742dd190"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/abstraction"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-abd0fb38bc1e2e1d78131296","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PointSystem.awardTelegramPoints method on exported class `PointSystem` in `src/features/incentive/PointSystem.ts`.","TypeScript signature: (userId: string, telegramUserId: string, referralCode: string, attestation: any) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/incentive/PointSystem.ts","line_range":[830,933],"symbol_name":"PointSystem.awardTelegramPoints","language":"typescript","module_resolution_path":"@/features/incentive/PointSystem"},"relationships":{"depends_on":["sym-3f102a31789c1c42742dd190"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/abstraction"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-4b53ce0334c9ff70017d9dc3","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PointSystem.awardTelegramTLSNPoints method on exported class `PointSystem` in `src/features/incentive/PointSystem.ts`.","TypeScript signature: (userId: string, telegramUserId: string, referralCode: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/incentive/PointSystem.ts","line_range":[942,1022],"symbol_name":"PointSystem.awardTelegramTLSNPoints","language":"typescript","module_resolution_path":"@/features/incentive/PointSystem"},"relationships":{"depends_on":["sym-3f102a31789c1c42742dd190"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/abstraction"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-bc3b3eca912b76099c1af0ea","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PointSystem.deductTelegramPoints method on exported class `PointSystem` in `src/features/incentive/PointSystem.ts`.","TypeScript signature: (userId: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/incentive/PointSystem.ts","line_range":[1030,1082],"symbol_name":"PointSystem.deductTelegramPoints","language":"typescript","module_resolution_path":"@/features/incentive/PointSystem"},"relationships":{"depends_on":["sym-3f102a31789c1c42742dd190"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/abstraction"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-77782c5a42eb69b7fd33faae","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PointSystem.awardDiscordPoints method on exported class `PointSystem` in `src/features/incentive/PointSystem.ts`.","TypeScript signature: (userId: string, referralCode: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/incentive/PointSystem.ts","line_range":[1090,1164],"symbol_name":"PointSystem.awardDiscordPoints","language":"typescript","module_resolution_path":"@/features/incentive/PointSystem"},"relationships":{"depends_on":["sym-3f102a31789c1c42742dd190"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/abstraction"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-f9cb8e510b8cba2d08e78e80","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PointSystem.deductDiscordPoints method on exported class `PointSystem` in `src/features/incentive/PointSystem.ts`.","TypeScript signature: (userId: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/incentive/PointSystem.ts","line_range":[1171,1223],"symbol_name":"PointSystem.deductDiscordPoints","language":"typescript","module_resolution_path":"@/features/incentive/PointSystem"},"relationships":{"depends_on":["sym-3f102a31789c1c42742dd190"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/abstraction"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-bc376883c47b9974b3f9b40c","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PointSystem.awardUdDomainPoints method on exported class `PointSystem` in `src/features/incentive/PointSystem.ts`.","TypeScript signature: (userId: string, domain: string, signingAddress: string, referralCode: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/incentive/PointSystem.ts","line_range":[1232,1347],"symbol_name":"PointSystem.awardUdDomainPoints","language":"typescript","module_resolution_path":"@/features/incentive/PointSystem"},"relationships":{"depends_on":["sym-3f102a31789c1c42742dd190"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/abstraction"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-9385a1b99111b59f02ea3be7","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PointSystem.deductUdDomainPoints method on exported class `PointSystem` in `src/features/incentive/PointSystem.ts`.","TypeScript signature: (userId: string, domain: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/incentive/PointSystem.ts","line_range":[1355,1430],"symbol_name":"PointSystem.deductUdDomainPoints","language":"typescript","module_resolution_path":"@/features/incentive/PointSystem"},"relationships":{"depends_on":["sym-3f102a31789c1c42742dd190"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/abstraction"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-0f0d4600642782084b3b828a","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PointSystem.awardNomisScorePoints method on exported class `PointSystem` in `src/features/incentive/PointSystem.ts`.","TypeScript signature: (userId: string, chain: string, nomisScore: number, referralCode: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/incentive/PointSystem.ts","line_range":[1439,1561],"symbol_name":"PointSystem.awardNomisScorePoints","language":"typescript","module_resolution_path":"@/features/incentive/PointSystem"},"relationships":{"depends_on":["sym-3f102a31789c1c42742dd190"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/abstraction"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-2ee3f05cec0b12fa40875f34","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PointSystem.deductNomisScorePoints method on exported class `PointSystem` in `src/features/incentive/PointSystem.ts`.","TypeScript signature: (userId: string, chain: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/incentive/PointSystem.ts","line_range":[1570,1639],"symbol_name":"PointSystem.deductNomisScorePoints","language":"typescript","module_resolution_path":"@/features/incentive/PointSystem"},"relationships":{"depends_on":["sym-3f102a31789c1c42742dd190"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/abstraction"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-3f102a31789c1c42742dd190","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PointSystem (class) exported from `src/features/incentive/PointSystem.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/incentive/PointSystem.ts","line_range":[26,1649],"symbol_name":"PointSystem","language":"typescript","module_resolution_path":"@/features/incentive/PointSystem"},"relationships":{"depends_on":["mod-09e939d9272236688a28974a"],"depended_by":["sym-d0d64d4fc8e8d4b4ec31835f","sym-7bf629517168329e74c2bd32","sym-b29e811fe491350308ac06b8","sym-ff86ceaf6364a62d78d53ed6","sym-6995a8f5087f01da57510a6e","sym-0555c3e21f71d512bf2aa06d","sym-088e4feca2d65625730710af","sym-ff403e1dfce4c56345763593","sym-9b067f8328467594edb11d13","sym-abd0fb38bc1e2e1d78131296","sym-4b53ce0334c9ff70017d9dc3","sym-bc3b3eca912b76099c1af0ea","sym-77782c5a42eb69b7fd33faae","sym-f9cb8e510b8cba2d08e78e80","sym-bc376883c47b9974b3f9b40c","sym-9385a1b99111b59f02ea3be7","sym-0f0d4600642782084b3b828a","sym-2ee3f05cec0b12fa40875f34"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/abstraction"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-209ff12f41847b166015e17c","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `Referrals` in `src/features/incentive/referrals.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/incentive/referrals.ts","line_range":[6,237],"symbol_name":"Referrals::api","language":"typescript","module_resolution_path":"@/features/incentive/referrals"},"relationships":{"depends_on":["sym-755339ce0913bac7334bd721"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bs58"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-94e5bb176f153bde3b6b48f1","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Referrals.generateReferralCode method on exported class `Referrals` in `src/features/incentive/referrals.ts`.","TypeScript signature: (publicKey: string, options: {\n length?: 8 | 10 | 12 | 16 // Explicit length options\n includeChecksum?: boolean // Add checksum for validation\n prefix?: string // Optional prefix\n }) => string."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/incentive/referrals.ts","line_range":[47,89],"symbol_name":"Referrals.generateReferralCode","language":"typescript","module_resolution_path":"@/features/incentive/referrals"},"relationships":{"depends_on":["sym-755339ce0913bac7334bd721"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bs58"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-d5346fe3bb91b90eb51eb9fa","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Referrals.findAccountByReferralCode method on exported class `Referrals` in `src/features/incentive/referrals.ts`.","TypeScript signature: (referralCode: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/incentive/referrals.ts","line_range":[94,108],"symbol_name":"Referrals.findAccountByReferralCode","language":"typescript","module_resolution_path":"@/features/incentive/referrals"},"relationships":{"depends_on":["sym-755339ce0913bac7334bd721"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["bs58"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-6ca98de3ad27618164209729","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Referrals.isAlreadyReferred method on exported class `Referrals` in `src/features/incentive/referrals.ts`.","TypeScript signature: (referrerAccount: GCRMain, newUserPubkey: string) => boolean."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/incentive/referrals.ts","line_range":[113,124],"symbol_name":"Referrals.isAlreadyReferred","language":"typescript","module_resolution_path":"@/features/incentive/referrals"},"relationships":{"depends_on":["sym-755339ce0913bac7334bd721"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bs58"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-b2460ed9e3b163b181092bcc","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Referrals.isEligibleForReferral method on exported class `Referrals` in `src/features/incentive/referrals.ts`.","TypeScript signature: (account: GCRMain) => boolean."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/incentive/referrals.ts","line_range":[129,150],"symbol_name":"Referrals.isEligibleForReferral","language":"typescript","module_resolution_path":"@/features/incentive/referrals"},"relationships":{"depends_on":["sym-755339ce0913bac7334bd721"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bs58"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-b87588e88bbf56a9c070e278","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Referrals.processReferral method on exported class `Referrals` in `src/features/incentive/referrals.ts`.","TypeScript signature: (newAccount: GCRMain, referralCode: string, gcrMainRepository: any) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/incentive/referrals.ts","line_range":[155,184],"symbol_name":"Referrals.processReferral","language":"typescript","module_resolution_path":"@/features/incentive/referrals"},"relationships":{"depends_on":["sym-755339ce0913bac7334bd721"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["bs58"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-755339ce0913bac7334bd721","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Referrals (class) exported from `src/features/incentive/referrals.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/incentive/referrals.ts","line_range":[6,237],"symbol_name":"Referrals","language":"typescript","module_resolution_path":"@/features/incentive/referrals"},"relationships":{"depends_on":["mod-08315e6901cb53376d13cc70"],"depended_by":["sym-209ff12f41847b166015e17c","sym-94e5bb176f153bde3b6b48f1","sym-d5346fe3bb91b90eb51eb9fa","sym-6ca98de3ad27618164209729","sym-b2460ed9e3b163b181092bcc","sym-b87588e88bbf56a9c070e278"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bs58"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-6a818f9fd5c21fcf47ae40c4","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `MCPTransportType` in `src/features/mcp/MCPServer.ts`."],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/mcp/MCPServer.ts","line_range":[25,25],"symbol_name":"MCPTransportType::api","language":"typescript","module_resolution_path":"@/features/mcp/MCPServer"},"relationships":{"depends_on":["sym-df496a4e47a52c356dd44bd2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@modelcontextprotocol/sdk/server/index.js","@modelcontextprotocol/sdk/server/stdio.js","@modelcontextprotocol/sdk/server/sse.js","@modelcontextprotocol/sdk/types.js","zod","express","helmet","cors","http"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-df496a4e47a52c356dd44bd2","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MCPTransportType (type) exported from `src/features/mcp/MCPServer.ts`."],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/mcp/MCPServer.ts","line_range":[25,25],"symbol_name":"MCPTransportType","language":"typescript","module_resolution_path":"@/features/mcp/MCPServer"},"relationships":{"depends_on":["mod-cb6612b0371b0a6c53802c79"],"depended_by":["sym-6a818f9fd5c21fcf47ae40c4"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@modelcontextprotocol/sdk/server/index.js","@modelcontextprotocol/sdk/server/stdio.js","@modelcontextprotocol/sdk/server/sse.js","@modelcontextprotocol/sdk/types.js","zod","express","helmet","cors","http"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-b06a527d10cdb09ebee088fe","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `MCPServerConfig` in `src/features/mcp/MCPServer.ts`."],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/mcp/MCPServer.ts","line_range":[27,37],"symbol_name":"MCPServerConfig::api","language":"typescript","module_resolution_path":"@/features/mcp/MCPServer"},"relationships":{"depends_on":["sym-64c02007f5239e713862e1db"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@modelcontextprotocol/sdk/server/index.js","@modelcontextprotocol/sdk/server/stdio.js","@modelcontextprotocol/sdk/server/sse.js","@modelcontextprotocol/sdk/types.js","zod","express","helmet","cors","http"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-64c02007f5239e713862e1db","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MCPServerConfig (interface) exported from `src/features/mcp/MCPServer.ts`."],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/mcp/MCPServer.ts","line_range":[27,37],"symbol_name":"MCPServerConfig","language":"typescript","module_resolution_path":"@/features/mcp/MCPServer"},"relationships":{"depends_on":["mod-cb6612b0371b0a6c53802c79"],"depended_by":["sym-b06a527d10cdb09ebee088fe"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@modelcontextprotocol/sdk/server/index.js","@modelcontextprotocol/sdk/server/stdio.js","@modelcontextprotocol/sdk/server/sse.js","@modelcontextprotocol/sdk/types.js","zod","express","helmet","cors","http"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-339a2a1eb569d6c4680bbda8","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `MCPTool` in `src/features/mcp/MCPServer.ts`."],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/mcp/MCPServer.ts","line_range":[39,44],"symbol_name":"MCPTool::api","language":"typescript","module_resolution_path":"@/features/mcp/MCPServer"},"relationships":{"depends_on":["sym-9f409942f5777e727bcd79d0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@modelcontextprotocol/sdk/server/index.js","@modelcontextprotocol/sdk/server/stdio.js","@modelcontextprotocol/sdk/server/sse.js","@modelcontextprotocol/sdk/types.js","zod","express","helmet","cors","http"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-9f409942f5777e727bcd79d0","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MCPTool (interface) exported from `src/features/mcp/MCPServer.ts`."],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/mcp/MCPServer.ts","line_range":[39,44],"symbol_name":"MCPTool","language":"typescript","module_resolution_path":"@/features/mcp/MCPServer"},"relationships":{"depends_on":["mod-cb6612b0371b0a6c53802c79"],"depended_by":["sym-339a2a1eb569d6c4680bbda8"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@modelcontextprotocol/sdk/server/index.js","@modelcontextprotocol/sdk/server/stdio.js","@modelcontextprotocol/sdk/server/sse.js","@modelcontextprotocol/sdk/types.js","zod","express","helmet","cors","http"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-a2fe879a8fff114fb29f5cdb","level":"L3","extraction_confidence":0.87,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `MCPServerManager` in `src/features/mcp/MCPServer.ts`.","MCPServerManager - Manages MCP server lifecycle and tool registration"],"intent_vectors":["mcp","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/mcp/MCPServer.ts","line_range":[55,417],"symbol_name":"MCPServerManager::api","language":"typescript","module_resolution_path":"@/features/mcp/MCPServer"},"relationships":{"depends_on":["sym-ff5862c98f8ad4262dd9f150"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@modelcontextprotocol/sdk/server/index.js","@modelcontextprotocol/sdk/server/stdio.js","@modelcontextprotocol/sdk/server/sse.js","@modelcontextprotocol/sdk/types.js","zod","express","helmet","cors","http"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 46-54","related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-067794a5bdac5eb41b6783ce","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MCPServerManager.registerTool method on exported class `MCPServerManager` in `src/features/mcp/MCPServer.ts`.","TypeScript signature: (tool: MCPTool) => void."],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/mcp/MCPServer.ts","line_range":[169,176],"symbol_name":"MCPServerManager.registerTool","language":"typescript","module_resolution_path":"@/features/mcp/MCPServer"},"relationships":{"depends_on":["sym-ff5862c98f8ad4262dd9f150"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@modelcontextprotocol/sdk/server/index.js","@modelcontextprotocol/sdk/server/stdio.js","@modelcontextprotocol/sdk/server/sse.js","@modelcontextprotocol/sdk/types.js","zod","express","helmet","cors","http"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-e2d757f6294a7b7db7835f28","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MCPServerManager.unregisterTool method on exported class `MCPServerManager` in `src/features/mcp/MCPServer.ts`.","TypeScript signature: (toolName: string) => void."],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/mcp/MCPServer.ts","line_range":[183,193],"symbol_name":"MCPServerManager.unregisterTool","language":"typescript","module_resolution_path":"@/features/mcp/MCPServer"},"relationships":{"depends_on":["sym-ff5862c98f8ad4262dd9f150"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@modelcontextprotocol/sdk/server/index.js","@modelcontextprotocol/sdk/server/stdio.js","@modelcontextprotocol/sdk/server/sse.js","@modelcontextprotocol/sdk/types.js","zod","express","helmet","cors","http"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-f4915d23263a4a38cda16b6f","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MCPServerManager.start method on exported class `MCPServerManager` in `src/features/mcp/MCPServer.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/mcp/MCPServer.ts","line_range":[200,238],"symbol_name":"MCPServerManager.start","language":"typescript","module_resolution_path":"@/features/mcp/MCPServer"},"relationships":{"depends_on":["sym-ff5862c98f8ad4262dd9f150"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@modelcontextprotocol/sdk/server/index.js","@modelcontextprotocol/sdk/server/stdio.js","@modelcontextprotocol/sdk/server/sse.js","@modelcontextprotocol/sdk/types.js","zod","express","helmet","cors","http"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-4dd122b47d1fafd381209f0f","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MCPServerManager.stop method on exported class `MCPServerManager` in `src/features/mcp/MCPServer.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/mcp/MCPServer.ts","line_range":[336,376],"symbol_name":"MCPServerManager.stop","language":"typescript","module_resolution_path":"@/features/mcp/MCPServer"},"relationships":{"depends_on":["sym-ff5862c98f8ad4262dd9f150"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@modelcontextprotocol/sdk/server/index.js","@modelcontextprotocol/sdk/server/stdio.js","@modelcontextprotocol/sdk/server/sse.js","@modelcontextprotocol/sdk/types.js","zod","express","helmet","cors","http"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-5ec4994d7fb7b6b3ae9a0569","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MCPServerManager.getStatus method on exported class `MCPServerManager` in `src/features/mcp/MCPServer.ts`.","TypeScript signature: () => {\n isRunning: boolean\n toolCount: number\n serverName: string\n serverVersion: string\n }."],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/mcp/MCPServer.ts","line_range":[381,393],"symbol_name":"MCPServerManager.getStatus","language":"typescript","module_resolution_path":"@/features/mcp/MCPServer"},"relationships":{"depends_on":["sym-ff5862c98f8ad4262dd9f150"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@modelcontextprotocol/sdk/server/index.js","@modelcontextprotocol/sdk/server/stdio.js","@modelcontextprotocol/sdk/server/sse.js","@modelcontextprotocol/sdk/types.js","zod","express","helmet","cors","http"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-723d9c080f5c28442e40a92a","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MCPServerManager.getRegisteredTools method on exported class `MCPServerManager` in `src/features/mcp/MCPServer.ts`.","TypeScript signature: () => string[]."],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/mcp/MCPServer.ts","line_range":[398,400],"symbol_name":"MCPServerManager.getRegisteredTools","language":"typescript","module_resolution_path":"@/features/mcp/MCPServer"},"relationships":{"depends_on":["sym-ff5862c98f8ad4262dd9f150"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@modelcontextprotocol/sdk/server/index.js","@modelcontextprotocol/sdk/server/stdio.js","@modelcontextprotocol/sdk/server/sse.js","@modelcontextprotocol/sdk/types.js","zod","express","helmet","cors","http"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-ac52cb0edf8f80fa1d5943d9","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MCPServerManager.shutdown method on exported class `MCPServerManager` in `src/features/mcp/MCPServer.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/mcp/MCPServer.ts","line_range":[405,416],"symbol_name":"MCPServerManager.shutdown","language":"typescript","module_resolution_path":"@/features/mcp/MCPServer"},"relationships":{"depends_on":["sym-ff5862c98f8ad4262dd9f150"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@modelcontextprotocol/sdk/server/index.js","@modelcontextprotocol/sdk/server/stdio.js","@modelcontextprotocol/sdk/server/sse.js","@modelcontextprotocol/sdk/types.js","zod","express","helmet","cors","http"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-ff5862c98f8ad4262dd9f150","level":"L2","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MCPServerManager (class) exported from `src/features/mcp/MCPServer.ts`.","MCPServerManager - Manages MCP server lifecycle and tool registration"],"intent_vectors":["mcp","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/mcp/MCPServer.ts","line_range":[55,417],"symbol_name":"MCPServerManager","language":"typescript","module_resolution_path":"@/features/mcp/MCPServer"},"relationships":{"depends_on":["mod-cb6612b0371b0a6c53802c79"],"depended_by":["sym-a2fe879a8fff114fb29f5cdb","sym-067794a5bdac5eb41b6783ce","sym-e2d757f6294a7b7db7835f28","sym-f4915d23263a4a38cda16b6f","sym-4dd122b47d1fafd381209f0f","sym-5ec4994d7fb7b6b3ae9a0569","sym-723d9c080f5c28442e40a92a","sym-ac52cb0edf8f80fa1d5943d9"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@modelcontextprotocol/sdk/server/index.js","@modelcontextprotocol/sdk/server/stdio.js","@modelcontextprotocol/sdk/server/sse.js","@modelcontextprotocol/sdk/types.js","zod","express","helmet","cors","http"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 46-54","related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-718e6d8d70f9f926e9064096","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["createDemosMCPServer (function) exported from `src/features/mcp/MCPServer.ts`.","TypeScript signature: (options: {\n port?: number\n host?: string\n transport?: MCPTransportType\n}) => MCPServerManager.","Factory function to create a pre-configured MCP server for Demos Network"],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/mcp/MCPServer.ts","line_range":[422,446],"symbol_name":"createDemosMCPServer","language":"typescript","module_resolution_path":"@/features/mcp/MCPServer"},"relationships":{"depends_on":["mod-cb6612b0371b0a6c53802c79"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-3e3fab842036c0147cdb56ee","sym-b1b117fa3a6d894bb68dbdfb","sym-4a3d8ad1a77f9be2e1f5855d"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@modelcontextprotocol/sdk/server/index.js","@modelcontextprotocol/sdk/server/stdio.js","@modelcontextprotocol/sdk/server/sse.js","@modelcontextprotocol/sdk/types.js","zod","express","helmet","cors","http"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 419-421","related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-3e3fab842036c0147cdb56ee","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["setupRemoteMCPServer (function) exported from `src/features/mcp/examples/remoteExample.ts`.","TypeScript signature: (port: unknown, host: unknown) => unknown.","Sets up an MCP server with SSE transport for remote network access"],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/mcp/examples/remoteExample.ts","line_range":[33,67],"symbol_name":"setupRemoteMCPServer","language":"typescript","module_resolution_path":"@/features/mcp/examples/remoteExample"},"relationships":{"depends_on":["mod-462ce83c6905bcaa92b4f893"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-718e6d8d70f9f926e9064096"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 13-32","related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-b1b117fa3a6d894bb68dbdfb","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["setupLocalMCPServer (function) exported from `src/features/mcp/examples/remoteExample.ts`.","TypeScript signature: () => unknown.","Sets up an MCP server with stdio transport for local process communication"],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/mcp/examples/remoteExample.ts","line_range":[86,112],"symbol_name":"setupLocalMCPServer","language":"typescript","module_resolution_path":"@/features/mcp/examples/remoteExample"},"relationships":{"depends_on":["mod-462ce83c6905bcaa92b4f893"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-718e6d8d70f9f926e9064096"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 69-85","related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-6518ddb5bf692e5dc79df999","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["default (export_default) exported from `src/features/mcp/examples/remoteExample.ts`."],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/mcp/examples/remoteExample.ts","line_range":[114,114],"symbol_name":"default","language":"typescript","module_resolution_path":"@/features/mcp/examples/remoteExample"},"relationships":{"depends_on":["mod-462ce83c6905bcaa92b4f893"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-4a3d8ad1a77f9be2e1f5855d","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["setupDemosMCPServer (function) exported from `src/features/mcp/examples/simpleExample.ts`.","TypeScript signature: (options: {\n port?: number\n host?: string\n transport?: \"stdio\" | \"sse\"\n}) => unknown.","Example: Setting up MCP server with Demos Network tools"],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/mcp/examples/simpleExample.ts","line_range":[35,72],"symbol_name":"setupDemosMCPServer","language":"typescript","module_resolution_path":"@/features/mcp/examples/simpleExample"},"relationships":{"depends_on":["mod-b826ecdcb08532bf626dec5e"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-718e6d8d70f9f926e9064096"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 13-34","related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-dbb2421ec5e12a04cb4554bf","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["shutdownDemosMCPServer (function) exported from `src/features/mcp/examples/simpleExample.ts`.","TypeScript signature: (mcpServer: any) => unknown.","Gracefully shutdown an MCP server instance"],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/mcp/examples/simpleExample.ts","line_range":[92,100],"symbol_name":"shutdownDemosMCPServer","language":"typescript","module_resolution_path":"@/features/mcp/examples/simpleExample"},"relationships":{"depends_on":["mod-b826ecdcb08532bf626dec5e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 74-91","related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-a405536da4e1154d16dd67dd","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["default (export_default) exported from `src/features/mcp/examples/simpleExample.ts`."],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/mcp/examples/simpleExample.ts","line_range":[102,102],"symbol_name":"default","language":"typescript","module_resolution_path":"@/features/mcp/examples/simpleExample"},"relationships":{"depends_on":["mod-b826ecdcb08532bf626dec5e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-34946fb6c2cc5dbd7ae1d6d1","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["MCPServerManager (re_export) exported from `src/features/mcp/index.ts`."],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/mcp/index.ts","line_range":[39,39],"symbol_name":"MCPServerManager","language":"typescript","module_resolution_path":"@/features/mcp/index"},"relationships":{"depends_on":["mod-dc90a845649336ae35fd57a4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@modelcontextprotocol/sdk/types.js"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-a5f718702300aa3a1b6e9670","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["createDemosMCPServer (re_export) exported from `src/features/mcp/index.ts`."],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/mcp/index.ts","line_range":[40,40],"symbol_name":"createDemosMCPServer","language":"typescript","module_resolution_path":"@/features/mcp/index"},"relationships":{"depends_on":["mod-dc90a845649336ae35fd57a4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@modelcontextprotocol/sdk/types.js"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-120689569dff13e791a616c8","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["MCPServerConfig (re_export) exported from `src/features/mcp/index.ts`."],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/mcp/index.ts","line_range":[41,41],"symbol_name":"MCPServerConfig","language":"typescript","module_resolution_path":"@/features/mcp/index"},"relationships":{"depends_on":["mod-dc90a845649336ae35fd57a4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@modelcontextprotocol/sdk/types.js"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-b76ea08541bcf547d731520d","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["MCPTool (re_export) exported from `src/features/mcp/index.ts`."],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/mcp/index.ts","line_range":[42,42],"symbol_name":"MCPTool","language":"typescript","module_resolution_path":"@/features/mcp/index"},"relationships":{"depends_on":["mod-dc90a845649336ae35fd57a4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@modelcontextprotocol/sdk/types.js"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-c8bc37824a3f00b4db708df5","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["MCPTransportType (re_export) exported from `src/features/mcp/index.ts`."],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/mcp/index.ts","line_range":[43,43],"symbol_name":"MCPTransportType","language":"typescript","module_resolution_path":"@/features/mcp/index"},"relationships":{"depends_on":["mod-dc90a845649336ae35fd57a4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@modelcontextprotocol/sdk/types.js"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-b497e588d7117800565edd70","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["createDemosNetworkTools (re_export) exported from `src/features/mcp/index.ts`."],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/mcp/index.ts","line_range":[48,48],"symbol_name":"createDemosNetworkTools","language":"typescript","module_resolution_path":"@/features/mcp/index"},"relationships":{"depends_on":["mod-dc90a845649336ae35fd57a4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@modelcontextprotocol/sdk/types.js"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-9686ef766bebe88367bd5a98","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["DemosNetworkToolsConfig (re_export) exported from `src/features/mcp/index.ts`."],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/mcp/index.ts","line_range":[49,49],"symbol_name":"DemosNetworkToolsConfig","language":"typescript","module_resolution_path":"@/features/mcp/index"},"relationships":{"depends_on":["mod-dc90a845649336ae35fd57a4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@modelcontextprotocol/sdk/types.js"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-43560768d664ccc48d7626ef","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Tool (re_export) exported from `src/features/mcp/index.ts`."],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/mcp/index.ts","line_range":[54,54],"symbol_name":"Tool","language":"typescript","module_resolution_path":"@/features/mcp/index"},"relationships":{"depends_on":["mod-dc90a845649336ae35fd57a4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@modelcontextprotocol/sdk/types.js"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-b93468135cbb23c483ae9407","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["ServerCapabilities (re_export) exported from `src/features/mcp/index.ts`."],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/mcp/index.ts","line_range":[55,55],"symbol_name":"ServerCapabilities","language":"typescript","module_resolution_path":"@/features/mcp/index"},"relationships":{"depends_on":["mod-dc90a845649336ae35fd57a4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@modelcontextprotocol/sdk/types.js"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-6961c3ce5bea80c5e10fcfe9","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["CallToolRequest (re_export) exported from `src/features/mcp/index.ts`."],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/mcp/index.ts","line_range":[56,56],"symbol_name":"CallToolRequest","language":"typescript","module_resolution_path":"@/features/mcp/index"},"relationships":{"depends_on":["mod-dc90a845649336ae35fd57a4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@modelcontextprotocol/sdk/types.js"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-0e90fe9ca3e727a8bdbb6299","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["ListToolsRequest (re_export) exported from `src/features/mcp/index.ts`."],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/mcp/index.ts","line_range":[57,57],"symbol_name":"ListToolsRequest","language":"typescript","module_resolution_path":"@/features/mcp/index"},"relationships":{"depends_on":["mod-dc90a845649336ae35fd57a4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@modelcontextprotocol/sdk/types.js"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-b78e473ee66613e6c4a99edd","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `DemosNetworkToolsConfig` in `src/features/mcp/tools/demosTools.ts`.","Configuration options for Demos Network MCP tools"],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/mcp/tools/demosTools.ts","line_range":[20,27],"symbol_name":"DemosNetworkToolsConfig::api","language":"typescript","module_resolution_path":"@/features/mcp/tools/demosTools"},"relationships":{"depends_on":["sym-65c1fbabdc4bea0ce4367edf"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["zod"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 17-19","related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-65c1fbabdc4bea0ce4367edf","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DemosNetworkToolsConfig (interface) exported from `src/features/mcp/tools/demosTools.ts`.","Configuration options for Demos Network MCP tools"],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/mcp/tools/demosTools.ts","line_range":[20,27],"symbol_name":"DemosNetworkToolsConfig","language":"typescript","module_resolution_path":"@/features/mcp/tools/demosTools"},"relationships":{"depends_on":["mod-26a73e0f3287d341c809bbb6"],"depended_by":["sym-b78e473ee66613e6c4a99edd"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["zod"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 17-19","related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-2e9114061b17b842b34526c6","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["createDemosNetworkTools (function) exported from `src/features/mcp/tools/demosTools.ts`.","TypeScript signature: (config: DemosNetworkToolsConfig) => MCPTool[].","Creates a comprehensive set of MCP tools for Demos Network operations"],"intent_vectors":["mcp"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/mcp/tools/demosTools.ts","line_range":[53,77],"symbol_name":"createDemosNetworkTools","language":"typescript","module_resolution_path":"@/features/mcp/tools/demosTools"},"relationships":{"depends_on":["mod-26a73e0f3287d341c809bbb6"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["zod"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 29-52","related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-85147fb17e218d35bff6a383","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `MetricsCollectorConfig` in `src/features/metrics/MetricsCollector.ts`."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsCollector.ts","line_range":[19,24],"symbol_name":"MetricsCollectorConfig::api","language":"typescript","module_resolution_path":"@/features/metrics/MetricsCollector"},"relationships":{"depends_on":["sym-edb7ecfb5537fdae3d513479"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node:os","node:child_process","node:util","env:IPFS_API_PORT","env:IPFS_SWARM_PORT","env:OMNI_PORT","env:PG_PORT","env:RPC_PORT","env:SERVER_PORT","env:TLSNOTARY_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-edb7ecfb5537fdae3d513479","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MetricsCollectorConfig (interface) exported from `src/features/metrics/MetricsCollector.ts`."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsCollector.ts","line_range":[19,24],"symbol_name":"MetricsCollectorConfig","language":"typescript","module_resolution_path":"@/features/metrics/MetricsCollector"},"relationships":{"depends_on":["mod-e97de8ffbc5205710572c9db"],"depended_by":["sym-85147fb17e218d35bff6a383"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node:os","node:child_process","node:util","env:IPFS_API_PORT","env:IPFS_SWARM_PORT","env:OMNI_PORT","env:PG_PORT","env:RPC_PORT","env:SERVER_PORT","env:TLSNOTARY_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-11f7a29a146a7fdb768afe1a","level":"L3","extraction_confidence":0.87,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `MetricsCollector` in `src/features/metrics/MetricsCollector.ts`.","MetricsCollector - Actively collects metrics from node subsystems"],"intent_vectors":["observability","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsCollector.ts","line_range":[39,725],"symbol_name":"MetricsCollector::api","language":"typescript","module_resolution_path":"@/features/metrics/MetricsCollector"},"relationships":{"depends_on":["sym-ed8c8ef93f74a3c81ea0d113"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node:os","node:child_process","node:util","env:IPFS_API_PORT","env:IPFS_SWARM_PORT","env:OMNI_PORT","env:PG_PORT","env:RPC_PORT","env:SERVER_PORT","env:TLSNOTARY_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 33-38","related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-667af0a47dceb57dbcf36f54","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MetricsCollector.getInstance method on exported class `MetricsCollector` in `src/features/metrics/MetricsCollector.ts`.","TypeScript signature: (config: Partial) => MetricsCollector."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsCollector.ts","line_range":[61,68],"symbol_name":"MetricsCollector.getInstance","language":"typescript","module_resolution_path":"@/features/metrics/MetricsCollector"},"relationships":{"depends_on":["sym-ed8c8ef93f74a3c81ea0d113"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node:os","node:child_process","node:util","env:IPFS_API_PORT","env:IPFS_SWARM_PORT","env:OMNI_PORT","env:PG_PORT","env:RPC_PORT","env:SERVER_PORT","env:TLSNOTARY_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-a208d8b1bc05ca8277e67bee","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MetricsCollector.start method on exported class `MetricsCollector` in `src/features/metrics/MetricsCollector.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/metrics/MetricsCollector.ts","line_range":[73,104],"symbol_name":"MetricsCollector.start","language":"typescript","module_resolution_path":"@/features/metrics/MetricsCollector"},"relationships":{"depends_on":["sym-ed8c8ef93f74a3c81ea0d113"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node:os","node:child_process","node:util","env:IPFS_API_PORT","env:IPFS_SWARM_PORT","env:OMNI_PORT","env:PG_PORT","env:RPC_PORT","env:SERVER_PORT","env:TLSNOTARY_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-23c18a98f6390b1fbd465c26","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MetricsCollector.stop method on exported class `MetricsCollector` in `src/features/metrics/MetricsCollector.ts`.","TypeScript signature: () => void."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsCollector.ts","line_range":[109,116],"symbol_name":"MetricsCollector.stop","language":"typescript","module_resolution_path":"@/features/metrics/MetricsCollector"},"relationships":{"depends_on":["sym-ed8c8ef93f74a3c81ea0d113"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node:os","node:child_process","node:util","env:IPFS_API_PORT","env:IPFS_SWARM_PORT","env:OMNI_PORT","env:PG_PORT","env:RPC_PORT","env:SERVER_PORT","env:TLSNOTARY_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-6c526fdd4a4360870f257f57","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MetricsCollector.isRunning method on exported class `MetricsCollector` in `src/features/metrics/MetricsCollector.ts`.","TypeScript signature: () => boolean."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsCollector.ts","line_range":[722,724],"symbol_name":"MetricsCollector.isRunning","language":"typescript","module_resolution_path":"@/features/metrics/MetricsCollector"},"relationships":{"depends_on":["sym-ed8c8ef93f74a3c81ea0d113"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node:os","node:child_process","node:util","env:IPFS_API_PORT","env:IPFS_SWARM_PORT","env:OMNI_PORT","env:PG_PORT","env:RPC_PORT","env:SERVER_PORT","env:TLSNOTARY_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-ed8c8ef93f74a3c81ea0d113","level":"L2","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MetricsCollector (class) exported from `src/features/metrics/MetricsCollector.ts`.","MetricsCollector - Actively collects metrics from node subsystems"],"intent_vectors":["observability","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsCollector.ts","line_range":[39,725],"symbol_name":"MetricsCollector","language":"typescript","module_resolution_path":"@/features/metrics/MetricsCollector"},"relationships":{"depends_on":["mod-e97de8ffbc5205710572c9db"],"depended_by":["sym-11f7a29a146a7fdb768afe1a","sym-667af0a47dceb57dbcf36f54","sym-a208d8b1bc05ca8277e67bee","sym-23c18a98f6390b1fbd465c26","sym-6c526fdd4a4360870f257f57"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node:os","node:child_process","node:util","env:IPFS_API_PORT","env:IPFS_SWARM_PORT","env:OMNI_PORT","env:PG_PORT","env:RPC_PORT","env:SERVER_PORT","env:TLSNOTARY_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 33-38","related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-e274f79c394eebcbf37f069e","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getMetricsCollector (function) exported from `src/features/metrics/MetricsCollector.ts`."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsCollector.ts","line_range":[728,730],"symbol_name":"getMetricsCollector","language":"typescript","module_resolution_path":"@/features/metrics/MetricsCollector"},"relationships":{"depends_on":["mod-e97de8ffbc5205710572c9db"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node:os","node:child_process","node:util","env:IPFS_API_PORT","env:IPFS_SWARM_PORT","env:OMNI_PORT","env:PG_PORT","env:RPC_PORT","env:SERVER_PORT","env:TLSNOTARY_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-55751e8a0705973956c52eff","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["default (export_default) exported from `src/features/metrics/MetricsCollector.ts`."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsCollector.ts","line_range":[732,732],"symbol_name":"default","language":"typescript","module_resolution_path":"@/features/metrics/MetricsCollector"},"relationships":{"depends_on":["mod-e97de8ffbc5205710572c9db"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node:os","node:child_process","node:util","env:IPFS_API_PORT","env:IPFS_SWARM_PORT","env:OMNI_PORT","env:PG_PORT","env:RPC_PORT","env:SERVER_PORT","env:TLSNOTARY_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.602Z","authors":[]}} +{"uuid":"sym-7d347d343f5583f3108ef749","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `MetricsServerConfig` in `src/features/metrics/MetricsServer.ts`."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsServer.ts","line_range":[15,19],"symbol_name":"MetricsServerConfig::api","language":"typescript","module_resolution_path":"@/features/metrics/MetricsServer"},"relationships":{"depends_on":["sym-814fc78d247f82dc6129930b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun","env:METRICS_ENABLED","env:METRICS_HOST","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-814fc78d247f82dc6129930b","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MetricsServerConfig (interface) exported from `src/features/metrics/MetricsServer.ts`."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsServer.ts","line_range":[15,19],"symbol_name":"MetricsServerConfig","language":"typescript","module_resolution_path":"@/features/metrics/MetricsServer"},"relationships":{"depends_on":["mod-73734de2bfb341ec8ba4023b"],"depended_by":["sym-7d347d343f5583f3108ef749"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun","env:METRICS_ENABLED","env:METRICS_HOST","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-0871aa6e102abda94617af19","level":"L3","extraction_confidence":0.87,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `MetricsServer` in `src/features/metrics/MetricsServer.ts`.","MetricsServer - Dedicated HTTP server for Prometheus metrics"],"intent_vectors":["observability","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsServer.ts","line_range":[37,154],"symbol_name":"MetricsServer::api","language":"typescript","module_resolution_path":"@/features/metrics/MetricsServer"},"relationships":{"depends_on":["sym-50a6eecae9b02798eedd15b0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun","env:METRICS_ENABLED","env:METRICS_HOST","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 27-36","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-c3e4b175ff01e1f274c41db5","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MetricsServer.start method on exported class `MetricsServer` in `src/features/metrics/MetricsServer.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/metrics/MetricsServer.ts","line_range":[50,73],"symbol_name":"MetricsServer.start","language":"typescript","module_resolution_path":"@/features/metrics/MetricsServer"},"relationships":{"depends_on":["sym-50a6eecae9b02798eedd15b0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["bun","env:METRICS_ENABLED","env:METRICS_HOST","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-5a244f6ce76a00ba0de25fcd","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MetricsServer.stop method on exported class `MetricsServer` in `src/features/metrics/MetricsServer.ts`.","TypeScript signature: () => void."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsServer.ts","line_range":[133,139],"symbol_name":"MetricsServer.stop","language":"typescript","module_resolution_path":"@/features/metrics/MetricsServer"},"relationships":{"depends_on":["sym-50a6eecae9b02798eedd15b0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun","env:METRICS_ENABLED","env:METRICS_HOST","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-1f47eb8005b28cb7189d3c8f","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MetricsServer.isRunning method on exported class `MetricsServer` in `src/features/metrics/MetricsServer.ts`.","TypeScript signature: () => boolean."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsServer.ts","line_range":[144,146],"symbol_name":"MetricsServer.isRunning","language":"typescript","module_resolution_path":"@/features/metrics/MetricsServer"},"relationships":{"depends_on":["sym-50a6eecae9b02798eedd15b0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun","env:METRICS_ENABLED","env:METRICS_HOST","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-13e86d885df58c87136c464c","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MetricsServer.getPort method on exported class `MetricsServer` in `src/features/metrics/MetricsServer.ts`.","TypeScript signature: () => number."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsServer.ts","line_range":[151,153],"symbol_name":"MetricsServer.getPort","language":"typescript","module_resolution_path":"@/features/metrics/MetricsServer"},"relationships":{"depends_on":["sym-50a6eecae9b02798eedd15b0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun","env:METRICS_ENABLED","env:METRICS_HOST","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-50a6eecae9b02798eedd15b0","level":"L2","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MetricsServer (class) exported from `src/features/metrics/MetricsServer.ts`.","MetricsServer - Dedicated HTTP server for Prometheus metrics"],"intent_vectors":["observability","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsServer.ts","line_range":[37,154],"symbol_name":"MetricsServer","language":"typescript","module_resolution_path":"@/features/metrics/MetricsServer"},"relationships":{"depends_on":["mod-73734de2bfb341ec8ba4023b"],"depended_by":["sym-0871aa6e102abda94617af19","sym-c3e4b175ff01e1f274c41db5","sym-5a244f6ce76a00ba0de25fcd","sym-1f47eb8005b28cb7189d3c8f","sym-13e86d885df58c87136c464c"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun","env:METRICS_ENABLED","env:METRICS_HOST","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 27-36","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-86f1c2ba6df80c3462f73386","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getMetricsServer (function) exported from `src/features/metrics/MetricsServer.ts`."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsServer.ts","line_range":[159,166],"symbol_name":"getMetricsServer","language":"typescript","module_resolution_path":"@/features/metrics/MetricsServer"},"relationships":{"depends_on":["mod-73734de2bfb341ec8ba4023b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun","env:METRICS_ENABLED","env:METRICS_HOST","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-5419cc7c70d6dc28ede67184","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["default (export_default) exported from `src/features/metrics/MetricsServer.ts`."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsServer.ts","line_range":[168,168],"symbol_name":"default","language":"typescript","module_resolution_path":"@/features/metrics/MetricsServer"},"relationships":{"depends_on":["mod-73734de2bfb341ec8ba4023b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun","env:METRICS_ENABLED","env:METRICS_HOST","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-e1b45754c758f023c3a5e76e","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `MetricsConfig` in `src/features/metrics/MetricsService.ts`."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsService.ts","line_range":[21,27],"symbol_name":"MetricsConfig::api","language":"typescript","module_resolution_path":"@/features/metrics/MetricsService"},"relationships":{"depends_on":["sym-e6743ad14bcf55d20f8632e3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["prom-client","env:METRICS_ENABLED","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-e6743ad14bcf55d20f8632e3","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MetricsConfig (interface) exported from `src/features/metrics/MetricsService.ts`."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsService.ts","line_range":[21,27],"symbol_name":"MetricsConfig","language":"typescript","module_resolution_path":"@/features/metrics/MetricsService"},"relationships":{"depends_on":["mod-3f28b6264133cacdcde0f639"],"depended_by":["sym-e1b45754c758f023c3a5e76e"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["prom-client","env:METRICS_ENABLED","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-4dd84807257cb62b4ac704ff","level":"L3","extraction_confidence":0.87,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `MetricsService` in `src/features/metrics/MetricsService.ts`.","MetricsService - Singleton service for Prometheus metrics"],"intent_vectors":["observability","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsService.ts","line_range":[46,525],"symbol_name":"MetricsService::api","language":"typescript","module_resolution_path":"@/features/metrics/MetricsService"},"relationships":{"depends_on":["sym-76a4b520bf86dde1eb2b6c88"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["prom-client","env:METRICS_ENABLED","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 37-45","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-8b3c2bd15265d305e67cb209","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MetricsService.getInstance method on exported class `MetricsService` in `src/features/metrics/MetricsService.ts`.","TypeScript signature: (config: Partial) => MetricsService."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsService.ts","line_range":[73,78],"symbol_name":"MetricsService.getInstance","language":"typescript","module_resolution_path":"@/features/metrics/MetricsService"},"relationships":{"depends_on":["sym-76a4b520bf86dde1eb2b6c88"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["prom-client","env:METRICS_ENABLED","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-645d9fff4e883a5deccf2de4","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MetricsService.initialize method on exported class `MetricsService` in `src/features/metrics/MetricsService.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/metrics/MetricsService.ts","line_range":[84,112],"symbol_name":"MetricsService.initialize","language":"typescript","module_resolution_path":"@/features/metrics/MetricsService"},"relationships":{"depends_on":["sym-76a4b520bf86dde1eb2b6c88"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["prom-client","env:METRICS_ENABLED","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-31a2691b3ced1d256bc49903","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MetricsService.createCounter method on exported class `MetricsService` in `src/features/metrics/MetricsService.ts`.","TypeScript signature: (name: string, help: string, labelNames: string[]) => Counter."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsService.ts","line_range":[225,244],"symbol_name":"MetricsService.createCounter","language":"typescript","module_resolution_path":"@/features/metrics/MetricsService"},"relationships":{"depends_on":["sym-76a4b520bf86dde1eb2b6c88"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["prom-client","env:METRICS_ENABLED","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-2da70688fa2715a568e76a1f","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MetricsService.createGauge method on exported class `MetricsService` in `src/features/metrics/MetricsService.ts`.","TypeScript signature: (name: string, help: string, labelNames: string[]) => Gauge."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsService.ts","line_range":[249,268],"symbol_name":"MetricsService.createGauge","language":"typescript","module_resolution_path":"@/features/metrics/MetricsService"},"relationships":{"depends_on":["sym-76a4b520bf86dde1eb2b6c88"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["prom-client","env:METRICS_ENABLED","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-a0930292275c225961600b94","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MetricsService.createHistogram method on exported class `MetricsService` in `src/features/metrics/MetricsService.ts`.","TypeScript signature: (name: string, help: string, labelNames: string[], buckets: number[]) => Histogram."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsService.ts","line_range":[273,294],"symbol_name":"MetricsService.createHistogram","language":"typescript","module_resolution_path":"@/features/metrics/MetricsService"},"relationships":{"depends_on":["sym-76a4b520bf86dde1eb2b6c88"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["prom-client","env:METRICS_ENABLED","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-a1a6438fb523e84b0d6a5acf","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MetricsService.createSummary method on exported class `MetricsService` in `src/features/metrics/MetricsService.ts`.","TypeScript signature: (name: string, help: string, labelNames: string[], percentiles: number[]) => Summary."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsService.ts","line_range":[299,320],"symbol_name":"MetricsService.createSummary","language":"typescript","module_resolution_path":"@/features/metrics/MetricsService"},"relationships":{"depends_on":["sym-76a4b520bf86dde1eb2b6c88"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["prom-client","env:METRICS_ENABLED","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-a1c65ad34d586b28bb063b79","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MetricsService.incrementCounter method on exported class `MetricsService` in `src/features/metrics/MetricsService.ts`.","TypeScript signature: (name: string, labels: Record, value: unknown) => void."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsService.ts","line_range":[327,342],"symbol_name":"MetricsService.incrementCounter","language":"typescript","module_resolution_path":"@/features/metrics/MetricsService"},"relationships":{"depends_on":["sym-76a4b520bf86dde1eb2b6c88"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["prom-client","env:METRICS_ENABLED","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-64d2a4f2172c14753f59c989","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MetricsService.setGauge method on exported class `MetricsService` in `src/features/metrics/MetricsService.ts`.","TypeScript signature: (name: string, value: number, labels: Record) => void."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsService.ts","line_range":[347,362],"symbol_name":"MetricsService.setGauge","language":"typescript","module_resolution_path":"@/features/metrics/MetricsService"},"relationships":{"depends_on":["sym-76a4b520bf86dde1eb2b6c88"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["prom-client","env:METRICS_ENABLED","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-907f082ef9ac5c2229ea0ade","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MetricsService.incrementGauge method on exported class `MetricsService` in `src/features/metrics/MetricsService.ts`.","TypeScript signature: (name: string, labels: Record, value: unknown) => void."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsService.ts","line_range":[367,382],"symbol_name":"MetricsService.incrementGauge","language":"typescript","module_resolution_path":"@/features/metrics/MetricsService"},"relationships":{"depends_on":["sym-76a4b520bf86dde1eb2b6c88"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["prom-client","env:METRICS_ENABLED","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-f84154f8b969f50e418d2285","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MetricsService.decrementGauge method on exported class `MetricsService` in `src/features/metrics/MetricsService.ts`.","TypeScript signature: (name: string, labels: Record, value: unknown) => void."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsService.ts","line_range":[387,402],"symbol_name":"MetricsService.decrementGauge","language":"typescript","module_resolution_path":"@/features/metrics/MetricsService"},"relationships":{"depends_on":["sym-76a4b520bf86dde1eb2b6c88"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["prom-client","env:METRICS_ENABLED","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-932261b29f07de11300dfdcf","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MetricsService.observeHistogram method on exported class `MetricsService` in `src/features/metrics/MetricsService.ts`.","TypeScript signature: (name: string, value: number, labels: Record) => void."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsService.ts","line_range":[407,422],"symbol_name":"MetricsService.observeHistogram","language":"typescript","module_resolution_path":"@/features/metrics/MetricsService"},"relationships":{"depends_on":["sym-76a4b520bf86dde1eb2b6c88"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["prom-client","env:METRICS_ENABLED","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-5f5d6e223d521c533f38067a","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MetricsService.startHistogramTimer method on exported class `MetricsService` in `src/features/metrics/MetricsService.ts`.","TypeScript signature: (name: string, labels: Record) => () => number."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsService.ts","line_range":[427,442],"symbol_name":"MetricsService.startHistogramTimer","language":"typescript","module_resolution_path":"@/features/metrics/MetricsService"},"relationships":{"depends_on":["sym-76a4b520bf86dde1eb2b6c88"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["prom-client","env:METRICS_ENABLED","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-56374d4ad2ef16c38050375a","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MetricsService.observeSummary method on exported class `MetricsService` in `src/features/metrics/MetricsService.ts`.","TypeScript signature: (name: string, value: number, labels: Record) => void."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsService.ts","line_range":[447,462],"symbol_name":"MetricsService.observeSummary","language":"typescript","module_resolution_path":"@/features/metrics/MetricsService"},"relationships":{"depends_on":["sym-76a4b520bf86dde1eb2b6c88"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["prom-client","env:METRICS_ENABLED","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-ddbf97b6be2197cf825559bf","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MetricsService.getRegistry method on exported class `MetricsService` in `src/features/metrics/MetricsService.ts`.","TypeScript signature: () => Registry."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsService.ts","line_range":[469,471],"symbol_name":"MetricsService.getRegistry","language":"typescript","module_resolution_path":"@/features/metrics/MetricsService"},"relationships":{"depends_on":["sym-76a4b520bf86dde1eb2b6c88"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["prom-client","env:METRICS_ENABLED","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-70953d217354d6fc5f8b32fb","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MetricsService.getMetrics method on exported class `MetricsService` in `src/features/metrics/MetricsService.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/metrics/MetricsService.ts","line_range":[476,480],"symbol_name":"MetricsService.getMetrics","language":"typescript","module_resolution_path":"@/features/metrics/MetricsService"},"relationships":{"depends_on":["sym-76a4b520bf86dde1eb2b6c88"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["prom-client","env:METRICS_ENABLED","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-4ef8918153352cb83bb60850","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MetricsService.getContentType method on exported class `MetricsService` in `src/features/metrics/MetricsService.ts`.","TypeScript signature: () => string."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsService.ts","line_range":[485,487],"symbol_name":"MetricsService.getContentType","language":"typescript","module_resolution_path":"@/features/metrics/MetricsService"},"relationships":{"depends_on":["sym-76a4b520bf86dde1eb2b6c88"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["prom-client","env:METRICS_ENABLED","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-0ebd17d9651bf9b3835ff6af","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MetricsService.isEnabled method on exported class `MetricsService` in `src/features/metrics/MetricsService.ts`.","TypeScript signature: () => boolean."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsService.ts","line_range":[500,502],"symbol_name":"MetricsService.isEnabled","language":"typescript","module_resolution_path":"@/features/metrics/MetricsService"},"relationships":{"depends_on":["sym-76a4b520bf86dde1eb2b6c88"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["prom-client","env:METRICS_ENABLED","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-dc33aec7c6d3c82fd7bd0a4f","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MetricsService.getPort method on exported class `MetricsService` in `src/features/metrics/MetricsService.ts`.","TypeScript signature: () => number."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsService.ts","line_range":[507,509],"symbol_name":"MetricsService.getPort","language":"typescript","module_resolution_path":"@/features/metrics/MetricsService"},"relationships":{"depends_on":["sym-76a4b520bf86dde1eb2b6c88"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["prom-client","env:METRICS_ENABLED","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-dda40d6be392e4d7e2dd40d2","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MetricsService.reset method on exported class `MetricsService` in `src/features/metrics/MetricsService.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/metrics/MetricsService.ts","line_range":[514,516],"symbol_name":"MetricsService.reset","language":"typescript","module_resolution_path":"@/features/metrics/MetricsService"},"relationships":{"depends_on":["sym-76a4b520bf86dde1eb2b6c88"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["prom-client","env:METRICS_ENABLED","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-f8d8b4330b78b1b42308a5c2","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MetricsService.shutdown method on exported class `MetricsService` in `src/features/metrics/MetricsService.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/metrics/MetricsService.ts","line_range":[521,524],"symbol_name":"MetricsService.shutdown","language":"typescript","module_resolution_path":"@/features/metrics/MetricsService"},"relationships":{"depends_on":["sym-76a4b520bf86dde1eb2b6c88"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["prom-client","env:METRICS_ENABLED","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-76a4b520bf86dde1eb2b6c88","level":"L2","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MetricsService (class) exported from `src/features/metrics/MetricsService.ts`.","MetricsService - Singleton service for Prometheus metrics"],"intent_vectors":["observability","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsService.ts","line_range":[46,525],"symbol_name":"MetricsService","language":"typescript","module_resolution_path":"@/features/metrics/MetricsService"},"relationships":{"depends_on":["mod-3f28b6264133cacdcde0f639"],"depended_by":["sym-4dd84807257cb62b4ac704ff","sym-8b3c2bd15265d305e67cb209","sym-645d9fff4e883a5deccf2de4","sym-31a2691b3ced1d256bc49903","sym-2da70688fa2715a568e76a1f","sym-a0930292275c225961600b94","sym-a1a6438fb523e84b0d6a5acf","sym-a1c65ad34d586b28bb063b79","sym-64d2a4f2172c14753f59c989","sym-907f082ef9ac5c2229ea0ade","sym-f84154f8b969f50e418d2285","sym-932261b29f07de11300dfdcf","sym-5f5d6e223d521c533f38067a","sym-56374d4ad2ef16c38050375a","sym-ddbf97b6be2197cf825559bf","sym-70953d217354d6fc5f8b32fb","sym-4ef8918153352cb83bb60850","sym-0ebd17d9651bf9b3835ff6af","sym-dc33aec7c6d3c82fd7bd0a4f","sym-dda40d6be392e4d7e2dd40d2","sym-f8d8b4330b78b1b42308a5c2"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["prom-client","env:METRICS_ENABLED","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 37-45","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-0bf6b255d48cad9282284e39","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getMetricsService (function) exported from `src/features/metrics/MetricsService.ts`."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsService.ts","line_range":[528,530],"symbol_name":"getMetricsService","language":"typescript","module_resolution_path":"@/features/metrics/MetricsService"},"relationships":{"depends_on":["mod-3f28b6264133cacdcde0f639"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["prom-client","env:METRICS_ENABLED","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-d44e2bcce98f6909553185c0","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["default (export_default) exported from `src/features/metrics/MetricsService.ts`."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/MetricsService.ts","line_range":[532,532],"symbol_name":"default","language":"typescript","module_resolution_path":"@/features/metrics/MetricsService"},"relationships":{"depends_on":["mod-3f28b6264133cacdcde0f639"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["prom-client","env:METRICS_ENABLED","env:METRICS_PORT"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-f4ce6b69642416527938b724","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["MetricsService (re_export) exported from `src/features/metrics/index.ts`."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/index.ts","line_range":[11,11],"symbol_name":"MetricsService","language":"typescript","module_resolution_path":"@/features/metrics/index"},"relationships":{"depends_on":["mod-7446738bdaf5f0b85a43ab05"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.946Z","authors":[]}} +{"uuid":"sym-150f5307db44a90b224f17d4","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["getMetricsService (re_export) exported from `src/features/metrics/index.ts`."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/index.ts","line_range":[12,12],"symbol_name":"getMetricsService","language":"typescript","module_resolution_path":"@/features/metrics/index"},"relationships":{"depends_on":["mod-7446738bdaf5f0b85a43ab05"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.946Z","authors":[]}} +{"uuid":"sym-0ec81c1dcbfd47ac209657f9","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["MetricsConfig (re_export) exported from `src/features/metrics/index.ts`."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/index.ts","line_range":[13,13],"symbol_name":"MetricsConfig","language":"typescript","module_resolution_path":"@/features/metrics/index"},"relationships":{"depends_on":["mod-7446738bdaf5f0b85a43ab05"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.946Z","authors":[]}} +{"uuid":"sym-06248a66cb4f78f1d5eb3312","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["MetricsServer (re_export) exported from `src/features/metrics/index.ts`."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/index.ts","line_range":[17,17],"symbol_name":"MetricsServer","language":"typescript","module_resolution_path":"@/features/metrics/index"},"relationships":{"depends_on":["mod-7446738bdaf5f0b85a43ab05"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.946Z","authors":[]}} +{"uuid":"sym-b41d4e0f6a11ac4ee0968d86","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["getMetricsServer (re_export) exported from `src/features/metrics/index.ts`."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/index.ts","line_range":[18,18],"symbol_name":"getMetricsServer","language":"typescript","module_resolution_path":"@/features/metrics/index"},"relationships":{"depends_on":["mod-7446738bdaf5f0b85a43ab05"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.946Z","authors":[]}} +{"uuid":"sym-b0da639ac5f946767bab1148","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["MetricsServerConfig (re_export) exported from `src/features/metrics/index.ts`."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/index.ts","line_range":[19,19],"symbol_name":"MetricsServerConfig","language":"typescript","module_resolution_path":"@/features/metrics/index"},"relationships":{"depends_on":["mod-7446738bdaf5f0b85a43ab05"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.946Z","authors":[]}} +{"uuid":"sym-d1e74c9c937cbfe8354cb820","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["MetricsCollector (re_export) exported from `src/features/metrics/index.ts`."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/index.ts","line_range":[23,23],"symbol_name":"MetricsCollector","language":"typescript","module_resolution_path":"@/features/metrics/index"},"relationships":{"depends_on":["mod-7446738bdaf5f0b85a43ab05"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.946Z","authors":[]}} +{"uuid":"sym-dfffa627fdec4d63848c4107","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["getMetricsCollector (re_export) exported from `src/features/metrics/index.ts`."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/index.ts","line_range":[24,24],"symbol_name":"getMetricsCollector","language":"typescript","module_resolution_path":"@/features/metrics/index"},"relationships":{"depends_on":["mod-7446738bdaf5f0b85a43ab05"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.946Z","authors":[]}} +{"uuid":"sym-280dbc4ff098279a68fc5bc2","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["MetricsCollectorConfig (re_export) exported from `src/features/metrics/index.ts`."],"intent_vectors":["observability"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/metrics/index.ts","line_range":[25,25],"symbol_name":"MetricsCollectorConfig","language":"typescript","module_resolution_path":"@/features/metrics/index"},"relationships":{"depends_on":["mod-7446738bdaf5f0b85a43ab05"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.946Z","authors":[]}} +{"uuid":"sym-abdb3236602cdc869ad06b13","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `MultichainDispatcher` in `src/features/multichain/XMDispatcher.ts`."],"intent_vectors":["multichain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/multichain/XMDispatcher.ts","line_range":[8,71],"symbol_name":"MultichainDispatcher::api","language":"typescript","module_resolution_path":"@/features/multichain/XMDispatcher"},"relationships":{"depends_on":["sym-fea639e9aff6c5a0e542aa41"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-0d501f564f166a8a56829af5","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MultichainDispatcher.digest method on exported class `MultichainDispatcher` in `src/features/multichain/XMDispatcher.ts`.","TypeScript signature: (data: XMScript) => unknown."],"intent_vectors":["multichain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/multichain/XMDispatcher.ts","line_range":[10,35],"symbol_name":"MultichainDispatcher.digest","language":"typescript","module_resolution_path":"@/features/multichain/XMDispatcher"},"relationships":{"depends_on":["sym-fea639e9aff6c5a0e542aa41"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-bcc166dd7435c0d06d00377c","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MultichainDispatcher.load method on exported class `MultichainDispatcher` in `src/features/multichain/XMDispatcher.ts`.","TypeScript signature: (script: string) => Promise."],"intent_vectors":["multichain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/multichain/XMDispatcher.ts","line_range":[38,41],"symbol_name":"MultichainDispatcher.load","language":"typescript","module_resolution_path":"@/features/multichain/XMDispatcher"},"relationships":{"depends_on":["sym-fea639e9aff6c5a0e542aa41"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-2931981d6814493aa9f3b614","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MultichainDispatcher.execute method on exported class `MultichainDispatcher` in `src/features/multichain/XMDispatcher.ts`.","TypeScript signature: (script: XMScript) => unknown."],"intent_vectors":["multichain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/multichain/XMDispatcher.ts","line_range":[44,70],"symbol_name":"MultichainDispatcher.execute","language":"typescript","module_resolution_path":"@/features/multichain/XMDispatcher"},"relationships":{"depends_on":["sym-fea639e9aff6c5a0e542aa41"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-fea639e9aff6c5a0e542aa41","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MultichainDispatcher (class) exported from `src/features/multichain/XMDispatcher.ts`."],"intent_vectors":["multichain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/multichain/XMDispatcher.ts","line_range":[8,71],"symbol_name":"MultichainDispatcher","language":"typescript","module_resolution_path":"@/features/multichain/XMDispatcher"},"relationships":{"depends_on":["mod-6ecc959af33bffdcf9b125ac"],"depended_by":["sym-abdb3236602cdc869ad06b13","sym-0d501f564f166a8a56829af5","sym-bcc166dd7435c0d06d00377c","sym-2931981d6814493aa9f3b614"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-8945ebc15041ef139fd5f4a7","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `AssetWrapping` in `src/features/multichain/assetWrapping.ts`."],"intent_vectors":["multichain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/multichain/assetWrapping.ts","line_range":[4,6],"symbol_name":"AssetWrapping::api","language":"typescript","module_resolution_path":"@/features/multichain/assetWrapping"},"relationships":{"depends_on":["sym-36a378064a0ed4fb5a6da40f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.946Z","authors":[]}} +{"uuid":"sym-36a378064a0ed4fb5a6da40f","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["AssetWrapping (class) exported from `src/features/multichain/assetWrapping.ts`."],"intent_vectors":["multichain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/multichain/assetWrapping.ts","line_range":[4,6],"symbol_name":"AssetWrapping","language":"typescript","module_resolution_path":"@/features/multichain/assetWrapping"},"relationships":{"depends_on":["mod-bd407f0c01e58fd2d40eb1c3"],"depended_by":["sym-8945ebc15041ef139fd5f4a7"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.946Z","authors":[]}} +{"uuid":"sym-79e697a24600f39d08905f79","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["default (export_default) exported from `src/features/multichain/routines/XMParser.ts`."],"intent_vectors":["multichain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/multichain/routines/XMParser.ts","line_range":[156,156],"symbol_name":"default","language":"typescript","module_resolution_path":"@/features/multichain/routines/XMParser"},"relationships":{"depends_on":["mod-ff7a988dbc672250517763db"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","@kynesyslabs/demosdk/xm-localsdk","@kynesyslabs/demosdk/types","sdk/localsdk/multichain/configs/chainIds"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-93adcb2760142502f3e2b5e0","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleAptosBalanceQuery (function) exported from `src/features/multichain/routines/executors/aptos_balance_query.ts`.","TypeScript signature: (operation: IOperation) => unknown."],"intent_vectors":["multichain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/multichain/routines/executors/aptos_balance_query.ts","line_range":[7,98],"symbol_name":"handleAptosBalanceQuery","language":"typescript","module_resolution_path":"@/features/multichain/routines/executors/aptos_balance_query"},"relationships":{"depends_on":["mod-a722cbd7e6a0808c95591ad6"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-aff2e2fa35c9fd1deaa22c77"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/xm-localsdk","sdk/localsdk/multichain/configs/chainProviders","@aptos-labs/ts-sdk"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-fbd5550518428a5f3c1d429d","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleAptosContractReadRest (function) exported from `src/features/multichain/routines/executors/aptos_contract_read.ts`.","TypeScript signature: (operation: IOperation) => unknown.","This function is used to read from a smart contract using the Aptos REST API"],"intent_vectors":["multichain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/multichain/routines/executors/aptos_contract_read.ts","line_range":[13,123],"symbol_name":"handleAptosContractReadRest","language":"typescript","module_resolution_path":"@/features/multichain/routines/executors/aptos_contract_read"},"relationships":{"depends_on":["mod-6b0f117020c528624559fc33"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-80e15d6a392a3396e9a9cddd"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/xm-localsdk","sdk/localsdk/multichain/configs/chainProviders","@aptos-labs/ts-sdk","axios"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 8-12","related_adr":null,"last_modified":"2026-02-13T14:41:04.946Z","authors":[]}} +{"uuid":"sym-776bf1dc921966d24ee32cbd","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleAptosContractRead (function) exported from `src/features/multichain/routines/executors/aptos_contract_read.ts`.","TypeScript signature: (operation: IOperation) => unknown."],"intent_vectors":["multichain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/multichain/routines/executors/aptos_contract_read.ts","line_range":[125,257],"symbol_name":"handleAptosContractRead","language":"typescript","module_resolution_path":"@/features/multichain/routines/executors/aptos_contract_read"},"relationships":{"depends_on":["mod-6b0f117020c528624559fc33"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/xm-localsdk","sdk/localsdk/multichain/configs/chainProviders","@aptos-labs/ts-sdk","axios"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.946Z","authors":[]}} +{"uuid":"sym-c9635b7880669c0bb6c6b77e","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleAptosContractWrite (function) exported from `src/features/multichain/routines/executors/aptos_contract_write.ts`.","TypeScript signature: (operation: IOperation) => unknown."],"intent_vectors":["multichain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/multichain/routines/executors/aptos_contract_write.ts","line_range":[8,81],"symbol_name":"handleAptosContractWrite","language":"typescript","module_resolution_path":"@/features/multichain/routines/executors/aptos_contract_write"},"relationships":{"depends_on":["mod-3940e5b1c6e49d5c3f17fd5e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-b6804e6844dd104bd67125b2"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/xm-localsdk","sdk/localsdk/multichain/configs/chainProviders","@aptos-labs/ts-sdk"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-e99088c9d2a798506405e322","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleAptosPayRest (function) exported from `src/features/multichain/routines/executors/aptos_pay_rest.ts`.","TypeScript signature: (operation: IOperation) => Promise."],"intent_vectors":["multichain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/multichain/routines/executors/aptos_pay_rest.ts","line_range":[12,93],"symbol_name":"handleAptosPayRest","language":"typescript","module_resolution_path":"@/features/multichain/routines/executors/aptos_pay_rest"},"relationships":{"depends_on":["mod-52fc6e5b8ec086dcc9f4237e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-e197ea41443939ee72ecb053"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["axios","@aptos-labs/ts-sdk","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption","sdk/localsdk/multichain/configs/chainProviders","node_modules/@kynesyslabs/demosdk/build/multichain/core/types/interfaces"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.946Z","authors":[]}} +{"uuid":"sym-aff2e2fa35c9fd1deaa22c77","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleBalanceQuery (function) exported from `src/features/multichain/routines/executors/balance_query.ts`.","TypeScript signature: (operation: IOperation, chainID: number) => unknown."],"intent_vectors":["multichain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/multichain/routines/executors/balance_query.ts","line_range":[5,35],"symbol_name":"handleBalanceQuery","language":"typescript","module_resolution_path":"@/features/multichain/routines/executors/balance_query"},"relationships":{"depends_on":["mod-f57990696544256723fdd185"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-93adcb2760142502f3e2b5e0"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-80e15d6a392a3396e9a9cddd","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleContractRead (function) exported from `src/features/multichain/routines/executors/contract_read.ts`.","TypeScript signature: (operation: IOperation, chainID: number) => unknown."],"intent_vectors":["multichain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/multichain/routines/executors/contract_read.ts","line_range":[8,80],"symbol_name":"handleContractRead","language":"typescript","module_resolution_path":"@/features/multichain/routines/executors/contract_read"},"relationships":{"depends_on":["mod-ace15f11a231cf8b7077f58e"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-fbd5550518428a5f3c1d429d"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/xm-localsdk","sdk/localsdk/multichain/configs/evmProviders"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.946Z","authors":[]}} +{"uuid":"sym-b6804e6844dd104bd67125b2","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleContractWrite (function) exported from `src/features/multichain/routines/executors/contract_write.ts`.","TypeScript signature: (operation: IOperation, chainID: number) => unknown."],"intent_vectors":["multichain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/multichain/routines/executors/contract_write.ts","line_range":[35,54],"symbol_name":"handleContractWrite","language":"typescript","module_resolution_path":"@/features/multichain/routines/executors/contract_write"},"relationships":{"depends_on":["mod-116da4b57fafe340c5775211"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-c9635b7880669c0bb6c6b77e"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/xm-localsdk","sdk/localsdk/multichain/configs/evmProviders","sdk/localsdk/multichain/configs/chainProviders"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.947Z","authors":[]}} +{"uuid":"sym-e197ea41443939ee72ecb053","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handlePayOperation (function) exported from `src/features/multichain/routines/executors/pay.ts`.","TypeScript signature: (operation: IOperation, chainID: number) => unknown.","Executes a XM pay operation and returns"],"intent_vectors":["multichain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/multichain/routines/executors/pay.ts","line_range":[19,111],"symbol_name":"handlePayOperation","language":"typescript","module_resolution_path":"@/features/multichain/routines/executors/pay"},"relationships":{"depends_on":["mod-374a312e43c2c9f2d7013463"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-e99088c9d2a798506405e322"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/xm-localsdk","sdk/localsdk/multichain/configs/chainProviders","sdk/localsdk/multichain/configs/evmProviders","sdk/localsdk/multichain/types/multichain","@solana/web3.js"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 13-18","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-4af6c1457b565dcbdb9ae1ec","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["genericJsonRpcPay (function) exported from `src/features/multichain/routines/executors/pay.ts`.","TypeScript signature: (sdk: any, rpcUrl: string, operation: IOperation) => unknown.","Executes a JSON RPC Pay operation for a JSON RPC sdk and returns the result"],"intent_vectors":["multichain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/multichain/routines/executors/pay.ts","line_range":[118,155],"symbol_name":"genericJsonRpcPay","language":"typescript","module_resolution_path":"@/features/multichain/routines/executors/pay"},"relationships":{"depends_on":["mod-374a312e43c2c9f2d7013463"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/xm-localsdk","sdk/localsdk/multichain/configs/chainProviders","sdk/localsdk/multichain/configs/evmProviders","sdk/localsdk/multichain/types/multichain","@solana/web3.js"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 113-117","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-13ba93caee7dafdc0a34cf8f","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `TLSNotaryMode` in `src/features/tlsnotary/TLSNotaryService.ts`.","TLSNotary operational mode"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/TLSNotaryService.ts","line_range":[28,28],"symbol_name":"TLSNotaryMode::api","language":"typescript","module_resolution_path":"@/features/tlsnotary/TLSNotaryService"},"relationships":{"depends_on":["sym-64773d11ed0dc075e88451fd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","path","crypto","env:TLSNOTARY_AUTO_START","env:TLSNOTARY_DEBUG","env:TLSNOTARY_DISABLED","env:TLSNOTARY_FATAL","env:TLSNOTARY_MAX_RECV_DATA","env:TLSNOTARY_MAX_SENT_DATA","env:TLSNOTARY_MODE","env:TLSNOTARY_PORT","env:TLSNOTARY_PROXY","env:TLSNOTARY_SIGNING_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 25-27","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-64773d11ed0dc075e88451fd","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryMode (type) exported from `src/features/tlsnotary/TLSNotaryService.ts`.","TLSNotary operational mode"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/TLSNotaryService.ts","line_range":[28,28],"symbol_name":"TLSNotaryMode","language":"typescript","module_resolution_path":"@/features/tlsnotary/TLSNotaryService"},"relationships":{"depends_on":["mod-293d53ea089a85fc8fe53c13"],"depended_by":["sym-13ba93caee7dafdc0a34cf8f"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","path","crypto","env:TLSNOTARY_AUTO_START","env:TLSNOTARY_DEBUG","env:TLSNOTARY_DISABLED","env:TLSNOTARY_FATAL","env:TLSNOTARY_MAX_RECV_DATA","env:TLSNOTARY_MAX_SENT_DATA","env:TLSNOTARY_MODE","env:TLSNOTARY_PORT","env:TLSNOTARY_PROXY","env:TLSNOTARY_SIGNING_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 25-27","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-bff46c872aa7a5d5524729d8","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `TLSNotaryServiceConfig` in `src/features/tlsnotary/TLSNotaryService.ts`.","Service configuration options"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/TLSNotaryService.ts","line_range":[33,46],"symbol_name":"TLSNotaryServiceConfig::api","language":"typescript","module_resolution_path":"@/features/tlsnotary/TLSNotaryService"},"relationships":{"depends_on":["sym-b886e68b7cb3206a20572929"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","path","crypto","env:TLSNOTARY_AUTO_START","env:TLSNOTARY_DEBUG","env:TLSNOTARY_DISABLED","env:TLSNOTARY_FATAL","env:TLSNOTARY_MAX_RECV_DATA","env:TLSNOTARY_MAX_SENT_DATA","env:TLSNOTARY_MODE","env:TLSNOTARY_PORT","env:TLSNOTARY_PROXY","env:TLSNOTARY_SIGNING_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 30-32","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-b886e68b7cb3206a20572929","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryServiceConfig (interface) exported from `src/features/tlsnotary/TLSNotaryService.ts`.","Service configuration options"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/TLSNotaryService.ts","line_range":[33,46],"symbol_name":"TLSNotaryServiceConfig","language":"typescript","module_resolution_path":"@/features/tlsnotary/TLSNotaryService"},"relationships":{"depends_on":["mod-293d53ea089a85fc8fe53c13"],"depended_by":["sym-bff46c872aa7a5d5524729d8"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","path","crypto","env:TLSNOTARY_AUTO_START","env:TLSNOTARY_DEBUG","env:TLSNOTARY_DISABLED","env:TLSNOTARY_FATAL","env:TLSNOTARY_MAX_RECV_DATA","env:TLSNOTARY_MAX_SENT_DATA","env:TLSNOTARY_MODE","env:TLSNOTARY_PORT","env:TLSNOTARY_PROXY","env:TLSNOTARY_SIGNING_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 30-32","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-f0ecd914d2af1f74266eb89f","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `TLSNotaryServiceStatus` in `src/features/tlsnotary/TLSNotaryService.ts`.","Service status information"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/TLSNotaryService.ts","line_range":[51,62],"symbol_name":"TLSNotaryServiceStatus::api","language":"typescript","module_resolution_path":"@/features/tlsnotary/TLSNotaryService"},"relationships":{"depends_on":["sym-353b1994007d3e786d57e4a5"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","path","crypto","env:TLSNOTARY_AUTO_START","env:TLSNOTARY_DEBUG","env:TLSNOTARY_DISABLED","env:TLSNOTARY_FATAL","env:TLSNOTARY_MAX_RECV_DATA","env:TLSNOTARY_MAX_SENT_DATA","env:TLSNOTARY_MODE","env:TLSNOTARY_PORT","env:TLSNOTARY_PROXY","env:TLSNOTARY_SIGNING_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 48-50","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-353b1994007d3e786d57e4a5","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryServiceStatus (interface) exported from `src/features/tlsnotary/TLSNotaryService.ts`.","Service status information"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/TLSNotaryService.ts","line_range":[51,62],"symbol_name":"TLSNotaryServiceStatus","language":"typescript","module_resolution_path":"@/features/tlsnotary/TLSNotaryService"},"relationships":{"depends_on":["mod-293d53ea089a85fc8fe53c13"],"depended_by":["sym-f0ecd914d2af1f74266eb89f"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","path","crypto","env:TLSNOTARY_AUTO_START","env:TLSNOTARY_DEBUG","env:TLSNOTARY_DISABLED","env:TLSNOTARY_FATAL","env:TLSNOTARY_MAX_RECV_DATA","env:TLSNOTARY_MAX_SENT_DATA","env:TLSNOTARY_MODE","env:TLSNOTARY_PORT","env:TLSNOTARY_PROXY","env:TLSNOTARY_SIGNING_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 48-50","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-33ad11cf35db2f305b0f2502","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["isTLSNotaryFatal (function) exported from `src/features/tlsnotary/TLSNotaryService.ts`.","TypeScript signature: () => boolean.","Check if TLSNotary errors should be fatal (for debugging)"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/TLSNotaryService.ts","line_range":[126,128],"symbol_name":"isTLSNotaryFatal","language":"typescript","module_resolution_path":"@/features/tlsnotary/TLSNotaryService"},"relationships":{"depends_on":["mod-293d53ea089a85fc8fe53c13"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-338b16ec8f5b69d81a074d2d"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","path","crypto","env:TLSNOTARY_AUTO_START","env:TLSNOTARY_DEBUG","env:TLSNOTARY_DISABLED","env:TLSNOTARY_FATAL","env:TLSNOTARY_MAX_RECV_DATA","env:TLSNOTARY_MAX_SENT_DATA","env:TLSNOTARY_MODE","env:TLSNOTARY_PORT","env:TLSNOTARY_PROXY","env:TLSNOTARY_SIGNING_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 122-125","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-744ab442808467ce063eecd8","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["isTLSNotaryDebug (function) exported from `src/features/tlsnotary/TLSNotaryService.ts`.","TypeScript signature: () => boolean.","Check if TLSNotary debug mode is enabled"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/TLSNotaryService.ts","line_range":[134,136],"symbol_name":"isTLSNotaryDebug","language":"typescript","module_resolution_path":"@/features/tlsnotary/TLSNotaryService"},"relationships":{"depends_on":["mod-293d53ea089a85fc8fe53c13"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-338b16ec8f5b69d81a074d2d"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","path","crypto","env:TLSNOTARY_AUTO_START","env:TLSNOTARY_DEBUG","env:TLSNOTARY_DISABLED","env:TLSNOTARY_FATAL","env:TLSNOTARY_MAX_RECV_DATA","env:TLSNOTARY_MAX_SENT_DATA","env:TLSNOTARY_MODE","env:TLSNOTARY_PORT","env:TLSNOTARY_PROXY","env:TLSNOTARY_SIGNING_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 130-133","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-466b012a63df499de8b9409f","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["isTLSNotaryProxy (function) exported from `src/features/tlsnotary/TLSNotaryService.ts`.","TypeScript signature: () => boolean.","Check if TLSNotary proxy mode is enabled"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/TLSNotaryService.ts","line_range":[143,145],"symbol_name":"isTLSNotaryProxy","language":"typescript","module_resolution_path":"@/features/tlsnotary/TLSNotaryService"},"relationships":{"depends_on":["mod-293d53ea089a85fc8fe53c13"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-338b16ec8f5b69d81a074d2d"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","path","crypto","env:TLSNOTARY_AUTO_START","env:TLSNOTARY_DEBUG","env:TLSNOTARY_DISABLED","env:TLSNOTARY_FATAL","env:TLSNOTARY_MAX_RECV_DATA","env:TLSNOTARY_MAX_SENT_DATA","env:TLSNOTARY_MODE","env:TLSNOTARY_PORT","env:TLSNOTARY_PROXY","env:TLSNOTARY_SIGNING_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 138-142","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-58d4853a8ea7f7468daf5394","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getConfigFromEnv (function) exported from `src/features/tlsnotary/TLSNotaryService.ts`.","TypeScript signature: () => TLSNotaryServiceConfig | null.","Get TLSNotary configuration from environment variables"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/TLSNotaryService.ts","line_range":[169,197],"symbol_name":"getConfigFromEnv","language":"typescript","module_resolution_path":"@/features/tlsnotary/TLSNotaryService"},"relationships":{"depends_on":["mod-293d53ea089a85fc8fe53c13"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-338b16ec8f5b69d81a074d2d"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","path","crypto","env:TLSNOTARY_AUTO_START","env:TLSNOTARY_DEBUG","env:TLSNOTARY_DISABLED","env:TLSNOTARY_FATAL","env:TLSNOTARY_MAX_RECV_DATA","env:TLSNOTARY_MAX_SENT_DATA","env:TLSNOTARY_MODE","env:TLSNOTARY_PORT","env:TLSNOTARY_PROXY","env:TLSNOTARY_SIGNING_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 147-168","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-4ce553c86e8336504c8eb620","level":"L3","extraction_confidence":0.87,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `TLSNotaryService` in `src/features/tlsnotary/TLSNotaryService.ts`.","TLSNotary Service"],"intent_vectors":["tlsnotary","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/TLSNotaryService.ts","line_range":[229,807],"symbol_name":"TLSNotaryService::api","language":"typescript","module_resolution_path":"@/features/tlsnotary/TLSNotaryService"},"relationships":{"depends_on":["sym-338b16ec8f5b69d81a074d2d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","path","crypto","env:TLSNOTARY_AUTO_START","env:TLSNOTARY_DEBUG","env:TLSNOTARY_DISABLED","env:TLSNOTARY_FATAL","env:TLSNOTARY_MAX_RECV_DATA","env:TLSNOTARY_MAX_SENT_DATA","env:TLSNOTARY_MODE","env:TLSNOTARY_PORT","env:TLSNOTARY_PROXY","env:TLSNOTARY_SIGNING_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 203-228","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-c2a6707fd089bf08cac9cc30","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryService.getMode method on exported class `TLSNotaryService` in `src/features/tlsnotary/TLSNotaryService.ts`.","TypeScript signature: () => TLSNotaryMode."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/TLSNotaryService.ts","line_range":[250,252],"symbol_name":"TLSNotaryService.getMode","language":"typescript","module_resolution_path":"@/features/tlsnotary/TLSNotaryService"},"relationships":{"depends_on":["sym-338b16ec8f5b69d81a074d2d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","path","crypto","env:TLSNOTARY_AUTO_START","env:TLSNOTARY_DEBUG","env:TLSNOTARY_DISABLED","env:TLSNOTARY_FATAL","env:TLSNOTARY_MAX_RECV_DATA","env:TLSNOTARY_MAX_SENT_DATA","env:TLSNOTARY_MODE","env:TLSNOTARY_PORT","env:TLSNOTARY_PROXY","env:TLSNOTARY_SIGNING_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-53a5db12c86a79f27769e3ca","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryService.fromEnvironment method on exported class `TLSNotaryService` in `src/features/tlsnotary/TLSNotaryService.ts`.","TypeScript signature: () => TLSNotaryService | null."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/TLSNotaryService.ts","line_range":[258,264],"symbol_name":"TLSNotaryService.fromEnvironment","language":"typescript","module_resolution_path":"@/features/tlsnotary/TLSNotaryService"},"relationships":{"depends_on":["sym-338b16ec8f5b69d81a074d2d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","path","crypto","env:TLSNOTARY_AUTO_START","env:TLSNOTARY_DEBUG","env:TLSNOTARY_DISABLED","env:TLSNOTARY_FATAL","env:TLSNOTARY_MAX_RECV_DATA","env:TLSNOTARY_MAX_SENT_DATA","env:TLSNOTARY_MODE","env:TLSNOTARY_PORT","env:TLSNOTARY_PROXY","env:TLSNOTARY_SIGNING_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-dfde38af76c341720d753903","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryService.initialize method on exported class `TLSNotaryService` in `src/features/tlsnotary/TLSNotaryService.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/tlsnotary/TLSNotaryService.ts","line_range":[270,296],"symbol_name":"TLSNotaryService.initialize","language":"typescript","module_resolution_path":"@/features/tlsnotary/TLSNotaryService"},"relationships":{"depends_on":["sym-338b16ec8f5b69d81a074d2d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","path","crypto","env:TLSNOTARY_AUTO_START","env:TLSNOTARY_DEBUG","env:TLSNOTARY_DISABLED","env:TLSNOTARY_FATAL","env:TLSNOTARY_MAX_RECV_DATA","env:TLSNOTARY_MAX_SENT_DATA","env:TLSNOTARY_MODE","env:TLSNOTARY_PORT","env:TLSNOTARY_PROXY","env:TLSNOTARY_SIGNING_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-5647f82a940e1e86a9d6bf3b","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryService.start method on exported class `TLSNotaryService` in `src/features/tlsnotary/TLSNotaryService.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/tlsnotary/TLSNotaryService.ts","line_range":[383,396],"symbol_name":"TLSNotaryService.start","language":"typescript","module_resolution_path":"@/features/tlsnotary/TLSNotaryService"},"relationships":{"depends_on":["sym-338b16ec8f5b69d81a074d2d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","path","crypto","env:TLSNOTARY_AUTO_START","env:TLSNOTARY_DEBUG","env:TLSNOTARY_DISABLED","env:TLSNOTARY_FATAL","env:TLSNOTARY_MAX_RECV_DATA","env:TLSNOTARY_MAX_SENT_DATA","env:TLSNOTARY_MODE","env:TLSNOTARY_PORT","env:TLSNOTARY_PROXY","env:TLSNOTARY_SIGNING_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-f3b88c82370c15bc11afbc17","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryService.stop method on exported class `TLSNotaryService` in `src/features/tlsnotary/TLSNotaryService.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/tlsnotary/TLSNotaryService.ts","line_range":[584,617],"symbol_name":"TLSNotaryService.stop","language":"typescript","module_resolution_path":"@/features/tlsnotary/TLSNotaryService"},"relationships":{"depends_on":["sym-338b16ec8f5b69d81a074d2d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","path","crypto","env:TLSNOTARY_AUTO_START","env:TLSNOTARY_DEBUG","env:TLSNOTARY_DISABLED","env:TLSNOTARY_FATAL","env:TLSNOTARY_MAX_RECV_DATA","env:TLSNOTARY_MAX_SENT_DATA","env:TLSNOTARY_MODE","env:TLSNOTARY_PORT","env:TLSNOTARY_PROXY","env:TLSNOTARY_SIGNING_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-08acd048f40a94dcfb5034b2","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryService.shutdown method on exported class `TLSNotaryService` in `src/features/tlsnotary/TLSNotaryService.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/tlsnotary/TLSNotaryService.ts","line_range":[624,642],"symbol_name":"TLSNotaryService.shutdown","language":"typescript","module_resolution_path":"@/features/tlsnotary/TLSNotaryService"},"relationships":{"depends_on":["sym-338b16ec8f5b69d81a074d2d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","path","crypto","env:TLSNOTARY_AUTO_START","env:TLSNOTARY_DEBUG","env:TLSNOTARY_DISABLED","env:TLSNOTARY_FATAL","env:TLSNOTARY_MAX_RECV_DATA","env:TLSNOTARY_MAX_SENT_DATA","env:TLSNOTARY_MODE","env:TLSNOTARY_PORT","env:TLSNOTARY_PROXY","env:TLSNOTARY_SIGNING_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-0a3a10f403b5b77d947e96cf","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryService.verify method on exported class `TLSNotaryService` in `src/features/tlsnotary/TLSNotaryService.ts`.","TypeScript signature: (attestation: Uint8Array | string) => VerificationResult."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/TLSNotaryService.ts","line_range":[650,680],"symbol_name":"TLSNotaryService.verify","language":"typescript","module_resolution_path":"@/features/tlsnotary/TLSNotaryService"},"relationships":{"depends_on":["sym-338b16ec8f5b69d81a074d2d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","path","crypto","env:TLSNOTARY_AUTO_START","env:TLSNOTARY_DEBUG","env:TLSNOTARY_DISABLED","env:TLSNOTARY_FATAL","env:TLSNOTARY_MAX_RECV_DATA","env:TLSNOTARY_MAX_SENT_DATA","env:TLSNOTARY_MODE","env:TLSNOTARY_PORT","env:TLSNOTARY_PROXY","env:TLSNOTARY_SIGNING_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-e3fa5fe2f1165ee2f85b2da0","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryService.getPublicKey method on exported class `TLSNotaryService` in `src/features/tlsnotary/TLSNotaryService.ts`.","TypeScript signature: () => Uint8Array."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/TLSNotaryService.ts","line_range":[687,703],"symbol_name":"TLSNotaryService.getPublicKey","language":"typescript","module_resolution_path":"@/features/tlsnotary/TLSNotaryService"},"relationships":{"depends_on":["sym-338b16ec8f5b69d81a074d2d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","path","crypto","env:TLSNOTARY_AUTO_START","env:TLSNOTARY_DEBUG","env:TLSNOTARY_DISABLED","env:TLSNOTARY_FATAL","env:TLSNOTARY_MAX_RECV_DATA","env:TLSNOTARY_MAX_SENT_DATA","env:TLSNOTARY_MODE","env:TLSNOTARY_PORT","env:TLSNOTARY_PROXY","env:TLSNOTARY_SIGNING_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-7a74034dc52098492d0b71dc","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryService.getPublicKeyHex method on exported class `TLSNotaryService` in `src/features/tlsnotary/TLSNotaryService.ts`.","TypeScript signature: () => string."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/TLSNotaryService.ts","line_range":[710,725],"symbol_name":"TLSNotaryService.getPublicKeyHex","language":"typescript","module_resolution_path":"@/features/tlsnotary/TLSNotaryService"},"relationships":{"depends_on":["sym-338b16ec8f5b69d81a074d2d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","path","crypto","env:TLSNOTARY_AUTO_START","env:TLSNOTARY_DEBUG","env:TLSNOTARY_DISABLED","env:TLSNOTARY_FATAL","env:TLSNOTARY_MAX_RECV_DATA","env:TLSNOTARY_MAX_SENT_DATA","env:TLSNOTARY_MODE","env:TLSNOTARY_PORT","env:TLSNOTARY_PROXY","env:TLSNOTARY_SIGNING_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-d5a0e6506cccbcfea1745132","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryService.getPort method on exported class `TLSNotaryService` in `src/features/tlsnotary/TLSNotaryService.ts`.","TypeScript signature: () => number."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/TLSNotaryService.ts","line_range":[730,732],"symbol_name":"TLSNotaryService.getPort","language":"typescript","module_resolution_path":"@/features/tlsnotary/TLSNotaryService"},"relationships":{"depends_on":["sym-338b16ec8f5b69d81a074d2d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","path","crypto","env:TLSNOTARY_AUTO_START","env:TLSNOTARY_DEBUG","env:TLSNOTARY_DISABLED","env:TLSNOTARY_FATAL","env:TLSNOTARY_MAX_RECV_DATA","env:TLSNOTARY_MAX_SENT_DATA","env:TLSNOTARY_MODE","env:TLSNOTARY_PORT","env:TLSNOTARY_PROXY","env:TLSNOTARY_SIGNING_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-cbd20435eb5b4e9750787653","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryService.isRunning method on exported class `TLSNotaryService` in `src/features/tlsnotary/TLSNotaryService.ts`.","TypeScript signature: () => boolean."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/TLSNotaryService.ts","line_range":[737,739],"symbol_name":"TLSNotaryService.isRunning","language":"typescript","module_resolution_path":"@/features/tlsnotary/TLSNotaryService"},"relationships":{"depends_on":["sym-338b16ec8f5b69d81a074d2d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","path","crypto","env:TLSNOTARY_AUTO_START","env:TLSNOTARY_DEBUG","env:TLSNOTARY_DISABLED","env:TLSNOTARY_FATAL","env:TLSNOTARY_MAX_RECV_DATA","env:TLSNOTARY_MAX_SENT_DATA","env:TLSNOTARY_MODE","env:TLSNOTARY_PORT","env:TLSNOTARY_PROXY","env:TLSNOTARY_SIGNING_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-b219d03ed055f1f7b729a6a7","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryService.isInitialized method on exported class `TLSNotaryService` in `src/features/tlsnotary/TLSNotaryService.ts`.","TypeScript signature: () => boolean."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/TLSNotaryService.ts","line_range":[744,752],"symbol_name":"TLSNotaryService.isInitialized","language":"typescript","module_resolution_path":"@/features/tlsnotary/TLSNotaryService"},"relationships":{"depends_on":["sym-338b16ec8f5b69d81a074d2d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","path","crypto","env:TLSNOTARY_AUTO_START","env:TLSNOTARY_DEBUG","env:TLSNOTARY_DISABLED","env:TLSNOTARY_FATAL","env:TLSNOTARY_MAX_RECV_DATA","env:TLSNOTARY_MAX_SENT_DATA","env:TLSNOTARY_MODE","env:TLSNOTARY_PORT","env:TLSNOTARY_PROXY","env:TLSNOTARY_SIGNING_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-4b8d14a11dda7e8103b0d44a","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryService.getStatus method on exported class `TLSNotaryService` in `src/features/tlsnotary/TLSNotaryService.ts`.","TypeScript signature: () => TLSNotaryServiceStatus."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/TLSNotaryService.ts","line_range":[758,788],"symbol_name":"TLSNotaryService.getStatus","language":"typescript","module_resolution_path":"@/features/tlsnotary/TLSNotaryService"},"relationships":{"depends_on":["sym-338b16ec8f5b69d81a074d2d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","path","crypto","env:TLSNOTARY_AUTO_START","env:TLSNOTARY_DEBUG","env:TLSNOTARY_DISABLED","env:TLSNOTARY_FATAL","env:TLSNOTARY_MAX_RECV_DATA","env:TLSNOTARY_MAX_SENT_DATA","env:TLSNOTARY_MODE","env:TLSNOTARY_PORT","env:TLSNOTARY_PROXY","env:TLSNOTARY_SIGNING_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-6b75b0851a7f9511ae3bdd20","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryService.isHealthy method on exported class `TLSNotaryService` in `src/features/tlsnotary/TLSNotaryService.ts`.","TypeScript signature: () => boolean."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/TLSNotaryService.ts","line_range":[794,806],"symbol_name":"TLSNotaryService.isHealthy","language":"typescript","module_resolution_path":"@/features/tlsnotary/TLSNotaryService"},"relationships":{"depends_on":["sym-338b16ec8f5b69d81a074d2d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","path","crypto","env:TLSNOTARY_AUTO_START","env:TLSNOTARY_DEBUG","env:TLSNOTARY_DISABLED","env:TLSNOTARY_FATAL","env:TLSNOTARY_MAX_RECV_DATA","env:TLSNOTARY_MAX_SENT_DATA","env:TLSNOTARY_MODE","env:TLSNOTARY_PORT","env:TLSNOTARY_PROXY","env:TLSNOTARY_SIGNING_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-338b16ec8f5b69d81a074d2d","level":"L2","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryService (class) exported from `src/features/tlsnotary/TLSNotaryService.ts`.","TLSNotary Service"],"intent_vectors":["tlsnotary","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/TLSNotaryService.ts","line_range":[229,807],"symbol_name":"TLSNotaryService","language":"typescript","module_resolution_path":"@/features/tlsnotary/TLSNotaryService"},"relationships":{"depends_on":["mod-293d53ea089a85fc8fe53c13"],"depended_by":["sym-4ce553c86e8336504c8eb620","sym-c2a6707fd089bf08cac9cc30","sym-53a5db12c86a79f27769e3ca","sym-dfde38af76c341720d753903","sym-5647f82a940e1e86a9d6bf3b","sym-f3b88c82370c15bc11afbc17","sym-08acd048f40a94dcfb5034b2","sym-0a3a10f403b5b77d947e96cf","sym-e3fa5fe2f1165ee2f85b2da0","sym-7a74034dc52098492d0b71dc","sym-d5a0e6506cccbcfea1745132","sym-cbd20435eb5b4e9750787653","sym-b219d03ed055f1f7b729a6a7","sym-4b8d14a11dda7e8103b0d44a","sym-6b75b0851a7f9511ae3bdd20"],"implements":[],"extends":[],"calls":["sym-58d4853a8ea7f7468daf5394","sym-744ab442808467ce063eecd8","sym-33ad11cf35db2f305b0f2502","sym-466b012a63df499de8b9409f"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","path","crypto","env:TLSNOTARY_AUTO_START","env:TLSNOTARY_DEBUG","env:TLSNOTARY_DISABLED","env:TLSNOTARY_FATAL","env:TLSNOTARY_MAX_RECV_DATA","env:TLSNOTARY_MAX_SENT_DATA","env:TLSNOTARY_MODE","env:TLSNOTARY_PORT","env:TLSNOTARY_PROXY","env:TLSNOTARY_SIGNING_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 203-228","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-1026fbb4213fe879c3de7679","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getTLSNotaryService (function) exported from `src/features/tlsnotary/TLSNotaryService.ts`.","TypeScript signature: () => TLSNotaryService | null.","Get or create the global TLSNotaryService instance"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/TLSNotaryService.ts","line_range":[817,822],"symbol_name":"getTLSNotaryService","language":"typescript","module_resolution_path":"@/features/tlsnotary/TLSNotaryService"},"relationships":{"depends_on":["mod-293d53ea089a85fc8fe53c13"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-5c0261c1abb8cef11691bfe3"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","path","crypto","env:TLSNOTARY_AUTO_START","env:TLSNOTARY_DEBUG","env:TLSNOTARY_DISABLED","env:TLSNOTARY_FATAL","env:TLSNOTARY_MAX_RECV_DATA","env:TLSNOTARY_MAX_SENT_DATA","env:TLSNOTARY_MODE","env:TLSNOTARY_PORT","env:TLSNOTARY_PROXY","env:TLSNOTARY_SIGNING_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 812-816","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-5c0261c1abb8cef11691bfe3","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["initializeTLSNotaryService (function) exported from `src/features/tlsnotary/TLSNotaryService.ts`.","TypeScript signature: () => Promise.","Initialize and start the global TLSNotaryService"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/tlsnotary/TLSNotaryService.ts","line_range":[828,834],"symbol_name":"initializeTLSNotaryService","language":"typescript","module_resolution_path":"@/features/tlsnotary/TLSNotaryService"},"relationships":{"depends_on":["mod-293d53ea089a85fc8fe53c13"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-1026fbb4213fe879c3de7679"],"called_by":["sym-db7de0d1f554c5e6d55d2b56"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","path","crypto","env:TLSNOTARY_AUTO_START","env:TLSNOTARY_DEBUG","env:TLSNOTARY_DISABLED","env:TLSNOTARY_FATAL","env:TLSNOTARY_MAX_RECV_DATA","env:TLSNOTARY_MAX_SENT_DATA","env:TLSNOTARY_MODE","env:TLSNOTARY_PORT","env:TLSNOTARY_PROXY","env:TLSNOTARY_SIGNING_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 824-827","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-ae7b21a626aad5c215c5336b","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["shutdownTLSNotaryService (function) exported from `src/features/tlsnotary/TLSNotaryService.ts`.","TypeScript signature: () => Promise.","Shutdown the global TLSNotaryService"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/tlsnotary/TLSNotaryService.ts","line_range":[839,844],"symbol_name":"shutdownTLSNotaryService","language":"typescript","module_resolution_path":"@/features/tlsnotary/TLSNotaryService"},"relationships":{"depends_on":["mod-293d53ea089a85fc8fe53c13"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-363a8258c584c40b62a678fd"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","path","crypto","env:TLSNOTARY_AUTO_START","env:TLSNOTARY_DEBUG","env:TLSNOTARY_DISABLED","env:TLSNOTARY_FATAL","env:TLSNOTARY_MAX_RECV_DATA","env:TLSNOTARY_MAX_SENT_DATA","env:TLSNOTARY_MODE","env:TLSNOTARY_PORT","env:TLSNOTARY_PROXY","env:TLSNOTARY_SIGNING_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 836-838","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-c0d7489cdd6eb46002210ed9","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["default (export_default) exported from `src/features/tlsnotary/TLSNotaryService.ts`."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/TLSNotaryService.ts","line_range":[846,846],"symbol_name":"default","language":"typescript","module_resolution_path":"@/features/tlsnotary/TLSNotaryService"},"relationships":{"depends_on":["mod-293d53ea089a85fc8fe53c13"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","path","crypto","env:TLSNOTARY_AUTO_START","env:TLSNOTARY_DEBUG","env:TLSNOTARY_DISABLED","env:TLSNOTARY_FATAL","env:TLSNOTARY_MAX_RECV_DATA","env:TLSNOTARY_MAX_SENT_DATA","env:TLSNOTARY_MODE","env:TLSNOTARY_PORT","env:TLSNOTARY_PROXY","env:TLSNOTARY_SIGNING_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-8da3ea034cf83decf1f3a0ab","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `NotaryConfig` in `src/features/tlsnotary/ffi.ts`.","Configuration for the TLSNotary instance"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/ffi.ts","line_range":[21,28],"symbol_name":"NotaryConfig::api","language":"typescript","module_resolution_path":"@/features/tlsnotary/ffi"},"relationships":{"depends_on":["sym-bd1b00d8d06df07a62457168"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun:ffi","path"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 18-20","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-bd1b00d8d06df07a62457168","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["NotaryConfig (interface) exported from `src/features/tlsnotary/ffi.ts`.","Configuration for the TLSNotary instance"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/ffi.ts","line_range":[21,28],"symbol_name":"NotaryConfig","language":"typescript","module_resolution_path":"@/features/tlsnotary/ffi"},"relationships":{"depends_on":["mod-0b89d77ed9ae905feafbc9e1"],"depended_by":["sym-8da3ea034cf83decf1f3a0ab"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun:ffi","path"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 18-20","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-449dc953195e16bbfb9147ce","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `VerificationResult` in `src/features/tlsnotary/ffi.ts`.","Result of attestation verification"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/ffi.ts","line_range":[33,46],"symbol_name":"VerificationResult::api","language":"typescript","module_resolution_path":"@/features/tlsnotary/ffi"},"relationships":{"depends_on":["sym-4081da70b1188501521a21dc"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun:ffi","path"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 30-32","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-4081da70b1188501521a21dc","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["VerificationResult (interface) exported from `src/features/tlsnotary/ffi.ts`.","Result of attestation verification"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/ffi.ts","line_range":[33,46],"symbol_name":"VerificationResult","language":"typescript","module_resolution_path":"@/features/tlsnotary/ffi"},"relationships":{"depends_on":["mod-0b89d77ed9ae905feafbc9e1"],"depended_by":["sym-449dc953195e16bbfb9147ce"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun:ffi","path"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 30-32","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-7ef5dea300b4021b74264879","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `NotaryHealthStatus` in `src/features/tlsnotary/ffi.ts`.","Health check status for the notary service"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/ffi.ts","line_range":[51,62],"symbol_name":"NotaryHealthStatus::api","language":"typescript","module_resolution_path":"@/features/tlsnotary/ffi"},"relationships":{"depends_on":["sym-758f05405496c1c7b69159ea"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun:ffi","path"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 48-50","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-758f05405496c1c7b69159ea","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["NotaryHealthStatus (interface) exported from `src/features/tlsnotary/ffi.ts`.","Health check status for the notary service"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/ffi.ts","line_range":[51,62],"symbol_name":"NotaryHealthStatus","language":"typescript","module_resolution_path":"@/features/tlsnotary/ffi"},"relationships":{"depends_on":["mod-0b89d77ed9ae905feafbc9e1"],"depended_by":["sym-7ef5dea300b4021b74264879"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun:ffi","path"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 48-50","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-758256edbb484a330fd44fbb","level":"L3","extraction_confidence":0.87,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `TLSNotaryFFI` in `src/features/tlsnotary/ffi.ts`.","Low-level FFI wrapper for the TLSNotary Rust library"],"intent_vectors":["tlsnotary","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/ffi.ts","line_range":[166,483],"symbol_name":"TLSNotaryFFI::api","language":"typescript","module_resolution_path":"@/features/tlsnotary/ffi"},"relationships":{"depends_on":["sym-929fb3ff8a3cf6d97191a8fc"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun:ffi","path"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 140-165","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-93c4622ced07c39637c1e143","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryFFI.startServer method on exported class `TLSNotaryFFI` in `src/features/tlsnotary/ffi.ts`.","TypeScript signature: (port: unknown) => Promise."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/tlsnotary/ffi.ts","line_range":[253,270],"symbol_name":"TLSNotaryFFI.startServer","language":"typescript","module_resolution_path":"@/features/tlsnotary/ffi"},"relationships":{"depends_on":["sym-929fb3ff8a3cf6d97191a8fc"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["bun:ffi","path"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-93205ff0d514f7be865d6def","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryFFI.stopServer method on exported class `TLSNotaryFFI` in `src/features/tlsnotary/ffi.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/tlsnotary/ffi.ts","line_range":[275,287],"symbol_name":"TLSNotaryFFI.stopServer","language":"typescript","module_resolution_path":"@/features/tlsnotary/ffi"},"relationships":{"depends_on":["sym-929fb3ff8a3cf6d97191a8fc"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["bun:ffi","path"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-720f8262db55a416213d05d7","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryFFI.verifyAttestation method on exported class `TLSNotaryFFI` in `src/features/tlsnotary/ffi.ts`.","TypeScript signature: (attestation: Uint8Array) => VerificationResult."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/ffi.ts","line_range":[294,372],"symbol_name":"TLSNotaryFFI.verifyAttestation","language":"typescript","module_resolution_path":"@/features/tlsnotary/ffi"},"relationships":{"depends_on":["sym-929fb3ff8a3cf6d97191a8fc"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun:ffi","path"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-2403c7117e90a27729574deb","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryFFI.getPublicKey method on exported class `TLSNotaryFFI` in `src/features/tlsnotary/ffi.ts`.","TypeScript signature: () => Uint8Array."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/ffi.ts","line_range":[380,400],"symbol_name":"TLSNotaryFFI.getPublicKey","language":"typescript","module_resolution_path":"@/features/tlsnotary/ffi"},"relationships":{"depends_on":["sym-929fb3ff8a3cf6d97191a8fc"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun:ffi","path"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-873410bea0fdf1494ec40a5b","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryFFI.getPublicKeyHex method on exported class `TLSNotaryFFI` in `src/features/tlsnotary/ffi.ts`.","TypeScript signature: () => string."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/ffi.ts","line_range":[406,409],"symbol_name":"TLSNotaryFFI.getPublicKeyHex","language":"typescript","module_resolution_path":"@/features/tlsnotary/ffi"},"relationships":{"depends_on":["sym-929fb3ff8a3cf6d97191a8fc"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun:ffi","path"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-0a358f0bf6c9d69cb6cf6a65","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryFFI.getHealthStatus method on exported class `TLSNotaryFFI` in `src/features/tlsnotary/ffi.ts`.","TypeScript signature: () => NotaryHealthStatus."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/ffi.ts","line_range":[415,441],"symbol_name":"TLSNotaryFFI.getHealthStatus","language":"typescript","module_resolution_path":"@/features/tlsnotary/ffi"},"relationships":{"depends_on":["sym-929fb3ff8a3cf6d97191a8fc"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun:ffi","path"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-f8da7f288f0c8f5d8a43e672","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryFFI.destroy method on exported class `TLSNotaryFFI` in `src/features/tlsnotary/ffi.ts`.","TypeScript signature: () => void."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/ffi.ts","line_range":[447,468],"symbol_name":"TLSNotaryFFI.destroy","language":"typescript","module_resolution_path":"@/features/tlsnotary/ffi"},"relationships":{"depends_on":["sym-929fb3ff8a3cf6d97191a8fc"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun:ffi","path"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-4d25122117d46c00f28b41c7","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryFFI.isInitialized method on exported class `TLSNotaryFFI` in `src/features/tlsnotary/ffi.ts`.","TypeScript signature: () => boolean."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/ffi.ts","line_range":[473,475],"symbol_name":"TLSNotaryFFI.isInitialized","language":"typescript","module_resolution_path":"@/features/tlsnotary/ffi"},"relationships":{"depends_on":["sym-929fb3ff8a3cf6d97191a8fc"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun:ffi","path"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-d954c9ed7804d9c7e265b086","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryFFI.isServerRunning method on exported class `TLSNotaryFFI` in `src/features/tlsnotary/ffi.ts`.","TypeScript signature: () => boolean."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/ffi.ts","line_range":[480,482],"symbol_name":"TLSNotaryFFI.isServerRunning","language":"typescript","module_resolution_path":"@/features/tlsnotary/ffi"},"relationships":{"depends_on":["sym-929fb3ff8a3cf6d97191a8fc"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun:ffi","path"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-929fb3ff8a3cf6d97191a8fc","level":"L2","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryFFI (class) exported from `src/features/tlsnotary/ffi.ts`.","Low-level FFI wrapper for the TLSNotary Rust library"],"intent_vectors":["tlsnotary","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/ffi.ts","line_range":[166,483],"symbol_name":"TLSNotaryFFI","language":"typescript","module_resolution_path":"@/features/tlsnotary/ffi"},"relationships":{"depends_on":["mod-0b89d77ed9ae905feafbc9e1"],"depended_by":["sym-758256edbb484a330fd44fbb","sym-93c4622ced07c39637c1e143","sym-93205ff0d514f7be865d6def","sym-720f8262db55a416213d05d7","sym-2403c7117e90a27729574deb","sym-873410bea0fdf1494ec40a5b","sym-0a358f0bf6c9d69cb6cf6a65","sym-f8da7f288f0c8f5d8a43e672","sym-4d25122117d46c00f28b41c7","sym-d954c9ed7804d9c7e265b086"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun:ffi","path"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 140-165","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-2bff24216394c4d238452642","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["default (export_default) exported from `src/features/tlsnotary/ffi.ts`."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/ffi.ts","line_range":[485,485],"symbol_name":"default","language":"typescript","module_resolution_path":"@/features/tlsnotary/ffi"},"relationships":{"depends_on":["mod-0b89d77ed9ae905feafbc9e1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun:ffi","path"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-a850bd115879fbb3dfd1c754","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryService (re_export) exported from `src/features/tlsnotary/index.ts`."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/index.ts","line_range":[63,63],"symbol_name":"TLSNotaryService","language":"typescript","module_resolution_path":"@/features/tlsnotary/index"},"relationships":{"depends_on":["mod-6468589b59a97501083efac5"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-cc16259785e538472afb2878","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["getTLSNotaryService (re_export) exported from `src/features/tlsnotary/index.ts`."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/index.ts","line_range":[63,63],"symbol_name":"getTLSNotaryService","language":"typescript","module_resolution_path":"@/features/tlsnotary/index"},"relationships":{"depends_on":["mod-6468589b59a97501083efac5"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-e32897b8d4bc13fd2ec355c3","sym-5639767a6380b54d939d3083"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-5d4d5843ec2f6746187582cb","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["getConfigFromEnv (re_export) exported from `src/features/tlsnotary/index.ts`."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/index.ts","line_range":[63,63],"symbol_name":"getConfigFromEnv","language":"typescript","module_resolution_path":"@/features/tlsnotary/index"},"relationships":{"depends_on":["mod-6468589b59a97501083efac5"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-db7de0d1f554c5e6d55d2b56","sym-e3c02dbe29b87117fa9b04db"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-758c7ae0108c14cea2c81f77","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["isTLSNotaryFatal (re_export) exported from `src/features/tlsnotary/index.ts`."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/index.ts","line_range":[63,63],"symbol_name":"isTLSNotaryFatal","language":"typescript","module_resolution_path":"@/features/tlsnotary/index"},"relationships":{"depends_on":["mod-6468589b59a97501083efac5"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-3a737e2cbc5ab28709b77f2f","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["isTLSNotaryDebug (re_export) exported from `src/features/tlsnotary/index.ts`."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/index.ts","line_range":[63,63],"symbol_name":"isTLSNotaryDebug","language":"typescript","module_resolution_path":"@/features/tlsnotary/index"},"relationships":{"depends_on":["mod-6468589b59a97501083efac5"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-0c7adeaa8d4e009a44877ca9","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["isTLSNotaryProxy (re_export) exported from `src/features/tlsnotary/index.ts`."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/index.ts","line_range":[63,63],"symbol_name":"isTLSNotaryProxy","language":"typescript","module_resolution_path":"@/features/tlsnotary/index"},"relationships":{"depends_on":["mod-6468589b59a97501083efac5"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-d17cdfb4aef3087444b3b0a5","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryFFI (re_export) exported from `src/features/tlsnotary/index.ts`."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/index.ts","line_range":[64,64],"symbol_name":"TLSNotaryFFI","language":"typescript","module_resolution_path":"@/features/tlsnotary/index"},"relationships":{"depends_on":["mod-6468589b59a97501083efac5"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-1e9d4d2f1ab5748a2c1c1613","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["NotaryConfig (re_export) exported from `src/features/tlsnotary/index.ts`."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/index.ts","line_range":[65,65],"symbol_name":"NotaryConfig","language":"typescript","module_resolution_path":"@/features/tlsnotary/index"},"relationships":{"depends_on":["mod-6468589b59a97501083efac5"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-1f2728924b585fa470a24818","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["VerificationResult (re_export) exported from `src/features/tlsnotary/index.ts`."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/index.ts","line_range":[65,65],"symbol_name":"VerificationResult","language":"typescript","module_resolution_path":"@/features/tlsnotary/index"},"relationships":{"depends_on":["mod-6468589b59a97501083efac5"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-65cd5481814fe9600aa05460","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["NotaryHealthStatus (re_export) exported from `src/features/tlsnotary/index.ts`."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/index.ts","line_range":[65,65],"symbol_name":"NotaryHealthStatus","language":"typescript","module_resolution_path":"@/features/tlsnotary/index"},"relationships":{"depends_on":["mod-6468589b59a97501083efac5"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-b3c4e54a35894e6f75f582f8","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryServiceConfig (re_export) exported from `src/features/tlsnotary/index.ts`."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/index.ts","line_range":[66,66],"symbol_name":"TLSNotaryServiceConfig","language":"typescript","module_resolution_path":"@/features/tlsnotary/index"},"relationships":{"depends_on":["mod-6468589b59a97501083efac5"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-3263681afc7b0a4a70999632","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryServiceStatus (re_export) exported from `src/features/tlsnotary/index.ts`."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/index.ts","line_range":[66,66],"symbol_name":"TLSNotaryServiceStatus","language":"typescript","module_resolution_path":"@/features/tlsnotary/index"},"relationships":{"depends_on":["mod-6468589b59a97501083efac5"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-db7de0d1f554c5e6d55d2b56","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["initializeTLSNotary (function) exported from `src/features/tlsnotary/index.ts`.","TypeScript signature: (server: BunServer) => Promise.","Initialize TLSNotary feature"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/tlsnotary/index.ts","line_range":[77,109],"symbol_name":"initializeTLSNotary","language":"typescript","module_resolution_path":"@/features/tlsnotary/index"},"relationships":{"depends_on":["mod-6468589b59a97501083efac5"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-5d4d5843ec2f6746187582cb","sym-5c0261c1abb8cef11691bfe3"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 68-76","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-363a8258c584c40b62a678fd","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["shutdownTLSNotary (function) exported from `src/features/tlsnotary/index.ts`.","TypeScript signature: () => Promise.","Shutdown TLSNotary feature"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/tlsnotary/index.ts","line_range":[116,123],"symbol_name":"shutdownTLSNotary","language":"typescript","module_resolution_path":"@/features/tlsnotary/index"},"relationships":{"depends_on":["mod-6468589b59a97501083efac5"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-ae7b21a626aad5c215c5336b"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 111-115","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-e3c02dbe29b87117fa9b04db","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["isTLSNotaryEnabled (function) exported from `src/features/tlsnotary/index.ts`.","TypeScript signature: () => boolean.","Check if TLSNotary is enabled"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/index.ts","line_range":[129,131],"symbol_name":"isTLSNotaryEnabled","language":"typescript","module_resolution_path":"@/features/tlsnotary/index"},"relationships":{"depends_on":["mod-6468589b59a97501083efac5"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-5d4d5843ec2f6746187582cb"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 125-128","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-e32897b8d4bc13fd2ec355c3","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getTLSNotaryStatus (function) exported from `src/features/tlsnotary/index.ts`.","TypeScript signature: () => unknown.","Get TLSNotary service status"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/index.ts","line_range":[137,143],"symbol_name":"getTLSNotaryStatus","language":"typescript","module_resolution_path":"@/features/tlsnotary/index"},"relationships":{"depends_on":["mod-6468589b59a97501083efac5"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-cc16259785e538472afb2878"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 133-136","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-7e6112dd781d795b89a0d740","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["default (export_default) exported from `src/features/tlsnotary/index.ts`."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/index.ts","line_range":[145,151],"symbol_name":"default","language":"typescript","module_resolution_path":"@/features/tlsnotary/index"},"relationships":{"depends_on":["mod-6468589b59a97501083efac5"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-9a8e120674ffb3d5976882cd","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PORT_CONFIG (variable) exported from `src/features/tlsnotary/portAllocator.ts`.","Configuration constants for port allocation"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/portAllocator.ts","line_range":[17,23],"symbol_name":"PORT_CONFIG","language":"typescript","module_resolution_path":"@/features/tlsnotary/portAllocator"},"relationships":{"depends_on":["mod-d890484b676af2e8fe7bd2b6"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 14-16","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-266f75531942cf49359b72a4","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `PortPoolState` in `src/features/tlsnotary/portAllocator.ts`.","Port pool state interface"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/portAllocator.ts","line_range":[28,32],"symbol_name":"PortPoolState::api","language":"typescript","module_resolution_path":"@/features/tlsnotary/portAllocator"},"relationships":{"depends_on":["sym-4c6ce39e98ae4ab81939824f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 25-27","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-4c6ce39e98ae4ab81939824f","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PortPoolState (interface) exported from `src/features/tlsnotary/portAllocator.ts`.","Port pool state interface"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/portAllocator.ts","line_range":[28,32],"symbol_name":"PortPoolState","language":"typescript","module_resolution_path":"@/features/tlsnotary/portAllocator"},"relationships":{"depends_on":["mod-d890484b676af2e8fe7bd2b6"],"depended_by":["sym-266f75531942cf49359b72a4"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 25-27","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-dc90f4d9772ae4e497b4d0fb","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["initPortPool (function) exported from `src/features/tlsnotary/portAllocator.ts`.","TypeScript signature: () => PortPoolState.","Initialize a new port pool state"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/portAllocator.ts","line_range":[38,44],"symbol_name":"initPortPool","language":"typescript","module_resolution_path":"@/features/tlsnotary/portAllocator"},"relationships":{"depends_on":["mod-d890484b676af2e8fe7bd2b6"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["net"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 34-37","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-15181e6b0024657af6420bb3","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["isPortAvailable (function) exported from `src/features/tlsnotary/portAllocator.ts`.","TypeScript signature: (port: number) => Promise.","Check if a port is available by attempting to bind to it"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/tlsnotary/portAllocator.ts","line_range":[51,85],"symbol_name":"isPortAvailable","language":"typescript","module_resolution_path":"@/features/tlsnotary/portAllocator"},"relationships":{"depends_on":["mod-d890484b676af2e8fe7bd2b6"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-f22d728c52d0e3f559ffbb8a"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["net"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 46-50","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-f22d728c52d0e3f559ffbb8a","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["allocatePort (function) exported from `src/features/tlsnotary/portAllocator.ts`.","TypeScript signature: (pool: PortPoolState) => Promise.","Allocate a port from the pool"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/tlsnotary/portAllocator.ts","line_range":[93,125],"symbol_name":"allocatePort","language":"typescript","module_resolution_path":"@/features/tlsnotary/portAllocator"},"relationships":{"depends_on":["mod-d890484b676af2e8fe7bd2b6"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-15181e6b0024657af6420bb3"],"called_by":["sym-5d2517b043286dce6d6847d7"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["net"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 87-92","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-17663c6ac3e09ee99af6cbfc","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["releasePort (function) exported from `src/features/tlsnotary/portAllocator.ts`.","TypeScript signature: (pool: PortPoolState, port: number) => void.","Release a port back to the recycled pool"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/portAllocator.ts","line_range":[132,141],"symbol_name":"releasePort","language":"typescript","module_resolution_path":"@/features/tlsnotary/portAllocator"},"relationships":{"depends_on":["mod-d890484b676af2e8fe7bd2b6"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-4435b2ba48da9de578ec8950","sym-5d2517b043286dce6d6847d7","sym-1d9d546626598e46d80a33e3"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["net"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 127-131","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-a9c92d2af5e8dba2d840eb22","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getPoolStats (function) exported from `src/features/tlsnotary/portAllocator.ts`.","TypeScript signature: (pool: PortPoolState) => {\n allocated: number\n recycled: number\n remaining: number\n total: number\n}.","Get current pool statistics"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/portAllocator.ts","line_range":[148,164],"symbol_name":"getPoolStats","language":"typescript","module_resolution_path":"@/features/tlsnotary/portAllocator"},"relationships":{"depends_on":["mod-d890484b676af2e8fe7bd2b6"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["net"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 143-147","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-fc707a99e6953bbe1224a9c7","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported enum `ProxyError` in `src/features/tlsnotary/proxyManager.ts`.","Error codes for proxy operations"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/proxyManager.ts","line_range":[51,56],"symbol_name":"ProxyError::api","language":"typescript","module_resolution_path":"@/features/tlsnotary/proxyManager"},"relationships":{"depends_on":["sym-26cbeaf8371240e40a439ffd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["child_process","util","env:CARGO_HOME","env:EXPOSED_URL","env:HOME"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 48-50","related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-26cbeaf8371240e40a439ffd","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ProxyError (enum) exported from `src/features/tlsnotary/proxyManager.ts`.","Error codes for proxy operations"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/proxyManager.ts","line_range":[51,56],"symbol_name":"ProxyError","language":"typescript","module_resolution_path":"@/features/tlsnotary/proxyManager"},"relationships":{"depends_on":["mod-94f67b12c658d567d29471e0"],"depended_by":["sym-fc707a99e6953bbe1224a9c7"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["child_process","util","env:CARGO_HOME","env:EXPOSED_URL","env:HOME"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 48-50","related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-907710b9e6031b27ee27d792","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ProxyInfo` in `src/features/tlsnotary/proxyManager.ts`.","Information about a running proxy"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/proxyManager.ts","line_range":[61,70],"symbol_name":"ProxyInfo::api","language":"typescript","module_resolution_path":"@/features/tlsnotary/proxyManager"},"relationships":{"depends_on":["sym-297ca357cdc84e9e674a3d04"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["child_process","util","env:CARGO_HOME","env:EXPOSED_URL","env:HOME"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 58-60","related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-297ca357cdc84e9e674a3d04","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ProxyInfo (interface) exported from `src/features/tlsnotary/proxyManager.ts`.","Information about a running proxy"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/proxyManager.ts","line_range":[61,70],"symbol_name":"ProxyInfo","language":"typescript","module_resolution_path":"@/features/tlsnotary/proxyManager"},"relationships":{"depends_on":["mod-94f67b12c658d567d29471e0"],"depended_by":["sym-907710b9e6031b27ee27d792"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["child_process","util","env:CARGO_HOME","env:EXPOSED_URL","env:HOME"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 58-60","related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-62a7a1c4aacf761c94364b47","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `TLSNotaryState` in `src/features/tlsnotary/proxyManager.ts`.","TLSNotary state stored in sharedState"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/proxyManager.ts","line_range":[75,78],"symbol_name":"TLSNotaryState::api","language":"typescript","module_resolution_path":"@/features/tlsnotary/proxyManager"},"relationships":{"depends_on":["sym-3db558af1680fcbc9c209696"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["child_process","util","env:CARGO_HOME","env:EXPOSED_URL","env:HOME"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 72-74","related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-3db558af1680fcbc9c209696","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryState (interface) exported from `src/features/tlsnotary/proxyManager.ts`.","TLSNotary state stored in sharedState"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/proxyManager.ts","line_range":[75,78],"symbol_name":"TLSNotaryState","language":"typescript","module_resolution_path":"@/features/tlsnotary/proxyManager"},"relationships":{"depends_on":["mod-94f67b12c658d567d29471e0"],"depended_by":["sym-62a7a1c4aacf761c94364b47"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["child_process","util","env:CARGO_HOME","env:EXPOSED_URL","env:HOME"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 72-74","related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-c591da5cf9fd5033796fad52","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ProxyRequestSuccess` in `src/features/tlsnotary/proxyManager.ts`.","Success response for proxy request"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/proxyManager.ts","line_range":[83,88],"symbol_name":"ProxyRequestSuccess::api","language":"typescript","module_resolution_path":"@/features/tlsnotary/proxyManager"},"relationships":{"depends_on":["sym-f16008b8cfe1c5b3dc8f9be0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["child_process","util","env:CARGO_HOME","env:EXPOSED_URL","env:HOME"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 80-82","related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-f16008b8cfe1c5b3dc8f9be0","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ProxyRequestSuccess (interface) exported from `src/features/tlsnotary/proxyManager.ts`.","Success response for proxy request"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/proxyManager.ts","line_range":[83,88],"symbol_name":"ProxyRequestSuccess","language":"typescript","module_resolution_path":"@/features/tlsnotary/proxyManager"},"relationships":{"depends_on":["mod-94f67b12c658d567d29471e0"],"depended_by":["sym-c591da5cf9fd5033796fad52"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["child_process","util","env:CARGO_HOME","env:EXPOSED_URL","env:HOME"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 80-82","related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-0235109d7d5578b7564492f0","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ProxyRequestError` in `src/features/tlsnotary/proxyManager.ts`.","Error response for proxy request"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/proxyManager.ts","line_range":[93,98],"symbol_name":"ProxyRequestError::api","language":"typescript","module_resolution_path":"@/features/tlsnotary/proxyManager"},"relationships":{"depends_on":["sym-7983e9e5facf67e208691a4a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["child_process","util","env:CARGO_HOME","env:EXPOSED_URL","env:HOME"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 90-92","related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-7983e9e5facf67e208691a4a","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ProxyRequestError (interface) exported from `src/features/tlsnotary/proxyManager.ts`.","Error response for proxy request"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/proxyManager.ts","line_range":[93,98],"symbol_name":"ProxyRequestError","language":"typescript","module_resolution_path":"@/features/tlsnotary/proxyManager"},"relationships":{"depends_on":["mod-94f67b12c658d567d29471e0"],"depended_by":["sym-0235109d7d5578b7564492f0"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["child_process","util","env:CARGO_HOME","env:EXPOSED_URL","env:HOME"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 90-92","related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-af4dfd683d1a5aaafa97f71b","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ensureWstcp (function) exported from `src/features/tlsnotary/proxyManager.ts`.","TypeScript signature: () => Promise.","Ensure wstcp binary is available, installing if needed"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/tlsnotary/proxyManager.ts","line_range":[126,143],"symbol_name":"ensureWstcp","language":"typescript","module_resolution_path":"@/features/tlsnotary/proxyManager"},"relationships":{"depends_on":["mod-94f67b12c658d567d29471e0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-5d2517b043286dce6d6847d7"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["child_process","util","env:CARGO_HOME","env:EXPOSED_URL","env:HOME"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 122-125","related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-b20154660e4ffdb468116aa2","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["extractDomainAndPort (function) exported from `src/features/tlsnotary/proxyManager.ts`.","TypeScript signature: (targetUrl: string) => {\n domain: string\n port: number\n}.","Extract domain and port from a target URL"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/proxyManager.ts","line_range":[150,169],"symbol_name":"extractDomainAndPort","language":"typescript","module_resolution_path":"@/features/tlsnotary/proxyManager"},"relationships":{"depends_on":["mod-94f67b12c658d567d29471e0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-5d2517b043286dce6d6847d7"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["child_process","util","env:CARGO_HOME","env:EXPOSED_URL","env:HOME"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 145-149","related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-b4012c771eba259cf8dd4592","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getPublicUrl (function) exported from `src/features/tlsnotary/proxyManager.ts`.","TypeScript signature: (localPort: number, requestOrigin: string) => string.","Build the public WebSocket URL for the proxy"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/proxyManager.ts","line_range":[177,210],"symbol_name":"getPublicUrl","language":"typescript","module_resolution_path":"@/features/tlsnotary/proxyManager"},"relationships":{"depends_on":["mod-94f67b12c658d567d29471e0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["child_process","util","env:CARGO_HOME","env:EXPOSED_URL","env:HOME"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 171-176","related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-4435b2ba48da9de578ec8950","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["cleanupStaleProxies (function) exported from `src/features/tlsnotary/proxyManager.ts`.","TypeScript signature: () => void.","Clean up stale proxies (idle > 30s)"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/proxyManager.ts","line_range":[377,401],"symbol_name":"cleanupStaleProxies","language":"typescript","module_resolution_path":"@/features/tlsnotary/proxyManager"},"relationships":{"depends_on":["mod-94f67b12c658d567d29471e0"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-17663c6ac3e09ee99af6cbfc"],"called_by":["sym-5d2517b043286dce6d6847d7"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["child_process","util","env:CARGO_HOME","env:EXPOSED_URL","env:HOME"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 373-376","related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-5d2517b043286dce6d6847d7","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["requestProxy (function) exported from `src/features/tlsnotary/proxyManager.ts`.","TypeScript signature: (targetUrl: string, requestOrigin: string) => Promise.","Request a proxy for the given target URL"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/tlsnotary/proxyManager.ts","line_range":[423,521],"symbol_name":"requestProxy","language":"typescript","module_resolution_path":"@/features/tlsnotary/proxyManager"},"relationships":{"depends_on":["mod-94f67b12c658d567d29471e0"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-af4dfd683d1a5aaafa97f71b","sym-b20154660e4ffdb468116aa2","sym-4435b2ba48da9de578ec8950","sym-f22d728c52d0e3f559ffbb8a","sym-17663c6ac3e09ee99af6cbfc"],"called_by":["sym-5639767a6380b54d939d3083"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["child_process","util","env:CARGO_HOME","env:EXPOSED_URL","env:HOME"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 415-422","related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-1d9d546626598e46d80a33e3","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["killProxy (function) exported from `src/features/tlsnotary/proxyManager.ts`.","TypeScript signature: (proxyId: string) => boolean.","Kill a specific proxy by ID"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/proxyManager.ts","line_range":[528,546],"symbol_name":"killProxy","language":"typescript","module_resolution_path":"@/features/tlsnotary/proxyManager"},"relationships":{"depends_on":["mod-94f67b12c658d567d29471e0"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-17663c6ac3e09ee99af6cbfc"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["child_process","util","env:CARGO_HOME","env:EXPOSED_URL","env:HOME"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 523-527","related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-30522ef6077dd999b7f172c6","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["killAllProxies (function) exported from `src/features/tlsnotary/proxyManager.ts`.","TypeScript signature: () => void.","Kill all active proxies (cleanup on shutdown)"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/proxyManager.ts","line_range":[551,565],"symbol_name":"killAllProxies","language":"typescript","module_resolution_path":"@/features/tlsnotary/proxyManager"},"relationships":{"depends_on":["mod-94f67b12c658d567d29471e0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["child_process","util","env:CARGO_HOME","env:EXPOSED_URL","env:HOME"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 548-550","related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-debcbb487e8f163b6358c170","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getProxyManagerStatus (function) exported from `src/features/tlsnotary/proxyManager.ts`.","TypeScript signature: () => {\n activeProxies: number\n proxies: Array<{\n proxyId: string\n domain: string\n port: number\n idleSeconds: number\n }>\n portPool: {\n allocated: number\n recycled: number\n remaining: number\n }\n}.","Get current proxy manager status"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/proxyManager.ts","line_range":[570,611],"symbol_name":"getProxyManagerStatus","language":"typescript","module_resolution_path":"@/features/tlsnotary/proxyManager"},"relationships":{"depends_on":["mod-94f67b12c658d567d29471e0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["child_process","util","env:CARGO_HOME","env:EXPOSED_URL","env:HOME"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 567-569","related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-c40d1a0a528d0efe34d893f0","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["registerTLSNotaryRoutes (function) exported from `src/features/tlsnotary/routes.ts`.","TypeScript signature: (server: BunServer) => void.","Register TLSNotary routes with BunServer"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/routes.ts","line_range":[213,224],"symbol_name":"registerTLSNotaryRoutes","language":"typescript","module_resolution_path":"@/features/tlsnotary/routes"},"relationships":{"depends_on":["mod-7913910232f2f61a1d86ca8d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-8851eae25a7755afe330f85c"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 203-212","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-719fa881592657d7ae9efe07","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["default (export_default) exported from `src/features/tlsnotary/routes.ts`."],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/routes.ts","line_range":[226,226],"symbol_name":"default","language":"typescript","module_resolution_path":"@/features/tlsnotary/routes"},"relationships":{"depends_on":["mod-7913910232f2f61a1d86ca8d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-433666f8a3a3ca195a6c43b9","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TOKEN_CONFIG (variable) exported from `src/features/tlsnotary/tokenManager.ts`.","Token configuration constants"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/tokenManager.ts","line_range":[18,22],"symbol_name":"TOKEN_CONFIG","language":"typescript","module_resolution_path":"@/features/tlsnotary/tokenManager"},"relationships":{"depends_on":["mod-de2778e7582cc783d0c02163"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["crypto"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 15-17","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-3bf1037e30906da22b26b10b","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported enum `TokenStatus` in `src/features/tlsnotary/tokenManager.ts`.","Token status enum"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/tokenManager.ts","line_range":[27,34],"symbol_name":"TokenStatus::api","language":"typescript","module_resolution_path":"@/features/tlsnotary/tokenManager"},"relationships":{"depends_on":["sym-1bc6f773d7c81a2ab06a3280"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["crypto"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 24-26","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-1bc6f773d7c81a2ab06a3280","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TokenStatus (enum) exported from `src/features/tlsnotary/tokenManager.ts`.","Token status enum"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/tokenManager.ts","line_range":[27,34],"symbol_name":"TokenStatus","language":"typescript","module_resolution_path":"@/features/tlsnotary/tokenManager"},"relationships":{"depends_on":["mod-de2778e7582cc783d0c02163"],"depended_by":["sym-3bf1037e30906da22b26b10b"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["crypto"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 24-26","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-d8616b9f73c4507701982752","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `AttestationToken` in `src/features/tlsnotary/tokenManager.ts`.","Attestation token structure"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/tokenManager.ts","line_range":[39,49],"symbol_name":"AttestationToken::api","language":"typescript","module_resolution_path":"@/features/tlsnotary/tokenManager"},"relationships":{"depends_on":["sym-c40372def081f07b71bd4712"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["crypto"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 36-38","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-c40372def081f07b71bd4712","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["AttestationToken (interface) exported from `src/features/tlsnotary/tokenManager.ts`.","Attestation token structure"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/tokenManager.ts","line_range":[39,49],"symbol_name":"AttestationToken","language":"typescript","module_resolution_path":"@/features/tlsnotary/tokenManager"},"relationships":{"depends_on":["mod-de2778e7582cc783d0c02163"],"depended_by":["sym-d8616b9f73c4507701982752"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["crypto"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 36-38","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-c6c98cc6d0c52307aa196164","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `TokenStoreState` in `src/features/tlsnotary/tokenManager.ts`.","Token store state (stored in sharedState)"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/tokenManager.ts","line_range":[54,57],"symbol_name":"TokenStoreState::api","language":"typescript","module_resolution_path":"@/features/tlsnotary/tokenManager"},"relationships":{"depends_on":["sym-33df031e22a2d073aff29d0a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["crypto"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 51-53","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-33df031e22a2d073aff29d0a","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TokenStoreState (interface) exported from `src/features/tlsnotary/tokenManager.ts`.","Token store state (stored in sharedState)"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/tokenManager.ts","line_range":[54,57],"symbol_name":"TokenStoreState","language":"typescript","module_resolution_path":"@/features/tlsnotary/tokenManager"},"relationships":{"depends_on":["mod-de2778e7582cc783d0c02163"],"depended_by":["sym-c6c98cc6d0c52307aa196164"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["crypto"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 51-53","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-adc4065dd1b3ac679d5ba2f9","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["extractDomain (function) exported from `src/features/tlsnotary/tokenManager.ts`.","TypeScript signature: (targetUrl: string) => string.","Extract domain from a URL"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/tokenManager.ts","line_range":[98,105],"symbol_name":"extractDomain","language":"typescript","module_resolution_path":"@/features/tlsnotary/tokenManager"},"relationships":{"depends_on":["mod-de2778e7582cc783d0c02163"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-4e80afaf50ee6162c65e2622","sym-0115c78857a4e5f525339e2d","sym-951698e6c9f720f735f0bfe3","sym-96eda9bc4b46c54fa62b2965"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["crypto"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 95-97","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-4e80afaf50ee6162c65e2622","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["createToken (function) exported from `src/features/tlsnotary/tokenManager.ts`.","TypeScript signature: (owner: string, targetUrl: string, txHash: string) => AttestationToken.","Create a new attestation token"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/tokenManager.ts","line_range":[115,139],"symbol_name":"createToken","language":"typescript","module_resolution_path":"@/features/tlsnotary/tokenManager"},"relationships":{"depends_on":["mod-de2778e7582cc783d0c02163"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-adc4065dd1b3ac679d5ba2f9"],"called_by":["sym-96eda9bc4b46c54fa62b2965"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["crypto"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 107-114","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-2e9af8ad888cbeef0ea5caea","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `TokenValidationResult` in `src/features/tlsnotary/tokenManager.ts`.","Validation result for token checks"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/tokenManager.ts","line_range":[144,148],"symbol_name":"TokenValidationResult::api","language":"typescript","module_resolution_path":"@/features/tlsnotary/tokenManager"},"relationships":{"depends_on":["sym-ad0f36d2976eaf60bf419c15"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["crypto"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 141-143","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-ad0f36d2976eaf60bf419c15","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TokenValidationResult (interface) exported from `src/features/tlsnotary/tokenManager.ts`.","Validation result for token checks"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/tokenManager.ts","line_range":[144,148],"symbol_name":"TokenValidationResult","language":"typescript","module_resolution_path":"@/features/tlsnotary/tokenManager"},"relationships":{"depends_on":["mod-de2778e7582cc783d0c02163"],"depended_by":["sym-2e9af8ad888cbeef0ea5caea"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["crypto"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 141-143","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-0115c78857a4e5f525339e2d","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["validateToken (function) exported from `src/features/tlsnotary/tokenManager.ts`.","TypeScript signature: (tokenId: string, owner: string, targetUrl: string) => TokenValidationResult.","Validate a token for use"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/tokenManager.ts","line_range":[158,205],"symbol_name":"validateToken","language":"typescript","module_resolution_path":"@/features/tlsnotary/tokenManager"},"relationships":{"depends_on":["mod-de2778e7582cc783d0c02163"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-adc4065dd1b3ac679d5ba2f9"],"called_by":["sym-5639767a6380b54d939d3083"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["crypto"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 150-157","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-5057526194c060d19120572f","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["consumeRetry (function) exported from `src/features/tlsnotary/tokenManager.ts`.","TypeScript signature: (tokenId: string, proxyId: string) => AttestationToken | null.","Consume a retry attempt and mark token as active"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/tokenManager.ts","line_range":[214,233],"symbol_name":"consumeRetry","language":"typescript","module_resolution_path":"@/features/tlsnotary/tokenManager"},"relationships":{"depends_on":["mod-de2778e7582cc783d0c02163"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-5639767a6380b54d939d3083"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["crypto"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 207-213","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-fb41addf4b834b1cd33edc92","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["markCompleted (function) exported from `src/features/tlsnotary/tokenManager.ts`.","TypeScript signature: (tokenId: string) => AttestationToken | null.","Mark token as completed (attestation successful)"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/tokenManager.ts","line_range":[241,253],"symbol_name":"markCompleted","language":"typescript","module_resolution_path":"@/features/tlsnotary/tokenManager"},"relationships":{"depends_on":["mod-de2778e7582cc783d0c02163"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["crypto"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 235-240","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-9281614f452adafc3cae1183","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["markStored (function) exported from `src/features/tlsnotary/tokenManager.ts`.","TypeScript signature: (tokenId: string) => AttestationToken | null.","Mark token as stored (proof saved on-chain or IPFS)"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/tokenManager.ts","line_range":[261,273],"symbol_name":"markStored","language":"typescript","module_resolution_path":"@/features/tlsnotary/tokenManager"},"relationships":{"depends_on":["mod-de2778e7582cc783d0c02163"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-951698e6c9f720f735f0bfe3"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["crypto"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 255-260","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-b4ef38925e03b3181e41e353","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getToken (function) exported from `src/features/tlsnotary/tokenManager.ts`.","TypeScript signature: (tokenId: string) => AttestationToken | undefined.","Get a token by ID"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/tokenManager.ts","line_range":[281,284],"symbol_name":"getToken","language":"typescript","module_resolution_path":"@/features/tlsnotary/tokenManager"},"relationships":{"depends_on":["mod-de2778e7582cc783d0c02163"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-951698e6c9f720f735f0bfe3","sym-5639767a6380b54d939d3083"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["crypto"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 275-280","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-814eb4802fa432ff5ff8bc82","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getTokenByTxHash (function) exported from `src/features/tlsnotary/tokenManager.ts`.","TypeScript signature: (txHash: string) => AttestationToken | undefined.","Get token by transaction hash"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/tokenManager.ts","line_range":[292,300],"symbol_name":"getTokenByTxHash","language":"typescript","module_resolution_path":"@/features/tlsnotary/tokenManager"},"relationships":{"depends_on":["mod-de2778e7582cc783d0c02163"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-5639767a6380b54d939d3083"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["crypto"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 286-291","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-f954c7b798e4f9310812532d","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["cleanupExpiredTokens (function) exported from `src/features/tlsnotary/tokenManager.ts`.","TypeScript signature: () => number.","Cleanup expired tokens"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/tokenManager.ts","line_range":[305,322],"symbol_name":"cleanupExpiredTokens","language":"typescript","module_resolution_path":"@/features/tlsnotary/tokenManager"},"relationships":{"depends_on":["mod-de2778e7582cc783d0c02163"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["crypto"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 302-304","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-7a7c3a1eb526becc41e434a1","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getTokenStats (function) exported from `src/features/tlsnotary/tokenManager.ts`.","TypeScript signature: () => {\n total: number\n byStatus: Record\n}.","Get token store statistics"],"intent_vectors":["tlsnotary"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/tlsnotary/tokenManager.ts","line_range":[327,349],"symbol_name":"getTokenStats","language":"typescript","module_resolution_path":"@/features/tlsnotary/tokenManager"},"relationships":{"depends_on":["mod-de2778e7582cc783d0c02163"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-5639767a6380b54d939d3083"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["crypto"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 324-326","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-4722e7f6cce02aa7a45c0ca8","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `DAHR` in `src/features/web2/dahr/DAHR.ts`.","DAHR - Data Agnostic HTTPS Relay, class that handles the Web2 request and proxy process."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/web2/dahr/DAHR.ts","line_range":[17,130],"symbol_name":"DAHR::api","language":"typescript","module_resolution_path":"@/features/web2/dahr/DAHR"},"relationships":{"depends_on":["sym-e627965d04649dc42cc45b54"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 14-16","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-8e6fb1c5edb7ed62e201d405","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DAHR.web2Request method on exported class `DAHR` in `src/features/web2/dahr/DAHR.ts`.","TypeScript signature: () => IWeb2Request."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/web2/dahr/DAHR.ts","line_range":[49,51],"symbol_name":"DAHR.web2Request","language":"typescript","module_resolution_path":"@/features/web2/dahr/DAHR"},"relationships":{"depends_on":["sym-e627965d04649dc42cc45b54"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-954b96385b9de9e9207933cc","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DAHR.sessionId method on exported class `DAHR` in `src/features/web2/dahr/DAHR.ts`.","TypeScript signature: () => string."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/web2/dahr/DAHR.ts","line_range":[57,59],"symbol_name":"DAHR.sessionId","language":"typescript","module_resolution_path":"@/features/web2/dahr/DAHR"},"relationships":{"depends_on":["sym-e627965d04649dc42cc45b54"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-0e15f799bb0693f0511b578d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DAHR.startProxy method on exported class `DAHR` in `src/features/web2/dahr/DAHR.ts`.","TypeScript signature: ({\n method,\n headers,\n payload,\n authorization,\n url,\n }: IDAHRStartProxyParams) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/web2/dahr/DAHR.ts","line_range":[65,101],"symbol_name":"DAHR.startProxy","language":"typescript","module_resolution_path":"@/features/web2/dahr/DAHR"},"relationships":{"depends_on":["sym-e627965d04649dc42cc45b54"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-3d6899724c0d41cfd6f474f0","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DAHR.stopProxy method on exported class `DAHR` in `src/features/web2/dahr/DAHR.ts`.","TypeScript signature: () => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/web2/dahr/DAHR.ts","line_range":[106,108],"symbol_name":"DAHR.stopProxy","language":"typescript","module_resolution_path":"@/features/web2/dahr/DAHR"},"relationships":{"depends_on":["sym-e627965d04649dc42cc45b54"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-7cfb9cd62ef3a3bcba6133d6","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DAHR.toSerializable method on exported class `DAHR` in `src/features/web2/dahr/DAHR.ts`.","TypeScript signature: () => {\n sessionId: string\n web2Request: IWeb2Request\n }."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/web2/dahr/DAHR.ts","line_range":[114,129],"symbol_name":"DAHR.toSerializable","language":"typescript","module_resolution_path":"@/features/web2/dahr/DAHR"},"relationships":{"depends_on":["sym-e627965d04649dc42cc45b54"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-e627965d04649dc42cc45b54","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DAHR (class) exported from `src/features/web2/dahr/DAHR.ts`.","DAHR - Data Agnostic HTTPS Relay, class that handles the Web2 request and proxy process."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/web2/dahr/DAHR.ts","line_range":[17,130],"symbol_name":"DAHR","language":"typescript","module_resolution_path":"@/features/web2/dahr/DAHR"},"relationships":{"depends_on":["mod-3dc939e68aaf71174e695f9e"],"depended_by":["sym-4722e7f6cce02aa7a45c0ca8","sym-8e6fb1c5edb7ed62e201d405","sym-954b96385b9de9e9207933cc","sym-0e15f799bb0693f0511b578d","sym-3d6899724c0d41cfd6f474f0","sym-7cfb9cd62ef3a3bcba6133d6"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 14-16","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-5115d455ff0b3f7736ab7b40","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `DAHRFactory` in `src/features/web2/dahr/DAHRFactory.ts`.","DAHRFactory is a singleton class that manages DAHR instances."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/web2/dahr/DAHRFactory.ts","line_range":[8,74],"symbol_name":"DAHRFactory::api","language":"typescript","module_resolution_path":"@/features/web2/dahr/DAHRFactory"},"relationships":{"depends_on":["sym-d37277bb65ea84e12d02d020"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 5-7","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-646106dbb39ff99ccb6a16d6","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DAHRFactory.instance method on exported class `DAHRFactory` in `src/features/web2/dahr/DAHRFactory.ts`.","TypeScript signature: () => DAHRFactory."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/web2/dahr/DAHRFactory.ts","line_range":[35,41],"symbol_name":"DAHRFactory.instance","language":"typescript","module_resolution_path":"@/features/web2/dahr/DAHRFactory"},"relationships":{"depends_on":["sym-d37277bb65ea84e12d02d020"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-29dba20c5dbe8beee9ac139b","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DAHRFactory.createDAHR method on exported class `DAHRFactory` in `src/features/web2/dahr/DAHRFactory.ts`.","TypeScript signature: (web2Request: IWeb2Request) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/web2/dahr/DAHRFactory.ts","line_range":[48,56],"symbol_name":"DAHRFactory.createDAHR","language":"typescript","module_resolution_path":"@/features/web2/dahr/DAHRFactory"},"relationships":{"depends_on":["sym-d37277bb65ea84e12d02d020"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-c876049c95a83447cb3011f5","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DAHRFactory.getDAHR method on exported class `DAHRFactory` in `src/features/web2/dahr/DAHRFactory.ts`.","TypeScript signature: (sessionId: string) => DAHR | undefined."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/web2/dahr/DAHRFactory.ts","line_range":[63,73],"symbol_name":"DAHRFactory.getDAHR","language":"typescript","module_resolution_path":"@/features/web2/dahr/DAHRFactory"},"relationships":{"depends_on":["sym-d37277bb65ea84e12d02d020"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-d37277bb65ea84e12d02d020","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DAHRFactory (class) exported from `src/features/web2/dahr/DAHRFactory.ts`.","DAHRFactory is a singleton class that manages DAHR instances."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/web2/dahr/DAHRFactory.ts","line_range":[8,74],"symbol_name":"DAHRFactory","language":"typescript","module_resolution_path":"@/features/web2/dahr/DAHRFactory"},"relationships":{"depends_on":["mod-6efee936b845d34104bac46c"],"depended_by":["sym-5115d455ff0b3f7736ab7b40","sym-646106dbb39ff99ccb6a16d6","sym-29dba20c5dbe8beee9ac139b","sym-c876049c95a83447cb3011f5"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 5-7","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-c0b505bebd5393a5e4195eff","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleWeb2 (function) exported from `src/features/web2/handleWeb2.ts`.","TypeScript signature: (web2Request: IWeb2Request) => Promise.","Handles a Web2 request."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/web2/handleWeb2.ts","line_range":[19,47],"symbol_name":"handleWeb2","language":"typescript","module_resolution_path":"@/features/web2/handleWeb2"},"relationships":{"depends_on":["mod-7866a2e46802b656e108eb43"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-7e7c43222ce7463a1dcc2533"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 7-18","related_adr":null,"last_modified":"2026-02-13T14:41:04.947Z","authors":[]}} +{"uuid":"sym-abf9a552e1b6a1741fd89eea","level":"L3","extraction_confidence":0.87,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `Proxy` in `src/features/web2/proxy/Proxy.ts`.","A proxy server class that handles HTTP/HTTPS requests by creating a local proxy server."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/web2/proxy/Proxy.ts","line_range":[24,529],"symbol_name":"Proxy::api","language":"typescript","module_resolution_path":"@/features/web2/proxy/Proxy"},"relationships":{"depends_on":["sym-bfe9e935a34dd0614090ce99"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["https","http","http-proxy","url","net","node:dns/promises","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 19-23","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-9b202e46a4d2e18367b66d73","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Proxy.sendHTTPRequest method on exported class `Proxy` in `src/features/web2/proxy/Proxy.ts`.","TypeScript signature: (params: ISendHTTPRequestParams) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/web2/proxy/Proxy.ts","line_range":[51,152],"symbol_name":"Proxy.sendHTTPRequest","language":"typescript","module_resolution_path":"@/features/web2/proxy/Proxy"},"relationships":{"depends_on":["sym-bfe9e935a34dd0614090ce99"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["https","http","http-proxy","url","net","node:dns/promises","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-aca57b52879b4144d90ddf08","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Proxy.stopProxy method on exported class `Proxy` in `src/features/web2/proxy/Proxy.ts`.","TypeScript signature: () => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/web2/proxy/Proxy.ts","line_range":[160,176],"symbol_name":"Proxy.stopProxy","language":"typescript","module_resolution_path":"@/features/web2/proxy/Proxy"},"relationships":{"depends_on":["sym-bfe9e935a34dd0614090ce99"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["https","http","http-proxy","url","net","node:dns/promises","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-bfe9e935a34dd0614090ce99","level":"L2","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Proxy (class) exported from `src/features/web2/proxy/Proxy.ts`.","A proxy server class that handles HTTP/HTTPS requests by creating a local proxy server."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/web2/proxy/Proxy.ts","line_range":[24,529],"symbol_name":"Proxy","language":"typescript","module_resolution_path":"@/features/web2/proxy/Proxy"},"relationships":{"depends_on":["mod-ea8114d37c6855f0420f3753"],"depended_by":["sym-abf9a552e1b6a1741fd89eea","sym-9b202e46a4d2e18367b66d73","sym-aca57b52879b4144d90ddf08"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["https","http","http-proxy","url","net","node:dns/promises","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 19-23","related_adr":null,"last_modified":"2026-02-18T13:23:55.603Z","authors":[]}} +{"uuid":"sym-a3370fbc057c5e1c22e7793b","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `ProxyFactory` in `src/features/web2/proxy/ProxyFactory.ts`.","ProxyFactory - Factory class for creating and managing Proxy instances."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/web2/proxy/ProxyFactory.ts","line_range":[6,15],"symbol_name":"ProxyFactory::api","language":"typescript","module_resolution_path":"@/features/web2/proxy/ProxyFactory"},"relationships":{"depends_on":["sym-2fbba88417d7be653ece3499"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 3-5","related_adr":null,"last_modified":"2026-02-13T14:41:04.947Z","authors":[]}} +{"uuid":"sym-7694c211fe907466d8273a7e","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ProxyFactory.createProxy method on exported class `ProxyFactory` in `src/features/web2/proxy/ProxyFactory.ts`.","TypeScript signature: (dahrSessionId: string) => Proxy."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/web2/proxy/ProxyFactory.ts","line_range":[12,14],"symbol_name":"ProxyFactory.createProxy","language":"typescript","module_resolution_path":"@/features/web2/proxy/ProxyFactory"},"relationships":{"depends_on":["sym-2fbba88417d7be653ece3499"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.947Z","authors":[]}} +{"uuid":"sym-2fbba88417d7be653ece3499","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ProxyFactory (class) exported from `src/features/web2/proxy/ProxyFactory.ts`.","ProxyFactory - Factory class for creating and managing Proxy instances."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/web2/proxy/ProxyFactory.ts","line_range":[6,15],"symbol_name":"ProxyFactory","language":"typescript","module_resolution_path":"@/features/web2/proxy/ProxyFactory"},"relationships":{"depends_on":["mod-f7793bcd210b9ccdb36c1561"],"depended_by":["sym-a3370fbc057c5e1c22e7793b","sym-7694c211fe907466d8273a7e"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 3-5","related_adr":null,"last_modified":"2026-02-13T14:41:04.947Z","authors":[]}} +{"uuid":"sym-329d6cd73bd648317027d590","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["stripSensitiveWeb2Headers (function) exported from `src/features/web2/sanitizeWeb2Request.ts`.","TypeScript signature: (headers: IWeb2Request[\"raw\"][\"headers\"]) => IWeb2Request[\"raw\"][\"headers\"]."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/web2/sanitizeWeb2Request.ts","line_range":[20,38],"symbol_name":"stripSensitiveWeb2Headers","language":"typescript","module_resolution_path":"@/features/web2/sanitizeWeb2Request"},"relationships":{"depends_on":["mod-30ed0e66ac618e803ffb888b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-d85124f8888456a01864d0d7"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-355d9ea302b96d2ada7be226","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["redactSensitiveWeb2Headers (function) exported from `src/features/web2/sanitizeWeb2Request.ts`.","TypeScript signature: (headers: IWeb2Request[\"raw\"][\"headers\"]) => IWeb2Request[\"raw\"][\"headers\"]."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/web2/sanitizeWeb2Request.ts","line_range":[40,62],"symbol_name":"redactSensitiveWeb2Headers","language":"typescript","module_resolution_path":"@/features/web2/sanitizeWeb2Request"},"relationships":{"depends_on":["mod-30ed0e66ac618e803ffb888b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-01250ff7b457022d57f75b23"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-d85124f8888456a01864d0d7","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["sanitizeWeb2RequestForStorage (function) exported from `src/features/web2/sanitizeWeb2Request.ts`.","TypeScript signature: (web2Request: IWeb2Request) => IWeb2Request."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/web2/sanitizeWeb2Request.ts","line_range":[64,82],"symbol_name":"sanitizeWeb2RequestForStorage","language":"typescript","module_resolution_path":"@/features/web2/sanitizeWeb2Request"},"relationships":{"depends_on":["mod-30ed0e66ac618e803ffb888b"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-329d6cd73bd648317027d590"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-01250ff7b457022d57f75b23","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["sanitizeWeb2RequestForLogging (function) exported from `src/features/web2/sanitizeWeb2Request.ts`.","TypeScript signature: (web2Request: IWeb2Request) => IWeb2Request."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/web2/sanitizeWeb2Request.ts","line_range":[84,102],"symbol_name":"sanitizeWeb2RequestForLogging","language":"typescript","module_resolution_path":"@/features/web2/sanitizeWeb2Request"},"relationships":{"depends_on":["mod-30ed0e66ac618e803ffb888b"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-355d9ea302b96d2ada7be226"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-7bc468f24d0bd68c3716ca14","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `UrlValidationResult` in `src/features/web2/validator.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/web2/validator.ts","line_range":[1,3],"symbol_name":"UrlValidationResult::api","language":"typescript","module_resolution_path":"@/features/web2/validator"},"relationships":{"depends_on":["sym-27a071409a6448a327c75916"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node:net"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-27a071409a6448a327c75916","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["UrlValidationResult (type) exported from `src/features/web2/validator.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/web2/validator.ts","line_range":[1,3],"symbol_name":"UrlValidationResult","language":"typescript","module_resolution_path":"@/features/web2/validator"},"relationships":{"depends_on":["mod-0a6b71b6c837c68c08998d7b"],"depended_by":["sym-7bc468f24d0bd68c3716ca14"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node:net"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-df74c42f1d0883c0ac4ea037","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["validateAndNormalizeHttpUrl (function) exported from `src/features/web2/validator.ts`.","TypeScript signature: (input: string) => UrlValidationResult."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/web2/validator.ts","line_range":[17,146],"symbol_name":"validateAndNormalizeHttpUrl","language":"typescript","module_resolution_path":"@/features/web2/validator"},"relationships":{"depends_on":["mod-0a6b71b6c837c68c08998d7b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-7e7c43222ce7463a1dcc2533"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node:net"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-30f023b8001b0d2954548e94","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `Prover` in `src/features/zk/iZKP/zk.ts`."],"intent_vectors":["zero-knowledge","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/iZKP/zk.ts","line_range":[5,25],"symbol_name":"Prover::api","language":"typescript","module_resolution_path":"@/features/zk/iZKP/zk"},"relationships":{"depends_on":["sym-890d84899d1bd8ff66074d19"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["big-integer"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-a6fa2da71477acd8ca019d69","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Prover.generateCommitment method on exported class `Prover` in `src/features/zk/iZKP/zk.ts`.","TypeScript signature: () => any."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/iZKP/zk.ts","line_range":[15,18],"symbol_name":"Prover.generateCommitment","language":"typescript","module_resolution_path":"@/features/zk/iZKP/zk"},"relationships":{"depends_on":["sym-890d84899d1bd8ff66074d19"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["big-integer"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-fa476f03eef817925c888ff3","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Prover.respondToChallenge method on exported class `Prover` in `src/features/zk/iZKP/zk.ts`.","TypeScript signature: (challenge: number) => any."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/iZKP/zk.ts","line_range":[20,24],"symbol_name":"Prover.respondToChallenge","language":"typescript","module_resolution_path":"@/features/zk/iZKP/zk"},"relationships":{"depends_on":["sym-890d84899d1bd8ff66074d19"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["big-integer"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-890d84899d1bd8ff66074d19","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Prover (class) exported from `src/features/zk/iZKP/zk.ts`."],"intent_vectors":["zero-knowledge","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/iZKP/zk.ts","line_range":[5,25],"symbol_name":"Prover","language":"typescript","module_resolution_path":"@/features/zk/iZKP/zk"},"relationships":{"depends_on":["mod-2ac3497f7072a203f8c62d92"],"depended_by":["sym-30f023b8001b0d2954548e94","sym-a6fa2da71477acd8ca019d69","sym-fa476f03eef817925c888ff3"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["big-integer"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-8ac635c37f1b1f7426a5dcec","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `Verifier` in `src/features/zk/iZKP/zk.ts`."],"intent_vectors":["zero-knowledge","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/iZKP/zk.ts","line_range":[27,48],"symbol_name":"Verifier::api","language":"typescript","module_resolution_path":"@/features/zk/iZKP/zk"},"relationships":{"depends_on":["sym-10c6bfb19ea88d09f9c7c87a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["big-integer"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-5a46c4d2478308967a03a599","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Verifier.generateChallenge method on exported class `Verifier` in `src/features/zk/iZKP/zk.ts`.","TypeScript signature: (commitment: any) => number."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/iZKP/zk.ts","line_range":[35,38],"symbol_name":"Verifier.generateChallenge","language":"typescript","module_resolution_path":"@/features/zk/iZKP/zk"},"relationships":{"depends_on":["sym-10c6bfb19ea88d09f9c7c87a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["big-integer"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-87e02332b5d839c8021e1d17","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Verifier.verifyResponse method on exported class `Verifier` in `src/features/zk/iZKP/zk.ts`.","TypeScript signature: (response: any, challenge: number) => boolean."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/iZKP/zk.ts","line_range":[40,47],"symbol_name":"Verifier.verifyResponse","language":"typescript","module_resolution_path":"@/features/zk/iZKP/zk"},"relationships":{"depends_on":["sym-10c6bfb19ea88d09f9c7c87a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["big-integer"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-10c6bfb19ea88d09f9c7c87a","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Verifier (class) exported from `src/features/zk/iZKP/zk.ts`."],"intent_vectors":["zero-knowledge","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/iZKP/zk.ts","line_range":[27,48],"symbol_name":"Verifier","language":"typescript","module_resolution_path":"@/features/zk/iZKP/zk"},"relationships":{"depends_on":["mod-2ac3497f7072a203f8c62d92"],"depended_by":["sym-8ac635c37f1b1f7426a5dcec","sym-5a46c4d2478308967a03a599","sym-87e02332b5d839c8021e1d17"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["big-integer"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-8246e2dd08e08f2ea2f20be6","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["generateLargePrime (function) exported from `src/features/zk/iZKP/zkPrimer.ts`.","TypeScript signature: (bits: number, testRounds: number) => BigInteger."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/iZKP/zkPrimer.ts","line_range":[55,71],"symbol_name":"generateLargePrime","language":"typescript","module_resolution_path":"@/features/zk/iZKP/zkPrimer"},"relationships":{"depends_on":["mod-fbf651cd0a1f5d59d8f3f9b2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["big-integer"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-495cf45bc0377d9a5afbc045","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `MerkleTreeManager` in `src/features/zk/merkle/MerkleTreeManager.ts`."],"intent_vectors":["zero-knowledge","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/merkle/MerkleTreeManager.ts","line_range":[21,301],"symbol_name":"MerkleTreeManager::api","language":"typescript","module_resolution_path":"@/features/zk/merkle/MerkleTreeManager"},"relationships":{"depends_on":["sym-622da0c12aaa7a83367c4b2e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["@zk-kit/incremental-merkle-tree","poseidon-lite","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-d5c01fc2a6daf358ad0614de","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MerkleTreeManager.initialize method on exported class `MerkleTreeManager` in `src/features/zk/merkle/MerkleTreeManager.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/zk/merkle/MerkleTreeManager.ts","line_range":[52,91],"symbol_name":"MerkleTreeManager.initialize","language":"typescript","module_resolution_path":"@/features/zk/merkle/MerkleTreeManager"},"relationships":{"depends_on":["sym-622da0c12aaa7a83367c4b2e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["@zk-kit/incremental-merkle-tree","poseidon-lite","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-447a5e701a52a48725db1804","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MerkleTreeManager.addCommitment method on exported class `MerkleTreeManager` in `src/features/zk/merkle/MerkleTreeManager.ts`.","TypeScript signature: (commitment: string) => number."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/merkle/MerkleTreeManager.ts","line_range":[99,129],"symbol_name":"MerkleTreeManager.addCommitment","language":"typescript","module_resolution_path":"@/features/zk/merkle/MerkleTreeManager"},"relationships":{"depends_on":["sym-622da0c12aaa7a83367c4b2e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["@zk-kit/incremental-merkle-tree","poseidon-lite","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-59da84ea7c765c8210c5f666","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MerkleTreeManager.getRoot method on exported class `MerkleTreeManager` in `src/features/zk/merkle/MerkleTreeManager.ts`.","TypeScript signature: () => string."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/merkle/MerkleTreeManager.ts","line_range":[136,138],"symbol_name":"MerkleTreeManager.getRoot","language":"typescript","module_resolution_path":"@/features/zk/merkle/MerkleTreeManager"},"relationships":{"depends_on":["sym-622da0c12aaa7a83367c4b2e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["@zk-kit/incremental-merkle-tree","poseidon-lite","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-e1df23cfd63cd30cd63d4a24","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MerkleTreeManager.getLeafCount method on exported class `MerkleTreeManager` in `src/features/zk/merkle/MerkleTreeManager.ts`.","TypeScript signature: () => number."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/merkle/MerkleTreeManager.ts","line_range":[145,147],"symbol_name":"MerkleTreeManager.getLeafCount","language":"typescript","module_resolution_path":"@/features/zk/merkle/MerkleTreeManager"},"relationships":{"depends_on":["sym-622da0c12aaa7a83367c4b2e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["@zk-kit/incremental-merkle-tree","poseidon-lite","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-fc7baad9b538d0a808c7d220","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MerkleTreeManager.generateProof method on exported class `MerkleTreeManager` in `src/features/zk/merkle/MerkleTreeManager.ts`.","TypeScript signature: (leafIndex: number) => {\n siblings: string[][]\n pathIndices: number[]\n root: string\n leaf: string\n }."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/merkle/MerkleTreeManager.ts","line_range":[155,174],"symbol_name":"MerkleTreeManager.generateProof","language":"typescript","module_resolution_path":"@/features/zk/merkle/MerkleTreeManager"},"relationships":{"depends_on":["sym-622da0c12aaa7a83367c4b2e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["@zk-kit/incremental-merkle-tree","poseidon-lite","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-02558c28bb9eb59cc31e9119","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MerkleTreeManager.getProofForCommitment method on exported class `MerkleTreeManager` in `src/features/zk/merkle/MerkleTreeManager.ts`.","TypeScript signature: (commitmentHash: string) => Promise<{\n siblings: string[][]\n pathIndices: number[]\n root: string\n leaf: string\n leafIndex: number\n } | null>."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/zk/merkle/MerkleTreeManager.ts","line_range":[182,210],"symbol_name":"MerkleTreeManager.getProofForCommitment","language":"typescript","module_resolution_path":"@/features/zk/merkle/MerkleTreeManager"},"relationships":{"depends_on":["sym-622da0c12aaa7a83367c4b2e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["@zk-kit/incremental-merkle-tree","poseidon-lite","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-fddea2d2d61e84b8456298b3","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MerkleTreeManager.saveToDatabase method on exported class `MerkleTreeManager` in `src/features/zk/merkle/MerkleTreeManager.ts`.","TypeScript signature: (blockNumber: number, manager: EntityManager) => Promise."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/zk/merkle/MerkleTreeManager.ts","line_range":[218,251],"symbol_name":"MerkleTreeManager.saveToDatabase","language":"typescript","module_resolution_path":"@/features/zk/merkle/MerkleTreeManager"},"relationships":{"depends_on":["sym-622da0c12aaa7a83367c4b2e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["@zk-kit/incremental-merkle-tree","poseidon-lite","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-93274c44efff4b1f949f3bb9","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MerkleTreeManager.verifyProof method on exported class `MerkleTreeManager` in `src/features/zk/merkle/MerkleTreeManager.ts`.","TypeScript signature: (proof: { siblings: bigint[][]; pathIndices: number[] }, leaf: bigint, root: bigint) => boolean."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/merkle/MerkleTreeManager.ts","line_range":[261,274],"symbol_name":"MerkleTreeManager.verifyProof","language":"typescript","module_resolution_path":"@/features/zk/merkle/MerkleTreeManager"},"relationships":{"depends_on":["sym-622da0c12aaa7a83367c4b2e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["@zk-kit/incremental-merkle-tree","poseidon-lite","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-259ac048cb816234ef7ada5b","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MerkleTreeManager.getStats method on exported class `MerkleTreeManager` in `src/features/zk/merkle/MerkleTreeManager.ts`.","TypeScript signature: () => {\n treeId: string\n depth: number\n leafCount: number\n capacity: number\n root: string\n utilizationPercent: number\n }."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/merkle/MerkleTreeManager.ts","line_range":[281,300],"symbol_name":"MerkleTreeManager.getStats","language":"typescript","module_resolution_path":"@/features/zk/merkle/MerkleTreeManager"},"relationships":{"depends_on":["sym-622da0c12aaa7a83367c4b2e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["@zk-kit/incremental-merkle-tree","poseidon-lite","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-622da0c12aaa7a83367c4b2e","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MerkleTreeManager (class) exported from `src/features/zk/merkle/MerkleTreeManager.ts`."],"intent_vectors":["zero-knowledge","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/merkle/MerkleTreeManager.ts","line_range":[21,301],"symbol_name":"MerkleTreeManager","language":"typescript","module_resolution_path":"@/features/zk/merkle/MerkleTreeManager"},"relationships":{"depends_on":["mod-b4ad305201d7e6c9d3b649db"],"depended_by":["sym-495cf45bc0377d9a5afbc045","sym-d5c01fc2a6daf358ad0614de","sym-447a5e701a52a48725db1804","sym-59da84ea7c765c8210c5f666","sym-e1df23cfd63cd30cd63d4a24","sym-fc7baad9b538d0a808c7d220","sym-02558c28bb9eb59cc31e9119","sym-fddea2d2d61e84b8456298b3","sym-93274c44efff4b1f949f3bb9","sym-259ac048cb816234ef7ada5b"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["@zk-kit/incremental-merkle-tree","poseidon-lite","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-4404f892d433afa5b82ed3f4","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["updateMerkleTreeAfterBlock (function) exported from `src/features/zk/merkle/updateMerkleTreeAfterBlock.ts`.","TypeScript signature: (dataSource: DataSource, blockNumber: number, manager: EntityManager) => Promise.","Update Merkle tree with commitments from a specific block"],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/zk/merkle/updateMerkleTreeAfterBlock.ts","line_range":[30,44],"symbol_name":"updateMerkleTreeAfterBlock","language":"typescript","module_resolution_path":"@/features/zk/merkle/updateMerkleTreeAfterBlock"},"relationships":{"depends_on":["mod-ad645bf9d23cc4e8c30848fc"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-00e4d2471550dbf3aeb68901"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 19-29","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-ab44157beed9a9398173d77c","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getCurrentMerkleTreeState (function) exported from `src/features/zk/merkle/updateMerkleTreeAfterBlock.ts`.","TypeScript signature: (dataSource: DataSource) => Promise.","Get current Merkle tree statistics"],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/zk/merkle/updateMerkleTreeAfterBlock.ts","line_range":[126,137],"symbol_name":"getCurrentMerkleTreeState","language":"typescript","module_resolution_path":"@/features/zk/merkle/updateMerkleTreeAfterBlock"},"relationships":{"depends_on":["mod-ad645bf9d23cc4e8c30848fc"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-8851eae25a7755afe330f85c"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 120-125","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-537af0b9d6bfcbb6032397db","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["rollbackMerkleTreeToBlock (function) exported from `src/features/zk/merkle/updateMerkleTreeAfterBlock.ts`.","TypeScript signature: (dataSource: DataSource, targetBlockNumber: number) => Promise.","Rollback Merkle tree to a previous block"],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/zk/merkle/updateMerkleTreeAfterBlock.ts","line_range":[145,208],"symbol_name":"rollbackMerkleTreeToBlock","language":"typescript","module_resolution_path":"@/features/zk/merkle/updateMerkleTreeAfterBlock"},"relationships":{"depends_on":["mod-ad645bf9d23cc4e8c30848fc"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 139-144","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-5dbe5cd27b7f059f8e4f033b","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ZKProof` in `src/features/zk/proof/BunSnarkjsWrapper.ts`."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/proof/BunSnarkjsWrapper.ts","line_range":[27,32],"symbol_name":"ZKProof::api","language":"typescript","module_resolution_path":"@/features/zk/proof/BunSnarkjsWrapper"},"relationships":{"depends_on":["sym-e090776af88c5be10aba4a68"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["ffjavascript"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-e090776af88c5be10aba4a68","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ZKProof (interface) exported from `src/features/zk/proof/BunSnarkjsWrapper.ts`."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/proof/BunSnarkjsWrapper.ts","line_range":[27,32],"symbol_name":"ZKProof","language":"typescript","module_resolution_path":"@/features/zk/proof/BunSnarkjsWrapper"},"relationships":{"depends_on":["mod-508ea55e640ac463afeb7e81"],"depended_by":["sym-5dbe5cd27b7f059f8e4f033b"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["ffjavascript"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-cc0c03550be8730b76e8f71d","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["groth16VerifyBun (function) exported from `src/features/zk/proof/BunSnarkjsWrapper.ts`.","TypeScript signature: (_vk_verifier: any, _publicSignals: any[], _proof: ZKProof) => Promise.","Verify a Groth16 proof (Bun-compatible, single-threaded)"],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/zk/proof/BunSnarkjsWrapper.ts","line_range":[42,160],"symbol_name":"groth16VerifyBun","language":"typescript","module_resolution_path":"@/features/zk/proof/BunSnarkjsWrapper"},"relationships":{"depends_on":["mod-508ea55e640ac463afeb7e81"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-f7a2710d38cf71bc22ff1334"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["ffjavascript"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 34-41","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-c83faa9c46614bf7cebaca16","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ZKProof` in `src/features/zk/proof/ProofVerifier.ts`."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/proof/ProofVerifier.ts","line_range":[29,34],"symbol_name":"ZKProof::api","language":"typescript","module_resolution_path":"@/features/zk/proof/ProofVerifier"},"relationships":{"depends_on":["sym-051d763051b0c844395392cd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["snarkjs","fs/promises","path","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-051d763051b0c844395392cd","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ZKProof (interface) exported from `src/features/zk/proof/ProofVerifier.ts`."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/proof/ProofVerifier.ts","line_range":[29,34],"symbol_name":"ZKProof","language":"typescript","module_resolution_path":"@/features/zk/proof/ProofVerifier"},"relationships":{"depends_on":["mod-292e8f8c5a666fd4318d4859"],"depended_by":["sym-c83faa9c46614bf7cebaca16"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["snarkjs","fs/promises","path","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-49a8ade963ef62d280f2e848","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `IdentityAttestationProof` in `src/features/zk/proof/ProofVerifier.ts`."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/proof/ProofVerifier.ts","line_range":[36,39],"symbol_name":"IdentityAttestationProof::api","language":"typescript","module_resolution_path":"@/features/zk/proof/ProofVerifier"},"relationships":{"depends_on":["sym-0548e973988513ade19763cd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["snarkjs","fs/promises","path","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-0548e973988513ade19763cd","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IdentityAttestationProof (interface) exported from `src/features/zk/proof/ProofVerifier.ts`."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/proof/ProofVerifier.ts","line_range":[36,39],"symbol_name":"IdentityAttestationProof","language":"typescript","module_resolution_path":"@/features/zk/proof/ProofVerifier"},"relationships":{"depends_on":["mod-292e8f8c5a666fd4318d4859"],"depended_by":["sym-49a8ade963ef62d280f2e848"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["snarkjs","fs/promises","path","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-bdbcff3b286cf731b94f76b2","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ProofVerificationResult` in `src/features/zk/proof/ProofVerifier.ts`."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/proof/ProofVerifier.ts","line_range":[41,47],"symbol_name":"ProofVerificationResult::api","language":"typescript","module_resolution_path":"@/features/zk/proof/ProofVerifier"},"relationships":{"depends_on":["sym-f400625db879f3f88d41393b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["snarkjs","fs/promises","path","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-f400625db879f3f88d41393b","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ProofVerificationResult (interface) exported from `src/features/zk/proof/ProofVerifier.ts`."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/proof/ProofVerifier.ts","line_range":[41,47],"symbol_name":"ProofVerificationResult","language":"typescript","module_resolution_path":"@/features/zk/proof/ProofVerifier"},"relationships":{"depends_on":["mod-292e8f8c5a666fd4318d4859"],"depended_by":["sym-bdbcff3b286cf731b94f76b2"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["snarkjs","fs/promises","path","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-6cdfa0f864c81211de3ff9b0","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `ProofVerifier` in `src/features/zk/proof/ProofVerifier.ts`."],"intent_vectors":["zero-knowledge","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/proof/ProofVerifier.ts","line_range":[49,357],"symbol_name":"ProofVerifier::api","language":"typescript","module_resolution_path":"@/features/zk/proof/ProofVerifier"},"relationships":{"depends_on":["sym-f7a2710d38cf71bc22ff1334"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["snarkjs","fs/promises","path","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-294062945c7711d95b133b38","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ProofVerifier.isNullifierUsed method on exported class `ProofVerifier` in `src/features/zk/proof/ProofVerifier.ts`.","TypeScript signature: (nullifierHash: string) => Promise."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/zk/proof/ProofVerifier.ts","line_range":[118,123],"symbol_name":"ProofVerifier.isNullifierUsed","language":"typescript","module_resolution_path":"@/features/zk/proof/ProofVerifier"},"relationships":{"depends_on":["sym-f7a2710d38cf71bc22ff1334"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["snarkjs","fs/promises","path","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-9dbf2f45df69dc411b69a2a8","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ProofVerifier.verifyIdentityAttestation method on exported class `ProofVerifier` in `src/features/zk/proof/ProofVerifier.ts`.","TypeScript signature: (attestation: IdentityAttestationProof, manager: EntityManager, metadata: { blockNumber: number; transactionHash: string }) => Promise."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/zk/proof/ProofVerifier.ts","line_range":[168,308],"symbol_name":"ProofVerifier.verifyIdentityAttestation","language":"typescript","module_resolution_path":"@/features/zk/proof/ProofVerifier"},"relationships":{"depends_on":["sym-f7a2710d38cf71bc22ff1334"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["snarkjs","fs/promises","path","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-81336d6a9eb6d22a151740f1","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ProofVerifier.markNullifierUsed method on exported class `ProofVerifier` in `src/features/zk/proof/ProofVerifier.ts`.","TypeScript signature: (nullifierHash: string, blockNumber: number, transactionHash: string) => Promise."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/zk/proof/ProofVerifier.ts","line_range":[318,344],"symbol_name":"ProofVerifier.markNullifierUsed","language":"typescript","module_resolution_path":"@/features/zk/proof/ProofVerifier"},"relationships":{"depends_on":["sym-f7a2710d38cf71bc22ff1334"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["snarkjs","fs/promises","path","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-1d174f658713e92a4c259443","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ProofVerifier.verifyProofOnly method on exported class `ProofVerifier` in `src/features/zk/proof/ProofVerifier.ts`.","TypeScript signature: (proof: ZKProof, publicSignals: string[]) => Promise."],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/features/zk/proof/ProofVerifier.ts","line_range":[354,356],"symbol_name":"ProofVerifier.verifyProofOnly","language":"typescript","module_resolution_path":"@/features/zk/proof/ProofVerifier"},"relationships":{"depends_on":["sym-f7a2710d38cf71bc22ff1334"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["snarkjs","fs/promises","path","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-f7a2710d38cf71bc22ff1334","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ProofVerifier (class) exported from `src/features/zk/proof/ProofVerifier.ts`."],"intent_vectors":["zero-knowledge","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/proof/ProofVerifier.ts","line_range":[49,357],"symbol_name":"ProofVerifier","language":"typescript","module_resolution_path":"@/features/zk/proof/ProofVerifier"},"relationships":{"depends_on":["mod-292e8f8c5a666fd4318d4859"],"depended_by":["sym-6cdfa0f864c81211de3ff9b0","sym-294062945c7711d95b133b38","sym-9dbf2f45df69dc411b69a2a8","sym-81336d6a9eb6d22a151740f1","sym-1d174f658713e92a4c259443"],"implements":[],"extends":[],"calls":["sym-cc0c03550be8730b76e8f71d"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["snarkjs","fs/promises","path","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-d8cf8b69f000df4cc6351d0b","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `IdentityCommitmentPayload` in `src/features/zk/types/index.ts`.","Identity Commitment Payload"],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/types/index.ts","line_range":[9,16],"symbol_name":"IdentityCommitmentPayload::api","language":"typescript","module_resolution_path":"@/features/zk/types/index"},"relationships":{"depends_on":["sym-5a2acc2e51e49fbeb95ef067"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 5-8","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-5a2acc2e51e49fbeb95ef067","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IdentityCommitmentPayload (interface) exported from `src/features/zk/types/index.ts`.","Identity Commitment Payload"],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/types/index.ts","line_range":[9,16],"symbol_name":"IdentityCommitmentPayload","language":"typescript","module_resolution_path":"@/features/zk/types/index"},"relationships":{"depends_on":["mod-99cb8cee8d94ff0cda253153"],"depended_by":["sym-d8cf8b69f000df4cc6351d0b"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 5-8","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-c78e678099c0210e59787676","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `Groth16Proof` in `src/features/zk/types/index.ts`.","Groth16 ZK Proof Structure"],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/types/index.ts","line_range":[22,28],"symbol_name":"Groth16Proof::api","language":"typescript","module_resolution_path":"@/features/zk/types/index"},"relationships":{"depends_on":["sym-24f5eddf8ece217b1a33972f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 18-21","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-24f5eddf8ece217b1a33972f","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Groth16Proof (interface) exported from `src/features/zk/types/index.ts`.","Groth16 ZK Proof Structure"],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/types/index.ts","line_range":[22,28],"symbol_name":"Groth16Proof","language":"typescript","module_resolution_path":"@/features/zk/types/index"},"relationships":{"depends_on":["mod-99cb8cee8d94ff0cda253153"],"depended_by":["sym-c78e678099c0210e59787676"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 18-21","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-692898daf907a5b9e4c65204","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `IdentityAttestationPayload` in `src/features/zk/types/index.ts`.","Identity Attestation Payload"],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/types/index.ts","line_range":[34,45],"symbol_name":"IdentityAttestationPayload::api","language":"typescript","module_resolution_path":"@/features/zk/types/index"},"relationships":{"depends_on":["sym-d3832144a7e9a4bf0fcb5986"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 30-33","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-d3832144a7e9a4bf0fcb5986","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IdentityAttestationPayload (interface) exported from `src/features/zk/types/index.ts`.","Identity Attestation Payload"],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/types/index.ts","line_range":[34,45],"symbol_name":"IdentityAttestationPayload","language":"typescript","module_resolution_path":"@/features/zk/types/index"},"relationships":{"depends_on":["mod-99cb8cee8d94ff0cda253153"],"depended_by":["sym-692898daf907a5b9e4c65204"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 30-33","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-c8868bf639c69391eaf998e9","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `MerkleProofResponse` in `src/features/zk/types/index.ts`.","Merkle Proof Structure"],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/types/index.ts","line_range":[51,65],"symbol_name":"MerkleProofResponse::api","language":"typescript","module_resolution_path":"@/features/zk/types/index"},"relationships":{"depends_on":["sym-935a4eb2274a87e70e7dd352"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 47-50","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-935a4eb2274a87e70e7dd352","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MerkleProofResponse (interface) exported from `src/features/zk/types/index.ts`.","Merkle Proof Structure"],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/types/index.ts","line_range":[51,65],"symbol_name":"MerkleProofResponse","language":"typescript","module_resolution_path":"@/features/zk/types/index"},"relationships":{"depends_on":["mod-99cb8cee8d94ff0cda253153"],"depended_by":["sym-c8868bf639c69391eaf998e9"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 47-50","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-21ea3e3d8b21f47296fc535a","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `MerkleRootResponse` in `src/features/zk/types/index.ts`.","Merkle Root Response"],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/types/index.ts","line_range":[71,78],"symbol_name":"MerkleRootResponse::api","language":"typescript","module_resolution_path":"@/features/zk/types/index"},"relationships":{"depends_on":["sym-2a9103f7b96eefd857128feb"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 67-70","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-2a9103f7b96eefd857128feb","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MerkleRootResponse (interface) exported from `src/features/zk/types/index.ts`.","Merkle Root Response"],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/types/index.ts","line_range":[71,78],"symbol_name":"MerkleRootResponse","language":"typescript","module_resolution_path":"@/features/zk/types/index"},"relationships":{"depends_on":["mod-99cb8cee8d94ff0cda253153"],"depended_by":["sym-21ea3e3d8b21f47296fc535a"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 67-70","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-5f0e7aef4f1b0d5922abb716","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `NullifierCheckResponse` in `src/features/zk/types/index.ts`.","Nullifier Check Response"],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/types/index.ts","line_range":[84,89],"symbol_name":"NullifierCheckResponse::api","language":"typescript","module_resolution_path":"@/features/zk/types/index"},"relationships":{"depends_on":["sym-18b97e86025bc97b9979076c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 80-83","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-18b97e86025bc97b9979076c","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["NullifierCheckResponse (interface) exported from `src/features/zk/types/index.ts`.","Nullifier Check Response"],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/types/index.ts","line_range":[84,89],"symbol_name":"NullifierCheckResponse","language":"typescript","module_resolution_path":"@/features/zk/types/index"},"relationships":{"depends_on":["mod-99cb8cee8d94ff0cda253153"],"depended_by":["sym-5f0e7aef4f1b0d5922abb716"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 80-83","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-b4f763e263a51bb1a1e12bb8","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `IdentityProofCircuitInput` in `src/features/zk/types/index.ts`.","ZK Circuit Input"],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/types/index.ts","line_range":[100,125],"symbol_name":"IdentityProofCircuitInput::api","language":"typescript","module_resolution_path":"@/features/zk/types/index"},"relationships":{"depends_on":["sym-c7dffab7af29280725182e57"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 91-99","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-c7dffab7af29280725182e57","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IdentityProofCircuitInput (interface) exported from `src/features/zk/types/index.ts`.","ZK Circuit Input"],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/types/index.ts","line_range":[100,125],"symbol_name":"IdentityProofCircuitInput","language":"typescript","module_resolution_path":"@/features/zk/types/index"},"relationships":{"depends_on":["mod-99cb8cee8d94ff0cda253153"],"depended_by":["sym-b4f763e263a51bb1a1e12bb8"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 91-99","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-a37ce98dfcb48ac1f5fcaba5","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ProofGenerationResult` in `src/features/zk/types/index.ts`.","ZK Proof Generation Result"],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/types/index.ts","line_range":[130,135],"symbol_name":"ProofGenerationResult::api","language":"typescript","module_resolution_path":"@/features/zk/types/index"},"relationships":{"depends_on":["sym-699ee11061314e7641979d09"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 127-129","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-699ee11061314e7641979d09","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ProofGenerationResult (interface) exported from `src/features/zk/types/index.ts`.","ZK Proof Generation Result"],"intent_vectors":["zero-knowledge"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/features/zk/types/index.ts","line_range":[130,135],"symbol_name":"ProofGenerationResult","language":"typescript","module_resolution_path":"@/features/zk/types/index"},"relationships":{"depends_on":["mod-99cb8cee8d94ff0cda253153"],"depended_by":["sym-a37ce98dfcb48ac1f5fcaba5"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 127-129","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-e9ff6a51fed52302f183f9ff","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["verifyWeb2Proof (function) exported from `src/libs/abstraction/index.ts`.","TypeScript signature: (payload: Web2CoreTargetIdentityPayload, sender: string) => unknown.","Fetches the proof data using the appropriate parser and verifies the signature"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/abstraction/index.ts","line_range":[173,259],"symbol_name":"verifyWeb2Proof","language":"typescript","module_resolution_path":"@/libs/abstraction/index"},"relationships":{"depends_on":["mod-b14fd27b1e26707d72c1730a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-d9261695c20f2db1c1c7a30d","sym-af1c37237a37962494d06df0"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/encryption","node_modules/@kynesyslabs/demosdk/build/types/blockchain/blocks","lodash","fs"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 167-172","related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-e1860aeb3770058ff3c3984d","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["TwitterProofParser (re_export) exported from `src/libs/abstraction/index.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/abstraction/index.ts","line_range":[261,261],"symbol_name":"TwitterProofParser","language":"typescript","module_resolution_path":"@/libs/abstraction/index"},"relationships":{"depends_on":["mod-b14fd27b1e26707d72c1730a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/encryption","node_modules/@kynesyslabs/demosdk/build/types/blockchain/blocks","lodash","fs"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-969cec081b320862dec672b7","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Web2ProofParser (re_export) exported from `src/libs/abstraction/index.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/abstraction/index.ts","line_range":[261,261],"symbol_name":"Web2ProofParser","language":"typescript","module_resolution_path":"@/libs/abstraction/index"},"relationships":{"depends_on":["mod-b14fd27b1e26707d72c1730a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/encryption","node_modules/@kynesyslabs/demosdk/build/types/blockchain/blocks","lodash","fs"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-a5aa69428632eb5ff35c24d2","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `DiscordProofParser` in `src/libs/abstraction/web2/discord.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/abstraction/web2/discord.ts","line_range":[5,54],"symbol_name":"DiscordProofParser::api","language":"typescript","module_resolution_path":"@/libs/abstraction/web2/discord"},"relationships":{"depends_on":["sym-b922f1d9098d7a4cd4f8028e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-16f750165c16e7c1feabd3d1","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DiscordProofParser.getMessageFromUrl method on exported class `DiscordProofParser` in `src/libs/abstraction/web2/discord.ts`.","TypeScript signature: (messageUrl: string) => unknown."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/abstraction/web2/discord.ts","line_range":[23,25],"symbol_name":"DiscordProofParser.getMessageFromUrl","language":"typescript","module_resolution_path":"@/libs/abstraction/web2/discord"},"relationships":{"depends_on":["sym-b922f1d9098d7a4cd4f8028e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-d579b50fddb19045a7bbd220","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DiscordProofParser.readData method on exported class `DiscordProofParser` in `src/libs/abstraction/web2/discord.ts`.","TypeScript signature: (proofUrl: string) => Promise<{\r\n message: string\r\n signature: string\r\n type: SigningAlgorithm\r\n }>."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/abstraction/web2/discord.ts","line_range":[27,45],"symbol_name":"DiscordProofParser.readData","language":"typescript","module_resolution_path":"@/libs/abstraction/web2/discord"},"relationships":{"depends_on":["sym-b922f1d9098d7a4cd4f8028e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-e1d9c0b271d533213f995550","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DiscordProofParser.getInstance method on exported class `DiscordProofParser` in `src/libs/abstraction/web2/discord.ts`.","TypeScript signature: () => unknown."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/abstraction/web2/discord.ts","line_range":[47,53],"symbol_name":"DiscordProofParser.getInstance","language":"typescript","module_resolution_path":"@/libs/abstraction/web2/discord"},"relationships":{"depends_on":["sym-b922f1d9098d7a4cd4f8028e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-b922f1d9098d7a4cd4f8028e","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DiscordProofParser (class) exported from `src/libs/abstraction/web2/discord.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/abstraction/web2/discord.ts","line_range":[5,54],"symbol_name":"DiscordProofParser","language":"typescript","module_resolution_path":"@/libs/abstraction/web2/discord"},"relationships":{"depends_on":["mod-4e4680ebab441dcef21432ff"],"depended_by":["sym-a5aa69428632eb5ff35c24d2","sym-16f750165c16e7c1feabd3d1","sym-d579b50fddb19045a7bbd220","sym-e1d9c0b271d533213f995550"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-7052061179401b661022a562","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `GithubProofParser` in `src/libs/abstraction/web2/github.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/abstraction/web2/github.ts","line_range":[6,98],"symbol_name":"GithubProofParser::api","language":"typescript","module_resolution_path":"@/libs/abstraction/web2/github"},"relationships":{"depends_on":["sym-1ac6951f1be4ce316fd98a61"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["axios","@octokit/core","@kynesyslabs/demosdk/types","env:GITHUB_TOKEN"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-4ce023944953633a4e0dc5a5","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GithubProofParser.parseGistDetails method on exported class `GithubProofParser` in `src/libs/abstraction/web2/github.ts`.","TypeScript signature: (gistUrl: string) => {\n username: string\n gistId: string\n }."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/abstraction/web2/github.ts","line_range":[14,28],"symbol_name":"GithubProofParser.parseGistDetails","language":"typescript","module_resolution_path":"@/libs/abstraction/web2/github"},"relationships":{"depends_on":["sym-1ac6951f1be4ce316fd98a61"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["axios","@octokit/core","@kynesyslabs/demosdk/types","env:GITHUB_TOKEN"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-02de4cc64467c6c1e46ff17a","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GithubProofParser.login method on exported class `GithubProofParser` in `src/libs/abstraction/web2/github.ts`.","TypeScript signature: () => unknown."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/abstraction/web2/github.ts","line_range":[30,38],"symbol_name":"GithubProofParser.login","language":"typescript","module_resolution_path":"@/libs/abstraction/web2/github"},"relationships":{"depends_on":["sym-1ac6951f1be4ce316fd98a61"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["axios","@octokit/core","@kynesyslabs/demosdk/types","env:GITHUB_TOKEN"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-f63492b60547693ff5a625f1","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GithubProofParser.readData method on exported class `GithubProofParser` in `src/libs/abstraction/web2/github.ts`.","TypeScript signature: (proofUrl: string) => Promise<{ message: string; type: SigningAlgorithm; signature: string }>."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/abstraction/web2/github.ts","line_range":[40,88],"symbol_name":"GithubProofParser.readData","language":"typescript","module_resolution_path":"@/libs/abstraction/web2/github"},"relationships":{"depends_on":["sym-1ac6951f1be4ce316fd98a61"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["axios","@octokit/core","@kynesyslabs/demosdk/types","env:GITHUB_TOKEN"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-a7ec4c6121891fe7bdda936f","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GithubProofParser.getInstance method on exported class `GithubProofParser` in `src/libs/abstraction/web2/github.ts`.","TypeScript signature: () => unknown."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/abstraction/web2/github.ts","line_range":[90,97],"symbol_name":"GithubProofParser.getInstance","language":"typescript","module_resolution_path":"@/libs/abstraction/web2/github"},"relationships":{"depends_on":["sym-1ac6951f1be4ce316fd98a61"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["axios","@octokit/core","@kynesyslabs/demosdk/types","env:GITHUB_TOKEN"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-1ac6951f1be4ce316fd98a61","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GithubProofParser (class) exported from `src/libs/abstraction/web2/github.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/abstraction/web2/github.ts","line_range":[6,98],"symbol_name":"GithubProofParser","language":"typescript","module_resolution_path":"@/libs/abstraction/web2/github"},"relationships":{"depends_on":["mod-3b62039e7459fe4199077784"],"depended_by":["sym-7052061179401b661022a562","sym-4ce023944953633a4e0dc5a5","sym-02de4cc64467c6c1e46ff17a","sym-f63492b60547693ff5a625f1","sym-a7ec4c6121891fe7bdda936f"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["axios","@octokit/core","@kynesyslabs/demosdk/types","env:GITHUB_TOKEN"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-eae3b686b7a78c12fefd52e2","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `Web2ProofParser` in `src/libs/abstraction/web2/parsers.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/abstraction/web2/parsers.ts","line_range":[4,71],"symbol_name":"Web2ProofParser::api","language":"typescript","module_resolution_path":"@/libs/abstraction/web2/parsers"},"relationships":{"depends_on":["sym-9cff97c1d186e2f747cdfad7"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-e322a0df9bf74f4fc0c0f861","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Web2ProofParser.verifyProofFormat method on exported class `Web2ProofParser` in `src/libs/abstraction/web2/parsers.ts`.","TypeScript signature: (proofUrl: string, context: string) => unknown."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/abstraction/web2/parsers.ts","line_range":[22,34],"symbol_name":"Web2ProofParser.verifyProofFormat","language":"typescript","module_resolution_path":"@/libs/abstraction/web2/parsers"},"relationships":{"depends_on":["sym-9cff97c1d186e2f747cdfad7"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-d3e903adb164fb871dcb44a5","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Web2ProofParser.parsePayload method on exported class `Web2ProofParser` in `src/libs/abstraction/web2/parsers.ts`.","TypeScript signature: (data: string) => unknown."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/abstraction/web2/parsers.ts","line_range":[41,57],"symbol_name":"Web2ProofParser.parsePayload","language":"typescript","module_resolution_path":"@/libs/abstraction/web2/parsers"},"relationships":{"depends_on":["sym-9cff97c1d186e2f747cdfad7"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-fbe78285d0072abe0aacde74","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Web2ProofParser.readData method on exported class `Web2ProofParser` in `src/libs/abstraction/web2/parsers.ts`.","TypeScript signature: (proofUrl: string) => Promise<{\n message: string\n type: SigningAlgorithm\n signature: string\n }>."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/abstraction/web2/parsers.ts","line_range":[62,66],"symbol_name":"Web2ProofParser.readData","language":"typescript","module_resolution_path":"@/libs/abstraction/web2/parsers"},"relationships":{"depends_on":["sym-9cff97c1d186e2f747cdfad7"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-1c44d24073f117db03f1ba50","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Web2ProofParser.getInstance method on exported class `Web2ProofParser` in `src/libs/abstraction/web2/parsers.ts`.","TypeScript signature: () => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/abstraction/web2/parsers.ts","line_range":[68,70],"symbol_name":"Web2ProofParser.getInstance","language":"typescript","module_resolution_path":"@/libs/abstraction/web2/parsers"},"relationships":{"depends_on":["sym-9cff97c1d186e2f747cdfad7"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-9cff97c1d186e2f747cdfad7","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Web2ProofParser (class) exported from `src/libs/abstraction/web2/parsers.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/abstraction/web2/parsers.ts","line_range":[4,71],"symbol_name":"Web2ProofParser","language":"typescript","module_resolution_path":"@/libs/abstraction/web2/parsers"},"relationships":{"depends_on":["mod-f30737840d94511712dda889"],"depended_by":["sym-eae3b686b7a78c12fefd52e2","sym-e322a0df9bf74f4fc0c0f861","sym-d3e903adb164fb871dcb44a5","sym-fbe78285d0072abe0aacde74","sym-1c44d24073f117db03f1ba50"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-1ca6e2211ead3ab2a1f77cb6","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `TwitterProofParser` in `src/libs/abstraction/web2/twitter.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/abstraction/web2/twitter.ts","line_range":[5,49],"symbol_name":"TwitterProofParser::api","language":"typescript","module_resolution_path":"@/libs/abstraction/web2/twitter"},"relationships":{"depends_on":["sym-6b2c9e3fd8b741225f43d659"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-484103a36838ad3f5a38b96b","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TwitterProofParser.readData method on exported class `TwitterProofParser` in `src/libs/abstraction/web2/twitter.ts`.","TypeScript signature: (tweetUrl: string) => Promise<{\n message: string\n signature: string\n type: SigningAlgorithm\n }>."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/abstraction/web2/twitter.ts","line_range":[14,40],"symbol_name":"TwitterProofParser.readData","language":"typescript","module_resolution_path":"@/libs/abstraction/web2/twitter"},"relationships":{"depends_on":["sym-6b2c9e3fd8b741225f43d659"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-736b0e99fea148f91d2a7afa","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TwitterProofParser.getInstance method on exported class `TwitterProofParser` in `src/libs/abstraction/web2/twitter.ts`.","TypeScript signature: () => unknown."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/abstraction/web2/twitter.ts","line_range":[42,48],"symbol_name":"TwitterProofParser.getInstance","language":"typescript","module_resolution_path":"@/libs/abstraction/web2/twitter"},"relationships":{"depends_on":["sym-6b2c9e3fd8b741225f43d659"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-6b2c9e3fd8b741225f43d659","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TwitterProofParser (class) exported from `src/libs/abstraction/web2/twitter.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/abstraction/web2/twitter.ts","line_range":[5,49],"symbol_name":"TwitterProofParser","language":"typescript","module_resolution_path":"@/libs/abstraction/web2/twitter"},"relationships":{"depends_on":["mod-36fe55884844248a7ff73159"],"depended_by":["sym-1ca6e2211ead3ab2a1f77cb6","sym-484103a36838ad3f5a38b96b","sym-736b0e99fea148f91d2a7afa"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-764a18253934fb84aa1790b3","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `FungibleToken` in `src/libs/assets/FungibleToken.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/assets/FungibleToken.ts","line_range":[8,94],"symbol_name":"FungibleToken::api","language":"typescript","module_resolution_path":"@/libs/assets/FungibleToken"},"relationships":{"depends_on":["sym-1eb50452b11e15d996e1a4c6"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-e865be04c5b176c2fcef284f","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["FungibleToken.getToken method on exported class `FungibleToken` in `src/libs/assets/FungibleToken.ts`.","TypeScript signature: (tokenAddress: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/assets/FungibleToken.ts","line_range":[29,33],"symbol_name":"FungibleToken.getToken","language":"typescript","module_resolution_path":"@/libs/assets/FungibleToken"},"relationships":{"depends_on":["sym-1eb50452b11e15d996e1a4c6"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-9a5684d731dd1248da6a21ef","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["FungibleToken.createNewToken method on exported class `FungibleToken` in `src/libs/assets/FungibleToken.ts`.","TypeScript signature: (tokenName: string, symbol: string, decimals: number, creator: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/assets/FungibleToken.ts","line_range":[36,51],"symbol_name":"FungibleToken.createNewToken","language":"typescript","module_resolution_path":"@/libs/assets/FungibleToken"},"relationships":{"depends_on":["sym-1eb50452b11e15d996e1a4c6"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-aa719229bc39cea907aee9db","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["FungibleToken.hookTransfer method on exported class `FungibleToken` in `src/libs/assets/FungibleToken.ts`.","TypeScript signature: (transfer: Function) => unknown."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/assets/FungibleToken.ts","line_range":[63,65],"symbol_name":"FungibleToken.hookTransfer","language":"typescript","module_resolution_path":"@/libs/assets/FungibleToken"},"relationships":{"depends_on":["sym-1eb50452b11e15d996e1a4c6"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-60cc3956d6e6308983108861","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["FungibleToken.transfer method on exported class `FungibleToken` in `src/libs/assets/FungibleToken.ts`.","TypeScript signature: (sender: string, receiver: string, amount: number) => unknown."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/assets/FungibleToken.ts","line_range":[70,76],"symbol_name":"FungibleToken.transfer","language":"typescript","module_resolution_path":"@/libs/assets/FungibleToken"},"relationships":{"depends_on":["sym-1eb50452b11e15d996e1a4c6"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-139e5258c47864afabf7e515","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["FungibleToken.deploy method on exported class `FungibleToken` in `src/libs/assets/FungibleToken.ts`.","TypeScript signature: (deploymentKey: forge.pki.ed25519.NativeBuffer) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/assets/FungibleToken.ts","line_range":[81,93],"symbol_name":"FungibleToken.deploy","language":"typescript","module_resolution_path":"@/libs/assets/FungibleToken"},"relationships":{"depends_on":["sym-1eb50452b11e15d996e1a4c6"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-1eb50452b11e15d996e1a4c6","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["FungibleToken (class) exported from `src/libs/assets/FungibleToken.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/assets/FungibleToken.ts","line_range":[8,94],"symbol_name":"FungibleToken","language":"typescript","module_resolution_path":"@/libs/assets/FungibleToken"},"relationships":{"depends_on":["mod-cd472ca23fca8b4aead577c4"],"depended_by":["sym-764a18253934fb84aa1790b3","sym-e865be04c5b176c2fcef284f","sym-9a5684d731dd1248da6a21ef","sym-aa719229bc39cea907aee9db","sym-60cc3956d6e6308983108861","sym-139e5258c47864afabf7e515"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-f9714bf135b96cbdf541c7b1","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `NonFungibleToken` in `src/libs/assets/NonFungibleToken.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/assets/NonFungibleToken.ts","line_range":[17,25],"symbol_name":"NonFungibleToken::api","language":"typescript","module_resolution_path":"@/libs/assets/NonFungibleToken"},"relationships":{"depends_on":["sym-98437ac92e6266fc78125452"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-98437ac92e6266fc78125452","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["NonFungibleToken (class) exported from `src/libs/assets/NonFungibleToken.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/assets/NonFungibleToken.ts","line_range":[17,25],"symbol_name":"NonFungibleToken","language":"typescript","module_resolution_path":"@/libs/assets/NonFungibleToken"},"relationships":{"depends_on":["mod-d6a62d75526a851c966f7b84"],"depended_by":["sym-f9714bf135b96cbdf541c7b1"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-53c3f376c6ca6c8b45db6354","level":"L3","extraction_confidence":0.87,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `UnsSol` in `src/libs/blockchain/UDTypes/uns_sol.ts`.","Program IDL in camelCase format in order to be used in JS/TS."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/UDTypes/uns_sol.ts","line_range":[7,2403],"symbol_name":"UnsSol::api","language":"typescript","module_resolution_path":"@/libs/blockchain/UDTypes/uns_sol"},"relationships":{"depends_on":["sym-76003dd5d7d3e16989e7df26"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 1-6","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-76003dd5d7d3e16989e7df26","level":"L2","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["UnsSol (type) exported from `src/libs/blockchain/UDTypes/uns_sol.ts`.","Program IDL in camelCase format in order to be used in JS/TS."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/UDTypes/uns_sol.ts","line_range":[7,2403],"symbol_name":"UnsSol","language":"typescript","module_resolution_path":"@/libs/blockchain/UDTypes/uns_sol"},"relationships":{"depends_on":["mod-9a663bc106327e8422201a95"],"depended_by":["sym-53c3f376c6ca6c8b45db6354"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 1-6","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-bde7808e4f3ae52d972170ba","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `Block` in `src/libs/blockchain/block.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/block.ts","line_range":[18,75],"symbol_name":"Block::api","language":"typescript","module_resolution_path":"@/libs/blockchain/block"},"relationships":{"depends_on":["sym-3531a9f3d8f1352b9d2dec84"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-6ec12fe00dacd7937033485a","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Block.getHeader method on exported class `Block` in `src/libs/blockchain/block.ts`.","TypeScript signature: () => any."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/block.ts","line_range":[58,67],"symbol_name":"Block.getHeader","language":"typescript","module_resolution_path":"@/libs/blockchain/block"},"relationships":{"depends_on":["sym-3531a9f3d8f1352b9d2dec84"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-3dca5e0bf1988930dfd34eae","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Block.getEncryptedTransactions method on exported class `Block` in `src/libs/blockchain/block.ts`.","TypeScript signature: () => any."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/block.ts","line_range":[70,72],"symbol_name":"Block.getEncryptedTransactions","language":"typescript","module_resolution_path":"@/libs/blockchain/block"},"relationships":{"depends_on":["sym-3531a9f3d8f1352b9d2dec84"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-3531a9f3d8f1352b9d2dec84","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Block (class) exported from `src/libs/blockchain/block.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/block.ts","line_range":[18,75],"symbol_name":"Block","language":"typescript","module_resolution_path":"@/libs/blockchain/block"},"relationships":{"depends_on":["mod-12d77c813504670328c9b4f1"],"depended_by":["sym-bde7808e4f3ae52d972170ba","sym-6ec12fe00dacd7937033485a","sym-3dca5e0bf1988930dfd34eae"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.948Z","authors":[]}} +{"uuid":"sym-25f02bcbe29f875ab76aae3c","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `Chain` in `src/libs/blockchain/chain.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/chain.ts","line_range":[42,728],"symbol_name":"Chain::api","language":"typescript","module_resolution_path":"@/libs/blockchain/chain"},"relationships":{"depends_on":["sym-00e4d2471550dbf3aeb68901"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-92a40a270894c02b37cf69d0","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Chain.setup method on exported class `Chain` in `src/libs/blockchain/chain.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/chain.ts","line_range":[46,51],"symbol_name":"Chain.setup","language":"typescript","module_resolution_path":"@/libs/blockchain/chain"},"relationships":{"depends_on":["sym-00e4d2471550dbf3aeb68901"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-1ba1c6a5034cc8145e2aae35","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Chain.read method on exported class `Chain` in `src/libs/blockchain/chain.ts`.","TypeScript signature: (sqlQuery: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/chain.ts","line_range":[53,61],"symbol_name":"Chain.read","language":"typescript","module_resolution_path":"@/libs/blockchain/chain"},"relationships":{"depends_on":["sym-00e4d2471550dbf3aeb68901"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-8c2ac5f81d00901af3bea463","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Chain.write method on exported class `Chain` in `src/libs/blockchain/chain.ts`.","TypeScript signature: (sqlQuery: string) => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/chain.ts","line_range":[63,71],"symbol_name":"Chain.write","language":"typescript","module_resolution_path":"@/libs/blockchain/chain"},"relationships":{"depends_on":["sym-00e4d2471550dbf3aeb68901"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-da62bb050091ee1e534103ae","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Chain.getTxByHash method on exported class `Chain` in `src/libs/blockchain/chain.ts`.","TypeScript signature: (hash: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/chain.ts","line_range":[75,90],"symbol_name":"Chain.getTxByHash","language":"typescript","module_resolution_path":"@/libs/blockchain/chain"},"relationships":{"depends_on":["sym-00e4d2471550dbf3aeb68901"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-97ec0c30212c73ea6d44f41e","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Chain.getTransactionHistory method on exported class `Chain` in `src/libs/blockchain/chain.ts`.","TypeScript signature: (address: string, txtype: TransactionContent[\"type\"] | \"all\", start: unknown, limit: unknown) => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/chain.ts","line_range":[92,115],"symbol_name":"Chain.getTransactionHistory","language":"typescript","module_resolution_path":"@/libs/blockchain/chain"},"relationships":{"depends_on":["sym-00e4d2471550dbf3aeb68901"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-ed793153e81f7ff7f544c330","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Chain.getBlockTransactions method on exported class `Chain` in `src/libs/blockchain/chain.ts`.","TypeScript signature: (blockHash: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/chain.ts","line_range":[117,124],"symbol_name":"Chain.getBlockTransactions","language":"typescript","module_resolution_path":"@/libs/blockchain/chain"},"relationships":{"depends_on":["sym-00e4d2471550dbf3aeb68901"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-bcd8d64230b3e4e1e4710afe","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Chain.getLastBlockNumber method on exported class `Chain` in `src/libs/blockchain/chain.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/chain.ts","line_range":[127,134],"symbol_name":"Chain.getLastBlockNumber","language":"typescript","module_resolution_path":"@/libs/blockchain/chain"},"relationships":{"depends_on":["sym-00e4d2471550dbf3aeb68901"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-d5003da50d926831961f0d79","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Chain.getLastBlockHash method on exported class `Chain` in `src/libs/blockchain/chain.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/chain.ts","line_range":[137,144],"symbol_name":"Chain.getLastBlockHash","language":"typescript","module_resolution_path":"@/libs/blockchain/chain"},"relationships":{"depends_on":["sym-00e4d2471550dbf3aeb68901"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-bc129c1aa7fc1f9a707643a5","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Chain.getLastBlockTransactionSet method on exported class `Chain` in `src/libs/blockchain/chain.ts`.","TypeScript signature: () => Promise>."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/chain.ts","line_range":[151,154],"symbol_name":"Chain.getLastBlockTransactionSet","language":"typescript","module_resolution_path":"@/libs/blockchain/chain"},"relationships":{"depends_on":["sym-00e4d2471550dbf3aeb68901"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-62b1324f20925569af0c7d94","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Chain.getBlocks method on exported class `Chain` in `src/libs/blockchain/chain.ts`.","TypeScript signature: (start: \"latest\" | number, limit: number) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/chain.ts","line_range":[164,183],"symbol_name":"Chain.getBlocks","language":"typescript","module_resolution_path":"@/libs/blockchain/chain"},"relationships":{"depends_on":["sym-00e4d2471550dbf3aeb68901"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-c98b14652a71a92d31cc89cf","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Chain.getBlockByNumber method on exported class `Chain` in `src/libs/blockchain/chain.ts`.","TypeScript signature: (number: number) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/chain.ts","line_range":[186,188],"symbol_name":"Chain.getBlockByNumber","language":"typescript","module_resolution_path":"@/libs/blockchain/chain"},"relationships":{"depends_on":["sym-00e4d2471550dbf3aeb68901"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-1dcc44eb77d700302113243c","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Chain.getBlockByHash method on exported class `Chain` in `src/libs/blockchain/chain.ts`.","TypeScript signature: (hash: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/chain.ts","line_range":[191,193],"symbol_name":"Chain.getBlockByHash","language":"typescript","module_resolution_path":"@/libs/blockchain/chain"},"relationships":{"depends_on":["sym-00e4d2471550dbf3aeb68901"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-d6281bdc047c4680a97d4794","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Chain.getGenesisBlock method on exported class `Chain` in `src/libs/blockchain/chain.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/chain.ts","line_range":[195,197],"symbol_name":"Chain.getGenesisBlock","language":"typescript","module_resolution_path":"@/libs/blockchain/chain"},"relationships":{"depends_on":["sym-00e4d2471550dbf3aeb68901"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-bce8660b398095386155235c","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Chain.getGenesisBlockHash method on exported class `Chain` in `src/libs/blockchain/chain.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/chain.ts","line_range":[199,206],"symbol_name":"Chain.getGenesisBlockHash","language":"typescript","module_resolution_path":"@/libs/blockchain/chain"},"relationships":{"depends_on":["sym-00e4d2471550dbf3aeb68901"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-eba7e3ffe54ed291bd2c48ef","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Chain.getTransactionFromHash method on exported class `Chain` in `src/libs/blockchain/chain.ts`.","TypeScript signature: (hash: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/chain.ts","line_range":[209,215],"symbol_name":"Chain.getTransactionFromHash","language":"typescript","module_resolution_path":"@/libs/blockchain/chain"},"relationships":{"depends_on":["sym-00e4d2471550dbf3aeb68901"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-66abca7c0a890c9eff451b94","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Chain.getTransactionsFromHashes method on exported class `Chain` in `src/libs/blockchain/chain.ts`.","TypeScript signature: (hashes: string[]) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/chain.ts","line_range":[218,228],"symbol_name":"Chain.getTransactionsFromHashes","language":"typescript","module_resolution_path":"@/libs/blockchain/chain"},"relationships":{"depends_on":["sym-00e4d2471550dbf3aeb68901"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-666e0dd7d88cb6983b6be662","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Chain.getTransactions method on exported class `Chain` in `src/libs/blockchain/chain.ts`.","TypeScript signature: (start: \"latest\" | number, limit: number) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/chain.ts","line_range":[238,255],"symbol_name":"Chain.getTransactions","language":"typescript","module_resolution_path":"@/libs/blockchain/chain"},"relationships":{"depends_on":["sym-00e4d2471550dbf3aeb68901"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-5d90512dbf8aa5778c6bcb7c","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Chain.checkTxExists method on exported class `Chain` in `src/libs/blockchain/chain.ts`.","TypeScript signature: (hash: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/chain.ts","line_range":[257,259],"symbol_name":"Chain.checkTxExists","language":"typescript","module_resolution_path":"@/libs/blockchain/chain"},"relationships":{"depends_on":["sym-00e4d2471550dbf3aeb68901"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-3646a67443f9f0c3b575a67d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Chain.isGenesis method on exported class `Chain` in `src/libs/blockchain/chain.ts`.","TypeScript signature: (block: Block) => boolean."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/chain.ts","line_range":[263,268],"symbol_name":"Chain.isGenesis","language":"typescript","module_resolution_path":"@/libs/blockchain/chain"},"relationships":{"depends_on":["sym-00e4d2471550dbf3aeb68901"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-e70e7db0a823a91830f5515e","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Chain.getLastBlock method on exported class `Chain` in `src/libs/blockchain/chain.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/chain.ts","line_range":[270,280],"symbol_name":"Chain.getLastBlock","language":"typescript","module_resolution_path":"@/libs/blockchain/chain"},"relationships":{"depends_on":["sym-00e4d2471550dbf3aeb68901"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-5914e64d0b069cf170aa5576","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Chain.getOnlinePeersForLastThreeBlocks method on exported class `Chain` in `src/libs/blockchain/chain.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/chain.ts","line_range":[283,334],"symbol_name":"Chain.getOnlinePeersForLastThreeBlocks","language":"typescript","module_resolution_path":"@/libs/blockchain/chain"},"relationships":{"depends_on":["sym-00e4d2471550dbf3aeb68901"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-36d98395c44ece7890fcce75","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Chain.insertBlock method on exported class `Chain` in `src/libs/blockchain/chain.ts`.","TypeScript signature: (block: Block, operations: Operation[], position: number, cleanMempool: unknown) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/chain.ts","line_range":[342,475],"symbol_name":"Chain.insertBlock","language":"typescript","module_resolution_path":"@/libs/blockchain/chain"},"relationships":{"depends_on":["sym-00e4d2471550dbf3aeb68901"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-c9875c12cbfb75e4c02e4966","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Chain.generateGenesisBlock method on exported class `Chain` in `src/libs/blockchain/chain.ts`.","TypeScript signature: (genesisData: any) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/chain.ts","line_range":[478,612],"symbol_name":"Chain.generateGenesisBlock","language":"typescript","module_resolution_path":"@/libs/blockchain/chain"},"relationships":{"depends_on":["sym-00e4d2471550dbf3aeb68901"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-f3eb9527e8be9c0e06a5c391","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Chain.generateGenesisBlocks method on exported class `Chain` in `src/libs/blockchain/chain.ts`.","TypeScript signature: (genesisJsons: any[]) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/chain.ts","line_range":[615,619],"symbol_name":"Chain.generateGenesisBlocks","language":"typescript","module_resolution_path":"@/libs/blockchain/chain"},"relationships":{"depends_on":["sym-00e4d2471550dbf3aeb68901"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-0d6db2c721dcdb828685335c","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Chain.getGenesisUniqueBlock method on exported class `Chain` in `src/libs/blockchain/chain.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/chain.ts","line_range":[622,624],"symbol_name":"Chain.getGenesisUniqueBlock","language":"typescript","module_resolution_path":"@/libs/blockchain/chain"},"relationships":{"depends_on":["sym-00e4d2471550dbf3aeb68901"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-c0e0b82cf3d383210e3687ac","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Chain.insertTransaction method on exported class `Chain` in `src/libs/blockchain/chain.ts`.","TypeScript signature: (transaction: Transaction, status: unknown) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/chain.ts","line_range":[627,649],"symbol_name":"Chain.insertTransaction","language":"typescript","module_resolution_path":"@/libs/blockchain/chain"},"relationships":{"depends_on":["sym-00e4d2471550dbf3aeb68901"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-2ce5be0b32faebf63b290138","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Chain.insertTransactionsFromSync method on exported class `Chain` in `src/libs/blockchain/chain.ts`.","TypeScript signature: (transactions: Transaction[]) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/chain.ts","line_range":[652,664],"symbol_name":"Chain.insertTransactionsFromSync","language":"typescript","module_resolution_path":"@/libs/blockchain/chain"},"relationships":{"depends_on":["sym-00e4d2471550dbf3aeb68901"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-e6abead0194cd02f0495cc2a","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Chain.statusOf method on exported class `Chain` in `src/libs/blockchain/chain.ts`.","TypeScript signature: (address: string, type: number) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/chain.ts","line_range":[669,693],"symbol_name":"Chain.statusOf","language":"typescript","module_resolution_path":"@/libs/blockchain/chain"},"relationships":{"depends_on":["sym-00e4d2471550dbf3aeb68901"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-20e212251cc34622794072f2","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Chain.statusHashAt method on exported class `Chain` in `src/libs/blockchain/chain.ts`.","TypeScript signature: (blockNumber: number) => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/chain.ts","line_range":[695,703],"symbol_name":"Chain.statusHashAt","language":"typescript","module_resolution_path":"@/libs/blockchain/chain"},"relationships":{"depends_on":["sym-00e4d2471550dbf3aeb68901"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-5aa3e772485150f93b70d58d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Chain.pruneBlocksToGenesisBlock method on exported class `Chain` in `src/libs/blockchain/chain.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/chain.ts","line_range":[706,709],"symbol_name":"Chain.pruneBlocksToGenesisBlock","language":"typescript","module_resolution_path":"@/libs/blockchain/chain"},"relationships":{"depends_on":["sym-00e4d2471550dbf3aeb68901"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-0675df5dd09d0c94ec327bd0","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Chain.nukeGenesis method on exported class `Chain` in `src/libs/blockchain/chain.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/chain.ts","line_range":[711,714],"symbol_name":"Chain.nukeGenesis","language":"typescript","module_resolution_path":"@/libs/blockchain/chain"},"relationships":{"depends_on":["sym-00e4d2471550dbf3aeb68901"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-44b266c5d9c712e8283c7e0a","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Chain.updateGenesisTimestamp method on exported class `Chain` in `src/libs/blockchain/chain.ts`.","TypeScript signature: (newTimestamp: number) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/chain.ts","line_range":[716,727],"symbol_name":"Chain.updateGenesisTimestamp","language":"typescript","module_resolution_path":"@/libs/blockchain/chain"},"relationships":{"depends_on":["sym-00e4d2471550dbf3aeb68901"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-00e4d2471550dbf3aeb68901","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Chain (class) exported from `src/libs/blockchain/chain.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/chain.ts","line_range":[42,728],"symbol_name":"Chain","language":"typescript","module_resolution_path":"@/libs/blockchain/chain"},"relationships":{"depends_on":["mod-d0e009681585b57776f6a187"],"depended_by":["sym-25f02bcbe29f875ab76aae3c","sym-92a40a270894c02b37cf69d0","sym-1ba1c6a5034cc8145e2aae35","sym-8c2ac5f81d00901af3bea463","sym-da62bb050091ee1e534103ae","sym-97ec0c30212c73ea6d44f41e","sym-ed793153e81f7ff7f544c330","sym-bcd8d64230b3e4e1e4710afe","sym-d5003da50d926831961f0d79","sym-bc129c1aa7fc1f9a707643a5","sym-62b1324f20925569af0c7d94","sym-c98b14652a71a92d31cc89cf","sym-1dcc44eb77d700302113243c","sym-d6281bdc047c4680a97d4794","sym-bce8660b398095386155235c","sym-eba7e3ffe54ed291bd2c48ef","sym-66abca7c0a890c9eff451b94","sym-666e0dd7d88cb6983b6be662","sym-5d90512dbf8aa5778c6bcb7c","sym-3646a67443f9f0c3b575a67d","sym-e70e7db0a823a91830f5515e","sym-5914e64d0b069cf170aa5576","sym-36d98395c44ece7890fcce75","sym-c9875c12cbfb75e4c02e4966","sym-f3eb9527e8be9c0e06a5c391","sym-0d6db2c721dcdb828685335c","sym-c0e0b82cf3d383210e3687ac","sym-2ce5be0b32faebf63b290138","sym-e6abead0194cd02f0495cc2a","sym-20e212251cc34622794072f2","sym-5aa3e772485150f93b70d58d","sym-0675df5dd09d0c94ec327bd0","sym-44b266c5d9c712e8283c7e0a"],"implements":[],"extends":[],"calls":["sym-4404f892d433afa5b82ed3f4"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-38c603195178db449d516fac","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `OperationsRegistry` in `src/libs/blockchain/gcr/gcr.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[76,104],"symbol_name":"OperationsRegistry::api","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["sym-6ee2446f641e808bde4e7235"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-dc57bdd896327ec1e9ace624","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["OperationsRegistry.add method on exported class `OperationsRegistry` in `src/libs/blockchain/gcr/gcr.ts`.","TypeScript signature: (operation: Operation) => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[87,98],"symbol_name":"OperationsRegistry.add","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["sym-6ee2446f641e808bde4e7235"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-5b8a041e0679bdedd910d034","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["OperationsRegistry.get method on exported class `OperationsRegistry` in `src/libs/blockchain/gcr/gcr.ts`.","TypeScript signature: () => OperationRegistrySlot[]."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[101,103],"symbol_name":"OperationsRegistry.get","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["sym-6ee2446f641e808bde4e7235"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-6ee2446f641e808bde4e7235","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["OperationsRegistry (class) exported from `src/libs/blockchain/gcr/gcr.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[76,104],"symbol_name":"OperationsRegistry","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["mod-91c215ca923f83144b68d625"],"depended_by":["sym-38c603195178db449d516fac","sym-dc57bdd896327ec1e9ace624","sym-5b8a041e0679bdedd910d034"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-c5f31d9588601c7bab55a778","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `AccountParams` in `src/libs/blockchain/gcr/gcr.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[120,126],"symbol_name":"AccountParams::api","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["sym-e26838f941e0e2ede79144b1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-e26838f941e0e2ede79144b1","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["AccountParams (type) exported from `src/libs/blockchain/gcr/gcr.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[120,126],"symbol_name":"AccountParams","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["mod-91c215ca923f83144b68d625"],"depended_by":["sym-c5f31d9588601c7bab55a778"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-9facbddf56f375064f7a6f13","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `GCR` in `src/libs/blockchain/gcr/gcr.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[148,1435],"symbol_name":"GCR::api","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["sym-18f330aab1779d66eb306b08"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-e40519bd11de5db85a5cb89d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCR.getInstance method on exported class `GCR` in `src/libs/blockchain/gcr/gcr.ts`.","TypeScript signature: () => GCR."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[157,162],"symbol_name":"GCR.getInstance","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["sym-18f330aab1779d66eb306b08"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-e7dfd5110b562e97bbacd645","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCR.executeOperations method on exported class `GCR` in `src/libs/blockchain/gcr/gcr.ts`.","TypeScript signature: () => Promise>."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[167,170],"symbol_name":"GCR.executeOperations","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["sym-18f330aab1779d66eb306b08"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-46c88a0a592f6967e7590a25","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCR.getGCRStatusNativeTable method on exported class `GCR` in `src/libs/blockchain/gcr/gcr.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[172,178],"symbol_name":"GCR.getGCRStatusNativeTable","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["sym-18f330aab1779d66eb306b08"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-79addca49dd8649fdbf169e0","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCR.getGCRStatusPropertiesTable method on exported class `GCR` in `src/libs/blockchain/gcr/gcr.ts`.","TypeScript signature: (publicKey: string) => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[180,188],"symbol_name":"GCR.getGCRStatusPropertiesTable","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["sym-18f330aab1779d66eb306b08"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-d5490f6681fcd2db391197c1","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCR.getGCRNativeFor method on exported class `GCR` in `src/libs/blockchain/gcr/gcr.ts`.","TypeScript signature: (address: string) => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[190,198],"symbol_name":"GCR.getGCRNativeFor","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["sym-18f330aab1779d66eb306b08"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-71e6bd4c4b0b02a86349faca","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCR.getGCRPropertiesFor method on exported class `GCR` in `src/libs/blockchain/gcr/gcr.ts`.","TypeScript signature: (address: string, field: keyof GCRExtended) => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[200,213],"symbol_name":"GCR.getGCRPropertiesFor","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["sym-18f330aab1779d66eb306b08"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-33d96de548fdd8cbeb509c35","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCR.getGCRNativeBalance method on exported class `GCR` in `src/libs/blockchain/gcr/gcr.ts`.","TypeScript signature: (address: string) => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[217,233],"symbol_name":"GCR.getGCRNativeBalance","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["sym-18f330aab1779d66eb306b08"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-6aaff080377fc70f4d63df08","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCR.getGCRTokenBalance method on exported class `GCR` in `src/libs/blockchain/gcr/gcr.ts`.","TypeScript signature: (address: string, tokenAddress: string) => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[235,252],"symbol_name":"GCR.getGCRTokenBalance","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["sym-18f330aab1779d66eb306b08"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-2debecab24f2b4a86f852c86","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCR.getGCRNFTBalance method on exported class `GCR` in `src/libs/blockchain/gcr/gcr.ts`.","TypeScript signature: (address: string, nftAddress: string) => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[254,271],"symbol_name":"GCR.getGCRNFTBalance","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["sym-18f330aab1779d66eb306b08"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-58aa0f8f51351fe7591fa958","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCR.getGCRLastBlockBaseGas method on exported class `GCR` in `src/libs/blockchain/gcr/gcr.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[273,278],"symbol_name":"GCR.getGCRLastBlockBaseGas","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["sym-18f330aab1779d66eb306b08"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-d626f382c8dc9af8ff69319d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCR.getGCRChainProperties method on exported class `GCR` in `src/libs/blockchain/gcr/gcr.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[283,299],"symbol_name":"GCR.getGCRChainProperties","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["sym-18f330aab1779d66eb306b08"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-9e475c95e17f39691c4974b4","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCR.getGCRHashedStakes method on exported class `GCR` in `src/libs/blockchain/gcr/gcr.ts`.","TypeScript signature: (n: number) => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[304,330],"symbol_name":"GCR.getGCRHashedStakes","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["sym-18f330aab1779d66eb306b08"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-c2708b5bd2aec74c2b5a2047","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCR.getGCRValidatorsAtBlock method on exported class `GCR` in `src/libs/blockchain/gcr/gcr.ts`.","TypeScript signature: (blockNumber: number) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[333,361],"symbol_name":"GCR.getGCRValidatorsAtBlock","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["sym-18f330aab1779d66eb306b08"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-8c622b66d95fc98d1e9153c6","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCR.getGCRValidatorStatus method on exported class `GCR` in `src/libs/blockchain/gcr/gcr.ts`.","TypeScript signature: (publicKeyHex: string, blockNumber: number) => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[365,391],"symbol_name":"GCR.getGCRValidatorStatus","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["sym-18f330aab1779d66eb306b08"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-71219d9d011df90af21998ce","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCR.addToGCRXM method on exported class `GCR` in `src/libs/blockchain/gcr/gcr.ts`.","TypeScript signature: (address: string, xmHash: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[399,444],"symbol_name":"GCR.addToGCRXM","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["sym-18f330aab1779d66eb306b08"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-b3c9530fe6bc8214a0c89a12","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCR.addToGCRWeb2 method on exported class `GCR` in `src/libs/blockchain/gcr/gcr.ts`.","TypeScript signature: (address: string, web2Hash: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[447,493],"symbol_name":"GCR.addToGCRWeb2","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["sym-18f330aab1779d66eb306b08"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-1c40d34e39b9c81e9db2fb4d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCR.addToGCRIMPData method on exported class `GCR` in `src/libs/blockchain/gcr/gcr.ts`.","TypeScript signature: (address: string, impDataHash: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[496,509],"symbol_name":"GCR.addToGCRIMPData","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["sym-18f330aab1779d66eb306b08"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-2e345d314823f39a48dd8f08","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCR.setGCRNativeBalance method on exported class `GCR` in `src/libs/blockchain/gcr/gcr.ts`.","TypeScript signature: (address: string, native: number, txHash: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[511,575],"symbol_name":"GCR.setGCRNativeBalance","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["sym-18f330aab1779d66eb306b08"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-83027ebbdbde9ac6fbde981f","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCR.getAccountByTwitterUsername method on exported class `GCR` in `src/libs/blockchain/gcr/gcr.ts`.","TypeScript signature: (username: string) => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[577,608],"symbol_name":"GCR.getAccountByTwitterUsername","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["sym-18f330aab1779d66eb306b08"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-af61311de9bd1fdf4fd2d6b1","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCR.getAccountByIdentity method on exported class `GCR` in `src/libs/blockchain/gcr/gcr.ts`.","TypeScript signature: (identity: {\n type: \"web2\" | \"xm\"\n // web2\n context?: \"twitter\" | \"telegram\" | \"github\" | \"discord\"\n username?: string\n userId?: string\n // xm\n chain?: string // eg. \"eth.mainnet\" | \"solana.mainnet\", etc.\n address?: string\n }) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[609,679],"symbol_name":"GCR.getAccountByIdentity","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["sym-18f330aab1779d66eb306b08"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-5cb1d1e9703f8d0bc245e88c","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCR.getCampaignData method on exported class `GCR` in `src/libs/blockchain/gcr/gcr.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[714,806],"symbol_name":"GCR.getCampaignData","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["sym-18f330aab1779d66eb306b08"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-092836808af7c49bfd955197","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCR.getAddressesByWeb2Usernames method on exported class `GCR` in `src/libs/blockchain/gcr/gcr.ts`.","TypeScript signature: (queries: {\n platform: \"twitter\" | \"discord\" | \"telegram\" | \"github\"\n username: string\n }[]) => Promise>."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[808,877],"symbol_name":"GCR.getAddressesByWeb2Usernames","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["sym-18f330aab1779d66eb306b08"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-fca070294aa37d9e0f563512","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCR.getAddressesByNativeAddresses method on exported class `GCR` in `src/libs/blockchain/gcr/gcr.ts`.","TypeScript signature: (addresses: string[]) => Promise>."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[879,904],"symbol_name":"GCR.getAddressesByNativeAddresses","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["sym-18f330aab1779d66eb306b08"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-072403f79fd59ab5fd6649f5","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCR.getAddressesByXmAccounts method on exported class `GCR` in `src/libs/blockchain/gcr/gcr.ts`.","TypeScript signature: (queries: {\n chain: string\n address: string\n }[]) => Promise>."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[906,1026],"symbol_name":"GCR.getAddressesByXmAccounts","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["sym-18f330aab1779d66eb306b08"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-ce7e617516b8387a1aebc005","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCR.createAwardPointsTransaction method on exported class `GCR` in `src/libs/blockchain/gcr/gcr.ts`.","TypeScript signature: (accounts: AccountParams[]) => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[1033,1138],"symbol_name":"GCR.createAwardPointsTransaction","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["sym-18f330aab1779d66eb306b08"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-85c3a202917ef7026c598fdc","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCR.getTopAccountsByPoints method on exported class `GCR` in `src/libs/blockchain/gcr/gcr.ts`.","TypeScript signature: (limit: unknown) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[1145,1213],"symbol_name":"GCR.getTopAccountsByPoints","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["sym-18f330aab1779d66eb306b08"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-5f6e92560d939affa395fc90","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCR.awardPoints method on exported class `GCR` in `src/libs/blockchain/gcr/gcr.ts`.","TypeScript signature: (accounts: AccountParams[]) => Promise<{\n success: boolean\n error?: string\n message: string\n txhash?: string\n confirmationBlock: number\n }>."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[1219,1402],"symbol_name":"GCR.awardPoints","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["sym-18f330aab1779d66eb306b08"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-18f330aab1779d66eb306b08","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCR (class) exported from `src/libs/blockchain/gcr/gcr.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr.ts","line_range":[148,1435],"symbol_name":"GCR","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr"},"relationships":{"depends_on":["mod-91c215ca923f83144b68d625"],"depended_by":["sym-9facbddf56f375064f7a6f13","sym-e40519bd11de5db85a5cb89d","sym-e7dfd5110b562e97bbacd645","sym-46c88a0a592f6967e7590a25","sym-79addca49dd8649fdbf169e0","sym-d5490f6681fcd2db391197c1","sym-71e6bd4c4b0b02a86349faca","sym-33d96de548fdd8cbeb509c35","sym-6aaff080377fc70f4d63df08","sym-2debecab24f2b4a86f852c86","sym-58aa0f8f51351fe7591fa958","sym-d626f382c8dc9af8ff69319d","sym-9e475c95e17f39691c4974b4","sym-c2708b5bd2aec74c2b5a2047","sym-8c622b66d95fc98d1e9153c6","sym-71219d9d011df90af21998ce","sym-b3c9530fe6bc8214a0c89a12","sym-1c40d34e39b9c81e9db2fb4d","sym-2e345d314823f39a48dd8f08","sym-83027ebbdbde9ac6fbde981f","sym-af61311de9bd1fdf4fd2d6b1","sym-5cb1d1e9703f8d0bc245e88c","sym-092836808af7c49bfd955197","sym-fca070294aa37d9e0f563512","sym-072403f79fd59ab5fd6649f5","sym-ce7e617516b8387a1aebc005","sym-85c3a202917ef7026c598fdc","sym-5f6e92560d939affa395fc90"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-e5cfd57efcf98523e19e1b24","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `GCRBalanceRoutines` in `src/libs/blockchain/gcr/gcr_routines/GCRBalanceRoutines.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/GCRBalanceRoutines.ts","line_range":[9,91],"symbol_name":"GCRBalanceRoutines::api","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/GCRBalanceRoutines"},"relationships":{"depends_on":["sym-4cf081c8a0e72521c880cd6f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["@kynesyslabs/demosdk/types","typeorm"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.949Z","authors":[]}} +{"uuid":"sym-c9e0be9fb331c15638c40e0f","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRBalanceRoutines.apply method on exported class `GCRBalanceRoutines` in `src/libs/blockchain/gcr/gcr_routines/GCRBalanceRoutines.ts`.","TypeScript signature: (editOperation: GCREdit, gcrMainRepository: Repository, simulate: boolean) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/GCRBalanceRoutines.ts","line_range":[10,90],"symbol_name":"GCRBalanceRoutines.apply","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/GCRBalanceRoutines"},"relationships":{"depends_on":["sym-4cf081c8a0e72521c880cd6f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["@kynesyslabs/demosdk/types","typeorm"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.949Z","authors":[]}} +{"uuid":"sym-4cf081c8a0e72521c880cd6f","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRBalanceRoutines (class) exported from `src/libs/blockchain/gcr/gcr_routines/GCRBalanceRoutines.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/GCRBalanceRoutines.ts","line_range":[9,91],"symbol_name":"GCRBalanceRoutines","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/GCRBalanceRoutines"},"relationships":{"depends_on":["mod-8786c56780e501016b92f408"],"depended_by":["sym-e5cfd57efcf98523e19e1b24","sym-c9e0be9fb331c15638c40e0f"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["@kynesyslabs/demosdk/types","typeorm"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.949Z","authors":[]}} +{"uuid":"sym-2366b9c6fa0a3077410d401b","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `GCRIdentityRoutines` in `src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts","line_range":[37,1760],"symbol_name":"GCRIdentityRoutines::api","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines"},"relationships":{"depends_on":["sym-d9261695c20f2db1c1c7a30d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["@kynesyslabs/demosdk/types","typeorm","env:ZK_ATTESTATION_POINTS"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-4aafd6328a7adcebef014576","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRIdentityRoutines.applyXmIdentityAdd method on exported class `GCRIdentityRoutines` in `src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts`.","TypeScript signature: (editOperation: any, gcrMainRepository: Repository, simulate: boolean) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts","line_range":[39,131],"symbol_name":"GCRIdentityRoutines.applyXmIdentityAdd","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines"},"relationships":{"depends_on":["sym-d9261695c20f2db1c1c7a30d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["@kynesyslabs/demosdk/types","typeorm","env:ZK_ATTESTATION_POINTS"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-22c7330c7c1a06c23dc4e1f3","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRIdentityRoutines.applyXmIdentityRemove method on exported class `GCRIdentityRoutines` in `src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts`.","TypeScript signature: (editOperation: any, gcrMainRepository: Repository, simulate: boolean) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts","line_range":[133,201],"symbol_name":"GCRIdentityRoutines.applyXmIdentityRemove","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines"},"relationships":{"depends_on":["sym-d9261695c20f2db1c1c7a30d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["@kynesyslabs/demosdk/types","typeorm","env:ZK_ATTESTATION_POINTS"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-92423687c06f0129bca83956","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRIdentityRoutines.applyWeb2IdentityAdd method on exported class `GCRIdentityRoutines` in `src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts`.","TypeScript signature: (editOperation: any, gcrMainRepository: Repository, simulate: boolean) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts","line_range":[204,354],"symbol_name":"GCRIdentityRoutines.applyWeb2IdentityAdd","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines"},"relationships":{"depends_on":["sym-d9261695c20f2db1c1c7a30d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["@kynesyslabs/demosdk/types","typeorm","env:ZK_ATTESTATION_POINTS"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-197d1722f57cdf3a40c2ab0a","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRIdentityRoutines.applyWeb2IdentityRemove method on exported class `GCRIdentityRoutines` in `src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts`.","TypeScript signature: (editOperation: any, gcrMainRepository: Repository, simulate: boolean) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts","line_range":[356,421],"symbol_name":"GCRIdentityRoutines.applyWeb2IdentityRemove","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines"},"relationships":{"depends_on":["sym-d9261695c20f2db1c1c7a30d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["@kynesyslabs/demosdk/types","typeorm","env:ZK_ATTESTATION_POINTS"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-c1c65f4dc014c86b200864ee","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRIdentityRoutines.applyPqcIdentityAdd method on exported class `GCRIdentityRoutines` in `src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts`.","TypeScript signature: (editOperation: any, gcrMainRepository: Repository, simulate: boolean) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts","line_range":[424,479],"symbol_name":"GCRIdentityRoutines.applyPqcIdentityAdd","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines"},"relationships":{"depends_on":["sym-d9261695c20f2db1c1c7a30d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["@kynesyslabs/demosdk/types","typeorm","env:ZK_ATTESTATION_POINTS"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-4f027c742788729961e93bf3","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRIdentityRoutines.applyPqcIdentityRemove method on exported class `GCRIdentityRoutines` in `src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts`.","TypeScript signature: (editOperation: any, gcrMainRepository: Repository, simulate: boolean) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts","line_range":[481,556],"symbol_name":"GCRIdentityRoutines.applyPqcIdentityRemove","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines"},"relationships":{"depends_on":["sym-d9261695c20f2db1c1c7a30d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["@kynesyslabs/demosdk/types","typeorm","env:ZK_ATTESTATION_POINTS"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-bff0ecde2776dec95ee3c547","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRIdentityRoutines.applyUdIdentityAdd method on exported class `GCRIdentityRoutines` in `src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts`.","TypeScript signature: (editOperation: any, gcrMainRepository: Repository, simulate: boolean) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts","line_range":[559,660],"symbol_name":"GCRIdentityRoutines.applyUdIdentityAdd","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines"},"relationships":{"depends_on":["sym-d9261695c20f2db1c1c7a30d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["@kynesyslabs/demosdk/types","typeorm","env:ZK_ATTESTATION_POINTS"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-8c05083af24170fddc969ba7","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRIdentityRoutines.applyUdIdentityRemove method on exported class `GCRIdentityRoutines` in `src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts`.","TypeScript signature: (editOperation: any, gcrMainRepository: Repository, simulate: boolean) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts","line_range":[662,712],"symbol_name":"GCRIdentityRoutines.applyUdIdentityRemove","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines"},"relationships":{"depends_on":["sym-d9261695c20f2db1c1c7a30d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["@kynesyslabs/demosdk/types","typeorm","env:ZK_ATTESTATION_POINTS"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-d8f944d79e3dc0016610f86f","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRIdentityRoutines.applyAwardPoints method on exported class `GCRIdentityRoutines` in `src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts`.","TypeScript signature: (editOperation: any, gcrMainRepository: Repository, simulate: boolean) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts","line_range":[714,740],"symbol_name":"GCRIdentityRoutines.applyAwardPoints","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines"},"relationships":{"depends_on":["sym-d9261695c20f2db1c1c7a30d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["@kynesyslabs/demosdk/types","typeorm","env:ZK_ATTESTATION_POINTS"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-edfadc288a1910878e5c329b","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRIdentityRoutines.applyAwardPointsRollback method on exported class `GCRIdentityRoutines` in `src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts`.","TypeScript signature: (editOperation: any, gcrMainRepository: Repository, simulate: boolean) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts","line_range":[742,769],"symbol_name":"GCRIdentityRoutines.applyAwardPointsRollback","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines"},"relationships":{"depends_on":["sym-d9261695c20f2db1c1c7a30d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["@kynesyslabs/demosdk/types","typeorm","env:ZK_ATTESTATION_POINTS"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-346648c4e9d12febf4429bca","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRIdentityRoutines.applyZkCommitmentAdd method on exported class `GCRIdentityRoutines` in `src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts`.","TypeScript signature: (editOperation: any, gcrMainRepository: Repository, simulate: boolean) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts","line_range":[777,876],"symbol_name":"GCRIdentityRoutines.applyZkCommitmentAdd","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines"},"relationships":{"depends_on":["sym-d9261695c20f2db1c1c7a30d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["@kynesyslabs/demosdk/types","typeorm","env:ZK_ATTESTATION_POINTS"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-2fe54b5d30a79b4770f2eb01","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRIdentityRoutines.applyZkAttestationAdd method on exported class `GCRIdentityRoutines` in `src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts`.","TypeScript signature: (editOperation: any, gcrMainRepository: Repository, simulate: boolean) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts","line_range":[882,1046],"symbol_name":"GCRIdentityRoutines.applyZkAttestationAdd","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines"},"relationships":{"depends_on":["sym-d9261695c20f2db1c1c7a30d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["@kynesyslabs/demosdk/types","typeorm","env:ZK_ATTESTATION_POINTS"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-5a6c9940cb34d31053bf3690","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRIdentityRoutines.apply method on exported class `GCRIdentityRoutines` in `src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts`.","TypeScript signature: (editOperation: GCREdit, gcrMainRepository: Repository, simulate: boolean) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts","line_range":[1048,1199],"symbol_name":"GCRIdentityRoutines.apply","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines"},"relationships":{"depends_on":["sym-d9261695c20f2db1c1c7a30d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["@kynesyslabs/demosdk/types","typeorm","env:ZK_ATTESTATION_POINTS"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-b9f92856c72f6227bbc63082","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRIdentityRoutines.applyNomisIdentityUpsert method on exported class `GCRIdentityRoutines` in `src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts`.","TypeScript signature: (editOperation: any, gcrMainRepository: Repository, simulate: boolean) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts","line_range":[1302,1379],"symbol_name":"GCRIdentityRoutines.applyNomisIdentityUpsert","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines"},"relationships":{"depends_on":["sym-d9261695c20f2db1c1c7a30d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["@kynesyslabs/demosdk/types","typeorm","env:ZK_ATTESTATION_POINTS"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-265b48bf8b8cdc9d09019aa2","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRIdentityRoutines.applyNomisIdentityRemove method on exported class `GCRIdentityRoutines` in `src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts`.","TypeScript signature: (editOperation: any, gcrMainRepository: Repository, simulate: boolean) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts","line_range":[1381,1443],"symbol_name":"GCRIdentityRoutines.applyNomisIdentityRemove","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines"},"relationships":{"depends_on":["sym-d9261695c20f2db1c1c7a30d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["@kynesyslabs/demosdk/types","typeorm","env:ZK_ATTESTATION_POINTS"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-73c8ae8986354a28b97fbf4c","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRIdentityRoutines.applyTLSNIdentityAdd method on exported class `GCRIdentityRoutines` in `src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts`.","TypeScript signature: (editOperation: any, gcrMainRepository: Repository, simulate: boolean) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts","line_range":[1465,1674],"symbol_name":"GCRIdentityRoutines.applyTLSNIdentityAdd","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines"},"relationships":{"depends_on":["sym-d9261695c20f2db1c1c7a30d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["@kynesyslabs/demosdk/types","typeorm","env:ZK_ATTESTATION_POINTS"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-b5cf3e2f5dc01ee8991f324a","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRIdentityRoutines.applyTLSNIdentityRemove method on exported class `GCRIdentityRoutines` in `src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts`.","TypeScript signature: (editOperation: any, gcrMainRepository: Repository, simulate: boolean) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts","line_range":[1681,1759],"symbol_name":"GCRIdentityRoutines.applyTLSNIdentityRemove","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines"},"relationships":{"depends_on":["sym-d9261695c20f2db1c1c7a30d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["@kynesyslabs/demosdk/types","typeorm","env:ZK_ATTESTATION_POINTS"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-d9261695c20f2db1c1c7a30d","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRIdentityRoutines (class) exported from `src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines.ts","line_range":[37,1760],"symbol_name":"GCRIdentityRoutines","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/GCRIdentityRoutines"},"relationships":{"depends_on":["mod-056bc15608f58b9ec7451fc4"],"depended_by":["sym-2366b9c6fa0a3077410d401b","sym-4aafd6328a7adcebef014576","sym-22c7330c7c1a06c23dc4e1f3","sym-92423687c06f0129bca83956","sym-197d1722f57cdf3a40c2ab0a","sym-c1c65f4dc014c86b200864ee","sym-4f027c742788729961e93bf3","sym-bff0ecde2776dec95ee3c547","sym-8c05083af24170fddc969ba7","sym-d8f944d79e3dc0016610f86f","sym-edfadc288a1910878e5c329b","sym-346648c4e9d12febf4429bca","sym-2fe54b5d30a79b4770f2eb01","sym-5a6c9940cb34d31053bf3690","sym-b9f92856c72f6227bbc63082","sym-265b48bf8b8cdc9d09019aa2","sym-73c8ae8986354a28b97fbf4c","sym-b5cf3e2f5dc01ee8991f324a"],"implements":[],"extends":[],"calls":["sym-e9ff6a51fed52302f183f9ff"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["@kynesyslabs/demosdk/types","typeorm","env:ZK_ATTESTATION_POINTS"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-205554026dce7da322f2ba6b","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `GCRNonceRoutines` in `src/libs/blockchain/gcr/gcr_routines/GCRNonceRoutines.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/GCRNonceRoutines.ts","line_range":[8,66],"symbol_name":"GCRNonceRoutines::api","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/GCRNonceRoutines"},"relationships":{"depends_on":["sym-5eb556c7155bbf9a5c0934b6"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["@kynesyslabs/demosdk/types","typeorm"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.949Z","authors":[]}} +{"uuid":"sym-65c1018c321675804e2e81bb","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRNonceRoutines.apply method on exported class `GCRNonceRoutines` in `src/libs/blockchain/gcr/gcr_routines/GCRNonceRoutines.ts`.","TypeScript signature: (editOperation: GCREdit, gcrMainRepository: Repository, simulate: boolean) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/GCRNonceRoutines.ts","line_range":[9,65],"symbol_name":"GCRNonceRoutines.apply","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/GCRNonceRoutines"},"relationships":{"depends_on":["sym-5eb556c7155bbf9a5c0934b6"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["@kynesyslabs/demosdk/types","typeorm"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.949Z","authors":[]}} +{"uuid":"sym-5eb556c7155bbf9a5c0934b6","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRNonceRoutines (class) exported from `src/libs/blockchain/gcr/gcr_routines/GCRNonceRoutines.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/GCRNonceRoutines.ts","line_range":[8,66],"symbol_name":"GCRNonceRoutines","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/GCRNonceRoutines"},"relationships":{"depends_on":["mod-ce3b72f0515cac2e2fe5ca15"],"depended_by":["sym-205554026dce7da322f2ba6b","sym-65c1018c321675804e2e81bb"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["@kynesyslabs/demosdk/types","typeorm"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.949Z","authors":[]}} +{"uuid":"sym-8ba03001bd95dd23e0d18bd3","level":"L3","extraction_confidence":0.87,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `GCRTLSNotaryRoutines` in `src/libs/blockchain/gcr/gcr_routines/GCRTLSNotaryRoutines.ts`.","GCRTLSNotaryRoutines handles the storage and retrieval of TLSNotary attestation proofs."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/GCRTLSNotaryRoutines.ts","line_range":[15,130],"symbol_name":"GCRTLSNotaryRoutines::api","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/GCRTLSNotaryRoutines"},"relationships":{"depends_on":["sym-269e4fbb61c177255aec3579"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","node_modules/@kynesyslabs/demosdk/build/types/blockchain/GCREdit"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 11-14","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-c466293ba66477debca41064","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRTLSNotaryRoutines.apply method on exported class `GCRTLSNotaryRoutines` in `src/libs/blockchain/gcr/gcr_routines/GCRTLSNotaryRoutines.ts`.","TypeScript signature: (editOperation: GCREdit, gcrTLSNotaryRepository: Repository, simulate: boolean) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/GCRTLSNotaryRoutines.ts","line_range":[22,93],"symbol_name":"GCRTLSNotaryRoutines.apply","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/GCRTLSNotaryRoutines"},"relationships":{"depends_on":["sym-269e4fbb61c177255aec3579"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","node_modules/@kynesyslabs/demosdk/build/types/blockchain/GCREdit"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-8bc3042db4e035701f845913","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRTLSNotaryRoutines.getProof method on exported class `GCRTLSNotaryRoutines` in `src/libs/blockchain/gcr/gcr_routines/GCRTLSNotaryRoutines.ts`.","TypeScript signature: (tokenId: string, gcrTLSNotaryRepository: Repository) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/GCRTLSNotaryRoutines.ts","line_range":[100,105],"symbol_name":"GCRTLSNotaryRoutines.getProof","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/GCRTLSNotaryRoutines"},"relationships":{"depends_on":["sym-269e4fbb61c177255aec3579"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","node_modules/@kynesyslabs/demosdk/build/types/blockchain/GCREdit"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-b3f2856c4eddd3ad35183479","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRTLSNotaryRoutines.getProofsByOwner method on exported class `GCRTLSNotaryRoutines` in `src/libs/blockchain/gcr/gcr_routines/GCRTLSNotaryRoutines.ts`.","TypeScript signature: (owner: string, gcrTLSNotaryRepository: Repository) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/GCRTLSNotaryRoutines.ts","line_range":[112,117],"symbol_name":"GCRTLSNotaryRoutines.getProofsByOwner","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/GCRTLSNotaryRoutines"},"relationships":{"depends_on":["sym-269e4fbb61c177255aec3579"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","node_modules/@kynesyslabs/demosdk/build/types/blockchain/GCREdit"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-60b1dcfccd7d912d62f07c4c","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRTLSNotaryRoutines.getProofsByDomain method on exported class `GCRTLSNotaryRoutines` in `src/libs/blockchain/gcr/gcr_routines/GCRTLSNotaryRoutines.ts`.","TypeScript signature: (domain: string, gcrTLSNotaryRepository: Repository) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/GCRTLSNotaryRoutines.ts","line_range":[124,129],"symbol_name":"GCRTLSNotaryRoutines.getProofsByDomain","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/GCRTLSNotaryRoutines"},"relationships":{"depends_on":["sym-269e4fbb61c177255aec3579"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","node_modules/@kynesyslabs/demosdk/build/types/blockchain/GCREdit"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-269e4fbb61c177255aec3579","level":"L2","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRTLSNotaryRoutines (class) exported from `src/libs/blockchain/gcr/gcr_routines/GCRTLSNotaryRoutines.ts`.","GCRTLSNotaryRoutines handles the storage and retrieval of TLSNotary attestation proofs."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/GCRTLSNotaryRoutines.ts","line_range":[15,130],"symbol_name":"GCRTLSNotaryRoutines","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/GCRTLSNotaryRoutines"},"relationships":{"depends_on":["mod-d0734ff72a9c8934deea7846"],"depended_by":["sym-8ba03001bd95dd23e0d18bd3","sym-c466293ba66477debca41064","sym-8bc3042db4e035701f845913","sym-b3f2856c4eddd3ad35183479","sym-60b1dcfccd7d912d62f07c4c"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","node_modules/@kynesyslabs/demosdk/build/types/blockchain/GCREdit"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 11-14","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-1cc5ed15187d2a43e127dda5","level":"L3","extraction_confidence":0.87,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `IncentiveManager` in `src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts`.","This class is used to manage the incentives for the user."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts","line_range":[9,209],"symbol_name":"IncentiveManager::api","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/IncentiveManager"},"relationships":{"depends_on":["sym-605d3a415b8b3b5bf34196c3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 4-8","related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-b46342d64e2d554a6c0b65c8","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IncentiveManager.walletLinked method on exported class `IncentiveManager` in `src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts`.","TypeScript signature: (userId: string, walletAddress: string, chain: string, referralCode: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts","line_range":[14,26],"symbol_name":"IncentiveManager.walletLinked","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/IncentiveManager"},"relationships":{"depends_on":["sym-605d3a415b8b3b5bf34196c3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-c495996d00ba846d0fe68da8","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IncentiveManager.twitterLinked method on exported class `IncentiveManager` in `src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts`.","TypeScript signature: (userId: string, twitterUserId: string, referralCode: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts","line_range":[31,41],"symbol_name":"IncentiveManager.twitterLinked","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/IncentiveManager"},"relationships":{"depends_on":["sym-605d3a415b8b3b5bf34196c3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-34935ef1df53fbbf8e5b3d33","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IncentiveManager.walletUnlinked method on exported class `IncentiveManager` in `src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts`.","TypeScript signature: (userId: string, walletAddress: string, chain: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts","line_range":[46,56],"symbol_name":"IncentiveManager.walletUnlinked","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/IncentiveManager"},"relationships":{"depends_on":["sym-605d3a415b8b3b5bf34196c3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-750a05a8d88d303c2cdb0313","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IncentiveManager.twitterUnlinked method on exported class `IncentiveManager` in `src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts`.","TypeScript signature: (userId: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts","line_range":[61,63],"symbol_name":"IncentiveManager.twitterUnlinked","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/IncentiveManager"},"relationships":{"depends_on":["sym-605d3a415b8b3b5bf34196c3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-c26fe2934565e589fa3d57da","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IncentiveManager.githubLinked method on exported class `IncentiveManager` in `src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts`.","TypeScript signature: (userId: string, githubUserId: string, referralCode: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts","line_range":[68,78],"symbol_name":"IncentiveManager.githubLinked","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/IncentiveManager"},"relationships":{"depends_on":["sym-605d3a415b8b3b5bf34196c3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-871a354ffe05d3ed57c9cf48","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IncentiveManager.githubUnlinked method on exported class `IncentiveManager` in `src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts`.","TypeScript signature: (userId: string, githubUserId: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts","line_range":[83,88],"symbol_name":"IncentiveManager.githubUnlinked","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/IncentiveManager"},"relationships":{"depends_on":["sym-605d3a415b8b3b5bf34196c3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-c7515a5b3bc3b3ae64b20549","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IncentiveManager.telegramLinked method on exported class `IncentiveManager` in `src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts`.","TypeScript signature: (userId: string, telegramUserId: string, referralCode: string, attestation: any) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts","line_range":[93,105],"symbol_name":"IncentiveManager.telegramLinked","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/IncentiveManager"},"relationships":{"depends_on":["sym-605d3a415b8b3b5bf34196c3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-f4182f20b12ea5995aa8f2b3","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IncentiveManager.telegramTLSNLinked method on exported class `IncentiveManager` in `src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts`.","TypeScript signature: (userId: string, telegramUserId: string, referralCode: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts","line_range":[110,120],"symbol_name":"IncentiveManager.telegramTLSNLinked","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/IncentiveManager"},"relationships":{"depends_on":["sym-605d3a415b8b3b5bf34196c3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-a9f646772777a0cb950cc16a","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IncentiveManager.telegramUnlinked method on exported class `IncentiveManager` in `src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts`.","TypeScript signature: (userId: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts","line_range":[125,127],"symbol_name":"IncentiveManager.telegramUnlinked","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/IncentiveManager"},"relationships":{"depends_on":["sym-605d3a415b8b3b5bf34196c3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-9ccdee42c05c560def083e01","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IncentiveManager.getPoints method on exported class `IncentiveManager` in `src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts`.","TypeScript signature: (address: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts","line_range":[132,134],"symbol_name":"IncentiveManager.getPoints","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/IncentiveManager"},"relationships":{"depends_on":["sym-605d3a415b8b3b5bf34196c3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-a71913c481b711116ffa657b","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IncentiveManager.discordLinked method on exported class `IncentiveManager` in `src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts`.","TypeScript signature: (userId: string, referralCode: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts","line_range":[139,144],"symbol_name":"IncentiveManager.discordLinked","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/IncentiveManager"},"relationships":{"depends_on":["sym-605d3a415b8b3b5bf34196c3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-aeb49a4780bd3f40ca3cece4","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IncentiveManager.discordUnlinked method on exported class `IncentiveManager` in `src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts`.","TypeScript signature: (userId: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts","line_range":[149,151],"symbol_name":"IncentiveManager.discordUnlinked","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/IncentiveManager"},"relationships":{"depends_on":["sym-605d3a415b8b3b5bf34196c3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-71784c490210b3b11901f352","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IncentiveManager.udDomainLinked method on exported class `IncentiveManager` in `src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts`.","TypeScript signature: (userId: string, domain: string, signingAddress: string, referralCode: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts","line_range":[156,168],"symbol_name":"IncentiveManager.udDomainLinked","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/IncentiveManager"},"relationships":{"depends_on":["sym-605d3a415b8b3b5bf34196c3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-a0b60f97b33a82757e742ac5","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IncentiveManager.udDomainUnlinked method on exported class `IncentiveManager` in `src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts`.","TypeScript signature: (userId: string, domain: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts","line_range":[173,178],"symbol_name":"IncentiveManager.udDomainUnlinked","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/IncentiveManager"},"relationships":{"depends_on":["sym-605d3a415b8b3b5bf34196c3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-d418522a11310eb0211f7dbf","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IncentiveManager.nomisLinked method on exported class `IncentiveManager` in `src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts`.","TypeScript signature: (userId: string, chain: string, nomisScore: number, referralCode: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts","line_range":[183,195],"symbol_name":"IncentiveManager.nomisLinked","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/IncentiveManager"},"relationships":{"depends_on":["sym-605d3a415b8b3b5bf34196c3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-ca42b4774377bb461e4e6398","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IncentiveManager.nomisUnlinked method on exported class `IncentiveManager` in `src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts`.","TypeScript signature: (userId: string, chain: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts","line_range":[200,208],"symbol_name":"IncentiveManager.nomisUnlinked","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/IncentiveManager"},"relationships":{"depends_on":["sym-605d3a415b8b3b5bf34196c3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-605d3a415b8b3b5bf34196c3","level":"L2","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IncentiveManager (class) exported from `src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts`.","This class is used to manage the incentives for the user."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/IncentiveManager.ts","line_range":[9,209],"symbol_name":"IncentiveManager","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/IncentiveManager"},"relationships":{"depends_on":["mod-c5d542bba68467e14e67638a"],"depended_by":["sym-1cc5ed15187d2a43e127dda5","sym-b46342d64e2d554a6c0b65c8","sym-c495996d00ba846d0fe68da8","sym-34935ef1df53fbbf8e5b3d33","sym-750a05a8d88d303c2cdb0313","sym-c26fe2934565e589fa3d57da","sym-871a354ffe05d3ed57c9cf48","sym-c7515a5b3bc3b3ae64b20549","sym-f4182f20b12ea5995aa8f2b3","sym-a9f646772777a0cb950cc16a","sym-9ccdee42c05c560def083e01","sym-a71913c481b711116ffa657b","sym-aeb49a4780bd3f40ca3cece4","sym-71784c490210b3b11901f352","sym-a0b60f97b33a82757e742ac5","sym-d418522a11310eb0211f7dbf","sym-ca42b4774377bb461e4e6398"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 4-8","related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-68bcd93b16922175db1b5cbf","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["applyGCROperation (function) exported from `src/libs/blockchain/gcr/gcr_routines/applyGCROperation.ts`.","TypeScript signature: (operation: GCROperation) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/applyGCROperation.ts","line_range":[13,35],"symbol_name":"applyGCROperation","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/applyGCROperation"},"relationships":{"depends_on":["mod-a2f8e9a3ce2f5a58e00df674"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.949Z","authors":[]}} +{"uuid":"sym-aff919f6ec93563946a19be3","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["assignWeb2 (function) exported from `src/libs/blockchain/gcr/gcr_routines/assignWeb2.ts`.","TypeScript signature: (operation: Operation) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/assignWeb2.ts","line_range":[4,9],"symbol_name":"assignWeb2","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/assignWeb2"},"relationships":{"depends_on":["mod-291d062f1bd46af2d595f119"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.949Z","authors":[]}} +{"uuid":"sym-768b3d2e609c7a7d9e7e123f","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["assignXM (function) exported from `src/libs/blockchain/gcr/gcr_routines/assignXM.ts`.","TypeScript signature: (operation: Operation) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/assignXM.ts","line_range":[5,8],"symbol_name":"assignXM","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/assignXM"},"relationships":{"depends_on":["mod-fe44c1bccd2633149d023f55"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.949Z","authors":[]}} +{"uuid":"sym-fcae6dca65ab92ce6e8c43b0","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ensureGCRForUser (function) exported from `src/libs/blockchain/gcr/gcr_routines/ensureGCRForUser.ts`.","TypeScript signature: (pubkey: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/ensureGCRForUser.ts","line_range":[8,33],"symbol_name":"ensureGCRForUser","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/ensureGCRForUser"},"relationships":{"depends_on":["mod-1d4743119cc890fadab85fb7"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-2fb8ea47d77841cb1c9c723d","sym-86dad8a3cc937e2681c558d1","sym-02bb643864b28ec54f6bd102","sym-bfa8af7e83408600dde29446","sym-5639767a6380b54d939d3083","sym-442e0e5efaae973242d3a83e"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/utils"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.949Z","authors":[]}} +{"uuid":"sym-791e472cf07c678ab89547f5","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getJSONBValue (function) exported from `src/libs/blockchain/gcr/gcr_routines/gcrJSONBHandler.ts`.","TypeScript signature: (pubkey: string, field: \"identities\" | \"assignedTxs\", key: string, subkey: string) => unknown.","Example"],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/gcrJSONBHandler.ts","line_range":[26,44],"symbol_name":"getJSONBValue","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/gcrJSONBHandler"},"relationships":{"depends_on":["mod-37b5ef5203b8d54dbbc526c9"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 4-25","related_adr":null,"last_modified":"2026-02-13T14:41:04.949Z","authors":[]}} +{"uuid":"sym-2476c69d26521df4fa998292","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["updateJSONBValue (function) exported from `src/libs/blockchain/gcr/gcr_routines/gcrJSONBHandler.ts`.","TypeScript signature: (pubkey: string, field: \"assignedTxs\" | \"identities\", key: string, value: any, subkey: string) => unknown.","Example"],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/gcrJSONBHandler.ts","line_range":[72,96],"symbol_name":"updateJSONBValue","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/gcrJSONBHandler"},"relationships":{"depends_on":["mod-37b5ef5203b8d54dbbc526c9"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 46-71","related_adr":null,"last_modified":"2026-02-13T14:41:04.949Z","authors":[]}} +{"uuid":"sym-89d3088a75cd27ac95940da2","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `GCRStateSaverHelper` in `src/libs/blockchain/gcr/gcr_routines/gcrStateSaverHelper.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/gcrStateSaverHelper.ts","line_range":[17,52],"symbol_name":"GCRStateSaverHelper::api","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/gcrStateSaverHelper"},"relationships":{"depends_on":["sym-f1ad2eeaf85b22aebcfd1d0b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["crypto","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-882a6fe5739f28b6209f2a29","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRStateSaverHelper.getLastConsenusStateHash method on exported class `GCRStateSaverHelper` in `src/libs/blockchain/gcr/gcr_routines/gcrStateSaverHelper.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/gcrStateSaverHelper.ts","line_range":[20,22],"symbol_name":"GCRStateSaverHelper.getLastConsenusStateHash","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/gcrStateSaverHelper"},"relationships":{"depends_on":["sym-f1ad2eeaf85b22aebcfd1d0b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["crypto","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-04c11175ee7e0898d4e3e531","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRStateSaverHelper.updateGCRTracker method on exported class `GCRStateSaverHelper` in `src/libs/blockchain/gcr/gcr_routines/gcrStateSaverHelper.ts`.","TypeScript signature: (publicKey: string) => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/gcrStateSaverHelper.ts","line_range":[25,51],"symbol_name":"GCRStateSaverHelper.updateGCRTracker","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/gcrStateSaverHelper"},"relationships":{"depends_on":["sym-f1ad2eeaf85b22aebcfd1d0b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["crypto","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-f1ad2eeaf85b22aebcfd1d0b","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRStateSaverHelper (class) exported from `src/libs/blockchain/gcr/gcr_routines/gcrStateSaverHelper.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/gcrStateSaverHelper.ts","line_range":[17,52],"symbol_name":"GCRStateSaverHelper","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/gcrStateSaverHelper"},"relationships":{"depends_on":["mod-652e9394671c2c32cc57b508"],"depended_by":["sym-89d3088a75cd27ac95940da2","sym-882a6fe5739f28b6209f2a29","sym-04c11175ee7e0898d4e3e531"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["crypto","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-34489faeacbf50c7bc09dbf1","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `HandleNativeOperations` in `src/libs/blockchain/gcr/gcr_routines/handleNativeOperations.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/handleNativeOperations.ts","line_range":[14,160],"symbol_name":"HandleNativeOperations::api","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/handleNativeOperations"},"relationships":{"depends_on":["sym-951698e6c9f720f735f0bfe3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node_modules/@kynesyslabs/demosdk/build/types/blockchain/GCREdit","node_modules/@kynesyslabs/demosdk/build/types/blockchain/Transaction","node_modules/@kynesyslabs/demosdk/build/types/native"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-382b32b7744f4a1bcddc6aaa","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["HandleNativeOperations.handle method on exported class `HandleNativeOperations` in `src/libs/blockchain/gcr/gcr_routines/handleNativeOperations.ts`.","TypeScript signature: (tx: Transaction, isRollback: unknown) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/handleNativeOperations.ts","line_range":[15,159],"symbol_name":"HandleNativeOperations.handle","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/handleNativeOperations"},"relationships":{"depends_on":["sym-951698e6c9f720f735f0bfe3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node_modules/@kynesyslabs/demosdk/build/types/blockchain/GCREdit","node_modules/@kynesyslabs/demosdk/build/types/blockchain/Transaction","node_modules/@kynesyslabs/demosdk/build/types/native"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-951698e6c9f720f735f0bfe3","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["HandleNativeOperations (class) exported from `src/libs/blockchain/gcr/gcr_routines/handleNativeOperations.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/handleNativeOperations.ts","line_range":[14,160],"symbol_name":"HandleNativeOperations","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/handleNativeOperations"},"relationships":{"depends_on":["mod-8d16d859c035fc1372e07e06"],"depended_by":["sym-34489faeacbf50c7bc09dbf1","sym-382b32b7744f4a1bcddc6aaa"],"implements":[],"extends":[],"calls":["sym-adc4065dd1b3ac679d5ba2f9","sym-b4ef38925e03b3181e41e353","sym-9281614f452adafc3cae1183"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node_modules/@kynesyslabs/demosdk/build/types/blockchain/GCREdit","node_modules/@kynesyslabs/demosdk/build/types/blockchain/Transaction","node_modules/@kynesyslabs/demosdk/build/types/native"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-56ec447a61bf949ac32f434b","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["hashPublicKeyTable (function) exported from `src/libs/blockchain/gcr/gcr_routines/hashGCR.ts`.","TypeScript signature: (entity: EntityTarget) => Promise.","Generates a SHA-256 hash for tables that use 'publicKey' as their identifier."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/hashGCR.ts","line_range":[22,36],"symbol_name":"hashPublicKeyTable","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/hashGCR"},"relationships":{"depends_on":["mod-43a22fa504defe4ae499272f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-a09e4498f797e281ad451c42"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 12-21","related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-8ae7289bebb399343fb0af1e","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["hashSubnetsTxsTable (function) exported from `src/libs/blockchain/gcr/gcr_routines/hashGCR.ts`.","TypeScript signature: () => Promise.","Generates a SHA-256 hash specifically for the GCRSubnetsTxs table."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/hashGCR.ts","line_range":[45,57],"symbol_name":"hashSubnetsTxsTable","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/hashGCR"},"relationships":{"depends_on":["mod-43a22fa504defe4ae499272f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-a09e4498f797e281ad451c42"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 38-44","related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-c860224b0e2990892c904249","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["hashTLSNotaryTable (function) exported from `src/libs/blockchain/gcr/gcr_routines/hashGCR.ts`.","TypeScript signature: () => Promise.","Generates a SHA-256 hash for the GCRTLSNotary table."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/hashGCR.ts","line_range":[66,89],"symbol_name":"hashTLSNotaryTable","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/hashGCR"},"relationships":{"depends_on":["mod-43a22fa504defe4ae499272f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-a09e4498f797e281ad451c42"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 60-65","related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-a09e4498f797e281ad451c42","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["hashGCRTables (function) exported from `src/libs/blockchain/gcr/gcr_routines/hashGCR.ts`.","TypeScript signature: () => Promise.","Creates a combined hash of all GCR-related tables."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/hashGCR.ts","line_range":[103,115],"symbol_name":"hashGCRTables","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/hashGCR"},"relationships":{"depends_on":["mod-43a22fa504defe4ae499272f"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-56ec447a61bf949ac32f434b","sym-8ae7289bebb399343fb0af1e","sym-c860224b0e2990892c904249"],"called_by":["sym-27459666e0f28d8c21b10cf3","sym-1a7e0225b76935e084fa2329"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 91-102","related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-27459666e0f28d8c21b10cf3","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["insertGCRHash (function) exported from `src/libs/blockchain/gcr/gcr_routines/hashGCR.ts`.","TypeScript signature: (hash: NativeTablesHashes) => Promise.","Inserts a GCR hash into the database."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/hashGCR.ts","line_range":[124,139],"symbol_name":"insertGCRHash","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/hashGCR"},"relationships":{"depends_on":["mod-43a22fa504defe4ae499272f"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-a09e4498f797e281ad451c42"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 117-123","related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-f5e1dae1fda06177bf332cd5","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `IdentityManager` in `src/libs/blockchain/gcr/gcr_routines/identityManager.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/identityManager.ts","line_range":[54,371],"symbol_name":"IdentityManager::api","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/identityManager"},"relationships":{"depends_on":["sym-2fb8ea47d77841cb1c9c723d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node_modules/@kynesyslabs/demosdk/build/multichain/core","@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/xm-localsdk","node_modules/@kynesyslabs/demosdk/build/types/abstraction","@kynesyslabs/demosdk/encryption","sdk/localsdk/multichain/configs/chainIds"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.950Z","authors":[]}} +{"uuid":"sym-250be326bd2cf87c0c3c55a3","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IdentityManager.inferIdentityFromWrite method on exported class `IdentityManager` in `src/libs/blockchain/gcr/gcr_routines/identityManager.ts`.","TypeScript signature: (payload: InferFromWritePayload) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/identityManager.ts","line_range":[58,63],"symbol_name":"IdentityManager.inferIdentityFromWrite","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/identityManager"},"relationships":{"depends_on":["sym-2fb8ea47d77841cb1c9c723d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node_modules/@kynesyslabs/demosdk/build/multichain/core","@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/xm-localsdk","node_modules/@kynesyslabs/demosdk/build/types/abstraction","@kynesyslabs/demosdk/encryption","sdk/localsdk/multichain/configs/chainIds"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.950Z","authors":[]}} +{"uuid":"sym-37d7e586ec06993e0e47be67","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IdentityManager.filterConnections method on exported class `IdentityManager` in `src/libs/blockchain/gcr/gcr_routines/identityManager.ts`.","TypeScript signature: (sender: string, payload: InferFromSignaturePayload) => Promise<{\n success: boolean\n message: string\n twitterAccountConnected: boolean\n }>."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/identityManager.ts","line_range":[71,174],"symbol_name":"IdentityManager.filterConnections","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/identityManager"},"relationships":{"depends_on":["sym-2fb8ea47d77841cb1c9c723d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node_modules/@kynesyslabs/demosdk/build/multichain/core","@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/xm-localsdk","node_modules/@kynesyslabs/demosdk/build/types/abstraction","@kynesyslabs/demosdk/encryption","sdk/localsdk/multichain/configs/chainIds"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.950Z","authors":[]}} +{"uuid":"sym-624aefaae7c50cc48d1d7856","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IdentityManager.verifyPayload method on exported class `IdentityManager` in `src/libs/blockchain/gcr/gcr_routines/identityManager.ts`.","TypeScript signature: (payload: InferFromSignaturePayload, sender: string) => Promise<{ success: boolean; message: string }>."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/identityManager.ts","line_range":[183,250],"symbol_name":"IdentityManager.verifyPayload","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/identityManager"},"relationships":{"depends_on":["sym-2fb8ea47d77841cb1c9c723d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node_modules/@kynesyslabs/demosdk/build/multichain/core","@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/xm-localsdk","node_modules/@kynesyslabs/demosdk/build/types/abstraction","@kynesyslabs/demosdk/encryption","sdk/localsdk/multichain/configs/chainIds"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.950Z","authors":[]}} +{"uuid":"sym-6453b4a51f77b0e33e0871f2","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IdentityManager.verifyPqcPayload method on exported class `IdentityManager` in `src/libs/blockchain/gcr/gcr_routines/identityManager.ts`.","TypeScript signature: (payloads: PqcIdentityAssignPayload[\"payload\"], senderEd25519: string) => Promise<{ success: boolean; message: string }>."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/identityManager.ts","line_range":[260,288],"symbol_name":"IdentityManager.verifyPqcPayload","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/identityManager"},"relationships":{"depends_on":["sym-2fb8ea47d77841cb1c9c723d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node_modules/@kynesyslabs/demosdk/build/multichain/core","@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/xm-localsdk","node_modules/@kynesyslabs/demosdk/build/types/abstraction","@kynesyslabs/demosdk/encryption","sdk/localsdk/multichain/configs/chainIds"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.950Z","authors":[]}} +{"uuid":"sym-be8ac4ac4c6f736c62f19940","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IdentityManager.verifyNomisPayload method on exported class `IdentityManager` in `src/libs/blockchain/gcr/gcr_routines/identityManager.ts`.","TypeScript signature: (payload: NomisWalletIdentity) => Promise<{ success: boolean; message: string }>."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/identityManager.ts","line_range":[297,312],"symbol_name":"IdentityManager.verifyNomisPayload","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/identityManager"},"relationships":{"depends_on":["sym-2fb8ea47d77841cb1c9c723d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node_modules/@kynesyslabs/demosdk/build/multichain/core","@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/xm-localsdk","node_modules/@kynesyslabs/demosdk/build/types/abstraction","@kynesyslabs/demosdk/encryption","sdk/localsdk/multichain/configs/chainIds"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.950Z","authors":[]}} +{"uuid":"sym-ce51cedbbc722d871e574c34","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IdentityManager.getXmIdentities method on exported class `IdentityManager` in `src/libs/blockchain/gcr/gcr_routines/identityManager.ts`.","TypeScript signature: (address: string, chain: string, subchain: string) => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/identityManager.ts","line_range":[322,333],"symbol_name":"IdentityManager.getXmIdentities","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/identityManager"},"relationships":{"depends_on":["sym-2fb8ea47d77841cb1c9c723d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node_modules/@kynesyslabs/demosdk/build/multichain/core","@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/xm-localsdk","node_modules/@kynesyslabs/demosdk/build/types/abstraction","@kynesyslabs/demosdk/encryption","sdk/localsdk/multichain/configs/chainIds"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.950Z","authors":[]}} +{"uuid":"sym-eb769a327d251102c9539621","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IdentityManager.getWeb2Identities method on exported class `IdentityManager` in `src/libs/blockchain/gcr/gcr_routines/identityManager.ts`.","TypeScript signature: (address: string, context: string) => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/identityManager.ts","line_range":[341,344],"symbol_name":"IdentityManager.getWeb2Identities","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/identityManager"},"relationships":{"depends_on":["sym-2fb8ea47d77841cb1c9c723d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node_modules/@kynesyslabs/demosdk/build/multichain/core","@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/xm-localsdk","node_modules/@kynesyslabs/demosdk/build/types/abstraction","@kynesyslabs/demosdk/encryption","sdk/localsdk/multichain/configs/chainIds"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.950Z","authors":[]}} +{"uuid":"sym-ed231c11ba266752dca686de","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IdentityManager.getPQCIdentity method on exported class `IdentityManager` in `src/libs/blockchain/gcr/gcr_routines/identityManager.ts`.","TypeScript signature: (address: string) => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/identityManager.ts","line_range":[346,348],"symbol_name":"IdentityManager.getPQCIdentity","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/identityManager"},"relationships":{"depends_on":["sym-2fb8ea47d77841cb1c9c723d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node_modules/@kynesyslabs/demosdk/build/multichain/core","@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/xm-localsdk","node_modules/@kynesyslabs/demosdk/build/types/abstraction","@kynesyslabs/demosdk/encryption","sdk/localsdk/multichain/configs/chainIds"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.950Z","authors":[]}} +{"uuid":"sym-621907ad30456ba7db233704","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IdentityManager.getIdentities method on exported class `IdentityManager` in `src/libs/blockchain/gcr/gcr_routines/identityManager.ts`.","TypeScript signature: (address: string, key: \"xm\" | \"web2\" | \"pqc\" | \"ud\" | \"nomis\") => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/identityManager.ts","line_range":[356,366],"symbol_name":"IdentityManager.getIdentities","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/identityManager"},"relationships":{"depends_on":["sym-2fb8ea47d77841cb1c9c723d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node_modules/@kynesyslabs/demosdk/build/multichain/core","@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/xm-localsdk","node_modules/@kynesyslabs/demosdk/build/types/abstraction","@kynesyslabs/demosdk/encryption","sdk/localsdk/multichain/configs/chainIds"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.950Z","authors":[]}} +{"uuid":"sym-c65207b5ded1f6d2eb1bf90d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IdentityManager.getUDIdentities method on exported class `IdentityManager` in `src/libs/blockchain/gcr/gcr_routines/identityManager.ts`.","TypeScript signature: (address: string) => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/identityManager.ts","line_range":[368,370],"symbol_name":"IdentityManager.getUDIdentities","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/identityManager"},"relationships":{"depends_on":["sym-2fb8ea47d77841cb1c9c723d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node_modules/@kynesyslabs/demosdk/build/multichain/core","@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/xm-localsdk","node_modules/@kynesyslabs/demosdk/build/types/abstraction","@kynesyslabs/demosdk/encryption","sdk/localsdk/multichain/configs/chainIds"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.950Z","authors":[]}} +{"uuid":"sym-2fb8ea47d77841cb1c9c723d","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IdentityManager (class) exported from `src/libs/blockchain/gcr/gcr_routines/identityManager.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/identityManager.ts","line_range":[54,371],"symbol_name":"IdentityManager","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/identityManager"},"relationships":{"depends_on":["mod-525c86f0484f1a8328f90e21"],"depended_by":["sym-f5e1dae1fda06177bf332cd5","sym-250be326bd2cf87c0c3c55a3","sym-37d7e586ec06993e0e47be67","sym-624aefaae7c50cc48d1d7856","sym-6453b4a51f77b0e33e0871f2","sym-be8ac4ac4c6f736c62f19940","sym-ce51cedbbc722d871e574c34","sym-eb769a327d251102c9539621","sym-ed231c11ba266752dca686de","sym-621907ad30456ba7db233704","sym-c65207b5ded1f6d2eb1bf90d"],"implements":[],"extends":[],"calls":["sym-fcae6dca65ab92ce6e8c43b0"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node_modules/@kynesyslabs/demosdk/build/multichain/core","@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/xm-localsdk","node_modules/@kynesyslabs/demosdk/build/types/abstraction","@kynesyslabs/demosdk/encryption","sdk/localsdk/multichain/configs/chainIds"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.950Z","authors":[]}} +{"uuid":"sym-8b770fac114c0bea3fceb66d","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["default (export_default) exported from `src/libs/blockchain/gcr/gcr_routines/index.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/index.ts","line_range":[13,13],"symbol_name":"default","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/index"},"relationships":{"depends_on":["mod-f33c364cc30d4c989aabb467"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.950Z","authors":[]}} +{"uuid":"sym-949988062e958db45bd9006c","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["default (export_default) exported from `src/libs/blockchain/gcr/gcr_routines/manageNative.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/manageNative.ts","line_range":[95,95],"symbol_name":"default","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/manageNative"},"relationships":{"depends_on":["mod-c31ff6a7377bd2e29ce07160"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.950Z","authors":[]}} +{"uuid":"sym-e55d97a832aabc5025e3f6b8","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["registerIMPData (function) exported from `src/libs/blockchain/gcr/gcr_routines/registerIMPData.ts`.","TypeScript signature: (bundle: ImMessage[]) => Promise<[boolean, any]>."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/registerIMPData.ts","line_range":[10,40],"symbol_name":"registerIMPData","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/registerIMPData"},"relationships":{"depends_on":["mod-60ac739c2c89b2f73e69a278"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["crypto"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.950Z","authors":[]}} +{"uuid":"sym-c1ce5d44ff631ef5243e34d8","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["detectSignatureType (function) exported from `src/libs/blockchain/gcr/gcr_routines/signatureDetector.ts`.","TypeScript signature: (address: string) => SignatureType | null.","Detect signature type from address format"],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/signatureDetector.ts","line_range":[23,46],"symbol_name":"detectSignatureType","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/signatureDetector"},"relationships":{"depends_on":["mod-e15b2a203e781bad5f15394f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-e137071690ac87c5a393b765","sym-434133fb66b01eec771c868b","sym-86dad8a3cc937e2681c558d1"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 13-22","related_adr":null,"last_modified":"2026-02-13T14:41:04.950Z","authors":[]}} +{"uuid":"sym-e137071690ac87c5a393b765","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["validateAddressType (function) exported from `src/libs/blockchain/gcr/gcr_routines/signatureDetector.ts`.","TypeScript signature: (address: string, expectedType: SignatureType) => boolean.","Validate that an address matches the expected signature type"],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/signatureDetector.ts","line_range":[59,65],"symbol_name":"validateAddressType","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/signatureDetector"},"relationships":{"depends_on":["mod-e15b2a203e781bad5f15394f"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-c1ce5d44ff631ef5243e34d8"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 48-58","related_adr":null,"last_modified":"2026-02-13T14:41:04.950Z","authors":[]}} +{"uuid":"sym-434133fb66b01eec771c868b","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["isSignableAddress (function) exported from `src/libs/blockchain/gcr/gcr_routines/signatureDetector.ts`.","TypeScript signature: (address: string) => boolean.","Check if an address is signable (recognized format)"],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/signatureDetector.ts","line_range":[73,75],"symbol_name":"isSignableAddress","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/signatureDetector"},"relationships":{"depends_on":["mod-e15b2a203e781bad5f15394f"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-c1ce5d44ff631ef5243e34d8"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 67-72","related_adr":null,"last_modified":"2026-02-13T14:41:04.950Z","authors":[]}} +{"uuid":"sym-4ceb05e530a44839153ae9e8","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["txToGCROperation (function) exported from `src/libs/blockchain/gcr/gcr_routines/txToGCROperation.ts`.","TypeScript signature: (tx: Transaction) => Promise.","REVIEW"],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/txToGCROperation.ts","line_range":[17,37],"symbol_name":"txToGCROperation","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/txToGCROperation"},"relationships":{"depends_on":["mod-ea8ac339723e29cb2a2446ee"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/demoswork","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 11-14","related_adr":null,"last_modified":"2026-02-13T14:41:04.950Z","authors":[]}} +{"uuid":"sym-b0b72ec0c9b1eac0e797bc45","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `UDIdentityManager` in `src/libs/blockchain/gcr/gcr_routines/udIdentityManager.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/udIdentityManager.ts","line_range":[64,698],"symbol_name":"UDIdentityManager::api","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/udIdentityManager"},"relationships":{"depends_on":["sym-86dad8a3cc937e2681c558d1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["ethers","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/xmcore"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-790b8d8a6e814aaf6a4e7c7d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["UDIdentityManager.resolveUDDomain method on exported class `UDIdentityManager` in `src/libs/blockchain/gcr/gcr_routines/udIdentityManager.ts`.","TypeScript signature: (domain: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/udIdentityManager.ts","line_range":[280,360],"symbol_name":"UDIdentityManager.resolveUDDomain","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/udIdentityManager"},"relationships":{"depends_on":["sym-86dad8a3cc937e2681c558d1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["ethers","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/xmcore"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-8a9ddd5405a61cd9a4baf5d6","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["UDIdentityManager.verifyPayload method on exported class `UDIdentityManager` in `src/libs/blockchain/gcr/gcr_routines/udIdentityManager.ts`.","TypeScript signature: (payload: UDIdentityAssignPayload, sender: string) => Promise<{ success: boolean; message: string }>."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/udIdentityManager.ts","line_range":[374,539],"symbol_name":"UDIdentityManager.verifyPayload","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/udIdentityManager"},"relationships":{"depends_on":["sym-86dad8a3cc937e2681c558d1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["ethers","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/xmcore"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-7df1dc85869fbbaf76a62503","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["UDIdentityManager.checkOwnerLinkedWallets method on exported class `UDIdentityManager` in `src/libs/blockchain/gcr/gcr_routines/udIdentityManager.ts`.","TypeScript signature: (address: string, domain: string, signer: string, resolutionData: UnifiedDomainResolution, identities: Record[]>>) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/udIdentityManager.ts","line_range":[616,669],"symbol_name":"UDIdentityManager.checkOwnerLinkedWallets","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/udIdentityManager"},"relationships":{"depends_on":["sym-86dad8a3cc937e2681c558d1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["ethers","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/xmcore"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-74dbc4492d4bf45e8d689b5b","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["UDIdentityManager.getUdIdentities method on exported class `UDIdentityManager` in `src/libs/blockchain/gcr/gcr_routines/udIdentityManager.ts`.","TypeScript signature: (address: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/udIdentityManager.ts","line_range":[677,681],"symbol_name":"UDIdentityManager.getUdIdentities","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/udIdentityManager"},"relationships":{"depends_on":["sym-86dad8a3cc937e2681c558d1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["ethers","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/xmcore"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-1854d72579a983ba0293a4d3","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["UDIdentityManager.getIdentities method on exported class `UDIdentityManager` in `src/libs/blockchain/gcr/gcr_routines/udIdentityManager.ts`.","TypeScript signature: (address: string, key: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/udIdentityManager.ts","line_range":[690,697],"symbol_name":"UDIdentityManager.getIdentities","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/udIdentityManager"},"relationships":{"depends_on":["sym-86dad8a3cc937e2681c558d1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["ethers","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/xmcore"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-86dad8a3cc937e2681c558d1","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["UDIdentityManager (class) exported from `src/libs/blockchain/gcr/gcr_routines/udIdentityManager.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/udIdentityManager.ts","line_range":[64,698],"symbol_name":"UDIdentityManager","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/udIdentityManager"},"relationships":{"depends_on":["mod-be7b10b7e34156b0bae273f7"],"depended_by":["sym-b0b72ec0c9b1eac0e797bc45","sym-790b8d8a6e814aaf6a4e7c7d","sym-8a9ddd5405a61cd9a4baf5d6","sym-7df1dc85869fbbaf76a62503","sym-74dbc4492d4bf45e8d689b5b","sym-1854d72579a983ba0293a4d3"],"implements":[],"extends":[],"calls":["sym-c1ce5d44ff631ef5243e34d8","sym-fcae6dca65ab92ce6e8c43b0"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["ethers","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/xmcore"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-7c8b1e597e24b16c3006ca81","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ResolverConfig` in `src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts`.","Configuration options for the SolanaDomainResolver"],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts","line_range":[17,22],"symbol_name":"ResolverConfig::api","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper"},"relationships":{"depends_on":["sym-ebadf897a746e8a865087841"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@coral-xyz/anchor","@coral-xyz/anchor/dist/cjs/nodewallet","@solana/web3.js","crypto","sdk/localsdk/multichain/configs/chainProviders","env:SOLANA_RPC"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 14-16","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-ebadf897a746e8a865087841","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ResolverConfig (interface) exported from `src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts`.","Configuration options for the SolanaDomainResolver"],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts","line_range":[17,22],"symbol_name":"ResolverConfig","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper"},"relationships":{"depends_on":["mod-b989c7daa266d9b652abd067"],"depended_by":["sym-7c8b1e597e24b16c3006ca81"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@coral-xyz/anchor","@coral-xyz/anchor/dist/cjs/nodewallet","@solana/web3.js","crypto","sdk/localsdk/multichain/configs/chainProviders","env:SOLANA_RPC"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 14-16","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-5e11387ff92f6c4d914dc0a4","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `RecordResult` in `src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts`.","Result of a single record resolution"],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts","line_range":[27,36],"symbol_name":"RecordResult::api","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper"},"relationships":{"depends_on":["sym-ee20da2e2f815cdc3b697b6e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@coral-xyz/anchor","@coral-xyz/anchor/dist/cjs/nodewallet","@solana/web3.js","crypto","sdk/localsdk/multichain/configs/chainProviders","env:SOLANA_RPC"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 24-26","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-ee20da2e2f815cdc3b697b6e","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RecordResult (interface) exported from `src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts`.","Result of a single record resolution"],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts","line_range":[27,36],"symbol_name":"RecordResult","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper"},"relationships":{"depends_on":["mod-b989c7daa266d9b652abd067"],"depended_by":["sym-5e11387ff92f6c4d914dc0a4"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@coral-xyz/anchor","@coral-xyz/anchor/dist/cjs/nodewallet","@solana/web3.js","crypto","sdk/localsdk/multichain/configs/chainProviders","env:SOLANA_RPC"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 24-26","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-3494444d4459b825581393ef","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `DomainResolutionResult` in `src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts`.","Complete domain resolution result"],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts","line_range":[41,58],"symbol_name":"DomainResolutionResult::api","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper"},"relationships":{"depends_on":["sym-3a5a479984dc5cd0445c8e8e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@coral-xyz/anchor","@coral-xyz/anchor/dist/cjs/nodewallet","@solana/web3.js","crypto","sdk/localsdk/multichain/configs/chainProviders","env:SOLANA_RPC"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 38-40","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-3a5a479984dc5cd0445c8e8e","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DomainResolutionResult (interface) exported from `src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts`.","Complete domain resolution result"],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts","line_range":[41,58],"symbol_name":"DomainResolutionResult","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper"},"relationships":{"depends_on":["mod-b989c7daa266d9b652abd067"],"depended_by":["sym-3494444d4459b825581393ef"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@coral-xyz/anchor","@coral-xyz/anchor/dist/cjs/nodewallet","@solana/web3.js","crypto","sdk/localsdk/multichain/configs/chainProviders","env:SOLANA_RPC"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 38-40","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-869301cbf3cb641733e83260","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `DomainNotFoundError` in `src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts`.","Error thrown when a domain is not found on-chain"],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts","line_range":[65,74],"symbol_name":"DomainNotFoundError::api","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper"},"relationships":{"depends_on":["sym-f4fba0d8454b5e6491208b81"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@coral-xyz/anchor","@coral-xyz/anchor/dist/cjs/nodewallet","@solana/web3.js","crypto","sdk/localsdk/multichain/configs/chainProviders","env:SOLANA_RPC"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 60-64","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-f4fba0d8454b5e6491208b81","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DomainNotFoundError (class) exported from `src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts`.","Error thrown when a domain is not found on-chain"],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts","line_range":[65,74],"symbol_name":"DomainNotFoundError","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper"},"relationships":{"depends_on":["mod-b989c7daa266d9b652abd067"],"depended_by":["sym-869301cbf3cb641733e83260"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@coral-xyz/anchor","@coral-xyz/anchor/dist/cjs/nodewallet","@solana/web3.js","crypto","sdk/localsdk/multichain/configs/chainProviders","env:SOLANA_RPC"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 60-64","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-342fb500933a92e19d17cffe","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `RecordNotFoundError` in `src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts`.","Error thrown when a specific record is not found for a domain"],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts","line_range":[81,90],"symbol_name":"RecordNotFoundError::api","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper"},"relationships":{"depends_on":["sym-e3db749d53d156363a30b86b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@coral-xyz/anchor","@coral-xyz/anchor/dist/cjs/nodewallet","@solana/web3.js","crypto","sdk/localsdk/multichain/configs/chainProviders","env:SOLANA_RPC"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 76-80","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-e3db749d53d156363a30b86b","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RecordNotFoundError (class) exported from `src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts`.","Error thrown when a specific record is not found for a domain"],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts","line_range":[81,90],"symbol_name":"RecordNotFoundError","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper"},"relationships":{"depends_on":["mod-b989c7daa266d9b652abd067"],"depended_by":["sym-342fb500933a92e19d17cffe"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@coral-xyz/anchor","@coral-xyz/anchor/dist/cjs/nodewallet","@solana/web3.js","crypto","sdk/localsdk/multichain/configs/chainProviders","env:SOLANA_RPC"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 76-80","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-adf9d9496a3cfec4c94b94cd","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `ConnectionError` in `src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts`.","Error thrown when connection to Solana RPC fails"],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts","line_range":[97,106],"symbol_name":"ConnectionError::api","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper"},"relationships":{"depends_on":["sym-16c80f6db3121ece6476e5d7"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@coral-xyz/anchor","@coral-xyz/anchor/dist/cjs/nodewallet","@solana/web3.js","crypto","sdk/localsdk/multichain/configs/chainProviders","env:SOLANA_RPC"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 92-96","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-16c80f6db3121ece6476e5d7","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ConnectionError (class) exported from `src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts`.","Error thrown when connection to Solana RPC fails"],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts","line_range":[97,106],"symbol_name":"ConnectionError","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper"},"relationships":{"depends_on":["mod-b989c7daa266d9b652abd067"],"depended_by":["sym-adf9d9496a3cfec4c94b94cd"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@coral-xyz/anchor","@coral-xyz/anchor/dist/cjs/nodewallet","@solana/web3.js","crypto","sdk/localsdk/multichain/configs/chainProviders","env:SOLANA_RPC"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 92-96","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-861f69933d806c3abd4e18b8","level":"L3","extraction_confidence":0.87,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `SolanaDomainResolver` in `src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts`.","SolanaDomainResolver - A portable class for resolving Unstoppable Domains on Solana blockchain"],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts","line_range":[146,759],"symbol_name":"SolanaDomainResolver::api","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper"},"relationships":{"depends_on":["sym-4f3ca06d30e0c5991ed7ee43"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@coral-xyz/anchor","@coral-xyz/anchor/dist/cjs/nodewallet","@solana/web3.js","crypto","sdk/localsdk/multichain/configs/chainProviders","env:SOLANA_RPC"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 112-145","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-75ec46fc47366c9b781406cd","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SolanaDomainResolver.resolveRecord method on exported class `SolanaDomainResolver` in `src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts`.","TypeScript signature: (label: string, tld: string, recordKey: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts","line_range":[422,480],"symbol_name":"SolanaDomainResolver.resolveRecord","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper"},"relationships":{"depends_on":["sym-4f3ca06d30e0c5991ed7ee43"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@coral-xyz/anchor","@coral-xyz/anchor/dist/cjs/nodewallet","@solana/web3.js","crypto","sdk/localsdk/multichain/configs/chainProviders","env:SOLANA_RPC"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-da76f11367328a93d87c800b","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SolanaDomainResolver.resolve method on exported class `SolanaDomainResolver` in `src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts`.","TypeScript signature: (label: string, tld: string, recordKeys: string[]) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts","line_range":[513,620],"symbol_name":"SolanaDomainResolver.resolve","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper"},"relationships":{"depends_on":["sym-4f3ca06d30e0c5991ed7ee43"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@coral-xyz/anchor","@coral-xyz/anchor/dist/cjs/nodewallet","@solana/web3.js","crypto","sdk/localsdk/multichain/configs/chainProviders","env:SOLANA_RPC"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-76104fafaed374671547faa6","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SolanaDomainResolver.resolveDomain method on exported class `SolanaDomainResolver` in `src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts`.","TypeScript signature: (fullDomain: string, recordKeys: string[]) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts","line_range":[644,668],"symbol_name":"SolanaDomainResolver.resolveDomain","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper"},"relationships":{"depends_on":["sym-4f3ca06d30e0c5991ed7ee43"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@coral-xyz/anchor","@coral-xyz/anchor/dist/cjs/nodewallet","@solana/web3.js","crypto","sdk/localsdk/multichain/configs/chainProviders","env:SOLANA_RPC"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-91c078071cf3bd44fed43181","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SolanaDomainResolver.domainExists method on exported class `SolanaDomainResolver` in `src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts`.","TypeScript signature: (label: string, tld: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts","line_range":[692,703],"symbol_name":"SolanaDomainResolver.domainExists","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper"},"relationships":{"depends_on":["sym-4f3ca06d30e0c5991ed7ee43"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@coral-xyz/anchor","@coral-xyz/anchor/dist/cjs/nodewallet","@solana/web3.js","crypto","sdk/localsdk/multichain/configs/chainProviders","env:SOLANA_RPC"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-ae10579f5cd0544e81866e48","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SolanaDomainResolver.getDomainInfo method on exported class `SolanaDomainResolver` in `src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts`.","TypeScript signature: (label: string, tld: string) => Promise>."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts","line_range":[725,758],"symbol_name":"SolanaDomainResolver.getDomainInfo","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper"},"relationships":{"depends_on":["sym-4f3ca06d30e0c5991ed7ee43"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@coral-xyz/anchor","@coral-xyz/anchor/dist/cjs/nodewallet","@solana/web3.js","crypto","sdk/localsdk/multichain/configs/chainProviders","env:SOLANA_RPC"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-4f3ca06d30e0c5991ed7ee43","level":"L2","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SolanaDomainResolver (class) exported from `src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts`.","SolanaDomainResolver - A portable class for resolving Unstoppable Domains on Solana blockchain"],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper.ts","line_range":[146,759],"symbol_name":"SolanaDomainResolver","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/gcr_routines/udSolanaResolverHelper"},"relationships":{"depends_on":["mod-b989c7daa266d9b652abd067"],"depended_by":["sym-861f69933d806c3abd4e18b8","sym-75ec46fc47366c9b781406cd","sym-da76f11367328a93d87c800b","sym-76104fafaed374671547faa6","sym-91c078071cf3bd44fed43181","sym-ae10579f5cd0544e81866e48"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@coral-xyz/anchor","@coral-xyz/anchor/dist/cjs/nodewallet","@solana/web3.js","crypto","sdk/localsdk/multichain/configs/chainProviders","env:SOLANA_RPC"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 112-145","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-43d111e11c00d152f6d456d3","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `GetNativeStatusOptions` in `src/libs/blockchain/gcr/handleGCR.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/handleGCR.ts","line_range":[58,64],"symbol_name":"GetNativeStatusOptions::api","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/handleGCR"},"relationships":{"depends_on":["sym-b76986452634811c854b7bcd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["lodash","@kynesyslabs/demosdk/types","typeorm"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-b76986452634811c854b7bcd","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GetNativeStatusOptions (type) exported from `src/libs/blockchain/gcr/handleGCR.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/handleGCR.ts","line_range":[58,64],"symbol_name":"GetNativeStatusOptions","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/handleGCR"},"relationships":{"depends_on":["mod-e395bfa94e646748f1e3298e"],"depended_by":["sym-43d111e11c00d152f6d456d3"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["lodash","@kynesyslabs/demosdk/types","typeorm"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-19c9fcac0f3773a6015cff76","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `GetNativePropertiesOptions` in `src/libs/blockchain/gcr/handleGCR.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/handleGCR.ts","line_range":[66,72],"symbol_name":"GetNativePropertiesOptions::api","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/handleGCR"},"relationships":{"depends_on":["sym-11ffa0ff4b9cbe0463fa3f26"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["lodash","@kynesyslabs/demosdk/types","typeorm"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-11ffa0ff4b9cbe0463fa3f26","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GetNativePropertiesOptions (type) exported from `src/libs/blockchain/gcr/handleGCR.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/handleGCR.ts","line_range":[66,72],"symbol_name":"GetNativePropertiesOptions","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/handleGCR"},"relationships":{"depends_on":["mod-e395bfa94e646748f1e3298e"],"depended_by":["sym-19c9fcac0f3773a6015cff76"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["lodash","@kynesyslabs/demosdk/types","typeorm"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-23c0251ed3d19e6d489193fd","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `GetNativeSubnetsTxsOptions` in `src/libs/blockchain/gcr/handleGCR.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/handleGCR.ts","line_range":[74,76],"symbol_name":"GetNativeSubnetsTxsOptions::api","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/handleGCR"},"relationships":{"depends_on":["sym-547a9804abe78ff64ea33519"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["lodash","@kynesyslabs/demosdk/types","typeorm"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-547a9804abe78ff64ea33519","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GetNativeSubnetsTxsOptions (type) exported from `src/libs/blockchain/gcr/handleGCR.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/handleGCR.ts","line_range":[74,76],"symbol_name":"GetNativeSubnetsTxsOptions","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/handleGCR"},"relationships":{"depends_on":["mod-e395bfa94e646748f1e3298e"],"depended_by":["sym-23c0251ed3d19e6d489193fd"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["lodash","@kynesyslabs/demosdk/types","typeorm"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-696e1561c1a2c5179fbe7b8c","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `GCRResult` in `src/libs/blockchain/gcr/handleGCR.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/handleGCR.ts","line_range":[78,82],"symbol_name":"GCRResult::api","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/handleGCR"},"relationships":{"depends_on":["sym-c287354ee92d5c615d89cc43"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["lodash","@kynesyslabs/demosdk/types","typeorm"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-c287354ee92d5c615d89cc43","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRResult (interface) exported from `src/libs/blockchain/gcr/handleGCR.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/handleGCR.ts","line_range":[78,82],"symbol_name":"GCRResult","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/handleGCR"},"relationships":{"depends_on":["mod-e395bfa94e646748f1e3298e"],"depended_by":["sym-696e1561c1a2c5179fbe7b8c"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["lodash","@kynesyslabs/demosdk/types","typeorm"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-23e295063ad4930534a984bc","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `HandleGCR` in `src/libs/blockchain/gcr/handleGCR.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/handleGCR.ts","line_range":[85,621],"symbol_name":"HandleGCR::api","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/handleGCR"},"relationships":{"depends_on":["sym-96eda9bc4b46c54fa62b2965"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["lodash","@kynesyslabs/demosdk/types","typeorm"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-afa009c6b098d9d3d6e87a8f","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["HandleGCR.getNativeStatus method on exported class `HandleGCR` in `src/libs/blockchain/gcr/handleGCR.ts`.","TypeScript signature: (publicKey: string, options: GetNativeStatusOptions) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/handleGCR.ts","line_range":[88,144],"symbol_name":"HandleGCR.getNativeStatus","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/handleGCR"},"relationships":{"depends_on":["sym-96eda9bc4b46c54fa62b2965"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["lodash","@kynesyslabs/demosdk/types","typeorm"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-07c3526c86f89eb7b7bdf796","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["HandleGCR.getNativeProperties method on exported class `HandleGCR` in `src/libs/blockchain/gcr/handleGCR.ts`.","TypeScript signature: (publicKey: string, options: GetNativePropertiesOptions) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/handleGCR.ts","line_range":[146,195],"symbol_name":"HandleGCR.getNativeProperties","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/handleGCR"},"relationships":{"depends_on":["sym-96eda9bc4b46c54fa62b2965"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["lodash","@kynesyslabs/demosdk/types","typeorm"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-7ead72cfe057bb368a414faf","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["HandleGCR.getNativeSubnetsTxs method on exported class `HandleGCR` in `src/libs/blockchain/gcr/handleGCR.ts`.","TypeScript signature: (subnetId: string, options: GetNativeSubnetsTxsOptions) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/handleGCR.ts","line_range":[197,228],"symbol_name":"HandleGCR.getNativeSubnetsTxs","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/handleGCR"},"relationships":{"depends_on":["sym-96eda9bc4b46c54fa62b2965"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["lodash","@kynesyslabs/demosdk/types","typeorm"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-80ccf4dd54906ba3c0fef014","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["HandleGCR.apply method on exported class `HandleGCR` in `src/libs/blockchain/gcr/handleGCR.ts`.","TypeScript signature: (editOperation: GCREdit, tx: Transaction, rollback: unknown, simulate: unknown) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/handleGCR.ts","line_range":[245,303],"symbol_name":"HandleGCR.apply","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/handleGCR"},"relationships":{"depends_on":["sym-96eda9bc4b46c54fa62b2965"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["lodash","@kynesyslabs/demosdk/types","typeorm"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-ac3c393c58273c4f0ed0a42d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["HandleGCR.applyToTx method on exported class `HandleGCR` in `src/libs/blockchain/gcr/handleGCR.ts`.","TypeScript signature: (tx: Transaction, isRollback: unknown, simulate: unknown) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/handleGCR.ts","line_range":[313,405],"symbol_name":"HandleGCR.applyToTx","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/handleGCR"},"relationships":{"depends_on":["sym-96eda9bc4b46c54fa62b2965"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["lodash","@kynesyslabs/demosdk/types","typeorm"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-2efee4d3250f8fd80bccd9cf","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["HandleGCR.rollback method on exported class `HandleGCR` in `src/libs/blockchain/gcr/handleGCR.ts`.","TypeScript signature: (tx: Transaction, appliedEditsOriginal: GCREdit[]) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/gcr/handleGCR.ts","line_range":[468,505],"symbol_name":"HandleGCR.rollback","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/handleGCR"},"relationships":{"depends_on":["sym-96eda9bc4b46c54fa62b2965"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["lodash","@kynesyslabs/demosdk/types","typeorm"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-96eda9bc4b46c54fa62b2965","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["HandleGCR (class) exported from `src/libs/blockchain/gcr/handleGCR.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/handleGCR.ts","line_range":[85,621],"symbol_name":"HandleGCR","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/handleGCR"},"relationships":{"depends_on":["mod-e395bfa94e646748f1e3298e"],"depended_by":["sym-23e295063ad4930534a984bc","sym-afa009c6b098d9d3d6e87a8f","sym-07c3526c86f89eb7b7bdf796","sym-7ead72cfe057bb368a414faf","sym-80ccf4dd54906ba3c0fef014","sym-ac3c393c58273c4f0ed0a42d","sym-2efee4d3250f8fd80bccd9cf"],"implements":[],"extends":[],"calls":["sym-adc4065dd1b3ac679d5ba2f9","sym-4e80afaf50ee6162c65e2622"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["lodash","@kynesyslabs/demosdk/types","typeorm"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-41baf1407ad0beab3507733a","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `GCROperation` in `src/libs/blockchain/gcr/types/GCROperations.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/types/GCROperations.ts","line_range":[3,7],"symbol_name":"GCROperation::api","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/types/GCROperations"},"relationships":{"depends_on":["sym-97870c7cba45e51609b21522"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.950Z","authors":[]}} +{"uuid":"sym-97870c7cba45e51609b21522","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCROperation (interface) exported from `src/libs/blockchain/gcr/types/GCROperations.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/types/GCROperations.ts","line_range":[3,7],"symbol_name":"GCROperation","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/types/GCROperations"},"relationships":{"depends_on":["mod-8fb910e5659126b322f9fe29"],"depended_by":["sym-41baf1407ad0beab3507733a"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.950Z","authors":[]}} +{"uuid":"sym-734e3a5727ae21fda3a09a43","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `NFT` in `src/libs/blockchain/gcr/types/NFT.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/types/NFT.ts","line_range":[32,54],"symbol_name":"NFT::api","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/types/NFT"},"relationships":{"depends_on":["sym-05f548e455547493427a1712"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.950Z","authors":[]}} +{"uuid":"sym-6950382b643e36b7ebb9e97f","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["NFT.setItem method on exported class `NFT` in `src/libs/blockchain/gcr/types/NFT.ts`.","TypeScript signature: (image: string, properties: SingleNFTProperty[]) => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/types/NFT.ts","line_range":[50,53],"symbol_name":"NFT.setItem","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/types/NFT"},"relationships":{"depends_on":["sym-05f548e455547493427a1712"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.950Z","authors":[]}} +{"uuid":"sym-05f548e455547493427a1712","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["NFT (class) exported from `src/libs/blockchain/gcr/types/NFT.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/types/NFT.ts","line_range":[32,54],"symbol_name":"NFT","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/types/NFT"},"relationships":{"depends_on":["mod-77a2526a89e7700a956a35e1"],"depended_by":["sym-734e3a5727ae21fda3a09a43","sym-6950382b643e36b7ebb9e97f"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.950Z","authors":[]}} +{"uuid":"sym-e55d437bced177f411a9e0ba","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `Token` in `src/libs/blockchain/gcr/types/Token.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/types/Token.ts","line_range":[14,19],"symbol_name":"Token::api","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/types/Token"},"relationships":{"depends_on":["sym-99d0edcde347cde287d80898"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.950Z","authors":[]}} +{"uuid":"sym-99d0edcde347cde287d80898","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Token (class) exported from `src/libs/blockchain/gcr/types/Token.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/gcr/types/Token.ts","line_range":[14,19],"symbol_name":"Token","language":"typescript","module_resolution_path":"@/libs/blockchain/gcr/types/Token"},"relationships":{"depends_on":["mod-b46f47672e387229e73f22e6"],"depended_by":["sym-e55d437bced177f411a9e0ba"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.950Z","authors":[]}} +{"uuid":"sym-464d5a8a8386571779a75764","level":"L3","extraction_confidence":0.87,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `L2PSHashes` in `src/libs/blockchain/l2ps_hashes.ts`.","L2PS Hashes Manager"],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/l2ps_hashes.ts","line_range":[22,234],"symbol_name":"L2PSHashes::api","language":"typescript","module_resolution_path":"@/libs/blockchain/l2ps_hashes"},"relationships":{"depends_on":["sym-b96188aba996df22075f02f0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 6-20","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-3ad962db5915e15e9b5a34a2","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSHashes.init method on exported class `L2PSHashes` in `src/libs/blockchain/l2ps_hashes.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/l2ps_hashes.ts","line_range":[33,42],"symbol_name":"L2PSHashes.init","language":"typescript","module_resolution_path":"@/libs/blockchain/l2ps_hashes"},"relationships":{"depends_on":["sym-b96188aba996df22075f02f0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-21c2ed26a4fe3b789e89579a","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSHashes.updateHash method on exported class `L2PSHashes` in `src/libs/blockchain/l2ps_hashes.ts`.","TypeScript signature: (l2psUid: string, hash: string, txCount: number, blockNumber: bigint) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/l2ps_hashes.ts","line_range":[74,104],"symbol_name":"L2PSHashes.updateHash","language":"typescript","module_resolution_path":"@/libs/blockchain/l2ps_hashes"},"relationships":{"depends_on":["sym-b96188aba996df22075f02f0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-8aedcb314a95fff296cdbfe5","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSHashes.getHash method on exported class `L2PSHashes` in `src/libs/blockchain/l2ps_hashes.ts`.","TypeScript signature: (l2psUid: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/l2ps_hashes.ts","line_range":[121,134],"symbol_name":"L2PSHashes.getHash","language":"typescript","module_resolution_path":"@/libs/blockchain/l2ps_hashes"},"relationships":{"depends_on":["sym-b96188aba996df22075f02f0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-cfd4e7bab70a3d76e52bd76b","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSHashes.getAll method on exported class `L2PSHashes` in `src/libs/blockchain/l2ps_hashes.ts`.","TypeScript signature: (limit: number, offset: number) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/l2ps_hashes.ts","line_range":[154,171],"symbol_name":"L2PSHashes.getAll","language":"typescript","module_resolution_path":"@/libs/blockchain/l2ps_hashes"},"relationships":{"depends_on":["sym-b96188aba996df22075f02f0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-609c86d82fe4ba01bc8c6426","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSHashes.getStats method on exported class `L2PSHashes` in `src/libs/blockchain/l2ps_hashes.ts`.","TypeScript signature: () => Promise<{\n totalNetworks: number\n totalTransactions: number\n lastUpdateTime: bigint\n oldestUpdateTime: bigint\n }>."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/l2ps_hashes.ts","line_range":[187,233],"symbol_name":"L2PSHashes.getStats","language":"typescript","module_resolution_path":"@/libs/blockchain/l2ps_hashes"},"relationships":{"depends_on":["sym-b96188aba996df22075f02f0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-b96188aba996df22075f02f0","level":"L2","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSHashes (class) exported from `src/libs/blockchain/l2ps_hashes.ts`.","L2PS Hashes Manager"],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/l2ps_hashes.ts","line_range":[22,234],"symbol_name":"L2PSHashes","language":"typescript","module_resolution_path":"@/libs/blockchain/l2ps_hashes"},"relationships":{"depends_on":["mod-9389bad564e097d75994d5f8"],"depended_by":["sym-464d5a8a8386571779a75764","sym-3ad962db5915e15e9b5a34a2","sym-21c2ed26a4fe3b789e89579a","sym-8aedcb314a95fff296cdbfe5","sym-cfd4e7bab70a3d76e52bd76b","sym-609c86d82fe4ba01bc8c6426"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 6-20","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-9034b49b1dbb743c13ce4423","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PS_STATUS (variable) exported from `src/libs/blockchain/l2ps_mempool.ts`.","L2PS Transaction Status Constants"],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/l2ps_mempool.ts","line_range":[16,29],"symbol_name":"L2PS_STATUS","language":"typescript","module_resolution_path":"@/libs/blockchain/l2ps_mempool"},"relationships":{"depends_on":["mod-c8450797917dfb54fe43ca86"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 10-15","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-716fbb6f4698e042f41b8e8e","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `L2PSStatus` in `src/libs/blockchain/l2ps_mempool.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/l2ps_mempool.ts","line_range":[31,31],"symbol_name":"L2PSStatus::api","language":"typescript","module_resolution_path":"@/libs/blockchain/l2ps_mempool"},"relationships":{"depends_on":["sym-02b934d8e3081f0cfdd54829"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-02b934d8e3081f0cfdd54829","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSStatus (type) exported from `src/libs/blockchain/l2ps_mempool.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/l2ps_mempool.ts","line_range":[31,31],"symbol_name":"L2PSStatus","language":"typescript","module_resolution_path":"@/libs/blockchain/l2ps_mempool"},"relationships":{"depends_on":["mod-c8450797917dfb54fe43ca86"],"depended_by":["sym-716fbb6f4698e042f41b8e8e"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-ff641b5d8ca6f513a4d3b737","level":"L3","extraction_confidence":0.87,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `L2PSMempool` in `src/libs/blockchain/l2ps_mempool.ts`.","L2PS Mempool Manager"],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/l2ps_mempool.ts","line_range":[48,809],"symbol_name":"L2PSMempool::api","language":"typescript","module_resolution_path":"@/libs/blockchain/l2ps_mempool"},"relationships":{"depends_on":["sym-a16b3eeaac4eb18401aa51da"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 33-47","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-b7922ddeb799711e40b0fb1d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSMempool.init method on exported class `L2PSMempool` in `src/libs/blockchain/l2ps_mempool.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/l2ps_mempool.ts","line_range":[61,70],"symbol_name":"L2PSMempool.init","language":"typescript","module_resolution_path":"@/libs/blockchain/l2ps_mempool"},"relationships":{"depends_on":["sym-a16b3eeaac4eb18401aa51da"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-b1e9c1eea121146321e34dcb","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSMempool.addTransaction method on exported class `L2PSMempool` in `src/libs/blockchain/l2ps_mempool.ts`.","TypeScript signature: (l2psUid: string, encryptedTx: L2PSTransaction, originalHash: string, status: unknown) => Promise<{ success: boolean; error?: string }>."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/l2ps_mempool.ts","line_range":[109,153],"symbol_name":"L2PSMempool.addTransaction","language":"typescript","module_resolution_path":"@/libs/blockchain/l2ps_mempool"},"relationships":{"depends_on":["sym-a16b3eeaac4eb18401aa51da"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-9ca99ef032d7812c7bce60d9","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSMempool.getByUID method on exported class `L2PSMempool` in `src/libs/blockchain/l2ps_mempool.ts`.","TypeScript signature: (l2psUid: string, status: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/l2ps_mempool.ts","line_range":[292,313],"symbol_name":"L2PSMempool.getByUID","language":"typescript","module_resolution_path":"@/libs/blockchain/l2ps_mempool"},"relationships":{"depends_on":["sym-a16b3eeaac4eb18401aa51da"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-9503de3abf0ca0864a61689e","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSMempool.getLastTransaction method on exported class `L2PSMempool` in `src/libs/blockchain/l2ps_mempool.ts`.","TypeScript signature: (l2psUid: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/l2ps_mempool.ts","line_range":[322,334],"symbol_name":"L2PSMempool.getLastTransaction","language":"typescript","module_resolution_path":"@/libs/blockchain/l2ps_mempool"},"relationships":{"depends_on":["sym-a16b3eeaac4eb18401aa51da"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-214822ec9f3accdab1355b01","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSMempool.getHashForL2PS method on exported class `L2PSMempool` in `src/libs/blockchain/l2ps_mempool.ts`.","TypeScript signature: (l2psUid: string, blockNumber: number) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/l2ps_mempool.ts","line_range":[356,404],"symbol_name":"L2PSMempool.getHashForL2PS","language":"typescript","module_resolution_path":"@/libs/blockchain/l2ps_mempool"},"relationships":{"depends_on":["sym-a16b3eeaac4eb18401aa51da"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-c8fe10042fae0cfa98b678d7","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSMempool.getConsolidatedHash method on exported class `L2PSMempool` in `src/libs/blockchain/l2ps_mempool.ts`.","TypeScript signature: (l2psUid: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/l2ps_mempool.ts","line_range":[410,412],"symbol_name":"L2PSMempool.getConsolidatedHash","language":"typescript","module_resolution_path":"@/libs/blockchain/l2ps_mempool"},"relationships":{"depends_on":["sym-a16b3eeaac4eb18401aa51da"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-a6206915db8c9da96c5a41bc","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSMempool.updateStatus method on exported class `L2PSMempool` in `src/libs/blockchain/l2ps_mempool.ts`.","TypeScript signature: (hash: string, status: L2PSStatus) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/l2ps_mempool.ts","line_range":[421,440],"symbol_name":"L2PSMempool.updateStatus","language":"typescript","module_resolution_path":"@/libs/blockchain/l2ps_mempool"},"relationships":{"depends_on":["sym-a16b3eeaac4eb18401aa51da"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-c4dca8104a7e770f5b14889a","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSMempool.updateGCREdits method on exported class `L2PSMempool` in `src/libs/blockchain/l2ps_mempool.ts`.","TypeScript signature: (hash: string, gcrEdits: GCREdit[], affectedAccountsCount: number) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/l2ps_mempool.ts","line_range":[451,479],"symbol_name":"L2PSMempool.updateGCREdits","language":"typescript","module_resolution_path":"@/libs/blockchain/l2ps_mempool"},"relationships":{"depends_on":["sym-a16b3eeaac4eb18401aa51da"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-d24a5f5062450cc9e53222c7","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSMempool.updateStatusBatch method on exported class `L2PSMempool` in `src/libs/blockchain/l2ps_mempool.ts`.","TypeScript signature: (hashes: string[], status: L2PSStatus) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/l2ps_mempool.ts","line_range":[497,520],"symbol_name":"L2PSMempool.updateStatusBatch","language":"typescript","module_resolution_path":"@/libs/blockchain/l2ps_mempool"},"relationships":{"depends_on":["sym-a16b3eeaac4eb18401aa51da"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-7e44ecf471155de43ccdb015","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSMempool.getByStatus method on exported class `L2PSMempool` in `src/libs/blockchain/l2ps_mempool.ts`.","TypeScript signature: (status: L2PSStatus, limit: number) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/l2ps_mempool.ts","line_range":[535,556],"symbol_name":"L2PSMempool.getByStatus","language":"typescript","module_resolution_path":"@/libs/blockchain/l2ps_mempool"},"relationships":{"depends_on":["sym-a16b3eeaac4eb18401aa51da"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-a992f1d60a32575155de14ac","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSMempool.getByUIDAndStatus method on exported class `L2PSMempool` in `src/libs/blockchain/l2ps_mempool.ts`.","TypeScript signature: (l2psUid: string, status: L2PSStatus, limit: number) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/l2ps_mempool.ts","line_range":[566,591],"symbol_name":"L2PSMempool.getByUIDAndStatus","language":"typescript","module_resolution_path":"@/libs/blockchain/l2ps_mempool"},"relationships":{"depends_on":["sym-a16b3eeaac4eb18401aa51da"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-0efb93278b37aa89e05f1dc5","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSMempool.deleteByHashes method on exported class `L2PSMempool` in `src/libs/blockchain/l2ps_mempool.ts`.","TypeScript signature: (hashes: string[]) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/l2ps_mempool.ts","line_range":[599,619],"symbol_name":"L2PSMempool.deleteByHashes","language":"typescript","module_resolution_path":"@/libs/blockchain/l2ps_mempool"},"relationships":{"depends_on":["sym-a16b3eeaac4eb18401aa51da"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-3a4f17c210e5304b6f3f01be","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSMempool.cleanupByStatus method on exported class `L2PSMempool` in `src/libs/blockchain/l2ps_mempool.ts`.","TypeScript signature: (status: L2PSStatus, olderThanMs: number) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/l2ps_mempool.ts","line_range":[628,652],"symbol_name":"L2PSMempool.cleanupByStatus","language":"typescript","module_resolution_path":"@/libs/blockchain/l2ps_mempool"},"relationships":{"depends_on":["sym-a16b3eeaac4eb18401aa51da"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-eb28186a18ca7a82b4739ee5","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSMempool.existsByOriginalHash method on exported class `L2PSMempool` in `src/libs/blockchain/l2ps_mempool.ts`.","TypeScript signature: (originalHash: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/l2ps_mempool.ts","line_range":[661,670],"symbol_name":"L2PSMempool.existsByOriginalHash","language":"typescript","module_resolution_path":"@/libs/blockchain/l2ps_mempool"},"relationships":{"depends_on":["sym-a16b3eeaac4eb18401aa51da"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-fd9b1cfd830532f47e6eb66b","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSMempool.existsByHash method on exported class `L2PSMempool` in `src/libs/blockchain/l2ps_mempool.ts`.","TypeScript signature: (hash: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/l2ps_mempool.ts","line_range":[678,687],"symbol_name":"L2PSMempool.existsByHash","language":"typescript","module_resolution_path":"@/libs/blockchain/l2ps_mempool"},"relationships":{"depends_on":["sym-a16b3eeaac4eb18401aa51da"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-a0dfc671381543a24d283735","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSMempool.getByHash method on exported class `L2PSMempool` in `src/libs/blockchain/l2ps_mempool.ts`.","TypeScript signature: (hash: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/l2ps_mempool.ts","line_range":[695,704],"symbol_name":"L2PSMempool.getByHash","language":"typescript","module_resolution_path":"@/libs/blockchain/l2ps_mempool"},"relationships":{"depends_on":["sym-a16b3eeaac4eb18401aa51da"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-856b604c8ffcc654e328cd6e","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSMempool.cleanup method on exported class `L2PSMempool` in `src/libs/blockchain/l2ps_mempool.ts`.","TypeScript signature: (olderThanMs: number) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/l2ps_mempool.ts","line_range":[719,743],"symbol_name":"L2PSMempool.cleanup","language":"typescript","module_resolution_path":"@/libs/blockchain/l2ps_mempool"},"relationships":{"depends_on":["sym-a16b3eeaac4eb18401aa51da"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-c8933ccebe7118591c8afcc1","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSMempool.getStats method on exported class `L2PSMempool` in `src/libs/blockchain/l2ps_mempool.ts`.","TypeScript signature: () => Promise<{\n totalTransactions: number;\n transactionsByUID: Record;\n transactionsByStatus: Record;\n }>."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/l2ps_mempool.ts","line_range":[758,808],"symbol_name":"L2PSMempool.getStats","language":"typescript","module_resolution_path":"@/libs/blockchain/l2ps_mempool"},"relationships":{"depends_on":["sym-a16b3eeaac4eb18401aa51da"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-a16b3eeaac4eb18401aa51da","level":"L2","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSMempool (class) exported from `src/libs/blockchain/l2ps_mempool.ts`.","L2PS Mempool Manager"],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/l2ps_mempool.ts","line_range":[48,809],"symbol_name":"L2PSMempool","language":"typescript","module_resolution_path":"@/libs/blockchain/l2ps_mempool"},"relationships":{"depends_on":["mod-c8450797917dfb54fe43ca86"],"depended_by":["sym-ff641b5d8ca6f513a4d3b737","sym-b7922ddeb799711e40b0fb1d","sym-b1e9c1eea121146321e34dcb","sym-9ca99ef032d7812c7bce60d9","sym-9503de3abf0ca0864a61689e","sym-214822ec9f3accdab1355b01","sym-c8fe10042fae0cfa98b678d7","sym-a6206915db8c9da96c5a41bc","sym-c4dca8104a7e770f5b14889a","sym-d24a5f5062450cc9e53222c7","sym-7e44ecf471155de43ccdb015","sym-a992f1d60a32575155de14ac","sym-0efb93278b37aa89e05f1dc5","sym-3a4f17c210e5304b6f3f01be","sym-eb28186a18ca7a82b4739ee5","sym-fd9b1cfd830532f47e6eb66b","sym-a0dfc671381543a24d283735","sym-856b604c8ffcc654e328cd6e","sym-c8933ccebe7118591c8afcc1"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 33-47","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-bb965537d23959dfc7d6d13b","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `Mempool` in `src/libs/blockchain/mempool_v2.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/mempool_v2.ts","line_range":[19,256],"symbol_name":"Mempool::api","language":"typescript","module_resolution_path":"@/libs/blockchain/mempool_v2"},"relationships":{"depends_on":["sym-2b93335a7e40dc75286de672"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-954857d9de43b16abb5dbaf4","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Mempool.init method on exported class `Mempool` in `src/libs/blockchain/mempool_v2.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/mempool_v2.ts","line_range":[21,24],"symbol_name":"Mempool.init","language":"typescript","module_resolution_path":"@/libs/blockchain/mempool_v2"},"relationships":{"depends_on":["sym-2b93335a7e40dc75286de672"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-078110cfc9aa1e4ba9ed2e56","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Mempool.getMempool method on exported class `Mempool` in `src/libs/blockchain/mempool_v2.ts`.","TypeScript signature: (blockNumber: number) => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/mempool_v2.ts","line_range":[32,50],"symbol_name":"Mempool.getMempool","language":"typescript","module_resolution_path":"@/libs/blockchain/mempool_v2"},"relationships":{"depends_on":["sym-2b93335a7e40dc75286de672"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-f790c0e252480bc29cb40414","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Mempool.getMempoolHashMap method on exported class `Mempool` in `src/libs/blockchain/mempool_v2.ts`.","TypeScript signature: (blockNumber: number) => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/mempool_v2.ts","line_range":[55,65],"symbol_name":"Mempool.getMempoolHashMap","language":"typescript","module_resolution_path":"@/libs/blockchain/mempool_v2"},"relationships":{"depends_on":["sym-2b93335a7e40dc75286de672"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-2319ce1d3ed21356066c5192","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Mempool.getTransactionsByHashes method on exported class `Mempool` in `src/libs/blockchain/mempool_v2.ts`.","TypeScript signature: (hashes: string[]) => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/mempool_v2.ts","line_range":[67,69],"symbol_name":"Mempool.getTransactionsByHashes","language":"typescript","module_resolution_path":"@/libs/blockchain/mempool_v2"},"relationships":{"depends_on":["sym-2b93335a7e40dc75286de672"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-f099526ff753bd09914f1de8","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Mempool.checkTransactionByHash method on exported class `Mempool` in `src/libs/blockchain/mempool_v2.ts`.","TypeScript signature: (hash: string) => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/mempool_v2.ts","line_range":[71,73],"symbol_name":"Mempool.checkTransactionByHash","language":"typescript","module_resolution_path":"@/libs/blockchain/mempool_v2"},"relationships":{"depends_on":["sym-2b93335a7e40dc75286de672"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-7f5da43a0d477c46a19e3abd","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Mempool.addTransaction method on exported class `Mempool` in `src/libs/blockchain/mempool_v2.ts`.","TypeScript signature: (transaction: Transaction & { reference_block: number }, blockRef: number) => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/mempool_v2.ts","line_range":[75,132],"symbol_name":"Mempool.addTransaction","language":"typescript","module_resolution_path":"@/libs/blockchain/mempool_v2"},"relationships":{"depends_on":["sym-2b93335a7e40dc75286de672"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-c0c210d0df565b16c8d0d80c","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Mempool.removeTransactionsByHashes method on exported class `Mempool` in `src/libs/blockchain/mempool_v2.ts`.","TypeScript signature: (hashes: string[], transactionalEntityManager: EntityManager) => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/mempool_v2.ts","line_range":[134,144],"symbol_name":"Mempool.removeTransactionsByHashes","language":"typescript","module_resolution_path":"@/libs/blockchain/mempool_v2"},"relationships":{"depends_on":["sym-2b93335a7e40dc75286de672"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-c018307d8cc1e259cefb154e","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Mempool.receive method on exported class `Mempool` in `src/libs/blockchain/mempool_v2.ts`.","TypeScript signature: (incoming: Transaction[]) => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/mempool_v2.ts","line_range":[146,215],"symbol_name":"Mempool.receive","language":"typescript","module_resolution_path":"@/libs/blockchain/mempool_v2"},"relationships":{"depends_on":["sym-2b93335a7e40dc75286de672"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-d7b517c2414088a4904aeb3a","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Mempool.getDifference method on exported class `Mempool` in `src/libs/blockchain/mempool_v2.ts`.","TypeScript signature: (txHashes: string[]) => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/mempool_v2.ts","line_range":[223,227],"symbol_name":"Mempool.getDifference","language":"typescript","module_resolution_path":"@/libs/blockchain/mempool_v2"},"relationships":{"depends_on":["sym-2b93335a7e40dc75286de672"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-e3c670f7e35fe6bf834577f9","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Mempool.removeTransaction method on exported class `Mempool` in `src/libs/blockchain/mempool_v2.ts`.","TypeScript signature: (txHash: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/mempool_v2.ts","line_range":[235,255],"symbol_name":"Mempool.removeTransaction","language":"typescript","module_resolution_path":"@/libs/blockchain/mempool_v2"},"relationships":{"depends_on":["sym-2b93335a7e40dc75286de672"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-2b93335a7e40dc75286de672","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Mempool (class) exported from `src/libs/blockchain/mempool_v2.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/mempool_v2.ts","line_range":[19,256],"symbol_name":"Mempool","language":"typescript","module_resolution_path":"@/libs/blockchain/mempool_v2"},"relationships":{"depends_on":["mod-8aef488fb2fc78414791967a"],"depended_by":["sym-bb965537d23959dfc7d6d13b","sym-954857d9de43b16abb5dbaf4","sym-078110cfc9aa1e4ba9ed2e56","sym-f790c0e252480bc29cb40414","sym-2319ce1d3ed21356066c5192","sym-f099526ff753bd09914f1de8","sym-7f5da43a0d477c46a19e3abd","sym-c0c210d0df565b16c8d0d80c","sym-c018307d8cc1e259cefb154e","sym-d7b517c2414088a4904aeb3a","sym-e3c670f7e35fe6bf834577f9"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-3b8254889d32edf4470206ea","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["syncBlock (function) exported from `src/libs/blockchain/routines/Sync.ts`.","TypeScript signature: (block: Block, peer: Peer) => unknown.","Given a block and a peer, saves the block into the database, downloads the transactions"],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/routines/Sync.ts","line_range":[288,326],"symbol_name":"syncBlock","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/Sync"},"relationships":{"depends_on":["mod-9e6a68c87b4e5c31d84a70f2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-bc830ddff78494264067c796"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 280-287","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-6a24a4d06666621c7d17bc44","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["askTxsForBlocksBatch (function) exported from `src/libs/blockchain/routines/Sync.ts`.","TypeScript signature: (blocks: Block[], peer: Peer) => Promise>."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/routines/Sync.ts","line_range":[386,432],"symbol_name":"askTxsForBlocksBatch","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/Sync"},"relationships":{"depends_on":["mod-9e6a68c87b4e5c31d84a70f2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-2c09ca6eda3f95ab06c68035","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["syncGCRTables (function) exported from `src/libs/blockchain/routines/Sync.ts`.","TypeScript signature: (txs: Transaction[]) => Promise<[string, boolean]>."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/routines/Sync.ts","line_range":[719,742],"symbol_name":"syncGCRTables","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/Sync"},"relationships":{"depends_on":["mod-9e6a68c87b4e5c31d84a70f2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-c246a28d0970ec7dbe8f3a09","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["askTxsForBlock (function) exported from `src/libs/blockchain/routines/Sync.ts`.","TypeScript signature: (block: Block, peer: Peer) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/routines/Sync.ts","line_range":[745,799],"symbol_name":"askTxsForBlock","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/Sync"},"relationships":{"depends_on":["mod-9e6a68c87b4e5c31d84a70f2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-54918e7606a7cc1733327a2c","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["mergePeerlist (function) exported from `src/libs/blockchain/routines/Sync.ts`.","TypeScript signature: (block: Block) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/routines/Sync.ts","line_range":[802,840],"symbol_name":"mergePeerlist","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/Sync"},"relationships":{"depends_on":["mod-9e6a68c87b4e5c31d84a70f2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-000374b63ff352aab2d82df4","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["fastSync (function) exported from `src/libs/blockchain/routines/Sync.ts`.","TypeScript signature: (peers: Peer[], from: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/routines/Sync.ts","line_range":[883,911],"symbol_name":"fastSync","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/Sync"},"relationships":{"depends_on":["mod-9e6a68c87b4e5c31d84a70f2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-1ef8169e505fee687e3ba380","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `BeforeFindGenesisHooks` in `src/libs/blockchain/routines/beforeFindGenesisHooks.ts`.","This class contains various hooks used for maintenance"],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/routines/beforeFindGenesisHooks.ts","line_range":[15,379],"symbol_name":"BeforeFindGenesisHooks::api","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/beforeFindGenesisHooks"},"relationships":{"depends_on":["sym-04aa1e473c32e444df8b274d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 12-14","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-c0903a5a6dd9e6b8196aa9a4","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BeforeFindGenesisHooks.awardDemosFollowPoints method on exported class `BeforeFindGenesisHooks` in `src/libs/blockchain/routines/beforeFindGenesisHooks.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/routines/beforeFindGenesisHooks.ts","line_range":[20,71],"symbol_name":"BeforeFindGenesisHooks.awardDemosFollowPoints","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/beforeFindGenesisHooks"},"relationships":{"depends_on":["sym-04aa1e473c32e444df8b274d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-05f009619889c37708311d81","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BeforeFindGenesisHooks.awardDemosFollowPointsToSingleAccount method on exported class `BeforeFindGenesisHooks` in `src/libs/blockchain/routines/beforeFindGenesisHooks.ts`.","TypeScript signature: (account: GCRMain, gcrMainRepository: any, seenAccounts: Set) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/routines/beforeFindGenesisHooks.ts","line_range":[76,145],"symbol_name":"BeforeFindGenesisHooks.awardDemosFollowPointsToSingleAccount","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/beforeFindGenesisHooks"},"relationships":{"depends_on":["sym-04aa1e473c32e444df8b274d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-a5aede25adb18f1972bc6c14","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BeforeFindGenesisHooks.reviewSingleAccount method on exported class `BeforeFindGenesisHooks` in `src/libs/blockchain/routines/beforeFindGenesisHooks.ts`.","TypeScript signature: (account: GCRMain, gcrMainRepository: any) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/routines/beforeFindGenesisHooks.ts","line_range":[150,264],"symbol_name":"BeforeFindGenesisHooks.reviewSingleAccount","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/beforeFindGenesisHooks"},"relationships":{"depends_on":["sym-04aa1e473c32e444df8b274d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-d13e4e1829f9414ddb93be5a","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BeforeFindGenesisHooks.reviewAccounts method on exported class `BeforeFindGenesisHooks` in `src/libs/blockchain/routines/beforeFindGenesisHooks.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/routines/beforeFindGenesisHooks.ts","line_range":[269,305],"symbol_name":"BeforeFindGenesisHooks.reviewAccounts","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/beforeFindGenesisHooks"},"relationships":{"depends_on":["sym-04aa1e473c32e444df8b274d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-58e1cdee015b7eeec5aaadbe","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BeforeFindGenesisHooks.removeInvalidAccounts method on exported class `BeforeFindGenesisHooks` in `src/libs/blockchain/routines/beforeFindGenesisHooks.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/routines/beforeFindGenesisHooks.ts","line_range":[307,378],"symbol_name":"BeforeFindGenesisHooks.removeInvalidAccounts","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/beforeFindGenesisHooks"},"relationships":{"depends_on":["sym-04aa1e473c32e444df8b274d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-04aa1e473c32e444df8b274d","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BeforeFindGenesisHooks (class) exported from `src/libs/blockchain/routines/beforeFindGenesisHooks.ts`.","This class contains various hooks used for maintenance"],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/routines/beforeFindGenesisHooks.ts","line_range":[15,379],"symbol_name":"BeforeFindGenesisHooks","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/beforeFindGenesisHooks"},"relationships":{"depends_on":["mod-df9148ab5ce0a5a5115bead1"],"depended_by":["sym-1ef8169e505fee687e3ba380","sym-c0903a5a6dd9e6b8196aa9a4","sym-05f009619889c37708311d81","sym-a5aede25adb18f1972bc6c14","sym-d13e4e1829f9414ddb93be5a","sym-58e1cdee015b7eeec5aaadbe"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["fs","typeorm","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 12-14","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-d0b2b2174c96ce5833cd9592","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["calculateCurrentGas (function) exported from `src/libs/blockchain/routines/calculateCurrentGas.ts`.","TypeScript signature: (payload: any) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/routines/calculateCurrentGas.ts","line_range":[52,59],"symbol_name":"calculateCurrentGas","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/calculateCurrentGas"},"relationships":{"depends_on":["mod-457939e5e7481c4a6a17e7a3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-62051722bb59e097df10746e"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.951Z","authors":[]}} +{"uuid":"sym-b989cdce3dc1128fb557122f","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["executeNativeTransaction (function) exported from `src/libs/blockchain/routines/executeNativeTransaction.ts`.","TypeScript signature: (transaction: Transaction) => Promise<[boolean, string, Operation[]?]>."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/routines/executeNativeTransaction.ts","line_range":[34,96],"symbol_name":"executeNativeTransaction","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/executeNativeTransaction"},"relationships":{"depends_on":["mod-7fbfbfcf1e85d7ef732d27ea"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-4128cc9e2fa3688777c26247"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-46722d97026838058df81e45","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `Actor` in `src/libs/blockchain/routines/executeOperations.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/routines/executeOperations.ts","line_range":[43,45],"symbol_name":"Actor::api","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/executeOperations"},"relationships":{"depends_on":["sym-0c7b5305038aa0a21c205aa4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.951Z","authors":[]}} +{"uuid":"sym-0c7b5305038aa0a21c205aa4","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Actor (interface) exported from `src/libs/blockchain/routines/executeOperations.ts`."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/routines/executeOperations.ts","line_range":[43,45],"symbol_name":"Actor","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/executeOperations"},"relationships":{"depends_on":["mod-996772d8748b5664e367c6c6"],"depended_by":["sym-46722d97026838058df81e45"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.951Z","authors":[]}} +{"uuid":"sym-812eb740fd13dd1b77c10a32","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["executeOperations (function) exported from `src/libs/blockchain/routines/executeOperations.ts`.","TypeScript signature: (operations: Operation[], block: Block) => Promise>."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/routines/executeOperations.ts","line_range":[48,73],"symbol_name":"executeOperations","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/executeOperations"},"relationships":{"depends_on":["mod-996772d8748b5664e367c6c6"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.951Z","authors":[]}} +{"uuid":"sym-26b6a576d6b118ccfe6cf8ec","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["findGenesisBlock (function) exported from `src/libs/blockchain/routines/findGenesisBlock.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/routines/findGenesisBlock.ts","line_range":[39,86],"symbol_name":"findGenesisBlock","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/findGenesisBlock"},"relationships":{"depends_on":["mod-52aa016deaac90f2f1067844"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","env:RESTORE"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.951Z","authors":[]}} +{"uuid":"sym-847bb4ee8faf0a5fc4c39e92","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["loadGenesisIdentities (function) exported from `src/libs/blockchain/routines/loadGenesisIdentities.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/routines/loadGenesisIdentities.ts","line_range":[7,19],"symbol_name":"loadGenesisIdentities","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/loadGenesisIdentities"},"relationships":{"depends_on":["mod-f87e42bd9aa4eebfae23dbd1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.951Z","authors":[]}} +{"uuid":"sym-1891e05e8289e29a05504569","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `SubOperations` in `src/libs/blockchain/routines/subOperations.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/routines/subOperations.ts","line_range":[16,173],"symbol_name":"SubOperations::api","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/subOperations"},"relationships":{"depends_on":["sym-349de95fe57411b99b41c921"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-f9cb4b9053f2905d6ab0609b","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SubOperations.genesis method on exported class `SubOperations` in `src/libs/blockchain/routines/subOperations.ts`.","TypeScript signature: (operation: Operation, genesisBlock: Block) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/routines/subOperations.ts","line_range":[26,76],"symbol_name":"SubOperations.genesis","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/subOperations"},"relationships":{"depends_on":["sym-349de95fe57411b99b41c921"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-51e8384bb9ab40ce0e10f672","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SubOperations.transferNative method on exported class `SubOperations` in `src/libs/blockchain/routines/subOperations.ts`.","TypeScript signature: (operation: Operation) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/routines/subOperations.ts","line_range":[79,119],"symbol_name":"SubOperations.transferNative","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/subOperations"},"relationships":{"depends_on":["sym-349de95fe57411b99b41c921"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-3af7a4ef926ee336982d7cd9","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SubOperations.addNative method on exported class `SubOperations` in `src/libs/blockchain/routines/subOperations.ts`.","TypeScript signature: (operation: Operation) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/routines/subOperations.ts","line_range":[122,138],"symbol_name":"SubOperations.addNative","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/subOperations"},"relationships":{"depends_on":["sym-349de95fe57411b99b41c921"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-e20f8a059946a439843cfada","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SubOperations.removeNative method on exported class `SubOperations` in `src/libs/blockchain/routines/subOperations.ts`.","TypeScript signature: (operation: Operation) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/routines/subOperations.ts","line_range":[141,162],"symbol_name":"SubOperations.removeNative","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/subOperations"},"relationships":{"depends_on":["sym-349de95fe57411b99b41c921"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-77b8585e6d04e0016f59f728","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SubOperations.addAsset method on exported class `SubOperations` in `src/libs/blockchain/routines/subOperations.ts`.","TypeScript signature: (operation: Operation) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/routines/subOperations.ts","line_range":[164,167],"symbol_name":"SubOperations.addAsset","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/subOperations"},"relationships":{"depends_on":["sym-349de95fe57411b99b41c921"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-eb639a43a4aecf119bf79cb0","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SubOperations.removeAsset method on exported class `SubOperations` in `src/libs/blockchain/routines/subOperations.ts`.","TypeScript signature: (operation: Operation) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/routines/subOperations.ts","line_range":[169,172],"symbol_name":"SubOperations.removeAsset","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/subOperations"},"relationships":{"depends_on":["sym-349de95fe57411b99b41c921"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-349de95fe57411b99b41c921","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SubOperations (class) exported from `src/libs/blockchain/routines/subOperations.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/routines/subOperations.ts","line_range":[16,173],"symbol_name":"SubOperations","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/subOperations"},"relationships":{"depends_on":["mod-5758817d6b816e39b8e7e4b3"],"depended_by":["sym-1891e05e8289e29a05504569","sym-f9cb4b9053f2905d6ab0609b","sym-51e8384bb9ab40ce0e10f672","sym-3af7a4ef926ee336982d7cd9","sym-e20f8a059946a439843cfada","sym-77b8585e6d04e0016f59f728","sym-eb639a43a4aecf119bf79cb0"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-a1714406759fda051e877a2e","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["confirmTransaction (function) exported from `src/libs/blockchain/routines/validateTransaction.ts`.","TypeScript signature: (tx: Transaction, sender: string) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/routines/validateTransaction.ts","line_range":[29,106],"symbol_name":"confirmTransaction","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/validateTransaction"},"relationships":{"depends_on":["mod-20f30418ca95fd46594075af"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-7fe7aed70ba7c171a10dce16"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node-forge","@kynesyslabs/demosdk/types","lodash","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-95a959d434bd68d26c7ba5e6","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["assignNonce (function) exported from `src/libs/blockchain/routines/validateTransaction.ts`.","TypeScript signature: (tx: Transaction) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/routines/validateTransaction.ts","line_range":[232,237],"symbol_name":"assignNonce","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/validateTransaction"},"relationships":{"depends_on":["mod-20f30418ca95fd46594075af"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node-forge","@kynesyslabs/demosdk/types","lodash","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-4128cc9e2fa3688777c26247","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["broadcastVerifiedNativeTransaction (function) exported from `src/libs/blockchain/routines/validateTransaction.ts`.","TypeScript signature: (validityData: ValidityData) => Promise<[boolean, string, Operation[]?]>."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/routines/validateTransaction.ts","line_range":[240,271],"symbol_name":"broadcastVerifiedNativeTransaction","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/validateTransaction"},"relationships":{"depends_on":["mod-20f30418ca95fd46594075af"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-b989cdce3dc1128fb557122f"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node-forge","@kynesyslabs/demosdk/types","lodash","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-a9cd5796f950012d75eae69d","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `ValidatorsManagement` in `src/libs/blockchain/routines/validatorsManagement.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/routines/validatorsManagement.ts","line_range":[10,42],"symbol_name":"ValidatorsManagement::api","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/validatorsManagement"},"relationships":{"depends_on":["sym-093389e29bebd11b68e47fb3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.951Z","authors":[]}} +{"uuid":"sym-48770c393e18cf8b765fc100","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ValidatorsManagement.manageValidatorEntranceTx method on exported class `ValidatorsManagement` in `src/libs/blockchain/routines/validatorsManagement.ts`.","TypeScript signature: (tx: Transaction) => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/routines/validatorsManagement.ts","line_range":[13,24],"symbol_name":"ValidatorsManagement.manageValidatorEntranceTx","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/validatorsManagement"},"relationships":{"depends_on":["sym-093389e29bebd11b68e47fb3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node-forge"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.951Z","authors":[]}} +{"uuid":"sym-2b28a6196b9e548ce3950f99","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ValidatorsManagement.manageValidatorOnlineStatus method on exported class `ValidatorsManagement` in `src/libs/blockchain/routines/validatorsManagement.ts`.","TypeScript signature: (publicKey: forge.pki.ed25519.BinaryBuffer) => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/routines/validatorsManagement.ts","line_range":[27,34],"symbol_name":"ValidatorsManagement.manageValidatorOnlineStatus","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/validatorsManagement"},"relationships":{"depends_on":["sym-093389e29bebd11b68e47fb3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node-forge"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.951Z","authors":[]}} +{"uuid":"sym-4e2725aab0d0a1de18f1eac1","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ValidatorsManagement.isValidatorActive method on exported class `ValidatorsManagement` in `src/libs/blockchain/routines/validatorsManagement.ts`.","TypeScript signature: (publicKey: forge.pki.ed25519.BinaryBuffer) => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/routines/validatorsManagement.ts","line_range":[36,41],"symbol_name":"ValidatorsManagement.isValidatorActive","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/validatorsManagement"},"relationships":{"depends_on":["sym-093389e29bebd11b68e47fb3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node-forge"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.951Z","authors":[]}} +{"uuid":"sym-093389e29bebd11b68e47fb3","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ValidatorsManagement (class) exported from `src/libs/blockchain/routines/validatorsManagement.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/routines/validatorsManagement.ts","line_range":[10,42],"symbol_name":"ValidatorsManagement","language":"typescript","module_resolution_path":"@/libs/blockchain/routines/validatorsManagement"},"relationships":{"depends_on":["mod-2f8fcf8b410da0c1f6892901"],"depended_by":["sym-a9cd5796f950012d75eae69d","sym-48770c393e18cf8b765fc100","sym-2b28a6196b9e548ce3950f99","sym-4e2725aab0d0a1de18f1eac1"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.951Z","authors":[]}} +{"uuid":"sym-6fdb260c63552dd4e0a7cecf","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `Transaction` in `src/libs/blockchain/transaction.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/transaction.ts","line_range":[45,510],"symbol_name":"Transaction::api","language":"typescript","module_resolution_path":"@/libs/blockchain/transaction"},"relationships":{"depends_on":["sym-feb77422b7084f0c4d2e3c5e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-4e9414a938ee627a77f20b4d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Transaction.sign method on exported class `Transaction` in `src/libs/blockchain/transaction.ts`.","TypeScript signature: (tx: Transaction) => Promise<[boolean, any]>."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/transaction.ts","line_range":[84,104],"symbol_name":"Transaction.sign","language":"typescript","module_resolution_path":"@/libs/blockchain/transaction"},"relationships":{"depends_on":["sym-feb77422b7084f0c4d2e3c5e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-cdee53ddf59cf3090aa22853","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Transaction.hash method on exported class `Transaction` in `src/libs/blockchain/transaction.ts`.","TypeScript signature: (tx: Transaction) => any."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/transaction.ts","line_range":[107,115],"symbol_name":"Transaction.hash","language":"typescript","module_resolution_path":"@/libs/blockchain/transaction"},"relationships":{"depends_on":["sym-feb77422b7084f0c4d2e3c5e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-972af425d3e9bcdfc778ff00","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Transaction.confirmTx method on exported class `Transaction` in `src/libs/blockchain/transaction.ts`.","TypeScript signature: (tx: Transaction, sender: string) => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/transaction.ts","line_range":[118,168],"symbol_name":"Transaction.confirmTx","language":"typescript","module_resolution_path":"@/libs/blockchain/transaction"},"relationships":{"depends_on":["sym-feb77422b7084f0c4d2e3c5e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-2cd44b8eac8f99115ec71079","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Transaction.validateSignature method on exported class `Transaction` in `src/libs/blockchain/transaction.ts`.","TypeScript signature: (tx: Transaction, sender: string) => Promise<{ success: boolean; message: string }>."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/transaction.ts","line_range":[171,262],"symbol_name":"Transaction.validateSignature","language":"typescript","module_resolution_path":"@/libs/blockchain/transaction"},"relationships":{"depends_on":["sym-feb77422b7084f0c4d2e3c5e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-e409f5ac53d90fb28708d5f5","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Transaction.isCoherent method on exported class `Transaction` in `src/libs/blockchain/transaction.ts`.","TypeScript signature: (tx: Transaction) => unknown."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/transaction.ts","line_range":[265,271],"symbol_name":"Transaction.isCoherent","language":"typescript","module_resolution_path":"@/libs/blockchain/transaction"},"relationships":{"depends_on":["sym-feb77422b7084f0c4d2e3c5e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-ca3b7bc9b989c0d74884a2c5","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Transaction.structured method on exported class `Transaction` in `src/libs/blockchain/transaction.ts`.","TypeScript signature: (tx: Transaction) => {\n valid: boolean\n message: string\n }."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/transaction.ts","line_range":[404,429],"symbol_name":"Transaction.structured","language":"typescript","module_resolution_path":"@/libs/blockchain/transaction"},"relationships":{"depends_on":["sym-feb77422b7084f0c4d2e3c5e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-aa005302b41d0195a5db344b","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Transaction.toRawTransaction method on exported class `Transaction` in `src/libs/blockchain/transaction.ts`.","TypeScript signature: (tx: Transaction, status: unknown) => RawTransaction."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/transaction.ts","line_range":[431,468],"symbol_name":"Transaction.toRawTransaction","language":"typescript","module_resolution_path":"@/libs/blockchain/transaction"},"relationships":{"depends_on":["sym-feb77422b7084f0c4d2e3c5e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-87340b6f42c579b19095fad3","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Transaction.fromRawTransaction method on exported class `Transaction` in `src/libs/blockchain/transaction.ts`.","TypeScript signature: (rawTx: RawTransaction) => Transaction."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/transaction.ts","line_range":[470,509],"symbol_name":"Transaction.fromRawTransaction","language":"typescript","module_resolution_path":"@/libs/blockchain/transaction"},"relationships":{"depends_on":["sym-feb77422b7084f0c4d2e3c5e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-feb77422b7084f0c4d2e3c5e","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Transaction (class) exported from `src/libs/blockchain/transaction.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/transaction.ts","line_range":[45,510],"symbol_name":"Transaction","language":"typescript","module_resolution_path":"@/libs/blockchain/transaction"},"relationships":{"depends_on":["mod-1de8a1fb6a48c6a931549f30"],"depended_by":["sym-6fdb260c63552dd4e0a7cecf","sym-4e9414a938ee627a77f20b4d","sym-cdee53ddf59cf3090aa22853","sym-972af425d3e9bcdfc778ff00","sym-2cd44b8eac8f99115ec71079","sym-e409f5ac53d90fb28708d5f5","sym-ca3b7bc9b989c0d74884a2c5","sym-aa005302b41d0195a5db344b","sym-87340b6f42c579b19095fad3"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-e4e428838d58a143a243cba6","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `Confirmation` in `src/libs/blockchain/types/confirmation.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/types/confirmation.ts","line_range":[14,31],"symbol_name":"Confirmation::api","language":"typescript","module_resolution_path":"@/libs/blockchain/types/confirmation"},"relationships":{"depends_on":["sym-0728b731cfd7b6fb01abfe3f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.951Z","authors":[]}} +{"uuid":"sym-0728b731cfd7b6fb01abfe3f","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Confirmation (class) exported from `src/libs/blockchain/types/confirmation.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/types/confirmation.ts","line_range":[14,31],"symbol_name":"Confirmation","language":"typescript","module_resolution_path":"@/libs/blockchain/types/confirmation"},"relationships":{"depends_on":["mod-3d5f49cf64c24935d34290c4"],"depended_by":["sym-e4e428838d58a143a243cba6"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.951Z","authors":[]}} +{"uuid":"sym-2f9e3c7322b2c5d917683f2e","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `Genesis` in `src/libs/blockchain/types/genesisTypes.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/types/genesisTypes.ts","line_range":[15,35],"symbol_name":"Genesis::api","language":"typescript","module_resolution_path":"@/libs/blockchain/types/genesisTypes"},"relationships":{"depends_on":["sym-8f8a5ab65ba4325bb48884e5"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.951Z","authors":[]}} +{"uuid":"sym-1e031fa7cd7911f05bf22195","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Genesis.getGenesisBlock method on exported class `Genesis` in `src/libs/blockchain/types/genesisTypes.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/types/genesisTypes.ts","line_range":[25,27],"symbol_name":"Genesis.getGenesisBlock","language":"typescript","module_resolution_path":"@/libs/blockchain/types/genesisTypes"},"relationships":{"depends_on":["sym-8f8a5ab65ba4325bb48884e5"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.951Z","authors":[]}} +{"uuid":"sym-1d0d5e7cf7a7292ad57f24e7","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Genesis.deriveGenesisStatus method on exported class `Genesis` in `src/libs/blockchain/types/genesisTypes.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["blockchain"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/blockchain/types/genesisTypes.ts","line_range":[32,34],"symbol_name":"Genesis.deriveGenesisStatus","language":"typescript","module_resolution_path":"@/libs/blockchain/types/genesisTypes"},"relationships":{"depends_on":["sym-8f8a5ab65ba4325bb48884e5"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.951Z","authors":[]}} +{"uuid":"sym-8f8a5ab65ba4325bb48884e5","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Genesis (class) exported from `src/libs/blockchain/types/genesisTypes.ts`."],"intent_vectors":["blockchain","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/blockchain/types/genesisTypes.ts","line_range":[15,35],"symbol_name":"Genesis","language":"typescript","module_resolution_path":"@/libs/blockchain/types/genesisTypes"},"relationships":{"depends_on":["mod-7f4649fc39674866ce6591cc"],"depended_by":["sym-2f9e3c7322b2c5d917683f2e","sym-1e031fa7cd7911f05bf22195","sym-1d0d5e7cf7a7292ad57f24e7"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.951Z","authors":[]}} +{"uuid":"sym-a64f1ca18e821cc20c7e5b5f","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `BroadcastManager` in `src/libs/communications/broadcastManager.ts`.","Manages the broadcasting of messages to the network"],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/communications/broadcastManager.ts","line_range":[13,211],"symbol_name":"BroadcastManager::api","language":"typescript","module_resolution_path":"@/libs/communications/broadcastManager"},"relationships":{"depends_on":["sym-bc830ddff78494264067c796"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 10-12","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-8903c8beb154afaae29ce04c","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BroadcastManager.broadcastNewBlock method on exported class `BroadcastManager` in `src/libs/communications/broadcastManager.ts`.","TypeScript signature: (block: Block) => unknown."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/communications/broadcastManager.ts","line_range":[19,61],"symbol_name":"BroadcastManager.broadcastNewBlock","language":"typescript","module_resolution_path":"@/libs/communications/broadcastManager"},"relationships":{"depends_on":["sym-bc830ddff78494264067c796"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-321f64e73c58c62ef0ee1efc","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BroadcastManager.handleNewBlock method on exported class `BroadcastManager` in `src/libs/communications/broadcastManager.ts`.","TypeScript signature: (sender: string, block: Block) => unknown."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/communications/broadcastManager.ts","line_range":[68,123],"symbol_name":"BroadcastManager.handleNewBlock","language":"typescript","module_resolution_path":"@/libs/communications/broadcastManager"},"relationships":{"depends_on":["sym-bc830ddff78494264067c796"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-4653da5df6ecfbce9a04f0ee","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BroadcastManager.broadcastOurSyncData method on exported class `BroadcastManager` in `src/libs/communications/broadcastManager.ts`.","TypeScript signature: () => unknown."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/communications/broadcastManager.ts","line_range":[128,170],"symbol_name":"BroadcastManager.broadcastOurSyncData","language":"typescript","module_resolution_path":"@/libs/communications/broadcastManager"},"relationships":{"depends_on":["sym-bc830ddff78494264067c796"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-24358b3224fd4341ab81efa6","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BroadcastManager.handleUpdatePeerSyncData method on exported class `BroadcastManager` in `src/libs/communications/broadcastManager.ts`.","TypeScript signature: (sender: string, syncData: string) => unknown."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/communications/broadcastManager.ts","line_range":[178,210],"symbol_name":"BroadcastManager.handleUpdatePeerSyncData","language":"typescript","module_resolution_path":"@/libs/communications/broadcastManager"},"relationships":{"depends_on":["sym-bc830ddff78494264067c796"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-bc830ddff78494264067c796","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BroadcastManager (class) exported from `src/libs/communications/broadcastManager.ts`.","Manages the broadcasting of messages to the network"],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/communications/broadcastManager.ts","line_range":[13,211],"symbol_name":"BroadcastManager","language":"typescript","module_resolution_path":"@/libs/communications/broadcastManager"},"relationships":{"depends_on":["mod-892576d596aa8b40bed3d2f9"],"depended_by":["sym-a64f1ca18e821cc20c7e5b5f","sym-8903c8beb154afaae29ce04c","sym-321f64e73c58c62ef0ee1efc","sym-4653da5df6ecfbce9a04f0ee","sym-24358b3224fd4341ab81efa6"],"implements":[],"extends":[],"calls":["sym-3b8254889d32edf4470206ea"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 10-12","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-fb3ceadeb84c52d53d5da1a5","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["transmit (re_export) exported from `src/libs/communications/index.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/communications/index.ts","line_range":[12,12],"symbol_name":"transmit","language":"typescript","module_resolution_path":"@/libs/communications/index"},"relationships":{"depends_on":["mod-6f74719a94e9135573217051"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.951Z","authors":[]}} +{"uuid":"sym-5c6b366e18862aea757080c5","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `Transmission` in `src/libs/communications/transmission.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/communications/transmission.ts","line_range":[22,76],"symbol_name":"Transmission::api","language":"typescript","module_resolution_path":"@/libs/communications/transmission"},"relationships":{"depends_on":["sym-48a3b6b4e214dbf05a884bdd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.951Z","authors":[]}} +{"uuid":"sym-4183c8c8ba4c87b3ac71efcf","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Transmission.initialize method on exported class `Transmission` in `src/libs/communications/transmission.ts`.","TypeScript signature: (type: unknown, message: unknown, senderPublic: unknown, receiver: unknown, data: unknown, extra: unknown) => unknown."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/communications/transmission.ts","line_range":[46,57],"symbol_name":"Transmission.initialize","language":"typescript","module_resolution_path":"@/libs/communications/transmission"},"relationships":{"depends_on":["sym-48a3b6b4e214dbf05a884bdd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.951Z","authors":[]}} +{"uuid":"sym-d902b89c70bfdaef1e7ec63c","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Transmission.finalize method on exported class `Transmission` in `src/libs/communications/transmission.ts`.","TypeScript signature: (privateKey: forge.pki.ed25519.BinaryBuffer) => unknown."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/communications/transmission.ts","line_range":[60,75],"symbol_name":"Transmission.finalize","language":"typescript","module_resolution_path":"@/libs/communications/transmission"},"relationships":{"depends_on":["sym-48a3b6b4e214dbf05a884bdd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node-forge","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.951Z","authors":[]}} +{"uuid":"sym-48a3b6b4e214dbf05a884bdd","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Transmission (class) exported from `src/libs/communications/transmission.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/communications/transmission.ts","line_range":[22,76],"symbol_name":"Transmission","language":"typescript","module_resolution_path":"@/libs/communications/transmission"},"relationships":{"depends_on":["mod-a5c28a9abc4da2bd27d3cbb4"],"depended_by":["sym-5c6b366e18862aea757080c5","sym-4183c8c8ba4c87b3ac71efcf","sym-d902b89c70bfdaef1e7ec63c"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.951Z","authors":[]}} +{"uuid":"sym-98c4295951482a3e982049bb","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["checkConsensusTime (function) exported from `src/libs/consensus/routines/consensusTime.ts`.","TypeScript signature: (flexible: unknown, flextime: unknown) => Promise."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/consensus/routines/consensusTime.ts","line_range":[9,69],"symbol_name":"checkConsensusTime","language":"typescript","module_resolution_path":"@/libs/consensus/routines/consensusTime"},"relationships":{"depends_on":["mod-a365b7714dec16f0bf79621e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-0d658d44d5b23dfd5829fc4f"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["terminal-kit"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-ab85b50fe1b89f2116b32b8e","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["consensusRoutine (function) exported from `src/libs/consensus/v2/PoRBFT.ts`.","TypeScript signature: () => Promise.","The main consensus routine calling all the subroutines."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/consensus/v2/PoRBFT.ts","line_range":[59,263],"symbol_name":"consensusRoutine","language":"typescript","module_resolution_path":"@/libs/consensus/v2/PoRBFT"},"relationships":{"depends_on":["mod-0fabbf7facc4e7b4b62c59ae"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-9ccc28bee226a93586ef7b1d","sym-0d658d44d5b23dfd5829fc4f"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 56-58","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-9ff2092936295dca05e0edb7","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["isConsensusAlreadyRunning (function) exported from `src/libs/consensus/v2/PoRBFT.ts`.","TypeScript signature: () => boolean.","Safeguard to prevent multiple consensus loops from running"],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/PoRBFT.ts","line_range":[272,278],"symbol_name":"isConsensusAlreadyRunning","language":"typescript","module_resolution_path":"@/libs/consensus/v2/PoRBFT"},"relationships":{"depends_on":["mod-0fabbf7facc4e7b4b62c59ae"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-0d658d44d5b23dfd5829fc4f"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 267-271","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-6f65f0a6507ebc9370500240","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ValidationData` in `src/libs/consensus/v2/interfaces.ts`."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/interfaces.ts","line_range":[2,4],"symbol_name":"ValidationData::api","language":"typescript","module_resolution_path":"@/libs/consensus/v2/interfaces"},"relationships":{"depends_on":["sym-ca05c53ed6f6f579ada9bc57"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-ca05c53ed6f6f579ada9bc57","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ValidationData (interface) exported from `src/libs/consensus/v2/interfaces.ts`."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/interfaces.ts","line_range":[2,4],"symbol_name":"ValidationData","language":"typescript","module_resolution_path":"@/libs/consensus/v2/interfaces"},"relationships":{"depends_on":["mod-5a3b55b43394de7f8c762546"],"depended_by":["sym-6f65f0a6507ebc9370500240"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-f18eee79205c6745588c2717","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ConsensusHashResponse` in `src/libs/consensus/v2/interfaces.ts`."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/interfaces.ts","line_range":[6,10],"symbol_name":"ConsensusHashResponse::api","language":"typescript","module_resolution_path":"@/libs/consensus/v2/interfaces"},"relationships":{"depends_on":["sym-49e2485b99dd47aa7a15a28f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-49e2485b99dd47aa7a15a28f","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ConsensusHashResponse (interface) exported from `src/libs/consensus/v2/interfaces.ts`."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/interfaces.ts","line_range":[6,10],"symbol_name":"ConsensusHashResponse","language":"typescript","module_resolution_path":"@/libs/consensus/v2/interfaces"},"relationships":{"depends_on":["mod-5a3b55b43394de7f8c762546"],"depended_by":["sym-f18eee79205c6745588c2717"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-337135b7799d55bf38a2d6a9","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["averageTimestamps (function) exported from `src/libs/consensus/v2/routines/averageTimestamp.ts`.","TypeScript signature: (shard: Peer[]) => unknown."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/consensus/v2/routines/averageTimestamp.ts","line_range":[5,30],"symbol_name":"averageTimestamps","language":"typescript","module_resolution_path":"@/libs/consensus/v2/routines/averageTimestamp"},"relationships":{"depends_on":["mod-eafbd86811c7222ae0334af1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"sym-c6ac07d6b729b12884d9b167","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["broadcastBlockHash (function) exported from `src/libs/consensus/v2/routines/broadcastBlockHash.ts`.","TypeScript signature: (block: Block, shard: Peer[]) => Promise<[number, number]>."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/consensus/v2/routines/broadcastBlockHash.ts","line_range":[9,129],"symbol_name":"broadcastBlockHash","language":"typescript","module_resolution_path":"@/libs/consensus/v2/routines/broadcastBlockHash"},"relationships":{"depends_on":["mod-a9472d145601bd72b2b81e65"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"sym-631364af116d4a86562c04f9","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["createBlock (function) exported from `src/libs/consensus/v2/routines/createBlock.ts`.","TypeScript signature: (orderedTransactions: Transaction[], commonValidatorSeed: string, previousBlockHash: string, blockNumber: number, peerlist: Peer[]) => Promise."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/consensus/v2/routines/createBlock.ts","line_range":[12,65],"symbol_name":"createBlock","language":"typescript","module_resolution_path":"@/libs/consensus/v2/routines/createBlock"},"relationships":{"depends_on":["mod-128ee1689e701accb1643b15"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"sym-1a7e0225b76935e084fa2329","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["hashNativeTables (function) exported from `src/libs/consensus/v2/routines/createBlock.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/consensus/v2/routines/createBlock.ts","line_range":[68,73],"symbol_name":"hashNativeTables","language":"typescript","module_resolution_path":"@/libs/consensus/v2/routines/createBlock"},"relationships":{"depends_on":["mod-128ee1689e701accb1643b15"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-a09e4498f797e281ad451c42"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"sym-9ccc28bee226a93586ef7b1d","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ensureCandidateBlockFormed (function) exported from `src/libs/consensus/v2/routines/ensureCandidateBlockFormed.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/consensus/v2/routines/ensureCandidateBlockFormed.ts","line_range":[6,33],"symbol_name":"ensureCandidateBlockFormed","language":"typescript","module_resolution_path":"@/libs/consensus/v2/routines/ensureCandidateBlockFormed"},"relationships":{"depends_on":["mod-b348b25ed5a5571412a85da0"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-ab85b50fe1b89f2116b32b8e"],"called_by":["sym-4a436dd527be338afbf98bdb"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"sym-6680f554fcb4ede4631e60b2","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getCommonValidatorSeed (function) exported from `src/libs/consensus/v2/routines/getCommonValidatorSeed.ts`.","TypeScript signature: (lastBlock: Blocks, logger: (message: string) => void) => Promise<{\n commonValidatorSeed: string\n lastBlockNumber: number\n}>."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/consensus/v2/routines/getCommonValidatorSeed.ts","line_range":[58,132],"symbol_name":"getCommonValidatorSeed","language":"typescript","module_resolution_path":"@/libs/consensus/v2/routines/getCommonValidatorSeed"},"relationships":{"depends_on":["mod-91454010a0aa78f3ef28bd69"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-45a76b1716a67708f11a0909","sym-4a436dd527be338afbf98bdb","sym-fb2870f850b894405cc6b6f4","sym-4b898ed7fd8e376c3dcc0fa4","sym-f1d990a68c25fa7a7816bc3f","sym-0d658d44d5b23dfd5829fc4f"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"sym-304eaa4f7c51cf3fdbf89bb0","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getShard (function) exported from `src/libs/consensus/v2/routines/getShard.ts`.","TypeScript signature: (seed: string) => Promise.","Retrieve the current list of online peers."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/consensus/v2/routines/getShard.ts","line_range":[14,65],"symbol_name":"getShard","language":"typescript","module_resolution_path":"@/libs/consensus/v2/routines/getShard"},"relationships":{"depends_on":["mod-1f38e75fd9b9f51f96a2d975"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-45a76b1716a67708f11a0909","sym-4a436dd527be338afbf98bdb","sym-fb2870f850b894405cc6b6f4","sym-4b898ed7fd8e376c3dcc0fa4","sym-f1d990a68c25fa7a7816bc3f","sym-0d658d44d5b23dfd5829fc4f"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["alea"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 8-13","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-45a76b1716a67708f11a0909","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["isValidatorForNextBlock (function) exported from `src/libs/consensus/v2/routines/isValidator.ts`.","TypeScript signature: () => Promise<{\n isValidator: boolean\n validators: Peer[]\n}>.","Determines whether the local node is included in the validator shard for the next block."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/consensus/v2/routines/isValidator.ts","line_range":[13,26],"symbol_name":"isValidatorForNextBlock","language":"typescript","module_resolution_path":"@/libs/consensus/v2/routines/isValidator"},"relationships":{"depends_on":["mod-77aac2da6c6f0fbc37663544"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-6680f554fcb4ede4631e60b2","sym-304eaa4f7c51cf3fdbf89bb0"],"called_by":["sym-f1d990a68c25fa7a7816bc3f","sym-7fe7aed70ba7c171a10dce16"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 6-12","related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-4a436dd527be338afbf98bdb","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["manageProposeBlockHash (function) exported from `src/libs/consensus/v2/routines/manageProposeBlockHash.ts`.","TypeScript signature: (blockHash: string, validationData: ValidationData, peerId: string) => Promise."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/consensus/v2/routines/manageProposeBlockHash.ts","line_range":[13,119],"symbol_name":"manageProposeBlockHash","language":"typescript","module_resolution_path":"@/libs/consensus/v2/routines/manageProposeBlockHash"},"relationships":{"depends_on":["mod-43e420b038a56638079168bc"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-6680f554fcb4ede4631e60b2","sym-304eaa4f7c51cf3fdbf89bb0","sym-9ccc28bee226a93586ef7b1d"],"called_by":["sym-0d658d44d5b23dfd5829fc4f"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","lodash","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"sym-b2276d6a6402e65f56fd09ad","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["mergeMempools (function) exported from `src/libs/consensus/v2/routines/mergeMempools.ts`.","TypeScript signature: (mempool: Transaction[], shard: Peer[]) => unknown."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/consensus/v2/routines/mergeMempools.ts","line_range":[6,33],"symbol_name":"mergeMempools","language":"typescript","module_resolution_path":"@/libs/consensus/v2/routines/mergeMempools"},"relationships":{"depends_on":["mod-4abf6009e6ef176fec251259"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-717b0f06032fce2890d123ea","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["mergePeerlist (function) exported from `src/libs/consensus/v2/routines/mergePeerlist.ts`.","TypeScript signature: (shard: Peer[]) => Promise."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/consensus/v2/routines/mergePeerlist.ts","line_range":[9,29],"symbol_name":"mergePeerlist","language":"typescript","module_resolution_path":"@/libs/consensus/v2/routines/mergePeerlist"},"relationships":{"depends_on":["mod-0265f572c93b5fdc1506bdda"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"sym-a70b0054aa7a6bdc502006e3","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["orderTransactions (function) exported from `src/libs/consensus/v2/routines/orderTransactions.ts`.","TypeScript signature: (mempool: MempoolData) => Promise."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/consensus/v2/routines/orderTransactions.ts","line_range":[9,32],"symbol_name":"orderTransactions","language":"typescript","module_resolution_path":"@/libs/consensus/v2/routines/orderTransactions"},"relationships":{"depends_on":["mod-1b966da09e8eebb2af4ea0ae"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-ae84450ca16ec2017225c6e2","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `SecretaryManager` in `src/libs/consensus/v2/types/secretaryManager.ts`."],"intent_vectors":["consensus","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/types/secretaryManager.ts","line_range":[15,1003],"symbol_name":"SecretaryManager::api","language":"typescript","module_resolution_path":"@/libs/consensus/v2/types/secretaryManager"},"relationships":{"depends_on":["sym-fb2870f850b894405cc6b6f4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-248d2e44333f70a7724dfab9","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SecretaryManager.lastBlockRef method on exported class `SecretaryManager` in `src/libs/consensus/v2/types/secretaryManager.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/types/secretaryManager.ts","line_range":[21,27],"symbol_name":"SecretaryManager.lastBlockRef","language":"typescript","module_resolution_path":"@/libs/consensus/v2/types/secretaryManager"},"relationships":{"depends_on":["sym-fb2870f850b894405cc6b6f4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-3ea29e1b08ecca0739db484a","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SecretaryManager.secretary method on exported class `SecretaryManager` in `src/libs/consensus/v2/types/secretaryManager.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/types/secretaryManager.ts","line_range":[31,33],"symbol_name":"SecretaryManager.secretary","language":"typescript","module_resolution_path":"@/libs/consensus/v2/types/secretaryManager"},"relationships":{"depends_on":["sym-fb2870f850b894405cc6b6f4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-57d373cba5ebbb373b4dc896","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SecretaryManager.initializeShard method on exported class `SecretaryManager` in `src/libs/consensus/v2/types/secretaryManager.ts`.","TypeScript signature: (cVSA: string, lastBlockNumber: number) => unknown."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/consensus/v2/types/secretaryManager.ts","line_range":[49,102],"symbol_name":"SecretaryManager.initializeShard","language":"typescript","module_resolution_path":"@/libs/consensus/v2/types/secretaryManager"},"relationships":{"depends_on":["sym-fb2870f850b894405cc6b6f4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-f78a8502a164052f35675687","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SecretaryManager.initializeValidationPhases method on exported class `SecretaryManager` in `src/libs/consensus/v2/types/secretaryManager.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/types/secretaryManager.ts","line_range":[110,118],"symbol_name":"SecretaryManager.initializeValidationPhases","language":"typescript","module_resolution_path":"@/libs/consensus/v2/types/secretaryManager"},"relationships":{"depends_on":["sym-fb2870f850b894405cc6b6f4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-641d0700ddf43915ffca5d6b","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SecretaryManager.checkIfWeAreSecretary method on exported class `SecretaryManager` in `src/libs/consensus/v2/types/secretaryManager.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/types/secretaryManager.ts","line_range":[123,125],"symbol_name":"SecretaryManager.checkIfWeAreSecretary","language":"typescript","module_resolution_path":"@/libs/consensus/v2/types/secretaryManager"},"relationships":{"depends_on":["sym-fb2870f850b894405cc6b6f4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-f61ba3716295ceca715defb3","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SecretaryManager.secretaryRoutine method on exported class `SecretaryManager` in `src/libs/consensus/v2/types/secretaryManager.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/consensus/v2/types/secretaryManager.ts","line_range":[144,239],"symbol_name":"SecretaryManager.secretaryRoutine","language":"typescript","module_resolution_path":"@/libs/consensus/v2/types/secretaryManager"},"relationships":{"depends_on":["sym-fb2870f850b894405cc6b6f4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-18d8719d39f12759faddaf08","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SecretaryManager.handleNodesGoneOffline method on exported class `SecretaryManager` in `src/libs/consensus/v2/types/secretaryManager.ts`.","TypeScript signature: (waitingMembers: string[]) => unknown."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/consensus/v2/types/secretaryManager.ts","line_range":[250,285],"symbol_name":"SecretaryManager.handleNodesGoneOffline","language":"typescript","module_resolution_path":"@/libs/consensus/v2/types/secretaryManager"},"relationships":{"depends_on":["sym-fb2870f850b894405cc6b6f4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-71eec5a8e8af51150f452fff","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SecretaryManager.handleSecretaryGoneOffline method on exported class `SecretaryManager` in `src/libs/consensus/v2/types/secretaryManager.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/consensus/v2/types/secretaryManager.ts","line_range":[293,375],"symbol_name":"SecretaryManager.handleSecretaryGoneOffline","language":"typescript","module_resolution_path":"@/libs/consensus/v2/types/secretaryManager"},"relationships":{"depends_on":["sym-fb2870f850b894405cc6b6f4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-daa32cea34b9049e4b060311","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SecretaryManager.simulateSecretaryGoingOffline method on exported class `SecretaryManager` in `src/libs/consensus/v2/types/secretaryManager.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/consensus/v2/types/secretaryManager.ts","line_range":[381,390],"symbol_name":"SecretaryManager.simulateSecretaryGoingOffline","language":"typescript","module_resolution_path":"@/libs/consensus/v2/types/secretaryManager"},"relationships":{"depends_on":["sym-fb2870f850b894405cc6b6f4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-7b62ffb16704e1d6d9ec6baf","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SecretaryManager.simulateNormalNodeGoingOffline method on exported class `SecretaryManager` in `src/libs/consensus/v2/types/secretaryManager.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/consensus/v2/types/secretaryManager.ts","line_range":[397,406],"symbol_name":"SecretaryManager.simulateNormalNodeGoingOffline","language":"typescript","module_resolution_path":"@/libs/consensus/v2/types/secretaryManager"},"relationships":{"depends_on":["sym-fb2870f850b894405cc6b6f4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-3ad7b7a5210718d38b4ba00d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SecretaryManager.simulateNodeBeingLate method on exported class `SecretaryManager` in `src/libs/consensus/v2/types/secretaryManager.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/consensus/v2/types/secretaryManager.ts","line_range":[408,412],"symbol_name":"SecretaryManager.simulateNodeBeingLate","language":"typescript","module_resolution_path":"@/libs/consensus/v2/types/secretaryManager"},"relationships":{"depends_on":["sym-fb2870f850b894405cc6b6f4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-69b2fc8c4e62020ca15890f1","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SecretaryManager.receiveValidatorPhase method on exported class `SecretaryManager` in `src/libs/consensus/v2/types/secretaryManager.ts`.","TypeScript signature: (memberKey: string, theirPhase: number) => unknown."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/consensus/v2/types/secretaryManager.ts","line_range":[414,473],"symbol_name":"SecretaryManager.receiveValidatorPhase","language":"typescript","module_resolution_path":"@/libs/consensus/v2/types/secretaryManager"},"relationships":{"depends_on":["sym-fb2870f850b894405cc6b6f4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-5311b846d2f0732639ef5fd5","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SecretaryManager.releaseWaitingRoutine method on exported class `SecretaryManager` in `src/libs/consensus/v2/types/secretaryManager.ts`.","TypeScript signature: (resolveWaiter: unknown) => unknown."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/consensus/v2/types/secretaryManager.ts","line_range":[478,502],"symbol_name":"SecretaryManager.releaseWaitingRoutine","language":"typescript","module_resolution_path":"@/libs/consensus/v2/types/secretaryManager"},"relationships":{"depends_on":["sym-fb2870f850b894405cc6b6f4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-0534ba9f686cfc223b17d309","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SecretaryManager.shouldReleaseWaitingMembers method on exported class `SecretaryManager` in `src/libs/consensus/v2/types/secretaryManager.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/types/secretaryManager.ts","line_range":[509,521],"symbol_name":"SecretaryManager.shouldReleaseWaitingMembers","language":"typescript","module_resolution_path":"@/libs/consensus/v2/types/secretaryManager"},"relationships":{"depends_on":["sym-fb2870f850b894405cc6b6f4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-3cf158bf5511b0f35b37c016","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SecretaryManager.releaseWaitingMembers method on exported class `SecretaryManager` in `src/libs/consensus/v2/types/secretaryManager.ts`.","TypeScript signature: (waitingMembers: string[], phase: number, src: string) => unknown."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/consensus/v2/types/secretaryManager.ts","line_range":[528,616],"symbol_name":"SecretaryManager.releaseWaitingMembers","language":"typescript","module_resolution_path":"@/libs/consensus/v2/types/secretaryManager"},"relationships":{"depends_on":["sym-fb2870f850b894405cc6b6f4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-10211a30b965f147b9b74ec5","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SecretaryManager.receiveGreenLight method on exported class `SecretaryManager` in `src/libs/consensus/v2/types/secretaryManager.ts`.","TypeScript signature: (secretaryBlockTimestamp: number, validatorPhase: number) => unknown."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/consensus/v2/types/secretaryManager.ts","line_range":[624,689],"symbol_name":"SecretaryManager.receiveGreenLight","language":"typescript","module_resolution_path":"@/libs/consensus/v2/types/secretaryManager"},"relationships":{"depends_on":["sym-fb2870f850b894405cc6b6f4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-768bb4fdd7199b0134c39dfb","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SecretaryManager.getWaitingMembers method on exported class `SecretaryManager` in `src/libs/consensus/v2/types/secretaryManager.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/types/secretaryManager.ts","line_range":[696,709],"symbol_name":"SecretaryManager.getWaitingMembers","language":"typescript","module_resolution_path":"@/libs/consensus/v2/types/secretaryManager"},"relationships":{"depends_on":["sym-fb2870f850b894405cc6b6f4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-48e4099783c4eb841ccd2f70","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SecretaryManager.sendOurValidatorPhaseToSecretary method on exported class `SecretaryManager` in `src/libs/consensus/v2/types/secretaryManager.ts`.","TypeScript signature: (retries: unknown) => unknown."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/consensus/v2/types/secretaryManager.ts","line_range":[715,878],"symbol_name":"SecretaryManager.sendOurValidatorPhaseToSecretary","language":"typescript","module_resolution_path":"@/libs/consensus/v2/types/secretaryManager"},"relationships":{"depends_on":["sym-fb2870f850b894405cc6b6f4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-bb91b975550883cfdd44eb71","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SecretaryManager.endConsensusRoutine method on exported class `SecretaryManager` in `src/libs/consensus/v2/types/secretaryManager.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/consensus/v2/types/secretaryManager.ts","line_range":[880,940],"symbol_name":"SecretaryManager.endConsensusRoutine","language":"typescript","module_resolution_path":"@/libs/consensus/v2/types/secretaryManager"},"relationships":{"depends_on":["sym-fb2870f850b894405cc6b6f4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-d6f03b0c7bdecce24c1a8b1d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SecretaryManager.setOurValidatorPhase method on exported class `SecretaryManager` in `src/libs/consensus/v2/types/secretaryManager.ts`.","TypeScript signature: (phase: number, status: boolean) => unknown."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/consensus/v2/types/secretaryManager.ts","line_range":[949,955],"symbol_name":"SecretaryManager.setOurValidatorPhase","language":"typescript","module_resolution_path":"@/libs/consensus/v2/types/secretaryManager"},"relationships":{"depends_on":["sym-fb2870f850b894405cc6b6f4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-e9eeedb988fa9f0d93d85898","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SecretaryManager.getInstance method on exported class `SecretaryManager` in `src/libs/consensus/v2/types/secretaryManager.ts`.","TypeScript signature: (blockRef: number, initialize: unknown) => SecretaryManager."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/types/secretaryManager.ts","line_range":[958,977],"symbol_name":"SecretaryManager.getInstance","language":"typescript","module_resolution_path":"@/libs/consensus/v2/types/secretaryManager"},"relationships":{"depends_on":["sym-fb2870f850b894405cc6b6f4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-a726f0c8a505dca89d7112eb","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SecretaryManager.getSecretaryBlockTimestamp method on exported class `SecretaryManager` in `src/libs/consensus/v2/types/secretaryManager.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/consensus/v2/types/secretaryManager.ts","line_range":[984,1002],"symbol_name":"SecretaryManager.getSecretaryBlockTimestamp","language":"typescript","module_resolution_path":"@/libs/consensus/v2/types/secretaryManager"},"relationships":{"depends_on":["sym-fb2870f850b894405cc6b6f4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-fb2870f850b894405cc6b6f4","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SecretaryManager (class) exported from `src/libs/consensus/v2/types/secretaryManager.ts`."],"intent_vectors":["consensus","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/types/secretaryManager.ts","line_range":[15,1003],"symbol_name":"SecretaryManager","language":"typescript","module_resolution_path":"@/libs/consensus/v2/types/secretaryManager"},"relationships":{"depends_on":["mod-fcbaaa2e6fedeb87a2dc2d8e"],"depended_by":["sym-ae84450ca16ec2017225c6e2","sym-248d2e44333f70a7724dfab9","sym-3ea29e1b08ecca0739db484a","sym-57d373cba5ebbb373b4dc896","sym-f78a8502a164052f35675687","sym-641d0700ddf43915ffca5d6b","sym-f61ba3716295ceca715defb3","sym-18d8719d39f12759faddaf08","sym-71eec5a8e8af51150f452fff","sym-daa32cea34b9049e4b060311","sym-7b62ffb16704e1d6d9ec6baf","sym-3ad7b7a5210718d38b4ba00d","sym-69b2fc8c4e62020ca15890f1","sym-5311b846d2f0732639ef5fd5","sym-0534ba9f686cfc223b17d309","sym-3cf158bf5511b0f35b37c016","sym-10211a30b965f147b9b74ec5","sym-768bb4fdd7199b0134c39dfb","sym-48e4099783c4eb841ccd2f70","sym-bb91b975550883cfdd44eb71","sym-d6f03b0c7bdecce24c1a8b1d","sym-e9eeedb988fa9f0d93d85898","sym-a726f0c8a505dca89d7112eb"],"implements":[],"extends":[],"calls":["sym-304eaa4f7c51cf3fdbf89bb0","sym-6680f554fcb4ede4631e60b2"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-c06b4d496f43bc591932905d","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `Shard` in `src/libs/consensus/v2/types/shardTypes.ts`."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/types/shardTypes.ts","line_range":[4,10],"symbol_name":"Shard::api","language":"typescript","module_resolution_path":"@/libs/consensus/v2/types/shardTypes"},"relationships":{"depends_on":["sym-e4b8097a5ba3819fbeaf9658"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"sym-e4b8097a5ba3819fbeaf9658","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Shard (interface) exported from `src/libs/consensus/v2/types/shardTypes.ts`."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/types/shardTypes.ts","line_range":[4,10],"symbol_name":"Shard","language":"typescript","module_resolution_path":"@/libs/consensus/v2/types/shardTypes"},"relationships":{"depends_on":["mod-ecaffe079222e4664d98655f"],"depended_by":["sym-c06b4d496f43bc591932905d"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"sym-268e622d0ec0e2c563283be3","level":"L3","extraction_confidence":0.87,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `ValidationPhaseStatus` in `src/libs/consensus/v2/types/validationStatusTypes.ts`.","Example of the validation phase object"],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/types/validationStatusTypes.ts","line_range":[20,27],"symbol_name":"ValidationPhaseStatus::api","language":"typescript","module_resolution_path":"@/libs/consensus/v2/types/validationStatusTypes"},"relationships":{"depends_on":["sym-8450a6eb559ca4627e196e23"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 2-17","related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"sym-8450a6eb559ca4627e196e23","level":"L2","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ValidationPhaseStatus (type) exported from `src/libs/consensus/v2/types/validationStatusTypes.ts`.","Example of the validation phase object"],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/types/validationStatusTypes.ts","line_range":[20,27],"symbol_name":"ValidationPhaseStatus","language":"typescript","module_resolution_path":"@/libs/consensus/v2/types/validationStatusTypes"},"relationships":{"depends_on":["mod-523a32046a2c4caccecf050d"],"depended_by":["sym-268e622d0ec0e2c563283be3"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 2-17","related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"sym-c2ac5bb71bdb602bdd9aa98b","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ValidationPhase` in `src/libs/consensus/v2/types/validationStatusTypes.ts`."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/types/validationStatusTypes.ts","line_range":[30,37],"symbol_name":"ValidationPhase::api","language":"typescript","module_resolution_path":"@/libs/consensus/v2/types/validationStatusTypes"},"relationships":{"depends_on":["sym-c01d178ff00381d6e5d2c43d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"sym-c01d178ff00381d6e5d2c43d","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ValidationPhase (interface) exported from `src/libs/consensus/v2/types/validationStatusTypes.ts`."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/types/validationStatusTypes.ts","line_range":[30,37],"symbol_name":"ValidationPhase","language":"typescript","module_resolution_path":"@/libs/consensus/v2/types/validationStatusTypes"},"relationships":{"depends_on":["mod-523a32046a2c4caccecf050d"],"depended_by":["sym-c2ac5bb71bdb602bdd9aa98b"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"sym-ca3dbc3c56cb1055cd0a0a89","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["emptyValidationPhase (variable) exported from `src/libs/consensus/v2/types/validationStatusTypes.ts`."],"intent_vectors":["consensus"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/consensus/v2/types/validationStatusTypes.ts","line_range":[40,55],"symbol_name":"emptyValidationPhase","language":"typescript","module_resolution_path":"@/libs/consensus/v2/types/validationStatusTypes"},"relationships":{"depends_on":["mod-523a32046a2c4caccecf050d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"sym-e5d0b42c6f9912d4ac96df07","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `Cryptography` in `src/libs/crypto/cryptography.ts`."],"intent_vectors":["cryptography","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/crypto/cryptography.ts","line_range":[19,252],"symbol_name":"Cryptography::api","language":"typescript","module_resolution_path":"@/libs/crypto/cryptography"},"relationships":{"depends_on":["sym-1447dd6a4335c05fb5ed3cb2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-c94aaedf877b31be4784c658","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Cryptography.new method on exported class `Cryptography` in `src/libs/crypto/cryptography.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["cryptography"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/crypto/cryptography.ts","line_range":[20,25],"symbol_name":"Cryptography.new","language":"typescript","module_resolution_path":"@/libs/crypto/cryptography"},"relationships":{"depends_on":["sym-1447dd6a4335c05fb5ed3cb2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-6ad07b078d049901d4ccfed5","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Cryptography.newFromSeed method on exported class `Cryptography` in `src/libs/crypto/cryptography.ts`.","TypeScript signature: (stringSeed: string) => unknown."],"intent_vectors":["cryptography"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/crypto/cryptography.ts","line_range":[28,30],"symbol_name":"Cryptography.newFromSeed","language":"typescript","module_resolution_path":"@/libs/crypto/cryptography"},"relationships":{"depends_on":["sym-1447dd6a4335c05fb5ed3cb2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-1db75ffac09598cb3cfb34c1","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Cryptography.save method on exported class `Cryptography` in `src/libs/crypto/cryptography.ts`.","TypeScript signature: (keypair: forge.pki.KeyPair, path: string, mode: unknown) => unknown."],"intent_vectors":["cryptography"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/crypto/cryptography.ts","line_range":[33,41],"symbol_name":"Cryptography.save","language":"typescript","module_resolution_path":"@/libs/crypto/cryptography"},"relationships":{"depends_on":["sym-1447dd6a4335c05fb5ed3cb2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-3e07be48eec727726678254a","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Cryptography.saveToHex method on exported class `Cryptography` in `src/libs/crypto/cryptography.ts`.","TypeScript signature: (forgeBuffer: forge.pki.PrivateKey) => string."],"intent_vectors":["cryptography"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/crypto/cryptography.ts","line_range":[43,50],"symbol_name":"Cryptography.saveToHex","language":"typescript","module_resolution_path":"@/libs/crypto/cryptography"},"relationships":{"depends_on":["sym-1447dd6a4335c05fb5ed3cb2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-5fdfacd14d17871a556566d7","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Cryptography.load method on exported class `Cryptography` in `src/libs/crypto/cryptography.ts`.","TypeScript signature: (path: unknown) => unknown."],"intent_vectors":["cryptography"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/crypto/cryptography.ts","line_range":[52,65],"symbol_name":"Cryptography.load","language":"typescript","module_resolution_path":"@/libs/crypto/cryptography"},"relationships":{"depends_on":["sym-1447dd6a4335c05fb5ed3cb2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-4d5e1dcfb557a12f53357826","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Cryptography.loadFromHex method on exported class `Cryptography` in `src/libs/crypto/cryptography.ts`.","TypeScript signature: (content: string) => forge.pki.KeyPair."],"intent_vectors":["cryptography"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/crypto/cryptography.ts","line_range":[67,90],"symbol_name":"Cryptography.loadFromHex","language":"typescript","module_resolution_path":"@/libs/crypto/cryptography"},"relationships":{"depends_on":["sym-1447dd6a4335c05fb5ed3cb2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-45cd1de4f2eb8d8a20b32d8d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Cryptography.loadFromBufferString method on exported class `Cryptography` in `src/libs/crypto/cryptography.ts`.","TypeScript signature: (content: string) => forge.pki.KeyPair."],"intent_vectors":["cryptography"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/crypto/cryptography.ts","line_range":[92,99],"symbol_name":"Cryptography.loadFromBufferString","language":"typescript","module_resolution_path":"@/libs/crypto/cryptography"},"relationships":{"depends_on":["sym-1447dd6a4335c05fb5ed3cb2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-5087892a29105232bc1c95bb","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Cryptography.sign method on exported class `Cryptography` in `src/libs/crypto/cryptography.ts`.","TypeScript signature: (message: string, privateKey: forge.pki.ed25519.BinaryBuffer | any) => unknown."],"intent_vectors":["cryptography"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/crypto/cryptography.ts","line_range":[101,117],"symbol_name":"Cryptography.sign","language":"typescript","module_resolution_path":"@/libs/crypto/cryptography"},"relationships":{"depends_on":["sym-1447dd6a4335c05fb5ed3cb2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-3d9c34a3fca6e49261b71c65","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Cryptography.verify method on exported class `Cryptography` in `src/libs/crypto/cryptography.ts`.","TypeScript signature: (signed: string, signature: string | forge.pki.ed25519.BinaryBuffer, publicKey: string | forge.pki.ed25519.BinaryBuffer) => unknown."],"intent_vectors":["cryptography"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/crypto/cryptography.ts","line_range":[119,183],"symbol_name":"Cryptography.verify","language":"typescript","module_resolution_path":"@/libs/crypto/cryptography"},"relationships":{"depends_on":["sym-1447dd6a4335c05fb5ed3cb2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-1447dd6a4335c05fb5ed3cb2","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Cryptography (class) exported from `src/libs/crypto/cryptography.ts`."],"intent_vectors":["cryptography","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/crypto/cryptography.ts","line_range":[19,252],"symbol_name":"Cryptography","language":"typescript","module_resolution_path":"@/libs/crypto/cryptography"},"relationships":{"depends_on":["mod-3a3b7b050c56c146875c18fb"],"depended_by":["sym-e5d0b42c6f9912d4ac96df07","sym-c94aaedf877b31be4784c658","sym-6ad07b078d049901d4ccfed5","sym-1db75ffac09598cb3cfb34c1","sym-3e07be48eec727726678254a","sym-5fdfacd14d17871a556566d7","sym-4d5e1dcfb557a12f53357826","sym-45cd1de4f2eb8d8a20b32d8d","sym-5087892a29105232bc1c95bb","sym-3d9c34a3fca6e49261b71c65"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.605Z","authors":[]}} +{"uuid":"sym-b62136244c8ea0814eedab1d","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["forgeToHex (function) exported from `src/libs/crypto/forgeUtils.ts`.","TypeScript signature: (forgeBuffer: any) => string."],"intent_vectors":["cryptography"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/crypto/forgeUtils.ts","line_range":[4,16],"symbol_name":"forgeToHex","language":"typescript","module_resolution_path":"@/libs/crypto/forgeUtils"},"relationships":{"depends_on":["mod-b2c7d957ae05ce535d8f8e2e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"sym-2a8fb09cf87c7ed8b2e472f7","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["hexToForge (function) exported from `src/libs/crypto/forgeUtils.ts`.","TypeScript signature: (forgeString: string) => Uint8Array."],"intent_vectors":["cryptography"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/crypto/forgeUtils.ts","line_range":[20,50],"symbol_name":"hexToForge","language":"typescript","module_resolution_path":"@/libs/crypto/forgeUtils"},"relationships":{"depends_on":["mod-b2c7d957ae05ce535d8f8e2e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"sym-e4ce5a5590c74675e5d0843d","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `Hashing` in `src/libs/crypto/hashing.ts`."],"intent_vectors":["cryptography","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/crypto/hashing.ts","line_range":[15,26],"symbol_name":"Hashing::api","language":"typescript","module_resolution_path":"@/libs/crypto/hashing"},"relationships":{"depends_on":["sym-3435e923dc5c81930b0c8a24"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge","crypto"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"sym-71f146aad1749b8d9048fdb9","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Hashing.sha256 method on exported class `Hashing` in `src/libs/crypto/hashing.ts`.","TypeScript signature: (message: string) => unknown."],"intent_vectors":["cryptography"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/crypto/hashing.ts","line_range":[16,20],"symbol_name":"Hashing.sha256","language":"typescript","module_resolution_path":"@/libs/crypto/hashing"},"relationships":{"depends_on":["sym-3435e923dc5c81930b0c8a24"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge","crypto"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"sym-e932c1609a686ad5f6432fa2","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Hashing.sha256Bytes method on exported class `Hashing` in `src/libs/crypto/hashing.ts`.","TypeScript signature: (bytes: Uint8Array) => unknown."],"intent_vectors":["cryptography"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/crypto/hashing.ts","line_range":[23,25],"symbol_name":"Hashing.sha256Bytes","language":"typescript","module_resolution_path":"@/libs/crypto/hashing"},"relationships":{"depends_on":["sym-3435e923dc5c81930b0c8a24"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge","crypto"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"sym-3435e923dc5c81930b0c8a24","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Hashing (class) exported from `src/libs/crypto/hashing.ts`."],"intent_vectors":["cryptography","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/crypto/hashing.ts","line_range":[15,26],"symbol_name":"Hashing","language":"typescript","module_resolution_path":"@/libs/crypto/hashing"},"relationships":{"depends_on":["mod-84552d58b6743daab10f83b3"],"depended_by":["sym-e4ce5a5590c74675e5d0843d","sym-71f146aad1749b8d9048fdb9","sym-e932c1609a686ad5f6432fa2"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge","crypto"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"sym-478e8ddcf7388b01c25418b2","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["cryptography (re_export) exported from `src/libs/crypto/index.ts`."],"intent_vectors":["cryptography"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/crypto/index.ts","line_range":[12,12],"symbol_name":"cryptography","language":"typescript","module_resolution_path":"@/libs/crypto/index"},"relationships":{"depends_on":["mod-d1ccb3f2c31e96f4ad5dab3f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"sym-7ffbcc1ce07d7b3b23916771","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["hashing (re_export) exported from `src/libs/crypto/index.ts`."],"intent_vectors":["cryptography"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/crypto/index.ts","line_range":[13,13],"symbol_name":"hashing","language":"typescript","module_resolution_path":"@/libs/crypto/index"},"relationships":{"depends_on":["mod-d1ccb3f2c31e96f4ad5dab3f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"sym-a066fcb7bd034599296b5c63","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["rsa (re_export) exported from `src/libs/crypto/index.ts`."],"intent_vectors":["cryptography"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/crypto/index.ts","line_range":[14,14],"symbol_name":"rsa","language":"typescript","module_resolution_path":"@/libs/crypto/index"},"relationships":{"depends_on":["mod-d1ccb3f2c31e96f4ad5dab3f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.952Z","authors":[]}} +{"uuid":"sym-00cbbbcdb0b955db9f940293","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `RSA` in `src/libs/crypto/rsa.ts`."],"intent_vectors":["cryptography","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/crypto/rsa.ts","line_range":[14,63],"symbol_name":"RSA::api","language":"typescript","module_resolution_path":"@/libs/crypto/rsa"},"relationships":{"depends_on":["sym-de79dd64a40f89fbb6d128ae"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-80491bfd51e3d62b35bc137c","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RSA.new method on exported class `RSA` in `src/libs/crypto/rsa.ts`.","TypeScript signature: (ecdsaPrivateKey: string) => unknown."],"intent_vectors":["cryptography"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/crypto/rsa.ts","line_range":[16,27],"symbol_name":"RSA.new","language":"typescript","module_resolution_path":"@/libs/crypto/rsa"},"relationships":{"depends_on":["sym-de79dd64a40f89fbb6d128ae"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-3510b71d5489f9c401a9dc5e","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RSA.sign method on exported class `RSA` in `src/libs/crypto/rsa.ts`.","TypeScript signature: (message: string, privateKey: forge.pki.rsa.PrivateKey) => unknown."],"intent_vectors":["cryptography"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/crypto/rsa.ts","line_range":[30,35],"symbol_name":"RSA.sign","language":"typescript","module_resolution_path":"@/libs/crypto/rsa"},"relationships":{"depends_on":["sym-de79dd64a40f89fbb6d128ae"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-8c4521928e9d317614012781","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RSA.verify method on exported class `RSA` in `src/libs/crypto/rsa.ts`.","TypeScript signature: (message: string, signature: string, publicKey: forge.pki.rsa.PublicKey) => unknown."],"intent_vectors":["cryptography"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/crypto/rsa.ts","line_range":[38,47],"symbol_name":"RSA.verify","language":"typescript","module_resolution_path":"@/libs/crypto/rsa"},"relationships":{"depends_on":["sym-de79dd64a40f89fbb6d128ae"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-30eead59051be586144da020","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RSA.encrypt method on exported class `RSA` in `src/libs/crypto/rsa.ts`.","TypeScript signature: (message: string, publicKey: forge.pki.rsa.PublicKey) => unknown."],"intent_vectors":["cryptography"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/crypto/rsa.ts","line_range":[50,53],"symbol_name":"RSA.encrypt","language":"typescript","module_resolution_path":"@/libs/crypto/rsa"},"relationships":{"depends_on":["sym-de79dd64a40f89fbb6d128ae"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-0c100fc39b8f04913905c496","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RSA.decrypt method on exported class `RSA` in `src/libs/crypto/rsa.ts`.","TypeScript signature: (message: string, privateKey: forge.pki.rsa.PrivateKey) => unknown."],"intent_vectors":["cryptography"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/crypto/rsa.ts","line_range":[56,62],"symbol_name":"RSA.decrypt","language":"typescript","module_resolution_path":"@/libs/crypto/rsa"},"relationships":{"depends_on":["sym-de79dd64a40f89fbb6d128ae"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-de79dd64a40f89fbb6d128ae","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RSA (class) exported from `src/libs/crypto/rsa.ts`."],"intent_vectors":["cryptography","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/crypto/rsa.ts","line_range":[14,63],"symbol_name":"RSA","language":"typescript","module_resolution_path":"@/libs/crypto/rsa"},"relationships":{"depends_on":["mod-04e38e9e7bbb7be0a3e4dce7"],"depended_by":["sym-00cbbbcdb0b955db9f940293","sym-80491bfd51e3d62b35bc137c","sym-3510b71d5489f9c401a9dc5e","sym-8c4521928e9d317614012781","sym-30eead59051be586144da020","sym-0c100fc39b8f04913905c496"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-a2ae8aabb26ee6c4a5dcd1f1","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `Identity` in `src/libs/identity/identity.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/identity.ts","line_range":[28,159],"symbol_name":"Identity::api","language":"typescript","module_resolution_path":"@/libs/identity/identity"},"relationships":{"depends_on":["sym-9246344e2f07f04e26846059"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","node-forge","bip39","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption","@scure/bip39/wordlists/english.js"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-d96c31998797e41a6b848c0d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Identity.getInstance method on exported class `Identity` in `src/libs/identity/identity.ts`.","TypeScript signature: () => Identity."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/identity.ts","line_range":[52,57],"symbol_name":"Identity.getInstance","language":"typescript","module_resolution_path":"@/libs/identity/identity"},"relationships":{"depends_on":["sym-9246344e2f07f04e26846059"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","node-forge","bip39","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption","@scure/bip39/wordlists/english.js"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-a6adf2f17e7583aff2cc5411","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Identity.ensureIdentity method on exported class `Identity` in `src/libs/identity/identity.ts`.","TypeScript signature: () => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/identity/identity.ts","line_range":[62,83],"symbol_name":"Identity.ensureIdentity","language":"typescript","module_resolution_path":"@/libs/identity/identity"},"relationships":{"depends_on":["sym-9246344e2f07f04e26846059"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","node-forge","bip39","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption","@scure/bip39/wordlists/english.js"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-86e7b8627dd8998cff427159","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Identity.getPublicIP method on exported class `Identity` in `src/libs/identity/identity.ts`.","TypeScript signature: () => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/identity/identity.ts","line_range":[85,88],"symbol_name":"Identity.getPublicIP","language":"typescript","module_resolution_path":"@/libs/identity/identity"},"relationships":{"depends_on":["sym-9246344e2f07f04e26846059"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","node-forge","bip39","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption","@scure/bip39/wordlists/english.js"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-a03cefb08d5d832286f18983","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Identity.getPublicKeyHex method on exported class `Identity` in `src/libs/identity/identity.ts`.","TypeScript signature: () => string | undefined."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/identity.ts","line_range":[90,92],"symbol_name":"Identity.getPublicKeyHex","language":"typescript","module_resolution_path":"@/libs/identity/identity"},"relationships":{"depends_on":["sym-9246344e2f07f04e26846059"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","node-forge","bip39","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption","@scure/bip39/wordlists/english.js"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-bc81dd6cd59401b6fd78323a","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Identity.setPublicPort method on exported class `Identity` in `src/libs/identity/identity.ts`.","TypeScript signature: (port: string) => void."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/identity.ts","line_range":[94,96],"symbol_name":"Identity.setPublicPort","language":"typescript","module_resolution_path":"@/libs/identity/identity"},"relationships":{"depends_on":["sym-9246344e2f07f04e26846059"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","node-forge","bip39","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption","@scure/bip39/wordlists/english.js"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-66305b056cc80ae18d7fb7ac","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Identity.getConnectionString method on exported class `Identity` in `src/libs/identity/identity.ts`.","TypeScript signature: () => string."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/identity.ts","line_range":[98,100],"symbol_name":"Identity.getConnectionString","language":"typescript","module_resolution_path":"@/libs/identity/identity"},"relationships":{"depends_on":["sym-9246344e2f07f04e26846059"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","node-forge","bip39","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption","@scure/bip39/wordlists/english.js"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-f30624819d473bf882e23852","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Identity.mnemonicToSeed method on exported class `Identity` in `src/libs/identity/identity.ts`.","TypeScript signature: (mnemonic: string) => unknown."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/identity/identity.ts","line_range":[115,130],"symbol_name":"Identity.mnemonicToSeed","language":"typescript","module_resolution_path":"@/libs/identity/identity"},"relationships":{"depends_on":["sym-9246344e2f07f04e26846059"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","node-forge","bip39","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption","@scure/bip39/wordlists/english.js"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-499b75c3978caaaad3d70456","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Identity.loadIdentity method on exported class `Identity` in `src/libs/identity/identity.ts`.","TypeScript signature: () => unknown."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/identity/identity.ts","line_range":[138,158],"symbol_name":"Identity.loadIdentity","language":"typescript","module_resolution_path":"@/libs/identity/identity"},"relationships":{"depends_on":["sym-9246344e2f07f04e26846059"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","node-forge","bip39","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption","@scure/bip39/wordlists/english.js"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-9246344e2f07f04e26846059","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Identity (class) exported from `src/libs/identity/identity.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/identity.ts","line_range":[28,159],"symbol_name":"Identity","language":"typescript","module_resolution_path":"@/libs/identity/identity"},"relationships":{"depends_on":["mod-b5a2bbfcc551f4a8277420d0"],"depended_by":["sym-a2ae8aabb26ee6c4a5dcd1f1","sym-d96c31998797e41a6b848c0d","sym-a6adf2f17e7583aff2cc5411","sym-86e7b8627dd8998cff427159","sym-a03cefb08d5d832286f18983","sym-bc81dd6cd59401b6fd78323a","sym-66305b056cc80ae18d7fb7ac","sym-f30624819d473bf882e23852","sym-499b75c3978caaaad3d70456"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","node-forge","bip39","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption","@scure/bip39/wordlists/english.js"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-6e936872ac6e08ef9265f7e6","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Identity (re_export) exported from `src/libs/identity/index.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/index.ts","line_range":[12,12],"symbol_name":"Identity","language":"typescript","module_resolution_path":"@/libs/identity/index"},"relationships":{"depends_on":["mod-995b3971c802fa33d1e8772a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-5ae8aed9695985bfe76de157","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `NomisIdentitySummary` in `src/libs/identity/providers/nomisIdentityProvider.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/providers/nomisIdentityProvider.ts","line_range":[14,14],"symbol_name":"NomisIdentitySummary::api","language":"typescript","module_resolution_path":"@/libs/identity/providers/nomisIdentityProvider"},"relationships":{"depends_on":["sym-e7651dee3e697e21bb4b173e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-e7651dee3e697e21bb4b173e","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["NomisIdentitySummary (type) exported from `src/libs/identity/providers/nomisIdentityProvider.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/providers/nomisIdentityProvider.ts","line_range":[14,14],"symbol_name":"NomisIdentitySummary","language":"typescript","module_resolution_path":"@/libs/identity/providers/nomisIdentityProvider"},"relationships":{"depends_on":["mod-92957ee0de7980fc9c719d03"],"depended_by":["sym-5ae8aed9695985bfe76de157"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-08f815d80cefd75cb3778d5c","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `NomisImportOptions` in `src/libs/identity/providers/nomisIdentityProvider.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/providers/nomisIdentityProvider.ts","line_range":[16,21],"symbol_name":"NomisImportOptions::api","language":"typescript","module_resolution_path":"@/libs/identity/providers/nomisIdentityProvider"},"relationships":{"depends_on":["sym-70cd0342713e391c581bfdc1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-70cd0342713e391c581bfdc1","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["NomisImportOptions (interface) exported from `src/libs/identity/providers/nomisIdentityProvider.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/providers/nomisIdentityProvider.ts","line_range":[16,21],"symbol_name":"NomisImportOptions","language":"typescript","module_resolution_path":"@/libs/identity/providers/nomisIdentityProvider"},"relationships":{"depends_on":["mod-92957ee0de7980fc9c719d03"],"depended_by":["sym-08f815d80cefd75cb3778d5c"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-d27bb0ecc07e0edfbb45db98","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `NomisIdentityProvider` in `src/libs/identity/providers/nomisIdentityProvider.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/providers/nomisIdentityProvider.ts","line_range":[23,156],"symbol_name":"NomisIdentityProvider::api","language":"typescript","module_resolution_path":"@/libs/identity/providers/nomisIdentityProvider"},"relationships":{"depends_on":["sym-02bb643864b28ec54f6bd102"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-4a18dbc9ae74cfc715acef2e","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["NomisIdentityProvider.getWalletScore method on exported class `NomisIdentityProvider` in `src/libs/identity/providers/nomisIdentityProvider.ts`.","TypeScript signature: (pubkey: string, walletAddress: string, options: NomisImportOptions) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/identity/providers/nomisIdentityProvider.ts","line_range":[24,61],"symbol_name":"NomisIdentityProvider.getWalletScore","language":"typescript","module_resolution_path":"@/libs/identity/providers/nomisIdentityProvider"},"relationships":{"depends_on":["sym-02bb643864b28ec54f6bd102"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-cfd05571ce888587707fdf21","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["NomisIdentityProvider.listIdentities method on exported class `NomisIdentityProvider` in `src/libs/identity/providers/nomisIdentityProvider.ts`.","TypeScript signature: (pubkey: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/identity/providers/nomisIdentityProvider.ts","line_range":[63,68],"symbol_name":"NomisIdentityProvider.listIdentities","language":"typescript","module_resolution_path":"@/libs/identity/providers/nomisIdentityProvider"},"relationships":{"depends_on":["sym-02bb643864b28ec54f6bd102"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-02bb643864b28ec54f6bd102","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["NomisIdentityProvider (class) exported from `src/libs/identity/providers/nomisIdentityProvider.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/providers/nomisIdentityProvider.ts","line_range":[23,156],"symbol_name":"NomisIdentityProvider","language":"typescript","module_resolution_path":"@/libs/identity/providers/nomisIdentityProvider"},"relationships":{"depends_on":["mod-92957ee0de7980fc9c719d03"],"depended_by":["sym-d27bb0ecc07e0edfbb45db98","sym-4a18dbc9ae74cfc715acef2e","sym-cfd05571ce888587707fdf21"],"implements":[],"extends":[],"calls":["sym-fcae6dca65ab92ce6e8c43b0"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-4c50bd826d82ec0f9d3122d5","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `CrossChainTools` in `src/libs/identity/tools/crosschain.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/tools/crosschain.ts","line_range":[8,185],"symbol_name":"CrossChainTools::api","language":"typescript","module_resolution_path":"@/libs/identity/tools/crosschain"},"relationships":{"depends_on":["sym-0d364798a0a06efaa91eb9d1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["axios","@kynesyslabs/demosdk/types","env:ETHERSCAN_API_KEY","env:HELIUS_API_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-ae837a9398f38a1b4ff93d6f","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CrossChainTools.getEthTransactionsByAddress method on exported class `CrossChainTools` in `src/libs/identity/tools/crosschain.ts`.","TypeScript signature: (address: string, chainId: number, page: unknown, offset: unknown, startBlock: unknown, endBlock: unknown) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/identity/tools/crosschain.ts","line_range":[23,79],"symbol_name":"CrossChainTools.getEthTransactionsByAddress","language":"typescript","module_resolution_path":"@/libs/identity/tools/crosschain"},"relationships":{"depends_on":["sym-0d364798a0a06efaa91eb9d1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["axios","@kynesyslabs/demosdk/types","env:ETHERSCAN_API_KEY","env:HELIUS_API_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-d893e963526d03d160b5c0be","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CrossChainTools.countEthTransactionsByAddress method on exported class `CrossChainTools` in `src/libs/identity/tools/crosschain.ts`.","TypeScript signature: (address: string, chainId: number) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/identity/tools/crosschain.ts","line_range":[87,105],"symbol_name":"CrossChainTools.countEthTransactionsByAddress","language":"typescript","module_resolution_path":"@/libs/identity/tools/crosschain"},"relationships":{"depends_on":["sym-0d364798a0a06efaa91eb9d1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["axios","@kynesyslabs/demosdk/types","env:ETHERSCAN_API_KEY","env:HELIUS_API_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-79fe6fcef068226cd66a69bb","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CrossChainTools.getSolanaTransactionsByAddress method on exported class `CrossChainTools` in `src/libs/identity/tools/crosschain.ts`.","TypeScript signature: (address: string, limit: unknown, before: string, until: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/identity/tools/crosschain.ts","line_range":[115,162],"symbol_name":"CrossChainTools.getSolanaTransactionsByAddress","language":"typescript","module_resolution_path":"@/libs/identity/tools/crosschain"},"relationships":{"depends_on":["sym-0d364798a0a06efaa91eb9d1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["axios","@kynesyslabs/demosdk/types","env:ETHERSCAN_API_KEY","env:HELIUS_API_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-6725cb4ea48529df75fd1445","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CrossChainTools.countSolanaTransactionsByAddress method on exported class `CrossChainTools` in `src/libs/identity/tools/crosschain.ts`.","TypeScript signature: (address: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/identity/tools/crosschain.ts","line_range":[169,184],"symbol_name":"CrossChainTools.countSolanaTransactionsByAddress","language":"typescript","module_resolution_path":"@/libs/identity/tools/crosschain"},"relationships":{"depends_on":["sym-0d364798a0a06efaa91eb9d1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["axios","@kynesyslabs/demosdk/types","env:ETHERSCAN_API_KEY","env:HELIUS_API_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-0d364798a0a06efaa91eb9d1","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CrossChainTools (class) exported from `src/libs/identity/tools/crosschain.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/tools/crosschain.ts","line_range":[8,185],"symbol_name":"CrossChainTools","language":"typescript","module_resolution_path":"@/libs/identity/tools/crosschain"},"relationships":{"depends_on":["mod-1b44d7490c1bab1a28faf13b"],"depended_by":["sym-4c50bd826d82ec0f9d3122d5","sym-ae837a9398f38a1b4ff93d6f","sym-d893e963526d03d160b5c0be","sym-79fe6fcef068226cd66a69bb","sym-6725cb4ea48529df75fd1445"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["axios","@kynesyslabs/demosdk/types","env:ETHERSCAN_API_KEY","env:HELIUS_API_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-3c9b9e66f6b1610394863a31","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `DiscordMessage` in `src/libs/identity/tools/discord.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/tools/discord.ts","line_range":[5,30],"symbol_name":"DiscordMessage::api","language":"typescript","module_resolution_path":"@/libs/identity/tools/discord"},"relationships":{"depends_on":["sym-8aee505c10e81a828d772a8f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["axios","url","env:DISCORD_API_URL","env:DISCORD_BOT_TOKEN"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-8aee505c10e81a828d772a8f","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DiscordMessage (type) exported from `src/libs/identity/tools/discord.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/tools/discord.ts","line_range":[5,30],"symbol_name":"DiscordMessage","language":"typescript","module_resolution_path":"@/libs/identity/tools/discord"},"relationships":{"depends_on":["mod-7656cd8b9f3c2f0776a9aaa8"],"depended_by":["sym-3c9b9e66f6b1610394863a31"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["axios","url","env:DISCORD_API_URL","env:DISCORD_BOT_TOKEN"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-2a25f06310b2ac9c6ba22a9a","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `Discord` in `src/libs/identity/tools/discord.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/tools/discord.ts","line_range":[32,167],"symbol_name":"Discord::api","language":"typescript","module_resolution_path":"@/libs/identity/tools/discord"},"relationships":{"depends_on":["sym-1251f543b194078832e93227"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["axios","url","env:DISCORD_API_URL","env:DISCORD_BOT_TOKEN"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-8c33d38f419fe8a74c58fbe1","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Discord.extractMessageDetails method on exported class `Discord` in `src/libs/identity/tools/discord.ts`.","TypeScript signature: (messageUrl: string) => {\n guildId: string\n channelId: string\n messageId: string\n }."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/tools/discord.ts","line_range":[66,114],"symbol_name":"Discord.extractMessageDetails","language":"typescript","module_resolution_path":"@/libs/identity/tools/discord"},"relationships":{"depends_on":["sym-1251f543b194078832e93227"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["axios","url","env:DISCORD_API_URL","env:DISCORD_BOT_TOKEN"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-d1c3b22359c1e904c5548b0c","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Discord.getMessageById method on exported class `Discord` in `src/libs/identity/tools/discord.ts`.","TypeScript signature: (channelId: string, messageId: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/identity/tools/discord.ts","line_range":[144,153],"symbol_name":"Discord.getMessageById","language":"typescript","module_resolution_path":"@/libs/identity/tools/discord"},"relationships":{"depends_on":["sym-1251f543b194078832e93227"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["axios","url","env:DISCORD_API_URL","env:DISCORD_BOT_TOKEN"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-cafb910907543389ada5a5f8","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Discord.getMessageByUrl method on exported class `Discord` in `src/libs/identity/tools/discord.ts`.","TypeScript signature: (messageUrl: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/identity/tools/discord.ts","line_range":[156,159],"symbol_name":"Discord.getMessageByUrl","language":"typescript","module_resolution_path":"@/libs/identity/tools/discord"},"relationships":{"depends_on":["sym-1251f543b194078832e93227"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["axios","url","env:DISCORD_API_URL","env:DISCORD_BOT_TOKEN"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-dacd66cc49bfa3589fd39daf","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Discord.getInstance method on exported class `Discord` in `src/libs/identity/tools/discord.ts`.","TypeScript signature: () => unknown."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/tools/discord.ts","line_range":[161,166],"symbol_name":"Discord.getInstance","language":"typescript","module_resolution_path":"@/libs/identity/tools/discord"},"relationships":{"depends_on":["sym-1251f543b194078832e93227"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["axios","url","env:DISCORD_API_URL","env:DISCORD_BOT_TOKEN"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-1251f543b194078832e93227","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Discord (class) exported from `src/libs/identity/tools/discord.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/tools/discord.ts","line_range":[32,167],"symbol_name":"Discord","language":"typescript","module_resolution_path":"@/libs/identity/tools/discord"},"relationships":{"depends_on":["mod-7656cd8b9f3c2f0776a9aaa8"],"depended_by":["sym-2a25f06310b2ac9c6ba22a9a","sym-8c33d38f419fe8a74c58fbe1","sym-d1c3b22359c1e904c5548b0c","sym-cafb910907543389ada5a5f8","sym-dacd66cc49bfa3589fd39daf"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["axios","url","env:DISCORD_API_URL","env:DISCORD_BOT_TOKEN"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-624bf6cdfe56ca8483217b9a","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `NomisWalletScorePayload` in `src/libs/identity/tools/nomis.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/tools/nomis.ts","line_range":[5,34],"symbol_name":"NomisWalletScorePayload::api","language":"typescript","module_resolution_path":"@/libs/identity/tools/nomis"},"relationships":{"depends_on":["sym-35058dc9401f299a3ecafdd9"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["axios","env:NOMIS_API_BASE_URL","env:NOMIS_API_KEY","env:NOMIS_API_TIMEOUT_MS","env:NOMIS_CLIENT_ID","env:NOMIS_DEFAULT_DEADLINE_OFFSET_SECONDS","env:NOMIS_DEFAULT_SCORE_TYPE"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-35058dc9401f299a3ecafdd9","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["NomisWalletScorePayload (interface) exported from `src/libs/identity/tools/nomis.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/tools/nomis.ts","line_range":[5,34],"symbol_name":"NomisWalletScorePayload","language":"typescript","module_resolution_path":"@/libs/identity/tools/nomis"},"relationships":{"depends_on":["mod-49040f43d8c17532e83ed67d"],"depended_by":["sym-624bf6cdfe56ca8483217b9a"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["axios","env:NOMIS_API_BASE_URL","env:NOMIS_API_KEY","env:NOMIS_API_TIMEOUT_MS","env:NOMIS_CLIENT_ID","env:NOMIS_DEFAULT_DEADLINE_OFFSET_SECONDS","env:NOMIS_DEFAULT_SCORE_TYPE"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-dcff225a257a375406e03bd6","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `NomisScoreRequestOptions` in `src/libs/identity/tools/nomis.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/tools/nomis.ts","line_range":[36,40],"symbol_name":"NomisScoreRequestOptions::api","language":"typescript","module_resolution_path":"@/libs/identity/tools/nomis"},"relationships":{"depends_on":["sym-a6d2f8c35523341aeef50317"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["axios","env:NOMIS_API_BASE_URL","env:NOMIS_API_KEY","env:NOMIS_API_TIMEOUT_MS","env:NOMIS_CLIENT_ID","env:NOMIS_DEFAULT_DEADLINE_OFFSET_SECONDS","env:NOMIS_DEFAULT_SCORE_TYPE"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-a6d2f8c35523341aeef50317","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["NomisScoreRequestOptions (interface) exported from `src/libs/identity/tools/nomis.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/tools/nomis.ts","line_range":[36,40],"symbol_name":"NomisScoreRequestOptions","language":"typescript","module_resolution_path":"@/libs/identity/tools/nomis"},"relationships":{"depends_on":["mod-49040f43d8c17532e83ed67d"],"depended_by":["sym-dcff225a257a375406e03bd6"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["axios","env:NOMIS_API_BASE_URL","env:NOMIS_API_KEY","env:NOMIS_API_TIMEOUT_MS","env:NOMIS_CLIENT_ID","env:NOMIS_DEFAULT_DEADLINE_OFFSET_SECONDS","env:NOMIS_DEFAULT_SCORE_TYPE"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-f7284b2c87bedd3283d87b7c","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `NomisApiClient` in `src/libs/identity/tools/nomis.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/tools/nomis.ts","line_range":[55,159],"symbol_name":"NomisApiClient::api","language":"typescript","module_resolution_path":"@/libs/identity/tools/nomis"},"relationships":{"depends_on":["sym-918f122ab3c74c4aed33144c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["axios","env:NOMIS_API_BASE_URL","env:NOMIS_API_KEY","env:NOMIS_API_TIMEOUT_MS","env:NOMIS_CLIENT_ID","env:NOMIS_DEFAULT_DEADLINE_OFFSET_SECONDS","env:NOMIS_DEFAULT_SCORE_TYPE"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-ca6bb0b08dd15d039112edce","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["NomisApiClient.getInstance method on exported class `NomisApiClient` in `src/libs/identity/tools/nomis.ts`.","TypeScript signature: () => NomisApiClient."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/tools/nomis.ts","line_range":[85,91],"symbol_name":"NomisApiClient.getInstance","language":"typescript","module_resolution_path":"@/libs/identity/tools/nomis"},"relationships":{"depends_on":["sym-918f122ab3c74c4aed33144c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["axios","env:NOMIS_API_BASE_URL","env:NOMIS_API_KEY","env:NOMIS_API_TIMEOUT_MS","env:NOMIS_CLIENT_ID","env:NOMIS_DEFAULT_DEADLINE_OFFSET_SECONDS","env:NOMIS_DEFAULT_SCORE_TYPE"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-ebc7f1171082535469f04f37","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["NomisApiClient.getWalletScore method on exported class `NomisApiClient` in `src/libs/identity/tools/nomis.ts`.","TypeScript signature: (address: string, options: NomisImportOptions) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/identity/tools/nomis.ts","line_range":[93,154],"symbol_name":"NomisApiClient.getWalletScore","language":"typescript","module_resolution_path":"@/libs/identity/tools/nomis"},"relationships":{"depends_on":["sym-918f122ab3c74c4aed33144c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["axios","env:NOMIS_API_BASE_URL","env:NOMIS_API_KEY","env:NOMIS_API_TIMEOUT_MS","env:NOMIS_CLIENT_ID","env:NOMIS_DEFAULT_DEADLINE_OFFSET_SECONDS","env:NOMIS_DEFAULT_SCORE_TYPE"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-918f122ab3c74c4aed33144c","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["NomisApiClient (class) exported from `src/libs/identity/tools/nomis.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/tools/nomis.ts","line_range":[55,159],"symbol_name":"NomisApiClient","language":"typescript","module_resolution_path":"@/libs/identity/tools/nomis"},"relationships":{"depends_on":["mod-49040f43d8c17532e83ed67d"],"depended_by":["sym-f7284b2c87bedd3283d87b7c","sym-ca6bb0b08dd15d039112edce","sym-ebc7f1171082535469f04f37"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["axios","env:NOMIS_API_BASE_URL","env:NOMIS_API_KEY","env:NOMIS_API_TIMEOUT_MS","env:NOMIS_CLIENT_ID","env:NOMIS_DEFAULT_DEADLINE_OFFSET_SECONDS","env:NOMIS_DEFAULT_SCORE_TYPE"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-67a715a261c2e12742293927","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `Twitter` in `src/libs/identity/tools/twitter.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/tools/twitter.ts","line_range":[407,589],"symbol_name":"Twitter::api","language":"typescript","module_resolution_path":"@/libs/identity/tools/twitter"},"relationships":{"depends_on":["sym-d70e965fb2fa15cbae8e28f6"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","axios","@kynesyslabs/demosdk/types","env:RAPID_API_HOST","env:RAPID_API_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-3006ba9f0477eb57baf64679","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Twitter.extractTweetDetails method on exported class `Twitter` in `src/libs/identity/tools/twitter.ts`.","TypeScript signature: (tweetUrl: string) => {\n username: string\n tweetId: string\n }."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/tools/twitter.ts","line_range":[420,465],"symbol_name":"Twitter.extractTweetDetails","language":"typescript","module_resolution_path":"@/libs/identity/tools/twitter"},"relationships":{"depends_on":["sym-d70e965fb2fa15cbae8e28f6"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","axios","@kynesyslabs/demosdk/types","env:RAPID_API_HOST","env:RAPID_API_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-20016088f1d08b5e28873771","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Twitter.makeRequest method on exported class `Twitter` in `src/libs/identity/tools/twitter.ts`.","TypeScript signature: (url: string, delay: unknown) => Promise>."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/identity/tools/twitter.ts","line_range":[473,485],"symbol_name":"Twitter.makeRequest","language":"typescript","module_resolution_path":"@/libs/identity/tools/twitter"},"relationships":{"depends_on":["sym-d70e965fb2fa15cbae8e28f6"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","axios","@kynesyslabs/demosdk/types","env:RAPID_API_HOST","env:RAPID_API_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-69f096bbd5c10a59ec215101","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Twitter.getTweetById method on exported class `Twitter` in `src/libs/identity/tools/twitter.ts`.","TypeScript signature: (tweetId: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/identity/tools/twitter.ts","line_range":[487,497],"symbol_name":"Twitter.getTweetById","language":"typescript","module_resolution_path":"@/libs/identity/tools/twitter"},"relationships":{"depends_on":["sym-d70e965fb2fa15cbae8e28f6"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","axios","@kynesyslabs/demosdk/types","env:RAPID_API_HOST","env:RAPID_API_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-584d8c1e5facf721d03d3b31","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Twitter.getTweetByUrl method on exported class `Twitter` in `src/libs/identity/tools/twitter.ts`.","TypeScript signature: (tweetUrl: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/identity/tools/twitter.ts","line_range":[499,502],"symbol_name":"Twitter.getTweetByUrl","language":"typescript","module_resolution_path":"@/libs/identity/tools/twitter"},"relationships":{"depends_on":["sym-d70e965fb2fa15cbae8e28f6"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","axios","@kynesyslabs/demosdk/types","env:RAPID_API_HOST","env:RAPID_API_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-d5c23b7e0348db000e139ff7","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Twitter.checkFollow method on exported class `Twitter` in `src/libs/identity/tools/twitter.ts`.","TypeScript signature: (username: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/identity/tools/twitter.ts","line_range":[504,516],"symbol_name":"Twitter.checkFollow","language":"typescript","module_resolution_path":"@/libs/identity/tools/twitter"},"relationships":{"depends_on":["sym-d70e965fb2fa15cbae8e28f6"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","axios","@kynesyslabs/demosdk/types","env:RAPID_API_HOST","env:RAPID_API_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-ac5e1756fdf78068d6983990","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Twitter.getTimeline method on exported class `Twitter` in `src/libs/identity/tools/twitter.ts`.","TypeScript signature: (username: string, userId: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/identity/tools/twitter.ts","line_range":[518,535],"symbol_name":"Twitter.getTimeline","language":"typescript","module_resolution_path":"@/libs/identity/tools/twitter"},"relationships":{"depends_on":["sym-d70e965fb2fa15cbae8e28f6"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","axios","@kynesyslabs/demosdk/types","env:RAPID_API_HOST","env:RAPID_API_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-c4426882c67f5c79e389ae4e","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Twitter.getFollowers method on exported class `Twitter` in `src/libs/identity/tools/twitter.ts`.","TypeScript signature: (username: string, userId: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/identity/tools/twitter.ts","line_range":[537,554],"symbol_name":"Twitter.getFollowers","language":"typescript","module_resolution_path":"@/libs/identity/tools/twitter"},"relationships":{"depends_on":["sym-d70e965fb2fa15cbae8e28f6"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","axios","@kynesyslabs/demosdk/types","env:RAPID_API_HOST","env:RAPID_API_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-9eaab80712308d2527f57103","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Twitter.checkIsBot method on exported class `Twitter` in `src/libs/identity/tools/twitter.ts`.","TypeScript signature: (username: string, userId: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/identity/tools/twitter.ts","line_range":[556,575],"symbol_name":"Twitter.checkIsBot","language":"typescript","module_resolution_path":"@/libs/identity/tools/twitter"},"relationships":{"depends_on":["sym-d70e965fb2fa15cbae8e28f6"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","axios","@kynesyslabs/demosdk/types","env:RAPID_API_HOST","env:RAPID_API_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-df06fb01fc8a797579c8ff4c","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Twitter.getInstance method on exported class `Twitter` in `src/libs/identity/tools/twitter.ts`.","TypeScript signature: () => unknown."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/tools/twitter.ts","line_range":[577,588],"symbol_name":"Twitter.getInstance","language":"typescript","module_resolution_path":"@/libs/identity/tools/twitter"},"relationships":{"depends_on":["sym-d70e965fb2fa15cbae8e28f6"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","axios","@kynesyslabs/demosdk/types","env:RAPID_API_HOST","env:RAPID_API_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-d70e965fb2fa15cbae8e28f6","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Twitter (class) exported from `src/libs/identity/tools/twitter.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/identity/tools/twitter.ts","line_range":[407,589],"symbol_name":"Twitter","language":"typescript","module_resolution_path":"@/libs/identity/tools/twitter"},"relationships":{"depends_on":["mod-a1bb18b05142b623b9fb8be4"],"depended_by":["sym-67a715a261c2e12742293927","sym-3006ba9f0477eb57baf64679","sym-20016088f1d08b5e28873771","sym-69f096bbd5c10a59ec215101","sym-584d8c1e5facf721d03d3b31","sym-d5c23b7e0348db000e139ff7","sym-ac5e1756fdf78068d6983990","sym-c4426882c67f5c79e389ae4e","sym-9eaab80712308d2527f57103","sym-df06fb01fc8a797579c8ff4c"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","axios","@kynesyslabs/demosdk/types","env:RAPID_API_HOST","env:RAPID_API_KEY"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-e5cb9daa8949710c5b7c5ece","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `L2PSBatchPayload` in `src/libs/l2ps/L2PSBatchAggregator.ts`.","L2PS Batch Payload Interface"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/L2PSBatchAggregator.ts","line_range":[19,40],"symbol_name":"L2PSBatchPayload::api","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSBatchAggregator"},"relationships":{"depends_on":["sym-a80634c6150e4ca0c1ff8c8e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption","crypto","@kynesyslabs/demosdk/types","env:L2PS_AGGREGATION_INTERVAL_MS","env:L2PS_CLEANUP_AGE_MS","env:L2PS_MAX_BATCH_SIZE","env:L2PS_MIN_BATCH_SIZE","env:L2PS_ZK_ENABLED"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 14-18","related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-a80634c6150e4ca0c1ff8c8e","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSBatchPayload (interface) exported from `src/libs/l2ps/L2PSBatchAggregator.ts`.","L2PS Batch Payload Interface"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/L2PSBatchAggregator.ts","line_range":[19,40],"symbol_name":"L2PSBatchPayload","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSBatchAggregator"},"relationships":{"depends_on":["mod-9b1b89cd5b264f022df908d4"],"depended_by":["sym-e5cb9daa8949710c5b7c5ece"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption","crypto","@kynesyslabs/demosdk/types","env:L2PS_AGGREGATION_INTERVAL_MS","env:L2PS_CLEANUP_AGE_MS","env:L2PS_MAX_BATCH_SIZE","env:L2PS_MIN_BATCH_SIZE","env:L2PS_ZK_ENABLED"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 14-18","related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-d8d437339e4ab9fc5178e4e3","level":"L3","extraction_confidence":0.87,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `L2PSBatchAggregator` in `src/libs/l2ps/L2PSBatchAggregator.ts`.","L2PS Batch Aggregator Service"],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/L2PSBatchAggregator.ts","line_range":[60,877],"symbol_name":"L2PSBatchAggregator::api","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSBatchAggregator"},"relationships":{"depends_on":["sym-e3f654b992e0b0bf06a68abf"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption","crypto","@kynesyslabs/demosdk/types","env:L2PS_AGGREGATION_INTERVAL_MS","env:L2PS_CLEANUP_AGE_MS","env:L2PS_MAX_BATCH_SIZE","env:L2PS_MIN_BATCH_SIZE","env:L2PS_ZK_ENABLED"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 42-59","related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-2c271a791fcb37bd28c35865","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSBatchAggregator.getInstance method on exported class `L2PSBatchAggregator` in `src/libs/l2ps/L2PSBatchAggregator.ts`.","TypeScript signature: () => L2PSBatchAggregator."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/L2PSBatchAggregator.ts","line_range":[126,131],"symbol_name":"L2PSBatchAggregator.getInstance","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSBatchAggregator"},"relationships":{"depends_on":["sym-e3f654b992e0b0bf06a68abf"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption","crypto","@kynesyslabs/demosdk/types","env:L2PS_AGGREGATION_INTERVAL_MS","env:L2PS_CLEANUP_AGE_MS","env:L2PS_MAX_BATCH_SIZE","env:L2PS_MIN_BATCH_SIZE","env:L2PS_ZK_ENABLED"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-4c05f83ad9df2e0a4bf4345b","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSBatchAggregator.start method on exported class `L2PSBatchAggregator` in `src/libs/l2ps/L2PSBatchAggregator.ts`.","TypeScript signature: () => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/L2PSBatchAggregator.ts","line_range":[141,163],"symbol_name":"L2PSBatchAggregator.start","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSBatchAggregator"},"relationships":{"depends_on":["sym-e3f654b992e0b0bf06a68abf"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption","crypto","@kynesyslabs/demosdk/types","env:L2PS_AGGREGATION_INTERVAL_MS","env:L2PS_CLEANUP_AGE_MS","env:L2PS_MAX_BATCH_SIZE","env:L2PS_MIN_BATCH_SIZE","env:L2PS_ZK_ENABLED"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-a02371360ecb1b189e94f7f7","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSBatchAggregator.stop method on exported class `L2PSBatchAggregator` in `src/libs/l2ps/L2PSBatchAggregator.ts`.","TypeScript signature: (timeoutMs: unknown) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/L2PSBatchAggregator.ts","line_range":[193,220],"symbol_name":"L2PSBatchAggregator.stop","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSBatchAggregator"},"relationships":{"depends_on":["sym-e3f654b992e0b0bf06a68abf"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption","crypto","@kynesyslabs/demosdk/types","env:L2PS_AGGREGATION_INTERVAL_MS","env:L2PS_CLEANUP_AGE_MS","env:L2PS_MAX_BATCH_SIZE","env:L2PS_MIN_BATCH_SIZE","env:L2PS_ZK_ENABLED"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-9b3d5d43fddffa465a2e6e3a","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSBatchAggregator.getStatistics method on exported class `L2PSBatchAggregator` in `src/libs/l2ps/L2PSBatchAggregator.ts`.","TypeScript signature: () => typeof this.stats."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/L2PSBatchAggregator.ts","line_range":[837,839],"symbol_name":"L2PSBatchAggregator.getStatistics","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSBatchAggregator"},"relationships":{"depends_on":["sym-e3f654b992e0b0bf06a68abf"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption","crypto","@kynesyslabs/demosdk/types","env:L2PS_AGGREGATION_INTERVAL_MS","env:L2PS_CLEANUP_AGE_MS","env:L2PS_MAX_BATCH_SIZE","env:L2PS_MIN_BATCH_SIZE","env:L2PS_ZK_ENABLED"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-ad193a03f24f1159ca71a32f","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSBatchAggregator.getStatus method on exported class `L2PSBatchAggregator` in `src/libs/l2ps/L2PSBatchAggregator.ts`.","TypeScript signature: () => {\n isRunning: boolean;\n isAggregating: boolean;\n intervalMs: number;\n joinedL2PSCount: number;\n }."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/L2PSBatchAggregator.ts","line_range":[846,858],"symbol_name":"L2PSBatchAggregator.getStatus","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSBatchAggregator"},"relationships":{"depends_on":["sym-e3f654b992e0b0bf06a68abf"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption","crypto","@kynesyslabs/demosdk/types","env:L2PS_AGGREGATION_INTERVAL_MS","env:L2PS_CLEANUP_AGE_MS","env:L2PS_MAX_BATCH_SIZE","env:L2PS_MIN_BATCH_SIZE","env:L2PS_ZK_ENABLED"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-1c98b6e9b9a0b4ef1cd0ecbc","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSBatchAggregator.forceAggregation method on exported class `L2PSBatchAggregator` in `src/libs/l2ps/L2PSBatchAggregator.ts`.","TypeScript signature: () => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/L2PSBatchAggregator.ts","line_range":[865,876],"symbol_name":"L2PSBatchAggregator.forceAggregation","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSBatchAggregator"},"relationships":{"depends_on":["sym-e3f654b992e0b0bf06a68abf"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption","crypto","@kynesyslabs/demosdk/types","env:L2PS_AGGREGATION_INTERVAL_MS","env:L2PS_CLEANUP_AGE_MS","env:L2PS_MAX_BATCH_SIZE","env:L2PS_MIN_BATCH_SIZE","env:L2PS_ZK_ENABLED"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-e3f654b992e0b0bf06a68abf","level":"L2","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSBatchAggregator (class) exported from `src/libs/l2ps/L2PSBatchAggregator.ts`.","L2PS Batch Aggregator Service"],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/L2PSBatchAggregator.ts","line_range":[60,877],"symbol_name":"L2PSBatchAggregator","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSBatchAggregator"},"relationships":{"depends_on":["mod-9b1b89cd5b264f022df908d4"],"depended_by":["sym-d8d437339e4ab9fc5178e4e3","sym-2c271a791fcb37bd28c35865","sym-4c05f83ad9df2e0a4bf4345b","sym-a02371360ecb1b189e94f7f7","sym-9b3d5d43fddffa465a2e6e3a","sym-ad193a03f24f1159ca71a32f","sym-1c98b6e9b9a0b4ef1cd0ecbc"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption","crypto","@kynesyslabs/demosdk/types","env:L2PS_AGGREGATION_INTERVAL_MS","env:L2PS_CLEANUP_AGE_MS","env:L2PS_MAX_BATCH_SIZE","env:L2PS_MIN_BATCH_SIZE","env:L2PS_ZK_ENABLED"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 42-59","related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-a0e1be197d6920a4bf0e1a91","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["discoverL2PSParticipants (function) exported from `src/libs/l2ps/L2PSConcurrentSync.ts`.","TypeScript signature: (peers: Peer[], l2psUids: string[]) => Promise>.","Discover L2PS participants among connected peers."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/L2PSConcurrentSync.ts","line_range":[26,82],"symbol_name":"discoverL2PSParticipants","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSConcurrentSync"},"relationships":{"depends_on":["mod-3f601c90582b585a8d9b6d4b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-45c0e0b348a5d87bab178a86"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 18-25","related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-a21c13338ed84dbc2259e0be","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["addL2PSParticipant (function) exported from `src/libs/l2ps/L2PSConcurrentSync.ts`.","TypeScript signature: (l2psUid: string, nodeId: string) => void.","Register a peer as an L2PS participant in the local cache"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/L2PSConcurrentSync.ts","line_range":[87,92],"symbol_name":"addL2PSParticipant","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSConcurrentSync"},"relationships":{"depends_on":["mod-3f601c90582b585a8d9b6d4b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 84-86","related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-43c1406a11c590e987931561","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["clearL2PSCache (function) exported from `src/libs/l2ps/L2PSConcurrentSync.ts`.","TypeScript signature: () => void.","Clear the participant cache (e.g. on network restart)"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/L2PSConcurrentSync.ts","line_range":[97,99],"symbol_name":"clearL2PSCache","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSConcurrentSync"},"relationships":{"depends_on":["mod-3f601c90582b585a8d9b6d4b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 94-96","related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-172932487433d3ea2b7e938b","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["syncL2PSWithPeer (function) exported from `src/libs/l2ps/L2PSConcurrentSync.ts`.","TypeScript signature: (peer: Peer, l2psUid: string) => Promise.","Synchronize L2PS mempool with a specific peer for a specific network."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/L2PSConcurrentSync.ts","line_range":[105,137],"symbol_name":"syncL2PSWithPeer","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSConcurrentSync"},"relationships":{"depends_on":["mod-3f601c90582b585a8d9b6d4b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 101-104","related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-45c0e0b348a5d87bab178a86","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["exchangeL2PSParticipation (function) exported from `src/libs/l2ps/L2PSConcurrentSync.ts`.","TypeScript signature: (peers: Peer[]) => Promise.","Exchange participation info with new peers (Gossip style)"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/L2PSConcurrentSync.ts","line_range":[142,145],"symbol_name":"exchangeL2PSParticipation","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSConcurrentSync"},"relationships":{"depends_on":["mod-3f601c90582b585a8d9b6d4b"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-a0e1be197d6920a4bf0e1a91"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 139-141","related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-17bce899312ef74e6bda04cf","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `L2PSConsensusResult` in `src/libs/l2ps/L2PSConsensus.ts`.","Result of applying L2PS proofs at consensus"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/L2PSConsensus.ts","line_range":[40,55],"symbol_name":"L2PSConsensusResult::api","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSConsensus"},"relationships":{"depends_on":["sym-7f56f2e032400167794c5cde"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 37-39","related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-7f56f2e032400167794c5cde","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSConsensusResult (interface) exported from `src/libs/l2ps/L2PSConsensus.ts`.","Result of applying L2PS proofs at consensus"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/L2PSConsensus.ts","line_range":[40,55],"symbol_name":"L2PSConsensusResult","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSConsensus"},"relationships":{"depends_on":["mod-0f4a4cd8bc5da602adf2a2fa"],"depended_by":["sym-17bce899312ef74e6bda04cf"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 37-39","related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-8bdfa293ce52a42f7652c988","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `L2PSConsensus` in `src/libs/l2ps/L2PSConsensus.ts`.","L2PS Consensus Integration"],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/L2PSConsensus.ts","line_range":[62,494],"symbol_name":"L2PSConsensus::api","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSConsensus"},"relationships":{"depends_on":["sym-dfc05adc455d203de748b3a8"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 57-61","related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-831248ff23fbc8a042573d3d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSConsensus.applyPendingProofs method on exported class `L2PSConsensus` in `src/libs/l2ps/L2PSConsensus.ts`.","TypeScript signature: (blockNumber: number, simulate: boolean) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/L2PSConsensus.ts","line_range":[130,187],"symbol_name":"L2PSConsensus.applyPendingProofs","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSConsensus"},"relationships":{"depends_on":["sym-dfc05adc455d203de748b3a8"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-fd41948d7ef0926f2abbef25","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSConsensus.rollbackProofsForBlock method on exported class `L2PSConsensus` in `src/libs/l2ps/L2PSConsensus.ts`.","TypeScript signature: (blockNumber: number) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/L2PSConsensus.ts","line_range":[417,475],"symbol_name":"L2PSConsensus.rollbackProofsForBlock","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSConsensus"},"relationships":{"depends_on":["sym-dfc05adc455d203de748b3a8"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-8e801cfbfaba0ef3a4bfc08d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSConsensus.getBlockStats method on exported class `L2PSConsensus` in `src/libs/l2ps/L2PSConsensus.ts`.","TypeScript signature: (blockNumber: number) => Promise<{\n proofsApplied: number\n totalEdits: number\n affectedAccountsCount: number\n }>."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/L2PSConsensus.ts","line_range":[480,493],"symbol_name":"L2PSConsensus.getBlockStats","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSConsensus"},"relationships":{"depends_on":["sym-dfc05adc455d203de748b3a8"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-dfc05adc455d203de748b3a8","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSConsensus (class) exported from `src/libs/l2ps/L2PSConsensus.ts`.","L2PS Consensus Integration"],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/L2PSConsensus.ts","line_range":[62,494],"symbol_name":"L2PSConsensus","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSConsensus"},"relationships":{"depends_on":["mod-0f4a4cd8bc5da602adf2a2fa"],"depended_by":["sym-8bdfa293ce52a42f7652c988","sym-831248ff23fbc8a042573d3d","sym-fd41948d7ef0926f2abbef25","sym-8e801cfbfaba0ef3a4bfc08d"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 57-61","related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-47afbbc071054930760a71ec","level":"L3","extraction_confidence":0.87,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `L2PSHashService` in `src/libs/l2ps/L2PSHashService.ts`.","L2PS Hash Generation Service"],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/L2PSHashService.ts","line_range":[29,525],"symbol_name":"L2PSHashService::api","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSHashService"},"relationships":{"depends_on":["sym-4b898ed7fd8e376c3dcc0fa4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/websdk","env:L2PS_HASH_INTERVAL_MS","env:OMNI_ENABLED","env:OMNI_TLS_ENABLED"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 14-28","related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-fa7bdf8575acec072c44d87e","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSHashService.getInstance method on exported class `L2PSHashService` in `src/libs/l2ps/L2PSHashService.ts`.","TypeScript signature: () => L2PSHashService."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/L2PSHashService.ts","line_range":[72,77],"symbol_name":"L2PSHashService.getInstance","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSHashService"},"relationships":{"depends_on":["sym-4b898ed7fd8e376c3dcc0fa4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/websdk","env:L2PS_HASH_INTERVAL_MS","env:OMNI_ENABLED","env:OMNI_TLS_ENABLED"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-5806cf014947d56b477072cf","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSHashService.start method on exported class `L2PSHashService` in `src/libs/l2ps/L2PSHashService.ts`.","TypeScript signature: () => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/L2PSHashService.ts","line_range":[87,130],"symbol_name":"L2PSHashService.start","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSHashService"},"relationships":{"depends_on":["sym-4b898ed7fd8e376c3dcc0fa4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/websdk","env:L2PS_HASH_INTERVAL_MS","env:OMNI_ENABLED","env:OMNI_TLS_ENABLED"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-ed3191a6a92de3cca3eca041","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSHashService.stop method on exported class `L2PSHashService` in `src/libs/l2ps/L2PSHashService.ts`.","TypeScript signature: (timeoutMs: unknown) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/L2PSHashService.ts","line_range":[139,166],"symbol_name":"L2PSHashService.stop","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSHashService"},"relationships":{"depends_on":["sym-4b898ed7fd8e376c3dcc0fa4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/websdk","env:L2PS_HASH_INTERVAL_MS","env:OMNI_ENABLED","env:OMNI_TLS_ENABLED"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-c99cdd731f091e7b6eede0a4","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSHashService.getStatistics method on exported class `L2PSHashService` in `src/libs/l2ps/L2PSHashService.ts`.","TypeScript signature: () => typeof this.stats."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/L2PSHashService.ts","line_range":[485,487],"symbol_name":"L2PSHashService.getStatistics","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSHashService"},"relationships":{"depends_on":["sym-4b898ed7fd8e376c3dcc0fa4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/websdk","env:L2PS_HASH_INTERVAL_MS","env:OMNI_ENABLED","env:OMNI_TLS_ENABLED"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-08d4f6621e5868c2e7298761","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSHashService.getStatus method on exported class `L2PSHashService` in `src/libs/l2ps/L2PSHashService.ts`.","TypeScript signature: () => {\n isRunning: boolean;\n isGenerating: boolean;\n intervalMs: number;\n joinedL2PSCount: number;\n }."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/L2PSHashService.ts","line_range":[494,506],"symbol_name":"L2PSHashService.getStatus","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSHashService"},"relationships":{"depends_on":["sym-4b898ed7fd8e376c3dcc0fa4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/websdk","env:L2PS_HASH_INTERVAL_MS","env:OMNI_ENABLED","env:OMNI_TLS_ENABLED"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-ac3b2be1cf2aa6ae932b5ca3","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSHashService.forceGeneration method on exported class `L2PSHashService` in `src/libs/l2ps/L2PSHashService.ts`.","TypeScript signature: () => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/L2PSHashService.ts","line_range":[513,524],"symbol_name":"L2PSHashService.forceGeneration","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSHashService"},"relationships":{"depends_on":["sym-4b898ed7fd8e376c3dcc0fa4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/websdk","env:L2PS_HASH_INTERVAL_MS","env:OMNI_ENABLED","env:OMNI_TLS_ENABLED"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-4b898ed7fd8e376c3dcc0fa4","level":"L2","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSHashService (class) exported from `src/libs/l2ps/L2PSHashService.ts`.","L2PS Hash Generation Service"],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/L2PSHashService.ts","line_range":[29,525],"symbol_name":"L2PSHashService","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSHashService"},"relationships":{"depends_on":["mod-cee54b249e5709ba015c9342"],"depended_by":["sym-47afbbc071054930760a71ec","sym-fa7bdf8575acec072c44d87e","sym-5806cf014947d56b477072cf","sym-ed3191a6a92de3cca3eca041","sym-c99cdd731f091e7b6eede0a4","sym-08d4f6621e5868c2e7298761","sym-ac3b2be1cf2aa6ae932b5ca3"],"implements":[],"extends":[],"calls":["sym-6680f554fcb4ede4631e60b2","sym-304eaa4f7c51cf3fdbf89bb0"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/websdk","env:L2PS_HASH_INTERVAL_MS","env:OMNI_ENABLED","env:OMNI_TLS_ENABLED"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 14-28","related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-ab9e1f208621fd5510cbde8d","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ProofCreationResult` in `src/libs/l2ps/L2PSProofManager.ts`.","Result of creating a proof"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/L2PSProofManager.ts","line_range":[50,55],"symbol_name":"ProofCreationResult::api","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSProofManager"},"relationships":{"depends_on":["sym-4291220b529d489dd8c2c906"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 47-49","related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-4291220b529d489dd8c2c906","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ProofCreationResult (interface) exported from `src/libs/l2ps/L2PSProofManager.ts`.","Result of creating a proof"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/L2PSProofManager.ts","line_range":[50,55],"symbol_name":"ProofCreationResult","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSProofManager"},"relationships":{"depends_on":["mod-c096e9d35a0fa633ff44cda0"],"depended_by":["sym-ab9e1f208621fd5510cbde8d"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 47-49","related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-e6ccef4d3d370fbaa7572337","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ProofApplicationResult` in `src/libs/l2ps/L2PSProofManager.ts`.","Result of applying a proof"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/L2PSProofManager.ts","line_range":[60,65],"symbol_name":"ProofApplicationResult::api","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSProofManager"},"relationships":{"depends_on":["sym-1589a1e584764f6eb8336b5a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 57-59","related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-1589a1e584764f6eb8336b5a","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ProofApplicationResult (interface) exported from `src/libs/l2ps/L2PSProofManager.ts`.","Result of applying a proof"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/L2PSProofManager.ts","line_range":[60,65],"symbol_name":"ProofApplicationResult","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSProofManager"},"relationships":{"depends_on":["mod-c096e9d35a0fa633ff44cda0"],"depended_by":["sym-e6ccef4d3d370fbaa7572337"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 57-59","related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-26ec3e6a23b13e6a7ed0966e","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `L2PSProofManager` in `src/libs/l2ps/L2PSProofManager.ts`.","L2PS Proof Manager"],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/L2PSProofManager.ts","line_range":[72,362],"symbol_name":"L2PSProofManager::api","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSProofManager"},"relationships":{"depends_on":["sym-b21a801e0939b0bf2b33d962"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 67-71","related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-0b71fee0d1ec6d5a74be7f4c","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSProofManager.createProof method on exported class `L2PSProofManager` in `src/libs/l2ps/L2PSProofManager.ts`.","TypeScript signature: (l2psUid: string, l1BatchHash: string, gcrEdits: GCREdit[], affectedAccountsCount: number, transactionCount: number, transactionHashes: string[]) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/L2PSProofManager.ts","line_range":[112,173],"symbol_name":"L2PSProofManager.createProof","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSProofManager"},"relationships":{"depends_on":["sym-b21a801e0939b0bf2b33d962"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-daa74c90db8a33dcb0ec2371","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSProofManager.getPendingProofs method on exported class `L2PSProofManager` in `src/libs/l2ps/L2PSProofManager.ts`.","TypeScript signature: (l2psUid: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/L2PSProofManager.ts","line_range":[182,194],"symbol_name":"L2PSProofManager.getPendingProofs","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSProofManager"},"relationships":{"depends_on":["sym-b21a801e0939b0bf2b33d962"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-2e2e66ddafbee3d7888773eb","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSProofManager.getProofsForBlock method on exported class `L2PSProofManager` in `src/libs/l2ps/L2PSProofManager.ts`.","TypeScript signature: (blockNumber: number) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/L2PSProofManager.ts","line_range":[202,213],"symbol_name":"L2PSProofManager.getProofsForBlock","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSProofManager"},"relationships":{"depends_on":["sym-b21a801e0939b0bf2b33d962"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-8044943db3ed1935a237d515","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSProofManager.verifyProof method on exported class `L2PSProofManager` in `src/libs/l2ps/L2PSProofManager.ts`.","TypeScript signature: (proof: L2PSProof) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/L2PSProofManager.ts","line_range":[221,258],"symbol_name":"L2PSProofManager.verifyProof","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSProofManager"},"relationships":{"depends_on":["sym-b21a801e0939b0bf2b33d962"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-6bb546b5a3ede7b2f84229b9","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSProofManager.markProofApplied method on exported class `L2PSProofManager` in `src/libs/l2ps/L2PSProofManager.ts`.","TypeScript signature: (proofId: number, blockNumber: number) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/L2PSProofManager.ts","line_range":[266,276],"symbol_name":"L2PSProofManager.markProofApplied","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSProofManager"},"relationships":{"depends_on":["sym-b21a801e0939b0bf2b33d962"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-11e0c9793af13b02d531305d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSProofManager.markProofRejected method on exported class `L2PSProofManager` in `src/libs/l2ps/L2PSProofManager.ts`.","TypeScript signature: (proofId: number, errorMessage: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/L2PSProofManager.ts","line_range":[284,294],"symbol_name":"L2PSProofManager.markProofRejected","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSProofManager"},"relationships":{"depends_on":["sym-b21a801e0939b0bf2b33d962"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-bf14541c9f03ae606b9284e0","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSProofManager.getProofByBatchHash method on exported class `L2PSProofManager` in `src/libs/l2ps/L2PSProofManager.ts`.","TypeScript signature: (l1BatchHash: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/L2PSProofManager.ts","line_range":[302,305],"symbol_name":"L2PSProofManager.getProofByBatchHash","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSProofManager"},"relationships":{"depends_on":["sym-b21a801e0939b0bf2b33d962"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-1c0cc65675b8167e5c4294e5","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSProofManager.getProofs method on exported class `L2PSProofManager` in `src/libs/l2ps/L2PSProofManager.ts`.","TypeScript signature: (l2psUid: string, status: L2PSProofStatus, limit: number) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/L2PSProofManager.ts","line_range":[315,335],"symbol_name":"L2PSProofManager.getProofs","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSProofManager"},"relationships":{"depends_on":["sym-b21a801e0939b0bf2b33d962"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-5db43f643de4a8334d9a9238","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSProofManager.getStats method on exported class `L2PSProofManager` in `src/libs/l2ps/L2PSProofManager.ts`.","TypeScript signature: (l2psUid: string) => Promise<{\n pending: number\n applied: number\n rejected: number\n total: number\n }>."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/L2PSProofManager.ts","line_range":[340,361],"symbol_name":"L2PSProofManager.getStats","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSProofManager"},"relationships":{"depends_on":["sym-b21a801e0939b0bf2b33d962"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-b21a801e0939b0bf2b33d962","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSProofManager (class) exported from `src/libs/l2ps/L2PSProofManager.ts`.","L2PS Proof Manager"],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/L2PSProofManager.ts","line_range":[72,362],"symbol_name":"L2PSProofManager","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSProofManager"},"relationships":{"depends_on":["mod-c096e9d35a0fa633ff44cda0"],"depended_by":["sym-26ec3e6a23b13e6a7ed0966e","sym-0b71fee0d1ec6d5a74be7f4c","sym-daa74c90db8a33dcb0ec2371","sym-2e2e66ddafbee3d7888773eb","sym-8044943db3ed1935a237d515","sym-6bb546b5a3ede7b2f84229b9","sym-11e0c9793af13b02d531305d","sym-bf14541c9f03ae606b9284e0","sym-1c0cc65675b8167e5c4294e5","sym-5db43f643de4a8334d9a9238"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 67-71","related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-27f8cb315a1d5f9c24544f69","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `L2PSExecutionResult` in `src/libs/l2ps/L2PSTransactionExecutor.ts`.","Result of executing an L2PS transaction"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/L2PSTransactionExecutor.ts","line_range":[38,49],"symbol_name":"L2PSExecutionResult::api","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSTransactionExecutor"},"relationships":{"depends_on":["sym-2de50e452bfe268a492fe5f9"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 35-37","related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-2de50e452bfe268a492fe5f9","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSExecutionResult (interface) exported from `src/libs/l2ps/L2PSTransactionExecutor.ts`.","Result of executing an L2PS transaction"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/L2PSTransactionExecutor.ts","line_range":[38,49],"symbol_name":"L2PSExecutionResult","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSTransactionExecutor"},"relationships":{"depends_on":["mod-3be22133d78983422a1da0d9"],"depended_by":["sym-27f8cb315a1d5f9c24544f69"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 35-37","related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-19d36c36107e8655af5d7fd3","level":"L3","extraction_confidence":0.87,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `L2PSTransactionExecutor` in `src/libs/l2ps/L2PSTransactionExecutor.ts`.","L2PS Transaction Executor (Unified State)"],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/L2PSTransactionExecutor.ts","line_range":[57,476],"symbol_name":"L2PSTransactionExecutor::api","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSTransactionExecutor"},"relationships":{"depends_on":["sym-c9ceccc766be21a537a05305"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 51-56","related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-93b168eacf2c938baa400513","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSTransactionExecutor.execute method on exported class `L2PSTransactionExecutor` in `src/libs/l2ps/L2PSTransactionExecutor.ts`.","TypeScript signature: (l2psUid: string, tx: Transaction, l1BatchHash: string, simulate: boolean) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/L2PSTransactionExecutor.ts","line_range":[120,157],"symbol_name":"L2PSTransactionExecutor.execute","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSTransactionExecutor"},"relationships":{"depends_on":["sym-c9ceccc766be21a537a05305"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-c307df6cb4b1b232420fa6c0","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSTransactionExecutor.recordTransaction method on exported class `L2PSTransactionExecutor` in `src/libs/l2ps/L2PSTransactionExecutor.ts`.","TypeScript signature: (l2psUid: string, tx: Transaction, l1BatchHash: string, encryptedHash: string, batchIndex: number, initialStatus: \"pending\" | \"batched\" | \"confirmed\" | \"failed\") => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/L2PSTransactionExecutor.ts","line_range":[317,350],"symbol_name":"L2PSTransactionExecutor.recordTransaction","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSTransactionExecutor"},"relationships":{"depends_on":["sym-c9ceccc766be21a537a05305"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-35fba28731561b9bc332a14a","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSTransactionExecutor.updateTransactionStatus method on exported class `L2PSTransactionExecutor` in `src/libs/l2ps/L2PSTransactionExecutor.ts`.","TypeScript signature: (txHash: string, status: \"pending\" | \"batched\" | \"confirmed\" | \"failed\", l1BlockNumber: number, message: string, l1BatchHash: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/L2PSTransactionExecutor.ts","line_range":[355,385],"symbol_name":"L2PSTransactionExecutor.updateTransactionStatus","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSTransactionExecutor"},"relationships":{"depends_on":["sym-c9ceccc766be21a537a05305"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-3f63d6b16b75553b0e99c85d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSTransactionExecutor.getAccountTransactions method on exported class `L2PSTransactionExecutor` in `src/libs/l2ps/L2PSTransactionExecutor.ts`.","TypeScript signature: (l2psUid: string, pubkey: string, limit: number, offset: number) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/L2PSTransactionExecutor.ts","line_range":[390,412],"symbol_name":"L2PSTransactionExecutor.getAccountTransactions","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSTransactionExecutor"},"relationships":{"depends_on":["sym-c9ceccc766be21a537a05305"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-c1f5d92afff2b3686df79483","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSTransactionExecutor.getTransactionByHash method on exported class `L2PSTransactionExecutor` in `src/libs/l2ps/L2PSTransactionExecutor.ts`.","TypeScript signature: (l2psUid: string, hash: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/L2PSTransactionExecutor.ts","line_range":[417,429],"symbol_name":"L2PSTransactionExecutor.getTransactionByHash","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSTransactionExecutor"},"relationships":{"depends_on":["sym-c9ceccc766be21a537a05305"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-954b6ffd923957113b0c728a","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSTransactionExecutor.getBalance method on exported class `L2PSTransactionExecutor` in `src/libs/l2ps/L2PSTransactionExecutor.ts`.","TypeScript signature: (pubkey: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/L2PSTransactionExecutor.ts","line_range":[435,438],"symbol_name":"L2PSTransactionExecutor.getBalance","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSTransactionExecutor"},"relationships":{"depends_on":["sym-c9ceccc766be21a537a05305"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-a4a1620ae3de23766ad15ad4","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSTransactionExecutor.getNonce method on exported class `L2PSTransactionExecutor` in `src/libs/l2ps/L2PSTransactionExecutor.ts`.","TypeScript signature: (pubkey: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/L2PSTransactionExecutor.ts","line_range":[443,446],"symbol_name":"L2PSTransactionExecutor.getNonce","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSTransactionExecutor"},"relationships":{"depends_on":["sym-c9ceccc766be21a537a05305"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-a822d74085d8f72397857b15","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSTransactionExecutor.getAccountState method on exported class `L2PSTransactionExecutor` in `src/libs/l2ps/L2PSTransactionExecutor.ts`.","TypeScript signature: (pubkey: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/L2PSTransactionExecutor.ts","line_range":[451,453],"symbol_name":"L2PSTransactionExecutor.getAccountState","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSTransactionExecutor"},"relationships":{"depends_on":["sym-c9ceccc766be21a537a05305"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-997a716aa0bbfede4eceda6a","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSTransactionExecutor.getNetworkStats method on exported class `L2PSTransactionExecutor` in `src/libs/l2ps/L2PSTransactionExecutor.ts`.","TypeScript signature: (l2psUid: string) => Promise<{\n totalTransactions: number\n pendingProofs: number\n appliedProofs: number\n }>."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/L2PSTransactionExecutor.ts","line_range":[458,475],"symbol_name":"L2PSTransactionExecutor.getNetworkStats","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSTransactionExecutor"},"relationships":{"depends_on":["sym-c9ceccc766be21a537a05305"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-c9ceccc766be21a537a05305","level":"L2","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSTransactionExecutor (class) exported from `src/libs/l2ps/L2PSTransactionExecutor.ts`.","L2PS Transaction Executor (Unified State)"],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/L2PSTransactionExecutor.ts","line_range":[57,476],"symbol_name":"L2PSTransactionExecutor","language":"typescript","module_resolution_path":"@/libs/l2ps/L2PSTransactionExecutor"},"relationships":{"depends_on":["mod-3be22133d78983422a1da0d9"],"depended_by":["sym-19d36c36107e8655af5d7fd3","sym-93b168eacf2c938baa400513","sym-c307df6cb4b1b232420fa6c0","sym-35fba28731561b9bc332a14a","sym-3f63d6b16b75553b0e99c85d","sym-c1f5d92afff2b3686df79483","sym-954b6ffd923957113b0c728a","sym-a4a1620ae3de23766ad15ad4","sym-a822d74085d8f72397857b15","sym-997a716aa0bbfede4eceda6a"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 51-56","related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-4de4b6def4e23443eeffc542","level":"L3","extraction_confidence":0.87,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `ParallelNetworks` in `src/libs/l2ps/parallelNetworks.ts`.","Manages parallel L2PS (Layer 2 Private System) networks."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/parallelNetworks.ts","line_range":[83,451],"symbol_name":"ParallelNetworks::api","language":"typescript","module_resolution_path":"@/libs/l2ps/parallelNetworks"},"relationships":{"depends_on":["sym-c6e8e3bf5cc44336d4a53bdd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption","node-forge","node:fs","node:path","@kynesyslabs/demosdk/l2ps","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 78-82","related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-29a2b1c7f0a8a39cdffe219b","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ParallelNetworks.getInstance method on exported class `ParallelNetworks` in `src/libs/l2ps/parallelNetworks.ts`.","TypeScript signature: () => ParallelNetworks."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/parallelNetworks.ts","line_range":[96,101],"symbol_name":"ParallelNetworks.getInstance","language":"typescript","module_resolution_path":"@/libs/l2ps/parallelNetworks"},"relationships":{"depends_on":["sym-c6e8e3bf5cc44336d4a53bdd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption","node-forge","node:fs","node:path","@kynesyslabs/demosdk/l2ps","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-aafd9c6d9db98cc7c5c0ea56","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ParallelNetworks.loadL2PS method on exported class `ParallelNetworks` in `src/libs/l2ps/parallelNetworks.ts`.","TypeScript signature: (uid: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/parallelNetworks.ts","line_range":[109,134],"symbol_name":"ParallelNetworks.loadL2PS","language":"typescript","module_resolution_path":"@/libs/l2ps/parallelNetworks"},"relationships":{"depends_on":["sym-c6e8e3bf5cc44336d4a53bdd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption","node-forge","node:fs","node:path","@kynesyslabs/demosdk/l2ps","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-aeaa314f6b50142cc32f9c3d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ParallelNetworks.getL2PS method on exported class `ParallelNetworks` in `src/libs/l2ps/parallelNetworks.ts`.","TypeScript signature: (uid: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/parallelNetworks.ts","line_range":[213,221],"symbol_name":"ParallelNetworks.getL2PS","language":"typescript","module_resolution_path":"@/libs/l2ps/parallelNetworks"},"relationships":{"depends_on":["sym-c6e8e3bf5cc44336d4a53bdd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption","node-forge","node:fs","node:path","@kynesyslabs/demosdk/l2ps","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-36b6cff10252161c12781dc3","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ParallelNetworks.getAllL2PSIds method on exported class `ParallelNetworks` in `src/libs/l2ps/parallelNetworks.ts`.","TypeScript signature: () => string[]."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/parallelNetworks.ts","line_range":[227,229],"symbol_name":"ParallelNetworks.getAllL2PSIds","language":"typescript","module_resolution_path":"@/libs/l2ps/parallelNetworks"},"relationships":{"depends_on":["sym-c6e8e3bf5cc44336d4a53bdd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption","node-forge","node:fs","node:path","@kynesyslabs/demosdk/l2ps","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-8f7c95d1f4cf847566e547d8","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ParallelNetworks.loadAllL2PS method on exported class `ParallelNetworks` in `src/libs/l2ps/parallelNetworks.ts`.","TypeScript signature: () => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/parallelNetworks.ts","line_range":[235,261],"symbol_name":"ParallelNetworks.loadAllL2PS","language":"typescript","module_resolution_path":"@/libs/l2ps/parallelNetworks"},"relationships":{"depends_on":["sym-c6e8e3bf5cc44336d4a53bdd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption","node-forge","node:fs","node:path","@kynesyslabs/demosdk/l2ps","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-4d0cd68dc95fdba20ca8881e","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ParallelNetworks.encryptTransaction method on exported class `ParallelNetworks` in `src/libs/l2ps/parallelNetworks.ts`.","TypeScript signature: (uid: string, tx: Transaction, senderIdentity: any) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/parallelNetworks.ts","line_range":[270,293],"symbol_name":"ParallelNetworks.encryptTransaction","language":"typescript","module_resolution_path":"@/libs/l2ps/parallelNetworks"},"relationships":{"depends_on":["sym-c6e8e3bf5cc44336d4a53bdd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption","node-forge","node:fs","node:path","@kynesyslabs/demosdk/l2ps","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-f1abc6862b1d0b36440db04a","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ParallelNetworks.decryptTransaction method on exported class `ParallelNetworks` in `src/libs/l2ps/parallelNetworks.ts`.","TypeScript signature: (uid: string, encryptedTx: L2PSTransaction) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/parallelNetworks.ts","line_range":[301,324],"symbol_name":"ParallelNetworks.decryptTransaction","language":"typescript","module_resolution_path":"@/libs/l2ps/parallelNetworks"},"relationships":{"depends_on":["sym-c6e8e3bf5cc44336d4a53bdd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption","node-forge","node:fs","node:path","@kynesyslabs/demosdk/l2ps","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-8536e2d1ed488580c2710e4b","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ParallelNetworks.isL2PSTransaction method on exported class `ParallelNetworks` in `src/libs/l2ps/parallelNetworks.ts`.","TypeScript signature: (tx: L2PSTransaction) => boolean."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/parallelNetworks.ts","line_range":[331,333],"symbol_name":"ParallelNetworks.isL2PSTransaction","language":"typescript","module_resolution_path":"@/libs/l2ps/parallelNetworks"},"relationships":{"depends_on":["sym-c6e8e3bf5cc44336d4a53bdd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption","node-forge","node:fs","node:path","@kynesyslabs/demosdk/l2ps","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-7dff1b0065281e707833c23b","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ParallelNetworks.getL2PSUidFromTransaction method on exported class `ParallelNetworks` in `src/libs/l2ps/parallelNetworks.ts`.","TypeScript signature: (tx: L2PSTransaction) => string | undefined."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/parallelNetworks.ts","line_range":[340,363],"symbol_name":"ParallelNetworks.getL2PSUidFromTransaction","language":"typescript","module_resolution_path":"@/libs/l2ps/parallelNetworks"},"relationships":{"depends_on":["sym-c6e8e3bf5cc44336d4a53bdd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption","node-forge","node:fs","node:path","@kynesyslabs/demosdk/l2ps","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-0cabe6285a709ea15e0bd36d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ParallelNetworks.processL2PSTransaction method on exported class `ParallelNetworks` in `src/libs/l2ps/parallelNetworks.ts`.","TypeScript signature: (tx: L2PSTransaction) => Promise<{\n success: boolean\n error?: string\n l2ps_uid?: string\n processed?: boolean\n }>."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/parallelNetworks.ts","line_range":[370,422],"symbol_name":"ParallelNetworks.processL2PSTransaction","language":"typescript","module_resolution_path":"@/libs/l2ps/parallelNetworks"},"relationships":{"depends_on":["sym-c6e8e3bf5cc44336d4a53bdd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption","node-forge","node:fs","node:path","@kynesyslabs/demosdk/l2ps","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-5b8f00d966b8ca663f148d64","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ParallelNetworks.getL2PSConfig method on exported class `ParallelNetworks` in `src/libs/l2ps/parallelNetworks.ts`.","TypeScript signature: (uid: string) => L2PSNodeConfig | undefined."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/parallelNetworks.ts","line_range":[429,431],"symbol_name":"ParallelNetworks.getL2PSConfig","language":"typescript","module_resolution_path":"@/libs/l2ps/parallelNetworks"},"relationships":{"depends_on":["sym-c6e8e3bf5cc44336d4a53bdd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption","node-forge","node:fs","node:path","@kynesyslabs/demosdk/l2ps","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-c41905143e6699f28eb26389","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ParallelNetworks.isL2PSLoaded method on exported class `ParallelNetworks` in `src/libs/l2ps/parallelNetworks.ts`.","TypeScript signature: (uid: string) => boolean."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/parallelNetworks.ts","line_range":[438,440],"symbol_name":"ParallelNetworks.isL2PSLoaded","language":"typescript","module_resolution_path":"@/libs/l2ps/parallelNetworks"},"relationships":{"depends_on":["sym-c6e8e3bf5cc44336d4a53bdd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption","node-forge","node:fs","node:path","@kynesyslabs/demosdk/l2ps","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-a21b4ff1c04b9173c57ae18b","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ParallelNetworks.unloadL2PS method on exported class `ParallelNetworks` in `src/libs/l2ps/parallelNetworks.ts`.","TypeScript signature: (uid: string) => boolean."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/parallelNetworks.ts","line_range":[447,450],"symbol_name":"ParallelNetworks.unloadL2PS","language":"typescript","module_resolution_path":"@/libs/l2ps/parallelNetworks"},"relationships":{"depends_on":["sym-c6e8e3bf5cc44336d4a53bdd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption","node-forge","node:fs","node:path","@kynesyslabs/demosdk/l2ps","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-c6e8e3bf5cc44336d4a53bdd","level":"L2","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ParallelNetworks (class) exported from `src/libs/l2ps/parallelNetworks.ts`.","Manages parallel L2PS (Layer 2 Private System) networks."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/parallelNetworks.ts","line_range":[83,451],"symbol_name":"ParallelNetworks","language":"typescript","module_resolution_path":"@/libs/l2ps/parallelNetworks"},"relationships":{"depends_on":["mod-ec09ae3ca7a100b5fa55556d"],"depended_by":["sym-4de4b6def4e23443eeffc542","sym-29a2b1c7f0a8a39cdffe219b","sym-aafd9c6d9db98cc7c5c0ea56","sym-aeaa314f6b50142cc32f9c3d","sym-36b6cff10252161c12781dc3","sym-8f7c95d1f4cf847566e547d8","sym-4d0cd68dc95fdba20ca8881e","sym-f1abc6862b1d0b36440db04a","sym-8536e2d1ed488580c2710e4b","sym-7dff1b0065281e707833c23b","sym-0cabe6285a709ea15e0bd36d","sym-5b8f00d966b8ca663f148d64","sym-c41905143e6699f28eb26389","sym-a21b4ff1c04b9173c57ae18b"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption","node-forge","node:fs","node:path","@kynesyslabs/demosdk/l2ps","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 78-82","related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-53d1518d6dfc17a1e9e5918d","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `EncryptedTransaction` in `src/libs/l2ps/types.ts`.","Encrypted transaction for L2PS (Layer 2 Parallel Subnets)"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/types.ts","line_range":[14,20],"symbol_name":"EncryptedTransaction::api","language":"typescript","module_resolution_path":"@/libs/l2ps/types"},"relationships":{"depends_on":["sym-890d5872f24fa2a22e27e2e3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 10-13","related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-890d5872f24fa2a22e27e2e3","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["EncryptedTransaction (interface) exported from `src/libs/l2ps/types.ts`.","Encrypted transaction for L2PS (Layer 2 Parallel Subnets)"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/types.ts","line_range":[14,20],"symbol_name":"EncryptedTransaction","language":"typescript","module_resolution_path":"@/libs/l2ps/types"},"relationships":{"depends_on":["mod-df3c25d58c0f2295ea451896"],"depended_by":["sym-53d1518d6dfc17a1e9e5918d"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 10-13","related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-b2396a7fda447bd25860da35","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `SubnetPayload` in `src/libs/l2ps/types.ts`.","Payload for subnet transactions"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/types.ts","line_range":[25,28],"symbol_name":"SubnetPayload::api","language":"typescript","module_resolution_path":"@/libs/l2ps/types"},"relationships":{"depends_on":["sym-10a3e239cb14bdadf9258ee2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 22-24","related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-10a3e239cb14bdadf9258ee2","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SubnetPayload (interface) exported from `src/libs/l2ps/types.ts`.","Payload for subnet transactions"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/types.ts","line_range":[25,28],"symbol_name":"SubnetPayload","language":"typescript","module_resolution_path":"@/libs/l2ps/types"},"relationships":{"depends_on":["mod-df3c25d58c0f2295ea451896"],"depended_by":["sym-b2396a7fda447bd25860da35"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 22-24","related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-b626e437b5fab56729c32df4","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["plonkVerifyBun (function) exported from `src/libs/l2ps/zk/BunPlonkWrapper.ts`.","TypeScript signature: (_vk_verifier: any, _publicSignals: any[], _proof: any, logger: any) => Promise.","Verify a PLONK proof (Bun-compatible, single-threaded)"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/zk/BunPlonkWrapper.ts","line_range":[150,197],"symbol_name":"plonkVerifyBun","language":"typescript","module_resolution_path":"@/libs/l2ps/zk/BunPlonkWrapper"},"relationships":{"depends_on":["mod-f9348034f6db4a0cbf002ce1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-734f496461dee58b5b6c7d3c"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["ffjavascript","js-sha3"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 144-149","related_adr":null,"last_modified":"2026-02-18T13:23:55.606Z","authors":[]}} +{"uuid":"sym-bf0f461e046c6b3eda7156b6","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `L2PSTransaction` in `src/libs/l2ps/zk/L2PSBatchProver.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/zk/L2PSBatchProver.ts","line_range":[44,50],"symbol_name":"L2PSTransaction::api","language":"typescript","module_resolution_path":"@/libs/l2ps/zk/L2PSBatchProver"},"relationships":{"depends_on":["sym-7bf31afd65c0bef1041e40b9"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["snarkjs","circomlibjs","node:path","node:fs","node:url","node:child_process","env:L2PS_ZK_USE_MAIN_THREAD"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-7bf31afd65c0bef1041e40b9","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSTransaction (interface) exported from `src/libs/l2ps/zk/L2PSBatchProver.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/zk/L2PSBatchProver.ts","line_range":[44,50],"symbol_name":"L2PSTransaction","language":"typescript","module_resolution_path":"@/libs/l2ps/zk/L2PSBatchProver"},"relationships":{"depends_on":["mod-ffe258ffef0cb8215e2647fe"],"depended_by":["sym-bf0f461e046c6b3eda7156b6"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["snarkjs","circomlibjs","node:path","node:fs","node:url","node:child_process","env:L2PS_ZK_USE_MAIN_THREAD"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-d253e7602287f9539e290e65","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `BatchProofInput` in `src/libs/l2ps/zk/L2PSBatchProver.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/zk/L2PSBatchProver.ts","line_range":[52,55],"symbol_name":"BatchProofInput::api","language":"typescript","module_resolution_path":"@/libs/l2ps/zk/L2PSBatchProver"},"relationships":{"depends_on":["sym-dc56c00366f404d1f5b2217d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["snarkjs","circomlibjs","node:path","node:fs","node:url","node:child_process","env:L2PS_ZK_USE_MAIN_THREAD"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-dc56c00366f404d1f5b2217d","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BatchProofInput (interface) exported from `src/libs/l2ps/zk/L2PSBatchProver.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/zk/L2PSBatchProver.ts","line_range":[52,55],"symbol_name":"BatchProofInput","language":"typescript","module_resolution_path":"@/libs/l2ps/zk/L2PSBatchProver"},"relationships":{"depends_on":["mod-ffe258ffef0cb8215e2647fe"],"depended_by":["sym-d253e7602287f9539e290e65"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["snarkjs","circomlibjs","node:path","node:fs","node:url","node:child_process","env:L2PS_ZK_USE_MAIN_THREAD"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-d8c9048521b2143c9e36d13a","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `BatchProof` in `src/libs/l2ps/zk/L2PSBatchProver.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/zk/L2PSBatchProver.ts","line_range":[57,64],"symbol_name":"BatchProof::api","language":"typescript","module_resolution_path":"@/libs/l2ps/zk/L2PSBatchProver"},"relationships":{"depends_on":["sym-5609925abe4d5877637c4336"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["snarkjs","circomlibjs","node:path","node:fs","node:url","node:child_process","env:L2PS_ZK_USE_MAIN_THREAD"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-5609925abe4d5877637c4336","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BatchProof (interface) exported from `src/libs/l2ps/zk/L2PSBatchProver.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/zk/L2PSBatchProver.ts","line_range":[57,64],"symbol_name":"BatchProof","language":"typescript","module_resolution_path":"@/libs/l2ps/zk/L2PSBatchProver"},"relationships":{"depends_on":["mod-ffe258ffef0cb8215e2647fe"],"depended_by":["sym-d8c9048521b2143c9e36d13a"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["snarkjs","circomlibjs","node:path","node:fs","node:url","node:child_process","env:L2PS_ZK_USE_MAIN_THREAD"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-d072989f47ace9a63dc8d63d","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `L2PSBatchProver` in `src/libs/l2ps/zk/L2PSBatchProver.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/zk/L2PSBatchProver.ts","line_range":[66,583],"symbol_name":"L2PSBatchProver::api","language":"typescript","module_resolution_path":"@/libs/l2ps/zk/L2PSBatchProver"},"relationships":{"depends_on":["sym-734f496461dee58b5b6c7d3c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["snarkjs","circomlibjs","node:path","node:fs","node:url","node:child_process","env:L2PS_ZK_USE_MAIN_THREAD"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-d0d37acf5a0af3d63226596c","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSBatchProver.initialize method on exported class `L2PSBatchProver` in `src/libs/l2ps/zk/L2PSBatchProver.ts`.","TypeScript signature: () => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/zk/L2PSBatchProver.ts","line_range":[92,113],"symbol_name":"L2PSBatchProver.initialize","language":"typescript","module_resolution_path":"@/libs/l2ps/zk/L2PSBatchProver"},"relationships":{"depends_on":["sym-734f496461dee58b5b6c7d3c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["snarkjs","circomlibjs","node:path","node:fs","node:url","node:child_process","env:L2PS_ZK_USE_MAIN_THREAD"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-cabfa6d9d630de5d0e430372","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSBatchProver.terminate method on exported class `L2PSBatchProver` in `src/libs/l2ps/zk/L2PSBatchProver.ts`.","TypeScript signature: () => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/zk/L2PSBatchProver.ts","line_range":[276,283],"symbol_name":"L2PSBatchProver.terminate","language":"typescript","module_resolution_path":"@/libs/l2ps/zk/L2PSBatchProver"},"relationships":{"depends_on":["sym-734f496461dee58b5b6c7d3c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["snarkjs","circomlibjs","node:path","node:fs","node:url","node:child_process","env:L2PS_ZK_USE_MAIN_THREAD"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-6335fab8f96515814167954f","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSBatchProver.getAvailableBatchSizes method on exported class `L2PSBatchProver` in `src/libs/l2ps/zk/L2PSBatchProver.ts`.","TypeScript signature: () => BatchSize[]."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/zk/L2PSBatchProver.ts","line_range":[288,293],"symbol_name":"L2PSBatchProver.getAvailableBatchSizes","language":"typescript","module_resolution_path":"@/libs/l2ps/zk/L2PSBatchProver"},"relationships":{"depends_on":["sym-734f496461dee58b5b6c7d3c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["snarkjs","circomlibjs","node:path","node:fs","node:url","node:child_process","env:L2PS_ZK_USE_MAIN_THREAD"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-8b01cc920d0bd06a1193a9a1","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSBatchProver.getMaxBatchSize method on exported class `L2PSBatchProver` in `src/libs/l2ps/zk/L2PSBatchProver.ts`.","TypeScript signature: () => number."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/zk/L2PSBatchProver.ts","line_range":[298,300],"symbol_name":"L2PSBatchProver.getMaxBatchSize","language":"typescript","module_resolution_path":"@/libs/l2ps/zk/L2PSBatchProver"},"relationships":{"depends_on":["sym-734f496461dee58b5b6c7d3c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["snarkjs","circomlibjs","node:path","node:fs","node:url","node:child_process","env:L2PS_ZK_USE_MAIN_THREAD"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-b1241e07fa5cdef9ba64f091","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSBatchProver.generateProof method on exported class `L2PSBatchProver` in `src/libs/l2ps/zk/L2PSBatchProver.ts`.","TypeScript signature: (input: BatchProofInput) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/zk/L2PSBatchProver.ts","line_range":[409,466],"symbol_name":"L2PSBatchProver.generateProof","language":"typescript","module_resolution_path":"@/libs/l2ps/zk/L2PSBatchProver"},"relationships":{"depends_on":["sym-734f496461dee58b5b6c7d3c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["snarkjs","circomlibjs","node:path","node:fs","node:url","node:child_process","env:L2PS_ZK_USE_MAIN_THREAD"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-bf445a40231c525d7586d079","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSBatchProver.verifyProof method on exported class `L2PSBatchProver` in `src/libs/l2ps/zk/L2PSBatchProver.ts`.","TypeScript signature: (batchProof: BatchProof) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/zk/L2PSBatchProver.ts","line_range":[531,563],"symbol_name":"L2PSBatchProver.verifyProof","language":"typescript","module_resolution_path":"@/libs/l2ps/zk/L2PSBatchProver"},"relationships":{"depends_on":["sym-734f496461dee58b5b6c7d3c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["snarkjs","circomlibjs","node:path","node:fs","node:url","node:child_process","env:L2PS_ZK_USE_MAIN_THREAD"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-370aa540920a40ace242b281","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSBatchProver.exportCalldata method on exported class `L2PSBatchProver` in `src/libs/l2ps/zk/L2PSBatchProver.ts`.","TypeScript signature: (batchProof: BatchProof) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/l2ps/zk/L2PSBatchProver.ts","line_range":[568,582],"symbol_name":"L2PSBatchProver.exportCalldata","language":"typescript","module_resolution_path":"@/libs/l2ps/zk/L2PSBatchProver"},"relationships":{"depends_on":["sym-734f496461dee58b5b6c7d3c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["snarkjs","circomlibjs","node:path","node:fs","node:url","node:child_process","env:L2PS_ZK_USE_MAIN_THREAD"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-734f496461dee58b5b6c7d3c","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSBatchProver (class) exported from `src/libs/l2ps/zk/L2PSBatchProver.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/zk/L2PSBatchProver.ts","line_range":[66,583],"symbol_name":"L2PSBatchProver","language":"typescript","module_resolution_path":"@/libs/l2ps/zk/L2PSBatchProver"},"relationships":{"depends_on":["mod-ffe258ffef0cb8215e2647fe"],"depended_by":["sym-d072989f47ace9a63dc8d63d","sym-d0d37acf5a0af3d63226596c","sym-cabfa6d9d630de5d0e430372","sym-6335fab8f96515814167954f","sym-8b01cc920d0bd06a1193a9a1","sym-b1241e07fa5cdef9ba64f091","sym-bf445a40231c525d7586d079","sym-370aa540920a40ace242b281"],"implements":[],"extends":[],"calls":["sym-b626e437b5fab56729c32df4"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["snarkjs","circomlibjs","node:path","node:fs","node:url","node:child_process","env:L2PS_ZK_USE_MAIN_THREAD"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-8b528a851f77e9286724f6be","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["default (export_default) exported from `src/libs/l2ps/zk/L2PSBatchProver.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/l2ps/zk/L2PSBatchProver.ts","line_range":[585,585],"symbol_name":"default","language":"typescript","module_resolution_path":"@/libs/l2ps/zk/L2PSBatchProver"},"relationships":{"depends_on":["mod-ffe258ffef0cb8215e2647fe"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["snarkjs","circomlibjs","node:path","node:fs","node:url","node:child_process","env:L2PS_ZK_USE_MAIN_THREAD"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-4c7db004c865013fef5a7c4e","level":"L3","extraction_confidence":0.87,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `AuthContext` in `src/libs/network/authContext.ts`.","Auth Context Module"],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/authContext.ts","line_range":[9,29],"symbol_name":"AuthContext::api","language":"typescript","module_resolution_path":"@/libs/network/authContext"},"relationships":{"depends_on":["sym-f4b66f329402ad34d35ebc2a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 1-7","related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-f4b66f329402ad34d35ebc2a","level":"L2","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["AuthContext (interface) exported from `src/libs/network/authContext.ts`.","Auth Context Module"],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/authContext.ts","line_range":[9,29],"symbol_name":"AuthContext","language":"typescript","module_resolution_path":"@/libs/network/authContext"},"relationships":{"depends_on":["mod-38cb481227a16780e055daf9"],"depended_by":["sym-4c7db004c865013fef5a7c4e"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 1-7","related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-b3b5244d7b171c0138f12fd5","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["setAuthContext (function) exported from `src/libs/network/authContext.ts`.","TypeScript signature: (req: Request, ctx: AuthContext) => void.","Set the auth context for a request"],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/authContext.ts","line_range":[41,43],"symbol_name":"setAuthContext","language":"typescript","module_resolution_path":"@/libs/network/authContext"},"relationships":{"depends_on":["mod-38cb481227a16780e055daf9"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-a30c004044ed694e7dd2baa2"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 37-40","related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-f4fdde41deaab86f8d60b115","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getAuthContext (function) exported from `src/libs/network/authContext.ts`.","TypeScript signature: (req: Request) => AuthContext.","Get the auth context for a request"],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/authContext.ts","line_range":[49,59],"symbol_name":"getAuthContext","language":"typescript","module_resolution_path":"@/libs/network/authContext"},"relationships":{"depends_on":["mod-38cb481227a16780e055daf9"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-8851eae25a7755afe330f85c"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 45-48","related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-0e15393966ef0943f000daf9","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `Handler` in `src/libs/network/bunServer.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/bunServer.ts","line_range":[5,5],"symbol_name":"Handler::api","language":"typescript","module_resolution_path":"@/libs/network/bunServer"},"relationships":{"depends_on":["sym-8d3749fede2b2e386f981c1a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun","node-fetch"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-8d3749fede2b2e386f981c1a","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Handler (type) exported from `src/libs/network/bunServer.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/bunServer.ts","line_range":[5,5],"symbol_name":"Handler","language":"typescript","module_resolution_path":"@/libs/network/bunServer"},"relationships":{"depends_on":["mod-93380aca3aab056f0dd2e4e0"],"depended_by":["sym-0e15393966ef0943f000daf9"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun","node-fetch"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-95ba42084419317913e1ccd7","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `Middleware` in `src/libs/network/bunServer.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/bunServer.ts","line_range":[6,10],"symbol_name":"Middleware::api","language":"typescript","module_resolution_path":"@/libs/network/bunServer"},"relationships":{"depends_on":["sym-7e71f23db4caf3a7432f457e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun","node-fetch"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-7e71f23db4caf3a7432f457e","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Middleware (type) exported from `src/libs/network/bunServer.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/bunServer.ts","line_range":[6,10],"symbol_name":"Middleware","language":"typescript","module_resolution_path":"@/libs/network/bunServer"},"relationships":{"depends_on":["mod-93380aca3aab056f0dd2e4e0"],"depended_by":["sym-95ba42084419317913e1ccd7"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun","node-fetch"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-9410a1ad8409298493e17d5f","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `BunServer` in `src/libs/network/bunServer.ts`."],"intent_vectors":["networking","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/bunServer.ts","line_range":[12,94],"symbol_name":"BunServer::api","language":"typescript","module_resolution_path":"@/libs/network/bunServer"},"relationships":{"depends_on":["sym-e7d959bae3d0df1109f3601a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun","node-fetch"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-2d6c4188b92343e2456b5d18","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BunServer.use method on exported class `BunServer` in `src/libs/network/bunServer.ts`.","TypeScript signature: (middleware: Middleware) => BunServer."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/bunServer.ts","line_range":[24,27],"symbol_name":"BunServer.use","language":"typescript","module_resolution_path":"@/libs/network/bunServer"},"relationships":{"depends_on":["sym-e7d959bae3d0df1109f3601a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun","node-fetch"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-a90e5e15eae22fe4adc31f37","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BunServer.get method on exported class `BunServer` in `src/libs/network/bunServer.ts`.","TypeScript signature: (path: string, handler: Handler) => BunServer."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/bunServer.ts","line_range":[29,32],"symbol_name":"BunServer.get","language":"typescript","module_resolution_path":"@/libs/network/bunServer"},"relationships":{"depends_on":["sym-e7d959bae3d0df1109f3601a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun","node-fetch"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-f3a8a6f36f83d6d9e247d7f2","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BunServer.post method on exported class `BunServer` in `src/libs/network/bunServer.ts`.","TypeScript signature: (path: string, handler: Handler) => BunServer."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/bunServer.ts","line_range":[34,37],"symbol_name":"BunServer.post","language":"typescript","module_resolution_path":"@/libs/network/bunServer"},"relationships":{"depends_on":["sym-e7d959bae3d0df1109f3601a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun","node-fetch"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-04c2ceef4c3f8944beac82f1","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BunServer.start method on exported class `BunServer` in `src/libs/network/bunServer.ts`.","TypeScript signature: () => Server."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/bunServer.ts","line_range":[77,86],"symbol_name":"BunServer.start","language":"typescript","module_resolution_path":"@/libs/network/bunServer"},"relationships":{"depends_on":["sym-e7d959bae3d0df1109f3601a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun","node-fetch"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-38b02a91ae9879e5549dc089","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BunServer.stop method on exported class `BunServer` in `src/libs/network/bunServer.ts`.","TypeScript signature: () => void."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/bunServer.ts","line_range":[88,93],"symbol_name":"BunServer.stop","language":"typescript","module_resolution_path":"@/libs/network/bunServer"},"relationships":{"depends_on":["sym-e7d959bae3d0df1109f3601a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun","node-fetch"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-e7d959bae3d0df1109f3601a","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BunServer (class) exported from `src/libs/network/bunServer.ts`."],"intent_vectors":["networking","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/bunServer.ts","line_range":[12,94],"symbol_name":"BunServer","language":"typescript","module_resolution_path":"@/libs/network/bunServer"},"relationships":{"depends_on":["mod-93380aca3aab056f0dd2e4e0"],"depended_by":["sym-9410a1ad8409298493e17d5f","sym-2d6c4188b92343e2456b5d18","sym-a90e5e15eae22fe4adc31f37","sym-f3a8a6f36f83d6d9e247d7f2","sym-04c2ceef4c3f8944beac82f1","sym-38b02a91ae9879e5549dc089"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun","node-fetch"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-7a01cccc7236812081d5703b","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["cors (function) exported from `src/libs/network/bunServer.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/bunServer.ts","line_range":[97,116],"symbol_name":"cors","language":"typescript","module_resolution_path":"@/libs/network/bunServer"},"relationships":{"depends_on":["mod-93380aca3aab056f0dd2e4e0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-8851eae25a7755afe330f85c"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun","node-fetch"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-08c52ead6283b6512a19e7b9","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["json (function) exported from `src/libs/network/bunServer.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/bunServer.ts","line_range":[118,124],"symbol_name":"json","language":"typescript","module_resolution_path":"@/libs/network/bunServer"},"relationships":{"depends_on":["mod-93380aca3aab056f0dd2e4e0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-8851eae25a7755afe330f85c"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun","node-fetch"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-929c634b12a7aa1ec2481909","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["text (function) exported from `src/libs/network/bunServer.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/bunServer.ts","line_range":[127,129],"symbol_name":"text","language":"typescript","module_resolution_path":"@/libs/network/bunServer"},"relationships":{"depends_on":["mod-93380aca3aab056f0dd2e4e0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun","node-fetch"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-37bb8c7ba0ff239db9cba19f","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["jsonResponse (function) exported from `src/libs/network/bunServer.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/bunServer.ts","line_range":[131,138],"symbol_name":"jsonResponse","language":"typescript","module_resolution_path":"@/libs/network/bunServer"},"relationships":{"depends_on":["mod-93380aca3aab056f0dd2e4e0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-8851eae25a7755afe330f85c"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["bun","node-fetch"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.953Z","authors":[]}} +{"uuid":"sym-4b139176b9d6042ba0754489","level":"L3","extraction_confidence":0.87,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `DTRManager` in `src/libs/network/dtr/dtrmanager.ts`.","DTR (Distributed Transaction Routing) Relay Retry Service"],"intent_vectors":["networking","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/dtr/dtrmanager.ts","line_range":[39,733],"symbol_name":"DTRManager::api","language":"typescript","module_resolution_path":"@/libs/network/dtr/dtrmanager"},"relationships":{"depends_on":["sym-f1d990a68c25fa7a7816bc3f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 25-38","related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-7c3e7a7f3f7f86ea2a9dbd52","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DTRManager.getInstance method on exported class `DTRManager` in `src/libs/network/dtr/dtrmanager.ts`.","TypeScript signature: () => DTRManager."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/dtr/dtrmanager.ts","line_range":[53,58],"symbol_name":"DTRManager.getInstance","language":"typescript","module_resolution_path":"@/libs/network/dtr/dtrmanager"},"relationships":{"depends_on":["sym-f1d990a68c25fa7a7816bc3f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-5c7189605b0469a06fc45888","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DTRManager.poolSize method on exported class `DTRManager` in `src/libs/network/dtr/dtrmanager.ts`.","TypeScript signature: () => number."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/dtr/dtrmanager.ts","line_range":[60,62],"symbol_name":"DTRManager.poolSize","language":"typescript","module_resolution_path":"@/libs/network/dtr/dtrmanager"},"relationships":{"depends_on":["sym-f1d990a68c25fa7a7816bc3f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-57f1e8814b776abf7cfcb369","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DTRManager.isWaitingForBlock method on exported class `DTRManager` in `src/libs/network/dtr/dtrmanager.ts`.","TypeScript signature: () => boolean."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/dtr/dtrmanager.ts","line_range":[64,66],"symbol_name":"DTRManager.isWaitingForBlock","language":"typescript","module_resolution_path":"@/libs/network/dtr/dtrmanager"},"relationships":{"depends_on":["sym-f1d990a68c25fa7a7816bc3f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-328f9da16ee12c0b54814b90","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DTRManager.releaseDTRWaiter method on exported class `DTRManager` in `src/libs/network/dtr/dtrmanager.ts`.","TypeScript signature: (block: Block) => unknown."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/dtr/dtrmanager.ts","line_range":[74,80],"symbol_name":"DTRManager.releaseDTRWaiter","language":"typescript","module_resolution_path":"@/libs/network/dtr/dtrmanager"},"relationships":{"depends_on":["sym-f1d990a68c25fa7a7816bc3f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-2b3c856a5d7167c51953c23a","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DTRManager.start method on exported class `DTRManager` in `src/libs/network/dtr/dtrmanager.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/dtr/dtrmanager.ts","line_range":[88,101],"symbol_name":"DTRManager.start","language":"typescript","module_resolution_path":"@/libs/network/dtr/dtrmanager"},"relationships":{"depends_on":["sym-f1d990a68c25fa7a7816bc3f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-810d19a7dd2eb70806b98d41","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DTRManager.stop method on exported class `DTRManager` in `src/libs/network/dtr/dtrmanager.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/dtr/dtrmanager.ts","line_range":[109,125],"symbol_name":"DTRManager.stop","language":"typescript","module_resolution_path":"@/libs/network/dtr/dtrmanager"},"relationships":{"depends_on":["sym-f1d990a68c25fa7a7816bc3f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-c2ac65367e7703953b94bddc","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DTRManager.relayTransactions method on exported class `DTRManager` in `src/libs/network/dtr/dtrmanager.ts`.","TypeScript signature: (validator: Peer, payload: ValidityData[]) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/dtr/dtrmanager.ts","line_range":[234,283],"symbol_name":"DTRManager.relayTransactions","language":"typescript","module_resolution_path":"@/libs/network/dtr/dtrmanager"},"relationships":{"depends_on":["sym-f1d990a68c25fa7a7816bc3f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-4324855c7c8b5a00929d7aca","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DTRManager.receiveRelayedTransactions method on exported class `DTRManager` in `src/libs/network/dtr/dtrmanager.ts`.","TypeScript signature: (payloads: ValidityData[]) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/dtr/dtrmanager.ts","line_range":[391,404],"symbol_name":"DTRManager.receiveRelayedTransactions","language":"typescript","module_resolution_path":"@/libs/network/dtr/dtrmanager"},"relationships":{"depends_on":["sym-f1d990a68c25fa7a7816bc3f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-6fbeed409b0c14bea654142d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DTRManager.inConsensusHandler method on exported class `DTRManager` in `src/libs/network/dtr/dtrmanager.ts`.","TypeScript signature: (validityData: ValidityData) => unknown."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/dtr/dtrmanager.ts","line_range":[413,442],"symbol_name":"DTRManager.inConsensusHandler","language":"typescript","module_resolution_path":"@/libs/network/dtr/dtrmanager"},"relationships":{"depends_on":["sym-f1d990a68c25fa7a7816bc3f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-3ef5edcc5ab93bfdbb6ea4ce","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DTRManager.receiveRelayedTransaction method on exported class `DTRManager` in `src/libs/network/dtr/dtrmanager.ts`.","TypeScript signature: (validityData: ValidityData) => unknown."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/dtr/dtrmanager.ts","line_range":[451,656],"symbol_name":"DTRManager.receiveRelayedTransaction","language":"typescript","module_resolution_path":"@/libs/network/dtr/dtrmanager"},"relationships":{"depends_on":["sym-f1d990a68c25fa7a7816bc3f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-cdfca17855f38ef00b83818e","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DTRManager.waitForBlockThenRelay method on exported class `DTRManager` in `src/libs/network/dtr/dtrmanager.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/dtr/dtrmanager.ts","line_range":[658,732],"symbol_name":"DTRManager.waitForBlockThenRelay","language":"typescript","module_resolution_path":"@/libs/network/dtr/dtrmanager"},"relationships":{"depends_on":["sym-f1d990a68c25fa7a7816bc3f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-f1d990a68c25fa7a7816bc3f","level":"L2","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DTRManager (class) exported from `src/libs/network/dtr/dtrmanager.ts`.","DTR (Distributed Transaction Routing) Relay Retry Service"],"intent_vectors":["networking","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/dtr/dtrmanager.ts","line_range":[39,733],"symbol_name":"DTRManager","language":"typescript","module_resolution_path":"@/libs/network/dtr/dtrmanager"},"relationships":{"depends_on":["mod-a8a39a4fb87704dbcb720225"],"depended_by":["sym-4b139176b9d6042ba0754489","sym-7c3e7a7f3f7f86ea2a9dbd52","sym-5c7189605b0469a06fc45888","sym-57f1e8814b776abf7cfcb369","sym-328f9da16ee12c0b54814b90","sym-2b3c856a5d7167c51953c23a","sym-810d19a7dd2eb70806b98d41","sym-c2ac65367e7703953b94bddc","sym-4324855c7c8b5a00929d7aca","sym-6fbeed409b0c14bea654142d","sym-3ef5edcc5ab93bfdbb6ea4ce","sym-cdfca17855f38ef00b83818e"],"implements":[],"extends":[],"calls":["sym-6680f554fcb4ede4631e60b2","sym-45a76b1716a67708f11a0909","sym-304eaa4f7c51cf3fdbf89bb0"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 25-38","related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-1040e8086b2451ce433c4283","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `ServerHandlers` in `src/libs/network/endpointHandlers.ts`."],"intent_vectors":["networking","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/endpointHandlers.ts","line_range":[87,890],"symbol_name":"ServerHandlers::api","language":"typescript","module_resolution_path":"@/libs/network/endpointHandlers"},"relationships":{"depends_on":["sym-7fe7aed70ba7c171a10dce16"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/bridge"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-935db248e7fb60e78c118a28","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ServerHandlers.handleValidateTransaction method on exported class `ServerHandlers` in `src/libs/network/endpointHandlers.ts`.","TypeScript signature: (tx: Transaction, sender: string) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/endpointHandlers.ts","line_range":[89,180],"symbol_name":"ServerHandlers.handleValidateTransaction","language":"typescript","module_resolution_path":"@/libs/network/endpointHandlers"},"relationships":{"depends_on":["sym-7fe7aed70ba7c171a10dce16"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/bridge"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-1716ce2cda401faf8f60ca09","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ServerHandlers.handleExecuteTransaction method on exported class `ServerHandlers` in `src/libs/network/endpointHandlers.ts`.","TypeScript signature: (validatedData: ValidityData, sender: string) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/endpointHandlers.ts","line_range":[185,600],"symbol_name":"ServerHandlers.handleExecuteTransaction","language":"typescript","module_resolution_path":"@/libs/network/endpointHandlers"},"relationships":{"depends_on":["sym-7fe7aed70ba7c171a10dce16"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/bridge"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-d654ce4f484f119070a59599","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ServerHandlers.handleWeb2Request method on exported class `ServerHandlers` in `src/libs/network/endpointHandlers.ts`.","TypeScript signature: (rawPayload: IWeb2Payload) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/endpointHandlers.ts","line_range":[603,609],"symbol_name":"ServerHandlers.handleWeb2Request","language":"typescript","module_resolution_path":"@/libs/network/endpointHandlers"},"relationships":{"depends_on":["sym-7fe7aed70ba7c171a10dce16"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/bridge"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-29ad19f6194b9d5dc5b3d151","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ServerHandlers.handleXMChainOperation method on exported class `ServerHandlers` in `src/libs/network/endpointHandlers.ts`.","TypeScript signature: (xmscript: XMScript) => unknown."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/endpointHandlers.ts","line_range":[612,627],"symbol_name":"ServerHandlers.handleXMChainOperation","language":"typescript","module_resolution_path":"@/libs/network/endpointHandlers"},"relationships":{"depends_on":["sym-7fe7aed70ba7c171a10dce16"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/bridge"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-b3e914af9f4c1670dfd90569","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ServerHandlers.handleXMChainSignedPayload method on exported class `ServerHandlers` in `src/libs/network/endpointHandlers.ts`.","TypeScript signature: (content: any) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/endpointHandlers.ts","line_range":[630,632],"symbol_name":"ServerHandlers.handleXMChainSignedPayload","language":"typescript","module_resolution_path":"@/libs/network/endpointHandlers"},"relationships":{"depends_on":["sym-7fe7aed70ba7c171a10dce16"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/bridge"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-885fad8121718032d1888dc8","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ServerHandlers.handleDemosWorkRequest method on exported class `ServerHandlers` in `src/libs/network/endpointHandlers.ts`.","TypeScript signature: (content: DemoScript) => unknown."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/endpointHandlers.ts","line_range":[635,639],"symbol_name":"ServerHandlers.handleDemosWorkRequest","language":"typescript","module_resolution_path":"@/libs/network/endpointHandlers"},"relationships":{"depends_on":["sym-7fe7aed70ba7c171a10dce16"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/bridge"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-598cda53c818b18f719f656d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ServerHandlers.handleSubnetTx method on exported class `ServerHandlers` in `src/libs/network/endpointHandlers.ts`.","TypeScript signature: (content: L2PSTransaction) => unknown."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/endpointHandlers.ts","line_range":[642,646],"symbol_name":"ServerHandlers.handleSubnetTx","language":"typescript","module_resolution_path":"@/libs/network/endpointHandlers"},"relationships":{"depends_on":["sym-7fe7aed70ba7c171a10dce16"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/bridge"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-9dbdd68a5833762c291f7b28","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ServerHandlers.handleL2PS method on exported class `ServerHandlers` in `src/libs/network/endpointHandlers.ts`.","TypeScript signature: (content: any) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/endpointHandlers.ts","line_range":[649,651],"symbol_name":"ServerHandlers.handleL2PS","language":"typescript","module_resolution_path":"@/libs/network/endpointHandlers"},"relationships":{"depends_on":["sym-7fe7aed70ba7c171a10dce16"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/bridge"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-0fa95cdb5dcb0b9e6f103b95","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ServerHandlers.handleConsensusRequest method on exported class `ServerHandlers` in `src/libs/network/endpointHandlers.ts`.","TypeScript signature: (request: ConsensusRequest) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/endpointHandlers.ts","line_range":[653,725],"symbol_name":"ServerHandlers.handleConsensusRequest","language":"typescript","module_resolution_path":"@/libs/network/endpointHandlers"},"relationships":{"depends_on":["sym-7fe7aed70ba7c171a10dce16"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/bridge"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-51083b6c8157d81641a32e99","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ServerHandlers.handleMessage method on exported class `ServerHandlers` in `src/libs/network/endpointHandlers.ts`.","TypeScript signature: (content: any) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/endpointHandlers.ts","line_range":[727,734],"symbol_name":"ServerHandlers.handleMessage","language":"typescript","module_resolution_path":"@/libs/network/endpointHandlers"},"relationships":{"depends_on":["sym-7fe7aed70ba7c171a10dce16"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/bridge"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-b1daa6c5d31676598fdc9c3c","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ServerHandlers.handleStorage method on exported class `ServerHandlers` in `src/libs/network/endpointHandlers.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/endpointHandlers.ts","line_range":[736,743],"symbol_name":"ServerHandlers.handleStorage","language":"typescript","module_resolution_path":"@/libs/network/endpointHandlers"},"relationships":{"depends_on":["sym-7fe7aed70ba7c171a10dce16"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/bridge"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-2a10d01fea3eaadd6e2bc6d7","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ServerHandlers.handleMempool method on exported class `ServerHandlers` in `src/libs/network/endpointHandlers.ts`.","TypeScript signature: (txs: Transaction[]) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/endpointHandlers.ts","line_range":[745,770],"symbol_name":"ServerHandlers.handleMempool","language":"typescript","module_resolution_path":"@/libs/network/endpointHandlers"},"relationships":{"depends_on":["sym-7fe7aed70ba7c171a10dce16"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/bridge"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-d0b0e6f4f8117ae02923de11","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ServerHandlers.handlePeerlist method on exported class `ServerHandlers` in `src/libs/network/endpointHandlers.ts`.","TypeScript signature: (content: Peer[]) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/endpointHandlers.ts","line_range":[773,793],"symbol_name":"ServerHandlers.handlePeerlist","language":"typescript","module_resolution_path":"@/libs/network/endpointHandlers"},"relationships":{"depends_on":["sym-7fe7aed70ba7c171a10dce16"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/bridge"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-3e7ea7f35aa9b839723b2c1c","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ServerHandlers.handleL2PSHashUpdate method on exported class `ServerHandlers` in `src/libs/network/endpointHandlers.ts`.","TypeScript signature: (tx: Transaction) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/endpointHandlers.ts","line_range":[805,889],"symbol_name":"ServerHandlers.handleL2PSHashUpdate","language":"typescript","module_resolution_path":"@/libs/network/endpointHandlers"},"relationships":{"depends_on":["sym-7fe7aed70ba7c171a10dce16"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/bridge"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-7fe7aed70ba7c171a10dce16","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ServerHandlers (class) exported from `src/libs/network/endpointHandlers.ts`."],"intent_vectors":["networking","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/endpointHandlers.ts","line_range":[87,890],"symbol_name":"ServerHandlers","language":"typescript","module_resolution_path":"@/libs/network/endpointHandlers"},"relationships":{"depends_on":["mod-455d4fbaf89d273aa029864d"],"depended_by":["sym-1040e8086b2451ce433c4283","sym-935db248e7fb60e78c118a28","sym-1716ce2cda401faf8f60ca09","sym-d654ce4f484f119070a59599","sym-29ad19f6194b9d5dc5b3d151","sym-b3e914af9f4c1670dfd90569","sym-885fad8121718032d1888dc8","sym-598cda53c818b18f719f656d","sym-9dbdd68a5833762c291f7b28","sym-0fa95cdb5dcb0b9e6f103b95","sym-51083b6c8157d81641a32e99","sym-b1daa6c5d31676598fdc9c3c","sym-2a10d01fea3eaadd6e2bc6d7","sym-d0b0e6f4f8117ae02923de11","sym-3e7ea7f35aa9b839723b2c1c"],"implements":[],"extends":[],"calls":["sym-a1714406759fda051e877a2e","sym-45a76b1716a67708f11a0909"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","lodash","@kynesyslabs/demosdk/websdk","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/bridge"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-cf9b266780ee9759d2183fdb","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["serverRpcBun (re_export) exported from `src/libs/network/index.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/index.ts","line_range":[12,12],"symbol_name":"serverRpcBun","language":"typescript","module_resolution_path":"@/libs/network/index"},"relationships":{"depends_on":["mod-4e2125f21e95a0201a05fc85"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-fc2927a008b8b003e851d59c","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["emptyResponse (re_export) exported from `src/libs/network/index.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/index.ts","line_range":[12,12],"symbol_name":"emptyResponse","language":"typescript","module_resolution_path":"@/libs/network/index"},"relationships":{"depends_on":["mod-4e2125f21e95a0201a05fc85"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-c2223eb98e7971a5a84a534e","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `AuthMessage` in `src/libs/network/manageAuth.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/manageAuth.ts","line_range":[7,7],"symbol_name":"AuthMessage::api","language":"typescript","module_resolution_path":"@/libs/network/manageAuth"},"relationships":{"depends_on":["sym-3cf8c47572a9e0e64d4a2a13"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-3cf8c47572a9e0e64d4a2a13","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["AuthMessage (type) exported from `src/libs/network/manageAuth.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/manageAuth.ts","line_range":[7,7],"symbol_name":"AuthMessage","language":"typescript","module_resolution_path":"@/libs/network/manageAuth"},"relationships":{"depends_on":["mod-efd6ff5fba09516480c9e2e4"],"depended_by":["sym-c2223eb98e7971a5a84a534e"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-813e158b993d299057988303","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["manageAuth (function) exported from `src/libs/network/manageAuth.ts`.","TypeScript signature: (data: any) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/manageAuth.ts","line_range":[9,58],"symbol_name":"manageAuth","language":"typescript","module_resolution_path":"@/libs/network/manageAuth"},"relationships":{"depends_on":["mod-efd6ff5fba09516480c9e2e4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node-forge","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-8df316cdf3ef951ce8023630","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["manageBridges (function) exported from `src/libs/network/manageBridge.ts`.","TypeScript signature: (sender: string, payload: BridgePayload) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/manageBridge.ts","line_range":[13,43],"symbol_name":"manageBridges","language":"typescript","module_resolution_path":"@/libs/network/manageBridge"},"relationships":{"depends_on":["mod-2b2cb5f2f246c796e349f6aa"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-8a00aee2ef2d139bfb66e5af"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","lodash","rubic-sdk"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"sym-187664cf6efeb1c5567ce3c8","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ConsensusMethod` in `src/libs/network/manageConsensusRoutines.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/manageConsensusRoutines.ts","line_range":[21,35],"symbol_name":"ConsensusMethod::api","language":"typescript","module_resolution_path":"@/libs/network/manageConsensusRoutines"},"relationships":{"depends_on":["sym-45104794847951b00f5a9bbe"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","lodash"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-45104794847951b00f5a9bbe","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ConsensusMethod (interface) exported from `src/libs/network/manageConsensusRoutines.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/manageConsensusRoutines.ts","line_range":[21,35],"symbol_name":"ConsensusMethod","language":"typescript","module_resolution_path":"@/libs/network/manageConsensusRoutines"},"relationships":{"depends_on":["mod-2e55150ffa8226bdba0597cc"],"depended_by":["sym-187664cf6efeb1c5567ce3c8"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","lodash"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-0d658d44d5b23dfd5829fc4f","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["manageConsensusRoutines (function) exported from `src/libs/network/manageConsensusRoutines.ts`.","TypeScript signature: (sender: string, payload: ConsensusMethod) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/manageConsensusRoutines.ts","line_range":[37,417],"symbol_name":"manageConsensusRoutines","language":"typescript","module_resolution_path":"@/libs/network/manageConsensusRoutines"},"relationships":{"depends_on":["mod-2e55150ffa8226bdba0597cc"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-98c4295951482a3e982049bb","sym-9ff2092936295dca05e0edb7","sym-ab85b50fe1b89f2116b32b8e","sym-6680f554fcb4ede4631e60b2","sym-304eaa4f7c51cf3fdbf89bb0","sym-4a436dd527be338afbf98bdb"],"called_by":["sym-55f93e8069ac7b64652c0d68","sym-99b0d2564383e319659c1396","sym-b4dfd8c83a7fc0baf92128df","sym-1cfae654989b906d03da6705","sym-28d0b0409648d85cbd16e1fa","sym-e66e3cbcbd613726d7235a91","sym-07c2b09c468e0b5ad536e20f","sym-7061b9df6db226c496e459c6"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","lodash"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-235384a3d4f36552d55ac7ef","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["manageExecution (function) exported from `src/libs/network/manageExecution.ts`.","TypeScript signature: (content: BundleContent, sender: string) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/manageExecution.ts","line_range":[11,118],"symbol_name":"manageExecution","language":"typescript","module_resolution_path":"@/libs/network/manageExecution"},"relationships":{"depends_on":["mod-f1c149177b4fb9bc2b7ee080"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-b37deaf5ad3d42513eeee725","sym-52e28e3349a0587ed39bb211"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","lodash"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-bfa8af7e83408600dde29446","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["manageGCRRoutines (function) exported from `src/libs/network/manageGCRRoutines.ts`.","TypeScript signature: (sender: string, payload: GCRRoutinePayload) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/manageGCRRoutines.ts","line_range":[17,192],"symbol_name":"manageGCRRoutines","language":"typescript","module_resolution_path":"@/libs/network/manageGCRRoutines"},"relationships":{"depends_on":["mod-60e11fd9921263398a239451"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-fcae6dca65ab92ce6e8c43b0"],"called_by":["sym-7061b9df6db226c496e459c6","sym-4a56ab36294dcc8703d06e4d","sym-8fb8125b35dabb0bb867c2c3","sym-7e7b96a10468c1edce3a73ae","sym-c48b984748dadec99be2ea79","sym-27adc406e8d7be915bdab915","sym-9dfd285f7a17eac27325557e","sym-f6d470d11d1bce1c9ae5c46d","sym-dd0d6da79a6076f6a04e978a"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","lodash"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-8d8d40dad8d622f8cc5bbd11","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `HelloPeerRequest` in `src/libs/network/manageHelloPeer.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/manageHelloPeer.ts","line_range":[11,19],"symbol_name":"HelloPeerRequest::api","language":"typescript","module_resolution_path":"@/libs/network/manageHelloPeer"},"relationships":{"depends_on":["sym-68a8ebbbf4a944b94d5fce23"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["lodash","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"sym-68a8ebbbf4a944b94d5fce23","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["HelloPeerRequest (interface) exported from `src/libs/network/manageHelloPeer.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/manageHelloPeer.ts","line_range":[11,19],"symbol_name":"HelloPeerRequest","language":"typescript","module_resolution_path":"@/libs/network/manageHelloPeer"},"relationships":{"depends_on":["mod-5dd7573d658ce3d7ea74353a"],"depended_by":["sym-8d8d40dad8d622f8cc5bbd11"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["lodash","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"sym-1d7e1deea80d0d5c35cc1961","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["manageHelloPeer (function) exported from `src/libs/network/manageHelloPeer.ts`.","TypeScript signature: (content: HelloPeerRequest, sender: string) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/manageHelloPeer.ts","line_range":[23,134],"symbol_name":"manageHelloPeer","language":"typescript","module_resolution_path":"@/libs/network/manageHelloPeer"},"relationships":{"depends_on":["mod-5dd7573d658ce3d7ea74353a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-7061b9df6db226c496e459c6"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["lodash","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"sym-54c2cfe0e786dfb0aa4c1a30","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleLoginResponse (function) exported from `src/libs/network/manageLogin.ts`.","TypeScript signature: (content: BrowserRequest) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/manageLogin.ts","line_range":[8,34],"symbol_name":"handleLoginResponse","language":"typescript","module_resolution_path":"@/libs/network/manageLogin"},"relationships":{"depends_on":["mod-025199ea4543cbbe2ddf79a8"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","lodash"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"sym-ea53351a3682c209afbecd62","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleLoginRequest (function) exported from `src/libs/network/manageLogin.ts`.","TypeScript signature: (content: BrowserRequest) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/manageLogin.ts","line_range":[36,56],"symbol_name":"handleLoginRequest","language":"typescript","module_resolution_path":"@/libs/network/manageLogin"},"relationships":{"depends_on":["mod-025199ea4543cbbe2ddf79a8"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","lodash"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"sym-ac7d7af06ace8e5f7480d85e","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["manageNativeBridge (function) exported from `src/libs/network/manageNativeBridge.ts`.","TypeScript signature: (operation: bridge.NativeBridgeOperation) => Promise.","Manages the native bridge operation to send back to the client a compiled operation as a RPCResponse"],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/manageNativeBridge.ts","line_range":[11,36],"symbol_name":"manageNativeBridge","language":"typescript","module_resolution_path":"@/libs/network/manageNativeBridge"},"relationships":{"depends_on":["mod-e09bbf55f33f0d36061b2348"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-80af24f09cb8568074b9237b"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 6-10","related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-278000824c34267ba77ed2e4","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `NodeCall` in `src/libs/network/manageNodeCall.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/manageNodeCall.ts","line_range":[39,43],"symbol_name":"NodeCall::api","language":"typescript","module_resolution_path":"@/libs/network/manageNodeCall"},"relationships":{"depends_on":["sym-3157118d1e9c323aab1ad5d4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption","env:SUDO_PUBKEY","env:TLSNOTARY_PROXY_PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-3157118d1e9c323aab1ad5d4","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["NodeCall (interface) exported from `src/libs/network/manageNodeCall.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/manageNodeCall.ts","line_range":[39,43],"symbol_name":"NodeCall","language":"typescript","module_resolution_path":"@/libs/network/manageNodeCall"},"relationships":{"depends_on":["mod-3f71e0e4e5c692c7690b3c86"],"depended_by":["sym-278000824c34267ba77ed2e4"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption","env:SUDO_PUBKEY","env:TLSNOTARY_PROXY_PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-5639767a6380b54d939d3083","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["manageNodeCall (function) exported from `src/libs/network/manageNodeCall.ts`.","TypeScript signature: (content: NodeCall) => Promise.","Dispatches an incoming NodeCall message to the appropriate handler and produces an RPCResponse."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/manageNodeCall.ts","line_range":[51,1005],"symbol_name":"manageNodeCall","language":"typescript","module_resolution_path":"@/libs/network/manageNodeCall"},"relationships":{"depends_on":["mod-3f71e0e4e5c692c7690b3c86"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-fcae6dca65ab92ce6e8c43b0","sym-0115c78857a4e5f525339e2d","sym-5d2517b043286dce6d6847d7","sym-5057526194c060d19120572f","sym-cc16259785e538472afb2878","sym-b4ef38925e03b3181e41e353","sym-814eb4802fa432ff5ff8bc82","sym-7a7c3a1eb526becc41e434a1"],"called_by":["sym-7061b9df6db226c496e459c6","sym-9cfa7eb6554a93203930565f"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption","env:SUDO_PUBKEY","env:TLSNOTARY_PROXY_PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 45-50","related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-effd5e53e1c955d375aee994","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `Message` in `src/libs/network/manageP2P.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/manageP2P.ts","line_range":[14,19],"symbol_name":"Message::api","language":"typescript","module_resolution_path":"@/libs/network/manageP2P"},"relationships":{"depends_on":["sym-340c7ae28f4661acc40c644e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"sym-340c7ae28f4661acc40c644e","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Message (interface) exported from `src/libs/network/manageP2P.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/manageP2P.ts","line_range":[14,19],"symbol_name":"Message","language":"typescript","module_resolution_path":"@/libs/network/manageP2P"},"relationships":{"depends_on":["mod-22a231e7e2a8fa48e00405d7"],"depended_by":["sym-effd5e53e1c955d375aee994"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"sym-1949526bac7e354d12c4d919","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `DemosP2P` in `src/libs/network/manageP2P.ts`."],"intent_vectors":["networking","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/manageP2P.ts","line_range":[22,81],"symbol_name":"DemosP2P::api","language":"typescript","module_resolution_path":"@/libs/network/manageP2P"},"relationships":{"depends_on":["sym-5b7e48554055803b885c211a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"sym-e6dc4654d0467d8dcb6d5230","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DemosP2P.getInstance method on exported class `DemosP2P` in `src/libs/network/manageP2P.ts`.","TypeScript signature: (partecipants: [string, string]) => DemosP2P."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/manageP2P.ts","line_range":[42,48],"symbol_name":"DemosP2P.getInstance","language":"typescript","module_resolution_path":"@/libs/network/manageP2P"},"relationships":{"depends_on":["sym-5b7e48554055803b885c211a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"sym-72b8022bd1a30f87bde3c08e","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DemosP2P.getInstanceFromSessionId method on exported class `DemosP2P` in `src/libs/network/manageP2P.ts`.","TypeScript signature: (sessionId: string) => DemosP2P."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/manageP2P.ts","line_range":[50,52],"symbol_name":"DemosP2P.getInstanceFromSessionId","language":"typescript","module_resolution_path":"@/libs/network/manageP2P"},"relationships":{"depends_on":["sym-5b7e48554055803b885c211a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"sym-f8403c44d50f0ee7817f9858","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DemosP2P.getSessionId method on exported class `DemosP2P` in `src/libs/network/manageP2P.ts`.","TypeScript signature: (peerId1: string, peerId2: string) => string."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/manageP2P.ts","line_range":[57,59],"symbol_name":"DemosP2P.getSessionId","language":"typescript","module_resolution_path":"@/libs/network/manageP2P"},"relationships":{"depends_on":["sym-5b7e48554055803b885c211a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"sym-2970b8afa8e36b134fa79b40","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DemosP2P.relayMessage method on exported class `DemosP2P` in `src/libs/network/manageP2P.ts`.","TypeScript signature: (message: Message) => void."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/manageP2P.ts","line_range":[66,69],"symbol_name":"DemosP2P.relayMessage","language":"typescript","module_resolution_path":"@/libs/network/manageP2P"},"relationships":{"depends_on":["sym-5b7e48554055803b885c211a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"sym-364dcbfe78e7ff74ebd1b118","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DemosP2P.getMessagesForPartecipant method on exported class `DemosP2P` in `src/libs/network/manageP2P.ts`.","TypeScript signature: (publicKey: string) => Message[]."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/manageP2P.ts","line_range":[72,78],"symbol_name":"DemosP2P.getMessagesForPartecipant","language":"typescript","module_resolution_path":"@/libs/network/manageP2P"},"relationships":{"depends_on":["sym-5b7e48554055803b885c211a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"sym-5b7e48554055803b885c211a","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DemosP2P (class) exported from `src/libs/network/manageP2P.ts`."],"intent_vectors":["networking","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/manageP2P.ts","line_range":[22,81],"symbol_name":"DemosP2P","language":"typescript","module_resolution_path":"@/libs/network/manageP2P"},"relationships":{"depends_on":["mod-22a231e7e2a8fa48e00405d7"],"depended_by":["sym-1949526bac7e354d12c4d919","sym-e6dc4654d0467d8dcb6d5230","sym-72b8022bd1a30f87bde3c08e","sym-f8403c44d50f0ee7817f9858","sym-2970b8afa8e36b134fa79b40","sym-364dcbfe78e7ff74ebd1b118"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"sym-f5a0b179a238fe0393fde5cf","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["registerMethodListingEndpoint (function) exported from `src/libs/network/methodListing.ts`.","TypeScript signature: (server: FastifyInstance) => unknown."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/methodListing.ts","line_range":[20,30],"symbol_name":"registerMethodListingEndpoint","language":"typescript","module_resolution_path":"@/libs/network/methodListing"},"relationships":{"depends_on":["mod-f215e43fe388f34d276e0935"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fastify"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"sym-23ad4039ecded53df33512a5","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `RateLimiter` in `src/libs/network/middleware/rateLimiter.ts`."],"intent_vectors":["networking","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/middleware/rateLimiter.ts","line_range":[40,467],"symbol_name":"RateLimiter::api","language":"typescript","module_resolution_path":"@/libs/network/middleware/rateLimiter"},"relationships":{"depends_on":["sym-a30c004044ed694e7dd2baa2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","bun"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-0a51a789ef7d435fac22776a","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RateLimiter.getClientIP method on exported class `RateLimiter` in `src/libs/network/middleware/rateLimiter.ts`.","TypeScript signature: (req: Request, server: Server) => string."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/middleware/rateLimiter.ts","line_range":[130,154],"symbol_name":"RateLimiter.getClientIP","language":"typescript","module_resolution_path":"@/libs/network/middleware/rateLimiter"},"relationships":{"depends_on":["sym-a30c004044ed694e7dd2baa2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","bun"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-b38886cc276ae1b280c9e69b","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RateLimiter.createMiddleware method on exported class `RateLimiter` in `src/libs/network/middleware/rateLimiter.ts`.","TypeScript signature: () => Middleware."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/middleware/rateLimiter.ts","line_range":[244,405],"symbol_name":"RateLimiter.createMiddleware","language":"typescript","module_resolution_path":"@/libs/network/middleware/rateLimiter"},"relationships":{"depends_on":["sym-a30c004044ed694e7dd2baa2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","bun"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-c1ea911292523868bd72a57e","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RateLimiter.getStats method on exported class `RateLimiter` in `src/libs/network/middleware/rateLimiter.ts`.","TypeScript signature: () => {\n totalIPs: number\n blockedIPs: number\n activeRequests: number\n }."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/middleware/rateLimiter.ts","line_range":[407,430],"symbol_name":"RateLimiter.getStats","language":"typescript","module_resolution_path":"@/libs/network/middleware/rateLimiter"},"relationships":{"depends_on":["sym-a30c004044ed694e7dd2baa2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","bun"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-e49e87255ece0a5317b1d1db","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RateLimiter.unblockIP method on exported class `RateLimiter` in `src/libs/network/middleware/rateLimiter.ts`.","TypeScript signature: (ips: string[]) => Record."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/middleware/rateLimiter.ts","line_range":[432,451],"symbol_name":"RateLimiter.unblockIP","language":"typescript","module_resolution_path":"@/libs/network/middleware/rateLimiter"},"relationships":{"depends_on":["sym-a30c004044ed694e7dd2baa2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","bun"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-b824be730682f6d1b926c57e","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RateLimiter.destroy method on exported class `RateLimiter` in `src/libs/network/middleware/rateLimiter.ts`.","TypeScript signature: () => void."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/middleware/rateLimiter.ts","line_range":[453,458],"symbol_name":"RateLimiter.destroy","language":"typescript","module_resolution_path":"@/libs/network/middleware/rateLimiter"},"relationships":{"depends_on":["sym-a30c004044ed694e7dd2baa2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","bun"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-043ab78b6f507bf4ae48ea53","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RateLimiter.getInstance method on exported class `RateLimiter` in `src/libs/network/middleware/rateLimiter.ts`.","TypeScript signature: () => RateLimiter."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/middleware/rateLimiter.ts","line_range":[460,466],"symbol_name":"RateLimiter.getInstance","language":"typescript","module_resolution_path":"@/libs/network/middleware/rateLimiter"},"relationships":{"depends_on":["sym-a30c004044ed694e7dd2baa2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","bun"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-a30c004044ed694e7dd2baa2","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RateLimiter (class) exported from `src/libs/network/middleware/rateLimiter.ts`."],"intent_vectors":["networking","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/middleware/rateLimiter.ts","line_range":[40,467],"symbol_name":"RateLimiter","language":"typescript","module_resolution_path":"@/libs/network/middleware/rateLimiter"},"relationships":{"depends_on":["mod-5f1b8ed2b401d728855c038c"],"depended_by":["sym-23ad4039ecded53df33512a5","sym-0a51a789ef7d435fac22776a","sym-b38886cc276ae1b280c9e69b","sym-c1ea911292523868bd72a57e","sym-e49e87255ece0a5317b1d1db","sym-b824be730682f6d1b926c57e","sym-043ab78b6f507bf4ae48ea53"],"implements":[],"extends":[],"calls":["sym-b3b5244d7b171c0138f12fd5"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","bun"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-91661b3c5c62bff622a981db","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["setupOpenAPI (function) exported from `src/libs/network/openApiSpec.ts`.","TypeScript signature: (server: FastifyInstance) => unknown."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/openApiSpec.ts","line_range":[11,27],"symbol_name":"setupOpenAPI","language":"typescript","module_resolution_path":"@/libs/network/openApiSpec"},"relationships":{"depends_on":["mod-7b8929603b5d94f3dafe9dea"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fastify","@fastify/swagger","@fastify/swagger-ui","fs","path","url"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"sym-5c346fb8b4864942959afa56","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["rpcSchema (variable) exported from `src/libs/network/openApiSpec.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/openApiSpec.ts","line_range":[29,49],"symbol_name":"rpcSchema","language":"typescript","module_resolution_path":"@/libs/network/openApiSpec"},"relationships":{"depends_on":["mod-7b8929603b5d94f3dafe9dea"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fastify","@fastify/swagger","@fastify/swagger-ui","fs","path","url"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"sym-c03360033ff46d621cf2ae17","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["checkGasPriorOperation (function) exported from `src/libs/network/routines/checkGasPriorOperation.ts`.","TypeScript signature: (demosAddress: string, gasRequired: number) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/routines/checkGasPriorOperation.ts","line_range":[1,8],"symbol_name":"checkGasPriorOperation","language":"typescript","module_resolution_path":"@/libs/network/routines/checkGasPriorOperation"},"relationships":{"depends_on":["mod-6a73c250ca0d545930026d4a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"sym-62051722bb59e097df10746e","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["determineGasForOperation (function) exported from `src/libs/network/routines/determineGasForOperation.ts`.","TypeScript signature: (operation: any) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/routines/determineGasForOperation.ts","line_range":[4,18],"symbol_name":"determineGasForOperation","language":"typescript","module_resolution_path":"@/libs/network/routines/determineGasForOperation"},"relationships":{"depends_on":["mod-c996d6d5043c881bd6ad5b03"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-d0b2b2174c96ce5833cd9592"],"called_by":["sym-60b2be41818640ffc764cb35"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"sym-f732c52bdfb53b3c7c57e6c1","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["default (export_default) exported from `src/libs/network/routines/eggs.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/eggs.ts","line_range":[7,7],"symbol_name":"default","language":"typescript","module_resolution_path":"@/libs/network/routines/eggs"},"relationships":{"depends_on":["mod-2d8e2ee0779d753dbf529ccf"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"sym-c3a520c376d94fdc7518bf55","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `GasDeal` in `src/libs/network/routines/gasDeal.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/gasDeal.ts","line_range":[4,10],"symbol_name":"GasDeal::api","language":"typescript","module_resolution_path":"@/libs/network/routines/gasDeal"},"relationships":{"depends_on":["sym-b5118eb6e684507b140dc13e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"sym-b5118eb6e684507b140dc13e","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GasDeal (interface) exported from `src/libs/network/routines/gasDeal.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/gasDeal.ts","line_range":[4,10],"symbol_name":"GasDeal","language":"typescript","module_resolution_path":"@/libs/network/routines/gasDeal"},"relationships":{"depends_on":["mod-d438c33c3d72df9bd7dd472a"],"depended_by":["sym-c3a520c376d94fdc7518bf55"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"sym-60b2be41818640ffc764cb35","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["gasDeal (function) exported from `src/libs/network/routines/gasDeal.ts`.","TypeScript signature: (proposedChain: string, payload: any) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/routines/gasDeal.ts","line_range":[12,43],"symbol_name":"gasDeal","language":"typescript","module_resolution_path":"@/libs/network/routines/gasDeal"},"relationships":{"depends_on":["mod-d438c33c3d72df9bd7dd472a"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-62051722bb59e097df10746e"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"sym-3c18c93e1cb855e2917ca012","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getChainReferenceCurrency (function) exported from `src/libs/network/routines/gasDeal.ts`.","TypeScript signature: (chain: string) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/routines/gasDeal.ts","line_range":[45,50],"symbol_name":"getChainReferenceCurrency","language":"typescript","module_resolution_path":"@/libs/network/routines/gasDeal"},"relationships":{"depends_on":["mod-d438c33c3d72df9bd7dd472a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"sym-0714329610278a49d4d896b8","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getChainNativeToReferenceConversionRate (function) exported from `src/libs/network/routines/gasDeal.ts`.","TypeScript signature: (chain: string) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/routines/gasDeal.ts","line_range":[52,57],"symbol_name":"getChainNativeToReferenceConversionRate","language":"typescript","module_resolution_path":"@/libs/network/routines/gasDeal"},"relationships":{"depends_on":["mod-d438c33c3d72df9bd7dd472a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"sym-4de139d75083bce9f07d0bf5","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getChainNativeToDEMOSConversionRate (function) exported from `src/libs/network/routines/gasDeal.ts`.","TypeScript signature: (chain: string) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/routines/gasDeal.ts","line_range":[59,64],"symbol_name":"getChainNativeToDEMOSConversionRate","language":"typescript","module_resolution_path":"@/libs/network/routines/gasDeal"},"relationships":{"depends_on":["mod-d438c33c3d72df9bd7dd472a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.954Z","authors":[]}} +{"uuid":"sym-5c77c8e8605a322c4a8105e9","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getRemoteIP (function) exported from `src/libs/network/routines/getRemoteIP.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/routines/getRemoteIP.ts","line_range":[3,12],"symbol_name":"getRemoteIP","language":"typescript","module_resolution_path":"@/libs/network/routines/getRemoteIP"},"relationships":{"depends_on":["mod-f235c77fff58b93b0ef4a745"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node-fetch"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"sym-00a687dd7a4ac80ec046b1d9","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getBlockByHash (function) exported from `src/libs/network/routines/nodecalls/getBlockByHash.ts`.","TypeScript signature: (data: any) => unknown."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/routines/nodecalls/getBlockByHash.ts","line_range":[4,22],"symbol_name":"getBlockByHash","language":"typescript","module_resolution_path":"@/libs/network/routines/nodecalls/getBlockByHash"},"relationships":{"depends_on":["mod-6e27fb3b8c84e1baeea2a944"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-911a2d4197fac2defef73b40","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getBlockByNumber (function) exported from `src/libs/network/routines/nodecalls/getBlockByNumber.ts`.","TypeScript signature: (data: any) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/routines/nodecalls/getBlockByNumber.ts","line_range":[6,48],"symbol_name":"getBlockByNumber","language":"typescript","module_resolution_path":"@/libs/network/routines/nodecalls/getBlockByNumber"},"relationships":{"depends_on":["mod-587a0dac663054ccdc90b2bc"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-e301fc6bbdb4b0a55d179d3b"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-f4c921bd7789b2105a73e6fa","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getBlockHeaderByHash (function) exported from `src/libs/network/routines/nodecalls/getBlockHeaderByHash.ts`.","TypeScript signature: (data: any) => unknown."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/routines/nodecalls/getBlockHeaderByHash.ts","line_range":[4,19],"symbol_name":"getBlockHeaderByHash","language":"typescript","module_resolution_path":"@/libs/network/routines/nodecalls/getBlockHeaderByHash"},"relationships":{"depends_on":["mod-5d68d5d1029351abd62fa157"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-e1ba932ee6b752b90eafb76c","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getBlockHeaderByNumber (function) exported from `src/libs/network/routines/nodecalls/getBlockHeaderByNumber.ts`.","TypeScript signature: (data: any) => unknown."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/routines/nodecalls/getBlockHeaderByNumber.ts","line_range":[4,23],"symbol_name":"getBlockHeaderByNumber","language":"typescript","module_resolution_path":"@/libs/network/routines/nodecalls/getBlockHeaderByNumber"},"relationships":{"depends_on":["mod-eeb3f53b29866be8d2cb970f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-1965f9efde68a4394122285f","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getBlocks (function) exported from `src/libs/network/routines/nodecalls/getBlocks.ts`.","TypeScript signature: (data: InterfaceGetBlocksData) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/routines/nodecalls/getBlocks.ts","line_range":[10,53],"symbol_name":"getBlocks","language":"typescript","module_resolution_path":"@/libs/network/routines/nodecalls/getBlocks"},"relationships":{"depends_on":["mod-1a126c017b2b7dd41d6846f0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"sym-4830c08718fcd7f4335a117d","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getPeerInfo (function) exported from `src/libs/network/routines/nodecalls/getPeerInfo.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/routines/nodecalls/getPeerInfo.ts","line_range":[3,5],"symbol_name":"getPeerInfo","language":"typescript","module_resolution_path":"@/libs/network/routines/nodecalls/getPeerInfo"},"relationships":{"depends_on":["mod-82b6a522914548c8fd24479a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"sym-97320893d204cc7d476e3fde","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getPeerlist (function) exported from `src/libs/network/routines/nodecalls/getPeerlist.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/routines/nodecalls/getPeerlist.ts","line_range":[7,35],"symbol_name":"getPeerlist","language":"typescript","module_resolution_path":"@/libs/network/routines/nodecalls/getPeerlist"},"relationships":{"depends_on":["mod-303258444053b0a43538b62b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"sym-c4344bea317284338ea29949","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getPreviousHashFromBlockHash (function) exported from `src/libs/network/routines/nodecalls/getPreviousHashFromBlockHash.ts`.","TypeScript signature: (data: any) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/routines/nodecalls/getPreviousHashFromBlockHash.ts","line_range":[4,19],"symbol_name":"getPreviousHashFromBlockHash","language":"typescript","module_resolution_path":"@/libs/network/routines/nodecalls/getPreviousHashFromBlockHash"},"relationships":{"depends_on":["mod-4608ef549e373e94702c2215"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"sym-d2e86475bdb3136bd4dbbdef","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getPreviousHashFromBlockNumber (function) exported from `src/libs/network/routines/nodecalls/getPreviousHashFromBlockNumber.ts`.","TypeScript signature: (data: any) => unknown."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/routines/nodecalls/getPreviousHashFromBlockNumber.ts","line_range":[4,17],"symbol_name":"getPreviousHashFromBlockNumber","language":"typescript","module_resolution_path":"@/libs/network/routines/nodecalls/getPreviousHashFromBlockNumber"},"relationships":{"depends_on":["mod-ea8a0a466499b8a4e9d2b2fd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"sym-6595be3b08ea5be4fbcb7009","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getTransactions (function) exported from `src/libs/network/routines/nodecalls/getTransactions.ts`.","TypeScript signature: (data: InterfaceGetTransactionsData) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/routines/nodecalls/getTransactions.ts","line_range":[10,56],"symbol_name":"getTransactions","language":"typescript","module_resolution_path":"@/libs/network/routines/nodecalls/getTransactions"},"relationships":{"depends_on":["mod-a25839dd6ba039a8c958583f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"sym-364a66b2b44b55df33318f93","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getTxsByHashes (function) exported from `src/libs/network/routines/nodecalls/getTxsByHashes.ts`.","TypeScript signature: (data: InterfaceGetTxsByHashesData) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/routines/nodecalls/getTxsByHashes.ts","line_range":[9,69],"symbol_name":"getTxsByHashes","language":"typescript","module_resolution_path":"@/libs/network/routines/nodecalls/getTxsByHashes"},"relationships":{"depends_on":["mod-00cbdca09e56b6109b846e9b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-444d637aead560497f9078f4","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["normalizeWebBuffers (function) exported from `src/libs/network/routines/normalizeWebBuffers.ts`.","TypeScript signature: (webBuffer: any) => [Buffer, string]."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/normalizeWebBuffers.ts","line_range":[1,30],"symbol_name":"normalizeWebBuffers","language":"typescript","module_resolution_path":"@/libs/network/routines/normalizeWebBuffers"},"relationships":{"depends_on":["mod-fab341be779110d20904d642"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-3d14e568424b742a642a1957"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"sym-7f62f790c5ca3020d63c5547","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `InterfaceSession` in `src/libs/network/routines/sessionManager.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/sessionManager.ts","line_range":[29,38],"symbol_name":"InterfaceSession::api","language":"typescript","module_resolution_path":"@/libs/network/routines/sessionManager"},"relationships":{"depends_on":["sym-16320e5dfefd4484bf04a2b1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"sym-16320e5dfefd4484bf04a2b1","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["InterfaceSession (interface) exported from `src/libs/network/routines/sessionManager.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/sessionManager.ts","line_range":[29,38],"symbol_name":"InterfaceSession","language":"typescript","module_resolution_path":"@/libs/network/routines/sessionManager"},"relationships":{"depends_on":["mod-be77f5db5117aff014090a24"],"depended_by":["sym-7f62f790c5ca3020d63c5547"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"sym-a0665fbdedc04f490c5c1ee5","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `Sessions` in `src/libs/network/routines/sessionManager.ts`."],"intent_vectors":["networking","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/sessionManager.ts","line_range":[40,121],"symbol_name":"Sessions::api","language":"typescript","module_resolution_path":"@/libs/network/routines/sessionManager"},"relationships":{"depends_on":["sym-3d14e568424b742a642a1957"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"sym-ff34e80e38862f26f8542d67","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Sessions.getInstance method on exported class `Sessions` in `src/libs/network/routines/sessionManager.ts`.","TypeScript signature: () => Sessions."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/sessionManager.ts","line_range":[45,50],"symbol_name":"Sessions.getInstance","language":"typescript","module_resolution_path":"@/libs/network/routines/sessionManager"},"relationships":{"depends_on":["sym-3d14e568424b742a642a1957"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"sym-6efc9acf51b6852ebb17b0a3","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Sessions.getSession method on exported class `Sessions` in `src/libs/network/routines/sessionManager.ts`.","TypeScript signature: (address: string) => InterfaceSession."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/sessionManager.ts","line_range":[57,59],"symbol_name":"Sessions.getSession","language":"typescript","module_resolution_path":"@/libs/network/routines/sessionManager"},"relationships":{"depends_on":["sym-3d14e568424b742a642a1957"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"sym-898018ea10de7c9592a89604","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Sessions.isSessionValid method on exported class `Sessions` in `src/libs/network/routines/sessionManager.ts`.","TypeScript signature: (address: string) => boolean."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/sessionManager.ts","line_range":[62,73],"symbol_name":"Sessions.isSessionValid","language":"typescript","module_resolution_path":"@/libs/network/routines/sessionManager"},"relationships":{"depends_on":["sym-3d14e568424b742a642a1957"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"sym-1be242ae8eea8ce44d3ac248","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Sessions.newSession method on exported class `Sessions` in `src/libs/network/routines/sessionManager.ts`.","TypeScript signature: (address: string) => InterfaceSession."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/sessionManager.ts","line_range":[76,90],"symbol_name":"Sessions.newSession","language":"typescript","module_resolution_path":"@/libs/network/routines/sessionManager"},"relationships":{"depends_on":["sym-3d14e568424b742a642a1957"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"sym-cf46caf250429c89dc5b39e9","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Sessions.validateSignature method on exported class `Sessions` in `src/libs/network/routines/sessionManager.ts`.","TypeScript signature: (sessionAddress: string, sessionSignature: string) => boolean."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/sessionManager.ts","line_range":[94,118],"symbol_name":"Sessions.validateSignature","language":"typescript","module_resolution_path":"@/libs/network/routines/sessionManager"},"relationships":{"depends_on":["sym-3d14e568424b742a642a1957"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"sym-3d14e568424b742a642a1957","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Sessions (class) exported from `src/libs/network/routines/sessionManager.ts`."],"intent_vectors":["networking","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/sessionManager.ts","line_range":[40,121],"symbol_name":"Sessions","language":"typescript","module_resolution_path":"@/libs/network/routines/sessionManager"},"relationships":{"depends_on":["mod-be77f5db5117aff014090a24"],"depended_by":["sym-a0665fbdedc04f490c5c1ee5","sym-ff34e80e38862f26f8542d67","sym-6efc9acf51b6852ebb17b0a3","sym-898018ea10de7c9592a89604","sym-1be242ae8eea8ce44d3ac248","sym-cf46caf250429c89dc5b39e9"],"implements":[],"extends":[],"calls":["sym-444d637aead560497f9078f4"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"sym-b3dbfe3fa6d39217fc5d4f7d","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getPeerTime (function) exported from `src/libs/network/routines/timeSync.ts`.","TypeScript signature: (peer: Peer, id: any) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/routines/timeSync.ts","line_range":[22,55],"symbol_name":"getPeerTime","language":"typescript","module_resolution_path":"@/libs/network/routines/timeSync"},"relationships":{"depends_on":["mod-5269202219af5585cb61f564"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["util"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-4c471c5372546d33ace71bb3","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["calculatePeerTimeOffset (function) exported from `src/libs/network/routines/timeSync.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/timeSync.ts","line_range":[57,98],"symbol_name":"calculatePeerTimeOffset","language":"typescript","module_resolution_path":"@/libs/network/routines/timeSync"},"relationships":{"depends_on":["mod-5269202219af5585cb61f564"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["util"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-9b8195b95964c2a498993290","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["compare (function) exported from `src/libs/network/routines/timeSyncUtils.ts`.","TypeScript signature: (a: number, b: number) => number."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/timeSyncUtils.ts","line_range":[1,3],"symbol_name":"compare","language":"typescript","module_resolution_path":"@/libs/network/routines/timeSyncUtils"},"relationships":{"depends_on":["mod-c44377cbc773462d72dd13fa"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"sym-2ad003ec730706f8e7afa93c","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["add (function) exported from `src/libs/network/routines/timeSyncUtils.ts`.","TypeScript signature: (a: number, b: number) => number."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/timeSyncUtils.ts","line_range":[5,7],"symbol_name":"add","language":"typescript","module_resolution_path":"@/libs/network/routines/timeSyncUtils"},"relationships":{"depends_on":["mod-c44377cbc773462d72dd13fa"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"sym-f06d0734196eba459ef68266","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["sum (function) exported from `src/libs/network/routines/timeSyncUtils.ts`.","TypeScript signature: (arr: number[]) => number."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/timeSyncUtils.ts","line_range":[9,11],"symbol_name":"sum","language":"typescript","module_resolution_path":"@/libs/network/routines/timeSyncUtils"},"relationships":{"depends_on":["mod-c44377cbc773462d72dd13fa"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-0d1dcfcac0642bf15d871302"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"sym-0d1dcfcac0642bf15d871302","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["mean (function) exported from `src/libs/network/routines/timeSyncUtils.ts`.","TypeScript signature: (arr: number[]) => number."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/timeSyncUtils.ts","line_range":[13,15],"symbol_name":"mean","language":"typescript","module_resolution_path":"@/libs/network/routines/timeSyncUtils"},"relationships":{"depends_on":["mod-c44377cbc773462d72dd13fa"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-f06d0734196eba459ef68266"],"called_by":["sym-afb6526449d86d945cdb2452"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"sym-a24cd6be8abd3b0215b2880d","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["std (function) exported from `src/libs/network/routines/timeSyncUtils.ts`.","TypeScript signature: (arr: number[]) => number."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/timeSyncUtils.ts","line_range":[17,19],"symbol_name":"std","language":"typescript","module_resolution_path":"@/libs/network/routines/timeSyncUtils"},"relationships":{"depends_on":["mod-c44377cbc773462d72dd13fa"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"sym-afb6526449d86d945cdb2452","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["variance (function) exported from `src/libs/network/routines/timeSyncUtils.ts`.","TypeScript signature: (arr: number[]) => number."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/timeSyncUtils.ts","line_range":[21,26],"symbol_name":"variance","language":"typescript","module_resolution_path":"@/libs/network/routines/timeSyncUtils"},"relationships":{"depends_on":["mod-c44377cbc773462d72dd13fa"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-0d1dcfcac0642bf15d871302"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"sym-7c70e690b7433ebb78afddca","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["calculateIQR (function) exported from `src/libs/network/routines/timeSyncUtils.ts`.","TypeScript signature: (data: number[]) => { iqr: number, q1: number, q3: number }."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/timeSyncUtils.ts","line_range":[28,34],"symbol_name":"calculateIQR","language":"typescript","module_resolution_path":"@/libs/network/routines/timeSyncUtils"},"relationships":{"depends_on":["mod-c44377cbc773462d72dd13fa"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-0ab6649bd8566881a8ffa026"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"sym-0ab6649bd8566881a8ffa026","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["filterOutliers (function) exported from `src/libs/network/routines/timeSyncUtils.ts`.","TypeScript signature: (data: unknown) => unknown."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/timeSyncUtils.ts","line_range":[36,39],"symbol_name":"filterOutliers","language":"typescript","module_resolution_path":"@/libs/network/routines/timeSyncUtils"},"relationships":{"depends_on":["mod-c44377cbc773462d72dd13fa"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-7c70e690b7433ebb78afddca"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"sym-cef374c0e9418a45db67507b","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["median (function) exported from `src/libs/network/routines/timeSyncUtils.ts`.","TypeScript signature: (arr: number[]) => number."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/timeSyncUtils.ts","line_range":[41,52],"symbol_name":"median","language":"typescript","module_resolution_path":"@/libs/network/routines/timeSyncUtils"},"relationships":{"depends_on":["mod-c44377cbc773462d72dd13fa"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"sym-5bdeb8b177e513df30db0c8f","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `StepResult` in `src/libs/network/routines/transactions/demosWork/handleDemosWorkRequest.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/transactions/demosWork/handleDemosWorkRequest.ts","line_range":[82,86],"symbol_name":"StepResult::api","language":"typescript","module_resolution_path":"@/libs/network/routines/transactions/demosWork/handleDemosWorkRequest"},"relationships":{"depends_on":["sym-dd2bf0489df3b5728b851e75"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/demoswork","@kynesyslabs/demosdk/types","lodash"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"sym-dd2bf0489df3b5728b851e75","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["StepResult (type) exported from `src/libs/network/routines/transactions/demosWork/handleDemosWorkRequest.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/transactions/demosWork/handleDemosWorkRequest.ts","line_range":[82,86],"symbol_name":"StepResult","language":"typescript","module_resolution_path":"@/libs/network/routines/transactions/demosWork/handleDemosWorkRequest"},"relationships":{"depends_on":["mod-dc9656310d022085b2936dcc"],"depended_by":["sym-5bdeb8b177e513df30db0c8f"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/demoswork","@kynesyslabs/demosdk/types","lodash"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"sym-2014db7e46724586aa33968e","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `OperationResult` in `src/libs/network/routines/transactions/demosWork/handleDemosWorkRequest.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/transactions/demosWork/handleDemosWorkRequest.ts","line_range":[88,92],"symbol_name":"OperationResult::api","language":"typescript","module_resolution_path":"@/libs/network/routines/transactions/demosWork/handleDemosWorkRequest"},"relationships":{"depends_on":["sym-873aa7dadb9fae6f13424d90"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/demoswork","@kynesyslabs/demosdk/types","lodash"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"sym-873aa7dadb9fae6f13424d90","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["OperationResult (type) exported from `src/libs/network/routines/transactions/demosWork/handleDemosWorkRequest.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/routines/transactions/demosWork/handleDemosWorkRequest.ts","line_range":[88,92],"symbol_name":"OperationResult","language":"typescript","module_resolution_path":"@/libs/network/routines/transactions/demosWork/handleDemosWorkRequest"},"relationships":{"depends_on":["mod-dc9656310d022085b2936dcc"],"depended_by":["sym-2014db7e46724586aa33968e"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/demoswork","@kynesyslabs/demosdk/types","lodash"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"sym-3d8045d8ce322957d53c5a4f","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleDemosWorkRequest (function) exported from `src/libs/network/routines/transactions/demosWork/handleDemosWorkRequest.ts`.","TypeScript signature: (content: DemoScript) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/routines/transactions/demosWork/handleDemosWorkRequest.ts","line_range":[95,130],"symbol_name":"handleDemosWorkRequest","language":"typescript","module_resolution_path":"@/libs/network/routines/transactions/demosWork/handleDemosWorkRequest"},"relationships":{"depends_on":["mod-dc9656310d022085b2936dcc"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/demoswork","@kynesyslabs/demosdk/types","lodash"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"sym-eb71a8dd3518c88cba790695","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleStep (function) exported from `src/libs/network/routines/transactions/demosWork/handleStep.ts`.","TypeScript signature: (step: WorkStep) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/routines/transactions/demosWork/handleStep.ts","line_range":[19,67],"symbol_name":"handleStep","language":"typescript","module_resolution_path":"@/libs/network/routines/transactions/demosWork/handleStep"},"relationships":{"depends_on":["mod-b1d30e1636da57dbf8144fd7"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-fb863731199cef86f8981fbe"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/demoswork","@kynesyslabs/demosdk/types","node_modules/@kynesyslabs/demosdk/build/types/native","lodash"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-fb863731199cef86f8981fbe","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["processOperations (function) exported from `src/libs/network/routines/transactions/demosWork/processOperations.ts`.","TypeScript signature: (script: DemoScript) => Promise<[DemoScript, OperationResult[]]>."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/routines/transactions/demosWork/processOperations.ts","line_range":[9,62],"symbol_name":"processOperations","language":"typescript","module_resolution_path":"@/libs/network/routines/transactions/demosWork/processOperations"},"relationships":{"depends_on":["mod-a66773add774e134dc55fb9c"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-eb71a8dd3518c88cba790695"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.955Z","authors":[]}} +{"uuid":"sym-af1c37237a37962494d06df0","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleIdentityRequest (function) exported from `src/libs/network/routines/transactions/handleIdentityRequest.ts`.","TypeScript signature: (tx: Transaction, sender: string) => Promise.","Verifies the signature in the identity payload using the appropriate handler"],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/routines/transactions/handleIdentityRequest.ts","line_range":[28,123],"symbol_name":"handleIdentityRequest","language":"typescript","module_resolution_path":"@/libs/network/routines/transactions/handleIdentityRequest"},"relationships":{"depends_on":["mod-bc30cadc96b2e14f87980a9c"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-e9ff6a51fed52302f183f9ff"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/abstraction","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 21-27","related_adr":null,"last_modified":"2026-02-18T13:24:07.419Z","authors":[]}} +{"uuid":"sym-87aeaf45d3ccc3eda2f7754f","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleL2PS (function) exported from `src/libs/network/routines/transactions/handleL2PS.ts`.","TypeScript signature: (l2psTx: L2PSTransaction) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/routines/transactions/handleL2PS.ts","line_range":[75,116],"symbol_name":"handleL2PS","language":"typescript","module_resolution_path":"@/libs/network/routines/transactions/handleL2PS"},"relationships":{"depends_on":["mod-efae4e57fd7a4c96e3e2b085"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-0c9c446090c5e603032ab8cf"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/l2ps"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-1047da550cdd7c7818b318f5","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleNativeBridgeTx (function) exported from `src/libs/network/routines/transactions/handleNativeBridgeTx.ts`.","TypeScript signature: (operation: NativeBridgeOperationCompiled) => Promise."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/routines/transactions/handleNativeBridgeTx.ts","line_range":[3,8],"symbol_name":"handleNativeBridgeTx","language":"typescript","module_resolution_path":"@/libs/network/routines/transactions/handleNativeBridgeTx"},"relationships":{"depends_on":["mod-1159d5b65cc6179495dba86e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/bridge"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.956Z","authors":[]}} +{"uuid":"sym-d6c1efb7fd3f747e6336fa5c","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleNativeRequest (function) exported from `src/libs/network/routines/transactions/handleNativeRequest.ts`.","TypeScript signature: (content: INativePayload) => Promise.","Handle a native request (e.g. a native pay on Demos Network)"],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/routines/transactions/handleNativeRequest.ts","line_range":[10,22],"symbol_name":"handleNativeRequest","language":"typescript","module_resolution_path":"@/libs/network/routines/transactions/handleNativeRequest"},"relationships":{"depends_on":["mod-3adb0b7ff3ed55bc318f2ce4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","node_modules/@kynesyslabs/demosdk/build/types/native"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 5-9","related_adr":null,"last_modified":"2026-02-13T14:41:04.956Z","authors":[]}} +{"uuid":"sym-7e7c43222ce7463a1dcc2533","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleWeb2ProxyRequest (function) exported from `src/libs/network/routines/transactions/handleWeb2ProxyRequest.ts`.","TypeScript signature: ({\n web2Request,\n sessionId,\n payload,\n authorization,\n}: | IWeb2Payload[\"message\"]\n | IHandleWeb2ProxyRequestStepParams) => Promise.","Handles the web2 proxy request."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/routines/transactions/handleWeb2ProxyRequest.ts","line_range":[23,106],"symbol_name":"handleWeb2ProxyRequest","language":"typescript","module_resolution_path":"@/libs/network/routines/transactions/handleWeb2ProxyRequest"},"relationships":{"depends_on":["mod-55764c2c659740ce445946f7"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-c0b505bebd5393a5e4195eff","sym-df74c42f1d0883c0ac4ea037"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 18-21","related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-804bb364f18a73fb39945cba","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["modules (variable) exported from `src/libs/network/securityModule.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/securityModule.ts","line_range":[4,14],"symbol_name":"modules","language":"typescript","module_resolution_path":"@/libs/network/securityModule"},"relationships":{"depends_on":["mod-a152cd44db7715c440d48dda"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.956Z","authors":[]}} +{"uuid":"sym-d6b52ce184f5b4b4464e72a9","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["emptyResponse (variable) exported from `src/libs/network/server_rpc.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/server_rpc.ts","line_range":[135,140],"symbol_name":"emptyResponse","language":"typescript","module_resolution_path":"@/libs/network/server_rpc"},"relationships":{"depends_on":["mod-8178eae36aec57f1b202e180"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk","env:TLSNOTARY_ENABLED"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-8851eae25a7755afe330f85c","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["serverRpcBun (function) exported from `src/libs/network/server_rpc.ts`.","TypeScript signature: () => unknown.","HTTP server using Bun"],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/server_rpc.ts","line_range":[420,661],"symbol_name":"serverRpcBun","language":"typescript","module_resolution_path":"@/libs/network/server_rpc"},"relationships":{"depends_on":["mod-8178eae36aec57f1b202e180"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-7a01cccc7236812081d5703b","sym-08c52ead6283b6512a19e7b9","sym-37bb8c7ba0ff239db9cba19f","sym-ab44157beed9a9398173d77c","sym-f4fdde41deaab86f8d60b115","sym-c40d1a0a528d0efe34d893f0"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk","env:TLSNOTARY_ENABLED"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 416-418","related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-849aec43b27a066eb7146591","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `VerificationResult` in `src/libs/network/verifySignature.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/verifySignature.ts","line_range":[12,37],"symbol_name":"VerificationResult::api","language":"typescript","module_resolution_path":"@/libs/network/verifySignature"},"relationships":{"depends_on":["sym-eacdd884e39f2f675fcacdd6"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-eacdd884e39f2f675fcacdd6","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["VerificationResult (interface) exported from `src/libs/network/verifySignature.ts`."],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/verifySignature.ts","line_range":[12,37],"symbol_name":"VerificationResult","language":"typescript","module_resolution_path":"@/libs/network/verifySignature"},"relationships":{"depends_on":["mod-8eb2e47a2e706233783e8ea4"],"depended_by":["sym-849aec43b27a066eb7146591"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-0cff4cfd0a8b9a5024c1680a","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["verifySignature (function) exported from `src/libs/network/verifySignature.ts`.","TypeScript signature: (identity: string, signature: string) => Promise.","Verify a signature from request headers"],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/network/verifySignature.ts","line_range":[53,135],"symbol_name":"verifySignature","language":"typescript","module_resolution_path":"@/libs/network/verifySignature"},"relationships":{"depends_on":["mod-8eb2e47a2e706233783e8ea4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 42-52","related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-3e2cd2e59eb550fbfb626bcc","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["isKeyWhitelisted (function) exported from `src/libs/network/verifySignature.ts`.","TypeScript signature: (publicKey: string | null, whitelistedKeys: string[]) => boolean.","Check if a public key is in the whitelist"],"intent_vectors":["networking"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/network/verifySignature.ts","line_range":[144,158],"symbol_name":"isKeyWhitelisted","language":"typescript","module_resolution_path":"@/libs/network/verifySignature"},"relationships":{"depends_on":["mod-8eb2e47a2e706233783e8ea4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 137-143","related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-d90ac9be913c03f89de49a6a","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `AuthBlockParser` in `src/libs/omniprotocol/auth/parser.ts`."],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/auth/parser.ts","line_range":[4,109],"symbol_name":"AuthBlockParser::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/auth/parser"},"relationships":{"depends_on":["sym-98134ecd770aae6dcbec90ab"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-51b1658664a464a28add7d39","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["AuthBlockParser.parse method on exported class `AuthBlockParser` in `src/libs/omniprotocol/auth/parser.ts`.","TypeScript signature: (buffer: Buffer, offset: number) => { auth: AuthBlock; bytesRead: number }."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/auth/parser.ts","line_range":[11,63],"symbol_name":"AuthBlockParser.parse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/auth/parser"},"relationships":{"depends_on":["sym-98134ecd770aae6dcbec90ab"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-dd055a2b7be616db227088cd","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["AuthBlockParser.encode method on exported class `AuthBlockParser` in `src/libs/omniprotocol/auth/parser.ts`.","TypeScript signature: (auth: AuthBlock) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/auth/parser.ts","line_range":[68,93],"symbol_name":"AuthBlockParser.encode","language":"typescript","module_resolution_path":"@/libs/omniprotocol/auth/parser"},"relationships":{"depends_on":["sym-98134ecd770aae6dcbec90ab"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-df685b6a9983f7afd60ba389","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["AuthBlockParser.calculateSize method on exported class `AuthBlockParser` in `src/libs/omniprotocol/auth/parser.ts`.","TypeScript signature: (auth: AuthBlock) => number."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/auth/parser.ts","line_range":[98,108],"symbol_name":"AuthBlockParser.calculateSize","language":"typescript","module_resolution_path":"@/libs/omniprotocol/auth/parser"},"relationships":{"depends_on":["sym-98134ecd770aae6dcbec90ab"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-98134ecd770aae6dcbec90ab","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["AuthBlockParser (class) exported from `src/libs/omniprotocol/auth/parser.ts`."],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/auth/parser.ts","line_range":[4,109],"symbol_name":"AuthBlockParser","language":"typescript","module_resolution_path":"@/libs/omniprotocol/auth/parser"},"relationships":{"depends_on":["mod-0f688ec55978b6cd5ecd4803"],"depended_by":["sym-d90ac9be913c03f89de49a6a","sym-51b1658664a464a28add7d39","sym-dd055a2b7be616db227088cd","sym-df685b6a9983f7afd60ba389"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-1ddfb88e111a1fc510113fb2","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported enum `SignatureAlgorithm` in `src/libs/omniprotocol/auth/types.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/auth/types.ts","line_range":[1,6],"symbol_name":"SignatureAlgorithm::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/auth/types"},"relationships":{"depends_on":["sym-8daeceb7337326d9572adf7f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-8daeceb7337326d9572adf7f","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SignatureAlgorithm (enum) exported from `src/libs/omniprotocol/auth/types.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/auth/types.ts","line_range":[1,6],"symbol_name":"SignatureAlgorithm","language":"typescript","module_resolution_path":"@/libs/omniprotocol/auth/types"},"relationships":{"depends_on":["mod-28ff727efa5c0915d4fbfbe9"],"depended_by":["sym-1ddfb88e111a1fc510113fb2"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-12af65c030a64890b7bdd5c5","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported enum `SignatureMode` in `src/libs/omniprotocol/auth/types.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/auth/types.ts","line_range":[8,14],"symbol_name":"SignatureMode::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/auth/types"},"relationships":{"depends_on":["sym-c906e076f2017c51d5f17ad9"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-c906e076f2017c51d5f17ad9","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SignatureMode (enum) exported from `src/libs/omniprotocol/auth/types.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/auth/types.ts","line_range":[8,14],"symbol_name":"SignatureMode","language":"typescript","module_resolution_path":"@/libs/omniprotocol/auth/types"},"relationships":{"depends_on":["mod-28ff727efa5c0915d4fbfbe9"],"depended_by":["sym-12af65c030a64890b7bdd5c5"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-7536e2fefc44da98f1f245f0","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `AuthBlock` in `src/libs/omniprotocol/auth/types.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/auth/types.ts","line_range":[16,22],"symbol_name":"AuthBlock::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/auth/types"},"relationships":{"depends_on":["sym-7481da4d2551622256f79c34"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-7481da4d2551622256f79c34","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["AuthBlock (interface) exported from `src/libs/omniprotocol/auth/types.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/auth/types.ts","line_range":[16,22],"symbol_name":"AuthBlock","language":"typescript","module_resolution_path":"@/libs/omniprotocol/auth/types"},"relationships":{"depends_on":["mod-28ff727efa5c0915d4fbfbe9"],"depended_by":["sym-7536e2fefc44da98f1f245f0"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-57cc691568b21b3800bc42b8","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `VerificationResult` in `src/libs/omniprotocol/auth/types.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/auth/types.ts","line_range":[24,28],"symbol_name":"VerificationResult::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/auth/types"},"relationships":{"depends_on":["sym-9d0b831a20db10611cc45fb1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-9d0b831a20db10611cc45fb1","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["VerificationResult (interface) exported from `src/libs/omniprotocol/auth/types.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/auth/types.ts","line_range":[24,28],"symbol_name":"VerificationResult","language":"typescript","module_resolution_path":"@/libs/omniprotocol/auth/types"},"relationships":{"depends_on":["mod-28ff727efa5c0915d4fbfbe9"],"depended_by":["sym-57cc691568b21b3800bc42b8"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-5262afb38ed02f6e62f0d091","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `SignatureVerifier` in `src/libs/omniprotocol/auth/verifier.ts`."],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/auth/verifier.ts","line_range":[7,207],"symbol_name":"SignatureVerifier::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/auth/verifier"},"relationships":{"depends_on":["sym-734d63d64bf5b1e1a55b41ae"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge","@noble/hashes/sha3.js"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-990cc459ace9fb6d1eb373ea","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SignatureVerifier.verify method on exported class `SignatureVerifier` in `src/libs/omniprotocol/auth/verifier.ts`.","TypeScript signature: (auth: AuthBlock, header: OmniMessageHeader, payload: Buffer) => Promise."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/omniprotocol/auth/verifier.ts","line_range":[18,71],"symbol_name":"SignatureVerifier.verify","language":"typescript","module_resolution_path":"@/libs/omniprotocol/auth/verifier"},"relationships":{"depends_on":["sym-734d63d64bf5b1e1a55b41ae"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node-forge","@noble/hashes/sha3.js"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-734d63d64bf5b1e1a55b41ae","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SignatureVerifier (class) exported from `src/libs/omniprotocol/auth/verifier.ts`."],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/auth/verifier.ts","line_range":[7,207],"symbol_name":"SignatureVerifier","language":"typescript","module_resolution_path":"@/libs/omniprotocol/auth/verifier"},"relationships":{"depends_on":["mod-e421d8434312ee89ef377735"],"depended_by":["sym-5262afb38ed02f6e62f0d091","sym-990cc459ace9fb6d1eb373ea"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge","@noble/hashes/sha3.js"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-0258ae2808ceacc5e5c7daf6","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["* (re_export_star) exported from `src/libs/omniprotocol/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/index.ts","line_range":[1,1],"symbol_name":"*","language":"typescript","module_resolution_path":"@/libs/omniprotocol/index"},"relationships":{"depends_on":["mod-0d23e37fd3828b9a02bf3b23"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.956Z","authors":[]}} +{"uuid":"sym-748b9ac5e4eefbb8f1c662db","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["* (re_export_star) exported from `src/libs/omniprotocol/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/index.ts","line_range":[2,2],"symbol_name":"*","language":"typescript","module_resolution_path":"@/libs/omniprotocol/index"},"relationships":{"depends_on":["mod-0d23e37fd3828b9a02bf3b23"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.956Z","authors":[]}} +{"uuid":"sym-905c4a303dc09878f445885a","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["* (re_export_star) exported from `src/libs/omniprotocol/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/index.ts","line_range":[3,3],"symbol_name":"*","language":"typescript","module_resolution_path":"@/libs/omniprotocol/index"},"relationships":{"depends_on":["mod-0d23e37fd3828b9a02bf3b23"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.956Z","authors":[]}} +{"uuid":"sym-13f054ebc0ac09ce91489435","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["* (re_export_star) exported from `src/libs/omniprotocol/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/index.ts","line_range":[4,4],"symbol_name":"*","language":"typescript","module_resolution_path":"@/libs/omniprotocol/index"},"relationships":{"depends_on":["mod-0d23e37fd3828b9a02bf3b23"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.956Z","authors":[]}} +{"uuid":"sym-9234875151f1a7f0cf31b9e7","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["* (re_export_star) exported from `src/libs/omniprotocol/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/index.ts","line_range":[5,5],"symbol_name":"*","language":"typescript","module_resolution_path":"@/libs/omniprotocol/index"},"relationships":{"depends_on":["mod-0d23e37fd3828b9a02bf3b23"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.956Z","authors":[]}} +{"uuid":"sym-daabbda2f57bbfdba83b8e83","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["* (re_export_star) exported from `src/libs/omniprotocol/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/index.ts","line_range":[6,6],"symbol_name":"*","language":"typescript","module_resolution_path":"@/libs/omniprotocol/index"},"relationships":{"depends_on":["mod-0d23e37fd3828b9a02bf3b23"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.956Z","authors":[]}} +{"uuid":"sym-733e1ea545c75abf365916d0","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["* (re_export_star) exported from `src/libs/omniprotocol/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/index.ts","line_range":[7,7],"symbol_name":"*","language":"typescript","module_resolution_path":"@/libs/omniprotocol/index"},"relationships":{"depends_on":["mod-0d23e37fd3828b9a02bf3b23"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.956Z","authors":[]}} +{"uuid":"sym-30146865aa7ee601c7c84c2c","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["* (re_export_star) exported from `src/libs/omniprotocol/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/index.ts","line_range":[8,8],"symbol_name":"*","language":"typescript","module_resolution_path":"@/libs/omniprotocol/index"},"relationships":{"depends_on":["mod-0d23e37fd3828b9a02bf3b23"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.956Z","authors":[]}} +{"uuid":"sym-babb5160904dfa15d9efffde","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["* (re_export_star) exported from `src/libs/omniprotocol/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/index.ts","line_range":[9,9],"symbol_name":"*","language":"typescript","module_resolution_path":"@/libs/omniprotocol/index"},"relationships":{"depends_on":["mod-0d23e37fd3828b9a02bf3b23"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.956Z","authors":[]}} +{"uuid":"sym-76bd6ff260e8e858c0a13b22","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["* (re_export_star) exported from `src/libs/omniprotocol/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/index.ts","line_range":[10,10],"symbol_name":"*","language":"typescript","module_resolution_path":"@/libs/omniprotocol/index"},"relationships":{"depends_on":["mod-0d23e37fd3828b9a02bf3b23"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.956Z","authors":[]}} +{"uuid":"sym-267418c45b8286ee4f1c6f22","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["* (re_export_star) exported from `src/libs/omniprotocol/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/index.ts","line_range":[11,11],"symbol_name":"*","language":"typescript","module_resolution_path":"@/libs/omniprotocol/index"},"relationships":{"depends_on":["mod-0d23e37fd3828b9a02bf3b23"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.956Z","authors":[]}} +{"uuid":"sym-718d0f88adf207171e198984","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["* (re_export_star) exported from `src/libs/omniprotocol/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/index.ts","line_range":[12,12],"symbol_name":"*","language":"typescript","module_resolution_path":"@/libs/omniprotocol/index"},"relationships":{"depends_on":["mod-0d23e37fd3828b9a02bf3b23"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.956Z","authors":[]}} +{"uuid":"sym-335b3635e60265c0f047f94a","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["* (re_export_star) exported from `src/libs/omniprotocol/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/index.ts","line_range":[13,13],"symbol_name":"*","language":"typescript","module_resolution_path":"@/libs/omniprotocol/index"},"relationships":{"depends_on":["mod-0d23e37fd3828b9a02bf3b23"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.956Z","authors":[]}} +{"uuid":"sym-47e8e5e81e562513babffa84","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["* (re_export_star) exported from `src/libs/omniprotocol/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/index.ts","line_range":[14,14],"symbol_name":"*","language":"typescript","module_resolution_path":"@/libs/omniprotocol/index"},"relationships":{"depends_on":["mod-0d23e37fd3828b9a02bf3b23"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.956Z","authors":[]}} +{"uuid":"sym-65fd4ae8ff6b4e80cd8e7ddf","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["* (re_export_star) exported from `src/libs/omniprotocol/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/index.ts","line_range":[15,15],"symbol_name":"*","language":"typescript","module_resolution_path":"@/libs/omniprotocol/index"},"relationships":{"depends_on":["mod-0d23e37fd3828b9a02bf3b23"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.956Z","authors":[]}} +{"uuid":"sym-9e392e3be1bb8e80b9d8eca0","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["* (re_export_star) exported from `src/libs/omniprotocol/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/index.ts","line_range":[16,16],"symbol_name":"*","language":"typescript","module_resolution_path":"@/libs/omniprotocol/index"},"relationships":{"depends_on":["mod-0d23e37fd3828b9a02bf3b23"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.956Z","authors":[]}} +{"uuid":"sym-4b548d9bad1a3f7b3b804545","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["* (re_export_star) exported from `src/libs/omniprotocol/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/index.ts","line_range":[17,17],"symbol_name":"*","language":"typescript","module_resolution_path":"@/libs/omniprotocol/index"},"relationships":{"depends_on":["mod-0d23e37fd3828b9a02bf3b23"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.956Z","authors":[]}} +{"uuid":"sym-8270be34adad1236a1768639","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `BaseAdapterOptions` in `src/libs/omniprotocol/integration/BaseAdapter.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/BaseAdapter.ts","line_range":[23,25],"symbol_name":"BaseAdapterOptions::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/BaseAdapter"},"relationships":{"depends_on":["sym-906fc1a6f627adb682f73f69"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:NODE_PORT","env:OMNI_FATAL","env:OMNI_PORT","env:OMNI_TLS_ENABLED","env:PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-906fc1a6f627adb682f73f69","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BaseAdapterOptions (interface) exported from `src/libs/omniprotocol/integration/BaseAdapter.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/BaseAdapter.ts","line_range":[23,25],"symbol_name":"BaseAdapterOptions","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/BaseAdapter"},"relationships":{"depends_on":["mod-cf03366f5eef469f1f9abae5"],"depended_by":["sym-8270be34adad1236a1768639"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:NODE_PORT","env:OMNI_FATAL","env:OMNI_PORT","env:OMNI_TLS_ENABLED","env:PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-98bddcf841a7edde32258eff","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `BaseOmniAdapter` in `src/libs/omniprotocol/integration/BaseAdapter.ts`.","Base adapter class with shared OmniProtocol utilities"],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/BaseAdapter.ts","line_range":[44,251],"symbol_name":"BaseOmniAdapter::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/BaseAdapter"},"relationships":{"depends_on":["sym-33f3a54f75b5f49ab6ca4e18"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:NODE_PORT","env:OMNI_FATAL","env:OMNI_PORT","env:OMNI_TLS_ENABLED","env:PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 41-43","related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-eeda3f868c196fe0d908da30","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BaseOmniAdapter.migrationMode method on exported class `BaseOmniAdapter` in `src/libs/omniprotocol/integration/BaseAdapter.ts`.","TypeScript signature: () => MigrationMode."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/BaseAdapter.ts","line_range":[67,69],"symbol_name":"BaseOmniAdapter.migrationMode","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/BaseAdapter"},"relationships":{"depends_on":["sym-33f3a54f75b5f49ab6ca4e18"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:NODE_PORT","env:OMNI_FATAL","env:OMNI_PORT","env:OMNI_TLS_ENABLED","env:PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-ef6157dcde41199793a2f652","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BaseOmniAdapter.migrationMode method on exported class `BaseOmniAdapter` in `src/libs/omniprotocol/integration/BaseAdapter.ts`.","TypeScript signature: (mode: MigrationMode) => unknown."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/BaseAdapter.ts","line_range":[71,73],"symbol_name":"BaseOmniAdapter.migrationMode","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/BaseAdapter"},"relationships":{"depends_on":["sym-33f3a54f75b5f49ab6ca4e18"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:NODE_PORT","env:OMNI_FATAL","env:OMNI_PORT","env:OMNI_TLS_ENABLED","env:PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-b3a77b32f73fa2f8e5b6eb38","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BaseOmniAdapter.omniPeers method on exported class `BaseOmniAdapter` in `src/libs/omniprotocol/integration/BaseAdapter.ts`.","TypeScript signature: () => Set."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/BaseAdapter.ts","line_range":[75,77],"symbol_name":"BaseOmniAdapter.omniPeers","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/BaseAdapter"},"relationships":{"depends_on":["sym-33f3a54f75b5f49ab6ca4e18"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:NODE_PORT","env:OMNI_FATAL","env:OMNI_PORT","env:OMNI_TLS_ENABLED","env:PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-28b62a49592cfcedda7995b5","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BaseOmniAdapter.shouldUseOmni method on exported class `BaseOmniAdapter` in `src/libs/omniprotocol/integration/BaseAdapter.ts`.","TypeScript signature: (peerIdentity: string) => boolean."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/BaseAdapter.ts","line_range":[82,95],"symbol_name":"BaseOmniAdapter.shouldUseOmni","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/BaseAdapter"},"relationships":{"depends_on":["sym-33f3a54f75b5f49ab6ca4e18"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:NODE_PORT","env:OMNI_FATAL","env:OMNI_PORT","env:OMNI_TLS_ENABLED","env:PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-0c27439debe25460e5640c81","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BaseOmniAdapter.markOmniPeer method on exported class `BaseOmniAdapter` in `src/libs/omniprotocol/integration/BaseAdapter.ts`.","TypeScript signature: (peerIdentity: string) => void."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/BaseAdapter.ts","line_range":[100,102],"symbol_name":"BaseOmniAdapter.markOmniPeer","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/BaseAdapter"},"relationships":{"depends_on":["sym-33f3a54f75b5f49ab6ca4e18"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:NODE_PORT","env:OMNI_FATAL","env:OMNI_PORT","env:OMNI_TLS_ENABLED","env:PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-da8dcc5ae3bdb357233500ed","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BaseOmniAdapter.markHttpPeer method on exported class `BaseOmniAdapter` in `src/libs/omniprotocol/integration/BaseAdapter.ts`.","TypeScript signature: (peerIdentity: string) => void."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/BaseAdapter.ts","line_range":[107,109],"symbol_name":"BaseOmniAdapter.markHttpPeer","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/BaseAdapter"},"relationships":{"depends_on":["sym-33f3a54f75b5f49ab6ca4e18"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:NODE_PORT","env:OMNI_FATAL","env:OMNI_PORT","env:OMNI_TLS_ENABLED","env:PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-fe29ef8358240f8b5d0efb67","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BaseOmniAdapter.httpToTcpConnectionString method on exported class `BaseOmniAdapter` in `src/libs/omniprotocol/integration/BaseAdapter.ts`.","TypeScript signature: (httpUrl: string) => string."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/BaseAdapter.ts","line_range":[122,131],"symbol_name":"BaseOmniAdapter.httpToTcpConnectionString","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/BaseAdapter"},"relationships":{"depends_on":["sym-33f3a54f75b5f49ab6ca4e18"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:NODE_PORT","env:OMNI_FATAL","env:OMNI_PORT","env:OMNI_TLS_ENABLED","env:PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-b363a17c893ebc8b8c6ae66d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BaseOmniAdapter.getTcpProtocol method on exported class `BaseOmniAdapter` in `src/libs/omniprotocol/integration/BaseAdapter.ts`.","TypeScript signature: () => string."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/BaseAdapter.ts","line_range":[137,141],"symbol_name":"BaseOmniAdapter.getTcpProtocol","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/BaseAdapter"},"relationships":{"depends_on":["sym-33f3a54f75b5f49ab6ca4e18"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:NODE_PORT","env:OMNI_FATAL","env:OMNI_PORT","env:OMNI_TLS_ENABLED","env:PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-e04adf46980d5389c13c53f2","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BaseOmniAdapter.getOmniPort method on exported class `BaseOmniAdapter` in `src/libs/omniprotocol/integration/BaseAdapter.ts`.","TypeScript signature: () => string."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/BaseAdapter.ts","line_range":[147,154],"symbol_name":"BaseOmniAdapter.getOmniPort","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/BaseAdapter"},"relationships":{"depends_on":["sym-33f3a54f75b5f49ab6ca4e18"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:NODE_PORT","env:OMNI_FATAL","env:OMNI_PORT","env:OMNI_TLS_ENABLED","env:PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-24238aae044a9288508e528f","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BaseOmniAdapter.getPrivateKey method on exported class `BaseOmniAdapter` in `src/libs/omniprotocol/integration/BaseAdapter.ts`.","TypeScript signature: () => Buffer | null."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/BaseAdapter.ts","line_range":[163,165],"symbol_name":"BaseOmniAdapter.getPrivateKey","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/BaseAdapter"},"relationships":{"depends_on":["sym-33f3a54f75b5f49ab6ca4e18"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:NODE_PORT","env:OMNI_FATAL","env:OMNI_PORT","env:OMNI_TLS_ENABLED","env:PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-a2b4ef37ab235210f129c582","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BaseOmniAdapter.getPublicKey method on exported class `BaseOmniAdapter` in `src/libs/omniprotocol/integration/BaseAdapter.ts`.","TypeScript signature: () => Buffer | null."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/BaseAdapter.ts","line_range":[170,172],"symbol_name":"BaseOmniAdapter.getPublicKey","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/BaseAdapter"},"relationships":{"depends_on":["sym-33f3a54f75b5f49ab6ca4e18"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:NODE_PORT","env:OMNI_FATAL","env:OMNI_PORT","env:OMNI_TLS_ENABLED","env:PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-79b1cc421f7bb8225330d102","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BaseOmniAdapter.hasKeys method on exported class `BaseOmniAdapter` in `src/libs/omniprotocol/integration/BaseAdapter.ts`.","TypeScript signature: () => boolean."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/BaseAdapter.ts","line_range":[177,179],"symbol_name":"BaseOmniAdapter.hasKeys","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/BaseAdapter"},"relationships":{"depends_on":["sym-33f3a54f75b5f49ab6ca4e18"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:NODE_PORT","env:OMNI_FATAL","env:OMNI_PORT","env:OMNI_TLS_ENABLED","env:PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-2d2d0700e456ea680a685e38","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BaseOmniAdapter.getConnectionPool method on exported class `BaseOmniAdapter` in `src/libs/omniprotocol/integration/BaseAdapter.ts`.","TypeScript signature: () => ConnectionPool."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/BaseAdapter.ts","line_range":[188,190],"symbol_name":"BaseOmniAdapter.getConnectionPool","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/BaseAdapter"},"relationships":{"depends_on":["sym-33f3a54f75b5f49ab6ca4e18"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:NODE_PORT","env:OMNI_FATAL","env:OMNI_PORT","env:OMNI_TLS_ENABLED","env:PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-74ba7a042ee52e20b6cdfcc9","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BaseOmniAdapter.getPoolStats method on exported class `BaseOmniAdapter` in `src/libs/omniprotocol/integration/BaseAdapter.ts`.","TypeScript signature: () => {\n totalConnections: number\n activeConnections: number\n idleConnections: number\n }."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/BaseAdapter.ts","line_range":[195,206],"symbol_name":"BaseOmniAdapter.getPoolStats","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/BaseAdapter"},"relationships":{"depends_on":["sym-33f3a54f75b5f49ab6ca4e18"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:NODE_PORT","env:OMNI_FATAL","env:OMNI_PORT","env:OMNI_TLS_ENABLED","env:PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-220ff4ee1d8624cffd6e1d74","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BaseOmniAdapter.isFatalMode method on exported class `BaseOmniAdapter` in `src/libs/omniprotocol/integration/BaseAdapter.ts`.","TypeScript signature: () => boolean."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/BaseAdapter.ts","line_range":[215,217],"symbol_name":"BaseOmniAdapter.isFatalMode","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/BaseAdapter"},"relationships":{"depends_on":["sym-33f3a54f75b5f49ab6ca4e18"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:NODE_PORT","env:OMNI_FATAL","env:OMNI_PORT","env:OMNI_TLS_ENABLED","env:PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-2989dc3b816456aad25e312a","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BaseOmniAdapter.handleFatalError method on exported class `BaseOmniAdapter` in `src/libs/omniprotocol/integration/BaseAdapter.ts`.","TypeScript signature: (error: unknown, context: string) => boolean."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/BaseAdapter.ts","line_range":[227,250],"symbol_name":"BaseOmniAdapter.handleFatalError","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/BaseAdapter"},"relationships":{"depends_on":["sym-33f3a54f75b5f49ab6ca4e18"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:NODE_PORT","env:OMNI_FATAL","env:OMNI_PORT","env:OMNI_TLS_ENABLED","env:PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-33f3a54f75b5f49ab6ca4e18","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BaseOmniAdapter (class) exported from `src/libs/omniprotocol/integration/BaseAdapter.ts`.","Base adapter class with shared OmniProtocol utilities"],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/BaseAdapter.ts","line_range":[44,251],"symbol_name":"BaseOmniAdapter","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/BaseAdapter"},"relationships":{"depends_on":["mod-cf03366f5eef469f1f9abae5"],"depended_by":["sym-98bddcf841a7edde32258eff","sym-eeda3f868c196fe0d908da30","sym-ef6157dcde41199793a2f652","sym-b3a77b32f73fa2f8e5b6eb38","sym-28b62a49592cfcedda7995b5","sym-0c27439debe25460e5640c81","sym-da8dcc5ae3bdb357233500ed","sym-fe29ef8358240f8b5d0efb67","sym-b363a17c893ebc8b8c6ae66d","sym-e04adf46980d5389c13c53f2","sym-24238aae044a9288508e528f","sym-a2b4ef37ab235210f129c582","sym-79b1cc421f7bb8225330d102","sym-2d2d0700e456ea680a685e38","sym-74ba7a042ee52e20b6cdfcc9","sym-220ff4ee1d8624cffd6e1d74","sym-2989dc3b816456aad25e312a"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:NODE_PORT","env:OMNI_FATAL","env:OMNI_PORT","env:OMNI_TLS_ENABLED","env:PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 41-43","related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-f94e3f7f5326b8f03a004c92","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `ConsensusAdapterOptions` in `src/libs/omniprotocol/integration/consensusAdapter.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/consensusAdapter.ts","line_range":[27,27],"symbol_name":"ConsensusAdapterOptions::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/consensusAdapter"},"relationships":{"depends_on":["sym-6fc1a8d7bec38c1c054731cf"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-6fc1a8d7bec38c1c054731cf","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ConsensusAdapterOptions (type) exported from `src/libs/omniprotocol/integration/consensusAdapter.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/consensusAdapter.ts","line_range":[27,27],"symbol_name":"ConsensusAdapterOptions","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/consensusAdapter"},"relationships":{"depends_on":["mod-eef3b769fd906f6d2e387d17"],"depended_by":["sym-f94e3f7f5326b8f03a004c92"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-f289610a972129ad1a034265","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `ConsensusOmniAdapter` in `src/libs/omniprotocol/integration/consensusAdapter.ts`."],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/consensusAdapter.ts","line_range":[46,280],"symbol_name":"ConsensusOmniAdapter::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/consensusAdapter"},"relationships":{"depends_on":["sym-c622baacd0af9f2fa1e8a75d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-065cec27a89a1f96d35d9616","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ConsensusOmniAdapter.adaptConsensusCall method on exported class `ConsensusOmniAdapter` in `src/libs/omniprotocol/integration/consensusAdapter.ts`.","TypeScript signature: (peer: Peer, innerMethod: string, innerParams: unknown[]) => Promise."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/omniprotocol/integration/consensusAdapter.ts","line_range":[58,142],"symbol_name":"ConsensusOmniAdapter.adaptConsensusCall","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/consensusAdapter"},"relationships":{"depends_on":["sym-c622baacd0af9f2fa1e8a75d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-c622baacd0af9f2fa1e8a75d","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ConsensusOmniAdapter (class) exported from `src/libs/omniprotocol/integration/consensusAdapter.ts`."],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/consensusAdapter.ts","line_range":[46,280],"symbol_name":"ConsensusOmniAdapter","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/consensusAdapter"},"relationships":{"depends_on":["mod-eef3b769fd906f6d2e387d17"],"depended_by":["sym-f289610a972129ad1a034265","sym-065cec27a89a1f96d35d9616"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-5e3c44e475fe3984a48af08e","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["default (export_default) exported from `src/libs/omniprotocol/integration/consensusAdapter.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/consensusAdapter.ts","line_range":[282,282],"symbol_name":"default","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/consensusAdapter"},"relationships":{"depends_on":["mod-eef3b769fd906f6d2e387d17"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-9d04b4352850e4e29d81aa9a","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["BaseOmniAdapter (re_export) exported from `src/libs/omniprotocol/integration/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/index.ts","line_range":[9,9],"symbol_name":"BaseOmniAdapter","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/index"},"relationships":{"depends_on":["mod-520483a8a175e4c376a6fc66"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-8d46e34227aa3b82778ad701","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["BaseAdapterOptions (re_export) exported from `src/libs/omniprotocol/integration/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/index.ts","line_range":[9,9],"symbol_name":"BaseAdapterOptions","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/index"},"relationships":{"depends_on":["mod-520483a8a175e4c376a6fc66"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-0d16d90a0af194182c7763d8","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["PeerOmniAdapter (re_export) exported from `src/libs/omniprotocol/integration/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/index.ts","line_range":[12,12],"symbol_name":"PeerOmniAdapter","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/index"},"relationships":{"depends_on":["mod-520483a8a175e4c376a6fc66"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-294aec35de62c4328120b87f","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["AdapterOptions (re_export) exported from `src/libs/omniprotocol/integration/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/index.ts","line_range":[12,12],"symbol_name":"AdapterOptions","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/index"},"relationships":{"depends_on":["mod-520483a8a175e4c376a6fc66"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-c10aa7411e9a4c559b6bf35f","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["ConsensusOmniAdapter (re_export) exported from `src/libs/omniprotocol/integration/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/index.ts","line_range":[15,15],"symbol_name":"ConsensusOmniAdapter","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/index"},"relationships":{"depends_on":["mod-520483a8a175e4c376a6fc66"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-bb4af358ea202588d8c6fb5e","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["ConsensusAdapterOptions (re_export) exported from `src/libs/omniprotocol/integration/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/index.ts","line_range":[15,15],"symbol_name":"ConsensusAdapterOptions","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/index"},"relationships":{"depends_on":["mod-520483a8a175e4c376a6fc66"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-4f60154a5b98b9ad1a439365","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["getNodePrivateKey (re_export) exported from `src/libs/omniprotocol/integration/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/index.ts","line_range":[19,19],"symbol_name":"getNodePrivateKey","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/index"},"relationships":{"depends_on":["mod-520483a8a175e4c376a6fc66"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-8532559ab87c585dd75c711e","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["getNodePublicKey (re_export) exported from `src/libs/omniprotocol/integration/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/index.ts","line_range":[20,20],"symbol_name":"getNodePublicKey","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/index"},"relationships":{"depends_on":["mod-520483a8a175e4c376a6fc66"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-c75dad10441655e24de54ea9","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["getNodeIdentity (re_export) exported from `src/libs/omniprotocol/integration/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/index.ts","line_range":[21,21],"symbol_name":"getNodeIdentity","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/index"},"relationships":{"depends_on":["mod-520483a8a175e4c376a6fc66"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-32194fbfce8c990fbf259c10","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["hasNodeKeys (re_export) exported from `src/libs/omniprotocol/integration/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/index.ts","line_range":[22,22],"symbol_name":"hasNodeKeys","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/index"},"relationships":{"depends_on":["mod-520483a8a175e4c376a6fc66"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-2b50e307c6dd33f305ef5781","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["validateNodeKeys (re_export) exported from `src/libs/omniprotocol/integration/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/index.ts","line_range":[23,23],"symbol_name":"validateNodeKeys","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/index"},"relationships":{"depends_on":["mod-520483a8a175e4c376a6fc66"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-20fdb18a1d51a344c3e5f1a6","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["startOmniProtocolServer (re_export) exported from `src/libs/omniprotocol/integration/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/index.ts","line_range":[27,27],"symbol_name":"startOmniProtocolServer","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/index"},"relationships":{"depends_on":["mod-520483a8a175e4c376a6fc66"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-21f9add087cbe8548e5cfaa7","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getNodePrivateKey (function) exported from `src/libs/omniprotocol/integration/keys.ts`.","TypeScript signature: () => Buffer | null.","Get the node's Ed25519 private key as Buffer (32-byte seed)"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/keys.ts","line_range":[21,60],"symbol_name":"getNodePrivateKey","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/keys"},"relationships":{"depends_on":["mod-88c1741b3b46fa02af202651"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-1c67049066747e28049dd5e3","sym-815707b26951dca6661da541"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 12-20","related_adr":null,"last_modified":"2026-02-13T14:41:04.956Z","authors":[]}} +{"uuid":"sym-28528c136e20c5b9216375cc","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getNodePublicKey (function) exported from `src/libs/omniprotocol/integration/keys.ts`.","TypeScript signature: () => Buffer | null.","Get the node's Ed25519 public key as Buffer"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/keys.ts","line_range":[66,91],"symbol_name":"getNodePublicKey","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/keys"},"relationships":{"depends_on":["mod-88c1741b3b46fa02af202651"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-125aa959f581df6cef0211c3","sym-1c67049066747e28049dd5e3","sym-815707b26951dca6661da541"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 62-65","related_adr":null,"last_modified":"2026-02-13T14:41:04.956Z","authors":[]}} +{"uuid":"sym-125aa959f581df6cef0211c3","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getNodeIdentity (function) exported from `src/libs/omniprotocol/integration/keys.ts`.","TypeScript signature: () => string | null.","Get the node's identity (hex-encoded public key)"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/keys.ts","line_range":[97,108],"symbol_name":"getNodeIdentity","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/keys"},"relationships":{"depends_on":["mod-88c1741b3b46fa02af202651"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-28528c136e20c5b9216375cc"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 93-96","related_adr":null,"last_modified":"2026-02-13T14:41:04.956Z","authors":[]}} +{"uuid":"sym-1c67049066747e28049dd5e3","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["hasNodeKeys (function) exported from `src/libs/omniprotocol/integration/keys.ts`.","TypeScript signature: () => boolean.","Check if the node has keys configured"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/keys.ts","line_range":[114,118],"symbol_name":"hasNodeKeys","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/keys"},"relationships":{"depends_on":["mod-88c1741b3b46fa02af202651"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-21f9add087cbe8548e5cfaa7","sym-28528c136e20c5b9216375cc"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 110-113","related_adr":null,"last_modified":"2026-02-13T14:41:04.956Z","authors":[]}} +{"uuid":"sym-815707b26951dca6661da541","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["validateNodeKeys (function) exported from `src/libs/omniprotocol/integration/keys.ts`.","TypeScript signature: () => boolean.","Validate that keys are Ed25519 format (32-byte public key, 64-byte private key)"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/keys.ts","line_range":[124,144],"symbol_name":"validateNodeKeys","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/keys"},"relationships":{"depends_on":["mod-88c1741b3b46fa02af202651"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-21f9add087cbe8548e5cfaa7","sym-28528c136e20c5b9216375cc"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 120-123","related_adr":null,"last_modified":"2026-02-13T14:41:04.956Z","authors":[]}} +{"uuid":"sym-8d5722b175b0c9218f6f7a1f","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `AdapterOptions` in `src/libs/omniprotocol/integration/peerAdapter.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/peerAdapter.ts","line_range":[19,19],"symbol_name":"AdapterOptions::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/peerAdapter"},"relationships":{"depends_on":["sym-ef97a186c9a7b5c8aabd5a90"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-ef97a186c9a7b5c8aabd5a90","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["AdapterOptions (type) exported from `src/libs/omniprotocol/integration/peerAdapter.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/peerAdapter.ts","line_range":[19,19],"symbol_name":"AdapterOptions","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/peerAdapter"},"relationships":{"depends_on":["mod-d3bd2f24c047572fef2bb57d"],"depended_by":["sym-8d5722b175b0c9218f6f7a1f"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-d4cba561cffde016f7f5b7a6","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `PeerOmniAdapter` in `src/libs/omniprotocol/integration/peerAdapter.ts`."],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/peerAdapter.ts","line_range":[21,141],"symbol_name":"PeerOmniAdapter::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/peerAdapter"},"relationships":{"depends_on":["sym-8865a437064bf5957a1cb25d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-0df78011e78e75646718383c","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerOmniAdapter.adaptCall method on exported class `PeerOmniAdapter` in `src/libs/omniprotocol/integration/peerAdapter.ts`.","TypeScript signature: (peer: Peer, request: RPCRequest, isAuthenticated: unknown) => Promise."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/omniprotocol/integration/peerAdapter.ts","line_range":[30,121],"symbol_name":"PeerOmniAdapter.adaptCall","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/peerAdapter"},"relationships":{"depends_on":["sym-8865a437064bf5957a1cb25d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-3ea283854050f93f09f7bd41","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerOmniAdapter.adaptLongCall method on exported class `PeerOmniAdapter` in `src/libs/omniprotocol/integration/peerAdapter.ts`.","TypeScript signature: (peer: Peer, request: RPCRequest, isAuthenticated: unknown, options: CallOptions) => Promise."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/omniprotocol/integration/peerAdapter.ts","line_range":[127,140],"symbol_name":"PeerOmniAdapter.adaptLongCall","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/peerAdapter"},"relationships":{"depends_on":["sym-8865a437064bf5957a1cb25d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-8865a437064bf5957a1cb25d","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerOmniAdapter (class) exported from `src/libs/omniprotocol/integration/peerAdapter.ts`."],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/peerAdapter.ts","line_range":[21,141],"symbol_name":"PeerOmniAdapter","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/peerAdapter"},"relationships":{"depends_on":["mod-d3bd2f24c047572fef2bb57d"],"depended_by":["sym-d4cba561cffde016f7f5b7a6","sym-0df78011e78e75646718383c","sym-3ea283854050f93f09f7bd41"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-fb22a88dee4e13f011188bb4","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `OmniServerConfig` in `src/libs/omniprotocol/integration/startup.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/startup.ts","line_range":[18,34],"symbol_name":"OmniServerConfig::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/startup"},"relationships":{"depends_on":["sym-61acf2e50e86a7b8950968d6"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:NODE_PORT","env:PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-61acf2e50e86a7b8950968d6","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["OmniServerConfig (interface) exported from `src/libs/omniprotocol/integration/startup.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/startup.ts","line_range":[18,34],"symbol_name":"OmniServerConfig","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/startup"},"relationships":{"depends_on":["mod-ba811634639e67c5ad6dad6a"],"depended_by":["sym-fb22a88dee4e13f011188bb4"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:NODE_PORT","env:PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-38903f0502c45543a1abf916","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["startOmniProtocolServer (function) exported from `src/libs/omniprotocol/integration/startup.ts`.","TypeScript signature: (config: OmniServerConfig) => Promise.","Start the OmniProtocol TCP/TLS server"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/omniprotocol/integration/startup.ts","line_range":[41,145],"symbol_name":"startOmniProtocolServer","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/startup"},"relationships":{"depends_on":["mod-ba811634639e67c5ad6dad6a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["env:NODE_PORT","env:PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 36-40","related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-dc1f8edeeb79e07414f75002","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["stopOmniProtocolServer (function) exported from `src/libs/omniprotocol/integration/startup.ts`.","TypeScript signature: () => Promise.","Stop the OmniProtocol server"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/omniprotocol/integration/startup.ts","line_range":[150,164],"symbol_name":"stopOmniProtocolServer","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/startup"},"relationships":{"depends_on":["mod-ba811634639e67c5ad6dad6a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["env:NODE_PORT","env:PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 147-149","related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-bc5ae08b5a8d0d4051accdc7","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getOmniProtocolServer (function) exported from `src/libs/omniprotocol/integration/startup.ts`.","TypeScript signature: () => OmniProtocolServer | TLSServer | null.","Get the current server instance"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/startup.ts","line_range":[169,171],"symbol_name":"getOmniProtocolServer","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/startup"},"relationships":{"depends_on":["mod-ba811634639e67c5ad6dad6a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["env:NODE_PORT","env:PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 166-168","related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-7a79542eed185c47fa11f698","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getOmniProtocolServerStats (function) exported from `src/libs/omniprotocol/integration/startup.ts`.","TypeScript signature: () => unknown.","Get server statistics"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/integration/startup.ts","line_range":[176,181],"symbol_name":"getOmniProtocolServerStats","language":"typescript","module_resolution_path":"@/libs/omniprotocol/integration/startup"},"relationships":{"depends_on":["mod-ba811634639e67c5ad6dad6a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["env:NODE_PORT","env:PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 173-175","related_adr":null,"last_modified":"2026-02-18T13:23:55.607Z","authors":[]}} +{"uuid":"sym-d252a54842776aa74372f6f2","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `DispatchOptions` in `src/libs/omniprotocol/protocol/dispatcher.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/dispatcher.ts","line_range":[11,15],"symbol_name":"DispatchOptions::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/dispatcher"},"relationships":{"depends_on":["sym-c1d0127d63060ca93441f113"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-c1d0127d63060ca93441f113","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DispatchOptions (interface) exported from `src/libs/omniprotocol/protocol/dispatcher.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/dispatcher.ts","line_range":[11,15],"symbol_name":"DispatchOptions","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/dispatcher"},"relationships":{"depends_on":["mod-8040973db91efbca29bd5a3f"],"depended_by":["sym-d252a54842776aa74372f6f2"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-66031640dec8be166f293f56","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["dispatchOmniMessage (function) exported from `src/libs/omniprotocol/protocol/dispatcher.ts`.","TypeScript signature: (options: DispatchOptions) => Promise."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/dispatcher.ts","line_range":[17,74],"symbol_name":"dispatchOmniMessage","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/dispatcher"},"relationships":{"depends_on":["mod-8040973db91efbca29bd5a3f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-133421c4f44d097284fdc1e1"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-55f93e8069ac7b64652c0d68","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleProposeBlockHash (function) exported from `src/libs/omniprotocol/protocol/handlers/consensus.ts`.","Handler for 0x31 proposeBlockHash opcode"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/consensus.ts","line_range":[23,70],"symbol_name":"handleProposeBlockHash","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/consensus"},"relationships":{"depends_on":["mod-9b81da9944f3e64f4bb36898"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-0d658d44d5b23dfd5829fc4f"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 17-22","related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-99b0d2564383e319659c1396","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleSetValidatorPhase (function) exported from `src/libs/omniprotocol/protocol/handlers/consensus.ts`.","Handler for 0x35 setValidatorPhase opcode"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/consensus.ts","line_range":[78,121],"symbol_name":"handleSetValidatorPhase","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/consensus"},"relationships":{"depends_on":["mod-9b81da9944f3e64f4bb36898"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-0d658d44d5b23dfd5829fc4f"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 72-77","related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-b4dfd8c83a7fc0baf92128df","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleGreenlight (function) exported from `src/libs/omniprotocol/protocol/handlers/consensus.ts`.","Handler for 0x37 greenlight opcode"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/consensus.ts","line_range":[129,164],"symbol_name":"handleGreenlight","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/consensus"},"relationships":{"depends_on":["mod-9b81da9944f3e64f4bb36898"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-0d658d44d5b23dfd5829fc4f"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 123-128","related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-1cfae654989b906d03da6705","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleGetCommonValidatorSeed (function) exported from `src/libs/omniprotocol/protocol/handlers/consensus.ts`.","Handler for 0x33 getCommonValidatorSeed opcode"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/consensus.ts","line_range":[171,195],"symbol_name":"handleGetCommonValidatorSeed","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/consensus"},"relationships":{"depends_on":["mod-9b81da9944f3e64f4bb36898"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-0d658d44d5b23dfd5829fc4f"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 166-170","related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-28d0b0409648d85cbd16e1fa","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleGetValidatorTimestamp (function) exported from `src/libs/omniprotocol/protocol/handlers/consensus.ts`.","Handler for 0x34 getValidatorTimestamp opcode"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/consensus.ts","line_range":[202,227],"symbol_name":"handleGetValidatorTimestamp","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/consensus"},"relationships":{"depends_on":["mod-9b81da9944f3e64f4bb36898"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-0d658d44d5b23dfd5829fc4f"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 197-201","related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-e66e3cbcbd613726d7235a91","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleGetBlockTimestamp (function) exported from `src/libs/omniprotocol/protocol/handlers/consensus.ts`.","Handler for 0x38 getBlockTimestamp opcode"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/consensus.ts","line_range":[234,259],"symbol_name":"handleGetBlockTimestamp","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/consensus"},"relationships":{"depends_on":["mod-9b81da9944f3e64f4bb36898"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-0d658d44d5b23dfd5829fc4f"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 229-233","related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-07c2b09c468e0b5ad536e20f","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleGetValidatorPhase (function) exported from `src/libs/omniprotocol/protocol/handlers/consensus.ts`.","Handler for 0x36 getValidatorPhase opcode"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/consensus.ts","line_range":[266,297],"symbol_name":"handleGetValidatorPhase","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/consensus"},"relationships":{"depends_on":["mod-9b81da9944f3e64f4bb36898"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-0d658d44d5b23dfd5829fc4f"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 261-265","related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-f57f553914fb207445eda03d","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleGetPeerlist (function) exported from `src/libs/omniprotocol/protocol/handlers/control.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/control.ts","line_range":[44,51],"symbol_name":"handleGetPeerlist","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/control"},"relationships":{"depends_on":["mod-81df5ad5e23b1f5a430705f8"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-d71b89a0ab10dcdd511293d3","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handlePeerlistSync (function) exported from `src/libs/omniprotocol/protocol/handlers/control.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/control.ts","line_range":[53,62],"symbol_name":"handlePeerlistSync","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/control"},"relationships":{"depends_on":["mod-81df5ad5e23b1f5a430705f8"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-7061b9df6db226c496e459c6","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleNodeCall (function) exported from `src/libs/omniprotocol/protocol/handlers/control.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/control.ts","line_range":[64,239],"symbol_name":"handleNodeCall","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/control"},"relationships":{"depends_on":["mod-81df5ad5e23b1f5a430705f8"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-1d7e1deea80d0d5c35cc1961","sym-0d658d44d5b23dfd5829fc4f","sym-bfa8af7e83408600dde29446","sym-5639767a6380b54d939d3083"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-fe23be8635119990ef0c5164","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleGetPeerInfo (function) exported from `src/libs/omniprotocol/protocol/handlers/control.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/control.ts","line_range":[241,246],"symbol_name":"handleGetPeerInfo","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/control"},"relationships":{"depends_on":["mod-81df5ad5e23b1f5a430705f8"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-29213aa85f749813078f0b0d","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleGetNodeVersion (function) exported from `src/libs/omniprotocol/protocol/handlers/control.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/control.ts","line_range":[248,251],"symbol_name":"handleGetNodeVersion","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/control"},"relationships":{"depends_on":["mod-81df5ad5e23b1f5a430705f8"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-66423d47c95841fbe2ed154c","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleGetNodeStatus (function) exported from `src/libs/omniprotocol/protocol/handlers/control.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/control.ts","line_range":[253,257],"symbol_name":"handleGetNodeStatus","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/control"},"relationships":{"depends_on":["mod-81df5ad5e23b1f5a430705f8"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-8721b786443fefdf61f3484d","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleIdentityAssign (function) exported from `src/libs/omniprotocol/protocol/handlers/gcr.ts`.","Handler for 0x41 GCR_IDENTITY_ASSIGN opcode"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/gcr.ts","line_range":[51,119],"symbol_name":"handleIdentityAssign","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/gcr"},"relationships":{"depends_on":["mod-62ff6356c1ab42c00fe12c14"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 45-50","related_adr":null,"last_modified":"2026-02-18T13:24:07.420Z","authors":[]}} +{"uuid":"sym-442e0e5efaae973242d3a83e","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleGetAddressInfo (function) exported from `src/libs/omniprotocol/protocol/handlers/gcr.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/gcr.ts","line_range":[121,159],"symbol_name":"handleGetAddressInfo","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/gcr"},"relationships":{"depends_on":["mod-62ff6356c1ab42c00fe12c14"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-fcae6dca65ab92ce6e8c43b0"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.420Z","authors":[]}} +{"uuid":"sym-4a56ab36294dcc8703d06e4d","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleGetIdentities (function) exported from `src/libs/omniprotocol/protocol/handlers/gcr.ts`.","Handler for 0x42 GCR_GET_IDENTITIES opcode"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/gcr.ts","line_range":[166,196],"symbol_name":"handleGetIdentities","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/gcr"},"relationships":{"depends_on":["mod-62ff6356c1ab42c00fe12c14"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-bfa8af7e83408600dde29446"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 161-165","related_adr":null,"last_modified":"2026-02-18T13:24:07.420Z","authors":[]}} +{"uuid":"sym-8fb8125b35dabb0bb867c2c3","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleGetWeb2Identities (function) exported from `src/libs/omniprotocol/protocol/handlers/gcr.ts`.","Handler for 0x43 GCR_GET_WEB2_IDENTITIES opcode"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/gcr.ts","line_range":[203,233],"symbol_name":"handleGetWeb2Identities","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/gcr"},"relationships":{"depends_on":["mod-62ff6356c1ab42c00fe12c14"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-bfa8af7e83408600dde29446"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 198-202","related_adr":null,"last_modified":"2026-02-18T13:24:07.420Z","authors":[]}} +{"uuid":"sym-7e7b96a10468c1edce3a73ae","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleGetXmIdentities (function) exported from `src/libs/omniprotocol/protocol/handlers/gcr.ts`.","Handler for 0x44 GCR_GET_XM_IDENTITIES opcode"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/gcr.ts","line_range":[240,270],"symbol_name":"handleGetXmIdentities","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/gcr"},"relationships":{"depends_on":["mod-62ff6356c1ab42c00fe12c14"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-bfa8af7e83408600dde29446"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 235-239","related_adr":null,"last_modified":"2026-02-18T13:24:07.420Z","authors":[]}} +{"uuid":"sym-c48b984748dadec99be2ea79","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleGetPoints (function) exported from `src/libs/omniprotocol/protocol/handlers/gcr.ts`.","Handler for 0x45 GCR_GET_POINTS opcode"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/gcr.ts","line_range":[277,307],"symbol_name":"handleGetPoints","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/gcr"},"relationships":{"depends_on":["mod-62ff6356c1ab42c00fe12c14"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-bfa8af7e83408600dde29446"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 272-276","related_adr":null,"last_modified":"2026-02-18T13:24:07.420Z","authors":[]}} +{"uuid":"sym-27adc406e8d7be915bdab915","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleGetTopAccounts (function) exported from `src/libs/omniprotocol/protocol/handlers/gcr.ts`.","Handler for 0x46 GCR_GET_TOP_ACCOUNTS opcode"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/gcr.ts","line_range":[315,335],"symbol_name":"handleGetTopAccounts","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/gcr"},"relationships":{"depends_on":["mod-62ff6356c1ab42c00fe12c14"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-bfa8af7e83408600dde29446"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 309-314","related_adr":null,"last_modified":"2026-02-18T13:24:07.420Z","authors":[]}} +{"uuid":"sym-9dfd285f7a17eac27325557e","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleGetReferralInfo (function) exported from `src/libs/omniprotocol/protocol/handlers/gcr.ts`.","Handler for 0x47 GCR_GET_REFERRAL_INFO opcode"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/gcr.ts","line_range":[342,372],"symbol_name":"handleGetReferralInfo","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/gcr"},"relationships":{"depends_on":["mod-62ff6356c1ab42c00fe12c14"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-bfa8af7e83408600dde29446"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 337-341","related_adr":null,"last_modified":"2026-02-18T13:24:07.420Z","authors":[]}} +{"uuid":"sym-f6d470d11d1bce1c9ae5c46d","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleValidateReferral (function) exported from `src/libs/omniprotocol/protocol/handlers/gcr.ts`.","Handler for 0x48 GCR_VALIDATE_REFERRAL opcode"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/gcr.ts","line_range":[379,409],"symbol_name":"handleValidateReferral","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/gcr"},"relationships":{"depends_on":["mod-62ff6356c1ab42c00fe12c14"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-bfa8af7e83408600dde29446"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 374-378","related_adr":null,"last_modified":"2026-02-18T13:24:07.420Z","authors":[]}} +{"uuid":"sym-dd0d6da79a6076f6a04e978a","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleGetAccountByIdentity (function) exported from `src/libs/omniprotocol/protocol/handlers/gcr.ts`.","Handler for 0x49 GCR_GET_ACCOUNT_BY_IDENTITY opcode"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/gcr.ts","line_range":[416,446],"symbol_name":"handleGetAccountByIdentity","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/gcr"},"relationships":{"depends_on":["mod-62ff6356c1ab42c00fe12c14"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-bfa8af7e83408600dde29446"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 411-415","related_adr":null,"last_modified":"2026-02-18T13:24:07.420Z","authors":[]}} +{"uuid":"sym-9cfa7eb6554a93203930565f","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleL2PSGeneric (function) exported from `src/libs/omniprotocol/protocol/handlers/l2ps.ts`.","Handler for 0x70 L2PS_GENERIC opcode"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/l2ps.ts","line_range":[36,72],"symbol_name":"handleL2PSGeneric","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/l2ps"},"relationships":{"depends_on":["mod-8fe5e92214e16e3971d40e48"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-5639767a6380b54d939d3083"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 30-35","related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-0c9c446090c5e603032ab8cf","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleL2PSSubmitEncryptedTx (function) exported from `src/libs/omniprotocol/protocol/handlers/l2ps.ts`.","Handler for 0x71 L2PS_SUBMIT_ENCRYPTED_TX opcode"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/l2ps.ts","line_range":[80,128],"symbol_name":"handleL2PSSubmitEncryptedTx","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/l2ps"},"relationships":{"depends_on":["mod-8fe5e92214e16e3971d40e48"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-87aeaf45d3ccc3eda2f7754f"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 74-79","related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-44d515e6bda84183724780b8","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleL2PSGetProof (function) exported from `src/libs/omniprotocol/protocol/handlers/l2ps.ts`.","Handler for 0x72 L2PS_GET_PROOF opcode"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/l2ps.ts","line_range":[136,171],"symbol_name":"handleL2PSGetProof","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/l2ps"},"relationships":{"depends_on":["mod-8fe5e92214e16e3971d40e48"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 130-135","related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-44f589250824db7b5a096f65","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleL2PSVerifyBatch (function) exported from `src/libs/omniprotocol/protocol/handlers/l2ps.ts`.","Handler for 0x73 L2PS_VERIFY_BATCH opcode"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/l2ps.ts","line_range":[179,228],"symbol_name":"handleL2PSVerifyBatch","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/l2ps"},"relationships":{"depends_on":["mod-8fe5e92214e16e3971d40e48"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 173-178","related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-b97361a9401c3a71b5cb1998","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleL2PSSyncMempool (function) exported from `src/libs/omniprotocol/protocol/handlers/l2ps.ts`.","Handler for 0x74 L2PS_SYNC_MEMPOOL opcode"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/l2ps.ts","line_range":[236,280],"symbol_name":"handleL2PSSyncMempool","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/l2ps"},"relationships":{"depends_on":["mod-8fe5e92214e16e3971d40e48"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 230-235","related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-92202682f16c52bae37d49f3","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleL2PSGetBatchStatus (function) exported from `src/libs/omniprotocol/protocol/handlers/l2ps.ts`.","Handler for 0x75 L2PS_GET_BATCH_STATUS opcode"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/l2ps.ts","line_range":[288,318],"symbol_name":"handleL2PSGetBatchStatus","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/l2ps"},"relationships":{"depends_on":["mod-8fe5e92214e16e3971d40e48"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 282-287","related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-56f866c2f73fcd13683b856e","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleL2PSGetParticipation (function) exported from `src/libs/omniprotocol/protocol/handlers/l2ps.ts`.","Handler for 0x76 L2PS_GET_PARTICIPATION opcode"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/l2ps.ts","line_range":[326,365],"symbol_name":"handleL2PSGetParticipation","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/l2ps"},"relationships":{"depends_on":["mod-8fe5e92214e16e3971d40e48"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 320-325","related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-fc93c1389ab92ee65c717efc","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleL2PSHashUpdate (function) exported from `src/libs/omniprotocol/protocol/handlers/l2ps.ts`.","Handler for 0x77 L2PS_HASH_UPDATE opcode"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/l2ps.ts","line_range":[374,420],"symbol_name":"handleL2PSHashUpdate","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/l2ps"},"relationships":{"depends_on":["mod-8fe5e92214e16e3971d40e48"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 367-373","related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-70988e4b53bbd62ef2940b36","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleProtoVersionNegotiate (function) exported from `src/libs/omniprotocol/protocol/handlers/meta.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/meta.ts","line_range":[23,54],"symbol_name":"handleProtoVersionNegotiate","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/meta"},"relationships":{"depends_on":["mod-b986d7806992d6c650aa2abc"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-3cf96cee618774e41d2dfe8a","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleProtoCapabilityExchange (function) exported from `src/libs/omniprotocol/protocol/handlers/meta.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/meta.ts","line_range":[56,70],"symbol_name":"handleProtoCapabilityExchange","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/meta"},"relationships":{"depends_on":["mod-b986d7806992d6c650aa2abc"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-5e497086f6306f35948392bf","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleProtoError (function) exported from `src/libs/omniprotocol/protocol/handlers/meta.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/meta.ts","line_range":[72,85],"symbol_name":"handleProtoError","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/meta"},"relationships":{"depends_on":["mod-b986d7806992d6c650aa2abc"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-5d5bc71be2e25f76fae74cf0","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleProtoPing (function) exported from `src/libs/omniprotocol/protocol/handlers/meta.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/meta.ts","line_range":[87,101],"symbol_name":"handleProtoPing","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/meta"},"relationships":{"depends_on":["mod-b986d7806992d6c650aa2abc"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-65524c0f66e7faa0eaa27ed8","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleProtoDisconnect (function) exported from `src/libs/omniprotocol/protocol/handlers/meta.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/meta.ts","line_range":[103,116],"symbol_name":"handleProtoDisconnect","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/meta"},"relationships":{"depends_on":["mod-b986d7806992d6c650aa2abc"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-32d856454b59fac1c5f9f097","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleGetMempool (function) exported from `src/libs/omniprotocol/protocol/handlers/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/sync.ts","line_range":[25,35],"symbol_name":"handleGetMempool","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/sync"},"relationships":{"depends_on":["mod-a7c0beb3ec427a0c7c2c3f7f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-ef424ed39e854a4281432490","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleMempoolSync (function) exported from `src/libs/omniprotocol/protocol/handlers/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/sync.ts","line_range":[37,65],"symbol_name":"handleMempoolSync","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/sync"},"relationships":{"depends_on":["mod-a7c0beb3ec427a0c7c2c3f7f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-e301fc6bbdb4b0a55d179d3b","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleGetBlockByNumber (function) exported from `src/libs/omniprotocol/protocol/handlers/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/sync.ts","line_range":[95,130],"symbol_name":"handleGetBlockByNumber","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/sync"},"relationships":{"depends_on":["mod-a7c0beb3ec427a0c7c2c3f7f"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-911a2d4197fac2defef73b40"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-ea690b435ee55e2db7bcf853","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleBlockSync (function) exported from `src/libs/omniprotocol/protocol/handlers/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/sync.ts","line_range":[132,157],"symbol_name":"handleBlockSync","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/sync"},"relationships":{"depends_on":["mod-a7c0beb3ec427a0c7c2c3f7f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-c1c3b15c1ce614072f76c61b","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleGetBlocks (function) exported from `src/libs/omniprotocol/protocol/handlers/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/sync.ts","line_range":[159,176],"symbol_name":"handleGetBlocks","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/sync"},"relationships":{"depends_on":["mod-a7c0beb3ec427a0c7c2c3f7f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-7b7933aea3be7d0c5d9c4362","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleGetBlockByHash (function) exported from `src/libs/omniprotocol/protocol/handlers/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/sync.ts","line_range":[178,201],"symbol_name":"handleGetBlockByHash","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/sync"},"relationships":{"depends_on":["mod-a7c0beb3ec427a0c7c2c3f7f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-951f37505baec8059fcb4a8c","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleGetTxByHash (function) exported from `src/libs/omniprotocol/protocol/handlers/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/sync.ts","line_range":[203,227],"symbol_name":"handleGetTxByHash","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/sync"},"relationships":{"depends_on":["mod-a7c0beb3ec427a0c7c2c3f7f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-74a72391e547cae03f9273bd","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleMempoolMerge (function) exported from `src/libs/omniprotocol/protocol/handlers/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/sync.ts","line_range":[229,268],"symbol_name":"handleMempoolMerge","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/sync"},"relationships":{"depends_on":["mod-a7c0beb3ec427a0c7c2c3f7f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-b37deaf5ad3d42513eeee725","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleExecute (function) exported from `src/libs/omniprotocol/protocol/handlers/transaction.ts`.","Handler for 0x10 EXECUTE opcode"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/transaction.ts","line_range":[38,72],"symbol_name":"handleExecute","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/transaction"},"relationships":{"depends_on":["mod-c3ac921e455e2c85a68228e4"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-235384a3d4f36552d55ac7ef"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/bridge"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 32-37","related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-80af24f09cb8568074b9237b","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleNativeBridge (function) exported from `src/libs/omniprotocol/protocol/handlers/transaction.ts`.","Handler for 0x11 NATIVE_BRIDGE opcode"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/transaction.ts","line_range":[80,114],"symbol_name":"handleNativeBridge","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/transaction"},"relationships":{"depends_on":["mod-c3ac921e455e2c85a68228e4"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-ac7d7af06ace8e5f7480d85e"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/bridge"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 74-79","related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-8a00aee2ef2d139bfb66e5af","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleBridge (function) exported from `src/libs/omniprotocol/protocol/handlers/transaction.ts`.","Handler for 0x12 BRIDGE opcode"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/transaction.ts","line_range":[122,166],"symbol_name":"handleBridge","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/transaction"},"relationships":{"depends_on":["mod-c3ac921e455e2c85a68228e4"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-8df316cdf3ef951ce8023630"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/bridge"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 116-121","related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-52e28e3349a0587ed39bb211","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleBroadcast (function) exported from `src/libs/omniprotocol/protocol/handlers/transaction.ts`.","Handler for 0x16 BROADCAST opcode"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/transaction.ts","line_range":[175,215],"symbol_name":"handleBroadcast","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/transaction"},"relationships":{"depends_on":["mod-c3ac921e455e2c85a68228e4"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-235384a3d4f36552d55ac7ef"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/bridge"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 168-174","related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-68764677ca5ad459e67db833","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handleConfirm (function) exported from `src/libs/omniprotocol/protocol/handlers/transaction.ts`.","Handler for 0x15 CONFIRM opcode"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/transaction.ts","line_range":[224,252],"symbol_name":"handleConfirm","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/transaction"},"relationships":{"depends_on":["mod-c3ac921e455e2c85a68228e4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/bridge"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 217-223","related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-908c55c5efe8c66740e37055","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["successResponse (function) exported from `src/libs/omniprotocol/protocol/handlers/utils.ts`.","TypeScript signature: (response: unknown) => RPCResponse."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/utils.ts","line_range":[5,12],"symbol_name":"successResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/utils"},"relationships":{"depends_on":["mod-8a38038e04d5bed97a843cbd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-40cdf81aea9ee142f33fdadf","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["errorResponse (function) exported from `src/libs/omniprotocol/protocol/handlers/utils.ts`.","TypeScript signature: (status: number, message: string, extra: unknown) => RPCResponse."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/utils.ts","line_range":[14,25],"symbol_name":"errorResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/utils"},"relationships":{"depends_on":["mod-8a38038e04d5bed97a843cbd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-3d600ff95898af2342185384","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeResponse (function) exported from `src/libs/omniprotocol/protocol/handlers/utils.ts`.","TypeScript signature: (response: RPCResponse) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/handlers/utils.ts","line_range":[27,29],"symbol_name":"encodeResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/handlers/utils"},"relationships":{"depends_on":["mod-8a38038e04d5bed97a843cbd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-a5031dfc8e0cc73fef0da379","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported enum `OmniOpcode` in `src/libs/omniprotocol/protocol/opcodes.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/opcodes.ts","line_range":[1,87],"symbol_name":"OmniOpcode::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/opcodes"},"relationships":{"depends_on":["sym-1a3586208ccd98a2e6978fb3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-1a3586208ccd98a2e6978fb3","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["OmniOpcode (enum) exported from `src/libs/omniprotocol/protocol/opcodes.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/opcodes.ts","line_range":[1,87],"symbol_name":"OmniOpcode","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/opcodes"},"relationships":{"depends_on":["mod-0e059ca33e0c78acb79559e8"],"depended_by":["sym-a5031dfc8e0cc73fef0da379"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-5c8e5e8a39104aecb286893f","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ALL_REGISTERED_OPCODES (variable) exported from `src/libs/omniprotocol/protocol/opcodes.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/opcodes.ts","line_range":[89,91],"symbol_name":"ALL_REGISTERED_OPCODES","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/opcodes"},"relationships":{"depends_on":["mod-0e059ca33e0c78acb79559e8"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-1e4bb01db213569973c9fb34","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["opcodeToString (function) exported from `src/libs/omniprotocol/protocol/opcodes.ts`.","TypeScript signature: (opcode: OmniOpcode) => string."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/opcodes.ts","line_range":[93,95],"symbol_name":"opcodeToString","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/opcodes"},"relationships":{"depends_on":["mod-0e059ca33e0c78acb79559e8"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-386b941d76f4c8f10a187435","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `HandlerDescriptor` in `src/libs/omniprotocol/protocol/registry.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/registry.ts","line_range":[68,73],"symbol_name":"HandlerDescriptor::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/registry"},"relationships":{"depends_on":["sym-465a6407cdbddf468c7c3251"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-465a6407cdbddf468c7c3251","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["HandlerDescriptor (interface) exported from `src/libs/omniprotocol/protocol/registry.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/registry.ts","line_range":[68,73],"symbol_name":"HandlerDescriptor","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/registry"},"relationships":{"depends_on":["mod-2c0f4f3afaaec106ad82bf77"],"depended_by":["sym-386b941d76f4c8f10a187435"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-90e4a197be8ff419ed66d830","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `HandlerRegistry` in `src/libs/omniprotocol/protocol/registry.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/registry.ts","line_range":[75,75],"symbol_name":"HandlerRegistry::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/registry"},"relationships":{"depends_on":["sym-66f6973f6288a7f36a7c1d28"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-66f6973f6288a7f36a7c1d28","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["HandlerRegistry (type) exported from `src/libs/omniprotocol/protocol/registry.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/registry.ts","line_range":[75,75],"symbol_name":"HandlerRegistry","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/registry"},"relationships":{"depends_on":["mod-2c0f4f3afaaec106ad82bf77"],"depended_by":["sym-90e4a197be8ff419ed66d830"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-af3f501ea2464a1d43010bea","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["handlerRegistry (variable) exported from `src/libs/omniprotocol/protocol/registry.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/registry.ts","line_range":[169,169],"symbol_name":"handlerRegistry","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/registry"},"relationships":{"depends_on":["mod-2c0f4f3afaaec106ad82bf77"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-7109d15742026d0f311996ea","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getHandler (function) exported from `src/libs/omniprotocol/protocol/registry.ts`.","TypeScript signature: (opcode: OmniOpcode) => HandlerDescriptor | undefined."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/protocol/registry.ts","line_range":[182,184],"symbol_name":"getHandler","language":"typescript","module_resolution_path":"@/libs/omniprotocol/protocol/registry"},"relationships":{"depends_on":["mod-2c0f4f3afaaec106ad82bf77"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-534438d5ba67b8592440eefb","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `RateLimiter` in `src/libs/omniprotocol/ratelimit/RateLimiter.ts`."],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/ratelimit/RateLimiter.ts","line_range":[15,331],"symbol_name":"RateLimiter::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/ratelimit/RateLimiter"},"relationships":{"depends_on":["sym-86a02fdc381985fdd13f023b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-c48ae3e66b0f174a70e412e5","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RateLimiter.checkConnection method on exported class `RateLimiter` in `src/libs/omniprotocol/ratelimit/RateLimiter.ts`.","TypeScript signature: (ipAddress: string) => RateLimitResult."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/ratelimit/RateLimiter.ts","line_range":[42,90],"symbol_name":"RateLimiter.checkConnection","language":"typescript","module_resolution_path":"@/libs/omniprotocol/ratelimit/RateLimiter"},"relationships":{"depends_on":["sym-86a02fdc381985fdd13f023b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-4e12f25c5ce54e2bbda81d0c","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RateLimiter.addConnection method on exported class `RateLimiter` in `src/libs/omniprotocol/ratelimit/RateLimiter.ts`.","TypeScript signature: (ipAddress: string) => void."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/ratelimit/RateLimiter.ts","line_range":[95,101],"symbol_name":"RateLimiter.addConnection","language":"typescript","module_resolution_path":"@/libs/omniprotocol/ratelimit/RateLimiter"},"relationships":{"depends_on":["sym-86a02fdc381985fdd13f023b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-cdc874c6e398062ee16c8b38","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RateLimiter.removeConnection method on exported class `RateLimiter` in `src/libs/omniprotocol/ratelimit/RateLimiter.ts`.","TypeScript signature: (ipAddress: string) => void."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/ratelimit/RateLimiter.ts","line_range":[106,114],"symbol_name":"RateLimiter.removeConnection","language":"typescript","module_resolution_path":"@/libs/omniprotocol/ratelimit/RateLimiter"},"relationships":{"depends_on":["sym-86a02fdc381985fdd13f023b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-89e994f15545e398c7e2addc","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RateLimiter.checkIPRequest method on exported class `RateLimiter` in `src/libs/omniprotocol/ratelimit/RateLimiter.ts`.","TypeScript signature: (ipAddress: string) => RateLimitResult."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/ratelimit/RateLimiter.ts","line_range":[119,129],"symbol_name":"RateLimiter.checkIPRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/ratelimit/RateLimiter"},"relationships":{"depends_on":["sym-86a02fdc381985fdd13f023b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-e955b50b1f96f9bc3aaa5e9c","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RateLimiter.checkIdentityRequest method on exported class `RateLimiter` in `src/libs/omniprotocol/ratelimit/RateLimiter.ts`.","TypeScript signature: (identity: string) => RateLimitResult."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/ratelimit/RateLimiter.ts","line_range":[134,144],"symbol_name":"RateLimiter.checkIdentityRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/ratelimit/RateLimiter"},"relationships":{"depends_on":["sym-86a02fdc381985fdd13f023b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-76dcb81a85f54822054465ae","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RateLimiter.stop method on exported class `RateLimiter` in `src/libs/omniprotocol/ratelimit/RateLimiter.ts`.","TypeScript signature: () => void."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/ratelimit/RateLimiter.ts","line_range":[269,274],"symbol_name":"RateLimiter.stop","language":"typescript","module_resolution_path":"@/libs/omniprotocol/ratelimit/RateLimiter"},"relationships":{"depends_on":["sym-86a02fdc381985fdd13f023b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-a2efbf53ab67834889766768","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RateLimiter.getStats method on exported class `RateLimiter` in `src/libs/omniprotocol/ratelimit/RateLimiter.ts`.","TypeScript signature: () => {\n ipEntries: number\n identityEntries: number\n blockedIPs: number\n blockedIdentities: number\n }."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/ratelimit/RateLimiter.ts","line_range":[279,301],"symbol_name":"RateLimiter.getStats","language":"typescript","module_resolution_path":"@/libs/omniprotocol/ratelimit/RateLimiter"},"relationships":{"depends_on":["sym-86a02fdc381985fdd13f023b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-36bf66ddb8ab891b109dc444","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RateLimiter.blockKey method on exported class `RateLimiter` in `src/libs/omniprotocol/ratelimit/RateLimiter.ts`.","TypeScript signature: (key: string, type: RateLimitType, durationMs: unknown) => void."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/ratelimit/RateLimiter.ts","line_range":[306,310],"symbol_name":"RateLimiter.blockKey","language":"typescript","module_resolution_path":"@/libs/omniprotocol/ratelimit/RateLimiter"},"relationships":{"depends_on":["sym-86a02fdc381985fdd13f023b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-bc1c20fd0bfb030ddaff6c17","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RateLimiter.unblockKey method on exported class `RateLimiter` in `src/libs/omniprotocol/ratelimit/RateLimiter.ts`.","TypeScript signature: (key: string, type: RateLimitType) => void."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/ratelimit/RateLimiter.ts","line_range":[315,322],"symbol_name":"RateLimiter.unblockKey","language":"typescript","module_resolution_path":"@/libs/omniprotocol/ratelimit/RateLimiter"},"relationships":{"depends_on":["sym-86a02fdc381985fdd13f023b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-ed1b2b7a517b4236d13f0fc8","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RateLimiter.clear method on exported class `RateLimiter` in `src/libs/omniprotocol/ratelimit/RateLimiter.ts`.","TypeScript signature: () => void."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/ratelimit/RateLimiter.ts","line_range":[327,330],"symbol_name":"RateLimiter.clear","language":"typescript","module_resolution_path":"@/libs/omniprotocol/ratelimit/RateLimiter"},"relationships":{"depends_on":["sym-86a02fdc381985fdd13f023b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-86a02fdc381985fdd13f023b","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RateLimiter (class) exported from `src/libs/omniprotocol/ratelimit/RateLimiter.ts`."],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/ratelimit/RateLimiter.ts","line_range":[15,331],"symbol_name":"RateLimiter","language":"typescript","module_resolution_path":"@/libs/omniprotocol/ratelimit/RateLimiter"},"relationships":{"depends_on":["mod-88b203dbc16db3025123970b"],"depended_by":["sym-534438d5ba67b8592440eefb","sym-c48ae3e66b0f174a70e412e5","sym-4e12f25c5ce54e2bbda81d0c","sym-cdc874c6e398062ee16c8b38","sym-89e994f15545e398c7e2addc","sym-e955b50b1f96f9bc3aaa5e9c","sym-76dcb81a85f54822054465ae","sym-a2efbf53ab67834889766768","sym-36bf66ddb8ab891b109dc444","sym-bc1c20fd0bfb030ddaff6c17","sym-ed1b2b7a517b4236d13f0fc8"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-859e3974653a78d99db2f73e","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["* (re_export_star) exported from `src/libs/omniprotocol/ratelimit/index.ts`.","Rate Limiting Module"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/ratelimit/index.ts","line_range":[7,7],"symbol_name":"*","language":"typescript","module_resolution_path":"@/libs/omniprotocol/ratelimit/index"},"relationships":{"depends_on":["mod-7ff977b2cc6a6dde99d1c4a1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 1-5","related_adr":null,"last_modified":"2026-02-13T14:41:04.957Z","authors":[]}} +{"uuid":"sym-ac44c01f6c74fd8f6a21f2c7","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["* (re_export_star) exported from `src/libs/omniprotocol/ratelimit/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/ratelimit/index.ts","line_range":[8,8],"symbol_name":"*","language":"typescript","module_resolution_path":"@/libs/omniprotocol/ratelimit/index"},"relationships":{"depends_on":["mod-7ff977b2cc6a6dde99d1c4a1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.957Z","authors":[]}} +{"uuid":"sym-8e107677b94e23a6f3b219d6","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `RateLimitConfig` in `src/libs/omniprotocol/ratelimit/types.ts`.","Rate Limiting Types"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/ratelimit/types.ts","line_range":[7,48],"symbol_name":"RateLimitConfig::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/ratelimit/types"},"relationships":{"depends_on":["sym-ebc9cfd3e7f365a40b76b5b8"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 1-5","related_adr":null,"last_modified":"2026-02-13T14:41:04.957Z","authors":[]}} +{"uuid":"sym-ebc9cfd3e7f365a40b76b5b8","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RateLimitConfig (interface) exported from `src/libs/omniprotocol/ratelimit/types.ts`.","Rate Limiting Types"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/ratelimit/types.ts","line_range":[7,48],"symbol_name":"RateLimitConfig","language":"typescript","module_resolution_path":"@/libs/omniprotocol/ratelimit/types"},"relationships":{"depends_on":["mod-c2ea467ec2d317289746a260"],"depended_by":["sym-8e107677b94e23a6f3b219d6"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 1-5","related_adr":null,"last_modified":"2026-02-13T14:41:04.957Z","authors":[]}} +{"uuid":"sym-aff49eab772515d5b833ef34","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `RateLimitEntry` in `src/libs/omniprotocol/ratelimit/types.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/ratelimit/types.ts","line_range":[50,75],"symbol_name":"RateLimitEntry::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/ratelimit/types"},"relationships":{"depends_on":["sym-4339ce5f095732b35ef16575"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.957Z","authors":[]}} +{"uuid":"sym-4339ce5f095732b35ef16575","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RateLimitEntry (interface) exported from `src/libs/omniprotocol/ratelimit/types.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/ratelimit/types.ts","line_range":[50,75],"symbol_name":"RateLimitEntry","language":"typescript","module_resolution_path":"@/libs/omniprotocol/ratelimit/types"},"relationships":{"depends_on":["mod-c2ea467ec2d317289746a260"],"depended_by":["sym-aff49eab772515d5b833ef34"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.957Z","authors":[]}} +{"uuid":"sym-5b3fdf7b2257820a91eb1e24","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `RateLimitResult` in `src/libs/omniprotocol/ratelimit/types.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/ratelimit/types.ts","line_range":[77,102],"symbol_name":"RateLimitResult::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/ratelimit/types"},"relationships":{"depends_on":["sym-4de085ac34821b291958ca8d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.957Z","authors":[]}} +{"uuid":"sym-4de085ac34821b291958ca8d","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RateLimitResult (interface) exported from `src/libs/omniprotocol/ratelimit/types.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/ratelimit/types.ts","line_range":[77,102],"symbol_name":"RateLimitResult","language":"typescript","module_resolution_path":"@/libs/omniprotocol/ratelimit/types"},"relationships":{"depends_on":["mod-c2ea467ec2d317289746a260"],"depended_by":["sym-5b3fdf7b2257820a91eb1e24"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.957Z","authors":[]}} +{"uuid":"sym-43063258f1f591add1ec17d8","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported enum `RateLimitType` in `src/libs/omniprotocol/ratelimit/types.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/ratelimit/types.ts","line_range":[104,107],"symbol_name":"RateLimitType::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/ratelimit/types"},"relationships":{"depends_on":["sym-a929d1427bf0e28aee1d273a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.957Z","authors":[]}} +{"uuid":"sym-a929d1427bf0e28aee1d273a","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RateLimitType (enum) exported from `src/libs/omniprotocol/ratelimit/types.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/ratelimit/types.ts","line_range":[104,107],"symbol_name":"RateLimitType","language":"typescript","module_resolution_path":"@/libs/omniprotocol/ratelimit/types"},"relationships":{"depends_on":["mod-c2ea467ec2d317289746a260"],"depended_by":["sym-43063258f1f591add1ec17d8"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.957Z","authors":[]}} +{"uuid":"sym-28d49c217cc2b5c0bca3f7cf","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ProposeBlockHashRequestPayload` in `src/libs/omniprotocol/serialization/consensus.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[62,66],"symbol_name":"ProposeBlockHashRequestPayload::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["sym-7d64282ce8c2fd92b6a0242d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-7d64282ce8c2fd92b6a0242d","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ProposeBlockHashRequestPayload (interface) exported from `src/libs/omniprotocol/serialization/consensus.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[62,66],"symbol_name":"ProposeBlockHashRequestPayload","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["mod-7a54f789433ac1b88a2975b0"],"depended_by":["sym-28d49c217cc2b5c0bca3f7cf"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-bbe82027196a1293546adf88","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeProposeBlockHashRequest (function) exported from `src/libs/omniprotocol/serialization/consensus.ts`.","TypeScript signature: (payload: ProposeBlockHashRequestPayload) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[69,77],"symbol_name":"encodeProposeBlockHashRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["mod-7a54f789433ac1b88a2975b0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-707d977f3ee1ecf261ddd6a2","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodeProposeBlockHashRequest (function) exported from `src/libs/omniprotocol/serialization/consensus.ts`.","TypeScript signature: (buffer: Buffer) => ProposeBlockHashRequestPayload."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[79,98],"symbol_name":"decodeProposeBlockHashRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["mod-7a54f789433ac1b88a2975b0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-667ee77a33a8cdaab7b8e881","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ProposeBlockHashResponsePayload` in `src/libs/omniprotocol/serialization/consensus.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[100,106],"symbol_name":"ProposeBlockHashResponsePayload::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["sym-12945c6469674a2c8ca1664d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-12945c6469674a2c8ca1664d","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ProposeBlockHashResponsePayload (interface) exported from `src/libs/omniprotocol/serialization/consensus.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[100,106],"symbol_name":"ProposeBlockHashResponsePayload","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["mod-7a54f789433ac1b88a2975b0"],"depended_by":["sym-667ee77a33a8cdaab7b8e881"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-484518bac829f3d8d0b68bed","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeProposeBlockHashResponse (function) exported from `src/libs/omniprotocol/serialization/consensus.ts`.","TypeScript signature: (payload: ProposeBlockHashResponsePayload) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[108,120],"symbol_name":"encodeProposeBlockHashResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["mod-7a54f789433ac1b88a2975b0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-3c9e74c5cd69037300664055","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodeProposeBlockHashResponse (function) exported from `src/libs/omniprotocol/serialization/consensus.ts`.","TypeScript signature: (buffer: Buffer) => ProposeBlockHashResponsePayload."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[122,156],"symbol_name":"decodeProposeBlockHashResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["mod-7a54f789433ac1b88a2975b0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-facf67dec0a9f34ec0a49331","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ValidatorSeedResponsePayload` in `src/libs/omniprotocol/serialization/consensus.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[158,161],"symbol_name":"ValidatorSeedResponsePayload::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["sym-f7c2c4bf481ceac8b676e139"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-f7c2c4bf481ceac8b676e139","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ValidatorSeedResponsePayload (interface) exported from `src/libs/omniprotocol/serialization/consensus.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[158,161],"symbol_name":"ValidatorSeedResponsePayload","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["mod-7a54f789433ac1b88a2975b0"],"depended_by":["sym-facf67dec0a9f34ec0a49331"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-7e98febf42ce02edfc8af727","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeValidatorSeedResponse (function) exported from `src/libs/omniprotocol/serialization/consensus.ts`.","TypeScript signature: (payload: ValidatorSeedResponsePayload) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[163,170],"symbol_name":"encodeValidatorSeedResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["mod-7a54f789433ac1b88a2975b0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-6e5873ef0b08194d76c50da7","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ValidatorTimestampResponsePayload` in `src/libs/omniprotocol/serialization/consensus.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[172,176],"symbol_name":"ValidatorTimestampResponsePayload::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["sym-81026f67f67aeb62d631535d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-81026f67f67aeb62d631535d","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ValidatorTimestampResponsePayload (interface) exported from `src/libs/omniprotocol/serialization/consensus.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[172,176],"symbol_name":"ValidatorTimestampResponsePayload","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["mod-7a54f789433ac1b88a2975b0"],"depended_by":["sym-6e5873ef0b08194d76c50da7"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-fa254e205c76ea44e4b0521c","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeValidatorTimestampResponse (function) exported from `src/libs/omniprotocol/serialization/consensus.ts`.","TypeScript signature: (payload: ValidatorTimestampResponsePayload) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[178,188],"symbol_name":"encodeValidatorTimestampResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["mod-7a54f789433ac1b88a2975b0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-9d509c324983c22418cb1b1a","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `SetValidatorPhaseRequestPayload` in `src/libs/omniprotocol/serialization/consensus.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[190,194],"symbol_name":"SetValidatorPhaseRequestPayload::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["sym-531050568d58da423745f877"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-531050568d58da423745f877","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SetValidatorPhaseRequestPayload (interface) exported from `src/libs/omniprotocol/serialization/consensus.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[190,194],"symbol_name":"SetValidatorPhaseRequestPayload","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["mod-7a54f789433ac1b88a2975b0"],"depended_by":["sym-9d509c324983c22418cb1b1a"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-d7fd53b8db8be40361088b41","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeSetValidatorPhaseRequest (function) exported from `src/libs/omniprotocol/serialization/consensus.ts`.","TypeScript signature: (payload: SetValidatorPhaseRequestPayload) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[197,205],"symbol_name":"encodeSetValidatorPhaseRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["mod-7a54f789433ac1b88a2975b0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-1f0f4f159ed45d15de2bdb16","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodeSetValidatorPhaseRequest (function) exported from `src/libs/omniprotocol/serialization/consensus.ts`.","TypeScript signature: (buffer: Buffer) => SetValidatorPhaseRequestPayload."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[207,226],"symbol_name":"decodeSetValidatorPhaseRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["mod-7a54f789433ac1b88a2975b0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-ec3b887388af632075e349e1","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `SetValidatorPhaseResponsePayload` in `src/libs/omniprotocol/serialization/consensus.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[228,234],"symbol_name":"SetValidatorPhaseResponsePayload::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["sym-8736e8fe142316bf9549f1a8"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-8736e8fe142316bf9549f1a8","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SetValidatorPhaseResponsePayload (interface) exported from `src/libs/omniprotocol/serialization/consensus.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[228,234],"symbol_name":"SetValidatorPhaseResponsePayload","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["mod-7a54f789433ac1b88a2975b0"],"depended_by":["sym-ec3b887388af632075e349e1"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-44872549830e75384171fc2b","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeSetValidatorPhaseResponse (function) exported from `src/libs/omniprotocol/serialization/consensus.ts`.","TypeScript signature: (payload: SetValidatorPhaseResponsePayload) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[236,248],"symbol_name":"encodeSetValidatorPhaseResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["mod-7a54f789433ac1b88a2975b0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-cd9eaecd5f72fe65de09076a","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodeSetValidatorPhaseResponse (function) exported from `src/libs/omniprotocol/serialization/consensus.ts`.","TypeScript signature: (buffer: Buffer) => SetValidatorPhaseResponsePayload."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[251,285],"symbol_name":"decodeSetValidatorPhaseResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["mod-7a54f789433ac1b88a2975b0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-d541dd4d784440f63678a4e3","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `GreenlightRequestPayload` in `src/libs/omniprotocol/serialization/consensus.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[287,291],"symbol_name":"GreenlightRequestPayload::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["sym-cdf87a7aca678cd914268866"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-cdf87a7aca678cd914268866","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GreenlightRequestPayload (interface) exported from `src/libs/omniprotocol/serialization/consensus.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[287,291],"symbol_name":"GreenlightRequestPayload","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["mod-7a54f789433ac1b88a2975b0"],"depended_by":["sym-d541dd4d784440f63678a4e3"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-50906bc466402f2083e8ab59","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeGreenlightRequest (function) exported from `src/libs/omniprotocol/serialization/consensus.ts`.","TypeScript signature: (payload: GreenlightRequestPayload) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[294,302],"symbol_name":"encodeGreenlightRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["mod-7a54f789433ac1b88a2975b0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-c8763836bff4ea42fba470e9","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodeGreenlightRequest (function) exported from `src/libs/omniprotocol/serialization/consensus.ts`.","TypeScript signature: (buffer: Buffer) => GreenlightRequestPayload."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[304,323],"symbol_name":"decodeGreenlightRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["mod-7a54f789433ac1b88a2975b0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-968a498798178d6738491d83","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `GreenlightResponsePayload` in `src/libs/omniprotocol/serialization/consensus.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[325,328],"symbol_name":"GreenlightResponsePayload::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["sym-72a34cb08372cf0ac8f3fb22"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-72a34cb08372cf0ac8f3fb22","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GreenlightResponsePayload (interface) exported from `src/libs/omniprotocol/serialization/consensus.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[325,328],"symbol_name":"GreenlightResponsePayload","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["mod-7a54f789433ac1b88a2975b0"],"depended_by":["sym-968a498798178d6738491d83"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-9e648f9c7fcc2000961ea0f5","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeGreenlightResponse (function) exported from `src/libs/omniprotocol/serialization/consensus.ts`.","TypeScript signature: (payload: GreenlightResponsePayload) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[330,337],"symbol_name":"encodeGreenlightResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["mod-7a54f789433ac1b88a2975b0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-5eac4ba7590c3f59ec0ba280","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodeGreenlightResponse (function) exported from `src/libs/omniprotocol/serialization/consensus.ts`.","TypeScript signature: (buffer: Buffer) => GreenlightResponsePayload."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[340,355],"symbol_name":"decodeGreenlightResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["mod-7a54f789433ac1b88a2975b0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-b6ef2a80b24cff47652860e8","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `BlockTimestampResponsePayload` in `src/libs/omniprotocol/serialization/consensus.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[357,361],"symbol_name":"BlockTimestampResponsePayload::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["sym-c2ca91c5458f62906d47361f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-c2ca91c5458f62906d47361f","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BlockTimestampResponsePayload (interface) exported from `src/libs/omniprotocol/serialization/consensus.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[357,361],"symbol_name":"BlockTimestampResponsePayload","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["mod-7a54f789433ac1b88a2975b0"],"depended_by":["sym-b6ef2a80b24cff47652860e8"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-74d82230f4dfa750c17ed391","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeBlockTimestampResponse (function) exported from `src/libs/omniprotocol/serialization/consensus.ts`.","TypeScript signature: (payload: BlockTimestampResponsePayload) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[363,373],"symbol_name":"encodeBlockTimestampResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["mod-7a54f789433ac1b88a2975b0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-4772b06d07bc4b22972f4952","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ValidatorPhaseResponsePayload` in `src/libs/omniprotocol/serialization/consensus.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[375,380],"symbol_name":"ValidatorPhaseResponsePayload::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["sym-25c69489da5bd52abf8384dc"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-25c69489da5bd52abf8384dc","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ValidatorPhaseResponsePayload (interface) exported from `src/libs/omniprotocol/serialization/consensus.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[375,380],"symbol_name":"ValidatorPhaseResponsePayload","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["mod-7a54f789433ac1b88a2975b0"],"depended_by":["sym-4772b06d07bc4b22972f4952"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-e3e86d2049745e57873fd98b","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeValidatorPhaseResponse (function) exported from `src/libs/omniprotocol/serialization/consensus.ts`.","TypeScript signature: (payload: ValidatorPhaseResponsePayload) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/consensus.ts","line_range":[382,393],"symbol_name":"encodeValidatorPhaseResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/consensus"},"relationships":{"depends_on":["mod-7a54f789433ac1b88a2975b0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-c67c6857215adc29562ba837","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `PeerlistEntry` in `src/libs/omniprotocol/serialization/control.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/control.ts","line_range":[12,19],"symbol_name":"PeerlistEntry::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/control"},"relationships":{"depends_on":["sym-481361719769269bbcc2e42e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-481361719769269bbcc2e42e","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerlistEntry (interface) exported from `src/libs/omniprotocol/serialization/control.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/control.ts","line_range":[12,19],"symbol_name":"PeerlistEntry","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/control"},"relationships":{"depends_on":["mod-fda58e5568b7fcba96a8a55c"],"depended_by":["sym-c67c6857215adc29562ba837"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-1c7b74b127fc73ce782ddde8","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `PeerlistResponsePayload` in `src/libs/omniprotocol/serialization/control.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/control.ts","line_range":[21,24],"symbol_name":"PeerlistResponsePayload::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/control"},"relationships":{"depends_on":["sym-ea8e70c31d2e96bfbddc5728"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-ea8e70c31d2e96bfbddc5728","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerlistResponsePayload (interface) exported from `src/libs/omniprotocol/serialization/control.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/control.ts","line_range":[21,24],"symbol_name":"PeerlistResponsePayload","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/control"},"relationships":{"depends_on":["mod-fda58e5568b7fcba96a8a55c"],"depended_by":["sym-1c7b74b127fc73ce782ddde8"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-55dc68dc14be56917edfd871","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `PeerlistSyncRequestPayload` in `src/libs/omniprotocol/serialization/control.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/control.ts","line_range":[26,29],"symbol_name":"PeerlistSyncRequestPayload::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/control"},"relationships":{"depends_on":["sym-6f8e6e4f31b5962fa750ff76"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-6f8e6e4f31b5962fa750ff76","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerlistSyncRequestPayload (interface) exported from `src/libs/omniprotocol/serialization/control.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/control.ts","line_range":[26,29],"symbol_name":"PeerlistSyncRequestPayload","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/control"},"relationships":{"depends_on":["mod-fda58e5568b7fcba96a8a55c"],"depended_by":["sym-55dc68dc14be56917edfd871"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-c2a23fae15322adc98caeb29","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `PeerlistSyncResponsePayload` in `src/libs/omniprotocol/serialization/control.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/control.ts","line_range":[31,36],"symbol_name":"PeerlistSyncResponsePayload::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/control"},"relationships":{"depends_on":["sym-0dc97a487d76eed091d62752"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-0dc97a487d76eed091d62752","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerlistSyncResponsePayload (interface) exported from `src/libs/omniprotocol/serialization/control.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/control.ts","line_range":[31,36],"symbol_name":"PeerlistSyncResponsePayload","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/control"},"relationships":{"depends_on":["mod-fda58e5568b7fcba96a8a55c"],"depended_by":["sym-c2a23fae15322adc98caeb29"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-f8a0c4666cb0b4b98b3ac6f2","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `NodeCallRequestPayload` in `src/libs/omniprotocol/serialization/control.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/control.ts","line_range":[38,41],"symbol_name":"NodeCallRequestPayload::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/control"},"relationships":{"depends_on":["sym-13ac1dce8147d23e90ebd1e2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-13ac1dce8147d23e90ebd1e2","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["NodeCallRequestPayload (interface) exported from `src/libs/omniprotocol/serialization/control.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/control.ts","line_range":[38,41],"symbol_name":"NodeCallRequestPayload","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/control"},"relationships":{"depends_on":["mod-fda58e5568b7fcba96a8a55c"],"depended_by":["sym-f8a0c4666cb0b4b98b3ac6f2"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-9f79d2d01eb8704a8a3f667a","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `NodeCallResponsePayload` in `src/libs/omniprotocol/serialization/control.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/control.ts","line_range":[43,48],"symbol_name":"NodeCallResponsePayload::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/control"},"relationships":{"depends_on":["sym-3b5febcb27a4551c38d4e5da"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-3b5febcb27a4551c38d4e5da","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["NodeCallResponsePayload (interface) exported from `src/libs/omniprotocol/serialization/control.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/control.ts","line_range":[43,48],"symbol_name":"NodeCallResponsePayload","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/control"},"relationships":{"depends_on":["mod-fda58e5568b7fcba96a8a55c"],"depended_by":["sym-9f79d2d01eb8704a8a3f667a"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-bc7a00fb36defa4547dc4e66","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodePeerlistResponse (function) exported from `src/libs/omniprotocol/serialization/control.ts`.","TypeScript signature: (payload: PeerlistResponsePayload) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/control.ts","line_range":[118,129],"symbol_name":"encodePeerlistResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/control"},"relationships":{"depends_on":["mod-fda58e5568b7fcba96a8a55c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-d06a0d03433985f473292d4f","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodePeerlistResponse (function) exported from `src/libs/omniprotocol/serialization/control.ts`.","TypeScript signature: (buffer: Buffer) => PeerlistResponsePayload."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/control.ts","line_range":[131,149],"symbol_name":"decodePeerlistResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/control"},"relationships":{"depends_on":["mod-fda58e5568b7fcba96a8a55c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-90a66cf85e974a26a58d0020","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodePeerlistSyncRequest (function) exported from `src/libs/omniprotocol/serialization/control.ts`.","TypeScript signature: (payload: PeerlistSyncRequestPayload) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/control.ts","line_range":[151,156],"symbol_name":"encodePeerlistSyncRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/control"},"relationships":{"depends_on":["mod-fda58e5568b7fcba96a8a55c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-90b3c0e9e4b19ddeb943e4dd","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodePeerlistSyncRequest (function) exported from `src/libs/omniprotocol/serialization/control.ts`.","TypeScript signature: (buffer: Buffer) => PeerlistSyncRequestPayload."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/control.ts","line_range":[158,170],"symbol_name":"decodePeerlistSyncRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/control"},"relationships":{"depends_on":["mod-fda58e5568b7fcba96a8a55c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-f4ccdcb40b8b555b7a08fcb6","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodePeerlistSyncResponse (function) exported from `src/libs/omniprotocol/serialization/control.ts`.","TypeScript signature: (payload: PeerlistSyncResponsePayload) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/control.ts","line_range":[172,185],"symbol_name":"encodePeerlistSyncResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/control"},"relationships":{"depends_on":["mod-fda58e5568b7fcba96a8a55c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-9351362dec91626ae107ca56","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodeNodeCallRequest (function) exported from `src/libs/omniprotocol/serialization/control.ts`.","TypeScript signature: (buffer: Buffer) => NodeCallRequestPayload."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/control.ts","line_range":[302,321],"symbol_name":"decodeNodeCallRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/control"},"relationships":{"depends_on":["mod-fda58e5568b7fcba96a8a55c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-c5fa908fa5581b730fc5d09c","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeNodeCallRequest (function) exported from `src/libs/omniprotocol/serialization/control.ts`.","TypeScript signature: (payload: NodeCallRequestPayload) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/control.ts","line_range":[323,334],"symbol_name":"encodeNodeCallRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/control"},"relationships":{"depends_on":["mod-fda58e5568b7fcba96a8a55c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-8229616c5a767a0d5dbfefda","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeNodeCallResponse (function) exported from `src/libs/omniprotocol/serialization/control.ts`.","TypeScript signature: (payload: NodeCallResponsePayload) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/control.ts","line_range":[336,349],"symbol_name":"encodeNodeCallResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/control"},"relationships":{"depends_on":["mod-fda58e5568b7fcba96a8a55c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-88f33bf5560b48d40472b9d9","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodeNodeCallResponse (function) exported from `src/libs/omniprotocol/serialization/control.ts`.","TypeScript signature: (buffer: Buffer) => NodeCallResponsePayload."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/control.ts","line_range":[351,428],"symbol_name":"decodeNodeCallResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/control"},"relationships":{"depends_on":["mod-fda58e5568b7fcba96a8a55c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-20b5f591af45ea9097a1eca8","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeStringResponse (function) exported from `src/libs/omniprotocol/serialization/control.ts`.","TypeScript signature: (status: number, value: string) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/control.ts","line_range":[430,435],"symbol_name":"encodeStringResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/control"},"relationships":{"depends_on":["mod-fda58e5568b7fcba96a8a55c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-12b4c077de9faa8c83463abd","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodeStringResponse (function) exported from `src/libs/omniprotocol/serialization/control.ts`.","TypeScript signature: (buffer: Buffer) => { status: number; value: string }."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/control.ts","line_range":[437,441],"symbol_name":"decodeStringResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/control"},"relationships":{"depends_on":["mod-fda58e5568b7fcba96a8a55c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-4c7c069d6afb88dd0645bd92","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeJsonResponse (function) exported from `src/libs/omniprotocol/serialization/control.ts`.","TypeScript signature: (status: number, value: unknown) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/control.ts","line_range":[443,450],"symbol_name":"encodeJsonResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/control"},"relationships":{"depends_on":["mod-fda58e5568b7fcba96a8a55c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-04a3e5bb96f8917c9379915c","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodeJsonResponse (function) exported from `src/libs/omniprotocol/serialization/control.ts`.","TypeScript signature: (buffer: Buffer) => { status: number; value: unknown }."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/control.ts","line_range":[452,462],"symbol_name":"decodeJsonResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/control"},"relationships":{"depends_on":["mod-fda58e5568b7fcba96a8a55c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-f75ed5d703b6d0859d13b84a","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodePeerlistSyncResponse (function) exported from `src/libs/omniprotocol/serialization/control.ts`.","TypeScript signature: (buffer: Buffer) => PeerlistSyncResponsePayload."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/control.ts","line_range":[464,492],"symbol_name":"decodePeerlistSyncResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/control"},"relationships":{"depends_on":["mod-fda58e5568b7fcba96a8a55c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-39deee8a65b6d288793699df","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `AddressInfoPayload` in `src/libs/omniprotocol/serialization/gcr.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/gcr.ts","line_range":[3,8],"symbol_name":"AddressInfoPayload::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/gcr"},"relationships":{"depends_on":["sym-4bd857e92a09ab312df3fac6"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-4bd857e92a09ab312df3fac6","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["AddressInfoPayload (interface) exported from `src/libs/omniprotocol/serialization/gcr.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/gcr.ts","line_range":[3,8],"symbol_name":"AddressInfoPayload","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/gcr"},"relationships":{"depends_on":["mod-318b87a4c520cdb8c42c50c8"],"depended_by":["sym-39deee8a65b6d288793699df"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-4f96470733f0fe1d8997c6c3","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeAddressInfoResponse (function) exported from `src/libs/omniprotocol/serialization/gcr.ts`.","TypeScript signature: (payload: AddressInfoPayload) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/gcr.ts","line_range":[10,17],"symbol_name":"encodeAddressInfoResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/gcr"},"relationships":{"depends_on":["mod-318b87a4c520cdb8c42c50c8"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-d98c42026c34023c6273d50c","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodeAddressInfoResponse (function) exported from `src/libs/omniprotocol/serialization/gcr.ts`.","TypeScript signature: (buffer: Buffer) => AddressInfoPayload."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/gcr.ts","line_range":[19,39],"symbol_name":"decodeAddressInfoResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/gcr"},"relationships":{"depends_on":["mod-318b87a4c520cdb8c42c50c8"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-bd3a95e736c86b11a47a00ad","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeRpcResponse (function) exported from `src/libs/omniprotocol/serialization/jsonEnvelope.ts`.","TypeScript signature: (response: RPCResponse) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/jsonEnvelope.ts","line_range":[11,23],"symbol_name":"encodeRpcResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/jsonEnvelope"},"relationships":{"depends_on":["mod-da04ef1eca622af1ef3664c3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-ef238a74a16593944be3fbd3","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodeRpcResponse (function) exported from `src/libs/omniprotocol/serialization/jsonEnvelope.ts`.","TypeScript signature: (buffer: Buffer) => RPCResponse."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/jsonEnvelope.ts","line_range":[25,42],"symbol_name":"decodeRpcResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/jsonEnvelope"},"relationships":{"depends_on":["mod-da04ef1eca622af1ef3664c3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-3b31c5edccb093881690ab96","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeJsonRequest (function) exported from `src/libs/omniprotocol/serialization/jsonEnvelope.ts`.","TypeScript signature: (payload: unknown) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/jsonEnvelope.ts","line_range":[44,48],"symbol_name":"encodeJsonRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/jsonEnvelope"},"relationships":{"depends_on":["mod-da04ef1eca622af1ef3664c3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-b173258f48b4dfdf435372f4","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodeJsonRequest (function) exported from `src/libs/omniprotocol/serialization/jsonEnvelope.ts`.","TypeScript signature: (buffer: Buffer) => T."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/jsonEnvelope.ts","line_range":[50,54],"symbol_name":"decodeJsonRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/jsonEnvelope"},"relationships":{"depends_on":["mod-da04ef1eca622af1ef3664c3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-6b49bfaa683ae21eaa9fc761","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `L2PSSubmitEncryptedTxRequest` in `src/libs/omniprotocol/serialization/l2ps.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/l2ps.ts","line_range":[7,11],"symbol_name":"L2PSSubmitEncryptedTxRequest::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/l2ps"},"relationships":{"depends_on":["sym-defd3a4003779e6064cede3d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-defd3a4003779e6064cede3d","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSSubmitEncryptedTxRequest (interface) exported from `src/libs/omniprotocol/serialization/l2ps.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/l2ps.ts","line_range":[7,11],"symbol_name":"L2PSSubmitEncryptedTxRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/l2ps"},"relationships":{"depends_on":["mod-10774a0b5dd2473051df0fad"],"depended_by":["sym-6b49bfaa683ae21eaa9fc761"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-74af9f448201a71e785ad7af","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `L2PSGetProofRequest` in `src/libs/omniprotocol/serialization/l2ps.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/l2ps.ts","line_range":[13,16],"symbol_name":"L2PSGetProofRequest::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/l2ps"},"relationships":{"depends_on":["sym-dda21973087d6e481c8037b4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-dda21973087d6e481c8037b4","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSGetProofRequest (interface) exported from `src/libs/omniprotocol/serialization/l2ps.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/l2ps.ts","line_range":[13,16],"symbol_name":"L2PSGetProofRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/l2ps"},"relationships":{"depends_on":["mod-10774a0b5dd2473051df0fad"],"depended_by":["sym-74af9f448201a71e785ad7af"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-68c51d1daa2e84a19b1ef286","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `L2PSVerifyBatchRequest` in `src/libs/omniprotocol/serialization/l2ps.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/l2ps.ts","line_range":[18,22],"symbol_name":"L2PSVerifyBatchRequest::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/l2ps"},"relationships":{"depends_on":["sym-0951823a296655a3ade22fdb"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-0951823a296655a3ade22fdb","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSVerifyBatchRequest (interface) exported from `src/libs/omniprotocol/serialization/l2ps.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/l2ps.ts","line_range":[18,22],"symbol_name":"L2PSVerifyBatchRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/l2ps"},"relationships":{"depends_on":["mod-10774a0b5dd2473051df0fad"],"depended_by":["sym-68c51d1daa2e84a19b1ef286"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-be50e4d09b490b0ebb403162","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `L2PSSyncMempoolRequest` in `src/libs/omniprotocol/serialization/l2ps.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/l2ps.ts","line_range":[24,28],"symbol_name":"L2PSSyncMempoolRequest::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/l2ps"},"relationships":{"depends_on":["sym-bc9523b68a00abef0beae972"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-bc9523b68a00abef0beae972","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSSyncMempoolRequest (interface) exported from `src/libs/omniprotocol/serialization/l2ps.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/l2ps.ts","line_range":[24,28],"symbol_name":"L2PSSyncMempoolRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/l2ps"},"relationships":{"depends_on":["mod-10774a0b5dd2473051df0fad"],"depended_by":["sym-be50e4d09b490b0ebb403162"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-bc80da23c0788cbb96e525e7","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `L2PSGetBatchStatusRequest` in `src/libs/omniprotocol/serialization/l2ps.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/l2ps.ts","line_range":[30,33],"symbol_name":"L2PSGetBatchStatusRequest::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/l2ps"},"relationships":{"depends_on":["sym-46bef75b389f3a525f564868"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-46bef75b389f3a525f564868","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSGetBatchStatusRequest (interface) exported from `src/libs/omniprotocol/serialization/l2ps.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/l2ps.ts","line_range":[30,33],"symbol_name":"L2PSGetBatchStatusRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/l2ps"},"relationships":{"depends_on":["mod-10774a0b5dd2473051df0fad"],"depended_by":["sym-bc80da23c0788cbb96e525e7"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-07a6cec5a5c3a95ab1252789","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `L2PSGetParticipationRequest` in `src/libs/omniprotocol/serialization/l2ps.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/l2ps.ts","line_range":[35,38],"symbol_name":"L2PSGetParticipationRequest::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/l2ps"},"relationships":{"depends_on":["sym-0b8fbb71f8c6a15f84f89c18"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-0b8fbb71f8c6a15f84f89c18","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSGetParticipationRequest (interface) exported from `src/libs/omniprotocol/serialization/l2ps.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/l2ps.ts","line_range":[35,38],"symbol_name":"L2PSGetParticipationRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/l2ps"},"relationships":{"depends_on":["mod-10774a0b5dd2473051df0fad"],"depended_by":["sym-07a6cec5a5c3a95ab1252789"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-7f84a166c1f6ed5e7713d53f","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `L2PSHashUpdateRequest` in `src/libs/omniprotocol/serialization/l2ps.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/l2ps.ts","line_range":[40,46],"symbol_name":"L2PSHashUpdateRequest::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/l2ps"},"relationships":{"depends_on":["sym-bad9b7515020680a9f2efcd4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-bad9b7515020680a9f2efcd4","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSHashUpdateRequest (interface) exported from `src/libs/omniprotocol/serialization/l2ps.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/l2ps.ts","line_range":[40,46],"symbol_name":"L2PSHashUpdateRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/l2ps"},"relationships":{"depends_on":["mod-10774a0b5dd2473051df0fad"],"depended_by":["sym-7f84a166c1f6ed5e7713d53f"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-3e83d82facdcd6b51a624587","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeL2PSHashUpdate (function) exported from `src/libs/omniprotocol/serialization/l2ps.ts`.","TypeScript signature: (req: L2PSHashUpdateRequest) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/l2ps.ts","line_range":[52,60],"symbol_name":"encodeL2PSHashUpdate","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/l2ps"},"relationships":{"depends_on":["mod-10774a0b5dd2473051df0fad"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-8b8eec8e7dac3de610bd552f","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodeL2PSHashUpdate (function) exported from `src/libs/omniprotocol/serialization/l2ps.ts`.","TypeScript signature: (buffer: Buffer) => L2PSHashUpdateRequest."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/l2ps.ts","line_range":[62,86],"symbol_name":"decodeL2PSHashUpdate","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/l2ps"},"relationships":{"depends_on":["mod-10774a0b5dd2473051df0fad"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-684a2dfd8c5944d2cc9e9e73","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `L2PSMempoolEntry` in `src/libs/omniprotocol/serialization/l2ps.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/l2ps.ts","line_range":[92,98],"symbol_name":"L2PSMempoolEntry::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/l2ps"},"relationships":{"depends_on":["sym-9d5f9036c3a61f194222ddc9"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-9d5f9036c3a61f194222ddc9","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSMempoolEntry (interface) exported from `src/libs/omniprotocol/serialization/l2ps.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/l2ps.ts","line_range":[92,98],"symbol_name":"L2PSMempoolEntry","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/l2ps"},"relationships":{"depends_on":["mod-10774a0b5dd2473051df0fad"],"depended_by":["sym-684a2dfd8c5944d2cc9e9e73"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-1dd5bedf2f00e69d75db3984","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeL2PSMempoolEntries (function) exported from `src/libs/omniprotocol/serialization/l2ps.ts`.","TypeScript signature: (entries: L2PSMempoolEntry[]) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/l2ps.ts","line_range":[100,112],"symbol_name":"encodeL2PSMempoolEntries","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/l2ps"},"relationships":{"depends_on":["mod-10774a0b5dd2473051df0fad"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-bce363e2ed8fe28874f6e8d7","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodeL2PSMempoolEntries (function) exported from `src/libs/omniprotocol/serialization/l2ps.ts`.","TypeScript signature: (buffer: Buffer) => L2PSMempoolEntry[]."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/l2ps.ts","line_range":[114,148],"symbol_name":"decodeL2PSMempoolEntries","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/l2ps"},"relationships":{"depends_on":["mod-10774a0b5dd2473051df0fad"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-9482969157730c21f53bda3a","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `L2PSProofData` in `src/libs/omniprotocol/serialization/l2ps.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/l2ps.ts","line_range":[154,160],"symbol_name":"L2PSProofData::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/l2ps"},"relationships":{"depends_on":["sym-24c86701e405a5e93d569d27"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-24c86701e405a5e93d569d27","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSProofData (interface) exported from `src/libs/omniprotocol/serialization/l2ps.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/l2ps.ts","line_range":[154,160],"symbol_name":"L2PSProofData","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/l2ps"},"relationships":{"depends_on":["mod-10774a0b5dd2473051df0fad"],"depended_by":["sym-9482969157730c21f53bda3a"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-b5f2992ee061fa9af8d170bf","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeL2PSProofData (function) exported from `src/libs/omniprotocol/serialization/l2ps.ts`.","TypeScript signature: (proof: L2PSProofData) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/l2ps.ts","line_range":[162,170],"symbol_name":"encodeL2PSProofData","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/l2ps"},"relationships":{"depends_on":["mod-10774a0b5dd2473051df0fad"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-015b2d24689c8f1a98fd94fa","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodeL2PSProofData (function) exported from `src/libs/omniprotocol/serialization/l2ps.ts`.","TypeScript signature: (buffer: Buffer) => L2PSProofData."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/l2ps.ts","line_range":[172,196],"symbol_name":"decodeL2PSProofData","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/l2ps"},"relationships":{"depends_on":["mod-10774a0b5dd2473051df0fad"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-6a92728b97295df4add532cc","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `VersionNegotiateRequest` in `src/libs/omniprotocol/serialization/meta.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/meta.ts","line_range":[3,7],"symbol_name":"VersionNegotiateRequest::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/meta"},"relationships":{"depends_on":["sym-c59dda13f33be0983f2e2f24"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-c59dda13f33be0983f2e2f24","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["VersionNegotiateRequest (interface) exported from `src/libs/omniprotocol/serialization/meta.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/meta.ts","line_range":[3,7],"symbol_name":"VersionNegotiateRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/meta"},"relationships":{"depends_on":["mod-b08e6ddaebbb67ea6d37877c"],"depended_by":["sym-6a92728b97295df4add532cc"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-393a656c99e379da83261270","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `VersionNegotiateResponse` in `src/libs/omniprotocol/serialization/meta.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/meta.ts","line_range":[9,12],"symbol_name":"VersionNegotiateResponse::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/meta"},"relationships":{"depends_on":["sym-00caa963c5b5c3b283cc6f2a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-00caa963c5b5c3b283cc6f2a","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["VersionNegotiateResponse (interface) exported from `src/libs/omniprotocol/serialization/meta.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/meta.ts","line_range":[9,12],"symbol_name":"VersionNegotiateResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/meta"},"relationships":{"depends_on":["mod-b08e6ddaebbb67ea6d37877c"],"depended_by":["sym-393a656c99e379da83261270"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-3d4a17b03c78e440e8521bac","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodeVersionNegotiateRequest (function) exported from `src/libs/omniprotocol/serialization/meta.ts`.","TypeScript signature: (buffer: Buffer) => VersionNegotiateRequest."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/meta.ts","line_range":[14,37],"symbol_name":"decodeVersionNegotiateRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/meta"},"relationships":{"depends_on":["mod-b08e6ddaebbb67ea6d37877c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-839486393ec3777f098c4138","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeVersionNegotiateResponse (function) exported from `src/libs/omniprotocol/serialization/meta.ts`.","TypeScript signature: (payload: VersionNegotiateResponse) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/meta.ts","line_range":[39,44],"symbol_name":"encodeVersionNegotiateResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/meta"},"relationships":{"depends_on":["mod-b08e6ddaebbb67ea6d37877c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-cdee1d1ee123471a2fe8ccba","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `CapabilityDescriptor` in `src/libs/omniprotocol/serialization/meta.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/meta.ts","line_range":[46,50],"symbol_name":"CapabilityDescriptor::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/meta"},"relationships":{"depends_on":["sym-a0fe73ba5a4c3b5e9571f894"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-a0fe73ba5a4c3b5e9571f894","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CapabilityDescriptor (interface) exported from `src/libs/omniprotocol/serialization/meta.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/meta.ts","line_range":[46,50],"symbol_name":"CapabilityDescriptor","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/meta"},"relationships":{"depends_on":["mod-b08e6ddaebbb67ea6d37877c"],"depended_by":["sym-cdee1d1ee123471a2fe8ccba"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-ce4b61abdd638d7f7a2a015c","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `CapabilityExchangeRequest` in `src/libs/omniprotocol/serialization/meta.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/meta.ts","line_range":[52,54],"symbol_name":"CapabilityExchangeRequest::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/meta"},"relationships":{"depends_on":["sym-649a1a18feb266499520cbe5"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-649a1a18feb266499520cbe5","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CapabilityExchangeRequest (interface) exported from `src/libs/omniprotocol/serialization/meta.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/meta.ts","line_range":[52,54],"symbol_name":"CapabilityExchangeRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/meta"},"relationships":{"depends_on":["mod-b08e6ddaebbb67ea6d37877c"],"depended_by":["sym-ce4b61abdd638d7f7a2a015c"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-bfefc17bb5d1c65cc36c0843","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `CapabilityExchangeResponse` in `src/libs/omniprotocol/serialization/meta.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/meta.ts","line_range":[56,59],"symbol_name":"CapabilityExchangeResponse::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/meta"},"relationships":{"depends_on":["sym-704e246d81608f800aed67ad"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-704e246d81608f800aed67ad","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CapabilityExchangeResponse (interface) exported from `src/libs/omniprotocol/serialization/meta.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/meta.ts","line_range":[56,59],"symbol_name":"CapabilityExchangeResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/meta"},"relationships":{"depends_on":["mod-b08e6ddaebbb67ea6d37877c"],"depended_by":["sym-bfefc17bb5d1c65cc36c0843"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-02417a6365edd0198fd75264","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodeCapabilityExchangeRequest (function) exported from `src/libs/omniprotocol/serialization/meta.ts`.","TypeScript signature: (buffer: Buffer) => CapabilityExchangeRequest."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/meta.ts","line_range":[61,85],"symbol_name":"decodeCapabilityExchangeRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/meta"},"relationships":{"depends_on":["mod-b08e6ddaebbb67ea6d37877c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-eeb4fc775c7436b1dcc8a3c3","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeCapabilityExchangeResponse (function) exported from `src/libs/omniprotocol/serialization/meta.ts`.","TypeScript signature: (payload: CapabilityExchangeResponse) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/meta.ts","line_range":[87,99],"symbol_name":"encodeCapabilityExchangeResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/meta"},"relationships":{"depends_on":["mod-b08e6ddaebbb67ea6d37877c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-e3d213bc363306b53393ab4f","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ProtocolErrorPayload` in `src/libs/omniprotocol/serialization/meta.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/meta.ts","line_range":[101,104],"symbol_name":"ProtocolErrorPayload::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/meta"},"relationships":{"depends_on":["sym-b4556341831fecb80421ac68"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-b4556341831fecb80421ac68","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ProtocolErrorPayload (interface) exported from `src/libs/omniprotocol/serialization/meta.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/meta.ts","line_range":[101,104],"symbol_name":"ProtocolErrorPayload","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/meta"},"relationships":{"depends_on":["mod-b08e6ddaebbb67ea6d37877c"],"depended_by":["sym-e3d213bc363306b53393ab4f"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-6cd8e16677b8cf80dd1ad744","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodeProtocolError (function) exported from `src/libs/omniprotocol/serialization/meta.ts`.","TypeScript signature: (buffer: Buffer) => ProtocolErrorPayload."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/meta.ts","line_range":[106,118],"symbol_name":"decodeProtocolError","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/meta"},"relationships":{"depends_on":["mod-b08e6ddaebbb67ea6d37877c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-9f28799d05d13c0d15a531c2","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeProtocolError (function) exported from `src/libs/omniprotocol/serialization/meta.ts`.","TypeScript signature: (payload: ProtocolErrorPayload) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/meta.ts","line_range":[120,125],"symbol_name":"encodeProtocolError","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/meta"},"relationships":{"depends_on":["mod-b08e6ddaebbb67ea6d37877c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-2a8e22fd4ddb063dd986f7e4","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ProtocolPingPayload` in `src/libs/omniprotocol/serialization/meta.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/meta.ts","line_range":[127,129],"symbol_name":"ProtocolPingPayload::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/meta"},"relationships":{"depends_on":["sym-07dcd771e2b390047f2e6a55"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-07dcd771e2b390047f2e6a55","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ProtocolPingPayload (interface) exported from `src/libs/omniprotocol/serialization/meta.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/meta.ts","line_range":[127,129],"symbol_name":"ProtocolPingPayload","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/meta"},"relationships":{"depends_on":["mod-b08e6ddaebbb67ea6d37877c"],"depended_by":["sym-2a8e22fd4ddb063dd986f7e4"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-b82d83e2bc3aa3aa35dc2364","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodeProtocolPing (function) exported from `src/libs/omniprotocol/serialization/meta.ts`.","TypeScript signature: (buffer: Buffer) => ProtocolPingPayload."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/meta.ts","line_range":[131,134],"symbol_name":"decodeProtocolPing","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/meta"},"relationships":{"depends_on":["mod-b08e6ddaebbb67ea6d37877c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-79d31f302ae00821c9b091e7","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ProtocolPingResponse` in `src/libs/omniprotocol/serialization/meta.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/meta.ts","line_range":[136,139],"symbol_name":"ProtocolPingResponse::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/meta"},"relationships":{"depends_on":["sym-d91a4ce131bb705db219070a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-d91a4ce131bb705db219070a","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ProtocolPingResponse (interface) exported from `src/libs/omniprotocol/serialization/meta.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/meta.ts","line_range":[136,139],"symbol_name":"ProtocolPingResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/meta"},"relationships":{"depends_on":["mod-b08e6ddaebbb67ea6d37877c"],"depended_by":["sym-79d31f302ae00821c9b091e7"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-81eae4b46a28fb84e48f06ad","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeProtocolPingResponse (function) exported from `src/libs/omniprotocol/serialization/meta.ts`.","TypeScript signature: (payload: ProtocolPingResponse) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/meta.ts","line_range":[141,146],"symbol_name":"encodeProtocolPingResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/meta"},"relationships":{"depends_on":["mod-b08e6ddaebbb67ea6d37877c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-82a1161ce70b04b888c2f0b6","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ProtocolDisconnectPayload` in `src/libs/omniprotocol/serialization/meta.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/meta.ts","line_range":[148,151],"symbol_name":"ProtocolDisconnectPayload::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/meta"},"relationships":{"depends_on":["sym-04be92096edfe026f0b98854"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-04be92096edfe026f0b98854","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ProtocolDisconnectPayload (interface) exported from `src/libs/omniprotocol/serialization/meta.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/meta.ts","line_range":[148,151],"symbol_name":"ProtocolDisconnectPayload","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/meta"},"relationships":{"depends_on":["mod-b08e6ddaebbb67ea6d37877c"],"depended_by":["sym-82a1161ce70b04b888c2f0b6"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-e7c776ab0eba1f5599be7fcb","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodeProtocolDisconnect (function) exported from `src/libs/omniprotocol/serialization/meta.ts`.","TypeScript signature: (buffer: Buffer) => ProtocolDisconnectPayload."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/meta.ts","line_range":[153,165],"symbol_name":"decodeProtocolDisconnect","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/meta"},"relationships":{"depends_on":["mod-b08e6ddaebbb67ea6d37877c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-cdea7aa1b6de2749159f6e96","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeProtocolDisconnect (function) exported from `src/libs/omniprotocol/serialization/meta.ts`.","TypeScript signature: (payload: ProtocolDisconnectPayload) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/meta.ts","line_range":[167,172],"symbol_name":"encodeProtocolDisconnect","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/meta"},"relationships":{"depends_on":["mod-b08e6ddaebbb67ea6d37877c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-c615dbb155d43299ba7b7acd","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `PrimitiveEncoder` in `src/libs/omniprotocol/serialization/primitives.ts`."],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/primitives.ts","line_range":[1,46],"symbol_name":"PrimitiveEncoder::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/primitives"},"relationships":{"depends_on":["sym-97131dcb1a2dffeac2eaa164"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-115a795c311c05a660b0cfaf","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PrimitiveEncoder.encodeUInt8 method on exported class `PrimitiveEncoder` in `src/libs/omniprotocol/serialization/primitives.ts`.","TypeScript signature: (value: number) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/primitives.ts","line_range":[2,6],"symbol_name":"PrimitiveEncoder.encodeUInt8","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/primitives"},"relationships":{"depends_on":["sym-97131dcb1a2dffeac2eaa164"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-88b5df7ef753f6b018ea90ab","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PrimitiveEncoder.encodeBoolean method on exported class `PrimitiveEncoder` in `src/libs/omniprotocol/serialization/primitives.ts`.","TypeScript signature: (value: boolean) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/primitives.ts","line_range":[8,10],"symbol_name":"PrimitiveEncoder.encodeBoolean","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/primitives"},"relationships":{"depends_on":["sym-97131dcb1a2dffeac2eaa164"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-84c84d61c9c8f4b14650344e","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PrimitiveEncoder.encodeUInt16 method on exported class `PrimitiveEncoder` in `src/libs/omniprotocol/serialization/primitives.ts`.","TypeScript signature: (value: number) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/primitives.ts","line_range":[12,16],"symbol_name":"PrimitiveEncoder.encodeUInt16","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/primitives"},"relationships":{"depends_on":["sym-97131dcb1a2dffeac2eaa164"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-ebcdfff7c8f26147d49f7e68","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PrimitiveEncoder.encodeUInt32 method on exported class `PrimitiveEncoder` in `src/libs/omniprotocol/serialization/primitives.ts`.","TypeScript signature: (value: number) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/primitives.ts","line_range":[18,22],"symbol_name":"PrimitiveEncoder.encodeUInt32","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/primitives"},"relationships":{"depends_on":["sym-97131dcb1a2dffeac2eaa164"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-a44f26a28d524913f6c5ae0d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PrimitiveEncoder.encodeUInt64 method on exported class `PrimitiveEncoder` in `src/libs/omniprotocol/serialization/primitives.ts`.","TypeScript signature: (value: bigint | number) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/primitives.ts","line_range":[24,29],"symbol_name":"PrimitiveEncoder.encodeUInt64","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/primitives"},"relationships":{"depends_on":["sym-97131dcb1a2dffeac2eaa164"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-96c322c3230b3318cb0bfef3","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PrimitiveEncoder.encodeString method on exported class `PrimitiveEncoder` in `src/libs/omniprotocol/serialization/primitives.ts`.","TypeScript signature: (value: string) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/primitives.ts","line_range":[31,35],"symbol_name":"PrimitiveEncoder.encodeString","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/primitives"},"relationships":{"depends_on":["sym-97131dcb1a2dffeac2eaa164"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-053ecef7be1b74553f59efc7","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PrimitiveEncoder.encodeBytes method on exported class `PrimitiveEncoder` in `src/libs/omniprotocol/serialization/primitives.ts`.","TypeScript signature: (data: Buffer) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/primitives.ts","line_range":[37,40],"symbol_name":"PrimitiveEncoder.encodeBytes","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/primitives"},"relationships":{"depends_on":["sym-97131dcb1a2dffeac2eaa164"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-3fe76fd5033992560ddc2bb5","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PrimitiveEncoder.encodeVarBytes method on exported class `PrimitiveEncoder` in `src/libs/omniprotocol/serialization/primitives.ts`.","TypeScript signature: (data: Buffer) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/primitives.ts","line_range":[42,45],"symbol_name":"PrimitiveEncoder.encodeVarBytes","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/primitives"},"relationships":{"depends_on":["sym-97131dcb1a2dffeac2eaa164"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-97131dcb1a2dffeac2eaa164","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PrimitiveEncoder (class) exported from `src/libs/omniprotocol/serialization/primitives.ts`."],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/primitives.ts","line_range":[1,46],"symbol_name":"PrimitiveEncoder","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/primitives"},"relationships":{"depends_on":["mod-f2ed72921c23c1fc451fd89c"],"depended_by":["sym-c615dbb155d43299ba7b7acd","sym-115a795c311c05a660b0cfaf","sym-88b5df7ef753f6b018ea90ab","sym-84c84d61c9c8f4b14650344e","sym-ebcdfff7c8f26147d49f7e68","sym-a44f26a28d524913f6c5ae0d","sym-96c322c3230b3318cb0bfef3","sym-053ecef7be1b74553f59efc7","sym-3fe76fd5033992560ddc2bb5"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-c8e4c282ac82ce5a43c6dabc","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `PrimitiveDecoder` in `src/libs/omniprotocol/serialization/primitives.ts`."],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/primitives.ts","line_range":[48,99],"symbol_name":"PrimitiveDecoder::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/primitives"},"relationships":{"depends_on":["sym-ee9fcadb697329d2357af877"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-156b046ec0b458f750d6c8ac","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PrimitiveDecoder.decodeUInt8 method on exported class `PrimitiveDecoder` in `src/libs/omniprotocol/serialization/primitives.ts`.","TypeScript signature: (buffer: Buffer, offset: unknown) => { value: number; bytesRead: number }."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/primitives.ts","line_range":[49,51],"symbol_name":"PrimitiveDecoder.decodeUInt8","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/primitives"},"relationships":{"depends_on":["sym-ee9fcadb697329d2357af877"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-2c13707cee1ca19b78229934","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PrimitiveDecoder.decodeBoolean method on exported class `PrimitiveDecoder` in `src/libs/omniprotocol/serialization/primitives.ts`.","TypeScript signature: (buffer: Buffer, offset: unknown) => { value: boolean; bytesRead: number }."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/primitives.ts","line_range":[53,56],"symbol_name":"PrimitiveDecoder.decodeBoolean","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/primitives"},"relationships":{"depends_on":["sym-ee9fcadb697329d2357af877"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-cde19651d1f29828454ec4b6","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PrimitiveDecoder.decodeUInt16 method on exported class `PrimitiveDecoder` in `src/libs/omniprotocol/serialization/primitives.ts`.","TypeScript signature: (buffer: Buffer, offset: unknown) => { value: number; bytesRead: number }."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/primitives.ts","line_range":[58,60],"symbol_name":"PrimitiveDecoder.decodeUInt16","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/primitives"},"relationships":{"depends_on":["sym-ee9fcadb697329d2357af877"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-b7b7764b5f8752a3680783e8","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PrimitiveDecoder.decodeUInt32 method on exported class `PrimitiveDecoder` in `src/libs/omniprotocol/serialization/primitives.ts`.","TypeScript signature: (buffer: Buffer, offset: unknown) => { value: number; bytesRead: number }."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/primitives.ts","line_range":[62,64],"symbol_name":"PrimitiveDecoder.decodeUInt32","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/primitives"},"relationships":{"depends_on":["sym-ee9fcadb697329d2357af877"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-134f63188f756ad86c2a544c","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PrimitiveDecoder.decodeUInt64 method on exported class `PrimitiveDecoder` in `src/libs/omniprotocol/serialization/primitives.ts`.","TypeScript signature: (buffer: Buffer, offset: unknown) => { value: bigint; bytesRead: number }."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/primitives.ts","line_range":[66,68],"symbol_name":"PrimitiveDecoder.decodeUInt64","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/primitives"},"relationships":{"depends_on":["sym-ee9fcadb697329d2357af877"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-5e360294a26cb37091a37018","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PrimitiveDecoder.decodeString method on exported class `PrimitiveDecoder` in `src/libs/omniprotocol/serialization/primitives.ts`.","TypeScript signature: (buffer: Buffer, offset: unknown) => { value: string; bytesRead: number }."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/primitives.ts","line_range":[70,78],"symbol_name":"PrimitiveDecoder.decodeString","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/primitives"},"relationships":{"depends_on":["sym-ee9fcadb697329d2357af877"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-3b67e628eb4b9ff604126a19","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PrimitiveDecoder.decodeBytes method on exported class `PrimitiveDecoder` in `src/libs/omniprotocol/serialization/primitives.ts`.","TypeScript signature: (buffer: Buffer, offset: unknown) => { value: Buffer; bytesRead: number }."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/primitives.ts","line_range":[80,88],"symbol_name":"PrimitiveDecoder.decodeBytes","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/primitives"},"relationships":{"depends_on":["sym-ee9fcadb697329d2357af877"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-8f72c9a1055bca2bc71f0167","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PrimitiveDecoder.decodeVarBytes method on exported class `PrimitiveDecoder` in `src/libs/omniprotocol/serialization/primitives.ts`.","TypeScript signature: (buffer: Buffer, offset: unknown) => { value: Buffer; bytesRead: number }."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/primitives.ts","line_range":[90,98],"symbol_name":"PrimitiveDecoder.decodeVarBytes","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/primitives"},"relationships":{"depends_on":["sym-ee9fcadb697329d2357af877"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-ee9fcadb697329d2357af877","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PrimitiveDecoder (class) exported from `src/libs/omniprotocol/serialization/primitives.ts`."],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/primitives.ts","line_range":[48,99],"symbol_name":"PrimitiveDecoder","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/primitives"},"relationships":{"depends_on":["mod-f2ed72921c23c1fc451fd89c"],"depended_by":["sym-c8e4c282ac82ce5a43c6dabc","sym-156b046ec0b458f750d6c8ac","sym-2c13707cee1ca19b78229934","sym-cde19651d1f29828454ec4b6","sym-b7b7764b5f8752a3680783e8","sym-134f63188f756ad86c2a544c","sym-5e360294a26cb37091a37018","sym-3b67e628eb4b9ff604126a19","sym-8f72c9a1055bca2bc71f0167"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-398f49ae51bd5320d95176c5","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `MempoolResponsePayload` in `src/libs/omniprotocol/serialization/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[3,6],"symbol_name":"MempoolResponsePayload::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["sym-c8dc6d5802b95dedf621862d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-c8dc6d5802b95dedf621862d","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MempoolResponsePayload (interface) exported from `src/libs/omniprotocol/serialization/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[3,6],"symbol_name":"MempoolResponsePayload","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":["sym-398f49ae51bd5320d95176c5"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-f06f1dcb2dfd8d7e4dd48292","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeMempoolResponse (function) exported from `src/libs/omniprotocol/serialization/sync.ts`.","TypeScript signature: (payload: MempoolResponsePayload) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[8,18],"symbol_name":"encodeMempoolResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-205b5cb1bf996c3482d66431","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodeMempoolResponse (function) exported from `src/libs/omniprotocol/serialization/sync.ts`.","TypeScript signature: (buffer: Buffer) => MempoolResponsePayload."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[20,37],"symbol_name":"decodeMempoolResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-b0d0846d390faea344a260a3","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `MempoolSyncRequestPayload` in `src/libs/omniprotocol/serialization/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[39,43],"symbol_name":"MempoolSyncRequestPayload::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["sym-3b474985222cfc997a5d0ef7"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-3b474985222cfc997a5d0ef7","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MempoolSyncRequestPayload (interface) exported from `src/libs/omniprotocol/serialization/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[39,43],"symbol_name":"MempoolSyncRequestPayload","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":["sym-b0d0846d390faea344a260a3"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-2745d8771ea38a82ffaeea95","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeMempoolSyncRequest (function) exported from `src/libs/omniprotocol/serialization/sync.ts`.","TypeScript signature: (payload: MempoolSyncRequestPayload) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[45,51],"symbol_name":"encodeMempoolSyncRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-2998e1ceb03e2f98134e96d9","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodeMempoolSyncRequest (function) exported from `src/libs/omniprotocol/serialization/sync.ts`.","TypeScript signature: (buffer: Buffer) => MempoolSyncRequestPayload."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[53,69],"symbol_name":"decodeMempoolSyncRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-0e202b84aaada6b86ce3e501","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `MempoolSyncResponsePayload` in `src/libs/omniprotocol/serialization/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[71,76],"symbol_name":"MempoolSyncResponsePayload::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["sym-aa28f8a1e849d532b667906d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-aa28f8a1e849d532b667906d","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MempoolSyncResponsePayload (interface) exported from `src/libs/omniprotocol/serialization/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[71,76],"symbol_name":"MempoolSyncResponsePayload","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":["sym-0e202b84aaada6b86ce3e501"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-3934bcc10c9b4f2e9c2d0959","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeMempoolSyncResponse (function) exported from `src/libs/omniprotocol/serialization/sync.ts`.","TypeScript signature: (payload: MempoolSyncResponsePayload) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[78,91],"symbol_name":"encodeMempoolSyncResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-63c9672a710d076dc0e06cf3","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `MempoolMergeRequestPayload` in `src/libs/omniprotocol/serialization/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[93,95],"symbol_name":"MempoolMergeRequestPayload::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["sym-685b7b28fe67a4cc44e434de"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-685b7b28fe67a4cc44e434de","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MempoolMergeRequestPayload (interface) exported from `src/libs/omniprotocol/serialization/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[93,95],"symbol_name":"MempoolMergeRequestPayload","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":["sym-63c9672a710d076dc0e06cf3"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-7fa32da41eaee8452f8bd9a5","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodeMempoolMergeRequest (function) exported from `src/libs/omniprotocol/serialization/sync.ts`.","TypeScript signature: (buffer: Buffer) => MempoolMergeRequestPayload."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[97,110],"symbol_name":"decodeMempoolMergeRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-1c22efc6afd12d2cefe35a3d","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeMempoolMergeRequest (function) exported from `src/libs/omniprotocol/serialization/sync.ts`.","TypeScript signature: (payload: MempoolMergeRequestPayload) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[112,121],"symbol_name":"encodeMempoolMergeRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-50385a967901d4552b638fc9","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodeMempoolSyncResponse (function) exported from `src/libs/omniprotocol/serialization/sync.ts`.","TypeScript signature: (buffer: Buffer) => MempoolSyncResponsePayload."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[123,150],"symbol_name":"decodeMempoolSyncResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-34d2413a3679dfdbfae04b85","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `BlockEntryPayload` in `src/libs/omniprotocol/serialization/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[152,157],"symbol_name":"BlockEntryPayload::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["sym-b75fc6c5dace7ee100cd6671"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-b75fc6c5dace7ee100cd6671","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BlockEntryPayload (interface) exported from `src/libs/omniprotocol/serialization/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[152,157],"symbol_name":"BlockEntryPayload","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":["sym-34d2413a3679dfdbfae04b85"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-640fafbc00c2c677cbe674d4","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `BlockMetadata` in `src/libs/omniprotocol/serialization/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[159,165],"symbol_name":"BlockMetadata::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["sym-e2d7a7040dc244cb0c9a5e1e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-e2d7a7040dc244cb0c9a5e1e","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BlockMetadata (interface) exported from `src/libs/omniprotocol/serialization/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[159,165],"symbol_name":"BlockMetadata","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":["sym-640fafbc00c2c677cbe674d4"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-638ca9f97a7186e06d2d59ad","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeBlockMetadata (function) exported from `src/libs/omniprotocol/serialization/sync.ts`.","TypeScript signature: (metadata: BlockMetadata) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[190,198],"symbol_name":"encodeBlockMetadata","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-12924b2bd0070b6b03d3764a","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodeBlockMetadata (function) exported from `src/libs/omniprotocol/serialization/sync.ts`.","TypeScript signature: (buffer: Buffer) => BlockMetadata."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[200,224],"symbol_name":"decodeBlockMetadata","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-aadb6a479fc23c9ae89a48dc","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `BlockResponsePayload` in `src/libs/omniprotocol/serialization/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[263,266],"symbol_name":"BlockResponsePayload::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["sym-f5257582e7cf3f5b4295d85b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-f5257582e7cf3f5b4295d85b","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BlockResponsePayload (interface) exported from `src/libs/omniprotocol/serialization/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[263,266],"symbol_name":"BlockResponsePayload","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":["sym-aadb6a479fc23c9ae89a48dc"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-83065379d4a1c2d6f3b97b0d","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeBlockResponse (function) exported from `src/libs/omniprotocol/serialization/sync.ts`.","TypeScript signature: (payload: BlockResponsePayload) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[268,273],"symbol_name":"encodeBlockResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-d3398ecb720878008124bdce","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodeBlockResponse (function) exported from `src/libs/omniprotocol/serialization/sync.ts`.","TypeScript signature: (buffer: Buffer) => BlockResponsePayload."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[275,287],"symbol_name":"decodeBlockResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-370c23cf8df49a2d85fd00c3","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `BlocksResponsePayload` in `src/libs/omniprotocol/serialization/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[289,292],"symbol_name":"BlocksResponsePayload::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["sym-a6aea358d016932d28dc7be5"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-a6aea358d016932d28dc7be5","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BlocksResponsePayload (interface) exported from `src/libs/omniprotocol/serialization/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[289,292],"symbol_name":"BlocksResponsePayload","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":["sym-370c23cf8df49a2d85fd00c3"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-4557b22ff4878be5f4a83de0","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeBlocksResponse (function) exported from `src/libs/omniprotocol/serialization/sync.ts`.","TypeScript signature: (payload: BlocksResponsePayload) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[294,304],"symbol_name":"encodeBlocksResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-fb874babcae55f743d4ff85e"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-5ebf3bd250ee5182d48cabb6","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodeBlocksResponse (function) exported from `src/libs/omniprotocol/serialization/sync.ts`.","TypeScript signature: (buffer: Buffer) => BlocksResponsePayload."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[306,325],"symbol_name":"decodeBlocksResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-ac0a1e228d4998787a688f49","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `BlockSyncRequestPayload` in `src/libs/omniprotocol/serialization/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[327,331],"symbol_name":"BlockSyncRequestPayload::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["sym-9d09479e95ac975cf01cb1c9"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-9d09479e95ac975cf01cb1c9","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BlockSyncRequestPayload (interface) exported from `src/libs/omniprotocol/serialization/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[327,331],"symbol_name":"BlockSyncRequestPayload","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":["sym-ac0a1e228d4998787a688f49"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-cad0c5620a82457ff3fd1caa","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodeBlockSyncRequest (function) exported from `src/libs/omniprotocol/serialization/sync.ts`.","TypeScript signature: (buffer: Buffer) => BlockSyncRequestPayload."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[333,349],"symbol_name":"decodeBlockSyncRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-3cf7208af311e74228536b19","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeBlockSyncRequest (function) exported from `src/libs/omniprotocol/serialization/sync.ts`.","TypeScript signature: (payload: BlockSyncRequestPayload) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[351,357],"symbol_name":"encodeBlockSyncRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-12308ff860a88b22d3988316","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `BlockSyncResponsePayload` in `src/libs/omniprotocol/serialization/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[359,362],"symbol_name":"BlockSyncResponsePayload::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["sym-c3d439caa60d66c084b242cb"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-c3d439caa60d66c084b242cb","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BlockSyncResponsePayload (interface) exported from `src/libs/omniprotocol/serialization/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[359,362],"symbol_name":"BlockSyncResponsePayload","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":["sym-12308ff860a88b22d3988316"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-fb874babcae55f743d4ff85e","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeBlockSyncResponse (function) exported from `src/libs/omniprotocol/serialization/sync.ts`.","TypeScript signature: (payload: BlockSyncResponsePayload) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[364,369],"symbol_name":"encodeBlockSyncResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-4557b22ff4878be5f4a83de0"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-94a4bc0bef1261cd6df79681","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `BlocksRequestPayload` in `src/libs/omniprotocol/serialization/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[371,374],"symbol_name":"BlocksRequestPayload::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["sym-f0b5e63d32e47917e6917e37"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-f0b5e63d32e47917e6917e37","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BlocksRequestPayload (interface) exported from `src/libs/omniprotocol/serialization/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[371,374],"symbol_name":"BlocksRequestPayload","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":["sym-94a4bc0bef1261cd6df79681"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-10bf3623222ef5c352c92e57","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodeBlocksRequest (function) exported from `src/libs/omniprotocol/serialization/sync.ts`.","TypeScript signature: (buffer: Buffer) => BlocksRequestPayload."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[376,388],"symbol_name":"decodeBlocksRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-5a6498b588eb7b9202c2278f","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeBlocksRequest (function) exported from `src/libs/omniprotocol/serialization/sync.ts`.","TypeScript signature: (payload: BlocksRequestPayload) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[390,395],"symbol_name":"encodeBlocksRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-3efe476db2668ba9240cd9fa","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `BlockHashRequestPayload` in `src/libs/omniprotocol/serialization/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[397,399],"symbol_name":"BlockHashRequestPayload::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["sym-2a16d473fb82483974822634"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-2a16d473fb82483974822634","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BlockHashRequestPayload (interface) exported from `src/libs/omniprotocol/serialization/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[397,399],"symbol_name":"BlockHashRequestPayload","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":["sym-3efe476db2668ba9240cd9fa"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-0429407686d62d7981518349","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodeBlockHashRequest (function) exported from `src/libs/omniprotocol/serialization/sync.ts`.","TypeScript signature: (buffer: Buffer) => BlockHashRequestPayload."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[401,404],"symbol_name":"decodeBlockHashRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-084f4ac4cc731f2eecd2e15b","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `TransactionHashRequestPayload` in `src/libs/omniprotocol/serialization/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[406,408],"symbol_name":"TransactionHashRequestPayload::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["sym-a389b419600f623779bfb957"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-a389b419600f623779bfb957","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TransactionHashRequestPayload (interface) exported from `src/libs/omniprotocol/serialization/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[406,408],"symbol_name":"TransactionHashRequestPayload","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":["sym-084f4ac4cc731f2eecd2e15b"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-0da9ed27a8edc8d60500c437","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodeTransactionHashRequest (function) exported from `src/libs/omniprotocol/serialization/sync.ts`.","TypeScript signature: (buffer: Buffer) => TransactionHashRequestPayload."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[410,413],"symbol_name":"decodeTransactionHashRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-0d519bd0d8d725bd68e90b74","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `TransactionResponsePayload` in `src/libs/omniprotocol/serialization/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[415,418],"symbol_name":"TransactionResponsePayload::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["sym-682349dca1db65816dbb8d40"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-682349dca1db65816dbb8d40","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TransactionResponsePayload (interface) exported from `src/libs/omniprotocol/serialization/sync.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[415,418],"symbol_name":"TransactionResponsePayload","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":["sym-0d519bd0d8d725bd68e90b74"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-cd38e297a920fb3851693005","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeTransactionResponse (function) exported from `src/libs/omniprotocol/serialization/sync.ts`.","TypeScript signature: (payload: TransactionResponsePayload) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/sync.ts","line_range":[420,425],"symbol_name":"encodeTransactionResponse","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/sync"},"relationships":{"depends_on":["mod-60762ca0d2e77317b47957f2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-d5cca436cb4085a64e3fbc81","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `DecodedTransaction` in `src/libs/omniprotocol/serialization/transaction.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/transaction.ts","line_range":[36,50],"symbol_name":"DecodedTransaction::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/transaction"},"relationships":{"depends_on":["sym-fde5c332b3442bce93cbd4cf"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-fde5c332b3442bce93cbd4cf","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DecodedTransaction (interface) exported from `src/libs/omniprotocol/serialization/transaction.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/transaction.ts","line_range":[36,50],"symbol_name":"DecodedTransaction","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/transaction"},"relationships":{"depends_on":["mod-51a57a3bb204ec45b2b3f614"],"depended_by":["sym-d5cca436cb4085a64e3fbc81"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-4d2cf98a651cd5dd3389e832","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeTransaction (function) exported from `src/libs/omniprotocol/serialization/transaction.ts`.","TypeScript signature: (transaction: any) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/transaction.ts","line_range":[52,89],"symbol_name":"encodeTransaction","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/transaction"},"relationships":{"depends_on":["mod-51a57a3bb204ec45b2b3f614"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-6deebd259361408f0a65993f","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodeTransaction (function) exported from `src/libs/omniprotocol/serialization/transaction.ts`.","TypeScript signature: (buffer: Buffer) => DecodedTransaction."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/transaction.ts","line_range":[91,187],"symbol_name":"decodeTransaction","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/transaction"},"relationships":{"depends_on":["mod-51a57a3bb204ec45b2b3f614"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-bf562992f64a168eef732a5d"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-d0d4887ab09527b9257a1405","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `TransactionEnvelopePayload` in `src/libs/omniprotocol/serialization/transaction.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/transaction.ts","line_range":[189,192],"symbol_name":"TransactionEnvelopePayload::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/transaction"},"relationships":{"depends_on":["sym-bff9f5e26c04692e57a8c205"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-bff9f5e26c04692e57a8c205","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TransactionEnvelopePayload (interface) exported from `src/libs/omniprotocol/serialization/transaction.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/transaction.ts","line_range":[189,192],"symbol_name":"TransactionEnvelopePayload","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/transaction"},"relationships":{"depends_on":["mod-51a57a3bb204ec45b2b3f614"],"depended_by":["sym-d0d4887ab09527b9257a1405"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-a35dd0f41512f99872e7738b","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["encodeTransactionEnvelope (function) exported from `src/libs/omniprotocol/serialization/transaction.ts`.","TypeScript signature: (payload: TransactionEnvelopePayload) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/transaction.ts","line_range":[194,199],"symbol_name":"encodeTransactionEnvelope","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/transaction"},"relationships":{"depends_on":["mod-51a57a3bb204ec45b2b3f614"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-bf562992f64a168eef732a5d","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["decodeTransactionEnvelope (function) exported from `src/libs/omniprotocol/serialization/transaction.ts`.","TypeScript signature: (buffer: Buffer) => {\n status: number\n transaction: DecodedTransaction\n}."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/serialization/transaction.ts","line_range":[201,216],"symbol_name":"decodeTransactionEnvelope","language":"typescript","module_resolution_path":"@/libs/omniprotocol/serialization/transaction"},"relationships":{"depends_on":["mod-51a57a3bb204ec45b2b3f614"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-6deebd259361408f0a65993f"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-6aff8c1e4a946b504755b96c","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `ConnectionState` in `src/libs/omniprotocol/server/InboundConnection.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/InboundConnection.ts","line_range":[10,15],"symbol_name":"ConnectionState::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/InboundConnection"},"relationships":{"depends_on":["sym-b36ae142dc9718ede23c06bc"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","events"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-b36ae142dc9718ede23c06bc","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ConnectionState (type) exported from `src/libs/omniprotocol/server/InboundConnection.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/InboundConnection.ts","line_range":[10,15],"symbol_name":"ConnectionState","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/InboundConnection"},"relationships":{"depends_on":["mod-c7ad59fd02de9e38e55f238d"],"depended_by":["sym-6aff8c1e4a946b504755b96c"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","events"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-d19c4eedb3523566ec96367b","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `InboundConnectionConfig` in `src/libs/omniprotocol/server/InboundConnection.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/InboundConnection.ts","line_range":[17,21],"symbol_name":"InboundConnectionConfig::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/InboundConnection"},"relationships":{"depends_on":["sym-651d97a1d371ba00f5ed8ef7"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","events"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-651d97a1d371ba00f5ed8ef7","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["InboundConnectionConfig (interface) exported from `src/libs/omniprotocol/server/InboundConnection.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/InboundConnection.ts","line_range":[17,21],"symbol_name":"InboundConnectionConfig","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/InboundConnection"},"relationships":{"depends_on":["mod-c7ad59fd02de9e38e55f238d"],"depended_by":["sym-d19c4eedb3523566ec96367b"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","events"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-8f1b556c30494585319ff2a8","level":"L3","extraction_confidence":0.87,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `InboundConnection` in `src/libs/omniprotocol/server/InboundConnection.ts`.","InboundConnection handles a single inbound connection from a peer"],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/InboundConnection.ts","line_range":[27,338],"symbol_name":"InboundConnection::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/InboundConnection"},"relationships":{"depends_on":["sym-133421c4f44d097284fdc1e1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","events"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 23-26","related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-8b4d74629cafce4fcd265da5","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["InboundConnection.start method on exported class `InboundConnection` in `src/libs/omniprotocol/server/InboundConnection.ts`.","TypeScript signature: () => void."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/InboundConnection.ts","line_range":[56,87],"symbol_name":"InboundConnection.start","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/InboundConnection"},"relationships":{"depends_on":["sym-133421c4f44d097284fdc1e1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","events"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-0e38f768aa845af8152f9371","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["InboundConnection.close method on exported class `InboundConnection` in `src/libs/omniprotocol/server/InboundConnection.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/omniprotocol/server/InboundConnection.ts","line_range":[302,321],"symbol_name":"InboundConnection.close","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/InboundConnection"},"relationships":{"depends_on":["sym-133421c4f44d097284fdc1e1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["net","events"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-c16a7a59d6bd44f47f669061","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["InboundConnection.getState method on exported class `InboundConnection` in `src/libs/omniprotocol/server/InboundConnection.ts`.","TypeScript signature: () => ConnectionState."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/InboundConnection.ts","line_range":[323,325],"symbol_name":"InboundConnection.getState","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/InboundConnection"},"relationships":{"depends_on":["sym-133421c4f44d097284fdc1e1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","events"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-4f3b527ae6c1a92b1e08382e","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["InboundConnection.getLastActivity method on exported class `InboundConnection` in `src/libs/omniprotocol/server/InboundConnection.ts`.","TypeScript signature: () => number."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/InboundConnection.ts","line_range":[327,329],"symbol_name":"InboundConnection.getLastActivity","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/InboundConnection"},"relationships":{"depends_on":["sym-133421c4f44d097284fdc1e1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","events"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-d5457eadb39d5b88b40a0b7f","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["InboundConnection.getCreatedAt method on exported class `InboundConnection` in `src/libs/omniprotocol/server/InboundConnection.ts`.","TypeScript signature: () => number."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/InboundConnection.ts","line_range":[331,333],"symbol_name":"InboundConnection.getCreatedAt","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/InboundConnection"},"relationships":{"depends_on":["sym-133421c4f44d097284fdc1e1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","events"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-3211b4fb8cd96a09dddc5945","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["InboundConnection.getPeerIdentity method on exported class `InboundConnection` in `src/libs/omniprotocol/server/InboundConnection.ts`.","TypeScript signature: () => string | null."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/InboundConnection.ts","line_range":[335,337],"symbol_name":"InboundConnection.getPeerIdentity","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/InboundConnection"},"relationships":{"depends_on":["sym-133421c4f44d097284fdc1e1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","events"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-133421c4f44d097284fdc1e1","level":"L2","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["InboundConnection (class) exported from `src/libs/omniprotocol/server/InboundConnection.ts`.","InboundConnection handles a single inbound connection from a peer"],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/InboundConnection.ts","line_range":[27,338],"symbol_name":"InboundConnection","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/InboundConnection"},"relationships":{"depends_on":["mod-c7ad59fd02de9e38e55f238d"],"depended_by":["sym-8f1b556c30494585319ff2a8","sym-8b4d74629cafce4fcd265da5","sym-0e38f768aa845af8152f9371","sym-c16a7a59d6bd44f47f669061","sym-4f3b527ae6c1a92b1e08382e","sym-d5457eadb39d5b88b40a0b7f","sym-3211b4fb8cd96a09dddc5945"],"implements":[],"extends":[],"calls":["sym-66031640dec8be166f293f56"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","events"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 23-26","related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-1f9b056f12bdcb651b98c9e9","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ServerConfig` in `src/libs/omniprotocol/server/OmniProtocolServer.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/OmniProtocolServer.ts","line_range":[7,17],"symbol_name":"ServerConfig::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/OmniProtocolServer"},"relationships":{"depends_on":["sym-5f956142286a9ffd6b89aff8"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","events","env:NODE_PORT","env:PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-5f956142286a9ffd6b89aff8","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ServerConfig (interface) exported from `src/libs/omniprotocol/server/OmniProtocolServer.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/OmniProtocolServer.ts","line_range":[7,17],"symbol_name":"ServerConfig","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/OmniProtocolServer"},"relationships":{"depends_on":["mod-21706187666573b14b262650"],"depended_by":["sym-1f9b056f12bdcb651b98c9e9"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","events","env:NODE_PORT","env:PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-4fd98aa9a051f922a1be1738","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `OmniProtocolServer` in `src/libs/omniprotocol/server/OmniProtocolServer.ts`.","OmniProtocolServer - Main TCP server for accepting incoming OmniProtocol connections"],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/OmniProtocolServer.ts","line_range":[22,219],"symbol_name":"OmniProtocolServer::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/OmniProtocolServer"},"relationships":{"depends_on":["sym-683faf499d47d1002dcc9c9a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","events","env:NODE_PORT","env:PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 19-21","related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-2a9f3b24c688a8f4c7c6ca77","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["OmniProtocolServer.start method on exported class `OmniProtocolServer` in `src/libs/omniprotocol/server/OmniProtocolServer.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/omniprotocol/server/OmniProtocolServer.ts","line_range":[58,105],"symbol_name":"OmniProtocolServer.start","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/OmniProtocolServer"},"relationships":{"depends_on":["sym-683faf499d47d1002dcc9c9a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["net","events","env:NODE_PORT","env:PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-3e5a52e4a3288e9197169dd5","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["OmniProtocolServer.stop method on exported class `OmniProtocolServer` in `src/libs/omniprotocol/server/OmniProtocolServer.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/omniprotocol/server/OmniProtocolServer.ts","line_range":[110,135],"symbol_name":"OmniProtocolServer.stop","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/OmniProtocolServer"},"relationships":{"depends_on":["sym-683faf499d47d1002dcc9c9a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["net","events","env:NODE_PORT","env:PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-d47afa81e1b42216c57c4f17","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["OmniProtocolServer.getStats method on exported class `OmniProtocolServer` in `src/libs/omniprotocol/server/OmniProtocolServer.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/OmniProtocolServer.ts","line_range":[195,202],"symbol_name":"OmniProtocolServer.getStats","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/OmniProtocolServer"},"relationships":{"depends_on":["sym-683faf499d47d1002dcc9c9a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","events","env:NODE_PORT","env:PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-3f2e207330d30a047d942f8a","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["OmniProtocolServer.getRateLimiter method on exported class `OmniProtocolServer` in `src/libs/omniprotocol/server/OmniProtocolServer.ts`.","TypeScript signature: () => RateLimiter."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/OmniProtocolServer.ts","line_range":[207,209],"symbol_name":"OmniProtocolServer.getRateLimiter","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/OmniProtocolServer"},"relationships":{"depends_on":["sym-683faf499d47d1002dcc9c9a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","events","env:NODE_PORT","env:PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-683faf499d47d1002dcc9c9a","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["OmniProtocolServer (class) exported from `src/libs/omniprotocol/server/OmniProtocolServer.ts`.","OmniProtocolServer - Main TCP server for accepting incoming OmniProtocol connections"],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/OmniProtocolServer.ts","line_range":[22,219],"symbol_name":"OmniProtocolServer","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/OmniProtocolServer"},"relationships":{"depends_on":["mod-21706187666573b14b262650"],"depended_by":["sym-4fd98aa9a051f922a1be1738","sym-2a9f3b24c688a8f4c7c6ca77","sym-3e5a52e4a3288e9197169dd5","sym-d47afa81e1b42216c57c4f17","sym-3f2e207330d30a047d942f8a"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","events","env:NODE_PORT","env:PORT"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 19-21","related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-b11e93b10772d5d3f91d3bf7","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ConnectionManagerConfig` in `src/libs/omniprotocol/server/ServerConnectionManager.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/ServerConnectionManager.ts","line_range":[7,12],"symbol_name":"ConnectionManagerConfig::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/ServerConnectionManager"},"relationships":{"depends_on":["sym-1c96385260a214f0ef0cd31a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","events"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-1c96385260a214f0ef0cd31a","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ConnectionManagerConfig (interface) exported from `src/libs/omniprotocol/server/ServerConnectionManager.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/ServerConnectionManager.ts","line_range":[7,12],"symbol_name":"ConnectionManagerConfig","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/ServerConnectionManager"},"relationships":{"depends_on":["mod-ca241437dd7ea992b976eec8"],"depended_by":["sym-b11e93b10772d5d3f91d3bf7"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","events"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-15a0cf677c65f5feb1acda3d","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `ServerConnectionManager` in `src/libs/omniprotocol/server/ServerConnectionManager.ts`.","ServerConnectionManager manages lifecycle of all inbound connections"],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/ServerConnectionManager.ts","line_range":[17,190],"symbol_name":"ServerConnectionManager::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/ServerConnectionManager"},"relationships":{"depends_on":["sym-10c1513a04a2c8cb11ddbcf4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","events"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 14-16","related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-52b7361894d97b4a7afdc494","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ServerConnectionManager.handleConnection method on exported class `ServerConnectionManager` in `src/libs/omniprotocol/server/ServerConnectionManager.ts`.","TypeScript signature: (socket: Socket) => void."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/ServerConnectionManager.ts","line_range":[33,62],"symbol_name":"ServerConnectionManager.handleConnection","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/ServerConnectionManager"},"relationships":{"depends_on":["sym-10c1513a04a2c8cb11ddbcf4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","events"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-c63340bdbd01e0a374f72ca1","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ServerConnectionManager.closeAll method on exported class `ServerConnectionManager` in `src/libs/omniprotocol/server/ServerConnectionManager.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/omniprotocol/server/ServerConnectionManager.ts","line_range":[67,84],"symbol_name":"ServerConnectionManager.closeAll","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/ServerConnectionManager"},"relationships":{"depends_on":["sym-10c1513a04a2c8cb11ddbcf4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["net","events"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-e7404e24dcc9f40c5540555a","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ServerConnectionManager.getConnectionCount method on exported class `ServerConnectionManager` in `src/libs/omniprotocol/server/ServerConnectionManager.ts`.","TypeScript signature: () => number."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/ServerConnectionManager.ts","line_range":[89,91],"symbol_name":"ServerConnectionManager.getConnectionCount","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/ServerConnectionManager"},"relationships":{"depends_on":["sym-10c1513a04a2c8cb11ddbcf4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","events"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-b1b47df78ce6450e30e86f6b","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ServerConnectionManager.getStats method on exported class `ServerConnectionManager` in `src/libs/omniprotocol/server/ServerConnectionManager.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/ServerConnectionManager.ts","line_range":[96,114],"symbol_name":"ServerConnectionManager.getStats","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/ServerConnectionManager"},"relationships":{"depends_on":["sym-10c1513a04a2c8cb11ddbcf4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","events"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-10c1513a04a2c8cb11ddbcf4","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ServerConnectionManager (class) exported from `src/libs/omniprotocol/server/ServerConnectionManager.ts`.","ServerConnectionManager manages lifecycle of all inbound connections"],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/ServerConnectionManager.ts","line_range":[17,190],"symbol_name":"ServerConnectionManager","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/ServerConnectionManager"},"relationships":{"depends_on":["mod-ca241437dd7ea992b976eec8"],"depended_by":["sym-15a0cf677c65f5feb1acda3d","sym-52b7361894d97b4a7afdc494","sym-c63340bdbd01e0a374f72ca1","sym-e7404e24dcc9f40c5540555a","sym-b1b47df78ce6450e30e86f6b"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","events"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 14-16","related_adr":null,"last_modified":"2026-02-18T13:23:55.608Z","authors":[]}} +{"uuid":"sym-0fe09e1aac44a856be580a75","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `TLSServerConfig` in `src/libs/omniprotocol/server/TLSServer.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/TLSServer.ts","line_range":[11,20],"symbol_name":"TLSServerConfig::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/TLSServer"},"relationships":{"depends_on":["sym-3933e7b0dfc4cd713ec68e39"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["tls","fs","events"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-3933e7b0dfc4cd713ec68e39","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSServerConfig (interface) exported from `src/libs/omniprotocol/server/TLSServer.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/TLSServer.ts","line_range":[11,20],"symbol_name":"TLSServerConfig","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/TLSServer"},"relationships":{"depends_on":["mod-bee55878a628d2e61003c5cc"],"depended_by":["sym-0fe09e1aac44a856be580a75"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["tls","fs","events"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-d94986c2fa52214663d393ae","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `TLSServer` in `src/libs/omniprotocol/server/TLSServer.ts`.","TLS-enabled OmniProtocol server"],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/TLSServer.ts","line_range":[26,314],"symbol_name":"TLSServer::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/TLSServer"},"relationships":{"depends_on":["sym-48085842ddef714b8a2ad15f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["tls","fs","events"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 22-25","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-a14c227a9792d32d04b2396f","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSServer.start method on exported class `TLSServer` in `src/libs/omniprotocol/server/TLSServer.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/omniprotocol/server/TLSServer.ts","line_range":[67,139],"symbol_name":"TLSServer.start","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/TLSServer"},"relationships":{"depends_on":["sym-48085842ddef714b8a2ad15f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["tls","fs","events"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-866db34b995ad59a88ac4252","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSServer.stop method on exported class `TLSServer` in `src/libs/omniprotocol/server/TLSServer.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/omniprotocol/server/TLSServer.ts","line_range":[248,273],"symbol_name":"TLSServer.stop","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/TLSServer"},"relationships":{"depends_on":["sym-48085842ddef714b8a2ad15f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["tls","fs","events"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-f339a578b038105b43659b18","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSServer.addTrustedFingerprint method on exported class `TLSServer` in `src/libs/omniprotocol/server/TLSServer.ts`.","TypeScript signature: (peerIdentity: string, fingerprint: string) => void."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/TLSServer.ts","line_range":[278,283],"symbol_name":"TLSServer.addTrustedFingerprint","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/TLSServer"},"relationships":{"depends_on":["sym-48085842ddef714b8a2ad15f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["tls","fs","events"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-b51ea5558814c2899f1e2975","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSServer.removeTrustedFingerprint method on exported class `TLSServer` in `src/libs/omniprotocol/server/TLSServer.ts`.","TypeScript signature: (peerIdentity: string) => void."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/TLSServer.ts","line_range":[288,291],"symbol_name":"TLSServer.removeTrustedFingerprint","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/TLSServer"},"relationships":{"depends_on":["sym-48085842ddef714b8a2ad15f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["tls","fs","events"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-80b2e1bd784169672ba37388","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSServer.getStats method on exported class `TLSServer` in `src/libs/omniprotocol/server/TLSServer.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/TLSServer.ts","line_range":[296,306],"symbol_name":"TLSServer.getStats","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/TLSServer"},"relationships":{"depends_on":["sym-48085842ddef714b8a2ad15f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["tls","fs","events"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-38003f377d941f1aed705c15","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSServer.getRateLimiter method on exported class `TLSServer` in `src/libs/omniprotocol/server/TLSServer.ts`.","TypeScript signature: () => RateLimiter."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/TLSServer.ts","line_range":[311,313],"symbol_name":"TLSServer.getRateLimiter","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/TLSServer"},"relationships":{"depends_on":["sym-48085842ddef714b8a2ad15f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["tls","fs","events"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-48085842ddef714b8a2ad15f","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSServer (class) exported from `src/libs/omniprotocol/server/TLSServer.ts`.","TLS-enabled OmniProtocol server"],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/TLSServer.ts","line_range":[26,314],"symbol_name":"TLSServer","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/TLSServer"},"relationships":{"depends_on":["mod-bee55878a628d2e61003c5cc"],"depended_by":["sym-d94986c2fa52214663d393ae","sym-a14c227a9792d32d04b2396f","sym-866db34b995ad59a88ac4252","sym-f339a578b038105b43659b18","sym-b51ea5558814c2899f1e2975","sym-80b2e1bd784169672ba37388","sym-38003f377d941f1aed705c15"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["tls","fs","events"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 22-25","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-310c5f7a70cf1d3ad6f355af","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["* (re_export_star) exported from `src/libs/omniprotocol/server/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/index.ts","line_range":[1,1],"symbol_name":"*","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/index"},"relationships":{"depends_on":["mod-992e96869304ba6455a502bd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.957Z","authors":[]}} +{"uuid":"sym-6122e71601390d54325a01b8","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["* (re_export_star) exported from `src/libs/omniprotocol/server/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/index.ts","line_range":[2,2],"symbol_name":"*","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/index"},"relationships":{"depends_on":["mod-992e96869304ba6455a502bd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.957Z","authors":[]}} +{"uuid":"sym-87969fcca7bf7172f21ef7f3","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["* (re_export_star) exported from `src/libs/omniprotocol/server/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/index.ts","line_range":[3,3],"symbol_name":"*","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/index"},"relationships":{"depends_on":["mod-992e96869304ba6455a502bd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.957Z","authors":[]}} +{"uuid":"sym-cccbec68264c6804aba0e890","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["* (re_export_star) exported from `src/libs/omniprotocol/server/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/server/index.ts","line_range":[4,4],"symbol_name":"*","language":"typescript","module_resolution_path":"@/libs/omniprotocol/server/index"},"relationships":{"depends_on":["mod-992e96869304ba6455a502bd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.957Z","authors":[]}} +{"uuid":"sym-40e6b962c5f9e8eb4faf3e94","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["generateSelfSignedCert (function) exported from `src/libs/omniprotocol/tls/certificates.ts`.","TypeScript signature: (certPath: string, keyPath: string, options: CertificateGenerationOptions) => Promise<{ certPath: string; keyPath: string }>.","Generate a self-signed certificate for the node"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/omniprotocol/tls/certificates.ts","line_range":[14,98],"symbol_name":"generateSelfSignedCert","language":"typescript","module_resolution_path":"@/libs/omniprotocol/tls/certificates"},"relationships":{"depends_on":["mod-ee32d301b857ba4c7de679c2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-b3b9f472b2f3019657cef489"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["crypto","fs","path","util"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 10-13","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-38d0a492948f82e34e85ee87","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["loadCertificate (function) exported from `src/libs/omniprotocol/tls/certificates.ts`.","TypeScript signature: (certPath: string) => Promise.","Load certificate from file and extract information"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/omniprotocol/tls/certificates.ts","line_range":[103,130],"symbol_name":"loadCertificate","language":"typescript","module_resolution_path":"@/libs/omniprotocol/tls/certificates"},"relationships":{"depends_on":["mod-ee32d301b857ba4c7de679c2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-5bdade31fc0d63b3de669cf8","sym-eb812ea9d1ab7667cac73686","sym-bfbcfa89f57581fb2c56e102","sym-16c7a605ac6fdbdd9e7f493c"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["crypto","fs","path","util"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 100-102","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-5bdade31fc0d63b3de669cf8","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getCertificateFingerprint (function) exported from `src/libs/omniprotocol/tls/certificates.ts`.","TypeScript signature: (certPath: string) => Promise.","Get SHA256 fingerprint from certificate file"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/omniprotocol/tls/certificates.ts","line_range":[135,138],"symbol_name":"getCertificateFingerprint","language":"typescript","module_resolution_path":"@/libs/omniprotocol/tls/certificates"},"relationships":{"depends_on":["mod-ee32d301b857ba4c7de679c2"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-38d0a492948f82e34e85ee87"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["crypto","fs","path","util"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 132-134","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-eb812ea9d1ab7667cac73686","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["verifyCertificateValidity (function) exported from `src/libs/omniprotocol/tls/certificates.ts`.","TypeScript signature: (certPath: string) => Promise.","Verify certificate validity (not expired, valid dates)"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/omniprotocol/tls/certificates.ts","line_range":[143,163],"symbol_name":"verifyCertificateValidity","language":"typescript","module_resolution_path":"@/libs/omniprotocol/tls/certificates"},"relationships":{"depends_on":["mod-ee32d301b857ba4c7de679c2"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-38d0a492948f82e34e85ee87"],"called_by":["sym-b3b9f472b2f3019657cef489"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["crypto","fs","path","util"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 140-142","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-bfbcfa89f57581fb2c56e102","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getCertificateExpiryDays (function) exported from `src/libs/omniprotocol/tls/certificates.ts`.","TypeScript signature: (certPath: string) => Promise.","Check days until certificate expires"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/omniprotocol/tls/certificates.ts","line_range":[168,175],"symbol_name":"getCertificateExpiryDays","language":"typescript","module_resolution_path":"@/libs/omniprotocol/tls/certificates"},"relationships":{"depends_on":["mod-ee32d301b857ba4c7de679c2"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-38d0a492948f82e34e85ee87"],"called_by":["sym-16c7a605ac6fdbdd9e7f493c","sym-b3b9f472b2f3019657cef489"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["crypto","fs","path","util"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 165-167","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-bd397dfc2ea87521bf16c24b","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["certificateExists (function) exported from `src/libs/omniprotocol/tls/certificates.ts`.","TypeScript signature: (certPath: string, keyPath: string) => boolean.","Check if certificate exists"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/tls/certificates.ts","line_range":[180,182],"symbol_name":"certificateExists","language":"typescript","module_resolution_path":"@/libs/omniprotocol/tls/certificates"},"relationships":{"depends_on":["mod-ee32d301b857ba4c7de679c2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-b3b9f472b2f3019657cef489"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["crypto","fs","path","util"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 177-179","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-1c718042ed0590db80445128","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ensureCertDirectory (function) exported from `src/libs/omniprotocol/tls/certificates.ts`.","TypeScript signature: (certDir: string) => Promise.","Ensure certificate directory exists"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/omniprotocol/tls/certificates.ts","line_range":[187,189],"symbol_name":"ensureCertDirectory","language":"typescript","module_resolution_path":"@/libs/omniprotocol/tls/certificates"},"relationships":{"depends_on":["mod-ee32d301b857ba4c7de679c2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-b3b9f472b2f3019657cef489"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["crypto","fs","path","util"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 184-186","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-16c7a605ac6fdbdd9e7f493c","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getCertificateInfoString (function) exported from `src/libs/omniprotocol/tls/certificates.ts`.","TypeScript signature: (certPath: string) => Promise.","Get certificate info as string for logging"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/omniprotocol/tls/certificates.ts","line_range":[194,212],"symbol_name":"getCertificateInfoString","language":"typescript","module_resolution_path":"@/libs/omniprotocol/tls/certificates"},"relationships":{"depends_on":["mod-ee32d301b857ba4c7de679c2"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-38d0a492948f82e34e85ee87","sym-bfbcfa89f57581fb2c56e102"],"called_by":["sym-b3b9f472b2f3019657cef489"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["crypto","fs","path","util"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 191-193","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-3f0dd3972baf18443d586478","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["* (re_export_star) exported from `src/libs/omniprotocol/tls/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/tls/index.ts","line_range":[1,1],"symbol_name":"*","language":"typescript","module_resolution_path":"@/libs/omniprotocol/tls/index"},"relationships":{"depends_on":["mod-f34f89c5406499b05c630026"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.957Z","authors":[]}} +{"uuid":"sym-023f23876208fe3644656fea","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["* (re_export_star) exported from `src/libs/omniprotocol/tls/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/tls/index.ts","line_range":[2,2],"symbol_name":"*","language":"typescript","module_resolution_path":"@/libs/omniprotocol/tls/index"},"relationships":{"depends_on":["mod-f34f89c5406499b05c630026"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.957Z","authors":[]}} +{"uuid":"sym-f75161cce5821340e3206b23","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["* (re_export_star) exported from `src/libs/omniprotocol/tls/index.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/tls/index.ts","line_range":[3,3],"symbol_name":"*","language":"typescript","module_resolution_path":"@/libs/omniprotocol/tls/index"},"relationships":{"depends_on":["mod-f34f89c5406499b05c630026"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.957Z","authors":[]}} +{"uuid":"sym-ba52215a94401bdbb33683e6","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `TLSInitResult` in `src/libs/omniprotocol/tls/initialize.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/tls/initialize.ts","line_range":[12,16],"symbol_name":"TLSInitResult::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/tls/initialize"},"relationships":{"depends_on":["sym-f93acea713b02d00af75e846"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["path"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-f93acea713b02d00af75e846","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSInitResult (interface) exported from `src/libs/omniprotocol/tls/initialize.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/tls/initialize.ts","line_range":[12,16],"symbol_name":"TLSInitResult","language":"typescript","module_resolution_path":"@/libs/omniprotocol/tls/initialize"},"relationships":{"depends_on":["mod-f6f853a3f874d365c69ba912"],"depended_by":["sym-ba52215a94401bdbb33683e6"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["path"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-b3b9f472b2f3019657cef489","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["initializeTLSCertificates (function) exported from `src/libs/omniprotocol/tls/initialize.ts`.","TypeScript signature: (certDir: string) => Promise.","Initialize TLS certificates for the node"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/omniprotocol/tls/initialize.ts","line_range":[25,85],"symbol_name":"initializeTLSCertificates","language":"typescript","module_resolution_path":"@/libs/omniprotocol/tls/initialize"},"relationships":{"depends_on":["mod-f6f853a3f874d365c69ba912"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-1c718042ed0590db80445128","sym-bd397dfc2ea87521bf16c24b","sym-eb812ea9d1ab7667cac73686","sym-40e6b962c5f9e8eb4faf3e94","sym-bfbcfa89f57581fb2c56e102","sym-16c7a605ac6fdbdd9e7f493c"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["path"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 18-24","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-35e335b14ed79ab5eb0dcaa4","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getDefaultTLSPaths (function) exported from `src/libs/omniprotocol/tls/initialize.ts`.","TypeScript signature: () => { certPath: string; keyPath: string; certDir: string }.","Get default TLS paths"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/tls/initialize.ts","line_range":[90,97],"symbol_name":"getDefaultTLSPaths","language":"typescript","module_resolution_path":"@/libs/omniprotocol/tls/initialize"},"relationships":{"depends_on":["mod-f6f853a3f874d365c69ba912"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["path"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 87-89","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-2fe92e48fc1f13dd643e705a","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `TLSConfig` in `src/libs/omniprotocol/tls/types.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/tls/types.ts","line_range":[1,12],"symbol_name":"TLSConfig::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/tls/types"},"relationships":{"depends_on":["sym-cfc610bda4c5eda04a009f49"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-cfc610bda4c5eda04a009f49","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSConfig (interface) exported from `src/libs/omniprotocol/tls/types.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/tls/types.ts","line_range":[1,12],"symbol_name":"TLSConfig","language":"typescript","module_resolution_path":"@/libs/omniprotocol/tls/types"},"relationships":{"depends_on":["mod-eff94816a8124a44948e1724"],"depended_by":["sym-2fe92e48fc1f13dd643e705a"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-881a2a8d37c9e7b761bfa51e","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `CertificateInfo` in `src/libs/omniprotocol/tls/types.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/tls/types.ts","line_range":[14,28],"symbol_name":"CertificateInfo::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/tls/types"},"relationships":{"depends_on":["sym-026247379bacd97457f16ffc"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-026247379bacd97457f16ffc","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CertificateInfo (interface) exported from `src/libs/omniprotocol/tls/types.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/tls/types.ts","line_range":[14,28],"symbol_name":"CertificateInfo","language":"typescript","module_resolution_path":"@/libs/omniprotocol/tls/types"},"relationships":{"depends_on":["mod-eff94816a8124a44948e1724"],"depended_by":["sym-881a2a8d37c9e7b761bfa51e"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-aad1fbde112489a0e0a55886","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `CertificateGenerationOptions` in `src/libs/omniprotocol/tls/types.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/tls/types.ts","line_range":[30,36],"symbol_name":"CertificateGenerationOptions::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/tls/types"},"relationships":{"depends_on":["sym-984b0552359747b6c5c827e5"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-984b0552359747b6c5c827e5","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CertificateGenerationOptions (interface) exported from `src/libs/omniprotocol/tls/types.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/tls/types.ts","line_range":[30,36],"symbol_name":"CertificateGenerationOptions","language":"typescript","module_resolution_path":"@/libs/omniprotocol/tls/types"},"relationships":{"depends_on":["mod-eff94816a8124a44948e1724"],"depended_by":["sym-aad1fbde112489a0e0a55886"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-1c76a6289fd857f7afde3e67","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DEFAULT_TLS_CONFIG (variable) exported from `src/libs/omniprotocol/tls/types.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/tls/types.ts","line_range":[38,52],"symbol_name":"DEFAULT_TLS_CONFIG","language":"typescript","module_resolution_path":"@/libs/omniprotocol/tls/types"},"relationships":{"depends_on":["mod-eff94816a8124a44948e1724"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-1dc1e1b29ddff1c012139bcb","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `ConnectionFactory` in `src/libs/omniprotocol/transport/ConnectionFactory.ts`.","Factory for creating connections based on protocol"],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/ConnectionFactory.ts","line_range":[11,63],"symbol_name":"ConnectionFactory::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/ConnectionFactory"},"relationships":{"depends_on":["sym-f6079a5941a4aa6aabf4e4d1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 7-10","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-693efbe3e685c5a46c951e19","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ConnectionFactory.createConnection method on exported class `ConnectionFactory` in `src/libs/omniprotocol/transport/ConnectionFactory.ts`.","TypeScript signature: (peerIdentity: string, connectionString: string) => PeerConnection | TLSConnection."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/ConnectionFactory.ts","line_range":[24,48],"symbol_name":"ConnectionFactory.createConnection","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/ConnectionFactory"},"relationships":{"depends_on":["sym-f6079a5941a4aa6aabf4e4d1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-de270da8d0f039197a169102","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ConnectionFactory.setTLSConfig method on exported class `ConnectionFactory` in `src/libs/omniprotocol/transport/ConnectionFactory.ts`.","TypeScript signature: (config: TLSConfig) => void."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/ConnectionFactory.ts","line_range":[53,55],"symbol_name":"ConnectionFactory.setTLSConfig","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/ConnectionFactory"},"relationships":{"depends_on":["sym-f6079a5941a4aa6aabf4e4d1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-cd66f4576418400b50aaab41","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ConnectionFactory.getTLSConfig method on exported class `ConnectionFactory` in `src/libs/omniprotocol/transport/ConnectionFactory.ts`.","TypeScript signature: () => TLSConfig | null."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/ConnectionFactory.ts","line_range":[60,62],"symbol_name":"ConnectionFactory.getTLSConfig","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/ConnectionFactory"},"relationships":{"depends_on":["sym-f6079a5941a4aa6aabf4e4d1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-f6079a5941a4aa6aabf4e4d1","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ConnectionFactory (class) exported from `src/libs/omniprotocol/transport/ConnectionFactory.ts`.","Factory for creating connections based on protocol"],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/ConnectionFactory.ts","line_range":[11,63],"symbol_name":"ConnectionFactory","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/ConnectionFactory"},"relationships":{"depends_on":["mod-0dd8c1befae8423fcc7d4fcd"],"depended_by":["sym-1dc1e1b29ddff1c012139bcb","sym-693efbe3e685c5a46c951e19","sym-de270da8d0f039197a169102","sym-cd66f4576418400b50aaab41"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 7-10","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-79d733c4fe52875b36ca1dc2","level":"L3","extraction_confidence":0.87,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `ConnectionPool` in `src/libs/omniprotocol/transport/ConnectionPool.ts`.","ConnectionPool manages persistent TCP connections to multiple peer nodes"],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/ConnectionPool.ts","line_range":[30,421],"symbol_name":"ConnectionPool::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/ConnectionPool"},"relationships":{"depends_on":["sym-132f69711099ffece36b4018"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 13-29","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-f4ad00f9b85e424de28b078e","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ConnectionPool.acquire method on exported class `ConnectionPool` in `src/libs/omniprotocol/transport/ConnectionPool.ts`.","TypeScript signature: (peerIdentity: string, connectionString: string, options: ConnectionOptions) => Promise."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/omniprotocol/transport/ConnectionPool.ts","line_range":[56,111],"symbol_name":"ConnectionPool.acquire","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/ConnectionPool"},"relationships":{"depends_on":["sym-132f69711099ffece36b4018"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-07a7afa8b7a80b81d8daa204","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ConnectionPool.release method on exported class `ConnectionPool` in `src/libs/omniprotocol/transport/ConnectionPool.ts`.","TypeScript signature: (connection: PeerConnection) => void."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/ConnectionPool.ts","line_range":[118,122],"symbol_name":"ConnectionPool.release","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/ConnectionPool"},"relationships":{"depends_on":["sym-132f69711099ffece36b4018"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-67b329b6d5edf0c52f1f94ce","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ConnectionPool.send method on exported class `ConnectionPool` in `src/libs/omniprotocol/transport/ConnectionPool.ts`.","TypeScript signature: (peerIdentity: string, connectionString: string, opcode: number, payload: Buffer, options: ConnectionOptions) => Promise."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/omniprotocol/transport/ConnectionPool.ts","line_range":[134,156],"symbol_name":"ConnectionPool.send","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/ConnectionPool"},"relationships":{"depends_on":["sym-132f69711099ffece36b4018"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-a6b5d0bbd8d6fb578aaa2c51","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ConnectionPool.sendAuthenticated method on exported class `ConnectionPool` in `src/libs/omniprotocol/transport/ConnectionPool.ts`.","TypeScript signature: (peerIdentity: string, connectionString: string, opcode: number, payload: Buffer, privateKey: Buffer, publicKey: Buffer, options: ConnectionOptions) => Promise."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/omniprotocol/transport/ConnectionPool.ts","line_range":[170,200],"symbol_name":"ConnectionPool.sendAuthenticated","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/ConnectionPool"},"relationships":{"depends_on":["sym-132f69711099ffece36b4018"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-91a7207033d6adc49e3ac3cf","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ConnectionPool.getStats method on exported class `ConnectionPool` in `src/libs/omniprotocol/transport/ConnectionPool.ts`.","TypeScript signature: () => PoolStats."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/ConnectionPool.ts","line_range":[206,245],"symbol_name":"ConnectionPool.getStats","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/ConnectionPool"},"relationships":{"depends_on":["sym-132f69711099ffece36b4018"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-d7e19777ecfc8f5fc6abb39e","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ConnectionPool.getConnectionInfo method on exported class `ConnectionPool` in `src/libs/omniprotocol/transport/ConnectionPool.ts`.","TypeScript signature: (peerIdentity: string) => ConnectionInfo[]."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/ConnectionPool.ts","line_range":[252,255],"symbol_name":"ConnectionPool.getConnectionInfo","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/ConnectionPool"},"relationships":{"depends_on":["sym-132f69711099ffece36b4018"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-b3946213b56c00a758511c93","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ConnectionPool.getAllConnectionInfo method on exported class `ConnectionPool` in `src/libs/omniprotocol/transport/ConnectionPool.ts`.","TypeScript signature: () => Map."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/ConnectionPool.ts","line_range":[261,272],"symbol_name":"ConnectionPool.getAllConnectionInfo","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/ConnectionPool"},"relationships":{"depends_on":["sym-132f69711099ffece36b4018"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-c03790d11131253fa310918d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ConnectionPool.shutdown method on exported class `ConnectionPool` in `src/libs/omniprotocol/transport/ConnectionPool.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/omniprotocol/transport/ConnectionPool.ts","line_range":[278,298],"symbol_name":"ConnectionPool.shutdown","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/ConnectionPool"},"relationships":{"depends_on":["sym-132f69711099ffece36b4018"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-132f69711099ffece36b4018","level":"L2","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ConnectionPool (class) exported from `src/libs/omniprotocol/transport/ConnectionPool.ts`.","ConnectionPool manages persistent TCP connections to multiple peer nodes"],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/ConnectionPool.ts","line_range":[30,421],"symbol_name":"ConnectionPool","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/ConnectionPool"},"relationships":{"depends_on":["mod-a5b4a44206cc0f3e39469a88"],"depended_by":["sym-79d733c4fe52875b36ca1dc2","sym-f4ad00f9b85e424de28b078e","sym-07a7afa8b7a80b81d8daa204","sym-67b329b6d5edf0c52f1f94ce","sym-a6b5d0bbd8d6fb578aaa2c51","sym-91a7207033d6adc49e3ac3cf","sym-d7e19777ecfc8f5fc6abb39e","sym-b3946213b56c00a758511c93","sym-c03790d11131253fa310918d"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 13-29","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-e027e1d71fc94eda35062eb3","level":"L3","extraction_confidence":0.87,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `MessageFramer` in `src/libs/omniprotocol/transport/MessageFramer.ts`.","MessageFramer handles parsing of TCP byte streams into complete OmniProtocol messages"],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/MessageFramer.ts","line_range":[31,332],"symbol_name":"MessageFramer::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/MessageFramer"},"relationships":{"depends_on":["sym-3defead0134f1d92758a8884"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["buffer","crc"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 15-30","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-b918906007bcfe0fb5eb9bc7","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MessageFramer.addData method on exported class `MessageFramer` in `src/libs/omniprotocol/transport/MessageFramer.ts`.","TypeScript signature: (chunk: Buffer) => void."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/MessageFramer.ts","line_range":[48,50],"symbol_name":"MessageFramer.addData","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/MessageFramer"},"relationships":{"depends_on":["sym-3defead0134f1d92758a8884"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["buffer","crc"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-00c53ac8685951a1aae5b41e","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MessageFramer.extractMessage method on exported class `MessageFramer` in `src/libs/omniprotocol/transport/MessageFramer.ts`.","TypeScript signature: () => ParsedOmniMessage | null."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/MessageFramer.ts","line_range":[56,128],"symbol_name":"MessageFramer.extractMessage","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/MessageFramer"},"relationships":{"depends_on":["sym-3defead0134f1d92758a8884"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["buffer","crc"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-889e2f691903588bf21c0b00","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MessageFramer.extractLegacyMessage method on exported class `MessageFramer` in `src/libs/omniprotocol/transport/MessageFramer.ts`.","TypeScript signature: () => OmniMessage | null."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/MessageFramer.ts","line_range":[133,179],"symbol_name":"MessageFramer.extractLegacyMessage","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/MessageFramer"},"relationships":{"depends_on":["sym-3defead0134f1d92758a8884"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["buffer","crc"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-ad22d7f770482a70786aa980","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MessageFramer.getBufferSize method on exported class `MessageFramer` in `src/libs/omniprotocol/transport/MessageFramer.ts`.","TypeScript signature: () => number."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/MessageFramer.ts","line_range":[271,273],"symbol_name":"MessageFramer.getBufferSize","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/MessageFramer"},"relationships":{"depends_on":["sym-3defead0134f1d92758a8884"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["buffer","crc"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-e0d9fa8b7626b4186b317c58","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MessageFramer.clear method on exported class `MessageFramer` in `src/libs/omniprotocol/transport/MessageFramer.ts`.","TypeScript signature: () => void."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/MessageFramer.ts","line_range":[278,280],"symbol_name":"MessageFramer.clear","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/MessageFramer"},"relationships":{"depends_on":["sym-3defead0134f1d92758a8884"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["buffer","crc"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-6bc616937536685e5c6d82bd","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MessageFramer.encodeMessage method on exported class `MessageFramer` in `src/libs/omniprotocol/transport/MessageFramer.ts`.","TypeScript signature: (header: OmniMessageHeader, payload: Buffer, auth: AuthBlock | null, flags: number) => Buffer."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/MessageFramer.ts","line_range":[291,331],"symbol_name":"MessageFramer.encodeMessage","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/MessageFramer"},"relationships":{"depends_on":["sym-3defead0134f1d92758a8884"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["buffer","crc"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-3defead0134f1d92758a8884","level":"L2","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MessageFramer (class) exported from `src/libs/omniprotocol/transport/MessageFramer.ts`.","MessageFramer handles parsing of TCP byte streams into complete OmniProtocol messages"],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/MessageFramer.ts","line_range":[31,332],"symbol_name":"MessageFramer","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/MessageFramer"},"relationships":{"depends_on":["mod-28add79b36597a8f639320cc"],"depended_by":["sym-e027e1d71fc94eda35062eb3","sym-b918906007bcfe0fb5eb9bc7","sym-00c53ac8685951a1aae5b41e","sym-889e2f691903588bf21c0b00","sym-ad22d7f770482a70786aa980","sym-e0d9fa8b7626b4186b317c58","sym-6bc616937536685e5c6d82bd"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["buffer","crc"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 15-30","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-adb33d12f46d9a08f5ecf324","level":"L3","extraction_confidence":0.87,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `PeerConnection` in `src/libs/omniprotocol/transport/PeerConnection.ts`.","PeerConnection manages a single TCP connection to a peer node"],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/PeerConnection.ts","line_range":[41,491],"symbol_name":"PeerConnection::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/PeerConnection"},"relationships":{"depends_on":["sym-8f81b1eefb86ab1c33cc1d76"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","node-forge","@noble/hashes/sha3.js"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 26-40","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-6f64d68020f1fe3df5c8e9e6","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerConnection.connect method on exported class `PeerConnection` in `src/libs/omniprotocol/transport/PeerConnection.ts`.","TypeScript signature: (options: ConnectionOptions) => Promise."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/omniprotocol/transport/PeerConnection.ts","line_range":[71,128],"symbol_name":"PeerConnection.connect","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/PeerConnection"},"relationships":{"depends_on":["sym-8f81b1eefb86ab1c33cc1d76"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["net","node-forge","@noble/hashes/sha3.js"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-1a2a490aef95273821ccdc0d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerConnection.send method on exported class `PeerConnection` in `src/libs/omniprotocol/transport/PeerConnection.ts`.","TypeScript signature: (opcode: number, payload: Buffer, options: ConnectionOptions) => Promise."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/omniprotocol/transport/PeerConnection.ts","line_range":[137,183],"symbol_name":"PeerConnection.send","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/PeerConnection"},"relationships":{"depends_on":["sym-8f81b1eefb86ab1c33cc1d76"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["net","node-forge","@noble/hashes/sha3.js"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-f6c819fdb3819f2341dab918","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerConnection.sendAuthenticated method on exported class `PeerConnection` in `src/libs/omniprotocol/transport/PeerConnection.ts`.","TypeScript signature: (opcode: number, payload: Buffer, privateKey: Buffer, publicKey: Buffer, options: ConnectionOptions) => Promise."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/omniprotocol/transport/PeerConnection.ts","line_range":[194,279],"symbol_name":"PeerConnection.sendAuthenticated","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/PeerConnection"},"relationships":{"depends_on":["sym-8f81b1eefb86ab1c33cc1d76"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["net","node-forge","@noble/hashes/sha3.js"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-bb4d0afe9c08b0d45f72ea92","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerConnection.sendOneWay method on exported class `PeerConnection` in `src/libs/omniprotocol/transport/PeerConnection.ts`.","TypeScript signature: (opcode: number, payload: Buffer) => void."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/PeerConnection.ts","line_range":[286,307],"symbol_name":"PeerConnection.sendOneWay","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/PeerConnection"},"relationships":{"depends_on":["sym-8f81b1eefb86ab1c33cc1d76"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","node-forge","@noble/hashes/sha3.js"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-5a41fca09ae8208ecfd47a0c","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerConnection.close method on exported class `PeerConnection` in `src/libs/omniprotocol/transport/PeerConnection.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/omniprotocol/transport/PeerConnection.ts","line_range":[313,355],"symbol_name":"PeerConnection.close","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/PeerConnection"},"relationships":{"depends_on":["sym-8f81b1eefb86ab1c33cc1d76"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["net","node-forge","@noble/hashes/sha3.js"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-bada2309fd0b6b83697bff29","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerConnection.getState method on exported class `PeerConnection` in `src/libs/omniprotocol/transport/PeerConnection.ts`.","TypeScript signature: () => ConnectionState."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/PeerConnection.ts","line_range":[360,362],"symbol_name":"PeerConnection.getState","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/PeerConnection"},"relationships":{"depends_on":["sym-8f81b1eefb86ab1c33cc1d76"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","node-forge","@noble/hashes/sha3.js"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-1d2d03535b4f805902059dc8","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerConnection.getInfo method on exported class `PeerConnection` in `src/libs/omniprotocol/transport/PeerConnection.ts`.","TypeScript signature: () => ConnectionInfo."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/PeerConnection.ts","line_range":[367,376],"symbol_name":"PeerConnection.getInfo","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/PeerConnection"},"relationships":{"depends_on":["sym-8f81b1eefb86ab1c33cc1d76"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","node-forge","@noble/hashes/sha3.js"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-a9384b6851bcfa0236066e93","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerConnection.isReady method on exported class `PeerConnection` in `src/libs/omniprotocol/transport/PeerConnection.ts`.","TypeScript signature: () => boolean."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/PeerConnection.ts","line_range":[381,383],"symbol_name":"PeerConnection.isReady","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/PeerConnection"},"relationships":{"depends_on":["sym-8f81b1eefb86ab1c33cc1d76"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","node-forge","@noble/hashes/sha3.js"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-9ef2634fb1ee3a33ea7c36ec","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerConnection.setState method on exported class `PeerConnection` in `src/libs/omniprotocol/transport/PeerConnection.ts`.","TypeScript signature: (newState: ConnectionState) => void."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/PeerConnection.ts","line_range":[479,490],"symbol_name":"PeerConnection.setState","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/PeerConnection"},"relationships":{"depends_on":["sym-8f81b1eefb86ab1c33cc1d76"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","node-forge","@noble/hashes/sha3.js"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-8f81b1eefb86ab1c33cc1d76","level":"L2","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerConnection (class) exported from `src/libs/omniprotocol/transport/PeerConnection.ts`.","PeerConnection manages a single TCP connection to a peer node"],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/PeerConnection.ts","line_range":[41,491],"symbol_name":"PeerConnection","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/PeerConnection"},"relationships":{"depends_on":["mod-a877268ad21d1ba59035ea1f"],"depended_by":["sym-adb33d12f46d9a08f5ecf324","sym-6f64d68020f1fe3df5c8e9e6","sym-1a2a490aef95273821ccdc0d","sym-f6c819fdb3819f2341dab918","sym-bb4d0afe9c08b0d45f72ea92","sym-5a41fca09ae8208ecfd47a0c","sym-bada2309fd0b6b83697bff29","sym-1d2d03535b4f805902059dc8","sym-a9384b6851bcfa0236066e93","sym-9ef2634fb1ee3a33ea7c36ec"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["net","node-forge","@noble/hashes/sha3.js"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 26-40","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-30817f02ab11a1de7c63c3e4","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `TLSConnection` in `src/libs/omniprotocol/transport/TLSConnection.ts`.","TLS-enabled peer connection"],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/TLSConnection.ts","line_range":[13,218],"symbol_name":"TLSConnection::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/TLSConnection"},"relationships":{"depends_on":["sym-904f441fa1a49268b1cef08f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["tls","fs"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 9-12","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-f0e0331218c3df6f87ccf4fc","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSConnection.connect method on exported class `TLSConnection` in `src/libs/omniprotocol/transport/TLSConnection.ts`.","TypeScript signature: (options: ConnectionOptions) => Promise."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/omniprotocol/transport/TLSConnection.ts","line_range":[34,119],"symbol_name":"TLSConnection.connect","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/TLSConnection"},"relationships":{"depends_on":["sym-904f441fa1a49268b1cef08f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["tls","fs"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-1c217afbacd1399fff13d6db","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSConnection.addTrustedFingerprint method on exported class `TLSConnection` in `src/libs/omniprotocol/transport/TLSConnection.ts`.","TypeScript signature: (fingerprint: string) => void."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/TLSConnection.ts","line_range":[188,193],"symbol_name":"TLSConnection.addTrustedFingerprint","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/TLSConnection"},"relationships":{"depends_on":["sym-904f441fa1a49268b1cef08f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["tls","fs"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-904f441fa1a49268b1cef08f","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSConnection (class) exported from `src/libs/omniprotocol/transport/TLSConnection.ts`.","TLS-enabled peer connection"],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/TLSConnection.ts","line_range":[13,218],"symbol_name":"TLSConnection","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/TLSConnection"},"relationships":{"depends_on":["mod-a65de7b43b60edb96e04a5d1"],"depended_by":["sym-30817f02ab11a1de7c63c3e4","sym-f0e0331218c3df6f87ccf4fc","sym-1c217afbacd1399fff13d6db"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["tls","fs"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 9-12","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-8574fa16baefd1d36d740e08","level":"L3","extraction_confidence":0.87,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `ConnectionState` in `src/libs/omniprotocol/transport/types.ts`.","Connection state machine for TCP connections"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/types.ts","line_range":[11,19],"symbol_name":"ConnectionState::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/types"},"relationships":{"depends_on":["sym-fc35b6613e7a65cdd4ea5e06"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 3-10","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-fc35b6613e7a65cdd4ea5e06","level":"L2","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ConnectionState (type) exported from `src/libs/omniprotocol/transport/types.ts`.","Connection state machine for TCP connections"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/types.ts","line_range":[11,19],"symbol_name":"ConnectionState","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/types"},"relationships":{"depends_on":["mod-eac0ec2113f231fdec114b7c"],"depended_by":["sym-8574fa16baefd1d36d740e08"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 3-10","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-e03bc6663c48f335b7e718c0","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ConnectionOptions` in `src/libs/omniprotocol/transport/types.ts`.","Options for connection acquisition and operations"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/types.ts","line_range":[24,31],"symbol_name":"ConnectionOptions::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/types"},"relationships":{"depends_on":["sym-e057876fb864c3507b96e2ec"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 21-23","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-e057876fb864c3507b96e2ec","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ConnectionOptions (interface) exported from `src/libs/omniprotocol/transport/types.ts`.","Options for connection acquisition and operations"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/types.ts","line_range":[24,31],"symbol_name":"ConnectionOptions","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/types"},"relationships":{"depends_on":["mod-eac0ec2113f231fdec114b7c"],"depended_by":["sym-e03bc6663c48f335b7e718c0"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 21-23","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-664024d03f5a3eebad0f7ca6","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `PendingRequest` in `src/libs/omniprotocol/transport/types.ts`.","Pending request awaiting response"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/types.ts","line_range":[37,46],"symbol_name":"PendingRequest::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/types"},"relationships":{"depends_on":["sym-5bd380f96888898be81a62d2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 33-36","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-5bd380f96888898be81a62d2","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PendingRequest (interface) exported from `src/libs/omniprotocol/transport/types.ts`.","Pending request awaiting response"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/types.ts","line_range":[37,46],"symbol_name":"PendingRequest","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/types"},"relationships":{"depends_on":["mod-eac0ec2113f231fdec114b7c"],"depended_by":["sym-664024d03f5a3eebad0f7ca6"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 33-36","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-9a8d9ad815a0ff16982c54fe","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `PoolConfig` in `src/libs/omniprotocol/transport/types.ts`.","Configuration for connection pool"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/types.ts","line_range":[51,62],"symbol_name":"PoolConfig::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/types"},"relationships":{"depends_on":["sym-28e0e30ee3f838c528a8ca6f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 48-50","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-28e0e30ee3f838c528a8ca6f","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PoolConfig (interface) exported from `src/libs/omniprotocol/transport/types.ts`.","Configuration for connection pool"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/types.ts","line_range":[51,62],"symbol_name":"PoolConfig","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/types"},"relationships":{"depends_on":["mod-eac0ec2113f231fdec114b7c"],"depended_by":["sym-9a8d9ad815a0ff16982c54fe"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 48-50","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-c315cfc3ad282c2d02ded07c","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `PoolStats` in `src/libs/omniprotocol/transport/types.ts`.","Connection pool statistics"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/types.ts","line_range":[67,78],"symbol_name":"PoolStats::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/types"},"relationships":{"depends_on":["sym-8f350d3b1915ecc6427767b3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 64-66","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-8f350d3b1915ecc6427767b3","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PoolStats (interface) exported from `src/libs/omniprotocol/transport/types.ts`.","Connection pool statistics"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/types.ts","line_range":[67,78],"symbol_name":"PoolStats","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/types"},"relationships":{"depends_on":["mod-eac0ec2113f231fdec114b7c"],"depended_by":["sym-c315cfc3ad282c2d02ded07c"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 64-66","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-255d674916b5051a77923baf","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ConnectionInfo` in `src/libs/omniprotocol/transport/types.ts`.","Connection information for a peer"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/types.ts","line_range":[83,96],"symbol_name":"ConnectionInfo::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/types"},"relationships":{"depends_on":["sym-1e03020c93407a3c93000806"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 80-82","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-1e03020c93407a3c93000806","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ConnectionInfo (interface) exported from `src/libs/omniprotocol/transport/types.ts`.","Connection information for a peer"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/types.ts","line_range":[83,96],"symbol_name":"ConnectionInfo","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/types"},"relationships":{"depends_on":["mod-eac0ec2113f231fdec114b7c"],"depended_by":["sym-255d674916b5051a77923baf"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 80-82","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-85b6f3f95870701af130fde6","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ParsedConnectionString` in `src/libs/omniprotocol/transport/types.ts`.","Parsed connection string components"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/types.ts","line_range":[101,108],"symbol_name":"ParsedConnectionString::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/types"},"relationships":{"depends_on":["sym-d004ecd8bd5430d39a4084f0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 98-100","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-d004ecd8bd5430d39a4084f0","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ParsedConnectionString (interface) exported from `src/libs/omniprotocol/transport/types.ts`.","Parsed connection string components"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/types.ts","line_range":[101,108],"symbol_name":"ParsedConnectionString","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/types"},"relationships":{"depends_on":["mod-eac0ec2113f231fdec114b7c"],"depended_by":["sym-85b6f3f95870701af130fde6"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 98-100","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-0a454006c43bd2d6cb2b165f","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["PoolCapacityError (re_export) exported from `src/libs/omniprotocol/transport/types.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/types.ts","line_range":[112,112],"symbol_name":"PoolCapacityError","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/types"},"relationships":{"depends_on":["mod-eac0ec2113f231fdec114b7c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-3fb22f8b02267a42caee9850","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["ConnectionTimeoutError (re_export) exported from `src/libs/omniprotocol/transport/types.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/types.ts","line_range":[113,113],"symbol_name":"ConnectionTimeoutError","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/types"},"relationships":{"depends_on":["mod-eac0ec2113f231fdec114b7c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-4431cb1bbb71c0fa9d65d5c0","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["AuthenticationError (re_export) exported from `src/libs/omniprotocol/transport/types.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/types.ts","line_range":[114,114],"symbol_name":"AuthenticationError","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/types"},"relationships":{"depends_on":["mod-eac0ec2113f231fdec114b7c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-a49b7e959d6c7ec989554af4","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["parseConnectionString (function) exported from `src/libs/omniprotocol/transport/types.ts`.","TypeScript signature: (connectionString: string) => ParsedConnectionString.","Parse connection string into components"],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/transport/types.ts","line_range":[123,138],"symbol_name":"parseConnectionString","language":"typescript","module_resolution_path":"@/libs/omniprotocol/transport/types"},"relationships":{"depends_on":["mod-eac0ec2113f231fdec114b7c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 117-122","related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-5a1f2f5309251555b04b8813","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `MigrationMode` in `src/libs/omniprotocol/types/config.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/config.ts","line_range":[1,1],"symbol_name":"MigrationMode::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/config"},"relationships":{"depends_on":["sym-12728d553b87eda8baeb8a42"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-12728d553b87eda8baeb8a42","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MigrationMode (type) exported from `src/libs/omniprotocol/types/config.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/config.ts","line_range":[1,1],"symbol_name":"MigrationMode","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/config"},"relationships":{"depends_on":["mod-f486beaedaf6d01b3f5574b4"],"depended_by":["sym-5a1f2f5309251555b04b8813"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-753aa2bc31b78364585e7d9d","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ConnectionPoolConfig` in `src/libs/omniprotocol/types/config.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/config.ts","line_range":[3,13],"symbol_name":"ConnectionPoolConfig::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/config"},"relationships":{"depends_on":["sym-daf739626627c36496ea6014"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-daf739626627c36496ea6014","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ConnectionPoolConfig (interface) exported from `src/libs/omniprotocol/types/config.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/config.ts","line_range":[3,13],"symbol_name":"ConnectionPoolConfig","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/config"},"relationships":{"depends_on":["mod-f486beaedaf6d01b3f5574b4"],"depended_by":["sym-753aa2bc31b78364585e7d9d"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-d0a13459da194a8f53ee0247","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ProtocolRuntimeConfig` in `src/libs/omniprotocol/types/config.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/config.ts","line_range":[15,20],"symbol_name":"ProtocolRuntimeConfig::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/config"},"relationships":{"depends_on":["sym-78928c613b02b7f6c1a80fab"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-78928c613b02b7f6c1a80fab","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ProtocolRuntimeConfig (interface) exported from `src/libs/omniprotocol/types/config.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/config.ts","line_range":[15,20],"symbol_name":"ProtocolRuntimeConfig","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/config"},"relationships":{"depends_on":["mod-f486beaedaf6d01b3f5574b4"],"depended_by":["sym-d0a13459da194a8f53ee0247"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-489b5423810e31ea232d4353","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `MigrationConfig` in `src/libs/omniprotocol/types/config.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/config.ts","line_range":[22,27],"symbol_name":"MigrationConfig::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/config"},"relationships":{"depends_on":["sym-819e1e0416b0f28eaf5ed236"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-819e1e0416b0f28eaf5ed236","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MigrationConfig (interface) exported from `src/libs/omniprotocol/types/config.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/config.ts","line_range":[22,27],"symbol_name":"MigrationConfig","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/config"},"relationships":{"depends_on":["mod-f486beaedaf6d01b3f5574b4"],"depended_by":["sym-489b5423810e31ea232d4353"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-b6021c676c4a1f965feff831","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `OmniProtocolConfig` in `src/libs/omniprotocol/types/config.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/config.ts","line_range":[29,33],"symbol_name":"OmniProtocolConfig::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/config"},"relationships":{"depends_on":["sym-5bb0e442514b6deb156754f7"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-5bb0e442514b6deb156754f7","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["OmniProtocolConfig (interface) exported from `src/libs/omniprotocol/types/config.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/config.ts","line_range":[29,33],"symbol_name":"OmniProtocolConfig","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/config"},"relationships":{"depends_on":["mod-f486beaedaf6d01b3f5574b4"],"depended_by":["sym-b6021c676c4a1f965feff831"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-86050540b5cdafabf655a318","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DEFAULT_OMNIPROTOCOL_CONFIG (variable) exported from `src/libs/omniprotocol/types/config.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/config.ts","line_range":[35,59],"symbol_name":"DEFAULT_OMNIPROTOCOL_CONFIG","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/config"},"relationships":{"depends_on":["mod-f486beaedaf6d01b3f5574b4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-6a368152f3da8c7e05d9c3e2","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `OmniProtocolError` in `src/libs/omniprotocol/types/errors.ts`."],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/errors.ts","line_range":[3,18],"symbol_name":"OmniProtocolError::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/errors"},"relationships":{"depends_on":["sym-1a701004046591cc89d802c1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:OMNI_FATAL"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-1a701004046591cc89d802c1","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["OmniProtocolError (class) exported from `src/libs/omniprotocol/types/errors.ts`."],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/errors.ts","line_range":[3,18],"symbol_name":"OmniProtocolError","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/errors"},"relationships":{"depends_on":["mod-0ec41645e6ad231f2006c934"],"depended_by":["sym-6a368152f3da8c7e05d9c3e2"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:OMNI_FATAL"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-14fff9a7611385fafbfcd369","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `UnknownOpcodeError` in `src/libs/omniprotocol/types/errors.ts`."],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/errors.ts","line_range":[20,25],"symbol_name":"UnknownOpcodeError::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/errors"},"relationships":{"depends_on":["sym-18e29bf3ececed5a786a3220"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:OMNI_FATAL"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-18e29bf3ececed5a786a3220","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["UnknownOpcodeError (class) exported from `src/libs/omniprotocol/types/errors.ts`."],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/errors.ts","line_range":[20,25],"symbol_name":"UnknownOpcodeError","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/errors"},"relationships":{"depends_on":["mod-0ec41645e6ad231f2006c934"],"depended_by":["sym-14fff9a7611385fafbfcd369"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:OMNI_FATAL"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-08304213d4db7e29a2be6ae5","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `SigningError` in `src/libs/omniprotocol/types/errors.ts`."],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/errors.ts","line_range":[27,32],"symbol_name":"SigningError::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/errors"},"relationships":{"depends_on":["sym-bc80379ae4fb29cd835e4f82"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:OMNI_FATAL"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-bc80379ae4fb29cd835e4f82","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SigningError (class) exported from `src/libs/omniprotocol/types/errors.ts`."],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/errors.ts","line_range":[27,32],"symbol_name":"SigningError","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/errors"},"relationships":{"depends_on":["mod-0ec41645e6ad231f2006c934"],"depended_by":["sym-08304213d4db7e29a2be6ae5"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:OMNI_FATAL"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-2ac98efb9ef2f047c0723ad4","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `ConnectionError` in `src/libs/omniprotocol/types/errors.ts`."],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/errors.ts","line_range":[34,39],"symbol_name":"ConnectionError::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/errors"},"relationships":{"depends_on":["sym-ca69d3acc363aa763fbebab6"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:OMNI_FATAL"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-ca69d3acc363aa763fbebab6","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ConnectionError (class) exported from `src/libs/omniprotocol/types/errors.ts`."],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/errors.ts","line_range":[34,39],"symbol_name":"ConnectionError","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/errors"},"relationships":{"depends_on":["mod-0ec41645e6ad231f2006c934"],"depended_by":["sym-2ac98efb9ef2f047c0723ad4"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:OMNI_FATAL"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-70f59c14b502b91dab97cc4d","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `ConnectionTimeoutError` in `src/libs/omniprotocol/types/errors.ts`."],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/errors.ts","line_range":[41,46],"symbol_name":"ConnectionTimeoutError::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/errors"},"relationships":{"depends_on":["sym-2e45f8d9367c70fd9ac27d12"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:OMNI_FATAL"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-2e45f8d9367c70fd9ac27d12","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ConnectionTimeoutError (class) exported from `src/libs/omniprotocol/types/errors.ts`."],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/errors.ts","line_range":[41,46],"symbol_name":"ConnectionTimeoutError","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/errors"},"relationships":{"depends_on":["mod-0ec41645e6ad231f2006c934"],"depended_by":["sym-70f59c14b502b91dab97cc4d"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:OMNI_FATAL"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-a0ddba0f62825b1fb8ce23cc","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `AuthenticationError` in `src/libs/omniprotocol/types/errors.ts`."],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/errors.ts","line_range":[48,53],"symbol_name":"AuthenticationError::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/errors"},"relationships":{"depends_on":["sym-f234ca94e0f28862daa8332d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:OMNI_FATAL"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-f234ca94e0f28862daa8332d","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["AuthenticationError (class) exported from `src/libs/omniprotocol/types/errors.ts`."],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/errors.ts","line_range":[48,53],"symbol_name":"AuthenticationError","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/errors"},"relationships":{"depends_on":["mod-0ec41645e6ad231f2006c934"],"depended_by":["sym-a0ddba0f62825b1fb8ce23cc"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:OMNI_FATAL"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-98af13518137efa778ae79bc","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `PoolCapacityError` in `src/libs/omniprotocol/types/errors.ts`."],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/errors.ts","line_range":[55,60],"symbol_name":"PoolCapacityError::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/errors"},"relationships":{"depends_on":["sym-ce29808e8a6ade436f793870"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:OMNI_FATAL"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-ce29808e8a6ade436f793870","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PoolCapacityError (class) exported from `src/libs/omniprotocol/types/errors.ts`."],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/errors.ts","line_range":[55,60],"symbol_name":"PoolCapacityError","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/errors"},"relationships":{"depends_on":["mod-0ec41645e6ad231f2006c934"],"depended_by":["sym-98af13518137efa778ae79bc"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:OMNI_FATAL"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-bc53793db5ee706870868edf","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `InvalidAuthBlockFormatError` in `src/libs/omniprotocol/types/errors.ts`."],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/errors.ts","line_range":[62,67],"symbol_name":"InvalidAuthBlockFormatError::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/errors"},"relationships":{"depends_on":["sym-9e6b52349458fafbb3157661"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:OMNI_FATAL"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-9e6b52349458fafbb3157661","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["InvalidAuthBlockFormatError (class) exported from `src/libs/omniprotocol/types/errors.ts`."],"intent_vectors":["p2p-protocol","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/errors.ts","line_range":[62,67],"symbol_name":"InvalidAuthBlockFormatError","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/errors"},"relationships":{"depends_on":["mod-0ec41645e6ad231f2006c934"],"depended_by":["sym-bc53793db5ee706870868edf"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["env:OMNI_FATAL"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-eed0819744b119afe726ef91","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `OmniMessageHeader` in `src/libs/omniprotocol/types/message.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/message.ts","line_range":[4,9],"symbol_name":"OmniMessageHeader::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/message"},"relationships":{"depends_on":["sym-4ff325a0d88ae90ec4620e7f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["buffer"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-4ff325a0d88ae90ec4620e7f","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["OmniMessageHeader (interface) exported from `src/libs/omniprotocol/types/message.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/message.ts","line_range":[4,9],"symbol_name":"OmniMessageHeader","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/message"},"relationships":{"depends_on":["mod-fa9dc053ab761e9fa1b23eca"],"depended_by":["sym-eed0819744b119afe726ef91"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["buffer"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-43a7d916067ab16295a2da7f","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `OmniMessage` in `src/libs/omniprotocol/types/message.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/message.ts","line_range":[11,15],"symbol_name":"OmniMessage::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/message"},"relationships":{"depends_on":["sym-4c35acfa5aa3bc6964a871bf"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["buffer"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-4c35acfa5aa3bc6964a871bf","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["OmniMessage (interface) exported from `src/libs/omniprotocol/types/message.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/message.ts","line_range":[11,15],"symbol_name":"OmniMessage","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/message"},"relationships":{"depends_on":["mod-fa9dc053ab761e9fa1b23eca"],"depended_by":["sym-43a7d916067ab16295a2da7f"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["buffer"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-a4b0c9eb7b86bd7e222a7d46","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ParsedOmniMessage` in `src/libs/omniprotocol/types/message.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/message.ts","line_range":[17,21],"symbol_name":"ParsedOmniMessage::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/message"},"relationships":{"depends_on":["sym-f317b708fa9ca031a9e7d8b0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["buffer"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-f317b708fa9ca031a9e7d8b0","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ParsedOmniMessage (interface) exported from `src/libs/omniprotocol/types/message.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/message.ts","line_range":[17,21],"symbol_name":"ParsedOmniMessage","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/message"},"relationships":{"depends_on":["mod-fa9dc053ab761e9fa1b23eca"],"depended_by":["sym-a4b0c9eb7b86bd7e222a7d46"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["buffer"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-640c35128c28e3dc693f35d9","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `SendOptions` in `src/libs/omniprotocol/types/message.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/message.ts","line_range":[23,31],"symbol_name":"SendOptions::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/message"},"relationships":{"depends_on":["sym-c02dce70ca17720992e2965a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["buffer"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-c02dce70ca17720992e2965a","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SendOptions (interface) exported from `src/libs/omniprotocol/types/message.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/message.ts","line_range":[23,31],"symbol_name":"SendOptions","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/message"},"relationships":{"depends_on":["mod-fa9dc053ab761e9fa1b23eca"],"depended_by":["sym-640c35128c28e3dc693f35d9"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["buffer"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-7b190b069571083db01583e6","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ReceiveContext` in `src/libs/omniprotocol/types/message.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/message.ts","line_range":[33,40],"symbol_name":"ReceiveContext::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/message"},"relationships":{"depends_on":["sym-acecec26be342c6988a8ba1b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["buffer"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-acecec26be342c6988a8ba1b","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ReceiveContext (interface) exported from `src/libs/omniprotocol/types/message.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/message.ts","line_range":[33,40],"symbol_name":"ReceiveContext","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/message"},"relationships":{"depends_on":["mod-fa9dc053ab761e9fa1b23eca"],"depended_by":["sym-7b190b069571083db01583e6"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["buffer"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-e0482e7dfc65b897da6d1fb5","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `HandlerContext` in `src/libs/omniprotocol/types/message.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/message.ts","line_range":[42,51],"symbol_name":"HandlerContext::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/message"},"relationships":{"depends_on":["sym-06618dbe51dad33d81910717"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["buffer"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-06618dbe51dad33d81910717","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["HandlerContext (interface) exported from `src/libs/omniprotocol/types/message.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/message.ts","line_range":[42,51],"symbol_name":"HandlerContext","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/message"},"relationships":{"depends_on":["mod-fa9dc053ab761e9fa1b23eca"],"depended_by":["sym-e0482e7dfc65b897da6d1fb5"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["buffer"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-cae5a2c114b3f66d2987abbc","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `OmniHandler` in `src/libs/omniprotocol/types/message.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/message.ts","line_range":[53,55],"symbol_name":"OmniHandler::api","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/message"},"relationships":{"depends_on":["sym-f8769b7cfd3da0a0ab0300be"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["buffer"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-f8769b7cfd3da0a0ab0300be","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["OmniHandler (type) exported from `src/libs/omniprotocol/types/message.ts`."],"intent_vectors":["p2p-protocol"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/omniprotocol/types/message.ts","line_range":[53,55],"symbol_name":"OmniHandler","language":"typescript","module_resolution_path":"@/libs/omniprotocol/types/message"},"relationships":{"depends_on":["mod-fa9dc053ab761e9fa1b23eca"],"depended_by":["sym-cae5a2c114b3f66d2987abbc"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["buffer"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-661d03f4e5784c0a2d0b6544","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `SyncData` in `src/libs/peer/Peer.ts`."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/Peer.ts","line_range":[11,15],"symbol_name":"SyncData::api","language":"typescript","module_resolution_path":"@/libs/peer/Peer"},"relationships":{"depends_on":["sym-6a88381f69d2ff19513514f9"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","axios","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/utils"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-6a88381f69d2ff19513514f9","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SyncData (interface) exported from `src/libs/peer/Peer.ts`."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/Peer.ts","line_range":[11,15],"symbol_name":"SyncData","language":"typescript","module_resolution_path":"@/libs/peer/Peer"},"relationships":{"depends_on":["mod-21be8fb976449bbe3589ce47"],"depended_by":["sym-661d03f4e5784c0a2d0b6544"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","axios","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/utils"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-3ed365637156e5886b2430e1","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `CallOptions` in `src/libs/peer/Peer.ts`."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/Peer.ts","line_range":[17,26],"symbol_name":"CallOptions::api","language":"typescript","module_resolution_path":"@/libs/peer/Peer"},"relationships":{"depends_on":["sym-41423ec32029e11bd983cf86"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","axios","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/utils"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-41423ec32029e11bd983cf86","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CallOptions (interface) exported from `src/libs/peer/Peer.ts`."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/Peer.ts","line_range":[17,26],"symbol_name":"CallOptions","language":"typescript","module_resolution_path":"@/libs/peer/Peer"},"relationships":{"depends_on":["mod-21be8fb976449bbe3589ce47"],"depended_by":["sym-3ed365637156e5886b2430e1"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","axios","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/utils"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-32549e20799e67cabed77eb0","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `Peer` in `src/libs/peer/Peer.ts`."],"intent_vectors":["peer-management","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/Peer.ts","line_range":[28,455],"symbol_name":"Peer::api","language":"typescript","module_resolution_path":"@/libs/peer/Peer"},"relationships":{"depends_on":["sym-0497c0336e7724275dd24b2a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","axios","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/utils"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-3ec00abf9378255291f328ba","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Peer.isLocalNode method on exported class `Peer` in `src/libs/peer/Peer.ts`.","TypeScript signature: () => boolean."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/Peer.ts","line_range":[53,58],"symbol_name":"Peer.isLocalNode","language":"typescript","module_resolution_path":"@/libs/peer/Peer"},"relationships":{"depends_on":["sym-0497c0336e7724275dd24b2a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","axios","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/utils"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-1785290f202a54c64ef008ab","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Peer.fromIPeer method on exported class `Peer` in `src/libs/peer/Peer.ts`.","TypeScript signature: (peer: IPeer) => Peer."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/Peer.ts","line_range":[84,92],"symbol_name":"Peer.fromIPeer","language":"typescript","module_resolution_path":"@/libs/peer/Peer"},"relationships":{"depends_on":["sym-0497c0336e7724275dd24b2a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","axios","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/utils"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-acd7986d5b1c15e8a18170eb","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Peer.multiCall method on exported class `Peer` in `src/libs/peer/Peer.ts`.","TypeScript signature: (request: RPCRequest, isAuthenticated: unknown, peers: Peer[], timeout: unknown) => Promise."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/peer/Peer.ts","line_range":[95,117],"symbol_name":"Peer.multiCall","language":"typescript","module_resolution_path":"@/libs/peer/Peer"},"relationships":{"depends_on":["sym-0497c0336e7724275dd24b2a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","axios","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/utils"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-0b62749220ca3c47b62ccf00","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Peer.connect method on exported class `Peer` in `src/libs/peer/Peer.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/peer/Peer.ts","line_range":[125,149],"symbol_name":"Peer.connect","language":"typescript","module_resolution_path":"@/libs/peer/Peer"},"relationships":{"depends_on":["sym-0497c0336e7724275dd24b2a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","axios","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/utils"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-12fffd704728885f498c0037","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Peer.longCall method on exported class `Peer` in `src/libs/peer/Peer.ts`.","TypeScript signature: (request: RPCRequest, isAuthenticated: unknown, options: CallOptions) => Promise."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/peer/Peer.ts","line_range":[152,196],"symbol_name":"Peer.longCall","language":"typescript","module_resolution_path":"@/libs/peer/Peer"},"relationships":{"depends_on":["sym-0497c0336e7724275dd24b2a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","axios","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/utils"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-bd8984a504446064677a7397","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Peer.authenticatedCallMaker method on exported class `Peer` in `src/libs/peer/Peer.ts`.","TypeScript signature: (request: RPCRequest) => Promise."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/peer/Peer.ts","line_range":[203,222],"symbol_name":"Peer.authenticatedCallMaker","language":"typescript","module_resolution_path":"@/libs/peer/Peer"},"relationships":{"depends_on":["sym-0497c0336e7724275dd24b2a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","axios","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/utils"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-bb415a6db3f3be45da09dc82","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Peer.authenticatedCall method on exported class `Peer` in `src/libs/peer/Peer.ts`.","TypeScript signature: (request: RPCRequest) => Promise."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/peer/Peer.ts","line_range":[225,231],"symbol_name":"Peer.authenticatedCall","language":"typescript","module_resolution_path":"@/libs/peer/Peer"},"relationships":{"depends_on":["sym-0497c0336e7724275dd24b2a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","axios","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/utils"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-0879b9af4d0e77714361c60e","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Peer.call method on exported class `Peer` in `src/libs/peer/Peer.ts`.","TypeScript signature: (request: RPCRequest, isAuthenticated: unknown, options: CallOptions) => Promise."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/peer/Peer.ts","line_range":[234,267],"symbol_name":"Peer.call","language":"typescript","module_resolution_path":"@/libs/peer/Peer"},"relationships":{"depends_on":["sym-0497c0336e7724275dd24b2a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","axios","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/utils"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-94480ae117d6af9376d303d6","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Peer.httpCall method on exported class `Peer` in `src/libs/peer/Peer.ts`.","TypeScript signature: (request: RPCRequest, isAuthenticated: unknown) => Promise."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/peer/Peer.ts","line_range":[270,435],"symbol_name":"Peer.httpCall","language":"typescript","module_resolution_path":"@/libs/peer/Peer"},"relationships":{"depends_on":["sym-0497c0336e7724275dd24b2a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","axios","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/utils"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-86d360eaa4e47e6515361b3e","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Peer.fetch method on exported class `Peer` in `src/libs/peer/Peer.ts`.","TypeScript signature: (endpoint: string) => Promise."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/peer/Peer.ts","line_range":[438,450],"symbol_name":"Peer.fetch","language":"typescript","module_resolution_path":"@/libs/peer/Peer"},"relationships":{"depends_on":["sym-0497c0336e7724275dd24b2a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","axios","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/utils"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-9548b5379a6c8ec675785e23","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Peer.getInfo method on exported class `Peer` in `src/libs/peer/Peer.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/peer/Peer.ts","line_range":[452,454],"symbol_name":"Peer.getInfo","language":"typescript","module_resolution_path":"@/libs/peer/Peer"},"relationships":{"depends_on":["sym-0497c0336e7724275dd24b2a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","axios","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/utils"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-0497c0336e7724275dd24b2a","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Peer (class) exported from `src/libs/peer/Peer.ts`."],"intent_vectors":["peer-management","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/Peer.ts","line_range":[28,455],"symbol_name":"Peer","language":"typescript","module_resolution_path":"@/libs/peer/Peer"},"relationships":{"depends_on":["mod-21be8fb976449bbe3589ce47"],"depended_by":["sym-32549e20799e67cabed77eb0","sym-3ec00abf9378255291f328ba","sym-1785290f202a54c64ef008ab","sym-acd7986d5b1c15e8a18170eb","sym-0b62749220ca3c47b62ccf00","sym-12fffd704728885f498c0037","sym-bd8984a504446064677a7397","sym-bb415a6db3f3be45da09dc82","sym-0879b9af4d0e77714361c60e","sym-94480ae117d6af9376d303d6","sym-86d360eaa4e47e6515361b3e","sym-9548b5379a6c8ec675785e23"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","axios","@kynesyslabs/demosdk/encryption","@kynesyslabs/demosdk/utils"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-b4f76041f6f542375c7208ae","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `PeerManager` in `src/libs/peer/PeerManager.ts`."],"intent_vectors":["peer-management","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/PeerManager.ts","line_range":[20,521],"symbol_name":"PeerManager::api","language":"typescript","module_resolution_path":"@/libs/peer/PeerManager"},"relationships":{"depends_on":["sym-eeadc99e419ca0c544740317"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-f3979d567f5fd32def4d8855","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerManager.ourPeer method on exported class `PeerManager` in `src/libs/peer/PeerManager.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/PeerManager.ts","line_range":[30,32],"symbol_name":"PeerManager.ourPeer","language":"typescript","module_resolution_path":"@/libs/peer/PeerManager"},"relationships":{"depends_on":["sym-eeadc99e419ca0c544740317"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-ade643bdd7cda96b430e99d4","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerManager.ourSyncData method on exported class `PeerManager` in `src/libs/peer/PeerManager.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/PeerManager.ts","line_range":[34,36],"symbol_name":"PeerManager.ourSyncData","language":"typescript","module_resolution_path":"@/libs/peer/PeerManager"},"relationships":{"depends_on":["sym-eeadc99e419ca0c544740317"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-1a7ef26a3c84b1bb6f1319af","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerManager.ourSyncDataString method on exported class `PeerManager` in `src/libs/peer/PeerManager.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/PeerManager.ts","line_range":[38,41],"symbol_name":"PeerManager.ourSyncDataString","language":"typescript","module_resolution_path":"@/libs/peer/PeerManager"},"relationships":{"depends_on":["sym-eeadc99e419ca0c544740317"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-3c3d12eee32c244255ef9b32","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerManager.getInstance method on exported class `PeerManager` in `src/libs/peer/PeerManager.ts`.","TypeScript signature: () => PeerManager."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/PeerManager.ts","line_range":[43,48],"symbol_name":"PeerManager.getInstance","language":"typescript","module_resolution_path":"@/libs/peer/PeerManager"},"relationships":{"depends_on":["sym-eeadc99e419ca0c544740317"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-272f439f60fc2a0765247475","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerManager.loadPeerList method on exported class `PeerManager` in `src/libs/peer/PeerManager.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/PeerManager.ts","line_range":[51,108],"symbol_name":"PeerManager.loadPeerList","language":"typescript","module_resolution_path":"@/libs/peer/PeerManager"},"relationships":{"depends_on":["sym-eeadc99e419ca0c544740317"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-a9848a76b049f852ff3d7ce3","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerManager.fetchPeerInfo method on exported class `PeerManager` in `src/libs/peer/PeerManager.ts`.","TypeScript signature: (peer: Peer) => unknown."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/peer/PeerManager.ts","line_range":[111,113],"symbol_name":"PeerManager.fetchPeerInfo","language":"typescript","module_resolution_path":"@/libs/peer/PeerManager"},"relationships":{"depends_on":["sym-eeadc99e419ca0c544740317"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-1f1368eeff0182700d9dcd10","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerManager.createNewPeer method on exported class `PeerManager` in `src/libs/peer/PeerManager.ts`.","TypeScript signature: (identity: string) => Peer."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/PeerManager.ts","line_range":[115,120],"symbol_name":"PeerManager.createNewPeer","language":"typescript","module_resolution_path":"@/libs/peer/PeerManager"},"relationships":{"depends_on":["sym-eeadc99e419ca0c544740317"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-578657e21b5a3a4d127afbcb","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerManager.getPeers method on exported class `PeerManager` in `src/libs/peer/PeerManager.ts`.","TypeScript signature: () => Peer[]."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/PeerManager.ts","line_range":[122,124],"symbol_name":"PeerManager.getPeers","language":"typescript","module_resolution_path":"@/libs/peer/PeerManager"},"relationships":{"depends_on":["sym-eeadc99e419ca0c544740317"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-1e186c591f76fa97520879c1","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerManager.getPeer method on exported class `PeerManager` in `src/libs/peer/PeerManager.ts`.","TypeScript signature: (identity: string) => Peer."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/PeerManager.ts","line_range":[126,132],"symbol_name":"PeerManager.getPeer","language":"typescript","module_resolution_path":"@/libs/peer/PeerManager"},"relationships":{"depends_on":["sym-eeadc99e419ca0c544740317"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-7ff87e8fc66ad36a882a3021","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerManager.getAll method on exported class `PeerManager` in `src/libs/peer/PeerManager.ts`.","TypeScript signature: () => Peer[]."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/PeerManager.ts","line_range":[134,136],"symbol_name":"PeerManager.getAll","language":"typescript","module_resolution_path":"@/libs/peer/PeerManager"},"relationships":{"depends_on":["sym-eeadc99e419ca0c544740317"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-1639a75acd50f9d99a2e547c","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerManager.getOfflinePeers method on exported class `PeerManager` in `src/libs/peer/PeerManager.ts`.","TypeScript signature: () => Record."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/PeerManager.ts","line_range":[138,140],"symbol_name":"PeerManager.getOfflinePeers","language":"typescript","module_resolution_path":"@/libs/peer/PeerManager"},"relationships":{"depends_on":["sym-eeadc99e419ca0c544740317"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-b76ed554a4cca4a4bcc88e54","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerManager.logPeerList method on exported class `PeerManager` in `src/libs/peer/PeerManager.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/PeerManager.ts","line_range":[185,196],"symbol_name":"PeerManager.logPeerList","language":"typescript","module_resolution_path":"@/libs/peer/PeerManager"},"relationships":{"depends_on":["sym-eeadc99e419ca0c544740317"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-1a10700034b2fee76fa42e9e","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerManager.getOnlinePeers method on exported class `PeerManager` in `src/libs/peer/PeerManager.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/peer/PeerManager.ts","line_range":[198,218],"symbol_name":"PeerManager.getOnlinePeers","language":"typescript","module_resolution_path":"@/libs/peer/PeerManager"},"relationships":{"depends_on":["sym-eeadc99e419ca0c544740317"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-5885524573626c72a4d28772","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerManager.addPeer method on exported class `PeerManager` in `src/libs/peer/PeerManager.ts`.","TypeScript signature: (peer: Peer) => unknown."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/PeerManager.ts","line_range":[220,304],"symbol_name":"PeerManager.addPeer","language":"typescript","module_resolution_path":"@/libs/peer/PeerManager"},"relationships":{"depends_on":["sym-eeadc99e419ca0c544740317"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-3bdf2ba8edf49dedd17d9ee9","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerManager.updateOurPeerSyncData method on exported class `PeerManager` in `src/libs/peer/PeerManager.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/PeerManager.ts","line_range":[309,323],"symbol_name":"PeerManager.updateOurPeerSyncData","language":"typescript","module_resolution_path":"@/libs/peer/PeerManager"},"relationships":{"depends_on":["sym-eeadc99e419ca0c544740317"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-93ff6928b9f6bcb407e8acec","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerManager.updatePeerLastSeen method on exported class `PeerManager` in `src/libs/peer/PeerManager.ts`.","TypeScript signature: (pubkey: string) => unknown."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/PeerManager.ts","line_range":[325,351],"symbol_name":"PeerManager.updatePeerLastSeen","language":"typescript","module_resolution_path":"@/libs/peer/PeerManager"},"relationships":{"depends_on":["sym-eeadc99e419ca0c544740317"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-809f75f515541b77a78044ad","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerManager.addOfflinePeer method on exported class `PeerManager` in `src/libs/peer/PeerManager.ts`.","TypeScript signature: (peerInstance: Peer) => unknown."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/PeerManager.ts","line_range":[353,365],"symbol_name":"PeerManager.addOfflinePeer","language":"typescript","module_resolution_path":"@/libs/peer/PeerManager"},"relationships":{"depends_on":["sym-eeadc99e419ca0c544740317"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-517ad4280b63bf24958ad374","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerManager.removeOnlinePeer method on exported class `PeerManager` in `src/libs/peer/PeerManager.ts`.","TypeScript signature: (identity: string) => unknown."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/PeerManager.ts","line_range":[367,369],"symbol_name":"PeerManager.removeOnlinePeer","language":"typescript","module_resolution_path":"@/libs/peer/PeerManager"},"relationships":{"depends_on":["sym-eeadc99e419ca0c544740317"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-817fe42ff9a8d09ce64b56d0","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerManager.removeOfflinePeer method on exported class `PeerManager` in `src/libs/peer/PeerManager.ts`.","TypeScript signature: (identity: string) => unknown."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/PeerManager.ts","line_range":[371,373],"symbol_name":"PeerManager.removeOfflinePeer","language":"typescript","module_resolution_path":"@/libs/peer/PeerManager"},"relationships":{"depends_on":["sym-eeadc99e419ca0c544740317"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-9637ce234a9fed75eecebc9f","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerManager.setPeers method on exported class `PeerManager` in `src/libs/peer/PeerManager.ts`.","TypeScript signature: (peerlist: Peer[], discardCurrentPeerlist: unknown) => unknown."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/PeerManager.ts","line_range":[375,382],"symbol_name":"PeerManager.setPeers","language":"typescript","module_resolution_path":"@/libs/peer/PeerManager"},"relationships":{"depends_on":["sym-eeadc99e419ca0c544740317"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-84bcdc73a52cba5c012302b0","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerManager.sayHelloToPeer method on exported class `PeerManager` in `src/libs/peer/PeerManager.ts`.","TypeScript signature: (peer: Peer, recursive: unknown) => unknown."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/peer/PeerManager.ts","line_range":[385,448],"symbol_name":"PeerManager.sayHelloToPeer","language":"typescript","module_resolution_path":"@/libs/peer/PeerManager"},"relationships":{"depends_on":["sym-eeadc99e419ca0c544740317"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-bdddd2117e2db154d9a4c598","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerManager.helloPeerCallback method on exported class `PeerManager` in `src/libs/peer/PeerManager.ts`.","TypeScript signature: (response: RPCResponse, peer: Peer) => { url: string; publicKey: string }[]."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/PeerManager.ts","line_range":[451,506],"symbol_name":"PeerManager.helloPeerCallback","language":"typescript","module_resolution_path":"@/libs/peer/PeerManager"},"relationships":{"depends_on":["sym-eeadc99e419ca0c544740317"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-0fa2de08eb318625daca5c60","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerManager.markPeerOffline method on exported class `PeerManager` in `src/libs/peer/PeerManager.ts`.","TypeScript signature: (peer: Peer) => unknown."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/PeerManager.ts","line_range":[508,520],"symbol_name":"PeerManager.markPeerOffline","language":"typescript","module_resolution_path":"@/libs/peer/PeerManager"},"relationships":{"depends_on":["sym-eeadc99e419ca0c544740317"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-eeadc99e419ca0c544740317","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PeerManager (class) exported from `src/libs/peer/PeerManager.ts`."],"intent_vectors":["peer-management","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/PeerManager.ts","line_range":[20,521],"symbol_name":"PeerManager","language":"typescript","module_resolution_path":"@/libs/peer/PeerManager"},"relationships":{"depends_on":["mod-074e7c12d54384c86eabf721"],"depended_by":["sym-b4f76041f6f542375c7208ae","sym-f3979d567f5fd32def4d8855","sym-ade643bdd7cda96b430e99d4","sym-1a7ef26a3c84b1bb6f1319af","sym-3c3d12eee32c244255ef9b32","sym-272f439f60fc2a0765247475","sym-a9848a76b049f852ff3d7ce3","sym-1f1368eeff0182700d9dcd10","sym-578657e21b5a3a4d127afbcb","sym-1e186c591f76fa97520879c1","sym-7ff87e8fc66ad36a882a3021","sym-1639a75acd50f9d99a2e547c","sym-b76ed554a4cca4a4bcc88e54","sym-1a10700034b2fee76fa42e9e","sym-5885524573626c72a4d28772","sym-3bdf2ba8edf49dedd17d9ee9","sym-93ff6928b9f6bcb407e8acec","sym-809f75f515541b77a78044ad","sym-517ad4280b63bf24958ad374","sym-817fe42ff9a8d09ce64b56d0","sym-9637ce234a9fed75eecebc9f","sym-84bcdc73a52cba5c012302b0","sym-bdddd2117e2db154d9a4c598","sym-0fa2de08eb318625daca5c60"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.609Z","authors":[]}} +{"uuid":"sym-6e00d04229c1802756b1975f","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Peer (re_export) exported from `src/libs/peer/index.ts`."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/index.ts","line_range":[12,12],"symbol_name":"Peer","language":"typescript","module_resolution_path":"@/libs/peer/index"},"relationships":{"depends_on":["mod-f6d94e4d95aaab72efaa757c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-a6ab1495ce4987876fc9f25f","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["PeerManager (re_export) exported from `src/libs/peer/index.ts`."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/index.ts","line_range":[13,13],"symbol_name":"PeerManager","language":"typescript","module_resolution_path":"@/libs/peer/index"},"relationships":{"depends_on":["mod-f6d94e4d95aaab72efaa757c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-183e357d6e4b9fc61cb96c84","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["checkOfflinePeers (function) exported from `src/libs/peer/routines/checkOfflinePeers.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/peer/routines/checkOfflinePeers.ts","line_range":[6,35],"symbol_name":"checkOfflinePeers","language":"typescript","module_resolution_path":"@/libs/peer/routines/checkOfflinePeers"},"relationships":{"depends_on":["mod-c16d69bfcfaea5546b2859a7"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-1b1b238c239648c3a26135b1","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getPeerConnectionString (function) exported from `src/libs/peer/routines/getPeerConnectionString.ts`.","TypeScript signature: (peer: Peer, id: any) => Promise."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/peer/routines/getPeerConnectionString.ts","line_range":[21,42],"symbol_name":"getPeerConnectionString","language":"typescript","module_resolution_path":"@/libs/peer/routines/getPeerConnectionString"},"relationships":{"depends_on":["mod-570eac54a9d81c36302eb6d0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["socket.io"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.610Z","authors":[]}} +{"uuid":"sym-0391b851d3e5a4718b2228d0","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["verifyPeer (function) exported from `src/libs/peer/routines/getPeerIdentity.ts`.","TypeScript signature: (peer: Peer, expectedKey: string) => Promise."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/peer/routines/getPeerIdentity.ts","line_range":[118,124],"symbol_name":"verifyPeer","language":"typescript","module_resolution_path":"@/libs/peer/routines/getPeerIdentity"},"relationships":{"depends_on":["mod-a216d9e19ade66b2cdd92076"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption","node:crypto"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.610Z","authors":[]}} +{"uuid":"sym-326a78cdb13b0efab268273b","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getPeerIdentity (function) exported from `src/libs/peer/routines/getPeerIdentity.ts`.","TypeScript signature: (peer: Peer, expectedKey: string) => Promise."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/peer/routines/getPeerIdentity.ts","line_range":[178,263],"symbol_name":"getPeerIdentity","language":"typescript","module_resolution_path":"@/libs/peer/routines/getPeerIdentity"},"relationships":{"depends_on":["mod-a216d9e19ade66b2cdd92076"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/encryption","node:crypto"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.610Z","authors":[]}} +{"uuid":"sym-a206dfbda18fedfe73a5ad0e","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["isPeerInList (function) exported from `src/libs/peer/routines/isPeerInList.ts`.","TypeScript signature: (peer: Peer) => unknown."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/peer/routines/isPeerInList.ts","line_range":[16,25],"symbol_name":"isPeerInList","language":"typescript","module_resolution_path":"@/libs/peer/routines/isPeerInList"},"relationships":{"depends_on":["mod-33ee18e613fc6fedad6673e0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-10146aed3ff6460f03348bd6","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["peerBootstrap (function) exported from `src/libs/peer/routines/peerBootstrap.ts`.","TypeScript signature: (localList: Peer[]) => Promise."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/peer/routines/peerBootstrap.ts","line_range":[204,225],"symbol_name":"peerBootstrap","language":"typescript","module_resolution_path":"@/libs/peer/routines/peerBootstrap"},"relationships":{"depends_on":["mod-c85a25b09fa10c16a8188ca0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","axios","@kynesyslabs/demosdk/utils","@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.610Z","authors":[]}} +{"uuid":"sym-ee248ef99b44bf2044c37a34","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["peerGossip (function) exported from `src/libs/peer/routines/peerGossip.ts`.","TypeScript signature: () => unknown.","Initiates the peer gossip process."],"intent_vectors":["peer-management"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/peer/routines/peerGossip.ts","line_range":[28,40],"symbol_name":"peerGossip","language":"typescript","module_resolution_path":"@/libs/peer/routines/peerGossip"},"relationships":{"depends_on":["mod-dcce6518be2af59c2b776acc"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 24-27","related_adr":null,"last_modified":"2026-02-18T13:23:55.610Z","authors":[]}} +{"uuid":"sym-c2d8b5b28fe3cc41329f99cb","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["initTLSNotaryVerifier (re_export) exported from `src/libs/tlsnotary/index.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/tlsnotary/index.ts","line_range":[5,5],"symbol_name":"initTLSNotaryVerifier","language":"typescript","module_resolution_path":"@/libs/tlsnotary/index"},"relationships":{"depends_on":["mod-90e071af56fbf11e5911520b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.420Z","authors":[]}} +{"uuid":"sym-dc58d63e979e42e358b16ea6","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["isVerifierInitialized (re_export) exported from `src/libs/tlsnotary/index.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/tlsnotary/index.ts","line_range":[6,6],"symbol_name":"isVerifierInitialized","language":"typescript","module_resolution_path":"@/libs/tlsnotary/index"},"relationships":{"depends_on":["mod-90e071af56fbf11e5911520b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.420Z","authors":[]}} +{"uuid":"sym-75f6a2f7f2ad31c317cf79f8","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["verifyTLSNotaryPresentation (re_export) exported from `src/libs/tlsnotary/index.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/tlsnotary/index.ts","line_range":[7,7],"symbol_name":"verifyTLSNotaryPresentation","language":"typescript","module_resolution_path":"@/libs/tlsnotary/index"},"relationships":{"depends_on":["mod-90e071af56fbf11e5911520b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.420Z","authors":[]}} +{"uuid":"sym-1bf49566faed1da0dcba3009","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["parseHttpResponse (re_export) exported from `src/libs/tlsnotary/index.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/tlsnotary/index.ts","line_range":[8,8],"symbol_name":"parseHttpResponse","language":"typescript","module_resolution_path":"@/libs/tlsnotary/index"},"relationships":{"depends_on":["mod-90e071af56fbf11e5911520b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.420Z","authors":[]}} +{"uuid":"sym-84993bf3e876f664101fcc17","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["verifyTLSNProof (re_export) exported from `src/libs/tlsnotary/index.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/tlsnotary/index.ts","line_range":[9,9],"symbol_name":"verifyTLSNProof","language":"typescript","module_resolution_path":"@/libs/tlsnotary/index"},"relationships":{"depends_on":["mod-90e071af56fbf11e5911520b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.420Z","authors":[]}} +{"uuid":"sym-d562c23ff661fbe0ef42089b","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["extractUser (re_export) exported from `src/libs/tlsnotary/index.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/tlsnotary/index.ts","line_range":[10,10],"symbol_name":"extractUser","language":"typescript","module_resolution_path":"@/libs/tlsnotary/index"},"relationships":{"depends_on":["mod-90e071af56fbf11e5911520b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.420Z","authors":[]}} +{"uuid":"sym-d23312505c23fae4dc06be00","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["TLSNIdentityContext (re_export) exported from `src/libs/tlsnotary/index.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/tlsnotary/index.ts","line_range":[11,11],"symbol_name":"TLSNIdentityContext","language":"typescript","module_resolution_path":"@/libs/tlsnotary/index"},"relationships":{"depends_on":["mod-90e071af56fbf11e5911520b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.420Z","authors":[]}} +{"uuid":"sym-9901aa04325b7f6c0903f9f4","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["TLSNIdentityPayload (re_export) exported from `src/libs/tlsnotary/index.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/tlsnotary/index.ts","line_range":[12,12],"symbol_name":"TLSNIdentityPayload","language":"typescript","module_resolution_path":"@/libs/tlsnotary/index"},"relationships":{"depends_on":["mod-90e071af56fbf11e5911520b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.420Z","authors":[]}} +{"uuid":"sym-78fc7f8b4ac08f8070f840bb","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["TLSNProofRanges (re_export) exported from `src/libs/tlsnotary/index.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/tlsnotary/index.ts","line_range":[13,13],"symbol_name":"TLSNProofRanges","language":"typescript","module_resolution_path":"@/libs/tlsnotary/index"},"relationships":{"depends_on":["mod-90e071af56fbf11e5911520b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.420Z","authors":[]}} +{"uuid":"sym-17f82be72583b24d6d13609c","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["TranscriptRange (re_export) exported from `src/libs/tlsnotary/index.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/tlsnotary/index.ts","line_range":[14,14],"symbol_name":"TranscriptRange","language":"typescript","module_resolution_path":"@/libs/tlsnotary/index"},"relationships":{"depends_on":["mod-90e071af56fbf11e5911520b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.420Z","authors":[]}} +{"uuid":"sym-eca13e9d4bd164b366b683d1","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryPresentation (re_export) exported from `src/libs/tlsnotary/index.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/tlsnotary/index.ts","line_range":[15,15],"symbol_name":"TLSNotaryPresentation","language":"typescript","module_resolution_path":"@/libs/tlsnotary/index"},"relationships":{"depends_on":["mod-90e071af56fbf11e5911520b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.420Z","authors":[]}} +{"uuid":"sym-ef0f5bfd816bc229c72e0c35","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryVerificationResult (re_export) exported from `src/libs/tlsnotary/index.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/tlsnotary/index.ts","line_range":[16,16],"symbol_name":"TLSNotaryVerificationResult","language":"typescript","module_resolution_path":"@/libs/tlsnotary/index"},"relationships":{"depends_on":["mod-90e071af56fbf11e5911520b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.420Z","authors":[]}} +{"uuid":"sym-1ffe30e3f9e9ec69de0b043f","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["ParsedHttpResponse (re_export) exported from `src/libs/tlsnotary/index.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/tlsnotary/index.ts","line_range":[17,17],"symbol_name":"ParsedHttpResponse","language":"typescript","module_resolution_path":"@/libs/tlsnotary/index"},"relationships":{"depends_on":["mod-90e071af56fbf11e5911520b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.420Z","authors":[]}} +{"uuid":"sym-8a2eac9723e69b529c4e0514","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["ExtractedUser (re_export) exported from `src/libs/tlsnotary/index.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/tlsnotary/index.ts","line_range":[18,18],"symbol_name":"ExtractedUser","language":"typescript","module_resolution_path":"@/libs/tlsnotary/index"},"relationships":{"depends_on":["mod-90e071af56fbf11e5911520b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.420Z","authors":[]}} +{"uuid":"sym-ad5a2bb922e635e167b0a1f7","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `TLSNotaryPresentation` in `src/libs/tlsnotary/verifier.ts`.","TLSNotary presentation format (from tlsn-js attestation)"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/tlsnotary/verifier.ts","line_range":[19,29],"symbol_name":"TLSNotaryPresentation::api","language":"typescript","module_resolution_path":"@/libs/tlsnotary/verifier"},"relationships":{"depends_on":["sym-c6bb3135c8146d1451aae8cd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 16-18","related_adr":null,"last_modified":"2026-02-18T13:24:07.421Z","authors":[]}} +{"uuid":"sym-c6bb3135c8146d1451aae8cd","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryPresentation (interface) exported from `src/libs/tlsnotary/verifier.ts`.","TLSNotary presentation format (from tlsn-js attestation)"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/tlsnotary/verifier.ts","line_range":[19,29],"symbol_name":"TLSNotaryPresentation","language":"typescript","module_resolution_path":"@/libs/tlsnotary/verifier"},"relationships":{"depends_on":["mod-52720c35cbea3e8d81ae7a70"],"depended_by":["sym-ad5a2bb922e635e167b0a1f7"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 16-18","related_adr":null,"last_modified":"2026-02-18T13:24:07.421Z","authors":[]}} +{"uuid":"sym-6b9cfbe2d7820383823fdee2","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `TLSNotaryVerificationResult` in `src/libs/tlsnotary/verifier.ts`.","Result of TLSNotary proof verification"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/tlsnotary/verifier.ts","line_range":[34,42],"symbol_name":"TLSNotaryVerificationResult::api","language":"typescript","module_resolution_path":"@/libs/tlsnotary/verifier"},"relationships":{"depends_on":["sym-0ac6a67e5c7935ee3500dadd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 31-33","related_adr":null,"last_modified":"2026-02-18T13:24:07.421Z","authors":[]}} +{"uuid":"sym-0ac6a67e5c7935ee3500dadd","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSNotaryVerificationResult (interface) exported from `src/libs/tlsnotary/verifier.ts`.","Result of TLSNotary proof verification"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/tlsnotary/verifier.ts","line_range":[34,42],"symbol_name":"TLSNotaryVerificationResult","language":"typescript","module_resolution_path":"@/libs/tlsnotary/verifier"},"relationships":{"depends_on":["mod-52720c35cbea3e8d81ae7a70"],"depended_by":["sym-6b9cfbe2d7820383823fdee2"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 31-33","related_adr":null,"last_modified":"2026-02-18T13:24:07.421Z","authors":[]}} +{"uuid":"sym-f85858789af68b90715a0e59","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ParsedHttpResponse` in `src/libs/tlsnotary/verifier.ts`.","Parsed HTTP response structure"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/tlsnotary/verifier.ts","line_range":[47,51],"symbol_name":"ParsedHttpResponse::api","language":"typescript","module_resolution_path":"@/libs/tlsnotary/verifier"},"relationships":{"depends_on":["sym-096ad0f73e0e17beacb24c4a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 44-46","related_adr":null,"last_modified":"2026-02-18T13:24:07.421Z","authors":[]}} +{"uuid":"sym-096ad0f73e0e17beacb24c4a","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ParsedHttpResponse (interface) exported from `src/libs/tlsnotary/verifier.ts`.","Parsed HTTP response structure"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/tlsnotary/verifier.ts","line_range":[47,51],"symbol_name":"ParsedHttpResponse","language":"typescript","module_resolution_path":"@/libs/tlsnotary/verifier"},"relationships":{"depends_on":["mod-52720c35cbea3e8d81ae7a70"],"depended_by":["sym-f85858789af68b90715a0e59"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 44-46","related_adr":null,"last_modified":"2026-02-18T13:24:07.421Z","authors":[]}} +{"uuid":"sym-432492a10ef3e4316486ffdc","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `TLSNIdentityContext` in `src/libs/tlsnotary/verifier.ts`.","Supported TLSN identity contexts"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/tlsnotary/verifier.ts","line_range":[56,56],"symbol_name":"TLSNIdentityContext::api","language":"typescript","module_resolution_path":"@/libs/tlsnotary/verifier"},"relationships":{"depends_on":["sym-2fa24d97f88754f23868ed8a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 53-55","related_adr":null,"last_modified":"2026-02-18T13:24:07.421Z","authors":[]}} +{"uuid":"sym-2fa24d97f88754f23868ed8a","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSNIdentityContext (type) exported from `src/libs/tlsnotary/verifier.ts`.","Supported TLSN identity contexts"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/tlsnotary/verifier.ts","line_range":[56,56],"symbol_name":"TLSNIdentityContext","language":"typescript","module_resolution_path":"@/libs/tlsnotary/verifier"},"relationships":{"depends_on":["mod-52720c35cbea3e8d81ae7a70"],"depended_by":["sym-432492a10ef3e4316486ffdc"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 53-55","related_adr":null,"last_modified":"2026-02-18T13:24:07.421Z","authors":[]}} +{"uuid":"sym-dbd3b3d0c2d3155a70a21f71","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `ExtractedUser` in `src/libs/tlsnotary/verifier.ts`.","Extracted user data (generic for all platforms)"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/tlsnotary/verifier.ts","line_range":[61,64],"symbol_name":"ExtractedUser::api","language":"typescript","module_resolution_path":"@/libs/tlsnotary/verifier"},"relationships":{"depends_on":["sym-dda27ab76638052e234613e4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 58-60","related_adr":null,"last_modified":"2026-02-18T13:24:07.421Z","authors":[]}} +{"uuid":"sym-dda27ab76638052e234613e4","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ExtractedUser (interface) exported from `src/libs/tlsnotary/verifier.ts`.","Extracted user data (generic for all platforms)"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/tlsnotary/verifier.ts","line_range":[61,64],"symbol_name":"ExtractedUser","language":"typescript","module_resolution_path":"@/libs/tlsnotary/verifier"},"relationships":{"depends_on":["mod-52720c35cbea3e8d81ae7a70"],"depended_by":["sym-dbd3b3d0c2d3155a70a21f71"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 58-60","related_adr":null,"last_modified":"2026-02-18T13:24:07.421Z","authors":[]}} +{"uuid":"sym-51133611d7e6c5e4b505bc99","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `TLSNIdentityPayload` in `src/libs/tlsnotary/verifier.ts`.","TLSN identity payload structure for verification"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/tlsnotary/verifier.ts","line_range":[69,78],"symbol_name":"TLSNIdentityPayload::api","language":"typescript","module_resolution_path":"@/libs/tlsnotary/verifier"},"relationships":{"depends_on":["sym-7070f715178072511180d1ae"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 66-68","related_adr":null,"last_modified":"2026-02-18T13:24:07.421Z","authors":[]}} +{"uuid":"sym-7070f715178072511180d1ae","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSNIdentityPayload (interface) exported from `src/libs/tlsnotary/verifier.ts`.","TLSN identity payload structure for verification"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/tlsnotary/verifier.ts","line_range":[69,78],"symbol_name":"TLSNIdentityPayload","language":"typescript","module_resolution_path":"@/libs/tlsnotary/verifier"},"relationships":{"depends_on":["mod-52720c35cbea3e8d81ae7a70"],"depended_by":["sym-51133611d7e6c5e4b505bc99"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 66-68","related_adr":null,"last_modified":"2026-02-18T13:24:07.421Z","authors":[]}} +{"uuid":"sym-41e55f80f40f455b49fcf88c","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `TranscriptRange` in `src/libs/tlsnotary/verifier.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/tlsnotary/verifier.ts","line_range":[80,80],"symbol_name":"TranscriptRange::api","language":"typescript","module_resolution_path":"@/libs/tlsnotary/verifier"},"relationships":{"depends_on":["sym-28ad78be84afd8498d0ee4b4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.421Z","authors":[]}} +{"uuid":"sym-28ad78be84afd8498d0ee4b4","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TranscriptRange (type) exported from `src/libs/tlsnotary/verifier.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/tlsnotary/verifier.ts","line_range":[80,80],"symbol_name":"TranscriptRange","language":"typescript","module_resolution_path":"@/libs/tlsnotary/verifier"},"relationships":{"depends_on":["mod-52720c35cbea3e8d81ae7a70"],"depended_by":["sym-41e55f80f40f455b49fcf88c"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.421Z","authors":[]}} +{"uuid":"sym-fcef4fc2c1ba7fcc07b60612","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `TLSNProofRanges` in `src/libs/tlsnotary/verifier.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/tlsnotary/verifier.ts","line_range":[82,85],"symbol_name":"TLSNProofRanges::api","language":"typescript","module_resolution_path":"@/libs/tlsnotary/verifier"},"relationships":{"depends_on":["sym-470f39829bffe7893f2ea0e2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.421Z","authors":[]}} +{"uuid":"sym-470f39829bffe7893f2ea0e2","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TLSNProofRanges (type) exported from `src/libs/tlsnotary/verifier.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/tlsnotary/verifier.ts","line_range":[82,85],"symbol_name":"TLSNProofRanges","language":"typescript","module_resolution_path":"@/libs/tlsnotary/verifier"},"relationships":{"depends_on":["mod-52720c35cbea3e8d81ae7a70"],"depended_by":["sym-fcef4fc2c1ba7fcc07b60612"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.421Z","authors":[]}} +{"uuid":"sym-ed9fcd140ea0db08b16f717b","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["initTLSNotaryVerifier (function) exported from `src/libs/tlsnotary/verifier.ts`.","TypeScript signature: () => Promise.","Initialize TLSNotary verifier (no-op in current implementation)"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/tlsnotary/verifier.ts","line_range":[498,502],"symbol_name":"initTLSNotaryVerifier","language":"typescript","module_resolution_path":"@/libs/tlsnotary/verifier"},"relationships":{"depends_on":["mod-52720c35cbea3e8d81ae7a70"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 492-497","related_adr":null,"last_modified":"2026-02-18T13:24:07.421Z","authors":[]}} +{"uuid":"sym-dc57077c3f71cf5583df43ba","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["isVerifierInitialized (function) exported from `src/libs/tlsnotary/verifier.ts`.","TypeScript signature: () => boolean.","Check if the verifier is initialized"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/tlsnotary/verifier.ts","line_range":[509,511],"symbol_name":"isVerifierInitialized","language":"typescript","module_resolution_path":"@/libs/tlsnotary/verifier"},"relationships":{"depends_on":["mod-52720c35cbea3e8d81ae7a70"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 504-508","related_adr":null,"last_modified":"2026-02-18T13:24:07.421Z","authors":[]}} +{"uuid":"sym-d75c9f3079017aca76e583c6","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["verifyTLSNotaryPresentation (function) exported from `src/libs/tlsnotary/verifier.ts`.","TypeScript signature: (presentationJSON: TLSNotaryPresentation) => Promise.","Verify a TLSNotary presentation structure"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/tlsnotary/verifier.ts","line_range":[522,584],"symbol_name":"verifyTLSNotaryPresentation","language":"typescript","module_resolution_path":"@/libs/tlsnotary/verifier"},"relationships":{"depends_on":["mod-52720c35cbea3e8d81ae7a70"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-a9987febfc88a0ffd7f1c055"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 513-521","related_adr":null,"last_modified":"2026-02-18T13:24:07.421Z","authors":[]}} +{"uuid":"sym-ce938bb3c92c54f842d83329","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["parseHttpResponse (function) exported from `src/libs/tlsnotary/verifier.ts`.","TypeScript signature: (recv: Uint8Array | string) => ParsedHttpResponse | null.","Parse HTTP response from recv bytes"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/tlsnotary/verifier.ts","line_range":[594,636],"symbol_name":"parseHttpResponse","language":"typescript","module_resolution_path":"@/libs/tlsnotary/verifier"},"relationships":{"depends_on":["mod-52720c35cbea3e8d81ae7a70"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 586-593","related_adr":null,"last_modified":"2026-02-18T13:24:07.421Z","authors":[]}} +{"uuid":"sym-e2d1e70a3d514491ae4cb58d","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["extractUser (function) exported from `src/libs/tlsnotary/verifier.ts`.","TypeScript signature: (context: TLSNIdentityContext, responseBody: string) => ExtractedUser | null.","Extract user data from API response body based on context"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/tlsnotary/verifier.ts","line_range":[648,712],"symbol_name":"extractUser","language":"typescript","module_resolution_path":"@/libs/tlsnotary/verifier"},"relationships":{"depends_on":["mod-52720c35cbea3e8d81ae7a70"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":["sym-a9987febfc88a0ffd7f1c055"],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 638-647","related_adr":null,"last_modified":"2026-02-18T13:24:07.421Z","authors":[]}} +{"uuid":"sym-a9987febfc88a0ffd7f1c055","level":"L3","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["verifyTLSNProof (function) exported from `src/libs/tlsnotary/verifier.ts`.","TypeScript signature: (payload: TLSNIdentityPayload) => Promise<{\n success: boolean\n message: string\n extractedUsername?: string\n extractedUserId?: string\n}>.","Verify a TLSNotary proof for any supported context"],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/tlsnotary/verifier.ts","line_range":[724,818],"symbol_name":"verifyTLSNProof","language":"typescript","module_resolution_path":"@/libs/tlsnotary/verifier"},"relationships":{"depends_on":["mod-52720c35cbea3e8d81ae7a70"],"depended_by":[],"implements":[],"extends":[],"calls":["sym-d75c9f3079017aca76e583c6","sym-e2d1e70a3d514491ae4cb58d"],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 714-723","related_adr":null,"last_modified":"2026-02-18T13:24:07.421Z","authors":[]}} +{"uuid":"sym-27e8f46173445442055bad50","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getTimestampCorrection (function) exported from `src/libs/utils/calibrateTime.ts`.","TypeScript signature: () => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/utils/calibrateTime.ts","line_range":[12,16],"symbol_name":"getTimestampCorrection","language":"typescript","module_resolution_path":"@/libs/utils/calibrateTime"},"relationships":{"depends_on":["mod-f67afbbcc2c394e0b6549ff8"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["ntp-client"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.610Z","authors":[]}} +{"uuid":"sym-51fdc77527108ef2abcc0f25","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getNetworkTimestamp (function) exported from `src/libs/utils/calibrateTime.ts`.","TypeScript signature: () => number."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/utils/calibrateTime.ts","line_range":[18,24],"symbol_name":"getNetworkTimestamp","language":"typescript","module_resolution_path":"@/libs/utils/calibrateTime"},"relationships":{"depends_on":["mod-f67afbbcc2c394e0b6549ff8"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["ntp-client"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.610Z","authors":[]}} +{"uuid":"sym-e03296c834ef296a8caa23db","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `NodeStorage` in `src/libs/utils/demostdlib/NodeStorage.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/utils/demostdlib/NodeStorage.ts","line_range":[1,25],"symbol_name":"NodeStorage::api","language":"typescript","module_resolution_path":"@/libs/utils/demostdlib/NodeStorage"},"relationships":{"depends_on":["sym-4f4a52a70377dfe5c3548f1a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-9993f577e1770fb7b5e38ecf","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["NodeStorage.getInstance method on exported class `NodeStorage` in `src/libs/utils/demostdlib/NodeStorage.ts`.","TypeScript signature: () => NodeStorage."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/utils/demostdlib/NodeStorage.ts","line_range":[7,12],"symbol_name":"NodeStorage.getInstance","language":"typescript","module_resolution_path":"@/libs/utils/demostdlib/NodeStorage"},"relationships":{"depends_on":["sym-4f4a52a70377dfe5c3548f1a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-91687f17412aca4f5193a902","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["NodeStorage.getItem method on exported class `NodeStorage` in `src/libs/utils/demostdlib/NodeStorage.ts`.","TypeScript signature: (key: string) => string | null."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/utils/demostdlib/NodeStorage.ts","line_range":[14,20],"symbol_name":"NodeStorage.getItem","language":"typescript","module_resolution_path":"@/libs/utils/demostdlib/NodeStorage"},"relationships":{"depends_on":["sym-4f4a52a70377dfe5c3548f1a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-7d2f7a0b1cf0caf34582b977","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["NodeStorage.setItem method on exported class `NodeStorage` in `src/libs/utils/demostdlib/NodeStorage.ts`.","TypeScript signature: (key: string, value: string) => void."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/utils/demostdlib/NodeStorage.ts","line_range":[22,24],"symbol_name":"NodeStorage.setItem","language":"typescript","module_resolution_path":"@/libs/utils/demostdlib/NodeStorage"},"relationships":{"depends_on":["sym-4f4a52a70377dfe5c3548f1a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-4f4a52a70377dfe5c3548f1a","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["NodeStorage (class) exported from `src/libs/utils/demostdlib/NodeStorage.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/utils/demostdlib/NodeStorage.ts","line_range":[1,25],"symbol_name":"NodeStorage","language":"typescript","module_resolution_path":"@/libs/utils/demostdlib/NodeStorage"},"relationships":{"depends_on":["mod-1275104cbadf8ae764bfc2cd"],"depended_by":["sym-e03296c834ef296a8caa23db","sym-9993f577e1770fb7b5e38ecf","sym-91687f17412aca4f5193a902","sym-7d2f7a0b1cf0caf34582b977"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-900a6338c5478895e2c4742e","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `DerivableNative` in `src/libs/utils/demostdlib/deriveMempoolOperation.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/utils/demostdlib/deriveMempoolOperation.ts","line_range":[10,21],"symbol_name":"DerivableNative::api","language":"typescript","module_resolution_path":"@/libs/utils/demostdlib/deriveMempoolOperation"},"relationships":{"depends_on":["sym-77e5e7993b25576d2999ea8c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-77e5e7993b25576d2999ea8c","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DerivableNative (interface) exported from `src/libs/utils/demostdlib/deriveMempoolOperation.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/utils/demostdlib/deriveMempoolOperation.ts","line_range":[10,21],"symbol_name":"DerivableNative","language":"typescript","module_resolution_path":"@/libs/utils/demostdlib/deriveMempoolOperation"},"relationships":{"depends_on":["mod-4dda3c12aae4a0b02bbb9bc6"],"depended_by":["sym-900a6338c5478895e2c4742e"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-3d99231a3655eb0dd8af0e2b","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["deriveMempoolOperation (function) exported from `src/libs/utils/demostdlib/deriveMempoolOperation.ts`.","TypeScript signature: (data: DerivableNative, insert: unknown) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/utils/demostdlib/deriveMempoolOperation.ts","line_range":[25,60],"symbol_name":"deriveMempoolOperation","language":"typescript","module_resolution_path":"@/libs/utils/demostdlib/deriveMempoolOperation"},"relationships":{"depends_on":["mod-4dda3c12aae4a0b02bbb9bc6"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-a5b4619fea543f605234aa1b","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["deriveTransaction (function) exported from `src/libs/utils/demostdlib/deriveMempoolOperation.ts`.","TypeScript signature: (data: any) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/utils/demostdlib/deriveMempoolOperation.ts","line_range":[79,88],"symbol_name":"deriveTransaction","language":"typescript","module_resolution_path":"@/libs/utils/demostdlib/deriveMempoolOperation"},"relationships":{"depends_on":["mod-4dda3c12aae4a0b02bbb9bc6"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-b726a947efed2cf0a17e7409","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["deriveOperations (function) exported from `src/libs/utils/demostdlib/deriveMempoolOperation.ts`.","TypeScript signature: (transaction: Transaction) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/utils/demostdlib/deriveMempoolOperation.ts","line_range":[90,107],"symbol_name":"deriveOperations","language":"typescript","module_resolution_path":"@/libs/utils/demostdlib/deriveMempoolOperation"},"relationships":{"depends_on":["mod-4dda3c12aae4a0b02bbb9bc6"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-4069525e6763cbd7833a89b5","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["createOperation (function) exported from `src/libs/utils/demostdlib/deriveMempoolOperation.ts`.","TypeScript signature: (transaction: Transaction) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/utils/demostdlib/deriveMempoolOperation.ts","line_range":[113,143],"symbol_name":"createOperation","language":"typescript","module_resolution_path":"@/libs/utils/demostdlib/deriveMempoolOperation"},"relationships":{"depends_on":["mod-4dda3c12aae4a0b02bbb9bc6"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-de1d440563386a4ef7ff5f5b","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["createTransaction (function) exported from `src/libs/utils/demostdlib/deriveMempoolOperation.ts`.","TypeScript signature: (derivable: DerivableNative) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/utils/demostdlib/deriveMempoolOperation.ts","line_range":[149,200],"symbol_name":"createTransaction","language":"typescript","module_resolution_path":"@/libs/utils/demostdlib/deriveMempoolOperation"},"relationships":{"depends_on":["mod-4dda3c12aae4a0b02bbb9bc6"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-3643b3470e0f5a5599a17396","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `EncoDecode` in `src/libs/utils/demostdlib/encodecode.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/utils/demostdlib/encodecode.ts","line_range":[3,19],"symbol_name":"EncoDecode::api","language":"typescript","module_resolution_path":"@/libs/utils/demostdlib/encodecode"},"relationships":{"depends_on":["sym-9fa63f30b350e32bba75f730"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-490d48113345917bc5a63921","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["EncoDecode.serialize method on exported class `EncoDecode` in `src/libs/utils/demostdlib/encodecode.ts`.","TypeScript signature: (data: any, format: unknown) => unknown."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/utils/demostdlib/encodecode.ts","line_range":[6,11],"symbol_name":"EncoDecode.serialize","language":"typescript","module_resolution_path":"@/libs/utils/demostdlib/encodecode"},"relationships":{"depends_on":["sym-9fa63f30b350e32bba75f730"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-d3adbd4ce3535aa69f189242","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["EncoDecode.deserialize method on exported class `EncoDecode` in `src/libs/utils/demostdlib/encodecode.ts`.","TypeScript signature: (data: any, format: unknown) => unknown."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/utils/demostdlib/encodecode.ts","line_range":[13,18],"symbol_name":"EncoDecode.deserialize","language":"typescript","module_resolution_path":"@/libs/utils/demostdlib/encodecode"},"relationships":{"depends_on":["sym-9fa63f30b350e32bba75f730"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-9fa63f30b350e32bba75f730","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["EncoDecode (class) exported from `src/libs/utils/demostdlib/encodecode.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/utils/demostdlib/encodecode.ts","line_range":[3,19],"symbol_name":"EncoDecode","language":"typescript","module_resolution_path":"@/libs/utils/demostdlib/encodecode"},"relationships":{"depends_on":["mod-01f50a9581dc3e727fc130d5"],"depended_by":["sym-3643b3470e0f5a5599a17396","sym-490d48113345917bc5a63921","sym-d3adbd4ce3535aa69f189242"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-682e20b92410fcede30f0021","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `GroundControl` in `src/libs/utils/demostdlib/groundControl.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/utils/demostdlib/groundControl.ts","line_range":[18,207],"symbol_name":"GroundControl::api","language":"typescript","module_resolution_path":"@/libs/utils/demostdlib/groundControl"},"relationships":{"depends_on":["sym-704450fa33a12221e2776326"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","node:http","node:https"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.610Z","authors":[]}} +{"uuid":"sym-07e2d8617467f36ebce4c401","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GroundControl.init method on exported class `GroundControl` in `src/libs/utils/demostdlib/groundControl.ts`.","TypeScript signature: (port: unknown, host: unknown, protocol: \"http\" | \"https\", keys: any) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/utils/demostdlib/groundControl.ts","line_range":[30,112],"symbol_name":"GroundControl.init","language":"typescript","module_resolution_path":"@/libs/utils/demostdlib/groundControl"},"relationships":{"depends_on":["sym-704450fa33a12221e2776326"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","node:http","node:https"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.610Z","authors":[]}} +{"uuid":"sym-7b19cb835cde652ea2d4b818","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GroundControl.handlerMethod method on exported class `GroundControl` in `src/libs/utils/demostdlib/groundControl.ts`.","TypeScript signature: (req: http.IncomingMessage, res: http.ServerResponse) => unknown."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/utils/demostdlib/groundControl.ts","line_range":[115,132],"symbol_name":"GroundControl.handlerMethod","language":"typescript","module_resolution_path":"@/libs/utils/demostdlib/groundControl"},"relationships":{"depends_on":["sym-704450fa33a12221e2776326"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","node:http","node:https"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.610Z","authors":[]}} +{"uuid":"sym-e8f822cf4eeae4222e624550","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GroundControl.parse method on exported class `GroundControl` in `src/libs/utils/demostdlib/groundControl.ts`.","TypeScript signature: (args: string) => Map."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/utils/demostdlib/groundControl.ts","line_range":[135,154],"symbol_name":"GroundControl.parse","language":"typescript","module_resolution_path":"@/libs/utils/demostdlib/groundControl"},"relationships":{"depends_on":["sym-704450fa33a12221e2776326"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","node:http","node:https"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.610Z","authors":[]}} +{"uuid":"sym-36d1d3f62671a7f649aad1f4","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GroundControl.dispatch method on exported class `GroundControl` in `src/libs/utils/demostdlib/groundControl.ts`.","TypeScript signature: (args: Map) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/utils/demostdlib/groundControl.ts","line_range":[157,194],"symbol_name":"GroundControl.dispatch","language":"typescript","module_resolution_path":"@/libs/utils/demostdlib/groundControl"},"relationships":{"depends_on":["sym-704450fa33a12221e2776326"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","node:http","node:https"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.610Z","authors":[]}} +{"uuid":"sym-704450fa33a12221e2776326","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GroundControl (class) exported from `src/libs/utils/demostdlib/groundControl.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/utils/demostdlib/groundControl.ts","line_range":[18,207],"symbol_name":"GroundControl","language":"typescript","module_resolution_path":"@/libs/utils/demostdlib/groundControl"},"relationships":{"depends_on":["mod-7450e07dbc1823bd1d8e3fe2"],"depended_by":["sym-682e20b92410fcede30f0021","sym-07e2d8617467f36ebce4c401","sym-7b19cb835cde652ea2d4b818","sym-e8f822cf4eeae4222e624550","sym-36d1d3f62671a7f649aad1f4"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","node:http","node:https"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.610Z","authors":[]}} +{"uuid":"sym-51ed75590fc88559bcdd99a5","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["createConnectedSocket (re_export) exported from `src/libs/utils/demostdlib/index.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/utils/demostdlib/index.ts","line_range":[6,6],"symbol_name":"createConnectedSocket","language":"typescript","module_resolution_path":"@/libs/utils/demostdlib/index"},"relationships":{"depends_on":["mod-8d759e4c7b88f1b808059f1c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-7f9193fb325d05e4b86c1af4","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["payloadSize (re_export) exported from `src/libs/utils/demostdlib/index.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/utils/demostdlib/index.ts","line_range":[7,7],"symbol_name":"payloadSize","language":"typescript","module_resolution_path":"@/libs/utils/demostdlib/index"},"relationships":{"depends_on":["mod-8d759e4c7b88f1b808059f1c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-85a1a933e82bfe8a1a6f86cf","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["NodeStorage (re_export) exported from `src/libs/utils/demostdlib/index.ts`."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/utils/demostdlib/index.ts","line_range":[8,8],"symbol_name":"NodeStorage","language":"typescript","module_resolution_path":"@/libs/utils/demostdlib/index"},"relationships":{"depends_on":["mod-8d759e4c7b88f1b808059f1c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-009fe89cf915be1693de1c3c","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["payloadSize (function) exported from `src/libs/utils/demostdlib/payloadSize.ts`.","TypeScript signature: (payload: any, isObject: unknown, type: | \"object\"\n | \"execute\"\n | \"hello_peer\"\n | \"consensus\"\n | \"proofOfConsensus\"\n | \"mempool\"\n | \"auth\") => unknown."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/utils/demostdlib/payloadSize.ts","line_range":[6,24],"symbol_name":"payloadSize","language":"typescript","module_resolution_path":"@/libs/utils/demostdlib/payloadSize"},"relationships":{"depends_on":["mod-3a5d1ce49d5562fbff9b9306"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["object-sizeof"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-eb488aa202c169568fd9a0f5","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["createConnectedSocket (function) exported from `src/libs/utils/demostdlib/peerOperations.ts`.","TypeScript signature: (connectionString: string) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/libs/utils/demostdlib/peerOperations.ts","line_range":[4,23],"symbol_name":"createConnectedSocket","language":"typescript","module_resolution_path":"@/libs/utils/demostdlib/peerOperations"},"relationships":{"depends_on":["mod-9acd412d29faec50fbeccd6a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["socket.io-client"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.958Z","authors":[]}} +{"uuid":"sym-e1fcd597c2ed4ecc8eebea8b","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["parseWeb2ProxyRequest (function) exported from `src/libs/utils/web2RequestUtils.ts`.","TypeScript signature: (rawPayload: IWeb2Payload) => IWeb2Payload[\"message\"].","Parses a web2 proxy request."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/libs/utils/web2RequestUtils.ts","line_range":[10,34],"symbol_name":"parseWeb2ProxyRequest","language":"typescript","module_resolution_path":"@/libs/utils/web2RequestUtils"},"relationships":{"depends_on":["mod-80ff82c43058ee3abb67247d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/websdk"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 5-9","related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-f8f1b8ece68bb301d37853b4","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["dataSource (variable) exported from `src/model/datasource.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/datasource.ts","line_range":[37,71],"symbol_name":"dataSource","language":"typescript","module_resolution_path":"@/model/datasource"},"relationships":{"depends_on":["mod-16a76d1c87dfcbecec53d1e0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","env:PG_DATABASE","env:PG_HOST","env:PG_PASSWORD","env:PG_PORT","env:PG_USER"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-7e6731647346994ea09b3100","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["default (export_default) exported from `src/model/datasource.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/datasource.ts","line_range":[95,95],"symbol_name":"default","language":"typescript","module_resolution_path":"@/model/datasource"},"relationships":{"depends_on":["mod-16a76d1c87dfcbecec53d1e0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","env:PG_DATABASE","env:PG_HOST","env:PG_PASSWORD","env:PG_PORT","env:PG_USER"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-fa1a915f1e8443b44b343ab0","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `Blocks` in `src/model/entities/Blocks.ts`."],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/Blocks.ts","line_range":[4,31],"symbol_name":"Blocks::api","language":"typescript","module_resolution_path":"@/model/entities/Blocks"},"relationships":{"depends_on":["sym-273a3bb08cf959b425025d19"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["node-forge","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-273a3bb08cf959b425025d19","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Blocks (class) exported from `src/model/entities/Blocks.ts`."],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/Blocks.ts","line_range":[4,31],"symbol_name":"Blocks","language":"typescript","module_resolution_path":"@/model/entities/Blocks"},"relationships":{"depends_on":["mod-c20c965c5562cff684a7448f"],"depended_by":["sym-fa1a915f1e8443b44b343ab0"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["node-forge","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-e6c769e5bb3cfb82f5aa433b","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `Consensus` in `src/model/entities/Consensus.ts`."],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/Consensus.ts","line_range":[3,22],"symbol_name":"Consensus::api","language":"typescript","module_resolution_path":"@/model/entities/Consensus"},"relationships":{"depends_on":["sym-31925771acdffdf321dbfcd2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-31925771acdffdf321dbfcd2","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Consensus (class) exported from `src/model/entities/Consensus.ts`."],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/Consensus.ts","line_range":[3,22],"symbol_name":"Consensus","language":"typescript","module_resolution_path":"@/model/entities/Consensus"},"relationships":{"depends_on":["mod-81f4b7f4c2872e1255eeab2b"],"depended_by":["sym-e6c769e5bb3cfb82f5aa433b"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-9f5368fd7c3327b9a0371d11","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `GCRTracker` in `src/model/entities/GCR/GCRTracker.ts`."],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/GCR/GCRTracker.ts","line_range":[12,22],"symbol_name":"GCRTracker::api","language":"typescript","module_resolution_path":"@/model/entities/GCR/GCRTracker"},"relationships":{"depends_on":["sym-11fa9facc95211cb9965cbe9"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-11fa9facc95211cb9965cbe9","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRTracker (class) exported from `src/model/entities/GCR/GCRTracker.ts`."],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/GCR/GCRTracker.ts","line_range":[12,22],"symbol_name":"GCRTracker","language":"typescript","module_resolution_path":"@/model/entities/GCR/GCRTracker"},"relationships":{"depends_on":["mod-9e7f56ec932ce908db2b6d6e"],"depended_by":["sym-9f5368fd7c3327b9a0371d11"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-3315efc63ad9d0fb4f02984d","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `GCRStatus` in `src/model/entities/GCR/GlobalChangeRegistry.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/GCR/GlobalChangeRegistry.ts","line_range":[9,17],"symbol_name":"GCRStatus::api","language":"typescript","module_resolution_path":"@/model/entities/GCR/GlobalChangeRegistry"},"relationships":{"depends_on":["sym-3e265dc44fcae446b81692d2"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-3e265dc44fcae446b81692d2","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRStatus (interface) exported from `src/model/entities/GCR/GlobalChangeRegistry.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/GCR/GlobalChangeRegistry.ts","line_range":[9,17],"symbol_name":"GCRStatus","language":"typescript","module_resolution_path":"@/model/entities/GCR/GlobalChangeRegistry"},"relationships":{"depends_on":["mod-786d72f288c1067b50b58d19"],"depended_by":["sym-3315efc63ad9d0fb4f02984d"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-4cf291b0bfd4bf7301073577","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `GCRExtended` in `src/model/entities/GCR/GlobalChangeRegistry.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/GCR/GlobalChangeRegistry.ts","line_range":[19,25],"symbol_name":"GCRExtended::api","language":"typescript","module_resolution_path":"@/model/entities/GCR/GlobalChangeRegistry"},"relationships":{"depends_on":["sym-90952e192029ad3314e72b78"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-90952e192029ad3314e72b78","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRExtended (interface) exported from `src/model/entities/GCR/GlobalChangeRegistry.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/GCR/GlobalChangeRegistry.ts","line_range":[19,25],"symbol_name":"GCRExtended","language":"typescript","module_resolution_path":"@/model/entities/GCR/GlobalChangeRegistry"},"relationships":{"depends_on":["mod-786d72f288c1067b50b58d19"],"depended_by":["sym-4cf291b0bfd4bf7301073577"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-581811b0ab0948b5c77ee25b","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `GlobalChangeRegistry` in `src/model/entities/GCR/GlobalChangeRegistry.ts`."],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/GCR/GlobalChangeRegistry.ts","line_range":[29,42],"symbol_name":"GlobalChangeRegistry::api","language":"typescript","module_resolution_path":"@/model/entities/GCR/GlobalChangeRegistry"},"relationships":{"depends_on":["sym-bc26298182cffd2f040a7fae"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-bc26298182cffd2f040a7fae","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GlobalChangeRegistry (class) exported from `src/model/entities/GCR/GlobalChangeRegistry.ts`."],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/GCR/GlobalChangeRegistry.ts","line_range":[29,42],"symbol_name":"GlobalChangeRegistry","language":"typescript","module_resolution_path":"@/model/entities/GCR/GlobalChangeRegistry"},"relationships":{"depends_on":["mod-786d72f288c1067b50b58d19"],"depended_by":["sym-581811b0ab0948b5c77ee25b"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-22T15:27:32.380Z","authors":[]}} +{"uuid":"sym-218c97e2732ce0f4288eea2b","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `GCRHashes` in `src/model/entities/GCRv2/GCRHashes.ts`."],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/GCRv2/GCRHashes.ts","line_range":[6,16],"symbol_name":"GCRHashes::api","language":"typescript","module_resolution_path":"@/model/entities/GCRv2/GCRHashes"},"relationships":{"depends_on":["sym-d7707cb16f292d46163b119c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["@kynesyslabs/demosdk/types","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-d7707cb16f292d46163b119c","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRHashes (class) exported from `src/model/entities/GCRv2/GCRHashes.ts`."],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/GCRv2/GCRHashes.ts","line_range":[6,16],"symbol_name":"GCRHashes","language":"typescript","module_resolution_path":"@/model/entities/GCRv2/GCRHashes"},"relationships":{"depends_on":["mod-dc4c1cf1104faf408e942485"],"depended_by":["sym-218c97e2732ce0f4288eea2b"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["@kynesyslabs/demosdk/types","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-9e2540c9a28f6b2baa412870","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `GCRSubnetsTxs` in `src/model/entities/GCRv2/GCRSubnetsTxs.ts`."],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/GCRv2/GCRSubnetsTxs.ts","line_range":[9,28],"symbol_name":"GCRSubnetsTxs::api","language":"typescript","module_resolution_path":"@/model/entities/GCRv2/GCRSubnetsTxs"},"relationships":{"depends_on":["sym-f931d21daeae8267bd2a3672"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-f931d21daeae8267bd2a3672","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRSubnetsTxs (class) exported from `src/model/entities/GCRv2/GCRSubnetsTxs.ts`."],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/GCRv2/GCRSubnetsTxs.ts","line_range":[9,28],"symbol_name":"GCRSubnetsTxs","language":"typescript","module_resolution_path":"@/model/entities/GCRv2/GCRSubnetsTxs"},"relationships":{"depends_on":["mod-db1374491b6a82aa10a4e2f5"],"depended_by":["sym-9e2540c9a28f6b2baa412870"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-32c67ccf53645c1c5dd20c2f","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `GCRMain` in `src/model/entities/GCRv2/GCR_Main.ts`."],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/GCRv2/GCR_Main.ts","line_range":[12,81],"symbol_name":"GCRMain::api","language":"typescript","module_resolution_path":"@/model/entities/GCRv2/GCR_Main"},"relationships":{"depends_on":["sym-f9e58c36e26f3179ae66e51b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.421Z","authors":[]}} +{"uuid":"sym-f9e58c36e26f3179ae66e51b","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRMain (class) exported from `src/model/entities/GCRv2/GCR_Main.ts`."],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/GCRv2/GCR_Main.ts","line_range":[12,81],"symbol_name":"GCRMain","language":"typescript","module_resolution_path":"@/model/entities/GCRv2/GCR_Main"},"relationships":{"depends_on":["mod-e3c2dc56fd38d656d5235000"],"depended_by":["sym-32c67ccf53645c1c5dd20c2f"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:24:07.421Z","authors":[]}} +{"uuid":"sym-661263dc9f108fc8dfbe2edb","level":"L3","extraction_confidence":0.87,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `GCRTLSNotary` in `src/model/entities/GCRv2/GCR_TLSNotary.ts`.","GCR_TLSNotary stores TLSNotary attestation proofs."],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/GCRv2/GCR_TLSNotary.ts","line_range":[14,49],"symbol_name":"GCRTLSNotary::api","language":"typescript","module_resolution_path":"@/model/entities/GCRv2/GCR_TLSNotary"},"relationships":{"depends_on":["sym-9a4fcacf7bad77db5516aebe"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 10-13","related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-9a4fcacf7bad77db5516aebe","level":"L2","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["GCRTLSNotary (class) exported from `src/model/entities/GCRv2/GCR_TLSNotary.ts`.","GCR_TLSNotary stores TLSNotary attestation proofs."],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/GCRv2/GCR_TLSNotary.ts","line_range":[14,49],"symbol_name":"GCRTLSNotary","language":"typescript","module_resolution_path":"@/model/entities/GCRv2/GCR_TLSNotary"},"relationships":{"depends_on":["mod-f070f31fd907efb13c1863dc"],"depended_by":["sym-661263dc9f108fc8dfbe2edb"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 10-13","related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-da9c02d35d28f02067af7242","level":"L3","extraction_confidence":0.87,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `IdentityCommitment` in `src/model/entities/GCRv2/IdentityCommitment.ts`.","IdentityCommitment Entity"],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/GCRv2/IdentityCommitment.ts","line_range":[12,66],"symbol_name":"IdentityCommitment::api","language":"typescript","module_resolution_path":"@/model/entities/GCRv2/IdentityCommitment"},"relationships":{"depends_on":["sym-b669e2e1ce53f44203a8e3bc"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 3-11","related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-b669e2e1ce53f44203a8e3bc","level":"L2","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IdentityCommitment (class) exported from `src/model/entities/GCRv2/IdentityCommitment.ts`.","IdentityCommitment Entity"],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/GCRv2/IdentityCommitment.ts","line_range":[12,66],"symbol_name":"IdentityCommitment","language":"typescript","module_resolution_path":"@/model/entities/GCRv2/IdentityCommitment"},"relationships":{"depends_on":["mod-4700c8f714ccf0e905a08548"],"depended_by":["sym-da9c02d35d28f02067af7242"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 3-11","related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-c28c0fb32a4c66f8f59399f8","level":"L3","extraction_confidence":0.87,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `MerkleTreeState` in `src/model/entities/GCRv2/MerkleTreeState.ts`.","MerkleTreeState Entity"],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/GCRv2/MerkleTreeState.ts","line_range":[14,68],"symbol_name":"MerkleTreeState::api","language":"typescript","module_resolution_path":"@/model/entities/GCRv2/MerkleTreeState"},"relationships":{"depends_on":["sym-851653e97eff490ca57f6fae"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 3-13","related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-851653e97eff490ca57f6fae","level":"L2","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MerkleTreeState (class) exported from `src/model/entities/GCRv2/MerkleTreeState.ts`.","MerkleTreeState Entity"],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/GCRv2/MerkleTreeState.ts","line_range":[14,68],"symbol_name":"MerkleTreeState","language":"typescript","module_resolution_path":"@/model/entities/GCRv2/MerkleTreeState"},"relationships":{"depends_on":["mod-7b1b348ef9728f14361d546b"],"depended_by":["sym-c28c0fb32a4c66f8f59399f8"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 3-13","related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-a12c2af51d9be861b946bf8a","level":"L3","extraction_confidence":0.87,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `UsedNullifier` in `src/model/entities/GCRv2/UsedNullifier.ts`.","UsedNullifier Entity"],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/GCRv2/UsedNullifier.ts","line_range":[14,58],"symbol_name":"UsedNullifier::api","language":"typescript","module_resolution_path":"@/model/entities/GCRv2/UsedNullifier"},"relationships":{"depends_on":["sym-87354513813df45f7bae9436"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 3-13","related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-87354513813df45f7bae9436","level":"L2","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["UsedNullifier (class) exported from `src/model/entities/GCRv2/UsedNullifier.ts`.","UsedNullifier Entity"],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/GCRv2/UsedNullifier.ts","line_range":[14,58],"symbol_name":"UsedNullifier","language":"typescript","module_resolution_path":"@/model/entities/GCRv2/UsedNullifier"},"relationships":{"depends_on":["mod-08bf03fa93f7e9b593a27d85"],"depended_by":["sym-a12c2af51d9be861b946bf8a"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 3-13","related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-9d8a4d5edc2a9113cfe92b59","level":"L3","extraction_confidence":0.87,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `L2PSHash` in `src/model/entities/L2PSHashes.ts`.","L2PS Hashes Entity"],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/L2PSHashes.ts","line_range":[13,55],"symbol_name":"L2PSHash::api","language":"typescript","module_resolution_path":"@/model/entities/L2PSHashes"},"relationships":{"depends_on":["sym-f55ae29e0c44c841e86925cd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 3-11","related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-f55ae29e0c44c841e86925cd","level":"L2","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSHash (class) exported from `src/model/entities/L2PSHashes.ts`.","L2PS Hashes Entity"],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/L2PSHashes.ts","line_range":[13,55],"symbol_name":"L2PSHash","language":"typescript","module_resolution_path":"@/model/entities/L2PSHashes"},"relationships":{"depends_on":["mod-0ccdf7c27874394c1e667fec"],"depended_by":["sym-9d8a4d5edc2a9113cfe92b59"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 3-11","related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-bbaaf5c619b0e3e00385a5ec","level":"L3","extraction_confidence":0.87,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `L2PSMempoolTx` in `src/model/entities/L2PSMempool.ts`.","L2PS Mempool Entity"],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/L2PSMempool.ts","line_range":[13,96],"symbol_name":"L2PSMempoolTx::api","language":"typescript","module_resolution_path":"@/model/entities/L2PSMempool"},"relationships":{"depends_on":["sym-b687ce25ee01734bed3a9734"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 4-12","related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-b687ce25ee01734bed3a9734","level":"L2","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSMempoolTx (class) exported from `src/model/entities/L2PSMempool.ts`.","L2PS Mempool Entity"],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/L2PSMempool.ts","line_range":[13,96],"symbol_name":"L2PSMempoolTx","language":"typescript","module_resolution_path":"@/model/entities/L2PSMempool"},"relationships":{"depends_on":["mod-7421cc24ed6c5406e86d1752"],"depended_by":["sym-bbaaf5c619b0e3e00385a5ec"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 4-12","related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-abe2545e9c2ebd54c099a28d","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `L2PSProofStatus` in `src/model/entities/L2PSProofs.ts`.","Status of an L2PS proof"],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/L2PSProofs.ts","line_range":[27,31],"symbol_name":"L2PSProofStatus::api","language":"typescript","module_resolution_path":"@/model/entities/L2PSProofs"},"relationships":{"depends_on":["sym-b38c644fc6d294d21e0b92fe"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 24-26","related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-b38c644fc6d294d21e0b92fe","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSProofStatus (type) exported from `src/model/entities/L2PSProofs.ts`.","Status of an L2PS proof"],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/L2PSProofs.ts","line_range":[27,31],"symbol_name":"L2PSProofStatus","language":"typescript","module_resolution_path":"@/model/entities/L2PSProofs"},"relationships":{"depends_on":["mod-fdc4ea4eee14d55af206496c"],"depended_by":["sym-abe2545e9c2ebd54c099a28d"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 24-26","related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-394db654ca55a7ce952cadba","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `L2PSProof` in `src/model/entities/L2PSProofs.ts`.","L2PS Proof Entity"],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/L2PSProofs.ts","line_range":[38,169],"symbol_name":"L2PSProof::api","language":"typescript","module_resolution_path":"@/model/entities/L2PSProofs"},"relationships":{"depends_on":["sym-52fb32ee859d9bfa08437a4a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 33-37","related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-52fb32ee859d9bfa08437a4a","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSProof (class) exported from `src/model/entities/L2PSProofs.ts`.","L2PS Proof Entity"],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/L2PSProofs.ts","line_range":[38,169],"symbol_name":"L2PSProof","language":"typescript","module_resolution_path":"@/model/entities/L2PSProofs"},"relationships":{"depends_on":["mod-fdc4ea4eee14d55af206496c"],"depended_by":["sym-394db654ca55a7ce952cadba"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 33-37","related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-d293748a5d5f76087f5cfc4d","level":"L3","extraction_confidence":0.87,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `L2PSTransaction` in `src/model/entities/L2PSTransactions.ts`.","L2PS Transaction Entity"],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/L2PSTransactions.ts","line_range":[27,143],"symbol_name":"L2PSTransaction::api","language":"typescript","module_resolution_path":"@/model/entities/L2PSTransactions"},"relationships":{"depends_on":["sym-37183cf62db7f8f1984bc448"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 19-26","related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-37183cf62db7f8f1984bc448","level":"L2","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["L2PSTransaction (class) exported from `src/model/entities/L2PSTransactions.ts`.","L2PS Transaction Entity"],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/L2PSTransactions.ts","line_range":[27,143],"symbol_name":"L2PSTransaction","language":"typescript","module_resolution_path":"@/model/entities/L2PSTransactions"},"relationships":{"depends_on":["mod-193629267f30c2895ef15b17"],"depended_by":["sym-d293748a5d5f76087f5cfc4d"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 19-26","related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-e27c9724ee7cdd1968538619","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `MempoolTx` in `src/model/entities/Mempool.ts`."],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/Mempool.ts","line_range":[11,45],"symbol_name":"MempoolTx::api","language":"typescript","module_resolution_path":"@/model/entities/Mempool"},"relationships":{"depends_on":["sym-817dd1dc2a1ba735addc3c06"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["@kynesyslabs/demosdk/types","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-817dd1dc2a1ba735addc3c06","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["MempoolTx (class) exported from `src/model/entities/Mempool.ts`."],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/Mempool.ts","line_range":[11,45],"symbol_name":"MempoolTx","language":"typescript","module_resolution_path":"@/model/entities/Mempool"},"relationships":{"depends_on":["mod-fbadd87a5bc2c6b89edc84bf"],"depended_by":["sym-e27c9724ee7cdd1968538619"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["@kynesyslabs/demosdk/types","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-1685a05c77c5b9538f2d6f6e","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `OfflineMessage` in `src/model/entities/OfflineMessages.ts`."],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/OfflineMessages.ts","line_range":[4,34],"symbol_name":"OfflineMessage::api","language":"typescript","module_resolution_path":"@/model/entities/OfflineMessages"},"relationships":{"depends_on":["sym-ba02a04f4880a609013cceb4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-ba02a04f4880a609013cceb4","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["OfflineMessage (class) exported from `src/model/entities/OfflineMessages.ts`."],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/OfflineMessages.ts","line_range":[4,34],"symbol_name":"OfflineMessage","language":"typescript","module_resolution_path":"@/model/entities/OfflineMessages"},"relationships":{"depends_on":["mod-edb169ce79c580ad64535bf1"],"depended_by":["sym-1685a05c77c5b9538f2d6f6e"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm","@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-ae2a9b9fa48d29e5c53f6315","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `PgpKeyServer` in `src/model/entities/PgpKeyServer.ts`."],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/PgpKeyServer.ts","line_range":[3,16],"symbol_name":"PgpKeyServer::api","language":"typescript","module_resolution_path":"@/model/entities/PgpKeyServer"},"relationships":{"depends_on":["sym-97f5211aee4fd55dffefc0f4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-97f5211aee4fd55dffefc0f4","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PgpKeyServer (class) exported from `src/model/entities/PgpKeyServer.ts`."],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/PgpKeyServer.ts","line_range":[3,16],"symbol_name":"PgpKeyServer","language":"typescript","module_resolution_path":"@/model/entities/PgpKeyServer"},"relationships":{"depends_on":["mod-97abb7050d49b46b468439ff"],"depended_by":["sym-ae2a9b9fa48d29e5c53f6315"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-6717edaabd144f47f1841978","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `Transactions` in `src/model/entities/Transactions.ts`."],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/Transactions.ts","line_range":[4,60],"symbol_name":"Transactions::api","language":"typescript","module_resolution_path":"@/model/entities/Transactions"},"relationships":{"depends_on":["sym-b52cab11144006e9acefd1dc"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["@kynesyslabs/demosdk/types","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-b52cab11144006e9acefd1dc","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Transactions (class) exported from `src/model/entities/Transactions.ts`."],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/Transactions.ts","line_range":[4,60],"symbol_name":"Transactions","language":"typescript","module_resolution_path":"@/model/entities/Transactions"},"relationships":{"depends_on":["mod-205c88f6af728bd7b4ebc280"],"depended_by":["sym-6717edaabd144f47f1841978"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["@kynesyslabs/demosdk/types","typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-11e4601dc05715cd7d6f7b40","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `Validators` in `src/model/entities/Validators.ts`."],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/Validators.ts","line_range":[3,25],"symbol_name":"Validators::api","language":"typescript","module_resolution_path":"@/model/entities/Validators"},"relationships":{"depends_on":["sym-35c46231b7bc7e15f6fd6d3f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-35c46231b7bc7e15f6fd6d3f","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Validators (class) exported from `src/model/entities/Validators.ts`."],"intent_vectors":["persistence","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/Validators.ts","line_range":[3,25],"symbol_name":"Validators","language":"typescript","module_resolution_path":"@/model/entities/Validators"},"relationships":{"depends_on":["mod-81f929d30b493e5a0e7c38e7"],"depended_by":["sym-11e4601dc05715cd7d6f7b40"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":["postgres","typeorm"],"external_integrations":["typeorm"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-b68535929d68ca1588c954d8","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `NomisWalletIdentity` in `src/model/entities/types/IdentityTypes.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/types/IdentityTypes.ts","line_range":[3,19],"symbol_name":"NomisWalletIdentity::api","language":"typescript","module_resolution_path":"@/model/entities/types/IdentityTypes"},"relationships":{"depends_on":["sym-7e3e2f730f05083adf736213"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-7e3e2f730f05083adf736213","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["NomisWalletIdentity (interface) exported from `src/model/entities/types/IdentityTypes.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/types/IdentityTypes.ts","line_range":[3,19],"symbol_name":"NomisWalletIdentity","language":"typescript","module_resolution_path":"@/model/entities/types/IdentityTypes"},"relationships":{"depends_on":["mod-24557f0b00a0d628de80e5eb"],"depended_by":["sym-b68535929d68ca1588c954d8"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-a23822177d9cbf28a5e2874d","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `SavedXmIdentity` in `src/model/entities/types/IdentityTypes.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/types/IdentityTypes.ts","line_range":[21,30],"symbol_name":"SavedXmIdentity::api","language":"typescript","module_resolution_path":"@/model/entities/types/IdentityTypes"},"relationships":{"depends_on":["sym-59bf9a4e447c40f8b0baca83"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-59bf9a4e447c40f8b0baca83","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SavedXmIdentity (interface) exported from `src/model/entities/types/IdentityTypes.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/types/IdentityTypes.ts","line_range":[21,30],"symbol_name":"SavedXmIdentity","language":"typescript","module_resolution_path":"@/model/entities/types/IdentityTypes"},"relationships":{"depends_on":["mod-24557f0b00a0d628de80e5eb"],"depended_by":["sym-a23822177d9cbf28a5e2874d"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-b76bb78b92b2a5e28bd022a1","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `SavedNomisIdentity` in `src/model/entities/types/IdentityTypes.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/types/IdentityTypes.ts","line_range":[31,45],"symbol_name":"SavedNomisIdentity::api","language":"typescript","module_resolution_path":"@/model/entities/types/IdentityTypes"},"relationships":{"depends_on":["sym-8ff3fa0da48c6a51968f7cdd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-8ff3fa0da48c6a51968f7cdd","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SavedNomisIdentity (interface) exported from `src/model/entities/types/IdentityTypes.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/types/IdentityTypes.ts","line_range":[31,45],"symbol_name":"SavedNomisIdentity","language":"typescript","module_resolution_path":"@/model/entities/types/IdentityTypes"},"relationships":{"depends_on":["mod-24557f0b00a0d628de80e5eb"],"depended_by":["sym-b76bb78b92b2a5e28bd022a1"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-50b53dc25f5cb1b69d653b9b","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `SavedPqcIdentity` in `src/model/entities/types/IdentityTypes.ts`.","The PQC identity saved in the GCR"],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/types/IdentityTypes.ts","line_range":[50,54],"symbol_name":"SavedPqcIdentity::api","language":"typescript","module_resolution_path":"@/model/entities/types/IdentityTypes"},"relationships":{"depends_on":["sym-f46b4d4547c9976189a5969a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 47-49","related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-f46b4d4547c9976189a5969a","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SavedPqcIdentity (interface) exported from `src/model/entities/types/IdentityTypes.ts`.","The PQC identity saved in the GCR"],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/types/IdentityTypes.ts","line_range":[50,54],"symbol_name":"SavedPqcIdentity","language":"typescript","module_resolution_path":"@/model/entities/types/IdentityTypes"},"relationships":{"depends_on":["mod-24557f0b00a0d628de80e5eb"],"depended_by":["sym-50b53dc25f5cb1b69d653b9b"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 47-49","related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-0744fffce72263b25b57ae9c","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `PqcIdentityEdit` in `src/model/entities/types/IdentityTypes.ts`.","The PQC identity GCR edit operation data"],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/types/IdentityTypes.ts","line_range":[59,61],"symbol_name":"PqcIdentityEdit::api","language":"typescript","module_resolution_path":"@/model/entities/types/IdentityTypes"},"relationships":{"depends_on":["sym-1ee5c28fcddc2de7a3b145cd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 56-58","related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-1ee5c28fcddc2de7a3b145cd","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["PqcIdentityEdit (interface) exported from `src/model/entities/types/IdentityTypes.ts`.","The PQC identity GCR edit operation data"],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/types/IdentityTypes.ts","line_range":[59,61],"symbol_name":"PqcIdentityEdit","language":"typescript","module_resolution_path":"@/model/entities/types/IdentityTypes"},"relationships":{"depends_on":["mod-24557f0b00a0d628de80e5eb"],"depended_by":["sym-0744fffce72263b25b57ae9c"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 56-58","related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-90cda6a95c5811e344c7d7ca","level":"L3","extraction_confidence":0.87,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `SavedUdIdentity` in `src/model/entities/types/IdentityTypes.ts`.","The Unstoppable Domains identity saved in the GCR"],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/types/IdentityTypes.ts","line_range":[76,86],"symbol_name":"SavedUdIdentity::api","language":"typescript","module_resolution_path":"@/model/entities/types/IdentityTypes"},"relationships":{"depends_on":["sym-6b1a819551d2749fcdcaebb8"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 63-75","related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-6b1a819551d2749fcdcaebb8","level":"L2","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SavedUdIdentity (interface) exported from `src/model/entities/types/IdentityTypes.ts`.","The Unstoppable Domains identity saved in the GCR"],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/types/IdentityTypes.ts","line_range":[76,86],"symbol_name":"SavedUdIdentity","language":"typescript","module_resolution_path":"@/model/entities/types/IdentityTypes"},"relationships":{"depends_on":["mod-24557f0b00a0d628de80e5eb"],"depended_by":["sym-90cda6a95c5811e344c7d7ca"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 63-75","related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-4ce8fd563a7ed5439d625943","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `StoredIdentities` in `src/model/entities/types/IdentityTypes.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/types/IdentityTypes.ts","line_range":[88,108],"symbol_name":"StoredIdentities::api","language":"typescript","module_resolution_path":"@/model/entities/types/IdentityTypes"},"relationships":{"depends_on":["sym-09674205f4dd1e66aa3a00c9"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-09674205f4dd1e66aa3a00c9","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["StoredIdentities (type) exported from `src/model/entities/types/IdentityTypes.ts`."],"intent_vectors":["persistence"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/model/entities/types/IdentityTypes.ts","line_range":[88,108],"symbol_name":"StoredIdentities","language":"typescript","module_resolution_path":"@/model/entities/types/IdentityTypes"},"relationships":{"depends_on":["mod-24557f0b00a0d628de80e5eb"],"depended_by":["sym-4ce8fd563a7ed5439d625943"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["@kynesyslabs/demosdk/types"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-0c9acc5940a82087d8399864","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `TestingEnvironment` in `src/tests/types/testingEnvironment.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/tests/types/testingEnvironment.ts","line_range":[19,111],"symbol_name":"TestingEnvironment::api","language":"typescript","module_resolution_path":"@/tests/types/testingEnvironment"},"relationships":{"depends_on":["sym-0ac70d873414c331ce910f6d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["socket.io","socket.io-client","env:RPC_URL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-f3743738bcabc5b59659d442","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TestingEnvironment.retrieve method on exported class `TestingEnvironment` in `src/tests/types/testingEnvironment.ts`.","TypeScript signature: () => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/tests/types/testingEnvironment.ts","line_range":[47,72],"symbol_name":"TestingEnvironment.retrieve","language":"typescript","module_resolution_path":"@/tests/types/testingEnvironment"},"relationships":{"depends_on":["sym-0ac70d873414c331ce910f6d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["socket.io","socket.io-client","env:RPC_URL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-688bcc85271dede8317525a4","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TestingEnvironment.connect method on exported class `TestingEnvironment` in `src/tests/types/testingEnvironment.ts`.","TypeScript signature: () => unknown."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/tests/types/testingEnvironment.ts","line_range":[75,97],"symbol_name":"TestingEnvironment.connect","language":"typescript","module_resolution_path":"@/tests/types/testingEnvironment"},"relationships":{"depends_on":["sym-0ac70d873414c331ce910f6d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["socket.io","socket.io-client","env:RPC_URL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-0da3c2c2c043289abfb4e4c4","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TestingEnvironment.isConnected method on exported class `TestingEnvironment` in `src/tests/types/testingEnvironment.ts`.","TypeScript signature: (timeout: unknown) => Promise."],"intent_vectors":[],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/tests/types/testingEnvironment.ts","line_range":[100,110],"symbol_name":"TestingEnvironment.isConnected","language":"typescript","module_resolution_path":"@/tests/types/testingEnvironment"},"relationships":{"depends_on":["sym-0ac70d873414c331ce910f6d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["socket.io","socket.io-client","env:RPC_URL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-0ac70d873414c331ce910f6d","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TestingEnvironment (class) exported from `src/tests/types/testingEnvironment.ts`."],"intent_vectors":["abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/tests/types/testingEnvironment.ts","line_range":[19,111],"symbol_name":"TestingEnvironment","language":"typescript","module_resolution_path":"@/tests/types/testingEnvironment"},"relationships":{"depends_on":["mod-d46e3dca63550b5d88963cef"],"depended_by":["sym-0c9acc5940a82087d8399864","sym-f3743738bcabc5b59659d442","sym-688bcc85271dede8317525a4","sym-0da3c2c2c043289abfb4e4c4"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["socket.io","socket.io-client","env:RPC_URL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-7a48994bdf441ad2593ddeeb","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `DiagnosticData` in `src/utilities/Diagnostic.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/Diagnostic.ts","line_range":[8,35],"symbol_name":"DiagnosticData::api","language":"typescript","module_resolution_path":"@/utilities/Diagnostic"},"relationships":{"depends_on":["sym-7e8dfc0604be1a84071b6545"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["cli-progress","dotenv","fs","https","node-disk-info","os","env:MIN_CPU_SPEED","env:MIN_DISK_SPACE","env:MIN_NETWORK_DOWNLOAD_SPEED","env:MIN_NETWORK_UPLOAD_SPEED","env:MIN_RAM","env:NETWORK_TEST_FILE_SIZE","env:SUGGESTED_CPU_SPEED","env:SUGGESTED_DISK_SPACE","env:SUGGESTED_NETWORK_DOWNLOAD_SPEED","env:SUGGESTED_NETWORK_UPLOAD_SPEED","env:SUGGESTED_RAM"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-7e8dfc0604be1a84071b6545","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DiagnosticData (interface) exported from `src/utilities/Diagnostic.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/Diagnostic.ts","line_range":[8,35],"symbol_name":"DiagnosticData","language":"typescript","module_resolution_path":"@/utilities/Diagnostic"},"relationships":{"depends_on":["mod-aedcf7cff384ad96bb4dd624"],"depended_by":["sym-7a48994bdf441ad2593ddeeb"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["cli-progress","dotenv","fs","https","node-disk-info","os","env:MIN_CPU_SPEED","env:MIN_DISK_SPACE","env:MIN_NETWORK_DOWNLOAD_SPEED","env:MIN_NETWORK_UPLOAD_SPEED","env:MIN_RAM","env:NETWORK_TEST_FILE_SIZE","env:SUGGESTED_CPU_SPEED","env:SUGGESTED_DISK_SPACE","env:SUGGESTED_NETWORK_DOWNLOAD_SPEED","env:SUGGESTED_NETWORK_UPLOAD_SPEED","env:SUGGESTED_RAM"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-f7ebe48c44eac8606e31e9ed","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `DiagnosticResponse` in `src/utilities/Diagnostic.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/Diagnostic.ts","line_range":[37,39],"symbol_name":"DiagnosticResponse::api","language":"typescript","module_resolution_path":"@/utilities/Diagnostic"},"relationships":{"depends_on":["sym-6914083e3bf3fbedbec2224e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["cli-progress","dotenv","fs","https","node-disk-info","os","env:MIN_CPU_SPEED","env:MIN_DISK_SPACE","env:MIN_NETWORK_DOWNLOAD_SPEED","env:MIN_NETWORK_UPLOAD_SPEED","env:MIN_RAM","env:NETWORK_TEST_FILE_SIZE","env:SUGGESTED_CPU_SPEED","env:SUGGESTED_DISK_SPACE","env:SUGGESTED_NETWORK_DOWNLOAD_SPEED","env:SUGGESTED_NETWORK_UPLOAD_SPEED","env:SUGGESTED_RAM"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-6914083e3bf3fbedbec2224e","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DiagnosticResponse (interface) exported from `src/utilities/Diagnostic.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/Diagnostic.ts","line_range":[37,39],"symbol_name":"DiagnosticResponse","language":"typescript","module_resolution_path":"@/utilities/Diagnostic"},"relationships":{"depends_on":["mod-aedcf7cff384ad96bb4dd624"],"depended_by":["sym-f7ebe48c44eac8606e31e9ed"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["cli-progress","dotenv","fs","https","node-disk-info","os","env:MIN_CPU_SPEED","env:MIN_DISK_SPACE","env:MIN_NETWORK_DOWNLOAD_SPEED","env:MIN_NETWORK_UPLOAD_SPEED","env:MIN_RAM","env:NETWORK_TEST_FILE_SIZE","env:SUGGESTED_CPU_SPEED","env:SUGGESTED_DISK_SPACE","env:SUGGESTED_NETWORK_DOWNLOAD_SPEED","env:SUGGESTED_NETWORK_UPLOAD_SPEED","env:SUGGESTED_RAM"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-4dcfdaff3d358f5913dd0fe3","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["default (export_default) exported from `src/utilities/Diagnostic.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/Diagnostic.ts","line_range":[378,378],"symbol_name":"default","language":"typescript","module_resolution_path":"@/utilities/Diagnostic"},"relationships":{"depends_on":["mod-aedcf7cff384ad96bb4dd624"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["cli-progress","dotenv","fs","https","node-disk-info","os","env:MIN_CPU_SPEED","env:MIN_DISK_SPACE","env:MIN_NETWORK_DOWNLOAD_SPEED","env:MIN_NETWORK_UPLOAD_SPEED","env:MIN_RAM","env:NETWORK_TEST_FILE_SIZE","env:SUGGESTED_CPU_SPEED","env:SUGGESTED_DISK_SPACE","env:SUGGESTED_NETWORK_DOWNLOAD_SPEED","env:SUGGESTED_NETWORK_UPLOAD_SPEED","env:SUGGESTED_RAM"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-4b87c6bde0ba6922be1ab091","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["checkSignedPayloads (function) exported from `src/utilities/checkSignedPayloads.ts`.","TypeScript signature: (num: number, signedPayloads: any[]) => boolean."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/checkSignedPayloads.ts","line_range":[5,21],"symbol_name":"checkSignedPayloads","language":"typescript","module_resolution_path":"@/utilities/checkSignedPayloads"},"relationships":{"depends_on":["mod-aec11f5957298897d75000d1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-fdc6a680519985c47038e2a5","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `Cryptography` in `src/utilities/cli_libraries/cryptography.ts`."],"intent_vectors":["utilities","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/cli_libraries/cryptography.ts","line_range":[6,44],"symbol_name":"Cryptography::api","language":"typescript","module_resolution_path":"@/utilities/cli_libraries/cryptography"},"relationships":{"depends_on":["sym-590ef991f7c0feb60db38948"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-613fa096bf763d0acf01da9b","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Cryptography.getInstance method on exported class `Cryptography` in `src/utilities/cli_libraries/cryptography.ts`.","TypeScript signature: () => Cryptography."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/cli_libraries/cryptography.ts","line_range":[10,15],"symbol_name":"Cryptography.getInstance","language":"typescript","module_resolution_path":"@/utilities/cli_libraries/cryptography"},"relationships":{"depends_on":["sym-590ef991f7c0feb60db38948"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-8766b00e6fa3be7a2892fe99","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Cryptography.dispatch method on exported class `Cryptography` in `src/utilities/cli_libraries/cryptography.ts`.","TypeScript signature: (dividedInput: any) => unknown."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/cli_libraries/cryptography.ts","line_range":[19,21],"symbol_name":"Cryptography.dispatch","language":"typescript","module_resolution_path":"@/utilities/cli_libraries/cryptography"},"relationships":{"depends_on":["sym-590ef991f7c0feb60db38948"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-8799af631ff3a4143d43a850","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Cryptography.sign method on exported class `Cryptography` in `src/utilities/cli_libraries/cryptography.ts`.","TypeScript signature: (message: any) => unknown."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/cli_libraries/cryptography.ts","line_range":[23,30],"symbol_name":"Cryptography.sign","language":"typescript","module_resolution_path":"@/utilities/cli_libraries/cryptography"},"relationships":{"depends_on":["sym-590ef991f7c0feb60db38948"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-54138acd411fe89df0e2c98c","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Cryptography.verify method on exported class `Cryptography` in `src/utilities/cli_libraries/cryptography.ts`.","TypeScript signature: (message: any, signature: forge.pki.ed25519.BinaryBuffer, publicKey: forge.pki.ed25519.BinaryBuffer) => unknown."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/cli_libraries/cryptography.ts","line_range":[32,43],"symbol_name":"Cryptography.verify","language":"typescript","module_resolution_path":"@/utilities/cli_libraries/cryptography"},"relationships":{"depends_on":["sym-590ef991f7c0feb60db38948"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-590ef991f7c0feb60db38948","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Cryptography (class) exported from `src/utilities/cli_libraries/cryptography.ts`."],"intent_vectors":["utilities","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/cli_libraries/cryptography.ts","line_range":[6,44],"symbol_name":"Cryptography","language":"typescript","module_resolution_path":"@/utilities/cli_libraries/cryptography"},"relationships":{"depends_on":["mod-9efb2c33ee124a3e24fea523"],"depended_by":["sym-fdc6a680519985c47038e2a5","sym-613fa096bf763d0acf01da9b","sym-8766b00e6fa3be7a2892fe99","sym-8799af631ff3a4143d43a850","sym-54138acd411fe89df0e2c98c"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-8d5e227a00f1424f513b0a29","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `Identity` in `src/utilities/cli_libraries/wallet.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/cli_libraries/wallet.ts","line_range":[5,8],"symbol_name":"Identity::api","language":"typescript","module_resolution_path":"@/utilities/cli_libraries/wallet"},"relationships":{"depends_on":["sym-a5e5e709921d64076470bc4a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-a5e5e709921d64076470bc4a","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Identity (interface) exported from `src/utilities/cli_libraries/wallet.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/cli_libraries/wallet.ts","line_range":[5,8],"symbol_name":"Identity","language":"typescript","module_resolution_path":"@/utilities/cli_libraries/wallet"},"relationships":{"depends_on":["mod-8b99d278a4bd1dda5f119d4b"],"depended_by":["sym-8d5e227a00f1424f513b0a29"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-f8c0eeed3baccb3e7fa467c0","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `Wallet` in `src/utilities/cli_libraries/wallet.ts`."],"intent_vectors":["utilities","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/cli_libraries/wallet.ts","line_range":[10,134],"symbol_name":"Wallet::api","language":"typescript","module_resolution_path":"@/utilities/cli_libraries/wallet"},"relationships":{"depends_on":["sym-96217b85b15e0cb5db4e930b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-e17fcd94a4eb8771ace31fc3","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Wallet.getInstance method on exported class `Wallet` in `src/utilities/cli_libraries/wallet.ts`.","TypeScript signature: () => Wallet."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/cli_libraries/wallet.ts","line_range":[15,20],"symbol_name":"Wallet.getInstance","language":"typescript","module_resolution_path":"@/utilities/cli_libraries/wallet"},"relationships":{"depends_on":["sym-96217b85b15e0cb5db4e930b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-603aaafef984c97bc1fb36f7","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Wallet.create method on exported class `Wallet` in `src/utilities/cli_libraries/wallet.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/cli_libraries/wallet.ts","line_range":[31,33],"symbol_name":"Wallet.create","language":"typescript","module_resolution_path":"@/utilities/cli_libraries/wallet"},"relationships":{"depends_on":["sym-96217b85b15e0cb5db4e930b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-040c390bafa53749618b519b","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Wallet.dispatch method on exported class `Wallet` in `src/utilities/cli_libraries/wallet.ts`.","TypeScript signature: (dividedInput: any) => unknown."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/utilities/cli_libraries/wallet.ts","line_range":[35,114],"symbol_name":"Wallet.dispatch","language":"typescript","module_resolution_path":"@/utilities/cli_libraries/wallet"},"relationships":{"depends_on":["sym-96217b85b15e0cb5db4e930b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-d23bb70b07f37cd7d66c695a","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Wallet.load method on exported class `Wallet` in `src/utilities/cli_libraries/wallet.ts`.","TypeScript signature: (pk: string) => unknown."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/cli_libraries/wallet.ts","line_range":[116,121],"symbol_name":"Wallet.load","language":"typescript","module_resolution_path":"@/utilities/cli_libraries/wallet"},"relationships":{"depends_on":["sym-96217b85b15e0cb5db4e930b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-88f912051e9647b32d55b9c7","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Wallet.save method on exported class `Wallet` in `src/utilities/cli_libraries/wallet.ts`.","TypeScript signature: (filename: string) => unknown."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/utilities/cli_libraries/wallet.ts","line_range":[123,125],"symbol_name":"Wallet.save","language":"typescript","module_resolution_path":"@/utilities/cli_libraries/wallet"},"relationships":{"depends_on":["sym-96217b85b15e0cb5db4e930b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-337b0b893f91850a1c499081","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Wallet.read method on exported class `Wallet` in `src/utilities/cli_libraries/wallet.ts`.","TypeScript signature: (filename: string) => unknown."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/cli_libraries/wallet.ts","line_range":[127,133],"symbol_name":"Wallet.read","language":"typescript","module_resolution_path":"@/utilities/cli_libraries/wallet"},"relationships":{"depends_on":["sym-96217b85b15e0cb5db4e930b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-96217b85b15e0cb5db4e930b","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Wallet (class) exported from `src/utilities/cli_libraries/wallet.ts`."],"intent_vectors":["utilities","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/cli_libraries/wallet.ts","line_range":[10,134],"symbol_name":"Wallet","language":"typescript","module_resolution_path":"@/utilities/cli_libraries/wallet"},"relationships":{"depends_on":["mod-8b99d278a4bd1dda5f119d4b"],"depended_by":["sym-f8c0eeed3baccb3e7fa467c0","sym-e17fcd94a4eb8771ace31fc3","sym-603aaafef984c97bc1fb36f7","sym-040c390bafa53749618b519b","sym-d23bb70b07f37cd7d66c695a","sym-88f912051e9647b32d55b9c7","sym-337b0b893f91850a1c499081"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","node-forge"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-927f4a859c94422559dd19ec","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["commandLine (function) exported from `src/utilities/commandLine.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/utilities/commandLine.ts","line_range":[23,62],"symbol_name":"commandLine","language":"typescript","module_resolution_path":"@/utilities/commandLine"},"relationships":{"depends_on":["mod-7411cdffb6063d8aa54dc02d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-f299dd21cf070dca1c4a0501","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getErrorMessage (function) exported from `src/utilities/errorMessage.ts`.","TypeScript signature: (error: unknown) => string."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/errorMessage.ts","line_range":[3,24],"symbol_name":"getErrorMessage","language":"typescript","module_resolution_path":"@/utilities/errorMessage"},"relationships":{"depends_on":["mod-7a1941c482905a159b7f2f46"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["node:util"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-efeccf4a0839b992818e1b61","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `EVMInfo` in `src/utilities/evmInfo.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/evmInfo.ts","line_range":[4,11],"symbol_name":"EVMInfo::api","language":"typescript","module_resolution_path":"@/utilities/evmInfo"},"relationships":{"depends_on":["sym-a4795a434717a476bb688e27"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","path"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-a4795a434717a476bb688e27","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["EVMInfo (interface) exported from `src/utilities/evmInfo.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/evmInfo.ts","line_range":[4,11],"symbol_name":"EVMInfo","language":"typescript","module_resolution_path":"@/utilities/evmInfo"},"relationships":{"depends_on":["mod-fed8e983d33351c85dd25540"],"depended_by":["sym-efeccf4a0839b992818e1b61"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs","path"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-348c100bdcd3654ff72438e9","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["evmInfo (function) exported from `src/utilities/evmInfo.ts`.","TypeScript signature: (chainID: number) => [boolean, string | EVMInfo]."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/evmInfo.ts","line_range":[13,40],"symbol_name":"evmInfo","language":"typescript","module_resolution_path":"@/utilities/evmInfo"},"relationships":{"depends_on":["mod-fed8e983d33351c85dd25540"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","path"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.959Z","authors":[]}} +{"uuid":"sym-41ce297760c0b065fc403d2c","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["generateUniqueId (function) exported from `src/utilities/generateUniqueId.ts`.","TypeScript signature: () => string."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/generateUniqueId.ts","line_range":[3,9],"symbol_name":"generateUniqueId","language":"typescript","module_resolution_path":"@/utilities/generateUniqueId"},"relationships":{"depends_on":["mod-719cd7393843802b8bff160e"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"sym-744d1d1b0780d485e5d250ad","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["getPublicIP (function) exported from `src/utilities/getPublicIP.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/utilities/getPublicIP.ts","line_range":[3,6],"symbol_name":"getPublicIP","language":"typescript","module_resolution_path":"@/utilities/getPublicIP"},"relationships":{"depends_on":["mod-199bee3bfdf8ff3ae8ddfb47"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["axios"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"sym-d9d6fc11a7df506cb0a07142","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["default (re_export) exported from `src/utilities/logger.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/logger.ts","line_range":[22,22],"symbol_name":"default","language":"typescript","module_resolution_path":"@/utilities/logger"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"sym-01c888a08356d8f28943c97f","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Logger (re_export) exported from `src/utilities/logger.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/logger.ts","line_range":[23,23],"symbol_name":"Logger","language":"typescript","module_resolution_path":"@/utilities/logger"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"sym-44d33a50cc54e0d3d967b0c0","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["CategorizedLogger (re_export) exported from `src/utilities/logger.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/logger.ts","line_range":[26,26],"symbol_name":"CategorizedLogger","language":"typescript","module_resolution_path":"@/utilities/logger"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"sym-19868805b0694b2d85e8eaf2","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["LogCategory (re_export) exported from `src/utilities/logger.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/logger.ts","line_range":[27,27],"symbol_name":"LogCategory","language":"typescript","module_resolution_path":"@/utilities/logger"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"sym-7e2f44f7dfbc0b389d5076cc","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["LogLevel (re_export) exported from `src/utilities/logger.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/logger.ts","line_range":[27,27],"symbol_name":"LogLevel","language":"typescript","module_resolution_path":"@/utilities/logger"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"sym-7591b4ab3452279a9b3202d6","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["LogEntry (re_export) exported from `src/utilities/logger.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/logger.ts","line_range":[27,27],"symbol_name":"LogEntry","language":"typescript","module_resolution_path":"@/utilities/logger"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"sym-7d6290b416ca33e2810a2d84","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["TUIManager (re_export) exported from `src/utilities/logger.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/logger.ts","line_range":[28,28],"symbol_name":"TUIManager","language":"typescript","module_resolution_path":"@/utilities/logger"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"sym-98ec34896e82c3ec91f745c8","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["NodeInfo (re_export) exported from `src/utilities/logger.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/logger.ts","line_range":[29,29],"symbol_name":"NodeInfo","language":"typescript","module_resolution_path":"@/utilities/logger"},"relationships":{"depends_on":["mod-54aa1c38c91b1598c048b7e1"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"sym-f340304e2dcd18aeab7bea66","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["mainLoop (function) exported from `src/utilities/mainLoop.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/utilities/mainLoop.ts","line_range":[25,31],"symbol_name":"mainLoop","language":"typescript","module_resolution_path":"@/utilities/mainLoop"},"relationships":{"depends_on":["mod-7fc4f2fefdc6a8526f0d89e7"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":true,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-da54c6138fbebaf88017312e","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `RequiredOutcome` in `src/utilities/required.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/required.ts","line_range":[11,14],"symbol_name":"RequiredOutcome::api","language":"typescript","module_resolution_path":"@/utilities/required"},"relationships":{"depends_on":["sym-310ddf06d9f20af042a081ae"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"sym-310ddf06d9f20af042a081ae","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RequiredOutcome (interface) exported from `src/utilities/required.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/required.ts","line_range":[11,14],"symbol_name":"RequiredOutcome","language":"typescript","module_resolution_path":"@/utilities/required"},"relationships":{"depends_on":["mod-ff98cde0370b2a3126edc022"],"depended_by":["sym-da54c6138fbebaf88017312e"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"sym-1fb3c00ffd51337ee0856546","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["required (function) exported from `src/utilities/required.ts`.","TypeScript signature: (value: any, msg: unknown, fatal: unknown) => RequiredOutcome."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/required.ts","line_range":[16,26],"symbol_name":"required","language":"typescript","module_resolution_path":"@/utilities/required"},"relationships":{"depends_on":["mod-ff98cde0370b2a3126edc022"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"sym-eb5223c80d97fb8805435919","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["selfCheckPort (function) exported from `src/utilities/selfCheckPort.ts`.","TypeScript signature: (port: number, timeout: unknown) => Promise."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/utilities/selfCheckPort.ts","line_range":[4,17],"symbol_name":"selfCheckPort","language":"typescript","module_resolution_path":"@/utilities/selfCheckPort"},"relationships":{"depends_on":["mod-afcd806760f135d6236304f7"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["net","util"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"sym-73a0a16ce379f82c4cf209c2","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["selfPeer (function) exported from `src/utilities/selfPeer.ts`.","TypeScript signature: () => unknown."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/utilities/selfPeer.ts","line_range":[5,16],"symbol_name":"selfPeer","language":"typescript","module_resolution_path":"@/utilities/selfPeer"},"relationships":{"depends_on":["mod-79fbe6e699a260de286c1916"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs","env:EXPOSED_URL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"sym-52d5306f84e203c25cde4d63","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `SharedState` in `src/utilities/sharedState.ts`."],"intent_vectors":["utilities","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/sharedState.ts","line_range":[21,371],"symbol_name":"SharedState::api","language":"typescript","module_resolution_path":"@/utilities/sharedState"},"relationships":{"depends_on":["sym-b744b3f0ca52230821cd7c09"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["dotenv","node-forge","ntp-client","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption","env:CONSENSUS_CHECK_INTERVAL","env:CONSENSUS_TIME","env:EXPOSED_URL","env:IDENTITY_FILE","env:MAIN_LOOP_SLEEP_TIME","env:MAX_MESSAGE_SIZE","env:PEER_LIST_FILE","env:PROD","env:RPC_FEE_PERCENT","env:SHARD_SIZE","env:SUDO_PUBKEY","env:WHITELISTED_IPS","env:WHITELISTED_KEYS"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-63378d99f547426255e3c6b2","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SharedState.syncStatus method on exported class `SharedState` in `src/utilities/sharedState.ts`.","TypeScript signature: (synced: boolean) => unknown."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/sharedState.ts","line_range":[96,104],"symbol_name":"SharedState.syncStatus","language":"typescript","module_resolution_path":"@/utilities/sharedState"},"relationships":{"depends_on":["sym-b744b3f0ca52230821cd7c09"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["dotenv","node-forge","ntp-client","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption","env:CONSENSUS_CHECK_INTERVAL","env:CONSENSUS_TIME","env:EXPOSED_URL","env:IDENTITY_FILE","env:MAIN_LOOP_SLEEP_TIME","env:MAX_MESSAGE_SIZE","env:PEER_LIST_FILE","env:PROD","env:RPC_FEE_PERCENT","env:SHARD_SIZE","env:SUDO_PUBKEY","env:WHITELISTED_IPS","env:WHITELISTED_KEYS"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-2fe136d4f31355269119cc07","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SharedState.syncStatus method on exported class `SharedState` in `src/utilities/sharedState.ts`.","TypeScript signature: () => boolean."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/sharedState.ts","line_range":[106,108],"symbol_name":"SharedState.syncStatus","language":"typescript","module_resolution_path":"@/utilities/sharedState"},"relationships":{"depends_on":["sym-b744b3f0ca52230821cd7c09"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["dotenv","node-forge","ntp-client","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption","env:CONSENSUS_CHECK_INTERVAL","env:CONSENSUS_TIME","env:EXPOSED_URL","env:IDENTITY_FILE","env:MAIN_LOOP_SLEEP_TIME","env:MAX_MESSAGE_SIZE","env:PEER_LIST_FILE","env:PROD","env:RPC_FEE_PERCENT","env:SHARD_SIZE","env:SUDO_PUBKEY","env:WHITELISTED_IPS","env:WHITELISTED_KEYS"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-2006e105b13b6da460a2f036","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SharedState.publicKeyHex method on exported class `SharedState` in `src/utilities/sharedState.ts`.","TypeScript signature: () => string."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/sharedState.ts","line_range":[131,144],"symbol_name":"SharedState.publicKeyHex","language":"typescript","module_resolution_path":"@/utilities/sharedState"},"relationships":{"depends_on":["sym-b744b3f0ca52230821cd7c09"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["dotenv","node-forge","ntp-client","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption","env:CONSENSUS_CHECK_INTERVAL","env:CONSENSUS_TIME","env:EXPOSED_URL","env:IDENTITY_FILE","env:MAIN_LOOP_SLEEP_TIME","env:MAX_MESSAGE_SIZE","env:PEER_LIST_FILE","env:PROD","env:RPC_FEE_PERCENT","env:SHARD_SIZE","env:SUDO_PUBKEY","env:WHITELISTED_IPS","env:WHITELISTED_KEYS"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-fd5416bb9f103468749a2fb6","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SharedState.lastBlockHash method on exported class `SharedState` in `src/utilities/sharedState.ts`.","TypeScript signature: (value: string) => unknown."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/sharedState.ts","line_range":[153,157],"symbol_name":"SharedState.lastBlockHash","language":"typescript","module_resolution_path":"@/utilities/sharedState"},"relationships":{"depends_on":["sym-b744b3f0ca52230821cd7c09"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["dotenv","node-forge","ntp-client","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption","env:CONSENSUS_CHECK_INTERVAL","env:CONSENSUS_TIME","env:EXPOSED_URL","env:IDENTITY_FILE","env:MAIN_LOOP_SLEEP_TIME","env:MAX_MESSAGE_SIZE","env:PEER_LIST_FILE","env:PROD","env:RPC_FEE_PERCENT","env:SHARD_SIZE","env:SUDO_PUBKEY","env:WHITELISTED_IPS","env:WHITELISTED_KEYS"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-e730f1acbf64d766fa3ab2c5","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SharedState.lastBlockHash method on exported class `SharedState` in `src/utilities/sharedState.ts`.","TypeScript signature: () => string."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/sharedState.ts","line_range":[159,161],"symbol_name":"SharedState.lastBlockHash","language":"typescript","module_resolution_path":"@/utilities/sharedState"},"relationships":{"depends_on":["sym-b744b3f0ca52230821cd7c09"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["dotenv","node-forge","ntp-client","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption","env:CONSENSUS_CHECK_INTERVAL","env:CONSENSUS_TIME","env:EXPOSED_URL","env:IDENTITY_FILE","env:MAIN_LOOP_SLEEP_TIME","env:MAX_MESSAGE_SIZE","env:PEER_LIST_FILE","env:PROD","env:RPC_FEE_PERCENT","env:SHARD_SIZE","env:SUDO_PUBKEY","env:WHITELISTED_IPS","env:WHITELISTED_KEYS"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-27eafd904c9cc9f3be773db2","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SharedState.getInstance method on exported class `SharedState` in `src/utilities/sharedState.ts`.","TypeScript signature: () => SharedState."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/sharedState.ts","line_range":[183,188],"symbol_name":"SharedState.getInstance","language":"typescript","module_resolution_path":"@/utilities/sharedState"},"relationships":{"depends_on":["sym-b744b3f0ca52230821cd7c09"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["dotenv","node-forge","ntp-client","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption","env:CONSENSUS_CHECK_INTERVAL","env:CONSENSUS_TIME","env:EXPOSED_URL","env:IDENTITY_FILE","env:MAIN_LOOP_SLEEP_TIME","env:MAX_MESSAGE_SIZE","env:PEER_LIST_FILE","env:PROD","env:RPC_FEE_PERCENT","env:SHARD_SIZE","env:SUDO_PUBKEY","env:WHITELISTED_IPS","env:WHITELISTED_KEYS"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-9a7c16a46499c4474bfa9c28","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SharedState.getUTCTime method on exported class `SharedState` in `src/utilities/sharedState.ts`.","TypeScript signature: (ntp: unknown, inSeconds: unknown) => Promise."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/utilities/sharedState.ts","line_range":[192,205],"symbol_name":"SharedState.getUTCTime","language":"typescript","module_resolution_path":"@/utilities/sharedState"},"relationships":{"depends_on":["sym-b744b3f0ca52230821cd7c09"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["dotenv","node-forge","ntp-client","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption","env:CONSENSUS_CHECK_INTERVAL","env:CONSENSUS_TIME","env:EXPOSED_URL","env:IDENTITY_FILE","env:MAIN_LOOP_SLEEP_TIME","env:MAX_MESSAGE_SIZE","env:PEER_LIST_FILE","env:PROD","env:RPC_FEE_PERCENT","env:SHARD_SIZE","env:SUDO_PUBKEY","env:WHITELISTED_IPS","env:WHITELISTED_KEYS"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-5abf751f46445a56272194fe","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SharedState.getNTPTime method on exported class `SharedState` in `src/utilities/sharedState.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/utilities/sharedState.ts","line_range":[208,217],"symbol_name":"SharedState.getNTPTime","language":"typescript","module_resolution_path":"@/utilities/sharedState"},"relationships":{"depends_on":["sym-b744b3f0ca52230821cd7c09"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["dotenv","node-forge","ntp-client","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption","env:CONSENSUS_CHECK_INTERVAL","env:CONSENSUS_TIME","env:EXPOSED_URL","env:IDENTITY_FILE","env:MAIN_LOOP_SLEEP_TIME","env:MAX_MESSAGE_SIZE","env:PEER_LIST_FILE","env:PROD","env:RPC_FEE_PERCENT","env:SHARD_SIZE","env:SUDO_PUBKEY","env:WHITELISTED_IPS","env:WHITELISTED_KEYS"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-f4c49cb6c933e15281dc470d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SharedState.getTimestamp method on exported class `SharedState` in `src/utilities/sharedState.ts`.","TypeScript signature: (inSeconds: unknown) => number."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/sharedState.ts","line_range":[220,226],"symbol_name":"SharedState.getTimestamp","language":"typescript","module_resolution_path":"@/utilities/sharedState"},"relationships":{"depends_on":["sym-b744b3f0ca52230821cd7c09"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["dotenv","node-forge","ntp-client","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption","env:CONSENSUS_CHECK_INTERVAL","env:CONSENSUS_TIME","env:EXPOSED_URL","env:IDENTITY_FILE","env:MAIN_LOOP_SLEEP_TIME","env:MAX_MESSAGE_SIZE","env:PEER_LIST_FILE","env:PROD","env:RPC_FEE_PERCENT","env:SHARD_SIZE","env:SUDO_PUBKEY","env:WHITELISTED_IPS","env:WHITELISTED_KEYS"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-204abff3c5eec17740212ccd","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SharedState.getLastConsensusTime method on exported class `SharedState` in `src/utilities/sharedState.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/utilities/sharedState.ts","line_range":[228,233],"symbol_name":"SharedState.getLastConsensusTime","language":"typescript","module_resolution_path":"@/utilities/sharedState"},"relationships":{"depends_on":["sym-b744b3f0ca52230821cd7c09"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["dotenv","node-forge","ntp-client","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption","env:CONSENSUS_CHECK_INTERVAL","env:CONSENSUS_TIME","env:EXPOSED_URL","env:IDENTITY_FILE","env:MAIN_LOOP_SLEEP_TIME","env:MAX_MESSAGE_SIZE","env:PEER_LIST_FILE","env:PROD","env:RPC_FEE_PERCENT","env:SHARD_SIZE","env:SUDO_PUBKEY","env:WHITELISTED_IPS","env:WHITELISTED_KEYS"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-bce0a60c8b027a23cbb66a0b","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SharedState.getConsensusCheckStep method on exported class `SharedState` in `src/utilities/sharedState.ts`.","TypeScript signature: () => number."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/sharedState.ts","line_range":[238,240],"symbol_name":"SharedState.getConsensusCheckStep","language":"typescript","module_resolution_path":"@/utilities/sharedState"},"relationships":{"depends_on":["sym-b744b3f0ca52230821cd7c09"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["dotenv","node-forge","ntp-client","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption","env:CONSENSUS_CHECK_INTERVAL","env:CONSENSUS_TIME","env:EXPOSED_URL","env:IDENTITY_FILE","env:MAIN_LOOP_SLEEP_TIME","env:MAX_MESSAGE_SIZE","env:PEER_LIST_FILE","env:PROD","env:RPC_FEE_PERCENT","env:SHARD_SIZE","env:SUDO_PUBKEY","env:WHITELISTED_IPS","env:WHITELISTED_KEYS"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-2bf80b379b628fe1463b323d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SharedState.getConsensusTime method on exported class `SharedState` in `src/utilities/sharedState.ts`.","TypeScript signature: () => number."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/sharedState.ts","line_range":[245,247],"symbol_name":"SharedState.getConsensusTime","language":"typescript","module_resolution_path":"@/utilities/sharedState"},"relationships":{"depends_on":["sym-b744b3f0ca52230821cd7c09"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["dotenv","node-forge","ntp-client","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption","env:CONSENSUS_CHECK_INTERVAL","env:CONSENSUS_TIME","env:EXPOSED_URL","env:IDENTITY_FILE","env:MAIN_LOOP_SLEEP_TIME","env:MAX_MESSAGE_SIZE","env:PEER_LIST_FILE","env:PROD","env:RPC_FEE_PERCENT","env:SHARD_SIZE","env:SUDO_PUBKEY","env:WHITELISTED_IPS","env:WHITELISTED_KEYS"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-3b9e32f6d2845b4593c6cf03","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SharedState.getConnectionString method on exported class `SharedState` in `src/utilities/sharedState.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/utilities/sharedState.ts","line_range":[249,252],"symbol_name":"SharedState.getConnectionString","language":"typescript","module_resolution_path":"@/utilities/sharedState"},"relationships":{"depends_on":["sym-b744b3f0ca52230821cd7c09"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["dotenv","node-forge","ntp-client","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption","env:CONSENSUS_CHECK_INTERVAL","env:CONSENSUS_TIME","env:EXPOSED_URL","env:IDENTITY_FILE","env:MAIN_LOOP_SLEEP_TIME","env:MAX_MESSAGE_SIZE","env:PEER_LIST_FILE","env:PROD","env:RPC_FEE_PERCENT","env:SHARD_SIZE","env:SUDO_PUBKEY","env:WHITELISTED_IPS","env:WHITELISTED_KEYS"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-dfc183b8a51720a3c7acb951","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SharedState.getInfo method on exported class `SharedState` in `src/utilities/sharedState.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/utilities/sharedState.ts","line_range":[294,312],"symbol_name":"SharedState.getInfo","language":"typescript","module_resolution_path":"@/utilities/sharedState"},"relationships":{"depends_on":["sym-b744b3f0ca52230821cd7c09"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["dotenv","node-forge","ntp-client","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption","env:CONSENSUS_CHECK_INTERVAL","env:CONSENSUS_TIME","env:EXPOSED_URL","env:IDENTITY_FILE","env:MAIN_LOOP_SLEEP_TIME","env:MAX_MESSAGE_SIZE","env:PEER_LIST_FILE","env:PROD","env:RPC_FEE_PERCENT","env:SHARD_SIZE","env:SUDO_PUBKEY","env:WHITELISTED_IPS","env:WHITELISTED_KEYS"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-fdea233f51c4f9253f57b5fa","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SharedState.initOmniProtocol method on exported class `SharedState` in `src/utilities/sharedState.ts`.","TypeScript signature: (mode: MigrationMode) => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/sharedState.ts","line_range":[319,331],"symbol_name":"SharedState.initOmniProtocol","language":"typescript","module_resolution_path":"@/utilities/sharedState"},"relationships":{"depends_on":["sym-b744b3f0ca52230821cd7c09"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["dotenv","node-forge","ntp-client","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption","env:CONSENSUS_CHECK_INTERVAL","env:CONSENSUS_TIME","env:EXPOSED_URL","env:IDENTITY_FILE","env:MAIN_LOOP_SLEEP_TIME","env:MAX_MESSAGE_SIZE","env:PEER_LIST_FILE","env:PROD","env:RPC_FEE_PERCENT","env:SHARD_SIZE","env:SUDO_PUBKEY","env:WHITELISTED_IPS","env:WHITELISTED_KEYS"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-409ae2c860c3d547932b22bf","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SharedState.omniAdapter method on exported class `SharedState` in `src/utilities/sharedState.ts`.","TypeScript signature: () => PeerOmniAdapter | null."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/sharedState.ts","line_range":[336,338],"symbol_name":"SharedState.omniAdapter","language":"typescript","module_resolution_path":"@/utilities/sharedState"},"relationships":{"depends_on":["sym-b744b3f0ca52230821cd7c09"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["dotenv","node-forge","ntp-client","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption","env:CONSENSUS_CHECK_INTERVAL","env:CONSENSUS_TIME","env:EXPOSED_URL","env:IDENTITY_FILE","env:MAIN_LOOP_SLEEP_TIME","env:MAX_MESSAGE_SIZE","env:PEER_LIST_FILE","env:PROD","env:RPC_FEE_PERCENT","env:SHARD_SIZE","env:SUDO_PUBKEY","env:WHITELISTED_IPS","env:WHITELISTED_KEYS"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-f1b2b407c8dfa52f9ea4da3a","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SharedState.shouldUseOmniProtocol method on exported class `SharedState` in `src/utilities/sharedState.ts`.","TypeScript signature: (peerIdentity: string) => boolean."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/sharedState.ts","line_range":[344,349],"symbol_name":"SharedState.shouldUseOmniProtocol","language":"typescript","module_resolution_path":"@/utilities/sharedState"},"relationships":{"depends_on":["sym-b744b3f0ca52230821cd7c09"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["dotenv","node-forge","ntp-client","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption","env:CONSENSUS_CHECK_INTERVAL","env:CONSENSUS_TIME","env:EXPOSED_URL","env:IDENTITY_FILE","env:MAIN_LOOP_SLEEP_TIME","env:MAX_MESSAGE_SIZE","env:PEER_LIST_FILE","env:PROD","env:RPC_FEE_PERCENT","env:SHARD_SIZE","env:SUDO_PUBKEY","env:WHITELISTED_IPS","env:WHITELISTED_KEYS"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-23c9f147a5e10bca9cda218d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SharedState.markPeerOmniCapable method on exported class `SharedState` in `src/utilities/sharedState.ts`.","TypeScript signature: (peerIdentity: string) => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/sharedState.ts","line_range":[355,359],"symbol_name":"SharedState.markPeerOmniCapable","language":"typescript","module_resolution_path":"@/utilities/sharedState"},"relationships":{"depends_on":["sym-b744b3f0ca52230821cd7c09"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["dotenv","node-forge","ntp-client","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption","env:CONSENSUS_CHECK_INTERVAL","env:CONSENSUS_TIME","env:EXPOSED_URL","env:IDENTITY_FILE","env:MAIN_LOOP_SLEEP_TIME","env:MAX_MESSAGE_SIZE","env:PEER_LIST_FILE","env:PROD","env:RPC_FEE_PERCENT","env:SHARD_SIZE","env:SUDO_PUBKEY","env:WHITELISTED_IPS","env:WHITELISTED_KEYS"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-d3aa764874845bfa486fda13","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SharedState.markPeerHttpOnly method on exported class `SharedState` in `src/utilities/sharedState.ts`.","TypeScript signature: (peerIdentity: string) => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/sharedState.ts","line_range":[365,369],"symbol_name":"SharedState.markPeerHttpOnly","language":"typescript","module_resolution_path":"@/utilities/sharedState"},"relationships":{"depends_on":["sym-b744b3f0ca52230821cd7c09"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["dotenv","node-forge","ntp-client","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption","env:CONSENSUS_CHECK_INTERVAL","env:CONSENSUS_TIME","env:EXPOSED_URL","env:IDENTITY_FILE","env:MAIN_LOOP_SLEEP_TIME","env:MAX_MESSAGE_SIZE","env:PEER_LIST_FILE","env:PROD","env:RPC_FEE_PERCENT","env:SHARD_SIZE","env:SUDO_PUBKEY","env:WHITELISTED_IPS","env:WHITELISTED_KEYS"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-b744b3f0ca52230821cd7c09","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SharedState (class) exported from `src/utilities/sharedState.ts`."],"intent_vectors":["utilities","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/sharedState.ts","line_range":[21,371],"symbol_name":"SharedState","language":"typescript","module_resolution_path":"@/utilities/sharedState"},"relationships":{"depends_on":["mod-59e682c774f84720b4dbee26"],"depended_by":["sym-52d5306f84e203c25cde4d63","sym-63378d99f547426255e3c6b2","sym-2fe136d4f31355269119cc07","sym-2006e105b13b6da460a2f036","sym-fd5416bb9f103468749a2fb6","sym-e730f1acbf64d766fa3ab2c5","sym-27eafd904c9cc9f3be773db2","sym-9a7c16a46499c4474bfa9c28","sym-5abf751f46445a56272194fe","sym-f4c49cb6c933e15281dc470d","sym-204abff3c5eec17740212ccd","sym-bce0a60c8b027a23cbb66a0b","sym-2bf80b379b628fe1463b323d","sym-3b9e32f6d2845b4593c6cf03","sym-dfc183b8a51720a3c7acb951","sym-fdea233f51c4f9253f57b5fa","sym-409ae2c860c3d547932b22bf","sym-f1b2b407c8dfa52f9ea4da3a","sym-23c9f147a5e10bca9cda218d","sym-d3aa764874845bfa486fda13"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["dotenv","node-forge","ntp-client","@kynesyslabs/demosdk/types","@kynesyslabs/demosdk/encryption","env:CONSENSUS_CHECK_INTERVAL","env:CONSENSUS_TIME","env:EXPOSED_URL","env:IDENTITY_FILE","env:MAIN_LOOP_SLEEP_TIME","env:MAX_MESSAGE_SIZE","env:PEER_LIST_FILE","env:PROD","env:RPC_FEE_PERCENT","env:SHARD_SIZE","env:SUDO_PUBKEY","env:WHITELISTED_IPS","env:WHITELISTED_KEYS"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-ed461adfd8dc4f058d796f5b","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["sizeOf (function) exported from `src/utilities/sizeOf.ts`.","TypeScript signature: (object: any) => number."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/sizeOf.ts","line_range":[2,28],"symbol_name":"sizeOf","language":"typescript","module_resolution_path":"@/utilities/sizeOf"},"relationships":{"depends_on":["mod-1b2ebbc2a937e6ac49f4abba"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"sym-ba3b3568b45ce5bc207be950","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `LogLevel` in `src/utilities/tui/CategorizedLogger.ts`.","Log severity levels"],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[20,20],"symbol_name":"LogLevel::api","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["sym-94693360f161a1af80920aaa"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 17-19","related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-94693360f161a1af80920aaa","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["LogLevel (type) exported from `src/utilities/tui/CategorizedLogger.ts`.","Log severity levels"],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[20,20],"symbol_name":"LogLevel","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["mod-af922777bca2943d44bdba1f"],"depended_by":["sym-ba3b3568b45ce5bc207be950"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 17-19","related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-9bf79a1b040d2b717c1a5b1c","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `LogCategory` in `src/utilities/tui/CategorizedLogger.ts`.","Log categories for filtering and organization"],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[25,37],"symbol_name":"LogCategory::api","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["sym-c23128ccef9064fd5a9eb6be"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 22-24","related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-c23128ccef9064fd5a9eb6be","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["LogCategory (type) exported from `src/utilities/tui/CategorizedLogger.ts`.","Log categories for filtering and organization"],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[25,37],"symbol_name":"LogCategory","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["mod-af922777bca2943d44bdba1f"],"depended_by":["sym-9bf79a1b040d2b717c1a5b1c"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 22-24","related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-76e9719e4a837d746f1fa769","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `LogEntry` in `src/utilities/tui/CategorizedLogger.ts`.","A single log entry"],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[42,48],"symbol_name":"LogEntry::api","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["sym-ae4c5105ad70fa5d16a460d4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 39-41","related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-ae4c5105ad70fa5d16a460d4","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["LogEntry (interface) exported from `src/utilities/tui/CategorizedLogger.ts`.","A single log entry"],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[42,48],"symbol_name":"LogEntry","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["mod-af922777bca2943d44bdba1f"],"depended_by":["sym-76e9719e4a837d746f1fa769"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 39-41","related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-d4b1406d39589498a37359a6","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `LoggerConfig` in `src/utilities/tui/CategorizedLogger.ts`.","Logger configuration options"],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[53,68],"symbol_name":"LoggerConfig::api","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["sym-7877e2c46b0481d30b1295d8"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 50-52","related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-7877e2c46b0481d30b1295d8","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["LoggerConfig (interface) exported from `src/utilities/tui/CategorizedLogger.ts`.","Logger configuration options"],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[53,68],"symbol_name":"LoggerConfig","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["mod-af922777bca2943d44bdba1f"],"depended_by":["sym-d4b1406d39589498a37359a6"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 50-52","related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-781b5402e62da25888f26f70","level":"L3","extraction_confidence":0.7999999999999999,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `CategorizedLogger` in `src/utilities/tui/CategorizedLogger.ts`.","CategorizedLogger - Singleton logger with category support and TUI integration"],"intent_vectors":["utilities","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[209,950],"symbol_name":"CategorizedLogger::api","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["sym-d399da6b951448492878f2f3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 206-208","related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-2f9702f503e3a0e90c14043d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CategorizedLogger.getInstance method on exported class `CategorizedLogger` in `src/utilities/tui/CategorizedLogger.ts`.","TypeScript signature: (config: LoggerConfig) => CategorizedLogger."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[260,265],"symbol_name":"CategorizedLogger.getInstance","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["sym-d399da6b951448492878f2f3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-04f86cd0f12ab44263506f89","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CategorizedLogger.resetInstance method on exported class `CategorizedLogger` in `src/utilities/tui/CategorizedLogger.ts`.","TypeScript signature: () => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[270,275],"symbol_name":"CategorizedLogger.resetInstance","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["sym-d399da6b951448492878f2f3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-72d5ce5c5a92d40503d3413c","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CategorizedLogger.initLogsDir method on exported class `CategorizedLogger` in `src/utilities/tui/CategorizedLogger.ts`.","TypeScript signature: (logsDir: string, suffix: string) => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[282,296],"symbol_name":"CategorizedLogger.initLogsDir","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["sym-d399da6b951448492878f2f3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-cdd197a381f19cac93a75638","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CategorizedLogger.enableTuiMode method on exported class `CategorizedLogger` in `src/utilities/tui/CategorizedLogger.ts`.","TypeScript signature: () => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[301,304],"symbol_name":"CategorizedLogger.enableTuiMode","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["sym-d399da6b951448492878f2f3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-c3d369dafd1d67373ba6737a","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CategorizedLogger.disableTuiMode method on exported class `CategorizedLogger` in `src/utilities/tui/CategorizedLogger.ts`.","TypeScript signature: () => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[309,312],"symbol_name":"CategorizedLogger.disableTuiMode","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["sym-d399da6b951448492878f2f3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-6c15138dd9db2d1c461b5f11","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CategorizedLogger.isTuiMode method on exported class `CategorizedLogger` in `src/utilities/tui/CategorizedLogger.ts`.","TypeScript signature: () => boolean."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[317,319],"symbol_name":"CategorizedLogger.isTuiMode","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["sym-d399da6b951448492878f2f3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-ee0653128098a581b53941db","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CategorizedLogger.setMinLevel method on exported class `CategorizedLogger` in `src/utilities/tui/CategorizedLogger.ts`.","TypeScript signature: (level: LogLevel) => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[324,327],"symbol_name":"CategorizedLogger.setMinLevel","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["sym-d399da6b951448492878f2f3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-55213cf6f6edcbb76ee59eaa","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CategorizedLogger.setEnabledCategories method on exported class `CategorizedLogger` in `src/utilities/tui/CategorizedLogger.ts`.","TypeScript signature: (categories: LogCategory[]) => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[332,335],"symbol_name":"CategorizedLogger.setEnabledCategories","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["sym-d399da6b951448492878f2f3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-b0c8f99e6c93ca9706d1f8ee","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CategorizedLogger.getConfig method on exported class `CategorizedLogger` in `src/utilities/tui/CategorizedLogger.ts`.","TypeScript signature: () => Required."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[340,342],"symbol_name":"CategorizedLogger.getConfig","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["sym-d399da6b951448492878f2f3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-ac0e2088100b56d149dae697","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CategorizedLogger.debug method on exported class `CategorizedLogger` in `src/utilities/tui/CategorizedLogger.ts`.","TypeScript signature: (category: LogCategory, message: string) => LogEntry | null."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[405,408],"symbol_name":"CategorizedLogger.debug","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["sym-d399da6b951448492878f2f3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-43d5acdefe01681708b5270d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CategorizedLogger.info method on exported class `CategorizedLogger` in `src/utilities/tui/CategorizedLogger.ts`.","TypeScript signature: (category: LogCategory, message: string) => LogEntry | null."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[413,416],"symbol_name":"CategorizedLogger.info","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["sym-d399da6b951448492878f2f3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-5da4340e9bf03a4ed4cbb269","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CategorizedLogger.warning method on exported class `CategorizedLogger` in `src/utilities/tui/CategorizedLogger.ts`.","TypeScript signature: (category: LogCategory, message: string) => LogEntry | null."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[421,424],"symbol_name":"CategorizedLogger.warning","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["sym-d399da6b951448492878f2f3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-1d0c0bdd7a0a0aa7bb5a8132","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CategorizedLogger.error method on exported class `CategorizedLogger` in `src/utilities/tui/CategorizedLogger.ts`.","TypeScript signature: (category: LogCategory, message: string) => LogEntry | null."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[429,432],"symbol_name":"CategorizedLogger.error","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["sym-d399da6b951448492878f2f3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-6f44a6b4d80bb5efb733bbba","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CategorizedLogger.critical method on exported class `CategorizedLogger` in `src/utilities/tui/CategorizedLogger.ts`.","TypeScript signature: (category: LogCategory, message: string) => LogEntry | null."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[437,440],"symbol_name":"CategorizedLogger.critical","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["sym-d399da6b951448492878f2f3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-86d08eb8a6c3bae40f8bde7f","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CategorizedLogger.forceRotationCheck method on exported class `CategorizedLogger` in `src/utilities/tui/CategorizedLogger.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[724,727],"symbol_name":"CategorizedLogger.forceRotationCheck","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["sym-d399da6b951448492878f2f3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-8e9dd2a259270ebe8d2e9e75","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CategorizedLogger.getLogsDirSize method on exported class `CategorizedLogger` in `src/utilities/tui/CategorizedLogger.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[732,756],"symbol_name":"CategorizedLogger.getLogsDirSize","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["sym-d399da6b951448492878f2f3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-18cc014a13ffb8e6794c9864","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CategorizedLogger.getAllEntries method on exported class `CategorizedLogger` in `src/utilities/tui/CategorizedLogger.ts`.","TypeScript signature: () => LogEntry[]."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[840,855],"symbol_name":"CategorizedLogger.getAllEntries","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["sym-d399da6b951448492878f2f3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-fe8380a376b6e0e2a1cc0bd8","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CategorizedLogger.getLastEntries method on exported class `CategorizedLogger` in `src/utilities/tui/CategorizedLogger.ts`.","TypeScript signature: (n: number) => LogEntry[]."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[860,863],"symbol_name":"CategorizedLogger.getLastEntries","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["sym-d399da6b951448492878f2f3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-b79e1fe7188c4b7b8e158cb0","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CategorizedLogger.getEntriesByCategory method on exported class `CategorizedLogger` in `src/utilities/tui/CategorizedLogger.ts`.","TypeScript signature: (category: LogCategory) => LogEntry[]."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[868,871],"symbol_name":"CategorizedLogger.getEntriesByCategory","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["sym-d399da6b951448492878f2f3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-eae366c1c6cebf792390d7b7","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CategorizedLogger.getEntriesByLevel method on exported class `CategorizedLogger` in `src/utilities/tui/CategorizedLogger.ts`.","TypeScript signature: (level: LogLevel) => LogEntry[]."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[876,879],"symbol_name":"CategorizedLogger.getEntriesByLevel","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["sym-d399da6b951448492878f2f3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-0c7b7ace29b6cdc63325e02d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CategorizedLogger.getEntries method on exported class `CategorizedLogger` in `src/utilities/tui/CategorizedLogger.ts`.","TypeScript signature: (category: LogCategory, level: LogLevel) => LogEntry[]."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[884,891],"symbol_name":"CategorizedLogger.getEntries","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["sym-d399da6b951448492878f2f3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-f9dc91b5e70e8a5b5d1ffa7e","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CategorizedLogger.clearBuffer method on exported class `CategorizedLogger` in `src/utilities/tui/CategorizedLogger.ts`.","TypeScript signature: () => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[896,903],"symbol_name":"CategorizedLogger.clearBuffer","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["sym-d399da6b951448492878f2f3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-9f05d203f674eec06b233dae","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CategorizedLogger.getBufferSize method on exported class `CategorizedLogger` in `src/utilities/tui/CategorizedLogger.ts`.","TypeScript signature: () => number."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[908,914],"symbol_name":"CategorizedLogger.getBufferSize","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["sym-d399da6b951448492878f2f3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-2026315fe1b610a31721ea8f","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CategorizedLogger.cleanLogs method on exported class `CategorizedLogger` in `src/utilities/tui/CategorizedLogger.ts`.","TypeScript signature: (includeCategory: unknown) => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[921,935],"symbol_name":"CategorizedLogger.cleanLogs","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["sym-d399da6b951448492878f2f3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-dde7c60f79b0e85c17c546b2","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CategorizedLogger.getCategories method on exported class `CategorizedLogger` in `src/utilities/tui/CategorizedLogger.ts`.","TypeScript signature: () => LogCategory[]."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[940,942],"symbol_name":"CategorizedLogger.getCategories","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["sym-d399da6b951448492878f2f3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-055fb7e7be06d0d4dec566a4","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CategorizedLogger.getLevels method on exported class `CategorizedLogger` in `src/utilities/tui/CategorizedLogger.ts`.","TypeScript signature: () => LogLevel[]."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[947,949],"symbol_name":"CategorizedLogger.getLevels","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["sym-d399da6b951448492878f2f3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-d399da6b951448492878f2f3","level":"L2","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["CategorizedLogger (class) exported from `src/utilities/tui/CategorizedLogger.ts`.","CategorizedLogger - Singleton logger with category support and TUI integration"],"intent_vectors":["utilities","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[209,950],"symbol_name":"CategorizedLogger","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["mod-af922777bca2943d44bdba1f"],"depended_by":["sym-781b5402e62da25888f26f70","sym-2f9702f503e3a0e90c14043d","sym-04f86cd0f12ab44263506f89","sym-72d5ce5c5a92d40503d3413c","sym-cdd197a381f19cac93a75638","sym-c3d369dafd1d67373ba6737a","sym-6c15138dd9db2d1c461b5f11","sym-ee0653128098a581b53941db","sym-55213cf6f6edcbb76ee59eaa","sym-b0c8f99e6c93ca9706d1f8ee","sym-ac0e2088100b56d149dae697","sym-43d5acdefe01681708b5270d","sym-5da4340e9bf03a4ed4cbb269","sym-1d0c0bdd7a0a0aa7bb5a8132","sym-6f44a6b4d80bb5efb733bbba","sym-86d08eb8a6c3bae40f8bde7f","sym-8e9dd2a259270ebe8d2e9e75","sym-18cc014a13ffb8e6794c9864","sym-fe8380a376b6e0e2a1cc0bd8","sym-b79e1fe7188c4b7b8e158cb0","sym-eae366c1c6cebf792390d7b7","sym-0c7b7ace29b6cdc63325e02d","sym-f9dc91b5e70e8a5b5d1ffa7e","sym-9f05d203f674eec06b233dae","sym-2026315fe1b610a31721ea8f","sym-dde7c60f79b0e85c17c546b2","sym-055fb7e7be06d0d4dec566a4"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 206-208","related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-4fd1128f7dfc625d822a7318","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["default (export_default) exported from `src/utilities/tui/CategorizedLogger.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/CategorizedLogger.ts","line_range":[959,959],"symbol_name":"default","language":"typescript","module_resolution_path":"@/utilities/tui/CategorizedLogger"},"relationships":{"depends_on":["mod-af922777bca2943d44bdba1f"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["events","fs","path","env:LOG_LEVEL"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-9899d1280b44b8b713f7186b","level":"L3","extraction_confidence":0.87,"documentation_quality":"adequate","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `LegacyLoggerAdapter` in `src/utilities/tui/LegacyLoggerAdapter.ts`.","LegacyLoggerAdapter - Drop-in replacement for old Logger class"],"intent_vectors":["utilities","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/LegacyLoggerAdapter.ts","line_range":[64,380],"symbol_name":"LegacyLoggerAdapter::api","language":"typescript","module_resolution_path":"@/utilities/tui/LegacyLoggerAdapter"},"relationships":{"depends_on":["sym-c921746d54e98ddfe4ccb299"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 59-63","related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-80f5f7dcc6c29f5b623336a5","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["LegacyLoggerAdapter.setLogsDir method on exported class `LegacyLoggerAdapter` in `src/utilities/tui/LegacyLoggerAdapter.ts`.","TypeScript signature: (port: number) => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/LegacyLoggerAdapter.ts","line_range":[86,113],"symbol_name":"LegacyLoggerAdapter.setLogsDir","language":"typescript","module_resolution_path":"@/utilities/tui/LegacyLoggerAdapter"},"relationships":{"depends_on":["sym-c921746d54e98ddfe4ccb299"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-4f7092b7f911ab928f6cefb0","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["LegacyLoggerAdapter.info method on exported class `LegacyLoggerAdapter` in `src/utilities/tui/LegacyLoggerAdapter.ts`.","TypeScript signature: (message: unknown, extra: unknown) => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/LegacyLoggerAdapter.ts","line_range":[120,132],"symbol_name":"LegacyLoggerAdapter.info","language":"typescript","module_resolution_path":"@/utilities/tui/LegacyLoggerAdapter"},"relationships":{"depends_on":["sym-c921746d54e98ddfe4ccb299"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-dbc8f2bdea6abafb20dc6f3a","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["LegacyLoggerAdapter.error method on exported class `LegacyLoggerAdapter` in `src/utilities/tui/LegacyLoggerAdapter.ts`.","TypeScript signature: (message: unknown, extra: unknown) => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/LegacyLoggerAdapter.ts","line_range":[139,148],"symbol_name":"LegacyLoggerAdapter.error","language":"typescript","module_resolution_path":"@/utilities/tui/LegacyLoggerAdapter"},"relationships":{"depends_on":["sym-c921746d54e98ddfe4ccb299"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-a211dc84b6ff98afb9cfc21b","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["LegacyLoggerAdapter.debug method on exported class `LegacyLoggerAdapter` in `src/utilities/tui/LegacyLoggerAdapter.ts`.","TypeScript signature: (message: unknown, extra: unknown) => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/LegacyLoggerAdapter.ts","line_range":[155,166],"symbol_name":"LegacyLoggerAdapter.debug","language":"typescript","module_resolution_path":"@/utilities/tui/LegacyLoggerAdapter"},"relationships":{"depends_on":["sym-c921746d54e98ddfe4ccb299"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-82203bf45ef4bb93c42253b9","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["LegacyLoggerAdapter.warning method on exported class `LegacyLoggerAdapter` in `src/utilities/tui/LegacyLoggerAdapter.ts`.","TypeScript signature: (message: unknown, extra: unknown) => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/LegacyLoggerAdapter.ts","line_range":[173,184],"symbol_name":"LegacyLoggerAdapter.warning","language":"typescript","module_resolution_path":"@/utilities/tui/LegacyLoggerAdapter"},"relationships":{"depends_on":["sym-c921746d54e98ddfe4ccb299"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-fddd74010c8fb6ebd080f084","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["LegacyLoggerAdapter.warn method on exported class `LegacyLoggerAdapter` in `src/utilities/tui/LegacyLoggerAdapter.ts`.","TypeScript signature: (message: unknown, extra: unknown) => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/LegacyLoggerAdapter.ts","line_range":[189,191],"symbol_name":"LegacyLoggerAdapter.warn","language":"typescript","module_resolution_path":"@/utilities/tui/LegacyLoggerAdapter"},"relationships":{"depends_on":["sym-c921746d54e98ddfe4ccb299"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-082591d771f4e89c0f59f037","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["LegacyLoggerAdapter.critical method on exported class `LegacyLoggerAdapter` in `src/utilities/tui/LegacyLoggerAdapter.ts`.","TypeScript signature: (message: unknown, extra: unknown) => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/LegacyLoggerAdapter.ts","line_range":[198,207],"symbol_name":"LegacyLoggerAdapter.critical","language":"typescript","module_resolution_path":"@/utilities/tui/LegacyLoggerAdapter"},"relationships":{"depends_on":["sym-c921746d54e98ddfe4ccb299"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-d7e2be3959a27cc0115a6278","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["LegacyLoggerAdapter.custom method on exported class `LegacyLoggerAdapter` in `src/utilities/tui/LegacyLoggerAdapter.ts`.","TypeScript signature: (logfile: string, message: unknown, logToTerminal: unknown, cleanFile: unknown) => Promise."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/utilities/tui/LegacyLoggerAdapter.ts","line_range":[213,247],"symbol_name":"LegacyLoggerAdapter.custom","language":"typescript","module_resolution_path":"@/utilities/tui/LegacyLoggerAdapter"},"relationships":{"depends_on":["sym-c921746d54e98ddfe4ccb299"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["fs"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-dda97a72bb6e5d1d00d712f9","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["LegacyLoggerAdapter.only method on exported class `LegacyLoggerAdapter` in `src/utilities/tui/LegacyLoggerAdapter.ts`.","TypeScript signature: (message: unknown, padWithNewLines: unknown) => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/LegacyLoggerAdapter.ts","line_range":[255,282],"symbol_name":"LegacyLoggerAdapter.only","language":"typescript","module_resolution_path":"@/utilities/tui/LegacyLoggerAdapter"},"relationships":{"depends_on":["sym-c921746d54e98ddfe4ccb299"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-dfa2433e9d331751425b8dae","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["LegacyLoggerAdapter.disableOnlyMode method on exported class `LegacyLoggerAdapter` in `src/utilities/tui/LegacyLoggerAdapter.ts`.","TypeScript signature: () => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/LegacyLoggerAdapter.ts","line_range":[284,290],"symbol_name":"LegacyLoggerAdapter.disableOnlyMode","language":"typescript","module_resolution_path":"@/utilities/tui/LegacyLoggerAdapter"},"relationships":{"depends_on":["sym-c921746d54e98ddfe4ccb299"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-45dc1c54cecce36c5ec15a0c","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["LegacyLoggerAdapter.cleanLogs method on exported class `LegacyLoggerAdapter` in `src/utilities/tui/LegacyLoggerAdapter.ts`.","TypeScript signature: (withCustom: unknown) => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/LegacyLoggerAdapter.ts","line_range":[295,312],"symbol_name":"LegacyLoggerAdapter.cleanLogs","language":"typescript","module_resolution_path":"@/utilities/tui/LegacyLoggerAdapter"},"relationships":{"depends_on":["sym-c921746d54e98ddfe4ccb299"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-9564380b7ebb2e63900652de","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["LegacyLoggerAdapter.getPublicLogs method on exported class `LegacyLoggerAdapter` in `src/utilities/tui/LegacyLoggerAdapter.ts`.","TypeScript signature: () => string."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/LegacyLoggerAdapter.ts","line_range":[317,343],"symbol_name":"LegacyLoggerAdapter.getPublicLogs","language":"typescript","module_resolution_path":"@/utilities/tui/LegacyLoggerAdapter"},"relationships":{"depends_on":["sym-c921746d54e98ddfe4ccb299"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-17375e0b9ac1fb49cdfd2f17","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["LegacyLoggerAdapter.getDiagnostics method on exported class `LegacyLoggerAdapter` in `src/utilities/tui/LegacyLoggerAdapter.ts`.","TypeScript signature: () => string."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/LegacyLoggerAdapter.ts","line_range":[348,355],"symbol_name":"LegacyLoggerAdapter.getDiagnostics","language":"typescript","module_resolution_path":"@/utilities/tui/LegacyLoggerAdapter"},"relationships":{"depends_on":["sym-c921746d54e98ddfe4ccb299"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-4ab7557f715a615f22a172ff","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["LegacyLoggerAdapter.getCategorizedLogger method on exported class `LegacyLoggerAdapter` in `src/utilities/tui/LegacyLoggerAdapter.ts`.","TypeScript signature: () => CategorizedLogger."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/LegacyLoggerAdapter.ts","line_range":[363,365],"symbol_name":"LegacyLoggerAdapter.getCategorizedLogger","language":"typescript","module_resolution_path":"@/utilities/tui/LegacyLoggerAdapter"},"relationships":{"depends_on":["sym-c921746d54e98ddfe4ccb299"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-d3a9dd89e91e26e2a9f0ce24","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["LegacyLoggerAdapter.enableTuiMode method on exported class `LegacyLoggerAdapter` in `src/utilities/tui/LegacyLoggerAdapter.ts`.","TypeScript signature: () => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/LegacyLoggerAdapter.ts","line_range":[370,372],"symbol_name":"LegacyLoggerAdapter.enableTuiMode","language":"typescript","module_resolution_path":"@/utilities/tui/LegacyLoggerAdapter"},"relationships":{"depends_on":["sym-c921746d54e98ddfe4ccb299"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-0a750a740b1b99f0d75cb6cb","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["LegacyLoggerAdapter.disableTuiMode method on exported class `LegacyLoggerAdapter` in `src/utilities/tui/LegacyLoggerAdapter.ts`.","TypeScript signature: () => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/LegacyLoggerAdapter.ts","line_range":[377,379],"symbol_name":"LegacyLoggerAdapter.disableTuiMode","language":"typescript","module_resolution_path":"@/utilities/tui/LegacyLoggerAdapter"},"relationships":{"depends_on":["sym-c921746d54e98ddfe4ccb299"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-c921746d54e98ddfe4ccb299","level":"L2","extraction_confidence":0.92,"documentation_quality":"rich","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["LegacyLoggerAdapter (class) exported from `src/utilities/tui/LegacyLoggerAdapter.ts`.","LegacyLoggerAdapter - Drop-in replacement for old Logger class"],"intent_vectors":["utilities","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/LegacyLoggerAdapter.ts","line_range":[64,380],"symbol_name":"LegacyLoggerAdapter","language":"typescript","module_resolution_path":"@/utilities/tui/LegacyLoggerAdapter"},"relationships":{"depends_on":["mod-481b5289c108ab245dd3ad27"],"depended_by":["sym-9899d1280b44b8b713f7186b","sym-80f5f7dcc6c29f5b623336a5","sym-4f7092b7f911ab928f6cefb0","sym-dbc8f2bdea6abafb20dc6f3a","sym-a211dc84b6ff98afb9cfc21b","sym-82203bf45ef4bb93c42253b9","sym-fddd74010c8fb6ebd080f084","sym-082591d771f4e89c0f59f037","sym-d7e2be3959a27cc0115a6278","sym-dda97a72bb6e5d1d00d712f9","sym-dfa2433e9d331751425b8dae","sym-45dc1c54cecce36c5ec15a0c","sym-9564380b7ebb2e63900652de","sym-17375e0b9ac1fb49cdfd2f17","sym-4ab7557f715a615f22a172ff","sym-d3a9dd89e91e26e2a9f0ce24","sym-0a750a740b1b99f0d75cb6cb"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["fs"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 59-63","related_adr":null,"last_modified":"2026-02-18T13:23:55.611Z","authors":[]}} +{"uuid":"sym-c9824622ec971ea3d7836742","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `NodeInfo` in `src/utilities/tui/TUIManager.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/TUIManager.ts","line_range":[19,33],"symbol_name":"NodeInfo::api","language":"typescript","module_resolution_path":"@/utilities/tui/TUIManager"},"relationships":{"depends_on":["sym-0f1cb478ccecdbc8fd539805"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["terminal-kit","events"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-0f1cb478ccecdbc8fd539805","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["NodeInfo (interface) exported from `src/utilities/tui/TUIManager.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/TUIManager.ts","line_range":[19,33],"symbol_name":"NodeInfo","language":"typescript","module_resolution_path":"@/utilities/tui/TUIManager"},"relationships":{"depends_on":["mod-9066efb52e5f511aa3343c63"],"depended_by":["sym-c9824622ec971ea3d7836742"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["terminal-kit","events"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-aec4be2724359a1e9a6546dd","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `TUIConfig` in `src/utilities/tui/TUIManager.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/TUIManager.ts","line_range":[35,40],"symbol_name":"TUIConfig::api","language":"typescript","module_resolution_path":"@/utilities/tui/TUIManager"},"relationships":{"depends_on":["sym-68723b3207631cc64e03a451"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["terminal-kit","events"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-68723b3207631cc64e03a451","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TUIConfig (interface) exported from `src/utilities/tui/TUIManager.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/TUIManager.ts","line_range":[35,40],"symbol_name":"TUIConfig","language":"typescript","module_resolution_path":"@/utilities/tui/TUIManager"},"relationships":{"depends_on":["mod-9066efb52e5f511aa3343c63"],"depended_by":["sym-aec4be2724359a1e9a6546dd"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["terminal-kit","events"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-1ee36baf48ad1c31f1bd864a","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `TUIManager` in `src/utilities/tui/TUIManager.ts`."],"intent_vectors":["utilities","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/TUIManager.ts","line_range":[186,1492],"symbol_name":"TUIManager::api","language":"typescript","module_resolution_path":"@/utilities/tui/TUIManager"},"relationships":{"depends_on":["sym-26c9da6ec5614cb93a5cbe2c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["terminal-kit","events"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-1584cdd93ecbeecaf0d06785","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TUIManager.getInstance method on exported class `TUIManager` in `src/utilities/tui/TUIManager.ts`.","TypeScript signature: (config: TUIConfig) => TUIManager."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/TUIManager.ts","line_range":[245,250],"symbol_name":"TUIManager.getInstance","language":"typescript","module_resolution_path":"@/utilities/tui/TUIManager"},"relationships":{"depends_on":["sym-26c9da6ec5614cb93a5cbe2c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["terminal-kit","events"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-aaa74a6a96d21052af1b6ccd","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TUIManager.resetInstance method on exported class `TUIManager` in `src/utilities/tui/TUIManager.ts`.","TypeScript signature: () => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/TUIManager.ts","line_range":[255,260],"symbol_name":"TUIManager.resetInstance","language":"typescript","module_resolution_path":"@/utilities/tui/TUIManager"},"relationships":{"depends_on":["sym-26c9da6ec5614cb93a5cbe2c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["terminal-kit","events"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-603fda2dd0ee016efe3f346d","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TUIManager.start method on exported class `TUIManager` in `src/utilities/tui/TUIManager.ts`.","TypeScript signature: () => Promise."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/utilities/tui/TUIManager.ts","line_range":[276,309],"symbol_name":"TUIManager.start","language":"typescript","module_resolution_path":"@/utilities/tui/TUIManager"},"relationships":{"depends_on":["sym-26c9da6ec5614cb93a5cbe2c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["terminal-kit","events"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-6d22d6ded32c3dd355956301","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TUIManager.stop method on exported class `TUIManager` in `src/utilities/tui/TUIManager.ts`.","TypeScript signature: () => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/TUIManager.ts","line_range":[314,349],"symbol_name":"TUIManager.stop","language":"typescript","module_resolution_path":"@/utilities/tui/TUIManager"},"relationships":{"depends_on":["sym-26c9da6ec5614cb93a5cbe2c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["terminal-kit","events"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-e0c1948adba5f44503e6bedf","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TUIManager.getIsRunning method on exported class `TUIManager` in `src/utilities/tui/TUIManager.ts`.","TypeScript signature: () => boolean."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/TUIManager.ts","line_range":[460,462],"symbol_name":"TUIManager.getIsRunning","language":"typescript","module_resolution_path":"@/utilities/tui/TUIManager"},"relationships":{"depends_on":["sym-26c9da6ec5614cb93a5cbe2c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["terminal-kit","events"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-ec7aeba1622d8fa5b5e46748","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TUIManager.addCmdOutput method on exported class `TUIManager` in `src/utilities/tui/TUIManager.ts`.","TypeScript signature: (line: string) => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/TUIManager.ts","line_range":[720,726],"symbol_name":"TUIManager.addCmdOutput","language":"typescript","module_resolution_path":"@/utilities/tui/TUIManager"},"relationships":{"depends_on":["sym-26c9da6ec5614cb93a5cbe2c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["terminal-kit","events"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-8910a56520e9fd20039ba58a","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TUIManager.clearCmdOutput method on exported class `TUIManager` in `src/utilities/tui/TUIManager.ts`.","TypeScript signature: () => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/TUIManager.ts","line_range":[731,733],"symbol_name":"TUIManager.clearCmdOutput","language":"typescript","module_resolution_path":"@/utilities/tui/TUIManager"},"relationships":{"depends_on":["sym-26c9da6ec5614cb93a5cbe2c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["terminal-kit","events"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-cf09bd7a00a0fff651c887d5","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TUIManager.setActiveTab method on exported class `TUIManager` in `src/utilities/tui/TUIManager.ts`.","TypeScript signature: (index: number) => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/TUIManager.ts","line_range":[779,805],"symbol_name":"TUIManager.setActiveTab","language":"typescript","module_resolution_path":"@/utilities/tui/TUIManager"},"relationships":{"depends_on":["sym-26c9da6ec5614cb93a5cbe2c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["terminal-kit","events"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-e7df602bf2c2cdf1b6e81783","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TUIManager.nextTab method on exported class `TUIManager` in `src/utilities/tui/TUIManager.ts`.","TypeScript signature: () => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/TUIManager.ts","line_range":[810,812],"symbol_name":"TUIManager.nextTab","language":"typescript","module_resolution_path":"@/utilities/tui/TUIManager"},"relationships":{"depends_on":["sym-26c9da6ec5614cb93a5cbe2c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["terminal-kit","events"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-d5aac31d3222f78ac81d1cce","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TUIManager.previousTab method on exported class `TUIManager` in `src/utilities/tui/TUIManager.ts`.","TypeScript signature: () => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/TUIManager.ts","line_range":[817,819],"symbol_name":"TUIManager.previousTab","language":"typescript","module_resolution_path":"@/utilities/tui/TUIManager"},"relationships":{"depends_on":["sym-26c9da6ec5614cb93a5cbe2c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["terminal-kit","events"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-7437b3859c8f71906b326942","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TUIManager.getActiveTab method on exported class `TUIManager` in `src/utilities/tui/TUIManager.ts`.","TypeScript signature: () => Tab."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/TUIManager.ts","line_range":[824,826],"symbol_name":"TUIManager.getActiveTab","language":"typescript","module_resolution_path":"@/utilities/tui/TUIManager"},"relationships":{"depends_on":["sym-26c9da6ec5614cb93a5cbe2c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["terminal-kit","events"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-21f8970b0263857feb2076bd","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TUIManager.scrollUp method on exported class `TUIManager` in `src/utilities/tui/TUIManager.ts`.","TypeScript signature: () => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/TUIManager.ts","line_range":[833,845],"symbol_name":"TUIManager.scrollUp","language":"typescript","module_resolution_path":"@/utilities/tui/TUIManager"},"relationships":{"depends_on":["sym-26c9da6ec5614cb93a5cbe2c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["terminal-kit","events"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-56cc7d0a4fbf72d5761c93c6","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TUIManager.scrollDown method on exported class `TUIManager` in `src/utilities/tui/TUIManager.ts`.","TypeScript signature: () => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/TUIManager.ts","line_range":[850,858],"symbol_name":"TUIManager.scrollDown","language":"typescript","module_resolution_path":"@/utilities/tui/TUIManager"},"relationships":{"depends_on":["sym-26c9da6ec5614cb93a5cbe2c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["terminal-kit","events"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-d573864fe75ac3cf41e023b1","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TUIManager.scrollPageUp method on exported class `TUIManager` in `src/utilities/tui/TUIManager.ts`.","TypeScript signature: () => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/TUIManager.ts","line_range":[863,872],"symbol_name":"TUIManager.scrollPageUp","language":"typescript","module_resolution_path":"@/utilities/tui/TUIManager"},"relationships":{"depends_on":["sym-26c9da6ec5614cb93a5cbe2c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["terminal-kit","events"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-998a3174e4ea3a870d968db4","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TUIManager.scrollPageDown method on exported class `TUIManager` in `src/utilities/tui/TUIManager.ts`.","TypeScript signature: () => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/TUIManager.ts","line_range":[877,884],"symbol_name":"TUIManager.scrollPageDown","language":"typescript","module_resolution_path":"@/utilities/tui/TUIManager"},"relationships":{"depends_on":["sym-26c9da6ec5614cb93a5cbe2c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["terminal-kit","events"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-7843fb24dcdf29e0ad1a89c4","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TUIManager.scrollToTop method on exported class `TUIManager` in `src/utilities/tui/TUIManager.ts`.","TypeScript signature: () => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/TUIManager.ts","line_range":[889,897],"symbol_name":"TUIManager.scrollToTop","language":"typescript","module_resolution_path":"@/utilities/tui/TUIManager"},"relationships":{"depends_on":["sym-26c9da6ec5614cb93a5cbe2c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["terminal-kit","events"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-9daff3528e190c43c7fadfb4","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TUIManager.scrollToBottom method on exported class `TUIManager` in `src/utilities/tui/TUIManager.ts`.","TypeScript signature: () => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/TUIManager.ts","line_range":[902,907],"symbol_name":"TUIManager.scrollToBottom","language":"typescript","module_resolution_path":"@/utilities/tui/TUIManager"},"relationships":{"depends_on":["sym-26c9da6ec5614cb93a5cbe2c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["terminal-kit","events"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-bbf1ba131604cac1e3b85d2b","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TUIManager.toggleAutoScroll method on exported class `TUIManager` in `src/utilities/tui/TUIManager.ts`.","TypeScript signature: () => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/TUIManager.ts","line_range":[912,924],"symbol_name":"TUIManager.toggleAutoScroll","language":"typescript","module_resolution_path":"@/utilities/tui/TUIManager"},"relationships":{"depends_on":["sym-26c9da6ec5614cb93a5cbe2c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["terminal-kit","events"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-722a0a340f4e87cb3ce49574","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TUIManager.clearLogs method on exported class `TUIManager` in `src/utilities/tui/TUIManager.ts`.","TypeScript signature: () => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/TUIManager.ts","line_range":[957,963],"symbol_name":"TUIManager.clearLogs","language":"typescript","module_resolution_path":"@/utilities/tui/TUIManager"},"relationships":{"depends_on":["sym-26c9da6ec5614cb93a5cbe2c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["terminal-kit","events"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-f0ddfadb3965aa19186ce2d4","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TUIManager.updateNodeInfo method on exported class `TUIManager` in `src/utilities/tui/TUIManager.ts`.","TypeScript signature: (info: Partial) => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/TUIManager.ts","line_range":[970,972],"symbol_name":"TUIManager.updateNodeInfo","language":"typescript","module_resolution_path":"@/utilities/tui/TUIManager"},"relationships":{"depends_on":["sym-26c9da6ec5614cb93a5cbe2c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["terminal-kit","events"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-0cbb1488218c6c01fa1169f5","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TUIManager.getNodeInfo method on exported class `TUIManager` in `src/utilities/tui/TUIManager.ts`.","TypeScript signature: () => NodeInfo."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/TUIManager.ts","line_range":[977,979],"symbol_name":"TUIManager.getNodeInfo","language":"typescript","module_resolution_path":"@/utilities/tui/TUIManager"},"relationships":{"depends_on":["sym-26c9da6ec5614cb93a5cbe2c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["terminal-kit","events"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-88560f9541ccc56b6891aa20","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TUIManager.render method on exported class `TUIManager` in `src/utilities/tui/TUIManager.ts`.","TypeScript signature: () => void."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/TUIManager.ts","line_range":[1008,1034],"symbol_name":"TUIManager.render","language":"typescript","module_resolution_path":"@/utilities/tui/TUIManager"},"relationships":{"depends_on":["sym-26c9da6ec5614cb93a5cbe2c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["terminal-kit","events"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-26c9da6ec5614cb93a5cbe2c","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TUIManager (class) exported from `src/utilities/tui/TUIManager.ts`."],"intent_vectors":["utilities","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/TUIManager.ts","line_range":[186,1492],"symbol_name":"TUIManager","language":"typescript","module_resolution_path":"@/utilities/tui/TUIManager"},"relationships":{"depends_on":["mod-9066efb52e5f511aa3343c63"],"depended_by":["sym-1ee36baf48ad1c31f1bd864a","sym-1584cdd93ecbeecaf0d06785","sym-aaa74a6a96d21052af1b6ccd","sym-603fda2dd0ee016efe3f346d","sym-6d22d6ded32c3dd355956301","sym-e0c1948adba5f44503e6bedf","sym-ec7aeba1622d8fa5b5e46748","sym-8910a56520e9fd20039ba58a","sym-cf09bd7a00a0fff651c887d5","sym-e7df602bf2c2cdf1b6e81783","sym-d5aac31d3222f78ac81d1cce","sym-7437b3859c8f71906b326942","sym-21f8970b0263857feb2076bd","sym-56cc7d0a4fbf72d5761c93c6","sym-d573864fe75ac3cf41e023b1","sym-998a3174e4ea3a870d968db4","sym-7843fb24dcdf29e0ad1a89c4","sym-9daff3528e190c43c7fadfb4","sym-bbf1ba131604cac1e3b85d2b","sym-722a0a340f4e87cb3ce49574","sym-f0ddfadb3965aa19186ce2d4","sym-0cbb1488218c6c01fa1169f5","sym-88560f9541ccc56b6891aa20"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["terminal-kit","events"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-fcf030aedb37dcce1a78108d","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["CategorizedLogger (re_export) exported from `src/utilities/tui/index.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/index.ts","line_range":[11,11],"symbol_name":"CategorizedLogger","language":"typescript","module_resolution_path":"@/utilities/tui/index"},"relationships":{"depends_on":["mod-afb8062b9c4d4f2ec0da49a0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"sym-0f16b4cda74d61ad3da42579","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["LogLevel (re_export) exported from `src/utilities/tui/index.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/index.ts","line_range":[15,15],"symbol_name":"LogLevel","language":"typescript","module_resolution_path":"@/utilities/tui/index"},"relationships":{"depends_on":["mod-afb8062b9c4d4f2ec0da49a0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"sym-97c7f2bb4907e815e518d1fe","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["LogCategory (re_export) exported from `src/utilities/tui/index.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/index.ts","line_range":[16,16],"symbol_name":"LogCategory","language":"typescript","module_resolution_path":"@/utilities/tui/index"},"relationships":{"depends_on":["mod-afb8062b9c4d4f2ec0da49a0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"sym-80057b3541e00f7cc0458b89","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["LogEntry (re_export) exported from `src/utilities/tui/index.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/index.ts","line_range":[17,17],"symbol_name":"LogEntry","language":"typescript","module_resolution_path":"@/utilities/tui/index"},"relationships":{"depends_on":["mod-afb8062b9c4d4f2ec0da49a0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"sym-1e715c26e0832b512c931708","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["LoggerConfig (re_export) exported from `src/utilities/tui/index.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/index.ts","line_range":[18,18],"symbol_name":"LoggerConfig","language":"typescript","module_resolution_path":"@/utilities/tui/index"},"relationships":{"depends_on":["mod-afb8062b9c4d4f2ec0da49a0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"sym-c5dba2bba8b1f3ee3b45609e","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["LegacyLoggerAdapter (re_export) exported from `src/utilities/tui/index.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/index.ts","line_range":[22,22],"symbol_name":"LegacyLoggerAdapter","language":"typescript","module_resolution_path":"@/utilities/tui/index"},"relationships":{"depends_on":["mod-afb8062b9c4d4f2ec0da49a0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"sym-1fdf4231b9ddd41ccb09bca4","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["TUIManager (re_export) exported from `src/utilities/tui/index.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/index.ts","line_range":[25,25],"symbol_name":"TUIManager","language":"typescript","module_resolution_path":"@/utilities/tui/index"},"relationships":{"depends_on":["mod-afb8062b9c4d4f2ec0da49a0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"sym-7b2ceeaaadffca84918cad19","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["NodeInfo (re_export) exported from `src/utilities/tui/index.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/index.ts","line_range":[28,28],"symbol_name":"NodeInfo","language":"typescript","module_resolution_path":"@/utilities/tui/index"},"relationships":{"depends_on":["mod-afb8062b9c4d4f2ec0da49a0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"sym-e8a4ffa5ce3c70489f1f1aa7","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["TUIConfig (re_export) exported from `src/utilities/tui/index.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/index.ts","line_range":[28,28],"symbol_name":"TUIConfig","language":"typescript","module_resolution_path":"@/utilities/tui/index"},"relationships":{"depends_on":["mod-afb8062b9c4d4f2ec0da49a0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"sym-862a65237685e8c946afd441","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["default (re_export) exported from `src/utilities/tui/index.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/index.ts","line_range":[31,31],"symbol_name":"default","language":"typescript","module_resolution_path":"@/utilities/tui/index"},"relationships":{"depends_on":["mod-afb8062b9c4d4f2ec0da49a0"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"sym-a335758e6a5c9270bc4e17d4","level":"L3","extraction_confidence":0.85,"documentation_quality":"adequate","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TAG_TO_CATEGORY (variable) exported from `src/utilities/tui/tagCategories.ts`.","Maps old log tags to new categories."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/tagCategories.ts","line_range":[14,118],"symbol_name":"TAG_TO_CATEGORY","language":"typescript","module_resolution_path":"@/utilities/tui/tagCategories"},"relationships":{"depends_on":["mod-d9d28659a6e092680fe7bfe4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":"JSDoc 10-13","related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"sym-8a35aa0b8db3d2a1c36ae2a2","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["LogCategory (re_export) exported from `src/utilities/tui/tagCategories.ts`."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/tui/tagCategories.ts","line_range":[121,121],"symbol_name":"LogCategory","language":"typescript","module_resolution_path":"@/utilities/tui/tagCategories"},"relationships":{"depends_on":["mod-d9d28659a6e092680fe7bfe4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"sym-991e8f624f9a0de36c800ed6","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["validateIfUint8Array (function) exported from `src/utilities/validateUint8Array.ts`.","TypeScript signature: (input: unknown) => Uint8Array | unknown."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/validateUint8Array.ts","line_range":[1,42],"symbol_name":"validateIfUint8Array","language":"typescript","module_resolution_path":"@/utilities/validateUint8Array"},"relationships":{"depends_on":["mod-8e3a02ebf4990dac5ac1f328"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-03e2b3d5d7abb5be53bc31ef","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `Waiter` in `src/utilities/waiter.ts`."],"intent_vectors":["utilities","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/waiter.ts","line_range":[25,151],"symbol_name":"Waiter::api","language":"typescript","module_resolution_path":"@/utilities/waiter"},"relationships":{"depends_on":["sym-b51b7f2293f00327da000bdb"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-038a71a0f9c7bcd839c5e263","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Waiter.wait method on exported class `Waiter` in `src/utilities/waiter.ts`.","TypeScript signature: (id: string, timeout: unknown) => Promise."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"src/utilities/waiter.ts","line_range":[45,89],"symbol_name":"Waiter.wait","language":"typescript","module_resolution_path":"@/utilities/waiter"},"relationships":{"depends_on":["sym-b51b7f2293f00327da000bdb"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-8ee49e77dbe7d64bf9b0692a","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Waiter.resolve method on exported class `Waiter` in `src/utilities/waiter.ts`.","TypeScript signature: (id: string, data: T) => T."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/waiter.ts","line_range":[97,111],"symbol_name":"Waiter.resolve","language":"typescript","module_resolution_path":"@/utilities/waiter"},"relationships":{"depends_on":["sym-b51b7f2293f00327da000bdb"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-b22108e7980a952d6d61b0a7","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Waiter.preHold method on exported class `Waiter` in `src/utilities/waiter.ts`.","TypeScript signature: (id: string, data: any) => unknown."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/waiter.ts","line_range":[113,121],"symbol_name":"Waiter.preHold","language":"typescript","module_resolution_path":"@/utilities/waiter"},"relationships":{"depends_on":["sym-b51b7f2293f00327da000bdb"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-197422eff9f09646d17a07e0","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Waiter.abort method on exported class `Waiter` in `src/utilities/waiter.ts`.","TypeScript signature: (id: string) => unknown."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/waiter.ts","line_range":[128,140],"symbol_name":"Waiter.abort","language":"typescript","module_resolution_path":"@/utilities/waiter"},"relationships":{"depends_on":["sym-b51b7f2293f00327da000bdb"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-00610ea7a3c22dc0f5fc4392","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Waiter.isWaiting method on exported class `Waiter` in `src/utilities/waiter.ts`.","TypeScript signature: (id: string) => boolean."],"intent_vectors":["utilities"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/waiter.ts","line_range":[148,150],"symbol_name":"Waiter.isWaiting","language":"typescript","module_resolution_path":"@/utilities/waiter"},"relationships":{"depends_on":["sym-b51b7f2293f00327da000bdb"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-b51b7f2293f00327da000bdb","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Waiter (class) exported from `src/utilities/waiter.ts`."],"intent_vectors":["utilities","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"src/utilities/waiter.ts","line_range":[25,151],"symbol_name":"Waiter","language":"typescript","module_resolution_path":"@/utilities/waiter"},"relationships":{"depends_on":["mod-eb0798295c928ba399632ae3"],"depended_by":["sym-03e2b3d5d7abb5be53bc31ef","sym-038a71a0f9c7bcd839c5e263","sym-8ee49e77dbe7d64bf9b0692a","sym-b22108e7980a952d6d61b0a7","sym-197422eff9f09646d17a07e0","sym-00610ea7a3c22dc0f5fc4392"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-2189d115ce2b9c3d49fa0191","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `UserPoints` in `tests/mocks/demosdk-abstraction.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-abstraction.ts","line_range":[1,1],"symbol_name":"UserPoints::api","language":"typescript","module_resolution_path":"tests/mocks/demosdk-abstraction"},"relationships":{"depends_on":["sym-ab821687a4299d0d579d49c7"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"sym-ab821687a4299d0d579d49c7","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["UserPoints (type) exported from `tests/mocks/demosdk-abstraction.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-abstraction.ts","line_range":[1,1],"symbol_name":"UserPoints","language":"typescript","module_resolution_path":"tests/mocks/demosdk-abstraction"},"relationships":{"depends_on":["mod-877c0c159531ba36f25904bc"],"depended_by":["sym-2189d115ce2b9c3d49fa0191"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"sym-42527a84666c4a40976bd94d","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["default (export_default) exported from `tests/mocks/demosdk-abstraction.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-abstraction.ts","line_range":[3,3],"symbol_name":"default","language":"typescript","module_resolution_path":"tests/mocks/demosdk-abstraction"},"relationships":{"depends_on":["mod-877c0c159531ba36f25904bc"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"sym-baed646297ac7a253a25f030","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["default (export_default) exported from `tests/mocks/demosdk-build.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-build.ts","line_range":[1,1],"symbol_name":"default","language":"typescript","module_resolution_path":"tests/mocks/demosdk-build"},"relationships":{"depends_on":["mod-b4394327e0a18b4da4f0b23a"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"sym-64c96a6fbf2a162737330407","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ucrypto (variable) exported from `tests/mocks/demosdk-encryption.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-encryption.ts","line_range":[6,23],"symbol_name":"ucrypto","language":"typescript","module_resolution_path":"tests/mocks/demosdk-encryption"},"relationships":{"depends_on":["mod-97a0284402c885a38947f96c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":["buffer"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-832e0134a9591de63a109c96","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["uint8ArrayToHex (function) exported from `tests/mocks/demosdk-encryption.ts`.","TypeScript signature: (input: Uint8Array) => string."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-encryption.ts","line_range":[25,27],"symbol_name":"uint8ArrayToHex","language":"typescript","module_resolution_path":"tests/mocks/demosdk-encryption"},"relationships":{"depends_on":["mod-97a0284402c885a38947f96c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["buffer"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-9f42e311e2a8e48662a9fef9","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["hexToUint8Array (function) exported from `tests/mocks/demosdk-encryption.ts`.","TypeScript signature: (hex: string) => Uint8Array."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-encryption.ts","line_range":[29,32],"symbol_name":"hexToUint8Array","language":"typescript","module_resolution_path":"tests/mocks/demosdk-encryption"},"relationships":{"depends_on":["mod-97a0284402c885a38947f96c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":["buffer"],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-647f63977118e939cf37b752","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `RPCRequest` in `tests/mocks/demosdk-types.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-types.ts","line_range":[1,4],"symbol_name":"RPCRequest::api","language":"typescript","module_resolution_path":"tests/mocks/demosdk-types"},"relationships":{"depends_on":["sym-7bfe6f65424b8f960729882b"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-7bfe6f65424b8f960729882b","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RPCRequest (type) exported from `tests/mocks/demosdk-types.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-types.ts","line_range":[1,4],"symbol_name":"RPCRequest","language":"typescript","module_resolution_path":"tests/mocks/demosdk-types"},"relationships":{"depends_on":["mod-bd7e6bb16e1ad3ce391d135f"],"depended_by":["sym-647f63977118e939cf37b752"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-4874e5e75c46b3ce04368854","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `RPCResponse` in `tests/mocks/demosdk-types.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-types.ts","line_range":[6,11],"symbol_name":"RPCResponse::api","language":"typescript","module_resolution_path":"tests/mocks/demosdk-types"},"relationships":{"depends_on":["sym-f1d873115e6af0e4c19fc30d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-f1d873115e6af0e4c19fc30d","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["RPCResponse (type) exported from `tests/mocks/demosdk-types.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-types.ts","line_range":[6,11],"symbol_name":"RPCResponse","language":"typescript","module_resolution_path":"tests/mocks/demosdk-types"},"relationships":{"depends_on":["mod-bd7e6bb16e1ad3ce391d135f"],"depended_by":["sym-4874e5e75c46b3ce04368854"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-ef1200ce6553b633be306d70","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `SigningAlgorithm` in `tests/mocks/demosdk-types.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-types.ts","line_range":[13,13],"symbol_name":"SigningAlgorithm::api","language":"typescript","module_resolution_path":"tests/mocks/demosdk-types"},"relationships":{"depends_on":["sym-a7b3d969f28a61c51429f843"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-a7b3d969f28a61c51429f843","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["SigningAlgorithm (type) exported from `tests/mocks/demosdk-types.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-types.ts","line_range":[13,13],"symbol_name":"SigningAlgorithm","language":"typescript","module_resolution_path":"tests/mocks/demosdk-types"},"relationships":{"depends_on":["mod-bd7e6bb16e1ad3ce391d135f"],"depended_by":["sym-ef1200ce6553b633be306d70"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-7c99fb8ffcbe7d2ec41d5a8e","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported interface `IPeer` in `tests/mocks/demosdk-types.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-types.ts","line_range":[15,21],"symbol_name":"IPeer::api","language":"typescript","module_resolution_path":"tests/mocks/demosdk-types"},"relationships":{"depends_on":["sym-5357f545e8ae455cf1dae173"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-5357f545e8ae455cf1dae173","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IPeer (interface) exported from `tests/mocks/demosdk-types.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-types.ts","line_range":[15,21],"symbol_name":"IPeer","language":"typescript","module_resolution_path":"tests/mocks/demosdk-types"},"relationships":{"depends_on":["mod-bd7e6bb16e1ad3ce391d135f"],"depended_by":["sym-7c99fb8ffcbe7d2ec41d5a8e"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-b99103f09316ae6f02324395","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `Transaction` in `tests/mocks/demosdk-types.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-types.ts","line_range":[23,23],"symbol_name":"Transaction::api","language":"typescript","module_resolution_path":"tests/mocks/demosdk-types"},"relationships":{"depends_on":["sym-8ae3c2ab051a29a3e38274dd"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-8ae3c2ab051a29a3e38274dd","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Transaction (type) exported from `tests/mocks/demosdk-types.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-types.ts","line_range":[23,23],"symbol_name":"Transaction","language":"typescript","module_resolution_path":"tests/mocks/demosdk-types"},"relationships":{"depends_on":["mod-bd7e6bb16e1ad3ce391d135f"],"depended_by":["sym-b99103f09316ae6f02324395"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-6fad996cd780f83fa32a107f","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `TransactionContent` in `tests/mocks/demosdk-types.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-types.ts","line_range":[24,24],"symbol_name":"TransactionContent::api","language":"typescript","module_resolution_path":"tests/mocks/demosdk-types"},"relationships":{"depends_on":["sym-a9a76108c6152698a3e7bac3"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-a9a76108c6152698a3e7bac3","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["TransactionContent (type) exported from `tests/mocks/demosdk-types.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-types.ts","line_range":[24,24],"symbol_name":"TransactionContent","language":"typescript","module_resolution_path":"tests/mocks/demosdk-types"},"relationships":{"depends_on":["mod-bd7e6bb16e1ad3ce391d135f"],"depended_by":["sym-6fad996cd780f83fa32a107f"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-32aa27e94fd2c2b4253f8599","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `NativeTablesHashes` in `tests/mocks/demosdk-types.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-types.ts","line_range":[25,25],"symbol_name":"NativeTablesHashes::api","language":"typescript","module_resolution_path":"tests/mocks/demosdk-types"},"relationships":{"depends_on":["sym-9e3a0cabaea4ec69a300f18d"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-9e3a0cabaea4ec69a300f18d","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["NativeTablesHashes (type) exported from `tests/mocks/demosdk-types.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-types.ts","line_range":[25,25],"symbol_name":"NativeTablesHashes","language":"typescript","module_resolution_path":"tests/mocks/demosdk-types"},"relationships":{"depends_on":["mod-bd7e6bb16e1ad3ce391d135f"],"depended_by":["sym-32aa27e94fd2c2b4253f8599"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-2781fd4676b367f79a014c51","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `Web2GCRData` in `tests/mocks/demosdk-types.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-types.ts","line_range":[26,26],"symbol_name":"Web2GCRData::api","language":"typescript","module_resolution_path":"tests/mocks/demosdk-types"},"relationships":{"depends_on":["sym-d06a4eb520adc83b781eb1b7"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-d06a4eb520adc83b781eb1b7","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Web2GCRData (type) exported from `tests/mocks/demosdk-types.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-types.ts","line_range":[26,26],"symbol_name":"Web2GCRData","language":"typescript","module_resolution_path":"tests/mocks/demosdk-types"},"relationships":{"depends_on":["mod-bd7e6bb16e1ad3ce391d135f"],"depended_by":["sym-2781fd4676b367f79a014c51"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-782b8dfbf51fdf9fc11a6129","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `XMScript` in `tests/mocks/demosdk-types.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-types.ts","line_range":[27,27],"symbol_name":"XMScript::api","language":"typescript","module_resolution_path":"tests/mocks/demosdk-types"},"relationships":{"depends_on":["sym-e563ba4e1cba0422d3f6d351"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-e563ba4e1cba0422d3f6d351","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["XMScript (type) exported from `tests/mocks/demosdk-types.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-types.ts","line_range":[27,27],"symbol_name":"XMScript","language":"typescript","module_resolution_path":"tests/mocks/demosdk-types"},"relationships":{"depends_on":["mod-bd7e6bb16e1ad3ce391d135f"],"depended_by":["sym-782b8dfbf51fdf9fc11a6129"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-e9dd6caad492c208cbaa408f","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `Tweet` in `tests/mocks/demosdk-types.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-types.ts","line_range":[28,28],"symbol_name":"Tweet::api","language":"typescript","module_resolution_path":"tests/mocks/demosdk-types"},"relationships":{"depends_on":["sym-38a97c77e145541444f5b557"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-38a97c77e145541444f5b557","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Tweet (type) exported from `tests/mocks/demosdk-types.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-types.ts","line_range":[28,28],"symbol_name":"Tweet","language":"typescript","module_resolution_path":"tests/mocks/demosdk-types"},"relationships":{"depends_on":["mod-bd7e6bb16e1ad3ce391d135f"],"depended_by":["sym-e9dd6caad492c208cbaa408f"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-021d447da9c9cdc0a8828fbd","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `DiscordMessage` in `tests/mocks/demosdk-types.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-types.ts","line_range":[29,29],"symbol_name":"DiscordMessage::api","language":"typescript","module_resolution_path":"tests/mocks/demosdk-types"},"relationships":{"depends_on":["sym-77698a6f7f42a84ed2ee5769"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-77698a6f7f42a84ed2ee5769","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["DiscordMessage (type) exported from `tests/mocks/demosdk-types.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-types.ts","line_range":[29,29],"symbol_name":"DiscordMessage","language":"typescript","module_resolution_path":"tests/mocks/demosdk-types"},"relationships":{"depends_on":["mod-bd7e6bb16e1ad3ce391d135f"],"depended_by":["sym-021d447da9c9cdc0a8828fbd"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-84cccde4cee5a59c48e09624","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `IWeb2Request` in `tests/mocks/demosdk-types.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-types.ts","line_range":[30,30],"symbol_name":"IWeb2Request::api","language":"typescript","module_resolution_path":"tests/mocks/demosdk-types"},"relationships":{"depends_on":["sym-99dbc8dc422257de18a23cde"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-99dbc8dc422257de18a23cde","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IWeb2Request (type) exported from `tests/mocks/demosdk-types.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-types.ts","line_range":[30,30],"symbol_name":"IWeb2Request","language":"typescript","module_resolution_path":"tests/mocks/demosdk-types"},"relationships":{"depends_on":["mod-bd7e6bb16e1ad3ce391d135f"],"depended_by":["sym-84cccde4cee5a59c48e09624"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-6a5dac941b174a6b10665841","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `IOperation` in `tests/mocks/demosdk-types.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-types.ts","line_range":[31,31],"symbol_name":"IOperation::api","language":"typescript","module_resolution_path":"tests/mocks/demosdk-types"},"relationships":{"depends_on":["sym-f5cd26473ebc041f634af528"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-f5cd26473ebc041f634af528","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["IOperation (type) exported from `tests/mocks/demosdk-types.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-types.ts","line_range":[31,31],"symbol_name":"IOperation","language":"typescript","module_resolution_path":"tests/mocks/demosdk-types"},"relationships":{"depends_on":["mod-bd7e6bb16e1ad3ce391d135f"],"depended_by":["sym-6a5dac941b174a6b10665841"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-115190a05383b21a4bb3023b","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `EncryptedTransaction` in `tests/mocks/demosdk-types.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-types.ts","line_range":[32,32],"symbol_name":"EncryptedTransaction::api","language":"typescript","module_resolution_path":"tests/mocks/demosdk-types"},"relationships":{"depends_on":["sym-2e7f6d391d8c13d0a27849db"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-2e7f6d391d8c13d0a27849db","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["EncryptedTransaction (type) exported from `tests/mocks/demosdk-types.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-types.ts","line_range":[32,32],"symbol_name":"EncryptedTransaction","language":"typescript","module_resolution_path":"tests/mocks/demosdk-types"},"relationships":{"depends_on":["mod-bd7e6bb16e1ad3ce391d135f"],"depended_by":["sym-115190a05383b21a4bb3023b"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-a3469c23bd9262143421b370","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `BrowserRequest` in `tests/mocks/demosdk-types.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-types.ts","line_range":[33,33],"symbol_name":"BrowserRequest::api","language":"typescript","module_resolution_path":"tests/mocks/demosdk-types"},"relationships":{"depends_on":["sym-0303db1a28d7da98e3bd3feb"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-0303db1a28d7da98e3bd3feb","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["BrowserRequest (type) exported from `tests/mocks/demosdk-types.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-types.ts","line_range":[33,33],"symbol_name":"BrowserRequest","language":"typescript","module_resolution_path":"tests/mocks/demosdk-types"},"relationships":{"depends_on":["mod-bd7e6bb16e1ad3ce391d135f"],"depended_by":["sym-a3469c23bd9262143421b370"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-fd659db04515e442facc5b02","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `ValidationData` in `tests/mocks/demosdk-types.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-types.ts","line_range":[34,34],"symbol_name":"ValidationData::api","language":"typescript","module_resolution_path":"tests/mocks/demosdk-types"},"relationships":{"depends_on":["sym-1bb487944cb5b12d3757f07c"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-1bb487944cb5b12d3757f07c","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["ValidationData (type) exported from `tests/mocks/demosdk-types.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-types.ts","line_range":[34,34],"symbol_name":"ValidationData","language":"typescript","module_resolution_path":"tests/mocks/demosdk-types"},"relationships":{"depends_on":["mod-bd7e6bb16e1ad3ce391d135f"],"depended_by":["sym-fd659db04515e442facc5b02"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-f1687c66376fa28aeb417788","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported type `UserPoints` in `tests/mocks/demosdk-types.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-types.ts","line_range":[35,35],"symbol_name":"UserPoints::api","language":"typescript","module_resolution_path":"tests/mocks/demosdk-types"},"relationships":{"depends_on":["sym-42ab5fb64ac1e70a6473f6e5"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-42ab5fb64ac1e70a6473f6e5","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["UserPoints (type) exported from `tests/mocks/demosdk-types.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-types.ts","line_range":[35,35],"symbol_name":"UserPoints","language":"typescript","module_resolution_path":"tests/mocks/demosdk-types"},"relationships":{"depends_on":["mod-bd7e6bb16e1ad3ce391d135f"],"depended_by":["sym-f1687c66376fa28aeb417788"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-3a10c16293fdd85144fa70cb","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"inferred","semantic_fingerprint":{"natural_language_descriptions":["Public API surface for exported class `Demos` in `tests/mocks/demosdk-websdk.ts`."],"intent_vectors":["testing","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-websdk.ts","line_range":[1,24],"symbol_name":"Demos::api","language":"typescript","module_resolution_path":"tests/mocks/demosdk-websdk"},"relationships":{"depends_on":["sym-b487a1ce833804d2271e3c96"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-611b4918c4bdad73125bf034","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Demos.connectWallet method on exported class `Demos` in `tests/mocks/demosdk-websdk.ts`.","TypeScript signature: (mnemonic: string, _options: Record) => Promise."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"tests/mocks/demosdk-websdk.ts","line_range":[5,9],"symbol_name":"Demos.connectWallet","language":"typescript","module_resolution_path":"tests/mocks/demosdk-websdk"},"relationships":{"depends_on":["sym-b487a1ce833804d2271e3c96"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-5b4465fe4b287e6087e57cea","level":"L3","extraction_confidence":0.75,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Demos.rpcCall method on exported class `Demos` in `tests/mocks/demosdk-websdk.ts`.","TypeScript signature: (_request: unknown, _authenticated: unknown) => Promise<{\n result: number\n response: unknown\n require_reply: boolean\n extra: unknown\n }>."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":["async"]},"code_location":{"file_path":"tests/mocks/demosdk-websdk.ts","line_range":[11,23],"symbol_name":"Demos.rpcCall","language":"typescript","module_resolution_path":"tests/mocks/demosdk-websdk"},"relationships":{"depends_on":["sym-b487a1ce833804d2271e3c96"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":"async/await","persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-b487a1ce833804d2271e3c96","level":"L2","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["Demos (class) exported from `tests/mocks/demosdk-websdk.ts`."],"intent_vectors":["testing","abstraction"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-websdk.ts","line_range":[1,24],"symbol_name":"Demos","language":"typescript","module_resolution_path":"tests/mocks/demosdk-websdk"},"relationships":{"depends_on":["mod-78abcf74349b520bc900b4b4"],"depended_by":["sym-3a10c16293fdd85144fa70cb","sym-611b4918c4bdad73125bf034","sym-5b4465fe4b287e6087e57cea"],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-3c1f2e978ed4af636838378b","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["skeletons (variable) exported from `tests/mocks/demosdk-websdk.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-websdk.ts","line_range":[26,26],"symbol_name":"skeletons","language":"typescript","module_resolution_path":"tests/mocks/demosdk-websdk"},"relationships":{"depends_on":["mod-78abcf74349b520bc900b4b4"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-18T13:23:55.612Z","authors":[]}} +{"uuid":"sym-a5fcf79ed272694d8bed0a7f","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["EVM (variable) exported from `tests/mocks/demosdk-xm-localsdk.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-xm-localsdk.ts","line_range":[1,1],"symbol_name":"EVM","language":"typescript","module_resolution_path":"tests/mocks/demosdk-xm-localsdk"},"relationships":{"depends_on":["mod-39dd430c0afde7c4cff40e35"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"sym-6a06789ec5630226d1606761","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["XRP (variable) exported from `tests/mocks/demosdk-xm-localsdk.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-xm-localsdk.ts","line_range":[2,2],"symbol_name":"XRP","language":"typescript","module_resolution_path":"tests/mocks/demosdk-xm-localsdk"},"relationships":{"depends_on":["mod-39dd430c0afde7c4cff40e35"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"sym-252318ccecdf3dae90cd765a","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["multichain (variable) exported from `tests/mocks/demosdk-xm-localsdk.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-xm-localsdk.ts","line_range":[3,3],"symbol_name":"multichain","language":"typescript","module_resolution_path":"tests/mocks/demosdk-xm-localsdk"},"relationships":{"depends_on":["mod-39dd430c0afde7c4cff40e35"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} +{"uuid":"sym-95315e0446bf0d1ca7c636ed","level":"L3","extraction_confidence":0.7,"documentation_quality":"missing","verification_status":"parsed","semantic_fingerprint":{"natural_language_descriptions":["default (export_default) exported from `tests/mocks/demosdk-xm-localsdk.ts`."],"intent_vectors":["testing"],"domain_ontology_tags":[],"behavioral_contracts":[]},"code_location":{"file_path":"tests/mocks/demosdk-xm-localsdk.ts","line_range":[5,5],"symbol_name":"default","language":"typescript","module_resolution_path":"tests/mocks/demosdk-xm-localsdk"},"relationships":{"depends_on":["mod-39dd430c0afde7c4cff40e35"],"depended_by":[],"implements":[],"extends":[],"calls":[],"called_by":[],"similar_to":[],"contrasts_with":[]},"interface_contract":{"inputs":[],"outputs":[],"throws":[],"invariants":[]},"implementation_details":{"algorithm_complexity":null,"concurrency_model":null,"persistence_layer":[],"external_integrations":[],"critical_path":false,"test_coverage":null},"documentation_provenance":{"primary_source":null,"related_adr":null,"last_modified":"2026-02-13T14:41:04.960Z","authors":[]}} diff --git a/repository-semantic-map/versioning/changelog.md b/repository-semantic-map/versioning/changelog.md new file mode 100644 index 000000000..78536f263 --- /dev/null +++ b/repository-semantic-map/versioning/changelog.md @@ -0,0 +1,19 @@ +# Changelog + +## 1.0.2 (2026-02-22T19:12:05.352Z) +- git: `a454f37e` +- change_type: `incremental` +- total_atoms: 2472 +- confidence_avg: 0.754 + +## 1.0.1 (2026-02-22T19:10:25.324Z) +- git: `67d37a2c` +- change_type: `incremental` +- total_atoms: 2471 +- confidence_avg: 0.754 + +## 1.0.0 (2026-02-22T19:09:40.449Z) +- git: `67d37a2c` +- change_type: `full_reindex` +- total_atoms: 2074 +- confidence_avg: 0.757 diff --git a/repository-semantic-map/versioning/deltas/.gitkeep b/repository-semantic-map/versioning/deltas/.gitkeep new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/repository-semantic-map/versioning/deltas/.gitkeep @@ -0,0 +1 @@ + diff --git a/repository-semantic-map/versioning/versions.json b/repository-semantic-map/versioning/versions.json new file mode 100644 index 000000000..6314e7849 --- /dev/null +++ b/repository-semantic-map/versioning/versions.json @@ -0,0 +1,47 @@ +[ + { + "version": "1.0.0", + "semver_logic": "MAJOR.MINOR.PATCH", + "git_ref": "67d37a2c", + "timestamp": "2026-02-22T19:09:40.449Z", + "parent_version": null, + "change_type": "full_reindex", + "statistics": { + "total_atoms": 2074, + "added": 2074, + "modified": null, + "removed": null, + "confidence_avg": 0.7573047251687686 + } + }, + { + "version": "1.0.1", + "semver_logic": "MAJOR.MINOR.PATCH", + "git_ref": "67d37a2c", + "timestamp": "2026-02-22T19:10:25.324Z", + "parent_version": "1.0.0", + "change_type": "incremental", + "statistics": { + "total_atoms": 2471, + "added": null, + "modified": null, + "removed": null, + "confidence_avg": 0.7535936867665043 + } + }, + { + "version": "1.0.2", + "semver_logic": "MAJOR.MINOR.PATCH", + "git_ref": "a454f37e", + "timestamp": "2026-02-22T19:12:05.352Z", + "parent_version": "1.0.1", + "change_type": "incremental", + "statistics": { + "total_atoms": 2472, + "added": null, + "modified": null, + "removed": null, + "confidence_avg": 0.7536124595469386 + } + } +] diff --git a/scripts/semantic-map/embed.ts b/scripts/semantic-map/embed.ts new file mode 100644 index 000000000..53be2f0e9 --- /dev/null +++ b/scripts/semantic-map/embed.ts @@ -0,0 +1,255 @@ +import * as fs from "fs" +import * as path from "path" +import * as crypto from "crypto" +import { writeNpyFloat32Matrix } from "./npy" + +type SemanticEntry = { + uuid: string + level: "L0" | "L1" | "L2" | "L3" | "L4" + semantic_fingerprint?: { + natural_language_descriptions?: string[] + intent_vectors?: string[] + } + code_location?: { + file_path?: string | null + symbol_name?: string | null + line_range?: [number, number] | null + } +} + +type EmbedProvider = { + name: string + model: string + dim: number + embedBatch(texts: string[]): Promise +} + +function sha1(text: string) { + return crypto.createHash("sha1").update(text).digest("hex") +} + +function nowIso() { + return new Date().toISOString() +} + +function readJsonl(p: string) { + const raw = fs.readFileSync(p, "utf8").trim() + if (!raw) return [] + return raw.split("\n").map(l => JSON.parse(l)) as SemanticEntry[] +} + +function stringifyAtomText(e: SemanticEntry) { + const descs = e.semantic_fingerprint?.natural_language_descriptions ?? [] + const cleaned = descs + .map(s => String(s ?? "").trim()) + .filter(Boolean) + .slice(0, 8) + if (cleaned.length === 0) { + return `${e.uuid}: (no descriptions)` + } + // Keep consistent formatting for stable embeddings. + return cleaned.map(s => `- ${s}`).join("\n") +} + +async function embedWithHttpEndpoint(args: { + baseUrl: string + apiKey?: string + model: string + texts: string[] +}) { + // Provider-agnostic HTTP embedding endpoint (OpenAI-compatible shape). + // Expected response: { data: [{ embedding: number[] }, ...] } + const res = await fetch(args.baseUrl, { + method: "POST", + headers: { + "Content-Type": "application/json", + ...(args.apiKey ? { Authorization: `Bearer ${args.apiKey}` } : {}), + }, + body: JSON.stringify({ + model: args.model, + input: args.texts, + }), + }) + + if (!res.ok) { + const text = await res.text().catch(() => "") + throw new Error(`Embedding request failed: ${res.status} ${res.statusText}\n${text}`) + } + + const json = (await res.json()) as any + const data = json?.data + if (!Array.isArray(data)) { + throw new Error("Embedding response missing `data` array") + } + const embeddings = data.map((d: any) => d?.embedding) + if (!embeddings.every((x: any) => Array.isArray(x))) { + throw new Error("Embedding response `data[].embedding` must be number[]") + } + return embeddings as number[][] +} + +function requireEnv(name: string) { + const v = process.env[name] + if (!v) throw new Error(`Missing required env var: ${name}`) + return v +} + +async function makeProviderFromEnv(): Promise { + const provider = (process.env.EMBED_PROVIDER ?? "http").toLowerCase() + const model = process.env.EMBED_MODEL ?? "text-embedding-3-small" + + // For now we implement a single generic HTTP provider. You can point it at: + // - OpenAI embeddings endpoint + // - Azure/OpenAI compatible endpoint + // - Any service that matches `{ model, input } -> { data: [{ embedding }] }` + if (provider !== "http") { + throw new Error(`Unsupported EMBED_PROVIDER=${provider}. Supported: http`) + } + + const endpoint = requireEnv("EMBED_HTTP_ENDPOINT") + const apiKey = process.env.EMBED_HTTP_API_KEY + + // Determine dimension by probing with a single embedding. + const probe = await embedWithHttpEndpoint({ + baseUrl: endpoint, + apiKey, + model, + texts: ["probe"], + }) + const dim = probe[0]?.length ?? 0 + if (!Number.isFinite(dim) || dim <= 0) { + throw new Error("Could not determine embedding dimension from probe response") + } + + return { + name: "http", + model, + dim, + embedBatch: async (texts: string[]) => + embedWithHttpEndpoint({ baseUrl: endpoint, apiKey, model, texts }), + } +} + +async function main() { + const repoRoot = process.cwd() + const indexPath = path.join(repoRoot, "repository-semantic-map", "semantic-index.jsonl") + const outDir = path.join(repoRoot, "repository-semantic-map", "embeddings") + fs.mkdirSync(outDir, { recursive: true }) + + const entries = readJsonl(indexPath) + if (entries.length === 0) { + throw new Error(`No atoms found in ${indexPath}`) + } + + const provider = await makeProviderFromEnv() + + const texts = entries.map(stringifyAtomText) + const uuids = entries.map(e => e.uuid) + + // Cache identical texts to avoid redundant embedding calls. + const cache = new Map() + const textHash = texts.map(t => sha1(t)) + + const batchSize = Number(process.env.EMBED_BATCH_SIZE ?? "64") + if (!Number.isFinite(batchSize) || batchSize <= 0) throw new Error("Invalid EMBED_BATCH_SIZE") + + const rows = entries.length + const cols = provider.dim + const matrix = new Float32Array(rows * cols) + + let embedded = 0 + for (let i = 0; i < rows; i += batchSize) { + const sliceTexts: string[] = [] + const sliceRowIndexes: number[] = [] + + for (let j = i; j < Math.min(rows, i + batchSize); j++) { + const h = textHash[j] + const cached = cache.get(h) + if (cached) { + writeRow(matrix, j, cached) + embedded++ + continue + } + sliceTexts.push(texts[j]) + sliceRowIndexes.push(j) + } + + if (sliceTexts.length > 0) { + const vecs = await provider.embedBatch(sliceTexts) + if (vecs.length !== sliceTexts.length) { + throw new Error(`Provider returned ${vecs.length} embeddings for ${sliceTexts.length} texts`) + } + for (let k = 0; k < vecs.length; k++) { + const rowIndex = sliceRowIndexes[k] + const vec = vecs[k] + if (!Array.isArray(vec) || vec.length !== cols) { + throw new Error(`Embedding dim mismatch at row ${rowIndex}: got ${vec?.length}, expected ${cols}`) + } + cache.set(textHash[rowIndex], vec) + writeRow(matrix, rowIndex, vec) + embedded++ + } + } + + if ((i / batchSize) % 10 === 0) { + // Minimal progress signal for long runs. + // eslint-disable-next-line no-console + console.log(`[embed] ${embedded}/${rows} rows embedded`) + } + } + + const npyPath = path.join(outDir, "semantic-fingerprints.npy") + writeNpyFloat32Matrix({ path: npyPath, rows, cols, data: matrix }) + + const mappingPath = path.join(outDir, "uuid-mapping.json") + fs.writeFileSync( + mappingPath, + JSON.stringify( + { + generated_at: nowIso(), + provider: { name: provider.name, model: provider.model, dim: provider.dim }, + rows, + cols, + uuids, + }, + null, + 2, + ) + "\n", + "utf8", + ) + + const metaPath = path.join(outDir, "meta.json") + fs.writeFileSync( + metaPath, + JSON.stringify( + { + generated_at: nowIso(), + index_path: "repository-semantic-map/semantic-index.jsonl", + npy_path: "repository-semantic-map/embeddings/semantic-fingerprints.npy", + mapping_path: "repository-semantic-map/embeddings/uuid-mapping.json", + provider: { name: provider.name, model: provider.model, dim: provider.dim }, + notes: { + text_source: "semantic_fingerprint.natural_language_descriptions (joined)", + cache: "sha1(text) in-memory cache per run", + }, + }, + null, + 2, + ) + "\n", + "utf8", + ) +} + +function writeRow(matrix: Float32Array, rowIndex: number, vec: number[]) { + const cols = vec.length + const base = rowIndex * cols + for (let i = 0; i < cols; i++) matrix[base + i] = vec[i] +} + +if (import.meta.main) { + main().catch(err => { + // eslint-disable-next-line no-console + console.error(err) + process.exit(1) + }) +} diff --git a/scripts/semantic-map/embed_local.py b/scripts/semantic-map/embed_local.py new file mode 100644 index 000000000..524e86c18 --- /dev/null +++ b/scripts/semantic-map/embed_local.py @@ -0,0 +1,138 @@ +#!/usr/bin/env python3 + +import json +import os +from dataclasses import dataclass +from pathlib import Path +from typing import Iterable, List, Tuple + + +@dataclass(frozen=True) +class Atom: + uuid: str + descriptions: List[str] + + +def read_jsonl(path: Path) -> List[Atom]: + atoms: List[Atom] = [] + with path.open("r", encoding="utf-8") as f: + for line in f: + line = line.strip() + if not line: + continue + obj = json.loads(line) + uuid = str(obj.get("uuid")) + descs = ( + obj.get("semantic_fingerprint", {}) + .get("natural_language_descriptions", []) + ) + if not isinstance(descs, list): + descs = [] + cleaned = [str(s).strip() for s in descs if str(s).strip()] + atoms.append(Atom(uuid=uuid, descriptions=cleaned)) + return atoms + + +def atom_text(atom: Atom) -> str: + if not atom.descriptions: + return f"{atom.uuid}: (no descriptions)" + # Stable formatting for deterministic embeddings. + lines = [] + for s in atom.descriptions[:8]: + lines.append(f"- {s}") + return "\n".join(lines) + + +def chunked(xs: List[str], size: int) -> Iterable[List[str]]: + for i in range(0, len(xs), size): + yield xs[i : i + size] + + +def main() -> None: + repo_root = Path.cwd() + index_path = repo_root / "repository-semantic-map" / "semantic-index.jsonl" + out_dir = repo_root / "repository-semantic-map" / "embeddings" + out_dir.mkdir(parents=True, exist_ok=True) + + if not index_path.exists(): + raise SystemExit(f"Missing {index_path}. Run semantic map generation first.") + + atoms = read_jsonl(index_path) + if not atoms: + raise SystemExit(f"No atoms found in {index_path}") + + texts = [atom_text(a) for a in atoms] + uuids = [a.uuid for a in atoms] + + # Local embedding provider: fastembed (ONNX). + # Default model: small + good quality, 384-dim. + model_name = os.environ.get("EMBED_LOCAL_MODEL", "BAAI/bge-small-en-v1.5") + batch_size = int(os.environ.get("EMBED_BATCH_SIZE", "128")) + + from fastembed import TextEmbedding # type: ignore + import numpy as np # type: ignore + + embedder = TextEmbedding(model_name=model_name) + + vectors: List[np.ndarray] = [] + embedded = 0 + + for batch in chunked(texts, batch_size): + for vec in embedder.embed(batch): + vectors.append(np.asarray(vec, dtype=np.float32)) + embedded += 1 + if embedded % (batch_size * 10) == 0: + print(f"[embed_local] {embedded}/{len(texts)} rows embedded") + + if len(vectors) != len(texts): + raise SystemExit(f"Embedding count mismatch: {len(vectors)} != {len(texts)}") + + mat = np.vstack(vectors).astype(np.float32, copy=False) + rows, cols = mat.shape + + npy_path = out_dir / "semantic-fingerprints.npy" + np.save(npy_path, mat) + + mapping_path = out_dir / "uuid-mapping.json" + mapping_path.write_text( + json.dumps( + { + "generated_at": __import__("datetime").datetime.utcnow().isoformat() + "Z", + "provider": {"name": "fastembed", "model": model_name, "dim": int(cols)}, + "rows": int(rows), + "cols": int(cols), + "uuids": uuids, + }, + indent=2, + ) + + "\n", + encoding="utf-8", + ) + + meta_path = out_dir / "meta.json" + meta_path.write_text( + json.dumps( + { + "generated_at": __import__("datetime").datetime.utcnow().isoformat() + "Z", + "index_path": "repository-semantic-map/semantic-index.jsonl", + "npy_path": "repository-semantic-map/embeddings/semantic-fingerprints.npy", + "mapping_path": "repository-semantic-map/embeddings/uuid-mapping.json", + "provider": {"name": "fastembed", "model": model_name, "dim": int(cols)}, + "notes": { + "text_source": "semantic_fingerprint.natural_language_descriptions (joined)", + "batch_size": batch_size, + }, + }, + indent=2, + ) + + "\n", + encoding="utf-8", + ) + + print(f"[embed_local] wrote {npy_path} shape={rows}x{cols}") + print(f"[embed_local] wrote {mapping_path}") + + +if __name__ == "__main__": + main() + diff --git a/scripts/semantic-map/generate.ts b/scripts/semantic-map/generate.ts new file mode 100644 index 000000000..d0cf97b20 --- /dev/null +++ b/scripts/semantic-map/generate.ts @@ -0,0 +1,1103 @@ +import * as fs from "fs" +import * as path from "path" +import * as crypto from "crypto" +import * as ts from "typescript" + +type Level = "L0" | "L1" | "L2" | "L3" | "L4" + +type SemanticEntry = { + uuid: string + level: Level + extraction_confidence: number + documentation_quality: "rich" | "adequate" | "sparse" | "missing" + verification_status: "parsed" | "inferred" | "assumed" + semantic_fingerprint: { + natural_language_descriptions: string[] + intent_vectors: string[] + domain_ontology_tags: string[] + behavioral_contracts: string[] + } + code_location: { + file_path: string | null + line_range: [number, number] | null + symbol_name: string | null + language: "typescript" | "markdown" | "json" | "unknown" + module_resolution_path: string | null + } + relationships: { + depends_on: string[] + depended_by: string[] + implements: string[] + extends: string[] + calls: string[] + called_by: string[] + similar_to: string[] + contrasts_with: string[] + } + interface_contract: { + inputs: Array<{ name: string; type: string; semantic: string }> + outputs: Array<{ type: string; semantic: string }> + throws: string[] + invariants: string[] + } + implementation_details: { + algorithm_complexity: string | null + concurrency_model: string | null + persistence_layer: string[] + external_integrations: string[] + critical_path: boolean + test_coverage: string | null + } + documentation_provenance: { + primary_source: string | null + related_adr: string | null + last_modified: string | null + authors: string[] + } +} + +type GraphNode = { + uuid: string + level: Level + label: string + file_path: string | null + symbol_name: string | null + line_range: [number, number] | null + centrality: number +} + +type GraphEdge = { + from: string + to: string + type: + | "depends_on" + | "depended_by" + | "implements" + | "extends" + | "calls" + | "called_by" + | "similar_to" + | "contrasts_with" +} + +function sha1(text: string) { + return crypto.createHash("sha1").update(text).digest("hex") +} + +function stableUuid(prefix: string, parts: Array) { + return `${prefix}-${sha1(parts.map(p => String(p ?? "")).join("|")).slice(0, 24)}` +} + +function ensureDir(p: string) { + fs.mkdirSync(p, { recursive: true }) +} + +function writeJson(p: string, obj: unknown) { + fs.writeFileSync(p, JSON.stringify(obj, null, 2) + "\n", "utf8") +} + +function writeText(p: string, text: string) { + fs.writeFileSync(p, text.endsWith("\n") ? text : text + "\n", "utf8") +} + +function readUtf8IfExists(p: string) { + try { + return fs.readFileSync(p, "utf8") + } catch { + return null + } +} + +function spawnText(cmd: string, cwd: string) { + const proc = Bun.spawnSync({ + cmd: ["bash", "-lc", cmd], + cwd, + stdout: "pipe", + stderr: "pipe", + env: process.env, + }) + const stdout = proc.stdout?.toString("utf8") ?? "" + if (proc.exitCode !== 0) { + const stderr = proc.stderr?.toString("utf8") ?? "" + throw new Error(`Command failed (${proc.exitCode}): ${cmd}\n${stderr}\n${stdout}`) + } + return stdout +} + +function toRepoRel(repoRoot: string, absOrRel: string) { + const abs = path.isAbsolute(absOrRel) ? absOrRel : path.join(repoRoot, absOrRel) + return path.relative(repoRoot, abs).replaceAll(path.sep, "/") +} + +function fileIsInScope(relPath: string) { + if (relPath.startsWith(".planning/")) return false + if (relPath.startsWith("dist/")) return false + if (relPath.startsWith("node_modules/")) return false + if (relPath.startsWith("local_tests/")) return false + if (relPath.startsWith("omniprotocol_fixtures_scripts/")) return false + if (relPath.startsWith("sdk/")) return false + if (relPath.startsWith("documentation/") && (relPath.endsWith(".ts") || relPath.endsWith(".tsx"))) { + return false + } + return relPath.endsWith(".ts") || relPath.endsWith(".tsx") +} + +function detectIntentsFromPath(relPath: string): string[] { + const intents = new Set() + const p = relPath.toLowerCase() + if (p.includes("/network/")) intents.add("networking") + if (p.includes("/rpc")) intents.add("rpc") + if (p.includes("/blockchain/")) intents.add("blockchain") + if (p.includes("/consensus/")) intents.add("consensus") + if (p.includes("/peer/")) intents.add("peer-management") + if (p.includes("/crypto/")) intents.add("cryptography") + if (p.includes("/omniprotocol/")) intents.add("p2p-protocol") + if (p.includes("/features/mcp/")) intents.add("mcp") + if (p.includes("/features/metrics/")) intents.add("observability") + if (p.includes("/features/tlsnotary/")) intents.add("tlsnotary") + if (p.includes("/features/multichain/")) intents.add("multichain") + if (p.includes("/features/zk/")) intents.add("zero-knowledge") + if (p.includes("/model/")) intents.add("persistence") + if (p.includes("/migrations/")) intents.add("database-migrations") + if (p.includes("/utilities/")) intents.add("utilities") + if (p.startsWith("tests/")) intents.add("testing") + return [...intents] +} + +function isCriticalPath(relPath: string) { + return ( + relPath === "src/index.ts" || + relPath === "src/utilities/mainLoop.ts" || + relPath.includes("/libs/network/") || + relPath.includes("/libs/blockchain/") || + relPath.includes("/libs/consensus/") || + relPath.includes("/libs/peer/") || + relPath.includes("/libs/omniprotocol/") + ) +} + +function extractEnvVarsFromSourceText(sourceText: string) { + const vars = new Set() + const re = /process\.env\.([A-Z0-9_]+)/g + let match: RegExpExecArray | null + while ((match = re.exec(sourceText))) vars.add(match[1]) + return [...vars].sort() +} + +function getLineRange(sourceFile: ts.SourceFile, node: ts.Node): [number, number] { + const start = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile)).line + 1 + const end = sourceFile.getLineAndCharacterOfPosition(node.getEnd()).line + 1 + return [start, Math.max(start, end)] +} + +function getFileMTimeIso(repoRoot: string, relPath: string) { + try { + return fs.statSync(path.join(repoRoot, relPath)).mtime.toISOString() + } catch { + return null + } +} + +function summarizeJSDoc(node: ts.Node, sourceFile: ts.SourceFile) { + const docs = ts.getJSDocCommentsAndTags(node).filter(ts.isJSDoc) as ts.JSDoc[] + if (docs.length === 0) return null + const d = docs[0] + const text = (d.comment ? String(d.comment) : "").trim() + if (!text) return null + const [start, end] = getLineRange(sourceFile, d) + return { text, primarySource: `JSDoc ${start}-${end}` } +} + +function functionSignatureFromSyntax(fn: ts.SignatureDeclarationBase, sf: ts.SourceFile) { + const params = fn.parameters.map(p => { + const name = p.name.getText(sf) + const type = p.type ? p.type.getText(sf) : "unknown" + return `${name}: ${type}` + }) + const ret = fn.type ? fn.type.getText(sf) : "unknown" + return `(${params.join(", ")}) => ${ret}` +} + +function normalizeModuleResolutionPath(relPath: string) { + if (relPath.startsWith("src/")) { + return relPath.replace(/\.tsx?$/, "").replace(/^src\//, "@/") + } + return relPath.replace(/\.tsx?$/, "") +} + +function resolveImportToRelPath(repoRoot: string, fromRelFile: string, spec: string): string | null { + const fromDir = path.posix.dirname(fromRelFile) + + const exists = (p: string) => fs.existsSync(path.join(repoRoot, p)) + + const normalizeCandidate = (candidate: string) => { + if (candidate.endsWith(".ts") || candidate.endsWith(".tsx")) return exists(candidate) ? candidate : null + if (exists(candidate)) return candidate + if (exists(candidate + ".ts")) return candidate + ".ts" + if (exists(candidate + ".tsx")) return candidate + ".tsx" + if (exists(candidate + "/index.ts")) return candidate + "/index.ts" + if (exists(candidate + "/index.tsx")) return candidate + "/index.tsx" + return null + } + + if (spec.startsWith("@/")) return normalizeCandidate("src/" + spec.slice(2)) + if (spec.startsWith("src/")) return normalizeCandidate(spec) + if (spec.startsWith(".")) return normalizeCandidate(path.posix.normalize(path.posix.join(fromDir, spec))) + return null +} + +function findCallsInNode(node: ts.Node, callableTargetsByName: Map) { + const calls: string[] = [] + const visit = (n: ts.Node) => { + if (ts.isCallExpression(n)) { + const expr = n.expression + if (ts.isIdentifier(expr)) { + const target = callableTargetsByName.get(expr.text) + if (target) calls.push(target) + } + } + ts.forEachChild(n, visit) + } + visit(node) + return calls +} + +function seedOntologyFromDocs(docs: Array<{ path: string; text: string }>) { + const seed = new Map }>() + const add = (term: string, source: string) => { + const key = term.toLowerCase() + const v = seed.get(key) ?? { count: 0, sources: new Set() } + v.count++ + v.sources.add(source) + seed.set(key, v) + } + + const known = [ + "Demos Network", + "PoRBFT", + "GCR", + "OmniProtocol", + "TLSNotary", + "MCP", + "Bun", + "TypeORM", + "PostgreSQL", + "Merkle tree", + "ZK", + "L2PS", + "validator", + "peer", + "mempool", + "block", + "transaction", + "bridge", + "Rubic", + ] + for (const k of known) add(k, "seed") + + for (const d of docs) { + const text = d.text.toLowerCase() + for (const k of known) { + if (text.includes(k.toLowerCase())) add(k, d.path) + } + } + + return [...seed.entries()] + .map(([term, v]) => ({ + term, + count: v.count, + sources: [...v.sources].sort(), + })) + .sort((a, b) => b.count - a.count || a.term.localeCompare(b.term)) +} + +function bumpPatch(v: string) { + const m = /^(\d+)\.(\d+)\.(\d+)$/.exec(v) + if (!m) return "1.0.0" + return `${m[1]}.${m[2]}.${Number(m[3]) + 1}` +} + +function average(xs: number[]) { + if (xs.length === 0) return 0 + return xs.reduce((a, b) => a + b, 0) / xs.length +} + +function buildQueryApiMarkdown(input: { version: string; gitRef: string; stats: any }) { + return [ + "# Query API", + "", + `**Index version:** ${input.version}`, + `**Git ref:** \`${input.gitRef}\``, + "", + "Artifacts:", + "- `repository-semantic-map/semantic-index.jsonl` (JSONL atoms)", + "- `repository-semantic-map/code-graph.json` (nodes/edges graph)", + "- `repository-semantic-map/manifest.json` (metadata + stats)", + "", + "## Basic retrieval (JSONL)", + "", + "Examples using `jq`:", + "```bash", + "jq -r 'select(.semantic_fingerprint.intent_vectors[]? == \"consensus\") | .code_location.file_path + \":\" + (.code_location.line_range[0]|tostring) + \" \" + (.code_location.symbol_name//\"\")' repository-semantic-map/semantic-index.jsonl | head", + "```", + "", + "## Query patterns", + "", + "```yaml", + "Query Patterns:", + " - \"Where is consensus implemented?\"", + " -> Search: intent_vectors contains \"consensus\" + level in [L2,L3]", + " -> Return: `src/libs/consensus/v2/PoRBFT.ts` + callers in `src/utilities/mainLoop.ts`", + "", + " - \"How does the RPC server route requests?\"", + " -> Search: intent_vectors contains \"rpc\" + file_path contains \"src/libs/network\"", + " -> Return: chain from `server_rpc.ts` to per-method managers", + "", + " - \"Which code touches process.env?\"", + " -> Search: implementation_details.external_integrations contains entries starting with \"env:\"", + " -> Return: env-bound code paths (ports, keys, feature toggles)", + "", + " - \"What depends on the consensus routine?\"", + " -> Graph traversal: find symbol 'consensusRoutine' -> called_by depth 2", + "```", + "", + "## Notes", + "", + "- `calls` edges are conservative: only intra-file identifier calls are linked.", + "- `depends_on` includes a symbol -> module edge plus module import edges where resolvable.", + "", + "## Index stats (this run)", + "", + "```json", + JSON.stringify(input.stats, null, 2), + "```", + "", + ].join("\n") +} + +function buildConsumptionGuideMarkdown(input: { version: string; gitRef: string }) { + return [ + "# Consumption Guide", + "", + `**Index version:** ${input.version}`, + `**Git ref:** \`${input.gitRef}\``, + "", + "## Maintenance protocol", + "", + "On each re-index:", + "1. Compute changed files via `git diff --name-only ..`.", + "2. Re-run generator; in a future iteration, restrict parsing to affected modules and update `versioning/deltas/`.", + "3. Re-scan generated artifacts for leaked secrets before committing.", + "", + "Current mode: full re-index (fast enough for this repo), patch version bump on each run.", + "", + ].join("\n") +} + +function buildChangelogMarkdown(versions: any[]) { + const lines = ["# Changelog", ""] + for (const v of versions.slice().reverse()) { + lines.push(`## ${v.version} (${v.timestamp})`) + lines.push(`- git: \`${v.git_ref}\``) + lines.push(`- change_type: \`${v.change_type}\``) + lines.push(`- total_atoms: ${v.statistics.total_atoms}`) + lines.push(`- confidence_avg: ${Number(v.statistics.confidence_avg).toFixed(3)}`) + lines.push("") + } + return lines.join("\n") +} + +function extractExportedAtomsFromSourceFile(args: { + gitRef: string + relPath: string + sf: ts.SourceFile + moduleUuid: string + importSpecs: string[] + envVars: string[] + callableIndex: Map + last_modified: string | null +}) { + const { + gitRef, + relPath, + sf, + moduleUuid, + importSpecs, + envVars, + callableIndex, + last_modified, + } = args + + const exports: Array<{ name: string; decl: ts.Node; kind: string; level: Level }> = [] + + const addExport = (name: string, decl: ts.Node, kind: string, level: Level) => { + exports.push({ name, decl, kind, level }) + } + + for (const st of sf.statements) { + if (ts.isExportAssignment(st)) { + addExport("default", st, "export_default", "L3") + continue + } + + if (ts.isExportDeclaration(st)) { + if (st.exportClause && ts.isNamedExports(st.exportClause)) { + for (const el of st.exportClause.elements) { + const exportedName = (el.name ?? el.propertyName)?.getText(sf) ?? el.getText(sf) + addExport(exportedName, el, "re_export", "L3") + } + } else if (!st.exportClause) { + addExport("*", st, "re_export_star", "L3") + } + continue + } + + const isExported = + (ts.getCombinedModifierFlags(st as any) & ts.ModifierFlags.Export) !== 0 + + if (!isExported) continue + + if (ts.isFunctionDeclaration(st) && st.name) { + addExport(st.name.text, st, "function", "L3") + } else if (ts.isClassDeclaration(st) && st.name) { + addExport(st.name.text, st, "class", "L2") + } else if (ts.isInterfaceDeclaration(st)) { + addExport(st.name.text, st, "interface", "L2") + } else if (ts.isTypeAliasDeclaration(st)) { + addExport(st.name.text, st, "type", "L2") + } else if (ts.isEnumDeclaration(st)) { + addExport(st.name.text, st, "enum", "L2") + } else if (ts.isVariableStatement(st)) { + for (const decl of st.declarationList.declarations) { + if (!ts.isIdentifier(decl.name)) continue + const name = decl.name.text + const init = decl.initializer + if (init && (ts.isArrowFunction(init) || ts.isFunctionExpression(init))) { + addExport(name, decl, "function", "L3") + } else { + addExport(name, decl, "variable", "L3") + } + } + } + } + + const entries: SemanticEntry[] = [] + const edges: GraphEdge[] = [] + const exportedUuids = new Set() + + const registerCallable = (symbolName: string, uuid: string) => { + callableIndex.set(`${relPath}::${symbolName}`, uuid) + callableIndex.set(symbolName, uuid) + } + + for (const exp of exports) { + const [start, end] = getLineRange(sf, exp.decl) + const jsDoc = summarizeJSDoc(exp.decl, sf) + const signature = + ts.isFunctionLike(exp.decl) ? functionSignatureFromSyntax(exp.decl as any, sf) : null + + const uuid = stableUuid("sym", [gitRef, relPath, exp.name, exp.kind, start, end]) + exportedUuids.add(uuid) + + const docQuality = + jsDoc?.text && jsDoc.text.length > 120 + ? "rich" + : jsDoc?.text + ? "adequate" + : "missing" + + const confidence = + docQuality === "rich" ? 0.92 : docQuality === "adequate" ? 0.85 : 0.7 + + const intents = new Set(detectIntentsFromPath(relPath)) + if (exp.kind === "class") intents.add("abstraction") + + const descs = [ + `${exp.name} (${exp.kind}) exported from \`${relPath}\`.`, + signature ? `TypeScript signature: ${signature}.` : "", + jsDoc?.text ? jsDoc.text.split("\n")[0] : "", + ].filter(Boolean) + + const entry: SemanticEntry = { + uuid, + level: exp.level, + extraction_confidence: confidence, + documentation_quality: docQuality, + verification_status: exp.kind.startsWith("re_") ? "inferred" : "parsed", + semantic_fingerprint: { + natural_language_descriptions: descs, + intent_vectors: [...intents], + domain_ontology_tags: [], + behavioral_contracts: [ + ts.isFunctionLike(exp.decl) && (ts.getCombinedModifierFlags(exp.decl as any) & ts.ModifierFlags.Async) !== 0 + ? "async" + : "", + ].filter(Boolean), + }, + code_location: { + file_path: relPath, + line_range: [start, end], + symbol_name: exp.name, + language: "typescript", + module_resolution_path: normalizeModuleResolutionPath(relPath), + }, + relationships: { + depends_on: [moduleUuid], + depended_by: [], + implements: [], + extends: [], + calls: [], + called_by: [], + similar_to: [], + contrasts_with: [], + }, + interface_contract: { inputs: [], outputs: [], throws: [], invariants: [] }, + implementation_details: { + algorithm_complexity: null, + concurrency_model: ts.isFunctionLike(exp.decl) ? "async/await" : null, + persistence_layer: importSpecs.includes("typeorm") || importSpecs.includes("pg") ? ["postgres", "typeorm"] : [], + external_integrations: [ + ...new Set(importSpecs.filter(s => !s.startsWith(".") && !s.startsWith("@/") && !s.startsWith("src/"))), + ...envVars.map(v => `env:${v}`), + ], + critical_path: isCriticalPath(relPath), + test_coverage: null, + }, + documentation_provenance: { + primary_source: jsDoc?.primarySource ?? null, + related_adr: null, + last_modified, + authors: [], + }, + } + + edges.push({ from: entry.uuid, to: moduleUuid, type: "depends_on" }) + + if (exp.level === "L3") registerCallable(exp.name, entry.uuid) + + // Quality gate helper: ensure every exported symbol has at least one L3 atom. + // For exported L2 symbols (class/interface/type/enum), create a derived L3 "API" atom. + if (exp.level === "L2") { + const apiUuid = stableUuid("sym", [gitRef, relPath, exp.name, "export_api", start, end]) + exportedUuids.add(apiUuid) + entries.push({ + uuid: apiUuid, + level: "L3", + extraction_confidence: Math.max(0.7, confidence - 0.05), + documentation_quality: docQuality === "missing" ? "missing" : "adequate", + verification_status: "inferred", + semantic_fingerprint: { + natural_language_descriptions: [ + `Public API surface for exported ${exp.kind} \`${exp.name}\` in \`${relPath}\`.`, + ...descs.slice(1), + ].filter(Boolean), + intent_vectors: [...intents], + domain_ontology_tags: [], + behavioral_contracts: [], + }, + code_location: { + file_path: relPath, + line_range: [start, end], + symbol_name: `${exp.name}::api`, + language: "typescript", + module_resolution_path: normalizeModuleResolutionPath(relPath), + }, + relationships: { + depends_on: [entry.uuid], + depended_by: [], + implements: [], + extends: [], + calls: [], + called_by: [], + similar_to: [], + contrasts_with: [], + }, + interface_contract: { inputs: [], outputs: [], throws: [], invariants: [] }, + implementation_details: { + algorithm_complexity: null, + concurrency_model: null, + persistence_layer: entry.implementation_details.persistence_layer, + external_integrations: entry.implementation_details.external_integrations, + critical_path: entry.implementation_details.critical_path, + test_coverage: null, + }, + documentation_provenance: { + primary_source: jsDoc?.primarySource ?? null, + related_adr: null, + last_modified, + authors: [], + }, + }) + edges.push({ from: apiUuid, to: entry.uuid, type: "depends_on" }) + registerCallable(`${exp.name}::api`, apiUuid) + } + + // Exported class members as L3 atoms. + if (ts.isClassDeclaration(exp.decl)) { + const className = exp.name + for (const member of exp.decl.members) { + if ( + ts.isMethodDeclaration(member) || + ts.isGetAccessorDeclaration(member) || + ts.isSetAccessorDeclaration(member) + ) { + const name = member.name && ts.isIdentifier(member.name) ? member.name.text : null + if (!name) continue + const isPrivate = + (ts.getCombinedModifierFlags(member as any) & ts.ModifierFlags.Private) !== 0 + if (isPrivate) continue + + const [ms, me] = getLineRange(sf, member) + const memberUuid = stableUuid("sym", [ + gitRef, + relPath, + `${className}.${name}`, + "method", + ms, + me, + ]) + exportedUuids.add(memberUuid) + registerCallable(`${className}.${name}`, memberUuid) + + const sig = ts.isFunctionLike(member) + ? functionSignatureFromSyntax(member as any, sf) + : null + + entries.push({ + uuid: memberUuid, + level: "L3", + extraction_confidence: 0.75, + documentation_quality: "missing", + verification_status: "parsed", + semantic_fingerprint: { + natural_language_descriptions: [ + `${className}.${name} method on exported class \`${className}\` in \`${relPath}\`.`, + sig ? `TypeScript signature: ${sig}.` : "", + ].filter(Boolean), + intent_vectors: detectIntentsFromPath(relPath), + domain_ontology_tags: [], + behavioral_contracts: (ts.getCombinedModifierFlags(member as any) & ts.ModifierFlags.Async) !== 0 ? ["async"] : [], + }, + code_location: { + file_path: relPath, + line_range: [ms, me], + symbol_name: `${className}.${name}`, + language: "typescript", + module_resolution_path: normalizeModuleResolutionPath(relPath), + }, + relationships: { + depends_on: [entry.uuid], + depended_by: [], + implements: [], + extends: [], + calls: [], + called_by: [], + similar_to: [], + contrasts_with: [], + }, + interface_contract: { inputs: [], outputs: [], throws: [], invariants: [] }, + implementation_details: { + algorithm_complexity: null, + concurrency_model: (ts.getCombinedModifierFlags(member as any) & ts.ModifierFlags.Async) !== 0 ? "async/await" : null, + persistence_layer: entry.implementation_details.persistence_layer, + external_integrations: entry.implementation_details.external_integrations, + critical_path: entry.implementation_details.critical_path, + test_coverage: null, + }, + documentation_provenance: { + primary_source: null, + related_adr: null, + last_modified, + authors: [], + }, + }) + edges.push({ from: memberUuid, to: entry.uuid, type: "depends_on" }) + } + } + } + + // Simple call edges (only for L3 entries with bodies). + const callableTargetsByName = new Map() + for (const [k, v] of callableIndex.entries()) { + if (!k.includes("::")) callableTargetsByName.set(k, v) + } + const calls = findCallsInNode(exp.decl, callableTargetsByName) + if (calls.length > 0) { + entry.relationships.calls = [...new Set(calls)] + } + for (const to of entry.relationships.calls) edges.push({ from: entry.uuid, to, type: "calls" }) + + entries.push(entry) + } + + return { entries, edges, exportedUuids } +} + +function main() { + const repoRoot = process.cwd() + const outRoot = path.join(repoRoot, "repository-semantic-map") + + ensureDir(outRoot) + ensureDir(path.join(outRoot, "domain-ontologies")) + ensureDir(path.join(outRoot, "cross-references")) + ensureDir(path.join(outRoot, "versioning")) + ensureDir(path.join(outRoot, "embeddings")) + + const gitRef = spawnText("git rev-parse --short HEAD", repoRoot).trim() + const timestamp = new Date().toISOString() + + const codebaseDocsDir = path.join(repoRoot, ".planning", "codebase") + const codebaseDocs = fs.existsSync(codebaseDocsDir) + ? fs + .readdirSync(codebaseDocsDir) + .filter(f => f.endsWith(".md")) + .map(f => ({ + path: `.planning/codebase/${f}`, + text: readUtf8IfExists(path.join(codebaseDocsDir, f)) ?? "", + })) + : [] + + const rootDocs = [ + "README.md", + "INSTALL.md", + "CONTRIBUTING.md", + "OMNIPROTOCOL_SETUP.md", + "L2PS_TESTING.md", + ] + .filter(p => fs.existsSync(path.join(repoRoot, p))) + .map(p => ({ path: p, text: readUtf8IfExists(path.join(repoRoot, p)) ?? "" })) + + const docIndex = [...rootDocs, ...codebaseDocs].map(d => ({ + path: d.path, + bytes: Buffer.byteLength(d.text, "utf8"), + sha1: sha1(d.text), + })) + + writeJson(path.join(outRoot, "cross-references", "doc-index.json"), { + generated_at: timestamp, + docs: docIndex, + }) + + const tracked = spawnText("git ls-files \"*.ts\" \"*.tsx\"", repoRoot) + .split("\n") + .map(s => s.trim()) + .filter(Boolean) + .map(p => p.replaceAll(path.sep, "/")) + .filter(fileIsInScope) + + const repoUuid = stableUuid("repo", [gitRef, "kynesys/node"]) + + const entries: SemanticEntry[] = [] + const edges: GraphEdge[] = [] + const moduleUuidByFile = new Map() + const callableIndex = new Map() + const exportedUuids = new Set() + + // L0 repository entry. + entries.push({ + uuid: repoUuid, + level: "L0", + extraction_confidence: 0.85, + documentation_quality: codebaseDocs.length > 0 ? "adequate" : "sparse", + verification_status: "inferred", + semantic_fingerprint: { + natural_language_descriptions: [ + "Demos Network Node implementation: a single-process validator/node with RPC networking, consensus, storage, and optional feature modules.", + "Implements P2P networking, blockchain state, consensus (PoRBFT), and supporting services (MCP, metrics, TLSNotary, multichain, ZK features).", + ], + intent_vectors: [ + "blockchain", + "consensus", + "rpc", + "p2p-networking", + "node-operator", + "cryptography", + ], + domain_ontology_tags: [ + "demos-network", + "validator-node", + "gcr", + "omniprotocol", + "porbft", + ], + behavioral_contracts: ["async", "event-loop-driven"], + }, + code_location: { + file_path: null, + line_range: null, + symbol_name: null, + language: "unknown", + module_resolution_path: null, + }, + relationships: { + depends_on: [], + depended_by: [], + implements: [], + extends: [], + calls: [], + called_by: [], + similar_to: [], + contrasts_with: [], + }, + interface_contract: { inputs: [], outputs: [], throws: [], invariants: [] }, + implementation_details: { + algorithm_complexity: null, + concurrency_model: "async/await; event loop main cycle", + persistence_layer: ["postgres", "typeorm"], + external_integrations: ["@kynesyslabs/demosdk"], + critical_path: true, + test_coverage: null, + }, + documentation_provenance: { + primary_source: codebaseDocs.length > 0 ? ".planning/codebase/*.md" : "README.md", + related_adr: null, + last_modified: null, + authors: [], + }, + }) + + // L1 per-module entries. + for (const rel of tracked) { + const modUuid = stableUuid("mod", [gitRef, rel]) + moduleUuidByFile.set(rel, modUuid) + const last_modified = getFileMTimeIso(repoRoot, rel) + entries.push({ + uuid: modUuid, + level: "L1", + extraction_confidence: 0.8, + documentation_quality: "sparse", + verification_status: "inferred", + semantic_fingerprint: { + natural_language_descriptions: [`Module/file boundary for \`${rel}\`.`], + intent_vectors: detectIntentsFromPath(rel), + domain_ontology_tags: [], + behavioral_contracts: [], + }, + code_location: { + file_path: rel, + line_range: [1, 1], + symbol_name: null, + language: "typescript", + module_resolution_path: normalizeModuleResolutionPath(rel), + }, + relationships: { + depends_on: [], + depended_by: [], + implements: [], + extends: [], + calls: [], + called_by: [], + similar_to: [], + contrasts_with: [], + }, + interface_contract: { inputs: [], outputs: [], throws: [], invariants: [] }, + implementation_details: { + algorithm_complexity: null, + concurrency_model: null, + persistence_layer: [], + external_integrations: [], + critical_path: isCriticalPath(rel), + test_coverage: null, + }, + documentation_provenance: { + primary_source: null, + related_adr: null, + last_modified, + authors: [], + }, + }) + } + + // Per-file extraction. + for (const relPath of tracked) { + const absPath = path.join(repoRoot, relPath) + const text = fs.readFileSync(absPath, "utf8") + const last_modified = getFileMTimeIso(repoRoot, relPath) + const scriptKind = relPath.endsWith(".tsx") ? ts.ScriptKind.TSX : ts.ScriptKind.TS + const sf = ts.createSourceFile(relPath, text, ts.ScriptTarget.Latest, true, scriptKind) + + const moduleUuid = moduleUuidByFile.get(relPath)! + const envVars = extractEnvVarsFromSourceText(text) + + const importSpecs: string[] = [] + const moduleDependsOn: string[] = [] + + for (const st of sf.statements) { + if (ts.isImportDeclaration(st) && ts.isStringLiteral(st.moduleSpecifier)) { + importSpecs.push(st.moduleSpecifier.text) + } + if (ts.isExportDeclaration(st) && st.moduleSpecifier && ts.isStringLiteral(st.moduleSpecifier)) { + importSpecs.push(st.moduleSpecifier.text) + } + } + + for (const spec of importSpecs) { + const resolved = resolveImportToRelPath(repoRoot, relPath, spec) + if (!resolved) continue + const depUuid = moduleUuidByFile.get(resolved) + if (!depUuid) continue + moduleDependsOn.push(depUuid) + edges.push({ from: moduleUuid, to: depUuid, type: "depends_on" }) + } + + const modEntry = entries.find(e => e.uuid === moduleUuid) + if (modEntry) { + modEntry.relationships.depends_on = [...new Set(moduleDependsOn)] + modEntry.implementation_details.external_integrations = [ + ...new Set(importSpecs.filter(s => !s.startsWith(".") && !s.startsWith("@/") && !s.startsWith("src/"))), + ] + if (envVars.length > 0) modEntry.implementation_details.external_integrations.push("process.env") + modEntry.implementation_details.external_integrations = [...new Set(modEntry.implementation_details.external_integrations)] + } + + const extracted = extractExportedAtomsFromSourceFile({ + gitRef, + relPath, + sf, + moduleUuid, + importSpecs, + envVars, + callableIndex, + last_modified, + }) + + extracted.entries.forEach(e => entries.push(e)) + extracted.edges.forEach(e => edges.push(e)) + extracted.exportedUuids.forEach(u => exportedUuids.add(u)) + } + + // Reverse edges: depended_by / called_by. + const entryByUuid = new Map(entries.map(e => [e.uuid, e])) + for (const e of entries) { + for (const dep of e.relationships.depends_on) { + const target = entryByUuid.get(dep) + if (target) target.relationships.depended_by.push(e.uuid) + } + for (const call of e.relationships.calls) { + const target = entryByUuid.get(call) + if (target) target.relationships.called_by.push(e.uuid) + } + } + for (const e of entries) { + e.relationships.depended_by = [...new Set(e.relationships.depended_by)] + e.relationships.called_by = [...new Set(e.relationships.called_by)] + } + + // Graph with basic degree centrality. + const degree = new Map() + for (const edge of edges) { + degree.set(edge.from, (degree.get(edge.from) ?? 0) + 1) + degree.set(edge.to, (degree.get(edge.to) ?? 0) + 1) + } + const nodes: GraphNode[] = entries.map(e => ({ + uuid: e.uuid, + level: e.level, + label: e.code_location.symbol_name ?? e.code_location.file_path ?? (e.level === "L0" ? "repository" : e.uuid), + file_path: e.code_location.file_path, + symbol_name: e.code_location.symbol_name, + line_range: e.code_location.line_range, + centrality: degree.get(e.uuid) ?? 0, + })) + + // Write JSONL. + const jsonlPath = path.join(outRoot, "semantic-index.jsonl") + const fd = fs.openSync(jsonlPath, "w") + try { + for (const e of entries) fs.writeSync(fd, JSON.stringify(e) + "\n", undefined, "utf8") + } finally { + fs.closeSync(fd) + } + + writeJson(path.join(outRoot, "code-graph.json"), { + generated_at: timestamp, + git_ref: gitRef, + nodes, + edges, + }) + + const ontologyTerms = seedOntologyFromDocs([...rootDocs, ...codebaseDocs]) + writeJson(path.join(outRoot, "domain-ontologies", "demos-network-terms.json"), { + generated_at: timestamp, + terms: ontologyTerms, + }) + + writeText( + path.join(outRoot, "embeddings", "README.md"), + [ + "# Embeddings", + "", + "This index run does not include pre-computed embedding vectors.", + "Recommended: compute embeddings over `semantic_fingerprint.natural_language_descriptions` and store as:", + "- `semantic-fingerprints.npy`", + "- `uuid-mapping.json`", + "", + ].join("\n"), + ) + + // Versioning. + const versionsPath = path.join(outRoot, "versioning", "versions.json") + const existingVersionsText = readUtf8IfExists(versionsPath) + const versions = existingVersionsText ? (JSON.parse(existingVersionsText) as any[]) : [] + const version = versions.length === 0 ? "1.0.0" : bumpPatch(String(versions[versions.length - 1].version)) + + const stats = { + total_atoms: entries.length, + total_edges: edges.length, + exported_atoms: exportedUuids.size, + files_indexed: tracked.length, + confidence_avg: average(entries.map(e => e.extraction_confidence)), + min_confidence: Math.min(...entries.map(e => e.extraction_confidence)), + max_confidence: Math.max(...entries.map(e => e.extraction_confidence)), + } + + versions.push({ + version, + semver_logic: "MAJOR.MINOR.PATCH", + git_ref: gitRef, + timestamp, + parent_version: versions.length === 0 ? null : versions[versions.length - 1].version, + change_type: versions.length === 0 ? "full_reindex" : "incremental", + statistics: { + total_atoms: stats.total_atoms, + added: versions.length === 0 ? stats.total_atoms : null, + modified: null, + removed: null, + confidence_avg: stats.confidence_avg, + }, + }) + writeJson(versionsPath, versions) + + writeJson(path.join(outRoot, "manifest.json"), { + generated_at: timestamp, + git_ref: gitRef, + version, + scope: { + tracked_ts_files: tracked.length, + exclude_paths: [ + ".planning/**", + "dist/**", + "node_modules/**", + "local_tests/**", + "omniprotocol_fixtures_scripts/**", + "sdk/**", + ], + }, + inputs: { + docs_used: docIndex, + codebase_docs_used: codebaseDocs.map(d => d.path), + }, + statistics: stats, + quality_gates: { + exported_symbols_have_atoms: true, + note: "Exported symbols are detected via syntax (`export` modifiers and export declarations). Exported class members are also indexed as L3 atoms.", + }, + }) + + writeText(path.join(outRoot, "query-api.md"), buildQueryApiMarkdown({ version, gitRef, stats })) + writeText(path.join(outRoot, "consumption-guide.md"), buildConsumptionGuideMarkdown({ version, gitRef })) + writeText(path.join(outRoot, "versioning", "changelog.md"), buildChangelogMarkdown(versions)) +} + +if (import.meta.main) { + main() +} diff --git a/scripts/semantic-map/npy.ts b/scripts/semantic-map/npy.ts new file mode 100644 index 000000000..413f32f08 --- /dev/null +++ b/scripts/semantic-map/npy.ts @@ -0,0 +1,62 @@ +import * as fs from "fs" + +function padTo16(n: number) { + const mod = n % 16 + return mod === 0 ? 0 : 16 - mod +} + +function buildHeader(shape: [number, number]) { + // NPY v1.0 header is a Python dict literal, padded with spaces and ending with newline. + // We only support little-endian float32, C-order. + const dict = `{'descr': ' { - // REVIEW: PR Fix #6 - Implement per-sender nonce counter for transaction uniqueness - const currentNonce = this.senderNonces.get(senderId) || 0 + const signerPublicKeyHex = getSharedState.publicKeyHex + if (!signerPublicKeyHex) { + throw new Error("[Signaling Server] Node public key not available for message signing") + } + + // REVIEW: PR Fix #6 - Nonce must be coherent for the actual signer (`from`) + const currentNonce = this.senderNonces.get(signerPublicKeyHex) || 0 const nonce = currentNonce + 1 // Don't increment yet - wait for mempool success for better error handling const transaction = new Transaction() + const now = Date.now() transaction.content = { type: "instantMessaging", - from: senderId, + from: signerPublicKeyHex, to: targetId, - from_ed25519_address: senderId, + from_ed25519_address: signerPublicKeyHex, amount: 0, - data: ["instantMessaging", { message, timestamp: Date.now() }] as any, + data: ["instantMessaging", { senderId, targetId, message, timestamp: now }] as any, gcr_edits: [], nonce, - timestamp: Date.now(), + timestamp: now, transaction_fee: { network_fee: 0, rpc_fee: 0, additional_fee: 0 }, } - // NOTE: Future improvement - will be replaced with sender signature verification once client-side signing is implemented - // Current: Sign with node's private key for integrity (not authentication) - // REVIEW: PR Fix #14 - Add null safety check for private key access (location 1/3) - if (!getSharedState.identity?.ed25519?.privateKey) { - throw new Error("[Signaling Server] Private key not available for message signing") - } - - const signature = Cryptography.sign( - JSON.stringify(transaction.content), - getSharedState.identity.ed25519.privateKey, - ) - transaction.signature = signature as any transaction.hash = Hashing.sha256(JSON.stringify(transaction.content)) + const signature = await ucrypto.sign( + getSharedState.signingAlgorithm, + new TextEncoder().encode(transaction.hash), + ) + transaction.signature = { + type: getSharedState.signingAlgorithm, + data: uint8ArrayToHex(signature.signature), + } // Add to mempool // REVIEW: PR Fix #13 - Add error handling for blockchain storage consistency @@ -671,7 +673,7 @@ export class SignalingServer { reference_block: referenceBlock, }) // REVIEW: PR Fix #6 - Only increment nonce after successful mempool addition - this.senderNonces.set(senderId, nonce) + this.senderNonces.set(signerPublicKeyHex, nonce) } catch (error: any) { console.error("[Signaling Server] Failed to add message transaction to mempool:", error.message) throw error // Rethrow to be caught by caller's error handling @@ -712,21 +714,17 @@ export class SignalingServer { }) const messageHash = Hashing.sha256(messageContent) - // NOTE: Future improvement - will be replaced with sender signature verification once client-side signing is implemented - // Current: Sign with node's private key for integrity (not authentication) - // REVIEW: PR Fix #14 - Add null safety check for private key access (location 2/3) - if (!getSharedState.identity?.ed25519?.privateKey) { - throw new Error("[Signaling Server] Private key not available for offline message signing") - } - - const signature = Cryptography.sign(messageHash, getSharedState.identity.ed25519.privateKey) + const signature = await ucrypto.sign( + getSharedState.signingAlgorithm, + new TextEncoder().encode(messageHash), + ) const offlineMessage = offlineMessageRepository.create({ recipientPublicKey: targetId, senderPublicKey: senderId, messageHash, encryptedContent: message, - signature: Buffer.from(signature).toString("base64"), + signature: Buffer.from(signature.signature).toString("base64"), // REVIEW: PR Fix #9 - timestamp is string type to match TypeORM bigint behavior timestamp: Date.now().toString(), status: "pending", diff --git a/src/libs/blockchain/chain.ts b/src/libs/blockchain/chain.ts index 343b86047..40996f734 100644 --- a/src/libs/blockchain/chain.ts +++ b/src/libs/blockchain/chain.ts @@ -16,6 +16,7 @@ import { In, LessThan, FindManyOptions, + EntityManager, Repository, } from "typeorm" @@ -344,6 +345,8 @@ export default class Chain { operations: Operation[] = [], position?: number, cleanMempool = true, + persistTransactions = true, + transactionalEntityManager?: EntityManager, ): Promise { const orderedTransactionsHashes = block.content.ordered_transactions // Fetch transaction entities from the repository based on ordered transaction hashes @@ -399,16 +402,49 @@ export default class Chain { " does not exist: inserting a new block", ) + const db = await Datasource.getInstance() + const dataSource = db.getDataSource() + // Get transaction entities from mempool before starting transaction - const transactionEntities = await Mempool.getTransactionsByHashes( - orderedTransactionsHashes, - ) + const transactionEntities = persistTransactions + ? await Mempool.getTransactionsByHashes(orderedTransactionsHashes) + : [] + + if (transactionalEntityManager) { + const savedBlock = await transactionalEntityManager.save(this.blocks.target, newBlock) + + if (persistTransactions) { + for (let i = 0; i < transactionEntities.length; i++) { + const tx = transactionEntities[i] + const rawTransaction = Transaction.toRawTransaction(tx, "confirmed") + await transactionalEntityManager + .createQueryBuilder() + .insert() + .into(this.transactions.target) + .values(rawTransaction as any) + .orIgnore() + .execute() + } + } + + if (persistTransactions && cleanMempool) { + await Mempool.removeTransactionsByHashes( + transactionEntities.map(tx => tx.hash), + transactionalEntityManager, + ) + } + + await updateMerkleTreeAfterBlock( + dataSource, + block.number, + transactionalEntityManager, + ) + + return savedBlock + } // REVIEW: Wrap block insertion and Merkle tree update in transaction // This ensures both succeed or both fail (prevents state divergence) - const db = await Datasource.getInstance() - const dataSource = db.getDataSource() - // REVIEW: HIGH FIX - Wrap transaction in try/catch for proper error handling try { // REVIEW: Transaction boundary fix - defer shared state updates until after commit @@ -418,15 +454,26 @@ export default class Chain { // REVIEW: Add transactions using transactional manager (not direct repository) // This ensures all saves are part of the same transaction - for (let i = 0; i < transactionEntities.length; i++) { - const tx = transactionEntities[i] - const rawTransaction = Transaction.toRawTransaction(tx, "confirmed") - await transactionalEntityManager.save(this.transactions.target, rawTransaction) + if (persistTransactions) { + for (let i = 0; i < transactionEntities.length; i++) { + const tx = transactionEntities[i] + const rawTransaction = Transaction.toRawTransaction(tx, "confirmed") + // NOTE: During sync/consensus edge-cases we can attempt to persist a tx that + // already exists (unique by hash). This must be idempotent; duplicates should + // not abort the whole block commit. + await transactionalEntityManager + .createQueryBuilder() + .insert() + .into(this.transactions.target) + .values(rawTransaction as any) + .orIgnore() + .execute() + } } // REVIEW: CRITICAL FIX - Clean mempool within transaction using transactional manager // This ensures atomicity: if Merkle tree update fails, mempool cleanup rolls back - if (cleanMempool) { + if (persistTransactions && cleanMempool) { await Mempool.removeTransactionsByHashes( transactionEntities.map(tx => tx.hash), transactionalEntityManager, @@ -484,6 +531,9 @@ export default class Chain { const genesisTx = new Transaction() genesisTx.content.type = "genesis" genesisTx.blockNumber = 0 + // Ensure genesis tx can be persisted (transactions.from_ed25519_address is NOT NULL). + // Use a deterministic 32-byte zero key so genesis hashes remain stable across nodes. + genesisTx.content.from_ed25519_address = "0x" + "00".repeat(32) genesisTx.content.to = { type: getSharedState.signingAlgorithm, data: new Uint8Array(Buffer.from("0x0", "hex")), diff --git a/src/libs/blockchain/gcr/gcr_routines/GCRTokenRoutines.ts b/src/libs/blockchain/gcr/gcr_routines/GCRTokenRoutines.ts new file mode 100644 index 000000000..7f56ea0fe --- /dev/null +++ b/src/libs/blockchain/gcr/gcr_routines/GCRTokenRoutines.ts @@ -0,0 +1,1994 @@ +// REVIEW: GCRTokenRoutines - Handler for token GCREdit operations +// REVIEW: Phase 5.1 - Integrated with HookExecutor for script execution in consensus +import { EntityManager, Repository } from "typeorm" + +import { GCRToken } from "@/model/entities/GCRv2/GCR_Token" +import { GCRMain } from "@/model/entities/GCRv2/GCR_Main" +import ensureGCRForUser from "./ensureGCRForUser" +import Datasource from "@/model/datasource" +import log from "@/utilities/logger" +import { forgeToHex } from "@/libs/crypto/forgeUtils" +import { getSharedState } from "@/utilities/sharedState" + +// Scripting system imports for hook execution +import { + HookExecutor, + scriptExecutor, + applyMutations, + createTransferMutations, + createMintMutations, + createBurnMutations, + type TokenMutation, + type ExecuteWithHooksRequest, + type HookExecutionResult, + type GCRTokenData, +} from "@/libs/scripting" + +// SDK Transaction type for context +import type { Transaction } from "@kynesyslabs/demosdk/types" + +import { GCRResult } from "../handleGCR" +import { + GCREditToken, + GCREditTokenCreate, + GCREditTokenTransfer, + GCREditTokenMint, + GCREditTokenBurn, + GCREditTokenPause, + GCREditTokenUnpause, + GCREditTokenUpdateACL, + GCREditTokenGrantPermission, + GCREditTokenRevokePermission, + GCREditTokenUpgradeScript, + GCREditTokenTransferOwnership, + GCREditTokenCustom, +} from "../types/token/GCREditToken" +import type { TokenPermission, TokenHolderReference } from "../types/token/TokenTypes" +import { hasPermission } from "../types/token/TokenTypes" + +/** + * GCRTokenRoutines handles all token-related GCR edit operations. + * + * Implements: + * - handleCreateToken: Initialize token GCR entry with metadata, balances, ACL + * - handleTransferToken: Update balances in token GCR, update holder pointers (with hooks) + * - handleMintToken: Increase supply and balance (check permissions, with hooks) + * - handleBurnToken: Decrease supply and balance (check permissions, with hooks) + * - handleUpdateTokenACL: Modify ACL entries + * - handlePauseToken / handleUnpauseToken: Toggle paused state + * - handleUpgradeTokenScript: Replace script code (check permissions) + * - handleTransferOwnership: Transfer token ownership + * + * REVIEW: Phase 5.1 - Script execution integrated via HookExecutor for transfer, mint, burn + */ +export default class GCRTokenRoutines { + // REVIEW: Phase 5.1 - HookExecutor instance for script execution in consensus + private static hookExecutor: HookExecutor | null = null + + /** + * Get or create the HookExecutor instance + */ + private static getHookExecutor(): HookExecutor { + if (!this.hookExecutor) { + this.hookExecutor = new HookExecutor(scriptExecutor) + } + return this.hookExecutor + } + + /** + * Convert GCRToken entity to GCRTokenData for hook execution + * REVIEW: Phase 5.1 - Required for HookExecutor integration + */ + private static tokenToGCRTokenData(token: GCRToken): GCRTokenData { + return { + address: token.address, + name: token.name, + ticker: token.ticker, + decimals: token.decimals, + owner: token.owner, + totalSupply: BigInt(token.totalSupply), + balances: Object.fromEntries( + Object.entries(token.balances).map(([k, v]) => [k, BigInt(v)]), + ), + allowances: Object.fromEntries( + Object.entries(token.allowances).map(([owner, spenders]) => [ + owner, + Object.fromEntries( + Object.entries(spenders).map(([spender, v]) => [spender, BigInt(v)]), + ), + ]), + ), + paused: token.paused, + storage: token.customState, + } + } + + /** + * Apply GCRTokenData mutations back to GCRToken entity + * REVIEW: Phase 5.1 - Required for HookExecutor integration + */ + private static applyGCRTokenDataToEntity(token: GCRToken, data: GCRTokenData): void { + token.totalSupply = data.totalSupply.toString() + token.balances = Object.fromEntries( + Object.entries(data.balances).map(([k, v]) => [k, v.toString()]), + ) + token.allowances = Object.fromEntries( + Object.entries(data.allowances).map(([owner, spenders]) => [ + owner, + Object.fromEntries( + Object.entries(spenders).map(([spender, v]) => [spender, v.toString()]), + ), + ]), + ) + if (data.storage) { + token.customState = data.storage + } + } + + private static getDeterministicTxTimestamp(tx?: Transaction): number { + const raw = (tx as any)?.content?.timestamp + const value = + typeof raw === "number" + ? raw + : typeof raw === "string" + ? Number.parseInt(raw, 10) + : Number.NaN + if (!Number.isFinite(value)) { + throw new Error("Missing deterministic tx.content.timestamp") + } + return value + } + + private static getDeterministicPrevBlockHash(): string { + const sharedState = getSharedState + return sharedState.lastBlockHash ?? "0".repeat(64) + } + + private static getDeterministicBlockHeight(tx?: Transaction): number { + const fromTx = (tx as any)?.blockNumber + if (typeof fromTx === "number" && Number.isFinite(fromTx) && fromTx >= 0) return fromTx + const sharedState = getSharedState + const fromShared = sharedState.lastBlockNumber + if (typeof fromShared === "number" && Number.isFinite(fromShared) && fromShared >= 0) return fromShared + return 0 + } + + private static buildHookTxContext(tx: Transaction) { + return { + caller: tx.content.from, + txHash: tx.hash, + timestamp: this.getDeterministicTxTimestamp(tx), + blockHeight: this.getDeterministicBlockHeight(tx), + prevBlockHash: this.getDeterministicPrevBlockHash(), + } + } + + /** + * Main entry point for applying token GCREdit operations + * REVIEW: Phase 5.1 - Now accepts optional Transaction for script execution context + */ + static async apply( + editOperation: GCREditToken, + gcrTokenRepository: Repository, + simulate: boolean, + tx?: Transaction, // REVIEW: Phase 5.1 - Transaction context for hook execution + ): Promise { + if (editOperation.type !== "token") { + return { success: false, message: "Invalid GCREdit type for token routine" } + } + + if (tx) { + const txFrom = + typeof tx.content?.from !== "string" + ? forgeToHex(tx.content?.from as any) + : tx.content.from + const editAccount = + typeof editOperation.account !== "string" + ? forgeToHex(editOperation.account as any) + : editOperation.account + if ( + typeof txFrom === "string" && + typeof editAccount === "string" && + txFrom.toLowerCase() !== editAccount.toLowerCase() + ) { + return { + success: false, + message: "Token edit caller mismatch (edit.account must match tx.content.from)", + } + } + } + + // Normalize account address + const normalizedAccount = + typeof editOperation.account !== "string" + ? forgeToHex(editOperation.account as any) + : editOperation.account + + const rollbackStr = editOperation.isRollback ? "ROLLBACK" : "NORMAL" + log.debug( + "[GCRTokenRoutines] Applying token operation: " + + editOperation.operation + + " (" + + rollbackStr + + ")", + ) + + // Clone and potentially reverse for rollback + const edit = { ...editOperation, account: normalizedAccount } + + // Route to appropriate handler + // REVIEW: Phase 5.1 - Pass tx to handlers that support hooks (transfer, mint, burn) + switch (edit.operation) { + case "create": + return this.handleCreateToken( + edit as GCREditTokenCreate, + gcrTokenRepository, + simulate, + ) + case "transfer": + return this.handleTransferToken( + edit as GCREditTokenTransfer, + gcrTokenRepository, + simulate, + tx, + ) + case "mint": + return this.handleMintToken( + edit as GCREditTokenMint, + gcrTokenRepository, + simulate, + tx, + ) + case "burn": + return this.handleBurnToken( + edit as GCREditTokenBurn, + gcrTokenRepository, + simulate, + tx, + ) + case "pause": + return this.handlePauseToken( + edit as GCREditTokenPause, + gcrTokenRepository, + simulate, + ) + case "unpause": + return this.handleUnpauseToken( + edit as GCREditTokenUnpause, + gcrTokenRepository, + simulate, + ) + case "updateACL": + return this.handleUpdateTokenACL( + edit as GCREditTokenUpdateACL, + gcrTokenRepository, + simulate, + tx, + ) + case "grantPermission": + return this.handleGrantPermission( + edit as GCREditTokenGrantPermission, + gcrTokenRepository, + simulate, + tx, + ) + case "revokePermission": + return this.handleRevokePermission( + edit as GCREditTokenRevokePermission, + gcrTokenRepository, + simulate, + tx, + ) + case "upgradeScript": + return this.handleUpgradeTokenScript( + edit as GCREditTokenUpgradeScript, + gcrTokenRepository, + simulate, + tx, + ) + case "transferOwnership": + return this.handleTransferOwnership( + edit as GCREditTokenTransferOwnership, + gcrTokenRepository, + simulate, + ) + // REVIEW: Phase 5.2 - Custom script method execution + case "custom": + return this.handleCustomMethod( + edit as GCREditTokenCustom, + gcrTokenRepository, + simulate, + tx, + ) + default: + return { + success: false, + message: "Unknown token operation: " + (edit as any).operation, + } + } + } + + /** + * Handle token creation - initializes a new token GCR entry + */ + private static async handleCreateToken( + edit: GCREditTokenCreate, + gcrTokenRepository: Repository, + simulate: boolean, + ): Promise { + const { tokenData } = edit.data + const tokenAddress = edit.data.tokenAddress + + log.debug("[GCRTokenRoutines] Creating token: " + tokenAddress) + + // For rollback, delete the token + if (edit.isRollback) { + if (!simulate) { + await gcrTokenRepository.delete({ address: tokenAddress }) + // Remove holder reference for deployer + await this.removeHolderReference( + tokenData.metadata.deployer, + tokenAddress, + ) + log.info("[GCRTokenRoutines] Rolled back token creation: " + tokenAddress) + } + return { success: true, message: "Token creation rolled back" } + } + + // Check if token already exists + const existing = await gcrTokenRepository.findOneBy({ address: tokenAddress }) + if (existing) { + return { + success: false, + message: "Token already exists at address: " + tokenAddress, + } + } + + // Create new token entity + const token = new GCRToken() + token.address = tokenAddress + token.name = tokenData.metadata.name + token.ticker = tokenData.metadata.ticker + token.decimals = tokenData.metadata.decimals + token.deployer = tokenData.metadata.deployer + token.deployerNonce = tokenData.metadata.deployerNonce + token.deployedAt = tokenData.metadata.deployedAt + token.hasScript = tokenData.metadata.hasScript + token.totalSupply = tokenData.state.totalSupply + token.balances = tokenData.state.balances + token.allowances = tokenData.state.allowances + token.customState = tokenData.state.customState + token.owner = tokenData.accessControl.owner + token.paused = tokenData.accessControl.paused + token.aclEntries = tokenData.accessControl.entries + token.script = tokenData.script + token.deployTxHash = edit.txhash + + if (!simulate) { + try { + await gcrTokenRepository.save(token) + + // Add holder reference for deployer if they have balance + const deployerBalance = tokenData.state.balances[tokenData.metadata.deployer] ?? "0" + if (BigInt(deployerBalance) > 0n) { + await this.addHolderReference(tokenData.metadata.deployer, { + tokenAddress, + ticker: tokenData.metadata.ticker, + name: tokenData.metadata.name, + decimals: tokenData.metadata.decimals, + }) + } + + log.info( + "[GCRTokenRoutines] Created token " + + tokenData.metadata.ticker + + " at " + + tokenAddress, + ) + } catch (error) { + log.error("[GCRTokenRoutines] Failed to create token: " + error) + return { success: false, message: "Failed to save token" } + } + } + + return { success: true, message: "Token created successfully" } + } + + /** + * Handle token transfer - updates balances and holder pointers + */ + private static async handleTransferToken( + edit: GCREditTokenTransfer, + gcrTokenRepository: Repository, + simulate: boolean, + tx?: Transaction, // REVIEW: Phase 5.1 - Transaction context for hook execution + ): Promise { + const { from, to, amount } = edit.data + const tokenAddress = edit.tokenAddress + + log.debug( + "[GCRTokenRoutines] Transfer: " + + amount + + " from " + + from + + " to " + + to + + " for token " + + tokenAddress, + ) + + const transferAmount = BigInt(amount) + if (transferAmount <= 0n) { + return { success: false, message: "Transfer amount must be positive" } + } + + // For rollback, reverse the direction + const actualFrom = edit.isRollback ? to : from + const actualTo = edit.isRollback ? from : to + const isSelfTransfer = + typeof actualFrom === "string" && + typeof actualTo === "string" && + actualFrom.toLowerCase() === actualTo.toLowerCase() + + // In simulate mode we must avoid persisting, so a simple read/compute is fine. + if (simulate) { + const token = await gcrTokenRepository.findOneBy({ address: tokenAddress }) + if (!token) return { success: false, message: "Token not found: " + tokenAddress } + if (token.paused && !edit.isRollback) return { success: false, message: "Token is paused" } + + const fromBalance = BigInt(token.balances[actualFrom] ?? "0") + if (fromBalance < transferAmount) return { success: false, message: "Insufficient balance" } + + const prevToBalance = BigInt(token.balances[actualTo] ?? "0") + + if (token.hasScript && token.script?.code && tx && !edit.isRollback) { + try { + const hookExecutor = this.getHookExecutor() + const tokenData = this.tokenToGCRTokenData(token) + const nativeMutations = isSelfTransfer + ? [] + : createTransferMutations(actualFrom, actualTo, transferAmount) + + const request: ExecuteWithHooksRequest = { + operation: "transfer", + operationData: { from: actualFrom, to: actualTo, amount: transferAmount }, + tokenAddress, + tokenData, + scriptCode: token.script.code, + txContext: this.buildHookTxContext(tx), + nativeOperationMutations: nativeMutations, + } + + const result: HookExecutionResult = await hookExecutor.executeWithHooks(request) + if (result.rejection) { + return { + success: false, + message: `Transfer rejected by ${result.rejection.hookType}: ${result.rejection.reason}`, + } + } + + this.applyGCRTokenDataToEntity(token, result.finalState) + } catch (error) { + return { success: false, message: `Script execution failed: ${error}` } + } + } else { + // Self-transfers are a no-op for balances (prevents accidental minting) + if (!isSelfTransfer) { + token.balances[actualFrom] = (fromBalance - transferAmount).toString() + token.balances[actualTo] = (prevToBalance + transferAmount).toString() + } + } + + if (token.balances[actualFrom] === "0") delete token.balances[actualFrom] + return { success: true, message: "Transfer completed" } + } + + // Non-simulated execution must be serialized per-token to prevent lost updates when multiple + // block sync/apply paths touch the same token concurrently. + let tokenMetaForLog: TokenHolderReference | null = null + + try { + await gcrTokenRepository.manager.transaction(async em => { + const repo = em.getRepository(GCRToken) + const token = await repo.findOne({ + where: { address: tokenAddress }, + lock: { mode: "pessimistic_write" }, + }) + + if (!token) throw new Error("Token not found: " + tokenAddress) + if (token.paused && !edit.isRollback) throw new Error("Token is paused") + + const fromBefore = BigInt(token.balances[actualFrom] ?? "0") + const toBefore = BigInt(token.balances[actualTo] ?? "0") + if (fromBefore < transferAmount) throw new Error("Insufficient balance") + + const tokenMeta: TokenHolderReference = { tokenAddress, ticker: token.ticker, name: token.name, decimals: token.decimals } + const beforeByAddr: Record = {} + const recordBefore = (mutations: TokenMutation[]) => { + const affected = this.collectAddressesFromMutations(mutations) + for (const addr of affected) beforeByAddr[addr] = BigInt(token.balances[addr] ?? "0") + } + + if (token.hasScript && token.script?.code && tx && !edit.isRollback) { + const hookExecutor = this.getHookExecutor() + const tokenData = this.tokenToGCRTokenData(token) + const nativeMutations = isSelfTransfer + ? [] + : createTransferMutations(actualFrom, actualTo, transferAmount) + + const request: ExecuteWithHooksRequest = { + operation: "transfer", + operationData: { from: actualFrom, to: actualTo, amount: transferAmount }, + tokenAddress, + tokenData, + scriptCode: token.script.code, + txContext: this.buildHookTxContext(tx), + nativeOperationMutations: nativeMutations, + } + + const result: HookExecutionResult = await hookExecutor.executeWithHooks(request) + if (result.rejection) { + throw new Error( + `Transfer rejected by ${result.rejection.hookType}: ${result.rejection.reason}`, + ) + } + + recordBefore(result.mutations) + this.applyGCRTokenDataToEntity(token, result.finalState) + } else { + const nativeMutations = isSelfTransfer + ? [] + : createTransferMutations(actualFrom, actualTo, transferAmount) + recordBefore(nativeMutations) + // Self-transfers are a no-op for balances (prevents accidental minting) + if (!isSelfTransfer) { + token.balances[actualFrom] = (fromBefore - transferAmount).toString() + token.balances[actualTo] = (toBefore + transferAmount).toString() + } + } + + if (token.balances[actualFrom] === "0") delete token.balances[actualFrom] + + await repo.save(token) + + const adds: string[] = [] + const removes: string[] = [] + for (const [addr, before] of Object.entries(beforeByAddr)) { + const after = BigInt(token.balances[addr] ?? "0") + if (before === 0n && after > 0n) adds.push(addr) + if (before > 0n && after === 0n) removes.push(addr) + } + + tokenMetaForLog = tokenMeta + for (const addr of removes) { + await this.removeHolderReference(addr, tokenAddress, em) + } + for (const addr of adds) { + await this.addHolderReference(addr, tokenMeta, em) + } + }) + + log.info( + "[GCRTokenRoutines] Transferred " + + amount + + " " + + tokenMetaForLog?.ticker + + " from " + + actualFrom + + " to " + + actualTo, + ) + } catch (error) { + log.error("[GCRTokenRoutines] Failed to transfer: " + error) + return { success: false, message: "Failed to save transfer" } + } + + return { success: true, message: "Transfer completed" } + } + + /** + * Handle token minting - increases supply and target balance + */ + private static async handleMintToken( + edit: GCREditTokenMint, + gcrTokenRepository: Repository, + simulate: boolean, + tx?: Transaction, // REVIEW: Phase 5.1 - Transaction context for hook execution + ): Promise { + const { to, amount } = edit.data + const tokenAddress = edit.tokenAddress + + log.debug( + "[GCRTokenRoutines] Mint: " + amount + " to " + to + " for token " + tokenAddress, + ) + + const mintAmount = BigInt(amount) + if (mintAmount <= 0n) { + return { success: false, message: "Mint amount must be positive" } + } + + // Simulate mode: validate deterministically without persisting. + if (simulate) { + const token = await gcrTokenRepository.findOneBy({ address: tokenAddress }) + if (!token) return { success: false, message: "Token not found: " + tokenAddress } + if (token.paused && !edit.isRollback) return { success: false, message: "Token is paused" } + if (!edit.isRollback && !hasPermission(token.toAccessControl(), edit.account, "canMint")) { + return { success: false, message: "No mint permission" } + } + + const prevBalance = BigInt(token.balances[to] ?? "0") + if (edit.isRollback) { + if (prevBalance < mintAmount) { + return { success: false, message: "Cannot rollback: insufficient balance" } + } + token.balances[to] = (prevBalance - mintAmount).toString() + token.totalSupply = (BigInt(token.totalSupply) - mintAmount).toString() + if (token.balances[to] === "0") delete token.balances[to] + } else if (token.hasScript && token.script?.code && tx) { + try { + const hookExecutor = this.getHookExecutor() + const tokenData = this.tokenToGCRTokenData(token) + const nativeMutations = createMintMutations(to, mintAmount) + + const request: ExecuteWithHooksRequest = { + operation: "mint", + operationData: { to, amount: mintAmount }, + tokenAddress, + tokenData, + scriptCode: token.script.code, + txContext: this.buildHookTxContext(tx), + nativeOperationMutations: nativeMutations, + } + + const result: HookExecutionResult = await hookExecutor.executeWithHooks(request) + if (result.rejection) { + return { + success: false, + message: `Mint rejected by ${result.rejection.hookType}: ${result.rejection.reason}`, + } + } + this.applyGCRTokenDataToEntity(token, result.finalState) + } catch (error) { + return { success: false, message: `Script execution failed: ${error}` } + } + } else { + token.balances[to] = (prevBalance + mintAmount).toString() + token.totalSupply = (BigInt(token.totalSupply) + mintAmount).toString() + } + + return { success: true, message: "Mint completed" } + } + + try { + await gcrTokenRepository.manager.transaction(async em => { + const repo = em.getRepository(GCRToken) + const token = await repo.findOne({ + where: { address: tokenAddress }, + lock: { mode: "pessimistic_write" }, + }) + + if (!token) throw new Error("Token not found: " + tokenAddress) + if (token.paused && !edit.isRollback) throw new Error("Token is paused") + if (!edit.isRollback && !hasPermission(token.toAccessControl(), edit.account, "canMint")) { + throw new Error("No mint permission") + } + + const prevBalance = BigInt(token.balances[to] ?? "0") + const supplyBefore = BigInt(token.totalSupply ?? "0") + + const tokenMeta: TokenHolderReference = { tokenAddress, ticker: token.ticker, name: token.name, decimals: token.decimals } + const beforeByAddr: Record = {} + const recordBefore = (mutations: TokenMutation[]) => { + const affected = this.collectAddressesFromMutations(mutations) + for (const addr of affected) beforeByAddr[addr] = BigInt(token.balances[addr] ?? "0") + } + + if (edit.isRollback) { + recordBefore([{ kind: "burn", from: to, amount: mintAmount }]) + if (prevBalance < mintAmount) throw new Error("Cannot rollback: insufficient balance") + token.balances[to] = (prevBalance - mintAmount).toString() + token.totalSupply = (supplyBefore - mintAmount).toString() + if (token.balances[to] === "0") delete token.balances[to] + } else if (token.hasScript && token.script?.code && tx) { + const hookExecutor = this.getHookExecutor() + const tokenData = this.tokenToGCRTokenData(token) + const nativeMutations = createMintMutations(to, mintAmount) + + const request: ExecuteWithHooksRequest = { + operation: "mint", + operationData: { to, amount: mintAmount }, + tokenAddress, + tokenData, + scriptCode: token.script.code, + txContext: this.buildHookTxContext(tx), + nativeOperationMutations: nativeMutations, + } + + const result: HookExecutionResult = await hookExecutor.executeWithHooks(request) + if (result.rejection) { + throw new Error(`Mint rejected by ${result.rejection.hookType}: ${result.rejection.reason}`) + } + recordBefore(result.mutations) + this.applyGCRTokenDataToEntity(token, result.finalState) + } else { + recordBefore(createMintMutations(to, mintAmount)) + token.balances[to] = (prevBalance + mintAmount).toString() + token.totalSupply = (supplyBefore + mintAmount).toString() + } + + await repo.save(token) + + const adds: string[] = [] + const removes: string[] = [] + for (const [addr, before] of Object.entries(beforeByAddr)) { + const after = BigInt(token.balances[addr] ?? "0") + if (before === 0n && after > 0n) adds.push(addr) + if (before > 0n && after === 0n) removes.push(addr) + } + for (const addr of removes) await this.removeHolderReference(addr, tokenAddress, em) + for (const addr of adds) await this.addHolderReference(addr, tokenMeta, em) + }) + + log.info("[GCRTokenRoutines] Minted " + amount + " to " + to + " for " + tokenAddress) + } catch (error) { + log.error("[GCRTokenRoutines] Failed to mint: " + error) + return { success: false, message: "Failed to save mint" } + } + + return { success: true, message: "Mint completed" } + } + + /** + * Handle token burning - decreases supply and target balance + */ + private static async handleBurnToken( + edit: GCREditTokenBurn, + gcrTokenRepository: Repository, + simulate: boolean, + tx?: Transaction, // REVIEW: Phase 5.1 - Transaction context for hook execution + ): Promise { + const { from, amount } = edit.data + const tokenAddress = edit.tokenAddress + + log.debug( + "[GCRTokenRoutines] Burn: " + amount + " from " + from + " for token " + tokenAddress, + ) + + const burnAmount = BigInt(amount) + if (burnAmount <= 0n) { + return { success: false, message: "Burn amount must be positive" } + } + + if (simulate) { + const token = await gcrTokenRepository.findOneBy({ address: tokenAddress }) + if (!token) return { success: false, message: "Token not found: " + tokenAddress } + if (token.paused && !edit.isRollback) return { success: false, message: "Token is paused" } + if (!edit.isRollback && edit.account !== from) { + if (!hasPermission(token.toAccessControl(), edit.account, "canBurn")) { + return { success: false, message: "No burn permission" } + } + } + + const prevBalance = BigInt(token.balances[from] ?? "0") + if (edit.isRollback) { + token.balances[from] = (prevBalance + burnAmount).toString() + token.totalSupply = (BigInt(token.totalSupply) + burnAmount).toString() + } else if (token.hasScript && token.script?.code && tx) { + if (prevBalance < burnAmount) return { success: false, message: "Insufficient balance to burn" } + try { + const hookExecutor = this.getHookExecutor() + const tokenData = this.tokenToGCRTokenData(token) + const nativeMutations = createBurnMutations(from, burnAmount) + const request: ExecuteWithHooksRequest = { + operation: "burn", + operationData: { from, amount: burnAmount }, + tokenAddress, + tokenData, + scriptCode: token.script.code, + txContext: this.buildHookTxContext(tx), + nativeOperationMutations: nativeMutations, + } + const result: HookExecutionResult = await hookExecutor.executeWithHooks(request) + if (result.rejection) { + return { + success: false, + message: `Burn rejected by ${result.rejection.hookType}: ${result.rejection.reason}`, + } + } + this.applyGCRTokenDataToEntity(token, result.finalState) + } catch (error) { + return { success: false, message: `Script execution failed: ${error}` } + } + } else { + if (prevBalance < burnAmount) return { success: false, message: "Insufficient balance to burn" } + token.balances[from] = (prevBalance - burnAmount).toString() + token.totalSupply = (BigInt(token.totalSupply) - burnAmount).toString() + if (token.balances[from] === "0") delete token.balances[from] + } + + return { success: true, message: "Burn completed" } + } + + try { + await gcrTokenRepository.manager.transaction(async em => { + const repo = em.getRepository(GCRToken) + const token = await repo.findOne({ + where: { address: tokenAddress }, + lock: { mode: "pessimistic_write" }, + }) + + if (!token) throw new Error("Token not found: " + tokenAddress) + if (token.paused && !edit.isRollback) throw new Error("Token is paused") + if (!edit.isRollback && edit.account !== from) { + if (!hasPermission(token.toAccessControl(), edit.account, "canBurn")) { + throw new Error("No burn permission") + } + } + + const prevBalance = BigInt(token.balances[from] ?? "0") + const supplyBefore = BigInt(token.totalSupply ?? "0") + + const tokenMeta: TokenHolderReference = { tokenAddress, ticker: token.ticker, name: token.name, decimals: token.decimals } + const beforeByAddr: Record = {} + const recordBefore = (mutations: TokenMutation[]) => { + const affected = this.collectAddressesFromMutations(mutations) + for (const addr of affected) beforeByAddr[addr] = BigInt(token.balances[addr] ?? "0") + } + + if (edit.isRollback) { + recordBefore([{ kind: "mint", to: from, amount: burnAmount }]) + token.balances[from] = (prevBalance + burnAmount).toString() + token.totalSupply = (supplyBefore + burnAmount).toString() + } else if (token.hasScript && token.script?.code && tx) { + if (prevBalance < burnAmount) throw new Error("Insufficient balance to burn") + + const hookExecutor = this.getHookExecutor() + const tokenData = this.tokenToGCRTokenData(token) + const nativeMutations = createBurnMutations(from, burnAmount) + const request: ExecuteWithHooksRequest = { + operation: "burn", + operationData: { from, amount: burnAmount }, + tokenAddress, + tokenData, + scriptCode: token.script.code, + txContext: this.buildHookTxContext(tx), + nativeOperationMutations: nativeMutations, + } + + const result: HookExecutionResult = await hookExecutor.executeWithHooks(request) + if (result.rejection) { + throw new Error(`Burn rejected by ${result.rejection.hookType}: ${result.rejection.reason}`) + } + recordBefore(result.mutations) + this.applyGCRTokenDataToEntity(token, result.finalState) + } else { + recordBefore(createBurnMutations(from, burnAmount)) + if (prevBalance < burnAmount) throw new Error("Insufficient balance to burn") + token.balances[from] = (prevBalance - burnAmount).toString() + token.totalSupply = (supplyBefore - burnAmount).toString() + if (token.balances[from] === "0") delete token.balances[from] + } + + await repo.save(token) + + const adds: string[] = [] + const removes: string[] = [] + for (const [addr, before] of Object.entries(beforeByAddr)) { + const after = BigInt(token.balances[addr] ?? "0") + if (before === 0n && after > 0n) adds.push(addr) + if (before > 0n && after === 0n) removes.push(addr) + } + for (const addr of removes) await this.removeHolderReference(addr, tokenAddress, em) + for (const addr of adds) await this.addHolderReference(addr, tokenMeta, em) + }) + + log.info("[GCRTokenRoutines] Burned " + amount + " from " + from + " for " + tokenAddress) + } catch (error) { + log.error("[GCRTokenRoutines] Failed to burn: " + error) + return { success: false, message: "Failed to save burn" } + } + + return { success: true, message: "Burn completed" } + } + + /** + * Handle pausing a token + */ + private static async handlePauseToken( + edit: GCREditTokenPause, + gcrTokenRepository: Repository, + simulate: boolean, + ): Promise { + const tokenAddress = edit.tokenAddress + + log.debug("[GCRTokenRoutines] Pause token: " + tokenAddress) + + // Get token + const token = await gcrTokenRepository.findOneBy({ address: tokenAddress }) + if (!token) { + return { success: false, message: "Token not found: " + tokenAddress } + } + + // Check permission (unless rollback) + if (!edit.isRollback) { + if (!hasPermission(token.toAccessControl(), edit.account, "canPause")) { + return { success: false, message: "No pause permission" } + } + } + + // For rollback, unpause; otherwise pause + token.paused = !edit.isRollback + + if (!simulate) { + try { + await gcrTokenRepository.save(token) + const action = edit.isRollback ? "Unpaused" : "Paused" + log.info("[GCRTokenRoutines] " + action + " token " + tokenAddress) + } catch (error) { + log.error("[GCRTokenRoutines] Failed to pause: " + error) + return { success: false, message: "Failed to save pause state" } + } + } + + return { success: true, message: edit.isRollback ? "Token unpaused" : "Token paused" } + } + + /** + * Handle unpausing a token + */ + private static async handleUnpauseToken( + edit: GCREditTokenUnpause, + gcrTokenRepository: Repository, + simulate: boolean, + ): Promise { + const tokenAddress = edit.tokenAddress + + log.debug("[GCRTokenRoutines] Unpause token: " + tokenAddress) + + // Get token + const token = await gcrTokenRepository.findOneBy({ address: tokenAddress }) + if (!token) { + return { success: false, message: "Token not found: " + tokenAddress } + } + + // Check permission (unless rollback) + if (!edit.isRollback) { + if (!hasPermission(token.toAccessControl(), edit.account, "canPause")) { + return { success: false, message: "No pause permission" } + } + } + + // For rollback, pause; otherwise unpause + token.paused = edit.isRollback + + if (!simulate) { + try { + await gcrTokenRepository.save(token) + const action = edit.isRollback ? "Paused" : "Unpaused" + log.info("[GCRTokenRoutines] " + action + " token " + tokenAddress) + } catch (error) { + log.error("[GCRTokenRoutines] Failed to unpause: " + error) + return { success: false, message: "Failed to save pause state" } + } + } + + return { success: true, message: edit.isRollback ? "Token paused" : "Token unpaused" } + } + + /** + * Handle ACL updates - grant or revoke permissions + */ + private static async handleUpdateTokenACL( + edit: GCREditTokenUpdateACL, + gcrTokenRepository: Repository, + simulate: boolean, + tx?: Transaction, + ): Promise { + const { action, targetAddress, permissions } = edit.data + const tokenAddress = edit.tokenAddress + + log.debug( + "[GCRTokenRoutines] ACL update: " + + action + + " " + + permissions.join(",") + + " for " + + targetAddress, + ) + + // Get token + const token = await gcrTokenRepository.findOneBy({ address: tokenAddress }) + if (!token) { + return { success: false, message: "Token not found: " + tokenAddress } + } + + // Check permission (unless rollback) + if (!edit.isRollback) { + if (!hasPermission(token.toAccessControl(), edit.account, "canModifyACL")) { + return { success: false, message: "No ACL modification permission" } + } + } + + // Determine actual action (flip for rollback) + const actualAction = edit.isRollback + ? (action === "grant" ? "revoke" : "grant") + : action + + if (actualAction === "grant") { + const grantedAt = this.getDeterministicTxTimestamp(tx) + // Find or create entry + let entry = token.aclEntries.find((e) => e.address === targetAddress) + if (!entry) { + entry = { + address: targetAddress, + permissions: [], + grantedAt, + grantedBy: edit.account, + } + token.aclEntries.push(entry) + } + // Add permissions + for (const perm of permissions) { + if (!entry.permissions.includes(perm)) { + entry.permissions.push(perm) + } + } + } else { + // Revoke + const entry = token.aclEntries.find((e) => e.address === targetAddress) + if (entry) { + entry.permissions = entry.permissions.filter( + (p) => !permissions.includes(p as TokenPermission), + ) + // Remove entry if no permissions left + if (entry.permissions.length === 0) { + token.aclEntries = token.aclEntries.filter( + (e) => e.address !== targetAddress, + ) + } + } + } + + if (!simulate) { + try { + await gcrTokenRepository.save(token) + log.info( + "[GCRTokenRoutines] ACL " + + actualAction + + "ed " + + permissions.join(",") + + " for " + + targetAddress, + ) + } catch (error) { + log.error("[GCRTokenRoutines] Failed to update ACL: " + error) + return { success: false, message: "Failed to save ACL update" } + } + } + + return { success: true, message: "ACL " + actualAction + " completed" } + } + + // REVIEW: Phase 4.2 - Dedicated Grant/Revoke Permission handlers + + /** + * Handle granting permissions to an address. + * This is a specialized form of updateACL for grant operations. + * + * @param edit - GCREdit operation for granting permission + * @param gcrTokenRepository - Token repository + * @param simulate - Whether to simulate without persisting + * @returns GCRResult indicating success or failure + */ + private static async handleGrantPermission( + edit: GCREditTokenGrantPermission, + gcrTokenRepository: Repository, + simulate: boolean, + tx?: Transaction, + ): Promise { + const { grantee, permissions } = edit.data + const tokenAddress = edit.tokenAddress + + log.debug( + "[GCRTokenRoutines] Grant permission: " + + permissions.join(",") + + " to " + + grantee + + " on " + + tokenAddress, + ) + + // Get token + const token = await gcrTokenRepository.findOneBy({ address: tokenAddress }) + if (!token) { + return { success: false, message: "Token not found: " + tokenAddress } + } + + // Check permission (unless rollback) + if (!edit.isRollback) { + if (!hasPermission(token.toAccessControl(), edit.account, "canModifyACL")) { + return { success: false, message: "No ACL modification permission" } + } + } + + // For rollback, we revoke instead of grant + if (edit.isRollback) { + // Revoke the permissions + const entry = token.aclEntries.find((e) => e.address === grantee) + if (entry) { + entry.permissions = entry.permissions.filter( + (p) => !permissions.includes(p as TokenPermission), + ) + // Remove entry if no permissions left + if (entry.permissions.length === 0) { + token.aclEntries = token.aclEntries.filter((e) => e.address !== grantee) + } + } + } else { + // Normal grant + const grantedAt = this.getDeterministicTxTimestamp(tx) + let entry = token.aclEntries.find((e) => e.address === grantee) + if (!entry) { + entry = { + address: grantee, + permissions: [], + grantedAt, + grantedBy: edit.account, + } + token.aclEntries.push(entry) + } + // Add permissions + for (const perm of permissions) { + if (!entry.permissions.includes(perm)) { + entry.permissions.push(perm) + } + } + } + + if (!simulate) { + try { + await gcrTokenRepository.save(token) + const action = edit.isRollback ? "Revoked (rollback)" : "Granted" + log.info( + "[GCRTokenRoutines] " + + action + + " " + + permissions.join(",") + + " to " + + grantee, + ) + } catch (error) { + log.error("[GCRTokenRoutines] Failed to grant permission: " + error) + return { success: false, message: "Failed to save permission grant" } + } + } + + return { + success: true, + message: edit.isRollback ? "Permission revoked (rollback)" : "Permission granted", + } + } + + /** + * Handle revoking permissions from an address. + * This is a specialized form of updateACL for revoke operations. + * + * @param edit - GCREdit operation for revoking permission + * @param gcrTokenRepository - Token repository + * @param simulate - Whether to simulate without persisting + * @returns GCRResult indicating success or failure + */ + private static async handleRevokePermission( + edit: GCREditTokenRevokePermission, + gcrTokenRepository: Repository, + simulate: boolean, + tx?: Transaction, + ): Promise { + const { grantee, permissions } = edit.data + const tokenAddress = edit.tokenAddress + + log.debug( + "[GCRTokenRoutines] Revoke permission: " + + permissions.join(",") + + " from " + + grantee + + " on " + + tokenAddress, + ) + + // Get token + const token = await gcrTokenRepository.findOneBy({ address: tokenAddress }) + if (!token) { + return { success: false, message: "Token not found: " + tokenAddress } + } + + // Check permission (unless rollback) + if (!edit.isRollback) { + if (!hasPermission(token.toAccessControl(), edit.account, "canModifyACL")) { + return { success: false, message: "No ACL modification permission" } + } + } + + // For rollback, we grant instead of revoke + if (edit.isRollback) { + // Re-grant the permissions + const grantedAt = this.getDeterministicTxTimestamp(tx) + let entry = token.aclEntries.find((e) => e.address === grantee) + if (!entry) { + entry = { + address: grantee, + permissions: [], + grantedAt, + grantedBy: edit.account, + } + token.aclEntries.push(entry) + } + for (const perm of permissions) { + if (!entry.permissions.includes(perm)) { + entry.permissions.push(perm) + } + } + } else { + // Normal revoke + const entry = token.aclEntries.find((e) => e.address === grantee) + if (entry) { + entry.permissions = entry.permissions.filter( + (p) => !permissions.includes(p as TokenPermission), + ) + // Remove entry if no permissions left + if (entry.permissions.length === 0) { + token.aclEntries = token.aclEntries.filter((e) => e.address !== grantee) + } + } + } + + if (!simulate) { + try { + await gcrTokenRepository.save(token) + const action = edit.isRollback ? "Granted (rollback)" : "Revoked" + log.info( + "[GCRTokenRoutines] " + + action + + " " + + permissions.join(",") + + " from " + + grantee, + ) + } catch (error) { + log.error("[GCRTokenRoutines] Failed to revoke permission: " + error) + return { success: false, message: "Failed to save permission revoke" } + } + } + + return { + success: true, + message: edit.isRollback ? "Permission granted (rollback)" : "Permission revoked", + } + } + + /** + * Handle script upgrade + */ + private static async handleUpgradeTokenScript( + edit: GCREditTokenUpgradeScript, + gcrTokenRepository: Repository, + simulate: boolean, + tx?: Transaction, + ): Promise { + const { newScript, upgradeReason, previousVersion } = edit.data + const tokenAddress = edit.tokenAddress + + log.debug("[GCRTokenRoutines] Upgrade script for token: " + tokenAddress) + + // Get token + const token = await gcrTokenRepository.findOneBy({ address: tokenAddress }) + if (!token) { + return { success: false, message: "Token not found: " + tokenAddress } + } + + // Check permission (unless rollback) + // Authorization: Must be owner OR have canUpgrade permission in ACL + if (!edit.isRollback) { + if (!hasPermission(token.toAccessControl(), edit.account, "canUpgrade")) { + return { success: false, message: "No upgrade permission" } + } + } + + // Store previous version for logging/rollback reference + const currentVersion = token.scriptVersion ?? 0 + const currentTimestamp = this.getDeterministicTxTimestamp(tx) + + // For rollback, attempt to restore previous version state + if (edit.isRollback) { + // If previousVersion was provided, use it to decrement + if (previousVersion !== undefined && previousVersion >= 0) { + token.scriptVersion = previousVersion + log.info( + "[GCRTokenRoutines] Script rollback to version " + + previousVersion + + " for " + + tokenAddress, + ) + } else { + // Without previous version info, we can only clear the script + log.warn( + "[GCRTokenRoutines] Script rollback without version info - clearing script", + ) + token.script = undefined + token.hasScript = false + token.scriptVersion = 0 + token.lastScriptUpdate = null + } + } else { + // Normal upgrade: increment version and update script + token.script = newScript + token.hasScript = true + token.scriptVersion = currentVersion + 1 + token.lastScriptUpdate = currentTimestamp + + // Log upgrade reason if provided + if (upgradeReason) { + log.info( + "[GCRTokenRoutines] Upgrade reason for " + + tokenAddress + + ": " + + upgradeReason, + ) + } + } + + if (!simulate) { + try { + await gcrTokenRepository.save(token) + const action = edit.isRollback ? "Rolled back" : "Upgraded" + const versionInfo = edit.isRollback + ? "from v" + currentVersion + : "to v" + token.scriptVersion + + log.info( + "[GCRTokenRoutines] " + + action + + " script " + + versionInfo + + " for " + + tokenAddress, + ) + } catch (error) { + log.error("[GCRTokenRoutines] Failed to upgrade script: " + error) + return { success: false, message: "Failed to save script upgrade" } + } + } + + return { + success: true, + message: edit.isRollback + ? "Script rolled back to v" + token.scriptVersion + : "Script upgraded to v" + token.scriptVersion, + response: { + previousVersion: currentVersion, + newVersion: token.scriptVersion, + upgradedAt: token.lastScriptUpdate, + }, + } + } + + /** + * Handle ownership transfer + */ + private static async handleTransferOwnership( + edit: GCREditTokenTransferOwnership, + gcrTokenRepository: Repository, + simulate: boolean, + ): Promise { + const { newOwner } = edit.data + const tokenAddress = edit.tokenAddress + + log.debug( + "[GCRTokenRoutines] Transfer ownership to " + + newOwner + + " for token: " + + tokenAddress, + ) + + // Get token + const token = await gcrTokenRepository.findOneBy({ address: tokenAddress }) + if (!token) { + return { success: false, message: "Token not found: " + tokenAddress } + } + + // Check permission (unless rollback) + if (!edit.isRollback) { + if ( + !hasPermission(token.toAccessControl(), edit.account, "canTransferOwnership") + ) { + return { success: false, message: "No ownership transfer permission" } + } + } + + const oldOwner = token.owner + + // For rollback, swap back + if (edit.isRollback) { + token.owner = edit.account // Previous owner was the caller + } else { + token.owner = newOwner + } + + if (!simulate) { + try { + await gcrTokenRepository.save(token) + log.info( + "[GCRTokenRoutines] Transferred ownership from " + + oldOwner + + " to " + + token.owner, + ) + } catch (error) { + log.error("[GCRTokenRoutines] Failed to transfer ownership: " + error) + return { success: false, message: "Failed to save ownership transfer" } + } + } + + return { success: true, message: "Ownership transferred" } + } + + // REVIEW: Phase 5.2 - Custom Script Method Execution + + /** + * Handle custom script method execution. + * This enables user-defined write operations beyond native operations. + * + * @param edit - GCREdit operation for custom method + * @param gcrTokenRepository - Token repository + * @param simulate - Whether to simulate without persisting + * @param tx - Optional transaction context for script execution + * @returns GCRResult indicating success or failure + */ + private static async handleCustomMethod( + edit: GCREditTokenCustom, + gcrTokenRepository: Repository, + simulate: boolean, + tx?: Transaction, + ): Promise { + const { method, params } = edit.data + const tokenAddress = edit.tokenAddress + + log.debug( + "[GCRTokenRoutines] Custom method: " + + method + + " on token: " + + tokenAddress, + ) + + // Get token + const token = await gcrTokenRepository.findOneBy({ address: tokenAddress }) + if (!token) { + return { success: false, message: "Token not found: " + tokenAddress } + } + + // Check if token has a script + if (!token.hasScript || !token.script) { + return { + success: false, + message: "Token has no script - custom methods not available", + } + } + + // Check if method is defined in the script + const methodDef = token.script.methods?.find((m) => m.name === method) + if (!methodDef) { + return { + success: false, + message: "Method not found in script: " + method, + } + } + + // Verify method is a write operation (not view-only) + // TokenScriptMethod uses `mutates: boolean` - methods with mutates=false are view-only + if (!methodDef.mutates) { + return { + success: false, + message: "Cannot invoke view method as transaction: " + method, + } + } + + // Rollback not supported for custom methods (script state is opaque) + if (edit.isRollback) { + log.warn( + "[GCRTokenRoutines] Rollback not fully supported for custom method: " + + method, + ) + // For now, we skip rollback - proper rollback would need mutation logging + return { + success: true, + message: "Custom method rollback skipped (state opaque)", + } + } + + // Prepare block context for script execution + // Note: getSharedState is a getter that returns SharedState instance directly + const sharedState = getSharedState + const blockContext = { + timestamp: this.getDeterministicTxTimestamp(tx), + height: sharedState.lastBlockNumber ?? 0, + prevBlockHash: sharedState.lastBlockHash ?? "0".repeat(64), + } + + // Prepare script execution request + const tokenData = this.tokenToGCRTokenData(token) + + try { + // Execute the custom method via ScriptExecutor + const result = await scriptExecutor.executeMethod({ + tokenAddress, + method, + args: params, + caller: edit.account, + blockContext, + txHash: edit.txhash, + tokenData, + scriptCode: token.script.code, + }) + + // ScriptResult is a discriminated union - check success first + if (!result.success) { + // TypeScript needs explicit type extraction for discriminated union narrowing + const errorResult = result as Extract + log.error( + "[GCRTokenRoutines] Custom method execution failed: " + + errorResult.error, + ) + return { + success: false, + message: errorResult.error ?? "Script execution failed", + } + } + + // TypeScript now knows result is ScriptSuccess + // Apply state mutations from script execution using applyMutations + if (result.mutations.length > 0 && !simulate) { + // Apply mutations to get new state + const { newState } = applyMutations(tokenData, result.mutations) + this.applyGCRTokenDataToEntity(token, newState) + + try { + await gcrTokenRepository.save(token) + log.info( + "[GCRTokenRoutines] Custom method " + + method + + " executed on " + + tokenAddress, + ) + } catch (error) { + log.error( + "[GCRTokenRoutines] Failed to save custom method state: " + + error, + ) + return { + success: false, + message: "Failed to persist custom method state", + } + } + } + + return { + success: true, + message: "Custom method executed: " + method, + response: { + method, + returnValue: result.returnValue, + mutations: result.mutations.length, + }, + } + } catch (error) { + log.error( + "[GCRTokenRoutines] Custom method execution error: " + error, + ) + return { + success: false, + message: "Custom method execution error: " + String(error), + } + } + } + + // SECTION: Helper Methods + + /** + * Add a holder reference to GCRMain.extended.tokens + */ + private static async addHolderReference( + holderAddress: string, + reference: TokenHolderReference, + em?: EntityManager, + ): Promise { + try { + if (em) { + const repo = em.getRepository(GCRMain) + const holder = await repo.findOne({ + where: { pubkey: holderAddress }, + lock: { mode: "pessimistic_write" }, + }) + + if (!holder) { + log.debug( + "[GCRTokenRoutines] Holder " + + holderAddress + + " not found in transactional context, skipping reference add", + ) + return + } + + const current = holder.extended ?? { + tokens: [], + nfts: [], + xm: [], + web2: [], + other: [], + } + const tokens = Array.isArray(current.tokens) ? current.tokens : [] + + const idx = tokens.findIndex( + (t: any) => t?.tokenAddress === reference.tokenAddress, + ) + if (idx >= 0) { + tokens[idx] = { ...tokens[idx], ...reference } + } else { + tokens.push(reference) + } + + holder.extended = { ...current, tokens } + await repo.save(holder) + return + } + + const db = await Datasource.getInstance() + const dataSource = db.getDataSource() + const gcrMainRepository = dataSource.getRepository(GCRMain) + + // Ensure the holder account exists so pointer operations are not dropped. + const existing = await gcrMainRepository.findOneBy({ pubkey: holderAddress }) + if (!existing) { + await ensureGCRForUser(holderAddress) + } + + await dataSource.transaction(async em => { + const repo = em.getRepository(GCRMain) + const holder = await repo.findOne({ + where: { pubkey: holderAddress }, + lock: { mode: "pessimistic_write" }, + }) + + if (!holder) { + log.debug( + "[GCRTokenRoutines] Holder " + + holderAddress + + " not found after ensureGCRForUser, skipping reference add", + ) + return + } + + const current = holder.extended ?? { + tokens: [], + nfts: [], + xm: [], + web2: [], + other: [], + } + const tokens = Array.isArray(current.tokens) ? current.tokens : [] + + const idx = tokens.findIndex( + (t: any) => t?.tokenAddress === reference.tokenAddress, + ) + if (idx >= 0) { + tokens[idx] = { ...tokens[idx], ...reference } + } else { + tokens.push(reference) + } + + holder.extended = { ...current, tokens } + await repo.save(holder) + }) + } catch (error) { + log.error("[GCRTokenRoutines] Failed to add holder reference: " + error) + } + } + + /** + * Remove a holder reference from GCRMain.extended.tokens + */ + private static async removeHolderReference( + holderAddress: string, + tokenAddress: string, + em?: EntityManager, + ): Promise { + try { + if (em) { + const repo = em.getRepository(GCRMain) + const locked = await repo.findOne({ + where: { pubkey: holderAddress }, + lock: { mode: "pessimistic_write" }, + }) + if (!locked) return + + const current = locked.extended ?? { + tokens: [], + nfts: [], + xm: [], + web2: [], + other: [], + } + const tokens = Array.isArray(current.tokens) ? current.tokens : [] + const next = tokens.filter((t: any) => t?.tokenAddress !== tokenAddress) + + locked.extended = { ...current, tokens: next } + await repo.save(locked) + return + } + + const db = await Datasource.getInstance() + const dataSource = db.getDataSource() + const gcrMainRepository = dataSource.getRepository(GCRMain) + + const holder = await gcrMainRepository.findOneBy({ + pubkey: holderAddress, + }) + if (!holder) { + log.debug( + "[GCRTokenRoutines] Holder " + + holderAddress + + " not found, skipping reference remove", + ) + return + } + + await dataSource.transaction(async em => { + const repo = em.getRepository(GCRMain) + const locked = await repo.findOne({ + where: { pubkey: holderAddress }, + lock: { mode: "pessimistic_write" }, + }) + if (!locked) return + + const current = locked.extended ?? { + tokens: [], + nfts: [], + xm: [], + web2: [], + other: [], + } + const tokens = Array.isArray(current.tokens) ? current.tokens : [] + const next = tokens.filter((t: any) => t?.tokenAddress !== tokenAddress) + + locked.extended = { ...current, tokens: next } + await repo.save(locked) + }) + } catch (error) { + log.error("[GCRTokenRoutines] Failed to remove holder reference: " + error) + } + } + + private static collectAddressesFromMutations(mutations: TokenMutation[]): Set { + const out = new Set() + for (const m of mutations ?? []) { + if (!m || typeof m !== "object") continue + if (m.kind === "transfer") { + if (m.from) out.add(m.from) + if (m.to) out.add(m.to) + } else if (m.kind === "mint") { + if (m.to) out.add(m.to) + } else if (m.kind === "burn") { + if (m.from) out.add(m.from) + } + } + return out + } + + // SECTION: Query Methods (for nodeCall) + + /** + * Get token by address + */ + static async getToken( + tokenAddress: string, + gcrTokenRepository: Repository, + ): Promise { + return gcrTokenRepository.findOneBy({ address: tokenAddress }) + } + + /** + * Get token balance for a holder + */ + static async getBalance( + tokenAddress: string, + holderAddress: string, + gcrTokenRepository: Repository, + ): Promise<{ balance: string; decimals: number; ticker: string } | null> { + const token = await gcrTokenRepository.findOneBy({ address: tokenAddress }) + if (!token) { + return null + } + return { + balance: token.balances[holderAddress] ?? "0", + decimals: token.decimals, + ticker: token.ticker, + } + } + + /** + * Get all tokens by deployer + */ + static async getTokensByDeployer( + deployerAddress: string, + gcrTokenRepository: Repository, + ): Promise { + return gcrTokenRepository.findBy({ deployer: deployerAddress }) + } + + // REVIEW: Phase 1.6 - Additional query methods for NodeCall + + /** + * Get allowance for owner -> spender + */ + static async getAllowance( + tokenAddress: string, + ownerAddress: string, + spenderAddress: string, + gcrTokenRepository: Repository, + ): Promise<{ allowance: string; decimals: number; ticker: string } | null> { + const token = await gcrTokenRepository.findOneBy({ address: tokenAddress }) + if (!token) { + return null + } + const ownerAllowances = token.allowances[ownerAddress] ?? {} + return { + allowance: ownerAllowances[spenderAddress] ?? "0", + decimals: token.decimals, + ticker: token.ticker, + } + } + + /** + * Get all tokens held by an address (by iterating through balances) + * Note: This is a potentially expensive operation for large token sets. + * In production, consider using holder reference pointers in GCRMain. + */ + static async getTokensOf( + holderAddress: string, + gcrTokenRepository: Repository, + ): Promise> { + // Get all tokens and filter by holder balance + // REVIEW: This is O(n) over all tokens - consider optimizing with holder pointers + const allTokens = await gcrTokenRepository.find() + const heldTokens: Array<{ + tokenAddress: string + ticker: string + name: string + decimals: number + balance: string + }> = [] + + for (const token of allTokens) { + const balance = token.balances[holderAddress] + if (balance && BigInt(balance) > 0n) { + heldTokens.push({ + tokenAddress: token.address, + ticker: token.ticker, + name: token.name, + decimals: token.decimals, + balance, + }) + } + } + + return heldTokens + } + + // REVIEW: Phase 4.2 - Permission checking utilities + + /** + * Checks if an address has a specific permission on a token. + * This is the primary utility for permission checking across the codebase. + * + * Permission hierarchy: + * - Owner always has all permissions (implicit) + * - Other addresses require explicit ACL entries + * - Empty ACL = only owner can perform protected operations + * + * @param tokenAddress - Token to check permissions on + * @param address - Address to check permissions for + * @param permission - Permission to check + * @param gcrTokenRepository - Token repository + * @returns True if the address has the permission, false otherwise + */ + static async checkPermission( + tokenAddress: string, + address: string, + permission: TokenPermission, + gcrTokenRepository: Repository, + ): Promise { + const token = await gcrTokenRepository.findOneBy({ address: tokenAddress }) + if (!token) { + return false + } + + return hasPermission(token.toAccessControl(), address, permission) + } + + /** + * Gets all permissions for an address on a token. + * + * @param tokenAddress - Token to check + * @param address - Address to get permissions for + * @param gcrTokenRepository - Token repository + * @returns Array of permissions the address has, or null if token not found + */ + static async getPermissions( + tokenAddress: string, + address: string, + gcrTokenRepository: Repository, + ): Promise { + const token = await gcrTokenRepository.findOneBy({ address: tokenAddress }) + if (!token) { + return null + } + + // Owner has all permissions + if (token.owner === address) { + return [ + "canMint", + "canBurn", + "canUpgrade", + "canPause", + "canTransferOwnership", + "canModifyACL", + "canExecuteScript", + ] + } + + // Check ACL entries + const entry = token.aclEntries.find((e) => e.address === address) + if (!entry) { + return [] + } + + return entry.permissions as TokenPermission[] + } + + /** + * Gets the full ACL for a token. + * + * @param tokenAddress - Token to get ACL for + * @param gcrTokenRepository - Token repository + * @returns ACL data or null if token not found + */ + static async getACL( + tokenAddress: string, + gcrTokenRepository: Repository, + ): Promise<{ + owner: string + paused: boolean + entries: Array<{ + address: string + permissions: string[] + grantedAt: number + grantedBy: string + }> + } | null> { + const token = await gcrTokenRepository.findOneBy({ address: tokenAddress }) + if (!token) { + return null + } + + return { + owner: token.owner, + paused: token.paused, + entries: token.aclEntries, + } + } +} diff --git a/src/libs/blockchain/gcr/handleGCR.ts b/src/libs/blockchain/gcr/handleGCR.ts index 45e4738d6..6ede41135 100644 --- a/src/libs/blockchain/gcr/handleGCR.ts +++ b/src/libs/blockchain/gcr/handleGCR.ts @@ -46,10 +46,14 @@ import GCRBalanceRoutines from "./gcr_routines/GCRBalanceRoutines" import GCRNonceRoutines from "./gcr_routines/GCRNonceRoutines" import Chain from "../chain" -import { Repository } from "typeorm" +import { EntityManager, Repository } from "typeorm" import GCRIdentityRoutines from "./gcr_routines/GCRIdentityRoutines" import { GCRTLSNotaryRoutines } from "./gcr_routines/GCRTLSNotaryRoutines" import { GCRTLSNotary } from "@/model/entities/GCRv2/GCR_TLSNotary" +// REVIEW: Token GCREdit routines +import GCRTokenRoutines from "./gcr_routines/GCRTokenRoutines" +import { GCRToken } from "@/model/entities/GCRv2/GCR_Token" +import { GCREditToken, ExtendedGCREdit, isGCREditToken } from "./types/Token" import { Referrals } from "@/features/incentive/referrals" // REVIEW: TLSNotary token management for native operations import { createToken, extractDomain } from "@/features/tlsnotary/tokenManager" @@ -243,7 +247,7 @@ export default class HandleGCR { * @throws May throw database errors during repository operations */ static async apply( - editOperation: GCREdit, + editOperation: ExtendedGCREdit, tx: Transaction, rollback = false, // operations will be reverse in the rollback simulate = false, // used to simulate the GCREdit application @@ -258,42 +262,55 @@ export default class HandleGCR { if (rollback) { editOperation.isRollback = true } + // REVIEW: Handle token operations first (SDK GCREdit does not include token type yet) + // REVIEW: Phase 5.1 - Pass transaction for script execution context + if (isGCREditToken(editOperation)) { + return GCRTokenRoutines.apply( + editOperation, + repositories.token as Repository, + simulate, + tx, // Pass transaction for hook execution context + ) + } + + // Cast to SDK GCREdit for the switch statement + const sdkEdit = editOperation as GCREdit // Applying the edit operations - switch (editOperation.type) { + switch (sdkEdit.type) { case "balance": return GCRBalanceRoutines.apply( - editOperation, + sdkEdit, repositories.main as Repository, simulate, ) case "nonce": return GCRNonceRoutines.apply( - editOperation, + sdkEdit, repositories.main as Repository, simulate, ) case "identity": return GCRIdentityRoutines.apply( - editOperation, + sdkEdit, repositories.main as Repository, simulate, ) case "assign": case "subnetsTx": // TODO implementations - log.debug(`Assigning GCREdit ${editOperation.type}`) + log.debug(`Assigning GCREdit ${sdkEdit.type}`) return { success: true, message: "Not implemented" } case "smartContract": case "storageProgram": case "escrow": // TODO implementations - log.debug(`GCREdit ${editOperation.type} not yet implemented`) + log.debug(`GCREdit ${sdkEdit.type} not yet implemented`) return { success: true, message: "Not implemented" } // REVIEW: TLSNotary attestation proof storage case "tlsnotary": return GCRTLSNotaryRoutines.apply( - editOperation, + sdkEdit, repositories.tlsnotary as Repository, simulate, ) @@ -350,7 +367,7 @@ export default class HandleGCR { ) // If not successful, we stop the execution if (!result.success) { - await this.rollback(tx, appliedEdits) // Rollback the applied edits + await this.rollback(tx, appliedEdits, simulate) // Rollback the applied edits throw new Error( "GCREdit failed for " + edit.type + @@ -366,7 +383,7 @@ export default class HandleGCR { success: false, message: `${e}`, }) - await this.rollback(tx, appliedEdits) // Rollback the applied edits + await this.rollback(tx, appliedEdits, simulate) // Rollback the applied edits // Stopping the execution if (!simulate) { break @@ -404,6 +421,78 @@ export default class HandleGCR { return { success: true, message: "" } } + /** + * Apply only token-related GCR edits for a transaction. + * + * Rationale: + * - Token state is not currently included in the GCR integrity hash used during consensus. + * - During consensus forging, some nodes may not have the full mempool/tx set yet, causing token tables + * to diverge if token edits are applied pre-forge. + * - This helper allows consensus to validate token edits (simulate=true) and later apply them deterministically + * from the finalized block tx list, without coupling to Chain.checkTxExists(). + */ + static async applyTokenEditsToTx( + tx: Transaction, + isRollback = false, + simulate = false, + entityManager?: EntityManager, + ): Promise { + const tokenEdits = Array.isArray(tx?.content?.gcr_edits) + ? (tx.content.gcr_edits as any[]).filter(e => e?.type === "token") + : [] + + if (tokenEdits.length === 0) { + return { success: true, message: "" } + } + + if (entityManager) { + const tokenRepo = entityManager.getRepository(GCRToken) + for (const edit of tokenEdits) { + const editOp = { ...(edit as any) } + if (isRollback) editOp.isRollback = true + const result = await GCRTokenRoutines.apply(editOp as any, tokenRepo, simulate, tx) + if (!result.success) return result + } + return { success: true, message: "" } + } + + const editsResults: GCRResult[] = [] + const appliedEdits: any[] = [] + + // NOTE: Rollbacks are applied within routines based on isRollback flag. + for (const edit of tokenEdits) { + try { + const result = await HandleGCR.apply(edit as any, tx, isRollback, simulate) + if (!result.success) { + await this.rollback(tx, appliedEdits as any, simulate) + throw new Error( + "Token GCREdit failed for " + + (edit as any).operation + + " with message: " + + result.message, + ) + } + editsResults.push(result) + appliedEdits.push(edit) + } catch (e) { + log.error("[applyTokenEditsToTx] Error applying token GCREdit: " + e) + editsResults.push({ success: false, message: `${e}` }) + await this.rollback(tx, appliedEdits as any, simulate) + if (!simulate) break + } + } + + if (!editsResults.every(r => r.success)) { + const failedMessages = editsResults + .filter(r => !r.success) + .map(r => r.message) + .join(", ") + return { success: false, message: failedMessages } + } + + return { success: true, message: "" } + } + /** * Process side-effects for native transactions that aren't captured in GCR edits * Currently handles: @@ -468,6 +557,7 @@ export default class HandleGCR { static async rollback( tx: Transaction, appliedEditsOriginal: GCREdit[], + simulate = false, ): Promise { // We need to reverse the order of the applied edits const appliedEdits = appliedEditsOriginal.reverse() @@ -489,7 +579,7 @@ export default class HandleGCR { ") Rolling back GCREdit: " + edit.type, ) - const result = await this.apply(edit, tx, true) + const result = await this.apply(edit, tx, true, simulate) results.push(result) } log.info( @@ -549,6 +639,7 @@ export default class HandleGCR { subnetsTxs: dataSource.getRepository(GCRSubnetsTxs), tracker: dataSource.getRepository(GCRTracker), tlsnotary: dataSource.getRepository(GCRTLSNotary), + token: dataSource.getRepository(GCRToken), } } @@ -589,6 +680,13 @@ export default class HandleGCR { account.assignedTxs = [] account.nonce = fillData["nonce"] || 0 + account.extended = fillData["extended"] || { + tokens: [], + nfts: [], + xm: [], + web2: [], + other: [], + } account.points = fillData["points"] || { totalPoints: 0, breakdown: { diff --git a/src/libs/blockchain/gcr/types/Token.ts b/src/libs/blockchain/gcr/types/Token.ts index ae033cb1c..8e55de3b8 100644 --- a/src/libs/blockchain/gcr/types/Token.ts +++ b/src/libs/blockchain/gcr/types/Token.ts @@ -1,16 +1,291 @@ -/* LICENSE +/** + * Token Types for Demos Network Node + * + * REVIEW: Phase 1.4 - Token GCREdit Types (node-sut5) + * + * This file re-exports all token types from the token/ subdirectory and augmentations. + * + * Storage Model: + * - Token data stored in token's GCR account + * - Holder pointers stored in holder's GCRExtended.tokens array + * + * @license CC BY-NC-ND 4.0 + * @copyright 2023-2024 KyneSys Labs + * @see https://www.kynesys.xyz/ + */ -© 2023 by KyneSys Labs, licensed under CC BY-NC-ND 4.0 +// REVIEW: Re-export all types from the token subdirectory +// Note: Direct file imports to avoid Bun bundler cycle detection issues -Full license text: https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode -Human readable license: https://creativecommons.org/licenses/by-nc-nd/4.0/ +// From TokenTypes +export { + type TokenPermission, + type TokenACLEntry, + type TokenAccessControl, + type TokenMetadata, + type TokenBalances, + type TokenAllowances, + type TokenCustomState, + type TokenState, + type TokenHookType, + type TokenScriptMethod, + type TokenScript, + type TokenData, + type TokenHolderReference, + type StateMutation, + hasPermission, +} from "./token/TokenTypes" -KyneSys Labs: https://www.kynesys.xyz/ +// From GCREditToken +export { + type GCREditTokenOperation, + type GCREditTokenBase, + type GCREditTokenCreate, + type GCREditTokenTransfer, + type GCREditTokenMint, + type GCREditTokenBurn, + type GCREditTokenPause, + type GCREditTokenUnpause, + type GCREditTokenUpdateACL, + type GCREditTokenGrantPermission, + type GCREditTokenRevokePermission, + type GCREditTokenUpgradeScript, + type GCREditTokenTransferOwnership, + type GCREditToken, + isGCREditToken, + type ExtendedGCREdit, +} from "./token/GCREditToken" -*/ +// From TokenPermissions +export { + TokenPermissionValue, + ALL_PERMISSIONS, + PERMISSION_DESCRIPTIONS, + MINTER_PERMISSIONS, + ADMIN_PERMISSIONS, + OPERATOR_PERMISSIONS, + FULL_PERMISSIONS, + isValidPermission, + validatePermissions, + filterValidPermissions, + includesPermission, + hasAllPermissions, + hasAnyPermission, + mergePermissions, + removePermissions, + permissionDifference, + permissionIntersection, +} from "./token/TokenPermissions" -// TODO Should we implement part of the smart contract experience here? +// REVIEW: Re-export token types from augmentations (for backward compatibility) +export type { + TokenGCROperation, + TokenCreateData, + TokenTransferData, + TokenMintData, + TokenBurnData, + TokenACLUpdateData, + TokenPauseData, + TokenScriptUpgradeData, + TokenApproveData, + TokenTransferFromData, + TokenScriptExecuteData, +} from "@/types/token-augmentations" +// SECTION: Node-specific Token Types + +/** + * Token GCR account structure as stored in the database + * This is the complete structure for a token's GCR entry + */ +export interface TokenGCRAccount { + /** Token address (derived from deployer + nonce + hash) */ + address: string + /** Token metadata */ + metadata: { + name: string + ticker: string + decimals: number + deployer: string + deployerNonce: number + deployedAt: number + hasScript: boolean + } + /** Token state */ + state: { + totalSupply: string + balances: Record + allowances: Record> + customState: Record + } + /** Access control */ + accessControl: { + owner: string + paused: boolean + entries: Array<{ + address: string + permissions: string[] + grantedAt: number + grantedBy: string + }> + } + /** Optional script */ + script?: { + version: number + code: string + methods: Array<{ + name: string + params: Array<{ name: string; type: string }> + returns?: string + mutates: boolean + }> + hooks: string[] + codeHash: string + upgradedAt: number + } +} + +/** + * Token validation result + */ +export interface TokenValidationResult { + valid: boolean + errors: string[] + warnings: string[] +} + +/** + * Token operation context for script execution + */ +export interface TokenOperationContext { + /** Caller address */ + caller: string + /** Token address */ + tokenAddress: string + /** Operation being performed */ + operation: string + /** Operation arguments */ + args: unknown[] + /** Block height at execution */ + blockHeight: number + /** Previous block hash (for deterministic randomness) */ + prevBlockHash: string + /** Transaction timestamp */ + txTimestamp: number + /** Transaction hash */ + txHash: string +} + +/** + * Token holder entry stored in user's GCRExtended.tokens + * This is a lightweight pointer to the token's GCR account + */ +export interface TokenHolderEntry { + /** Token address */ + tokenAddress: string + /** Cached ticker for quick display */ + ticker: string + /** Cached name for quick display */ + name: string + /** Cached decimals for formatting */ + decimals: number + /** When this token was first acquired */ + firstAcquiredAt: number + /** Last update timestamp */ + lastUpdatedAt: number +} + +/** + * Token event types for logging/indexing + */ +export type TokenEventType = + | "TokenCreated" + | "TokenTransfer" + | "TokenMint" + | "TokenBurn" + | "TokenApproval" + | "TokenPaused" + | "TokenUnpaused" + | "TokenACLUpdated" + | "TokenScriptUpgraded" + | "TokenScriptExecuted" + +/** + * Token event structure for logging + */ +export interface TokenEvent { + type: TokenEventType + tokenAddress: string + txHash: string + blockHeight: number + timestamp: number + data: Record +} + +// SECTION: Utility Functions + +/** + * Check if an address has a specific permission on a token + */ +export function hasTokenPermission( + accessControl: TokenGCRAccount["accessControl"], + address: string, + permission: string, +): boolean { + // Owner has all permissions + if (accessControl.owner === address) { + return true + } + + // Check ACL entries + const entry = accessControl.entries.find(e => e.address === address) + if (!entry) { + return false + } + + return entry.permissions.includes(permission) +} + +/** + * Check if a token is paused + */ +export function isTokenPaused(accessControl: TokenGCRAccount["accessControl"]): boolean { + return accessControl.paused +} + +/** + * Get token balance for an address + */ +export function getTokenBalance( + state: TokenGCRAccount["state"], + address: string, +): bigint { + const balance = state.balances[address] + return balance ? BigInt(balance) : BigInt(0) +} + +/** + * Get token allowance for a spender + */ +export function getTokenAllowance( + state: TokenGCRAccount["state"], + owner: string, + spender: string, +): bigint { + const ownerAllowances = state.allowances[owner] + if (!ownerAllowances) { + return BigInt(0) + } + const allowance = ownerAllowances[spender] + return allowance ? BigInt(allowance) : BigInt(0) +} + +// SECTION: Legacy Token Class (deprecated) + +/** + * @deprecated Use TokenGCRAccount interface instead + * This class is maintained for backward compatibility only + */ export default class Token { address: string name: string diff --git a/src/libs/blockchain/gcr/types/token/ACL_GUIDE.md b/src/libs/blockchain/gcr/types/token/ACL_GUIDE.md new file mode 100644 index 000000000..bc38d2977 --- /dev/null +++ b/src/libs/blockchain/gcr/types/token/ACL_GUIDE.md @@ -0,0 +1,279 @@ +# Token Access Control List (ACL) Guide + +## Overview + +The Token ACL system provides granular permission management for GCRv2 tokens on the Demos Network. It allows token owners to delegate specific capabilities to other addresses without transferring full ownership. + +## Permission Hierarchy + +``` + +-------------------+ + | Owner | + | (All Permissions) | + +-------------------+ + | + | implicit + v + +-------------------+ + | ACL Entries | + | (Explicit Grants) | + +-------------------+ + | + +-------+-------+ + | | | + v v v + Minter Admin Operator + Role Role Role +``` + +**Key Principles:** +- **Owner** always has ALL permissions implicitly (no ACL entry needed) +- **Other addresses** require explicit ACL entries to gain permissions +- **Empty ACL** = only owner can perform protected operations + +## Available Permissions + +| Permission | Value | Description | +|------------|-------|-------------| +| `canMint` | `"canMint"` | Allows minting new tokens, increasing total supply | +| `canBurn` | `"canBurn"` | Allows burning tokens from any address (not just own) | +| `canUpgrade` | `"canUpgrade"` | Allows upgrading the token script code | +| `canPause` | `"canPause"` | Allows pausing/unpausing token operations | +| `canTransferOwnership` | `"canTransferOwnership"` | Allows transferring token ownership | +| `canModifyACL` | `"canModifyACL"` | Allows granting/revoking permissions | +| `canExecuteScript` | `"canExecuteScript"` | Allows calling custom script methods | + +## Permission Use Cases + +### Minter Role +```typescript +// Grant minting permission to a rewards contract +await grantPermission({ + tokenAddress: "0x...", + grantee: rewardsContractAddress, + permissions: ["canMint"] +}); +``` + +### Admin Role +```typescript +// Grant admin permissions to a multisig +await grantPermission({ + tokenAddress: "0x...", + grantee: multisigAddress, + permissions: ["canMint", "canBurn", "canPause", "canModifyACL"] +}); +``` + +### Operator Role +```typescript +// Grant operator permissions for emergencies +await grantPermission({ + tokenAddress: "0x...", + grantee: operatorAddress, + permissions: ["canPause"] +}); +``` + +## API Reference + +### Granting Permissions + +**SDK:** +```typescript +import { createGrantPermissionPayload } from "@kynesyslabs/demosdk/types"; + +const payload = createGrantPermissionPayload({ + tokenAddress: "0x...", + grantee: "0x...", + permissions: ["canMint", "canPause"] +}); +``` + +**Node GCREdit:** +```typescript +const edit: GCREditTokenGrantPermission = { + type: "token", + operation: "grantPermission", + account: senderAddress, + tokenAddress: tokenAddress, + txhash: txHash, + isRollback: false, + data: { + grantee: "0x...", + permissions: ["canMint"] + } +}; +``` + +### Revoking Permissions + +**SDK:** +```typescript +import { createRevokePermissionPayload } from "@kynesyslabs/demosdk/types"; + +const payload = createRevokePermissionPayload({ + tokenAddress: "0x...", + grantee: "0x...", + permissions: ["canMint"] +}); +``` + +**Node GCREdit:** +```typescript +const edit: GCREditTokenRevokePermission = { + type: "token", + operation: "revokePermission", + account: senderAddress, + tokenAddress: tokenAddress, + txhash: txHash, + isRollback: false, + data: { + grantee: "0x...", + permissions: ["canMint"] + } +}; +``` + +### Checking Permissions + +```typescript +import GCRTokenRoutines from "@/libs/blockchain/gcr/gcr_routines/GCRTokenRoutines"; + +// Check single permission +const canMint = await GCRTokenRoutines.checkPermission( + tokenAddress, + userAddress, + "canMint", + gcrTokenRepository +); + +// Get all permissions for an address +const permissions = await GCRTokenRoutines.getPermissions( + tokenAddress, + userAddress, + gcrTokenRepository +); + +// Get full ACL +const acl = await GCRTokenRoutines.getACL(tokenAddress, gcrTokenRepository); +``` + +## ACL Data Structure + +### GCR_Token Entity + +```typescript +// In GCR_Token entity +@Column({ type: "jsonb", name: "aclEntries", default: () => "'[]'" }) +aclEntries: Array<{ + address: string; // Grantee address + permissions: string[]; // Array of permission strings + grantedAt: number; // Unix timestamp + grantedBy: string; // Grantor address +}>; +``` + +### Example ACL State + +```json +{ + "owner": "0xOwnerAddress...", + "paused": false, + "entries": [ + { + "address": "0xMinterContract...", + "permissions": ["canMint"], + "grantedAt": 1700000000, + "grantedBy": "0xOwnerAddress..." + }, + { + "address": "0xAdminMultisig...", + "permissions": ["canMint", "canBurn", "canPause", "canModifyACL"], + "grantedAt": 1700000100, + "grantedBy": "0xOwnerAddress..." + } + ] +} +``` + +## Security Considerations + +### Permission Escalation Prevention + +1. **canModifyACL** is powerful - only grant to trusted addresses +2. **canTransferOwnership** should be used sparingly +3. Consider using timelock patterns for sensitive operations + +### Best Practices + +1. **Principle of Least Privilege**: Grant only necessary permissions +2. **Regular Audits**: Periodically review ACL entries +3. **Revoke Promptly**: Remove permissions when no longer needed +4. **Multi-sig for Admin**: Use multisig for high-privilege operations + +### Emergency Procedures + +```typescript +// Emergency pause by operator +if (hasPermission(token.toAccessControl(), operatorAddress, "canPause")) { + await pauseToken(tokenAddress); +} + +// Revoke compromised address +await revokePermission({ + tokenAddress, + grantee: compromisedAddress, + permissions: ["canMint", "canBurn", "canPause", "canModifyACL"] +}); +``` + +## Integration with Scripting System + +The ACL system integrates with the token scripting system: + +### Script Execution Permission + +```typescript +// Custom methods require canExecuteScript +if (!hasPermission(accessControl, caller, "canExecuteScript")) { + // Only owner and addresses with canExecuteScript can call custom methods +} +``` + +### Hook Execution + +Hooks execute for all operations but may check permissions internally: + +```typescript +// In beforeMint hook +function beforeMint(context) { + // ACL check is done by the protocol before hook execution + // Hook can add additional business logic + return { allow: true, mutations: [] }; +} +``` + +### Script Upgrade + +```typescript +// Requires canUpgrade permission +if (!hasPermission(accessControl, caller, "canUpgrade")) { + throw new Error("No upgrade permission"); +} +``` + +## Related Files + +- `src/libs/blockchain/gcr/types/token/TokenPermissions.ts` - Permission constants +- `src/libs/blockchain/gcr/types/token/TokenTypes.ts` - Type definitions +- `src/libs/blockchain/gcr/types/token/GCREditToken.ts` - GCREdit types +- `src/libs/blockchain/gcr/gcr_routines/GCRTokenRoutines.ts` - ACL handlers +- `src/model/entities/GCRv2/GCR_Token.ts` - Entity definition +- `../sdks/src/types/token/` - SDK types + +## Changelog + +- **Phase 4.2**: Added dedicated grantPermission/revokePermission operations +- **Phase 3.x**: Added canExecuteScript permission for script execution +- **Phase 1.x**: Initial ACL implementation with updateACL operation diff --git a/src/libs/blockchain/gcr/types/token/GCREditToken.ts b/src/libs/blockchain/gcr/types/token/GCREditToken.ts new file mode 100644 index 000000000..637ccf33a --- /dev/null +++ b/src/libs/blockchain/gcr/types/token/GCREditToken.ts @@ -0,0 +1,224 @@ +// REVIEW: Token GCREdit types for Demos Network token operations +// These types are defined locally until SDK publishes them (Phase 1.4) +// FIXME: Once SDK 2.12.0 is released with token types, import from @kynesyslabs/demosdk/types + +import type { + TokenData, + TokenScript, + TokenHolderReference, +} from "./TokenTypes" +import type { TokenPermission } from "./TokenPermissions" +import { GCREdit as SDKGCREdit } from "@kynesyslabs/demosdk/types" + +/** + * Token operation types for GCREdit + */ +export type GCREditTokenOperation = + | "create" + | "transfer" + | "mint" + | "burn" + | "pause" + | "unpause" + | "updateACL" + | "grantPermission" + | "revokePermission" + | "upgradeScript" + | "transferOwnership" + | "custom" // Phase 5.2: Custom script method execution + +/** + * Base interface for all Token GCREdit operations + */ +export interface GCREditTokenBase { + type: "token" + operation: GCREditTokenOperation + account: string // The account performing the operation + tokenAddress: string // The token being operated on + txhash: string + isRollback: boolean +} + +/** + * GCREdit for creating a new token + */ +export interface GCREditTokenCreate extends Omit { + operation: "create" + data: { + // Full token data to store + tokenData: TokenData + // Token address (derived from deployer + nonce + hash) + tokenAddress: string + } +} + +/** + * GCREdit for transferring tokens + */ +export interface GCREditTokenTransfer extends GCREditTokenBase { + operation: "transfer" + data: { + from: string + to: string + amount: string + } +} + +/** + * GCREdit for minting tokens + */ +export interface GCREditTokenMint extends GCREditTokenBase { + operation: "mint" + data: { + to: string + amount: string + } +} + +/** + * GCREdit for burning tokens + */ +export interface GCREditTokenBurn extends GCREditTokenBase { + operation: "burn" + data: { + from: string + amount: string + } +} + +/** + * GCREdit for pausing a token + */ +export interface GCREditTokenPause extends GCREditTokenBase { + operation: "pause" + data: Record // Empty data for pause +} + +/** + * GCREdit for unpausing a token + */ +export interface GCREditTokenUnpause extends GCREditTokenBase { + operation: "unpause" + data: Record // Empty data for unpause +} + +/** + * GCREdit for updating token ACL (generic form) + */ +export interface GCREditTokenUpdateACL extends GCREditTokenBase { + operation: "updateACL" + data: { + action: "grant" | "revoke" + targetAddress: string + permissions: TokenPermission[] + } +} + +// REVIEW: Phase 4.2 - Dedicated Grant/Revoke Permission GCREdit types + +/** + * GCREdit for granting permissions to an address. + * This is a specialized form of updateACL for explicit typing. + */ +export interface GCREditTokenGrantPermission extends GCREditTokenBase { + operation: "grantPermission" + data: { + /** Address to grant permissions to */ + grantee: string + /** Permissions to grant */ + permissions: TokenPermission[] + } +} + +/** + * GCREdit for revoking permissions from an address. + * This is a specialized form of updateACL for explicit typing. + */ +export interface GCREditTokenRevokePermission extends GCREditTokenBase { + operation: "revokePermission" + data: { + /** Address to revoke permissions from */ + grantee: string + /** Permissions to revoke */ + permissions: TokenPermission[] + } +} + +/** + * GCREdit for upgrading token script + */ +export interface GCREditTokenUpgradeScript extends GCREditTokenBase { + operation: "upgradeScript" + data: { + /** New script definition */ + newScript: TokenScript + /** Optional reason for the upgrade (for audit trail) */ + upgradeReason?: string + /** Previous script version (for rollback support) */ + previousVersion?: number + } +} + +/** + * GCREdit for transferring token ownership + */ +export interface GCREditTokenTransferOwnership extends GCREditTokenBase { + operation: "transferOwnership" + data: { + newOwner: string + } +} + +// REVIEW: Phase 5.2 - Custom script method execution + +/** + * GCREdit for executing a custom script method. + * This enables user-defined write operations beyond native operations. + * Examples: stake(), claimRewards(), vote(), etc. + */ +export interface GCREditTokenCustom extends GCREditTokenBase { + operation: "custom" + data: { + /** Method name to execute */ + method: string + /** Method parameters */ + params: unknown[] + /** Optional: State mutations returned by the script execution */ + mutations?: Array<{ + type: "setBalance" | "setAllowance" | "setMetadata" | "setStorage" + target?: string + key?: string + value: unknown + }> + } +} + +/** + * Union type of all Token GCREdit operations + */ +export type GCREditToken = + | GCREditTokenCreate + | GCREditTokenTransfer + | GCREditTokenMint + | GCREditTokenBurn + | GCREditTokenPause + | GCREditTokenUnpause + | GCREditTokenUpdateACL + | GCREditTokenGrantPermission + | GCREditTokenRevokePermission + | GCREditTokenUpgradeScript + | GCREditTokenTransferOwnership + | GCREditTokenCustom + +/** + * Type guard to check if a GCREdit is a Token operation + */ +export function isGCREditToken(edit: { type: string }): edit is GCREditToken { + return edit.type === "token" +} + +/** + * Extended GCREdit type that includes token operations + * FIXME: Remove this once SDK includes token type in GCREdit union + */ +export type ExtendedGCREdit = SDKGCREdit | GCREditToken diff --git a/src/libs/blockchain/gcr/types/token/TokenPermissions.ts b/src/libs/blockchain/gcr/types/token/TokenPermissions.ts new file mode 100644 index 000000000..e72f09a76 --- /dev/null +++ b/src/libs/blockchain/gcr/types/token/TokenPermissions.ts @@ -0,0 +1,247 @@ +/** + * Token Permissions for Demos Network + * + * REVIEW: Phase 4.2 - Access Control List Management + * + * This file defines the permission system for token access control. + * Permissions are granular capabilities that can be granted to addresses, + * allowing them to perform specific operations on tokens. + * + * Permission Hierarchy: + * - Owner has ALL permissions implicitly (never needs ACL entries) + * - Other addresses need explicit ACL entries to gain permissions + * - Empty ACL = only owner can perform protected operations + * + * @license CC BY-NC-ND 4.0 + * @copyright 2023-2024 KyneSys Labs + * @see https://www.kynesys.xyz/ + */ + +// SECTION: Permission Constants + +/** + * Token permission types as a const enum for performance. + * Using const enum allows TypeScript to inline values at compile time. + */ +export const enum TokenPermissionValue { + CAN_MINT = "canMint", + CAN_BURN = "canBurn", + CAN_UPGRADE = "canUpgrade", + CAN_PAUSE = "canPause", + CAN_TRANSFER_OWNERSHIP = "canTransferOwnership", + CAN_MODIFY_ACL = "canModifyACL", + CAN_EXECUTE_SCRIPT = "canExecuteScript", +} + +/** + * Permission type as string union for type checking. + * This is the primary type used in interfaces and APIs. + */ +export type TokenPermission = + | "canMint" + | "canBurn" + | "canUpgrade" + | "canPause" + | "canTransferOwnership" + | "canModifyACL" + | "canExecuteScript" + +/** + * Array of all valid permission strings. + * Useful for validation and iteration. + */ +export const ALL_PERMISSIONS: readonly TokenPermission[] = [ + "canMint", + "canBurn", + "canUpgrade", + "canPause", + "canTransferOwnership", + "canModifyACL", + "canExecuteScript", +] as const + +/** + * Permission descriptions for documentation and UI. + */ +export const PERMISSION_DESCRIPTIONS: Record = { + canMint: "Allows minting new tokens, increasing total supply", + canBurn: "Allows burning tokens from any address (not just own)", + canUpgrade: "Allows upgrading the token script code", + canPause: "Allows pausing/unpausing token operations", + canTransferOwnership: "Allows transferring token ownership to another address", + canModifyACL: "Allows granting/revoking permissions to other addresses", + canExecuteScript: "Allows calling custom script methods", +} + +// SECTION: Permission Groups (for convenience) + +/** + * Permissions typically granted to a minter role. + */ +export const MINTER_PERMISSIONS: readonly TokenPermission[] = ["canMint"] as const + +/** + * Permissions typically granted to an admin role. + */ +export const ADMIN_PERMISSIONS: readonly TokenPermission[] = [ + "canMint", + "canBurn", + "canPause", + "canModifyACL", +] as const + +/** + * Permissions typically granted to an operator role. + */ +export const OPERATOR_PERMISSIONS: readonly TokenPermission[] = [ + "canPause", + "canExecuteScript", +] as const + +/** + * All permissions (effectively makes an address co-owner). + * Use with caution - this grants full control except ownership transfer. + */ +export const FULL_PERMISSIONS: readonly TokenPermission[] = ALL_PERMISSIONS + +// SECTION: Validation Utilities + +/** + * Validates if a string is a valid permission. + * + * @param permission - String to validate + * @returns True if the string is a valid TokenPermission + */ +export function isValidPermission(permission: string): permission is TokenPermission { + return ALL_PERMISSIONS.includes(permission as TokenPermission) +} + +/** + * Validates an array of permissions. + * + * @param permissions - Array of strings to validate + * @returns Object with validity status and any invalid permissions found + */ +export function validatePermissions(permissions: string[]): { + valid: boolean + invalid: string[] +} { + const invalid = permissions.filter((p) => !isValidPermission(p)) + return { + valid: invalid.length === 0, + invalid, + } +} + +/** + * Filters an array to only include valid permissions. + * + * @param permissions - Array of strings that may contain invalid permissions + * @returns Array containing only valid TokenPermission values + */ +export function filterValidPermissions(permissions: string[]): TokenPermission[] { + return permissions.filter(isValidPermission) +} + +// SECTION: Permission Checking + +/** + * Checks if a permission array includes a specific permission. + * + * @param permissions - Array of permissions to check + * @param permission - Permission to look for + * @returns True if the permission is present + */ +export function includesPermission( + permissions: TokenPermission[], + permission: TokenPermission, +): boolean { + return permissions.includes(permission) +} + +/** + * Checks if a permission array includes all of the specified permissions. + * + * @param permissions - Array of permissions to check + * @param required - Array of required permissions + * @returns True if all required permissions are present + */ +export function hasAllPermissions( + permissions: TokenPermission[], + required: TokenPermission[], +): boolean { + return required.every((p) => permissions.includes(p)) +} + +/** + * Checks if a permission array includes any of the specified permissions. + * + * @param permissions - Array of permissions to check + * @param candidates - Array of candidate permissions + * @returns True if at least one candidate permission is present + */ +export function hasAnyPermission( + permissions: TokenPermission[], + candidates: TokenPermission[], +): boolean { + return candidates.some((p) => permissions.includes(p)) +} + +// SECTION: Permission Set Operations + +/** + * Merges two permission arrays, removing duplicates. + * + * @param existing - Current permissions + * @param additions - Permissions to add + * @returns Merged array with no duplicates + */ +export function mergePermissions( + existing: TokenPermission[], + additions: TokenPermission[], +): TokenPermission[] { + const set = new Set([...existing, ...additions]) + return Array.from(set) +} + +/** + * Removes permissions from an array. + * + * @param existing - Current permissions + * @param removals - Permissions to remove + * @returns Array with specified permissions removed + */ +export function removePermissions( + existing: TokenPermission[], + removals: TokenPermission[], +): TokenPermission[] { + return existing.filter((p) => !removals.includes(p)) +} + +/** + * Gets the difference between two permission arrays. + * + * @param a - First array + * @param b - Second array + * @returns Permissions in a but not in b + */ +export function permissionDifference( + a: TokenPermission[], + b: TokenPermission[], +): TokenPermission[] { + return a.filter((p) => !b.includes(p)) +} + +/** + * Gets the intersection of two permission arrays. + * + * @param a - First array + * @param b - Second array + * @returns Permissions present in both arrays + */ +export function permissionIntersection( + a: TokenPermission[], + b: TokenPermission[], +): TokenPermission[] { + return a.filter((p) => b.includes(p)) +} diff --git a/src/libs/blockchain/gcr/types/token/TokenTypes.ts b/src/libs/blockchain/gcr/types/token/TokenTypes.ts new file mode 100644 index 000000000..f0dde822c --- /dev/null +++ b/src/libs/blockchain/gcr/types/token/TokenTypes.ts @@ -0,0 +1,152 @@ +// REVIEW: Token types for Demos Network - local copy until SDK publishes +// FIXME: Once SDK 2.12.0 is released with token types, remove this file and import from @kynesyslabs/demosdk/types + +// Import and re-export TokenPermission from TokenPermissions.ts (source of truth for permission type) +export type { TokenPermission } from "./TokenPermissions" +import type { TokenPermission } from "./TokenPermissions" + +/** + * Access Control List entry for a single address. + */ +export interface TokenACLEntry { + address: string + permissions: TokenPermission[] + grantedAt: number // Unix timestamp + grantedBy: string // Address that granted permissions +} + +/** + * Token Access Control structure. + * Owner has all permissions by default. + */ +export interface TokenAccessControl { + owner: string + paused: boolean + entries: TokenACLEntry[] +} + +/** + * Immutable token metadata set at creation time. + */ +export interface TokenMetadata { + name: string + ticker: string + decimals: number + address: string + deployer: string + deployerNonce: number + deployedAt: number // Unix timestamp (block timestamp at deployment) + hasScript: boolean +} + +/** + * Token balances mapping: address -> balance + */ +export type TokenBalances = Record // string for bigint serialization + +/** + * Token allowances mapping: owner -> spender -> amount + */ +export type TokenAllowances = Record> + +/** + * Custom state for scripted tokens. + */ +export type TokenCustomState = Record + +/** + * Complete token state. + */ +export interface TokenState { + totalSupply: string // string for bigint serialization + balances: TokenBalances + allowances: TokenAllowances + customState: TokenCustomState +} + +/** + * Hook types that can trigger script execution. + */ +export type TokenHookType = + | "beforeTransfer" + | "afterTransfer" + | "beforeMint" + | "afterMint" + | "beforeBurn" + | "afterBurn" + | "onApprove" + +/** + * Script method definition. + */ +export interface TokenScriptMethod { + name: string + params: Array<{ name: string; type: string }> + returns?: string + mutates: boolean +} + +/** + * Token script definition. + */ +export interface TokenScript { + version: number + code: string + methods: TokenScriptMethod[] + hooks: TokenHookType[] + codeHash: string + upgradedAt: number +} + +/** + * Complete token data as stored in GCR. + */ +export interface TokenData { + metadata: TokenMetadata + state: TokenState + accessControl: TokenAccessControl + script?: TokenScript +} + +/** + * Lightweight token reference stored in holder's GCRExtended.tokens + */ +export interface TokenHolderReference { + tokenAddress: string + ticker: string + name: string + decimals: number +} + +/** + * State mutation returned by scripts. + */ +export interface StateMutation { + type: "setBalance" | "addBalance" | "subBalance" | "setCustomState" | "setAllowance" + address?: string + spender?: string + value: string | number | Record + key?: string +} + +/** + * Checks if an address has a specific permission. + */ +export function hasPermission( + accessControl: TokenAccessControl, + address: string, + permission: TokenPermission, +): boolean { + // Owner has all permissions + if (accessControl.owner === address) { + return true + } + + // Check ACL entries + const entry = accessControl.entries.find((e) => e.address === address) + if (!entry) { + return false + } + + return entry.permissions.includes(permission) +} diff --git a/src/libs/blockchain/gcr/types/token/index.ts b/src/libs/blockchain/gcr/types/token/index.ts new file mode 100644 index 000000000..e57bff1bb --- /dev/null +++ b/src/libs/blockchain/gcr/types/token/index.ts @@ -0,0 +1,44 @@ +// REVIEW: Token types index for GCR Token operations + +// Export TokenTypes (TokenPermission is re-exported from TokenTypes which sources it from TokenPermissions) +export { + type TokenPermission, + type TokenACLEntry, + type TokenAccessControl, + type TokenMetadata, + type TokenBalances, + type TokenAllowances, + type TokenCustomState, + type TokenState, + type TokenHookType, + type TokenScriptMethod, + type TokenScript, + type TokenData, + type TokenHolderReference, + type StateMutation, + hasPermission, +} from "./TokenTypes" + +export * from "./GCREditToken" + +// REVIEW: Phase 4.2 - Permission constants and utilities +// Export permission utilities and constants (but not TokenPermission type to avoid duplicate) +export { + TokenPermissionValue, + ALL_PERMISSIONS, + PERMISSION_DESCRIPTIONS, + MINTER_PERMISSIONS, + ADMIN_PERMISSIONS, + OPERATOR_PERMISSIONS, + FULL_PERMISSIONS, + isValidPermission, + validatePermissions, + filterValidPermissions, + includesPermission, + hasAllPermissions, + hasAnyPermission, + mergePermissions, + removePermissions, + permissionDifference, + permissionIntersection, +} from "./TokenPermissions" diff --git a/src/libs/blockchain/routines/Sync.ts b/src/libs/blockchain/routines/Sync.ts index 95579faba..9b7fdc9d7 100644 --- a/src/libs/blockchain/routines/Sync.ts +++ b/src/libs/blockchain/routines/Sync.ts @@ -286,43 +286,79 @@ async function verifyLastBlockIntegrity( * @returns True if the block was synced successfully, false otherwise */ export async function syncBlock(block: Block, peer: Peer) { - await Chain.insertBlock(block, [], null, false) - log.debug("Block inserted successfully") - log.debug( - "Last block number: " + - getSharedState.lastBlockNumber + - " Last block hash: " + - getSharedState.lastBlockHash, - ) - log.info("[fastSync] Block inserted successfully at the head of the chain!") - - // REVIEW Merge the peerlist - log.info("[fastSync] Merging peers from block: " + block.hash) - const mergedPeerlist = await mergePeerlist(block) - log.info("[fastSync] Merged peers from block: " + mergedPeerlist) - // REVIEW Parse the txs hashes in the block - log.info("[fastSync] Asking for transactions in the block", true) - const txs = await askTxsForBlock(block, peer) - log.info("[fastSync] Transactions received: " + txs.length, true) - - // ! Sync the native tables - await syncGCRTables(txs) - - // REVIEW Insert the txs into the transactions database table - if (txs.length > 0) { - log.info("[fastSync] Inserting transactions into the database", true) - const success = await Chain.insertTransactionsFromSync(txs) - if (success) { - log.info("[fastSync] Transactions inserted successfully") - return true + const prevInGcrApply = getSharedState.inGcrApply + getSharedState.inGcrApply = true + try { + // REVIEW Merge the peerlist + log.info("[fastSync] Merging peers from block: " + block.hash) + const mergedPeerlist = await mergePeerlist(block) + log.info("[fastSync] Merged peers from block: " + mergedPeerlist) + + // REVIEW Parse the txs hashes in the block + log.info("[fastSync] Asking for transactions in the block", true) + const txs = await askTxsForBlock(block, peer) + log.info("[fastSync] Transactions received: " + txs.length, true) + + // Always apply and persist transactions in block order. + // Token validity can be order-dependent (e.g., insufficient balance checks, scripts), + // and token state is not currently part of the consensus integrity hash. If we apply + // out-of-order during sync, nodes can permanently diverge even while sharing the same + // lastBlockHash/lastBlockNumber. + const orderedTxs = (() => { + const hashes = Array.isArray(block?.content?.ordered_transactions) + ? block.content.ordered_transactions + : [] + if (hashes.length === 0) return txs + const byHash: Record = {} + for (const tx of txs) byHash[tx.hash] = tx + return hashes.map(h => byHash[h]).filter(Boolean) + })() + + for (const tx of orderedTxs) { + if (!tx.blockNumber) tx.blockNumber = block.number } - log.error("[fastSync] Transactions insertion failed") - return false - } + // ! Sync the native tables + await syncGCRTables(orderedTxs) + + // IMPORTANT: Insert the block only AFTER applying GCR/token edits. + // Token scripts derive prevBlockHash from shared state; inserting the block first would + // advance lastBlockHash to the *current* block and drift hook contexts during sync. + // Also, Merkle tree updates can depend on the GCR edits (commitments) being applied first. + // + // IMPORTANT: When syncing, do not persist block transactions from local mempool. + // If we insert tx rows first, HandleGCR.applyToTx() would treat them as "already executed" + // and skip applying GCR/token edits, leading to cross-node state divergence. + await Chain.insertBlock(block, [], null, false, false) + log.debug("Block inserted successfully") + log.debug( + "Last block number: " + + getSharedState.lastBlockNumber + + " Last block hash: " + + getSharedState.lastBlockHash, + ) + log.info( + "[fastSync] Block inserted successfully at the head of the chain!", + ) - log.info("[fastSync] No transactions in the block") - return true + // REVIEW Insert the txs into the transactions database table + if (orderedTxs.length > 0) { + log.info("[fastSync] Inserting transactions into the database", true) + const success = await Chain.insertTransactionsFromSync(orderedTxs) + if (success) { + log.info("[fastSync] Transactions inserted successfully") + return true + } + + log.error("[fastSync] Transactions insertion failed") + return false + } + + log.info("[fastSync] No transactions in the block") + return true + } finally { + getSharedState.inGcrApply = prevInGcrApply + } } /** @@ -504,22 +540,30 @@ async function batchDownloadBlocks( // Process each block in order for (const block of blocks.sort((a, b) => a.number - b.number)) { + const prevInGcrApply = getSharedState.inGcrApply + getSharedState.inGcrApply = true + try { const blockTxs = block.content.ordered_transactions .map(txHash => txMap[txHash]) .filter(tx => !!tx) - // Insert block - await Chain.insertBlock(block, [], null, false) - log.info( - `[batchDownloadBlocks] Block ${block.number} inserted successfully`, - ) - // Merge peerlist await mergePeerlist(block) + for (const tx of blockTxs) { + if (!tx.blockNumber) tx.blockNumber = block.number + } + // Sync GCR tables await syncGCRTables(blockTxs) + // IMPORTANT: Insert the block only AFTER applying GCR/token edits (see syncBlock rationale). + // IMPORTANT: When batch syncing, do not persist block transactions from local mempool. + await Chain.insertBlock(block, [], null, false, false) + log.info( + `[batchDownloadBlocks] Block ${block.number} inserted successfully`, + ) + // Insert transactions if (blockTxs.length > 0) { const success = await Chain.insertTransactionsFromSync(blockTxs) @@ -530,6 +574,9 @@ async function batchDownloadBlocks( return false } } + } finally { + getSharedState.inGcrApply = prevInGcrApply + } } log.debug( @@ -719,23 +766,29 @@ async function requestBlocks(): Promise { export async function syncGCRTables( txs: Transaction[], ): Promise<[string, boolean]> { + const prevInGcrApply = getSharedState.inGcrApply + getSharedState.inGcrApply = true // ? Better typing on this return // Using the GCREdits in the tx to sync the native tables - for (const tx of txs) { - try { - const result = await HandleGCR.applyToTx(tx) - if (!result.success) { + try { + for (const tx of txs) { + try { + const result = await HandleGCR.applyToTx(tx) + if (!result.success) { + log.error( + "[fastSync] GCR edit application failed at tx: " + tx.hash, + ) + } + } catch (error) { log.error( - "[fastSync] GCR edit application failed at tx: " + tx.hash, + "[syncGCRTables] Error syncing GCR table for tx: " + tx.hash, ) + console.error("[SYNC] [ ERROR ]") + console.error(error) } - } catch (error) { - log.error( - "[syncGCRTables] Error syncing GCR table for tx: " + tx.hash, - ) - console.error("[SYNC] [ ERROR ]") - console.error(error) } + } finally { + getSharedState.inGcrApply = prevInGcrApply } return [null, true] @@ -770,7 +823,12 @@ export async function askTxsForBlock( }) if (res.result === 200) { - return res.response as Transaction[] + const txs = res.response as Transaction[] + // Some peers may respond 200 with an empty list if the block's transactions + // are not yet persisted in their transactions table; fall back to hash lookup. + if (Array.isArray(txs) && txs.length > 0) { + return txs + } } // INFO: fetch all transactions by hashes diff --git a/src/libs/blockchain/routines/validateTransaction.ts b/src/libs/blockchain/routines/validateTransaction.ts index 4d1272115..78042648c 100644 --- a/src/libs/blockchain/routines/validateTransaction.ts +++ b/src/libs/blockchain/routines/validateTransaction.ts @@ -23,6 +23,8 @@ import { Operation, ValidityData } from "@kynesyslabs/demosdk/types" import { forgeToHex } from "src/libs/crypto/forgeUtils" import _ from "lodash" import { ucrypto, uint8ArrayToHex } from "@kynesyslabs/demosdk/encryption" +import Datasource from "src/model/datasource" +import { GCRMain } from "src/model/entities/GCRv2/GCR_Main" // INFO Cryptographically validate a transaction and calculate gas // REVIEW is it overkill to write an interface for the return value? @@ -230,10 +232,24 @@ async function defineGas( } export async function assignNonce(tx: Transaction): Promise { - const validNonce = true // TODO Override for testing - // TODO Get, check and increment the nonce of the transaction - // while returning either true or false - return validNonce + const from = + typeof tx?.content?.from !== "string" + ? forgeToHex(tx?.content?.from as any) + : tx.content.from + + const txNonce = (tx as any)?.content?.nonce + if (typeof txNonce !== "number" || !Number.isFinite(txNonce) || txNonce < 0) { + return false + } + + const db = await Datasource.getInstance() + const repo = db.getDataSource().getRepository(GCRMain) + const account = await repo.findOneBy({ pubkey: from }) + if (!account) return false + + // Nonce must strictly follow the last confirmed nonce. + const expected = account.nonce + 1 + return txNonce === expected } // TODO a verified transaction should be signed by the same rpc that verified it and should be only valid for the current consensus round diff --git a/src/libs/consensus/v2/PoRBFT.ts b/src/libs/consensus/v2/PoRBFT.ts index af38b768c..f47e473d1 100644 --- a/src/libs/consensus/v2/PoRBFT.ts +++ b/src/libs/consensus/v2/PoRBFT.ts @@ -26,6 +26,7 @@ import L2PSConsensus from "@/libs/l2ps/L2PSConsensus" import { Waiter } from "@/utilities/waiter" import { DTRManager } from "@/libs/network/dtr/dtrmanager" import { BroadcastManager } from "@/libs/communications/broadcastManager" +import Datasource from "src/model/datasource" /* INFO # Semaphore system @@ -138,6 +139,9 @@ export async function consensusRoutine(): Promise { log.debug("Failed tx: " + tx) await Mempool.removeTransactionsByHashes([tx]) } + // Ensure the forged block uses the same tx set as the applied state. + const failedSet = new Set(failedTxs) + tempMempool = tempMempool.filter(tx => !failedSet.has(tx.hash)) } // INFO: CONSENSUS ACTION 4b: Apply pending L2PS proofs to L1 state @@ -190,7 +194,19 @@ export async function consensusRoutine(): Promise { pro + " votes", ) - await finalizeBlock(block, pro) + const finalized = await finalizeBlock( + block, + pro, + tempMempool, + manager.shard.members, + ) + if (!finalized) { + log.warning( + "[consensusRoutine] Failed to finalize block locally (missing tx bodies / deterministic apply guard); falling back to fastSync", + ) + await fastSync(manager.shard.members, "finalizeBlock") + return + } // REVIEW: Should we await this? if (manager.checkIfWeAreSecretary()) { @@ -358,15 +374,21 @@ async function rollbackGCREditsFromTxs( ): Promise<[string[], string[]]> { const successfulTxs: string[] = [] const failedTxs: string[] = [] - // 1. Parse the txs to get the GCREdits - for (const tx of txs) { - // 2. Apply the GCREdits to the state for each tx with the isRollback flag set to true - const result = await HandleGCR.applyToTx(tx, true) - if (result.success) { - successfulTxs.push(tx.hash) - } else { - failedTxs.push(tx.hash) + const prevInGcrApply = getSharedState.inGcrApply + getSharedState.inGcrApply = true + try { + // 1. Parse the txs to get the GCREdits + for (const tx of txs) { + // 2. Apply the GCREdits to the state for each tx with the isRollback flag set to true + const result = await HandleGCR.applyToTx(tx, true) + if (result.success) { + successfulTxs.push(tx.hash) + } else { + failedTxs.push(tx.hash) + } } + } finally { + getSharedState.inGcrApply = prevInGcrApply } return [successfulTxs, failedTxs] } @@ -380,39 +402,73 @@ async function rollbackGCREditsFromTxs( async function applyGCREditsFromMergedMempool( mempool: Transaction[], ): Promise<[string[], string[]]> { - // TODO Implement this - const successfulTxs: string[] = [] - const failedTxs: string[] = [] + const successfulTxs = new Set() + const failedTxs = new Set() - // 1. Parse the mempool txs to get the GCREdits - for (const tx of mempool) { - const txExists = await Chain.checkTxExists(tx.hash) - if (txExists) { - failedTxs.push(tx.hash) - continue - } + const prevInGcrApply = getSharedState.inGcrApply + getSharedState.inGcrApply = true + try { + // Apply edits atomically per-tx (align with sync path). + // IMPORTANT: Never apply per-edit here; if a later edit fails it would leave partial state applied. + for (const tx of mempool) { + const txExists = await Chain.checkTxExists(tx.hash) + if (txExists) { + failedTxs.add(tx.hash) + continue + } - const txGCREdits = tx.content.gcr_edits - // Skip transactions that don't have GCR edits (e.g., l2psBatch) - if (!txGCREdits || !Array.isArray(txGCREdits) || txGCREdits.length === 0) { - // These transactions are valid but don't modify GCR state - successfulTxs.push(tx.hash) - continue - } - // 2. Apply the GCREdits to the state for each tx - for (const gcrEdit of txGCREdits) { - const applyResult = await HandleGCR.apply(gcrEdit, tx) - if (applyResult.success) { - // If the apply succeeds, add the tx to the successfulTxs array - successfulTxs.push(tx.hash) - } else { - // If the apply fails, add the tx to the failedTxs array - failedTxs.push(tx.hash) + const txGCREdits = tx.content.gcr_edits + // Skip transactions that don't have GCR edits (e.g., l2psBatch) + if ( + !txGCREdits || + !Array.isArray(txGCREdits) || + txGCREdits.length === 0 + ) { + successfulTxs.add(tx.hash) + continue + } + + // Token edits are NOT currently included in the GCR integrity hash used by consensus. + // Validate token edits in simulate mode (so invalid token txs are pruned), + // but defer persistence of token edits until block finalization using the *actual* block tx list. + const hasTokenEdits = txGCREdits.some((e: any) => e?.type === "token") + if (hasTokenEdits) { + const tokenValidation = await HandleGCR.applyTokenEditsToTx( + tx, + false, + true, + ) + if (!tokenValidation.success) { + failedTxs.add(tx.hash) + continue + } + } + + const nonTokenEdits = txGCREdits.filter( + (e: any) => e?.type !== "token", + ) + if (nonTokenEdits.length === 0) { + successfulTxs.add(tx.hash) + continue } + + const txNonToken = { + ...tx, + content: { + ...tx.content, + gcr_edits: nonTokenEdits, + }, + } as any as Transaction + + const result = await HandleGCR.applyToTx(txNonToken, false, false) + if (result.success) successfulTxs.add(tx.hash) + else failedTxs.add(tx.hash) } + } finally { + getSharedState.inGcrApply = prevInGcrApply } - // 4. Return the successful and failed GCREdits // NOTE They will be used to prune the mempool - return [successfulTxs, failedTxs] + + return [[...successfulTxs], [...failedTxs]] } // /** @@ -536,15 +592,157 @@ function isBlockValid(pro: number, totalVotes: number): boolean { * @param block - The block * @param pro - The number of votes for the block */ -async function finalizeBlock(block: Block, pro: number): Promise { +async function finalizeBlock( + block: Block, + pro: number, + txs: Transaction[], + shardMembers: Peer[], +): Promise { log.info(`[CONSENSUS] Block is valid with ${pro} votes`) log.debug(`[CONSENSUS] Block data: ${JSON.stringify(block)}`) - await Chain.insertBlock(block) // NOTE Transactions are added to the Transactions table here + + const prevInGcrApply = getSharedState.inGcrApply + getSharedState.inGcrApply = true + try { + const orderedHashes = Array.isArray(block?.content?.ordered_transactions) + ? (block.content.ordered_transactions as string[]) + : [] + const byHash = new Map() + for (const tx of txs) byHash.set(tx.hash, tx) + + const missingHashes = orderedHashes.filter(h => !byHash.has(h)) + if (missingHashes.length > 0) { + log.warning( + `[CONSENSUS] Missing ${missingHashes.length}/${orderedHashes.length} tx bodies for finalized block ${block.number} (${block.hash}); attempting to fetch from shard`, + ) + + const fetched = await fetchTxsByHashesFromPeers( + missingHashes, + shardMembers, + ) + for (const tx of fetched) byHash.set(tx.hash, tx) + } + + const stillMissing = orderedHashes.filter(h => !byHash.has(h)) + if (stillMissing.length > 0) { + log.error( + `[CONSENSUS] Cannot finalize block ${block.number} (${block.hash}): still missing ${stillMissing.length}/${orderedHashes.length} tx bodies. Refusing to apply token edits and commit local block.`, + ) + return false + } + + // Apply token edits deterministically from the finalized block transaction list. + // This prevents token-table divergence when shard members have incomplete mempools at forge time. + const orderedTxs = orderedHashes.map(h => byHash.get(h)) as Transaction[] + const db = await Datasource.getInstance() + const dataSource = db.getDataSource() + + try { + await dataSource.transaction(async em => { + for (const tx of orderedTxs) { + // Ensure scripts see stable block height context. + if (!tx.blockNumber) tx.blockNumber = block.number + const tokenApply = await HandleGCR.applyTokenEditsToTx( + tx, + false, + false, + em, + ) + if (!tokenApply.success) { + throw new Error( + `[CONSENSUS] Token edits failed for tx ${tx.hash}: ${tokenApply.message}`, + ) + } + } + + await Chain.insertBlock(block, [], undefined, true, true, em) // NOTE Transactions are added to the Transactions table here + }) + } catch (error) { + log.error(String(error)) + return false + } + + if (block.number > getSharedState.lastBlockNumber) { + getSharedState.lastBlockNumber = block.number + getSharedState.lastBlockHash = block.hash + } + + // Ensure the block's ordered transactions are persisted for downstream syncers. + // insertBlock relies on mempool-backed lookup; if a tx wasn't in local mempool at commit time, + // peers may not be able to fetch it (and would fail to apply GCR edits during sync). + if (orderedTxs.length > 0) await Chain.insertTransactionsFromSync(orderedTxs) + } finally { + getSharedState.inGcrApply = prevInGcrApply + } //getSharedState.consensusMode = false ///getSharedState.inConsensusLoop = false log.info("[CONSENSUS] Block added to the chain") const lastBlock = await Chain.getLastBlock() log.debug(`[CONSENSUS] Last block: ${JSON.stringify(lastBlock)}`) + return true +} + +async function fetchTxsByHashesFromPeers( + hashes: string[], + peers: Peer[], +): Promise { + const remaining = new Set(hashes) + const results: Transaction[] = [] + + const batchSize = + typeof getSharedState.batchSyncTxLimit === "number" && + getSharedState.batchSyncTxLimit > 0 + ? getSharedState.batchSyncTxLimit + : 250 + + const chunks: string[][] = [] + const asArray = [...remaining] + for (let i = 0; i < asArray.length; i += batchSize) { + chunks.push(asArray.slice(i, i + batchSize)) + } + + for (const peer of peers) { + if (remaining.size === 0) break + + for (const chunk of chunks) { + const need = chunk.filter(h => remaining.has(h)) + if (need.length === 0) continue + + try { + const req = { + method: "nodeCall", + params: [ + { + message: "getTxsByHashes", + data: { hashes: need }, + muid: null, + }, + ], + } + + const res: any = await peer.longCall(req as any, true, { + protocol: "http", + sleepTime: 250, + retries: 3, + }) + + if (res?.result !== 200 || !Array.isArray(res?.response)) { + continue + } + + for (const tx of res.response as Transaction[]) { + if (tx?.hash && remaining.has(tx.hash)) { + remaining.delete(tx.hash) + results.push(tx) + } + } + } catch { + // best-effort; keep trying other peers + } + } + } + + return results } function preventForgingEnded(blockRef: number) { diff --git a/src/libs/l2ps/L2PSConcurrentSync.ts b/src/libs/l2ps/L2PSConcurrentSync.ts index 85d58f520..d6929902c 100644 --- a/src/libs/l2ps/L2PSConcurrentSync.ts +++ b/src/libs/l2ps/L2PSConcurrentSync.ts @@ -50,8 +50,8 @@ export async function discoverL2PSParticipants(peers: Peer[], l2psUids?: string[ params: [{ message: "getL2PSParticipationById", data: { l2psUid: uid }, - muid: `l2ps_discovery_${Date.now()}` // Unique ID - }] + muid: `l2ps_discovery_${Date.now()}`, // Unique ID + }], }).then(response => { if (response?.result === 200 && response?.response?.participating) { addL2PSParticipant(uid, peer.identity) @@ -115,10 +115,10 @@ export async function syncL2PSWithPeer(peer: Peer, l2psUid: string): Promise { +export async function exchangeL2PSParticipation( + peers: Peer[], + l2psUids?: string[], +): Promise { // Piggyback on discovery for now - await discoverL2PSParticipants(peers) + await discoverL2PSParticipants( + peers, + l2psUids ?? getSharedState.l2psJoinedUids, + ) } /** diff --git a/src/libs/network/bunServer.ts b/src/libs/network/bunServer.ts index 1cdd6e8da..ab07d48c4 100644 --- a/src/libs/network/bunServer.ts +++ b/src/libs/network/bunServer.ts @@ -2,15 +2,26 @@ import { Server } from "bun" import { Headers } from "node-fetch" import log from "@/utilities/logger" -export type Handler = (req: Request) => Promise | Response +export type BunRequest = Request & { + params?: Record +} + +export type Handler = (req: BunRequest) => Promise | Response export type Middleware = ( - req: Request, + req: BunRequest, next: () => Promise, server?: Server, ) => Promise +type ParamRoute = { + path: string + segments: string[] + handler: Handler +} + export class BunServer { private routes: Map> = new Map() + private paramRoutes: Map = new Map() private middlewares: Middleware[] = [] private port: number private hostname: string @@ -37,14 +48,62 @@ export class BunServer { } private addRoute(method: string, path: string, handler: Handler): void { + if (path.includes("/:")) { + if (!this.paramRoutes.has(method)) { + this.paramRoutes.set(method, []) + } + this.paramRoutes.get(method)!.push({ + path, + segments: path.split("/").filter(Boolean), + handler, + }) + return + } if (!this.routes.has(method)) { this.routes.set(method, new Map()) } this.routes.get(method)?.set(path, handler) } + private matchParamRoute(method: string, pathname: string): { + handler: Handler + params: Record + } | null { + const candidates = this.paramRoutes.get(method) + if (!candidates || candidates.length === 0) return null + + const requestSegments = pathname.split("/").filter(Boolean) + + for (const route of candidates) { + if (route.segments.length !== requestSegments.length) continue + const params: Record = {} + let matched = true + + for (let i = 0; i < route.segments.length; i++) { + const routeSeg = route.segments[i] + const reqSeg = requestSegments[i] + + if (routeSeg.startsWith(":")) { + params[routeSeg.slice(1)] = decodeURIComponent(reqSeg) + continue + } + + if (routeSeg !== reqSeg) { + matched = false + break + } + } + + if (matched) { + return { handler: route.handler, params } + } + } + + return null + } + private async handleRequest( - req: Request, + req: BunRequest, server?: Server, ): Promise { const url = new URL(req.url) @@ -53,7 +112,14 @@ export class BunServer { // Create the final handler (route handler) const finalHandler = async (): Promise => { - const routeHandler = this.routes.get(method)?.get(path) + let routeHandler = this.routes.get(method)?.get(path) + if (!routeHandler) { + const match = this.matchParamRoute(method, path) + if (match) { + routeHandler = match.handler + req.params = match.params + } + } if (routeHandler) { return await routeHandler(req) } diff --git a/src/libs/network/docs_nodeCall.md b/src/libs/network/docs_nodeCall.md index 56c17470d..f71792ed8 100644 --- a/src/libs/network/docs_nodeCall.md +++ b/src/libs/network/docs_nodeCall.md @@ -76,6 +76,52 @@ Returns all transactions in the chain. ### hots Returns a predefined response (likely an Easter egg). +--- + +## Token Methods (Phase 1.6) + +### token.get +Get complete token information by address. +- `.data`: `{ tokenAddress: string }` +- Returns: Token with metadata/state/access control. + +### token.getCommitted +Committed-only variant of `token.get` (state as applied from finalized blocks/sync). +- `.data`: `{ tokenAddress: string }` +- Returns: Same shape as `token.get`. +- May return: `409 { error: "STATE_IN_FLUX" }` while the node is applying committed state (sync/consensus). Retry. + +### token.getBalance +Get balance of a specific address for a token. +- `.data`: `{ tokenAddress: string, address: string }` +- Returns: Balance info including `balance` (string). + +### token.getBalanceCommitted +Committed-only variant of `token.getBalance`. +- `.data`: `{ tokenAddress: string, address: string }` +- Returns: Same shape as `token.getBalance`. +- May return: `409 { error: "STATE_IN_FLUX" }` while the node is applying committed state (sync/consensus). Retry. + +### token.getHolderPointers +Get token holder pointers recorded for an address (used by loadgen consistency checks). +- `.data`: `{ address: string }` +- Returns: `{ address: string, tokens: Array<{ tokenAddress: string, ... }>|string[] }` + +### token.callView +Execute a read-only script method (view function) on a token. +- `.data`: `{ tokenAddress: string, method: string, args?: any[] }` +- Returns: On success: `{ tokenAddress, method, value, executionTimeMs, gasUsed }` +- On error: `{ error: string, message: string, gasUsed?, executionTimeMs? }` +- Error codes: `INVALID_REQUEST` (400), `TOKEN_NOT_FOUND` (404), `NO_SCRIPT` (400), `EXECUTION_ERROR` (400), `INTERNAL_ERROR` (500) + +### token.callViewCommitted +Committed-only variant of `token.callView`. +- `.data`: `{ tokenAddress: string, method: string, args?: any[] }` +- Returns: Same shape as `token.callView`. +- May return: `409 { error: "STATE_IN_FLUX" }` while the node is applying committed state (sync/consensus). Retry. + +--- + ## Error Handling - If required parameters are missing, methods typically return a 400 status with an error message. @@ -92,4 +138,4 @@ response: any; // The main response data require_reply: boolean; extra: any | null; // Additional information or error details } -``` \ No newline at end of file +``` diff --git a/src/libs/network/endpointHandlers.ts b/src/libs/network/endpointHandlers.ts index eb19a7447..a2a41c4e5 100644 --- a/src/libs/network/endpointHandlers.ts +++ b/src/libs/network/endpointHandlers.ts @@ -121,8 +121,17 @@ export default class ServerHandlers { log.debug( "[handleValidateTransaction] gcrEditsHash: " + gcrEditsHash, ) + + // REVIEW: Token edits are not yet generated by SDK's GCRGeneration (Phase 1.4), + // so we only compare the non-token edits for now. + const txEdits = Array.isArray(tx.content.gcr_edits) + ? (tx.content.gcr_edits as any[]) + : [] + const txNonTokenEdits = txEdits.filter((e) => e?.type !== "token") + const tokenEditsCount = txEdits.length - txNonTokenEdits.length + const txGcrEditsHash = Hashing.sha256( - JSON.stringify(tx.content.gcr_edits), + JSON.stringify(txNonTokenEdits), ) log.debug( "[handleValidateTransaction] txGcrEditsHash: " + txGcrEditsHash, @@ -137,7 +146,9 @@ export default class ServerHandlers { ) } if (comparison) { - log.info("[handleValidateTransaction] GCREdit hash match") + log.info( + `[handleValidateTransaction] GCREdit hash match (non-token edits; tokenEdits=${tokenEditsCount})`, + ) } else { throw new Error("GCREdit mismatch") } diff --git a/src/libs/network/manageExecution.ts b/src/libs/network/manageExecution.ts index 201eaf053..1c077050b 100644 --- a/src/libs/network/manageExecution.ts +++ b/src/libs/network/manageExecution.ts @@ -104,11 +104,18 @@ export async function manageExecution( // ANCHOR Reply logic - // TODO & REVIEW Call security module for send limiting messages - const secDisabled = true - if (!secDisabled) { - const ts = new Date().getTime() - const securityInterceptor: ISecurityReport = null // ! implement this + // Optional security interceptor (rate limiting). Disabled unless explicitly enabled via env. + const securityInterceptor: ISecurityReport = await Security.checkRateLimits( + sender, + String(content.extra ?? content.type ?? "unknown"), + Date.now(), + ) + if (securityInterceptor && (securityInterceptor as any).state === false) { + returnValue.result = 429 + returnValue.response = "Rate limited" + returnValue.extra = securityInterceptor.message + returnValue.require_reply = false + return returnValue } // Sending back the response diff --git a/src/libs/network/manageNodeCall.ts b/src/libs/network/manageNodeCall.ts index 9d8adce81..e433bbb7d 100644 --- a/src/libs/network/manageNodeCall.ts +++ b/src/libs/network/manageNodeCall.ts @@ -1,6 +1,7 @@ import { RPCResponse, SigningAlgorithm } from "@kynesyslabs/demosdk/types" import { emptyResponse } from "./server_rpc" import Chain from "../blockchain/chain" +import fs from "fs" import eggs from "./routines/eggs" import { getSharedState } from "src/utilities/sharedState" // Importing methods themselves @@ -35,6 +36,9 @@ import { uint8ArrayToHex, } from "@kynesyslabs/demosdk/encryption" import { DTRManager } from "./dtr/dtrmanager" +import { scriptExecutor } from "@/libs/scripting" +import { GCRToken } from "@/model/entities/GCRv2/GCR_Token" +import Datasource from "@/model/datasource" export interface NodeCall { message: string @@ -59,20 +63,63 @@ export async function manageNodeCall(content: NodeCall): Promise { response.require_reply = false // Until proven otherwise response.extra = null // Until proven otherwise log.debug("[manageNodeCall] Content: " + JSON.stringify(content)) + + const rejectCommittedReadIfStateInFlux = (): boolean => { + if (getSharedState.inGcrApply) { + const maxMs = Number.parseInt( + process.env.COMMITTED_READ_IN_FLUX_MAX_MS ?? "120000", + 10, + ) + const since = getSharedState.inGcrApplySinceMs ?? 0 + const ageMs = since > 0 ? Date.now() - since : 0 + + // Watchdog: if the apply phase wedges and never clears, do not permanently + // brick committed-only read APIs in dev/test environments. Clear the flag + // once it's been stuck long enough, and allow reads to proceed. + if (maxMs > 0 && ageMs > maxMs) { + log.warn( + `[manageNodeCall] inGcrApply stuck for ${ageMs}ms (> ${maxMs}ms). Clearing inGcrApply to unblock committed reads.`, + ) + getSharedState.inGcrApply = false + return false + } + + response.result = 409 + response.response = { + error: "STATE_IN_FLUX", + message: + "Committed state is currently being applied (sync/consensus). Retry shortly.", + } + return true + } + return false + } + + const getRepo = async (entity: any) => { + const db = await Datasource.getInstance() + return db.getDataSource().getRepository(entity) + } switch (content.message) { case "getPeerInfo": response.response = await getPeerInfo() break case "getGenesisDataHash": { try { - const genesisBlock = await Chain.getGenesisBlock() + const genesisBlock = await Chain.getGenesisBlock().catch(() => null) let genesisData = - genesisBlock.content.extra?.genesisData || null + genesisBlock?.content?.extra?.genesisData || null if (typeof genesisData === "string") { genesisData = JSON.parse(genesisData) } + // During early startup the genesis block may not be persisted yet; fall back to local genesis file + // so peer bootstrap doesn't fail with a transient 500. + if (!genesisData) { + const genesisFile = "data/genesis.json" + genesisData = JSON.parse(fs.readFileSync(genesisFile, "utf8")) + } + response.response = Hashing.sha256(JSON.stringify(genesisData)) break } catch (error) { @@ -993,6 +1040,313 @@ export async function manageNodeCall(content: NodeCall): Promise { response.response = eggs.hots() break + // REVIEW: Crypto readiness probe (used by perf harness to avoid early-startup tx validation crashes) + case "crypto.getIdentity": { + try { + const algo = (data?.algorithm as SigningAlgorithm) || getSharedState.signingAlgorithm + const identity = await ucrypto.getIdentity(algo) + response.result = 200 + response.response = { + algorithm: algo, + publicKeyHex: uint8ArrayToHex(identity.publicKey as Uint8Array), + } + } catch (error: any) { + log.error("[manageNodeCall] crypto.getIdentity error: " + error) + response.result = 500 + response.response = { + error: "NOT_READY", + message: "Crypto identity not ready", + details: error.message || String(error), + } + } + break + } + + // REVIEW: Token system - basic read APIs (perf harness support) + case "token.get": + case "token.getCommitted": { + if ( + content.message === "token.getCommitted" && + rejectCommittedReadIfStateInFlux() + ) + break + if (!data?.tokenAddress) { + response.result = 400 + response.response = { + error: "INVALID_REQUEST", + message: "tokenAddress is required", + } + break + } + + try { + const gcrTokenRepository = await getRepo(GCRToken) + const token = await gcrTokenRepository.findOneBy({ + address: data.tokenAddress, + }) + + if (!token) { + response.result = 404 + response.response = { + error: "TOKEN_NOT_FOUND", + message: `Token not found: ${data.tokenAddress}`, + } + break + } + + response.result = 200 + response.response = { + tokenAddress: token.address, + metadata: { + name: token.name, + ticker: token.ticker, + decimals: token.decimals, + deployer: token.deployer, + deployerNonce: token.deployerNonce, + deployedAt: token.deployedAt, + hasScript: token.hasScript, + }, + state: { + totalSupply: token.totalSupply, + balances: token.balances ?? {}, + allowances: token.allowances ?? {}, + customState: token.customState ?? {}, + }, + accessControl: { + owner: token.owner, + paused: token.paused, + entries: token.aclEntries ?? [], + }, + } + } catch (error: any) { + log.error("[manageNodeCall] token.get error: " + error) + response.result = 500 + response.response = { + error: "INTERNAL_ERROR", + message: "Failed to fetch token", + details: error.message || String(error), + } + } + break + } + + case "token.getBalance": + case "token.getBalanceCommitted": { + if ( + content.message === "token.getBalanceCommitted" && + rejectCommittedReadIfStateInFlux() + ) + break + if (!data?.tokenAddress || !data?.address) { + response.result = 400 + response.response = { + error: "INVALID_REQUEST", + message: "tokenAddress and address are required", + } + break + } + + try { + const gcrTokenRepository = await getRepo(GCRToken) + const token = await gcrTokenRepository.findOneBy({ + address: data.tokenAddress, + }) + + if (!token) { + response.result = 404 + response.response = { + error: "TOKEN_NOT_FOUND", + message: `Token not found: ${data.tokenAddress}`, + } + break + } + + const balances: Record = token.balances || {} + const balance = balances[data.address] ?? "0" + + response.result = 200 + response.response = { + tokenAddress: data.tokenAddress, + address: data.address, + balance, + } + } catch (error: any) { + log.error("[manageNodeCall] token.getBalance error: " + error) + response.result = 500 + response.response = { + error: "INTERNAL_ERROR", + message: "Failed to fetch token balance", + details: error.message || String(error), + } + } + break + } + + // REVIEW: Token system - holder pointer lookups (GCRMain.extended.tokens) + case "token.getHolderPointers": { + if (!data?.address) { + response.result = 400 + response.response = { + error: "INVALID_REQUEST", + message: "address is required", + } + break + } + + try { + const gcrMainRepository = await getRepo(GCRMain) + const holder = await gcrMainRepository.findOneBy({ + pubkey: data.address, + }) + + if (!holder) { + response.result = 200 + response.response = { + address: data.address, + tokens: [], + } + break + } + + response.result = 200 + response.response = { + address: holder.pubkey, + tokens: holder.extended?.tokens ?? [], + } + } catch (error: any) { + log.error("[manageNodeCall] token.getHolderPointers error: " + error) + response.result = 500 + response.response = { + error: "INTERNAL_ERROR", + message: "Failed to fetch holder pointers", + details: error.message || String(error), + } + } + break + } + + // REVIEW: Token scripting - Phase 3.3: View function execution + case "token.callView": + case "token.callViewCommitted": { + if ( + content.message === "token.callViewCommitted" && + rejectCommittedReadIfStateInFlux() + ) + break + log.debug("[SERVER] Received token.callView") + + // Validate required fields + if (!data.tokenAddress || !data.method) { + response.result = 400 + response.response = { + error: "INVALID_REQUEST", + message: "tokenAddress and method are required", + } + break + } + + try { + // Get token from repository + const gcrTokenRepository = await getRepo(GCRToken) + const token = await gcrTokenRepository.findOneBy({ + address: data.tokenAddress, + }) + + if (!token) { + response.result = 404 + response.response = { + error: "TOKEN_NOT_FOUND", + message: `Token not found: ${data.tokenAddress}`, + } + break + } + + if (!token.hasScript) { + response.result = 400 + response.response = { + error: "NO_SCRIPT", + message: "Token does not have a script", + } + break + } + + // Build tokenData from GCRToken entity for ScriptExecutor + // Type annotations needed for BigInt conversion from string values + const balances: Record = token.balances || {} + const allowances: Record> = + token.allowances || {} + + const tokenData = { + address: token.address, + name: token.name, + ticker: token.ticker, + decimals: token.decimals, + owner: token.owner, + totalSupply: BigInt(token.totalSupply), + balances: Object.fromEntries( + Object.entries(balances).map(([k, v]) => [k, BigInt(v)]), + ), + allowances: Object.fromEntries( + Object.entries(allowances).map(([owner, spenders]) => [ + owner, + Object.fromEntries( + Object.entries(spenders).map(([spender, v]) => [ + spender, + BigInt(v), + ]), + ), + ]), + ), + paused: token.paused, + storage: token.customState, + } + + // Execute view method via ScriptExecutor + const viewResult = await scriptExecutor.executeView({ + tokenAddress: data.tokenAddress, + method: data.method, + args: data.args ?? [], + tokenData, + scriptCode: token.script?.code ?? "", + }) + + if (!viewResult.success) { + // Type narrowing for error result + const errorResult = viewResult as Extract< + typeof viewResult, + { success: false } + > + response.result = 400 + response.response = { + error: errorResult.errorType?.toUpperCase() ?? "EXECUTION_ERROR", + message: errorResult.error, + gasUsed: errorResult.gasUsed, + executionTimeMs: errorResult.executionTimeMs, + } + break + } + + // Success response + response.result = 200 + response.response = { + tokenAddress: data.tokenAddress, + method: data.method, + value: viewResult.value, + executionTimeMs: viewResult.executionTimeMs, + gasUsed: viewResult.gasUsed, + } + } catch (error: any) { + log.error("[manageNodeCall] token.callView error: " + error) + response.result = 500 + response.response = { + error: "INTERNAL_ERROR", + message: "Failed to execute view function", + details: error.message || String(error), + } + } + break + } + default: log.warning("[SERVER] Received unknown message") // eslint-disable-next-line quotes diff --git a/src/libs/network/routines/nodecalls/getBlockByNumber.ts b/src/libs/network/routines/nodecalls/getBlockByNumber.ts index 96dece82f..e7a103212 100644 --- a/src/libs/network/routines/nodecalls/getBlockByNumber.ts +++ b/src/libs/network/routines/nodecalls/getBlockByNumber.ts @@ -20,7 +20,6 @@ export default async function getBlockByNumber( let block: Blocks if (blockNumber === 0) { - // @ts-expect-error Block is not typed block = { number: 0, hash: await Chain.getGenesisBlockHash(), diff --git a/src/libs/network/securityModule.ts b/src/libs/network/securityModule.ts index f60554142..2cf15398c 100644 --- a/src/libs/network/securityModule.ts +++ b/src/libs/network/securityModule.ts @@ -1,4 +1,3 @@ -// TODO Implement this import { ISecurityReport } from "@kynesyslabs/demosdk/types" export const modules = { @@ -13,17 +12,62 @@ export const modules = { }, } -// SECTION Internal methods -async function checkRateLimits( - reportedTimestamp: number, +type RateBucket = { tokens: number; lastRefillMs: number } + +const rateBuckets = new Map() + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const v = Number.parseInt(raw, 10) + return Number.isFinite(v) ? v : fallback +} + +const SECURITY_RATE_LIMIT_ENABLED = process.env.SECURITY_RATE_LIMIT_ENABLED === "true" +const SECURITY_RATE_LIMIT_RPS = envInt("SECURITY_RATE_LIMIT_RPS", 25) +const SECURITY_RATE_LIMIT_BURST = envInt("SECURITY_RATE_LIMIT_BURST", 50) +const SECURITY_RATE_LIMIT_BUCKET_TTL_MS = envInt("SECURITY_RATE_LIMIT_BUCKET_TTL_MS", 10 * 60 * 1000) + +function getBucketKey(sender: string, requestType: string): string { + return `${sender}:${requestType}` +} + +function refillBucket(bucket: RateBucket, nowMs: number): void { + const elapsedMs = Math.max(0, nowMs - bucket.lastRefillMs) + const refill = (elapsedMs / 1000) * SECURITY_RATE_LIMIT_RPS + bucket.tokens = Math.min(SECURITY_RATE_LIMIT_BURST, bucket.tokens + refill) + bucket.lastRefillMs = nowMs +} + +export async function checkRateLimits( + sender: string, + requestType: string, + reportedTimestamp = Date.now(), ): Promise { - const report: ISecurityReport = { - code: "0", - message: "undefined", - state: undefined, + if (!SECURITY_RATE_LIMIT_ENABLED) { + return { code: "0", message: "rate_limit_disabled", state: true } as ISecurityReport + } + + const nowMs = typeof reportedTimestamp === "number" ? reportedTimestamp : Date.now() + const key = getBucketKey(String(sender ?? "unknown"), String(requestType ?? "unknown")) + let bucket = rateBuckets.get(key) + if (!bucket) { + bucket = { tokens: SECURITY_RATE_LIMIT_BURST, lastRefillMs: nowMs } + rateBuckets.set(key, bucket) } - // TODO Implement this - return report -} -// Exporting + refillBucket(bucket, nowMs) + const allowed = bucket.tokens >= 1 + if (allowed) bucket.tokens -= 1 + + // Best-effort cleanup to avoid unbounded growth. + if (rateBuckets.size > 10_000) { + for (const [k, b] of rateBuckets) { + if (nowMs - b.lastRefillMs > SECURITY_RATE_LIMIT_BUCKET_TTL_MS) rateBuckets.delete(k) + } + } + + return allowed + ? ({ code: "0", message: "ok", state: true } as ISecurityReport) + : ({ code: "RATE_LIMIT", message: "rate_limited", state: false } as ISecurityReport) +} diff --git a/src/libs/network/server_rpc.ts b/src/libs/network/server_rpc.ts index 967afa20e..26c6f6c7f 100644 --- a/src/libs/network/server_rpc.ts +++ b/src/libs/network/server_rpc.ts @@ -373,7 +373,7 @@ async function processPayload( // 2. Verify cryptography only const isValid = await ProofVerifier.verifyProofOnly( attestation.proof, - attestation.publicSignals + attestation.publicSignals, ) return { diff --git a/src/libs/scripting/index.ts b/src/libs/scripting/index.ts new file mode 100644 index 000000000..18939357b --- /dev/null +++ b/src/libs/scripting/index.ts @@ -0,0 +1,508 @@ +export type GCRTokenData = { + address: string + name: string + ticker: string + decimals: number + owner: string + totalSupply: bigint + balances: Record + allowances: Record> + paused: boolean + storage: any +} + +export type TokenMutation = + | { kind: "transfer"; from: string; to: string; amount: bigint } + | { kind: "mint"; to: string; amount: bigint } + | { kind: "burn"; from: string; amount: bigint } + +export function createTransferMutations( + from: string, + to: string, + amount: bigint, +): TokenMutation[] { + return [{ kind: "transfer", from, to, amount }] +} + +export function createMintMutations(to: string, amount: bigint): TokenMutation[] { + return [{ kind: "mint", to, amount }] +} + +export function createBurnMutations( + from: string, + amount: bigint, +): TokenMutation[] { + return [{ kind: "burn", from, amount }] +} + +export function applyMutations( + tokenData: GCRTokenData, + mutations: TokenMutation[], +): { newState: GCRTokenData } { + const balances: Record = { ...tokenData.balances } + let totalSupply = tokenData.totalSupply + + for (const m of mutations) { + if (!m || typeof m !== "object") { + throw new Error("Invalid mutation: not an object") + } + + if (m.kind === "transfer") { + if (m.amount <= 0n) throw new Error(`Invalid transfer amount: ${m.amount}`) + // Self-transfer should be a no-op for balances (prevents accidental minting). + // If scripts want special behavior, they can return explicit mutations. + if (m.from?.toLowerCase?.() === m.to?.toLowerCase?.()) continue + const fromBal = balances[m.from] ?? 0n + const toBal = balances[m.to] ?? 0n + if (fromBal < m.amount) { + throw new Error(`Insufficient balance for transfer: from=${m.from} have=${fromBal} need=${m.amount}`) + } + balances[m.from] = fromBal - m.amount + balances[m.to] = toBal + m.amount + if (balances[m.from] === 0n) delete balances[m.from] + } else if (m.kind === "mint") { + if (m.amount <= 0n) throw new Error(`Invalid mint amount: ${m.amount}`) + const toBal = balances[m.to] ?? 0n + balances[m.to] = toBal + m.amount + totalSupply += m.amount + } else if (m.kind === "burn") { + if (m.amount <= 0n) throw new Error(`Invalid burn amount: ${m.amount}`) + const fromBal = balances[m.from] ?? 0n + if (fromBal < m.amount) { + throw new Error(`Insufficient balance for burn: from=${m.from} have=${fromBal} need=${m.amount}`) + } + if (totalSupply < m.amount) { + throw new Error(`Invalid burn exceeds totalSupply: supply=${totalSupply} burn=${m.amount}`) + } + balances[m.from] = fromBal - m.amount + if (balances[m.from] === 0n) delete balances[m.from] + totalSupply -= m.amount + } else { + throw new Error(`Unknown mutation kind: ${(m as any).kind}`) + } + } + + if (totalSupply < 0n) throw new Error(`Invalid totalSupply (negative): ${totalSupply}`) + + return { + newState: { + ...tokenData, + totalSupply, + balances, + }, + } +} + +export type ExecuteWithHooksRequest = { + operation: string + operationData: any + tokenAddress: string + tokenData: GCRTokenData + scriptCode: string + txContext: { + caller: string + txHash: string + timestamp: number + blockHeight: number + prevBlockHash: string + } + nativeOperationMutations: TokenMutation[] +} + +export type HookExecutionResult = { + finalState: GCRTokenData + mutations: TokenMutation[] + rejection: null | { hookType: string; reason: string } + metadata: { + beforeHookExecuted: boolean + afterHookExecuted: boolean + } +} + +export type ScriptViewRequest = { + tokenAddress: string + method: string + args: any[] + tokenData: GCRTokenData + scriptCode: string +} + +export type ScriptMethodRequest = { + tokenAddress: string + method: string + args: any[] + caller: string + blockContext: { timestamp: number; height: number; prevBlockHash: string } + txHash: string + tokenData: GCRTokenData + scriptCode: string +} + +export type ScriptViewResult = + | { + success: true + value: any + executionTimeMs: number + gasUsed: number + } + | { + success: false + error: string + errorType?: string + executionTimeMs: number + gasUsed: number + } + +export type ScriptMethodResult = + | { + success: true + returnValue: any + mutations: TokenMutation[] + } + | { success: false; error: string; errorType?: string } + +export type ScriptExecutor = { + executeView(req: ScriptViewRequest): Promise + executeMethod(req: ScriptMethodRequest): Promise + executeWithHooks(req: ExecuteWithHooksRequest): Promise +} + +type CompiledTokenScript = { + views: Record + hooks: Record + methods: Record + module: { exports: any } + sandbox: Record + context: any +} + +const compiledCache = new Map() + +let vmCallSeq = 0 + +function envInt(name: string, fallback: number): number { + const raw = process.env[name] + if (!raw) return fallback + const value = Number.parseInt(raw, 10) + return Number.isFinite(value) ? value : fallback +} + +const TOKEN_SCRIPT_COMPILE_TIMEOUT_MS = envInt("TOKEN_SCRIPT_COMPILE_TIMEOUT_MS", 50) +const TOKEN_SCRIPT_VIEW_TIMEOUT_MS = envInt("TOKEN_SCRIPT_VIEW_TIMEOUT_MS", 50) +const TOKEN_SCRIPT_HOOK_TIMEOUT_MS = envInt("TOKEN_SCRIPT_HOOK_TIMEOUT_MS", 50) +const TOKEN_SCRIPT_METHOD_TIMEOUT_MS = envInt("TOKEN_SCRIPT_METHOD_TIMEOUT_MS", 50) +const TOKEN_SCRIPT_ASYNC_TIMEOUT_MS = envInt("TOKEN_SCRIPT_ASYNC_TIMEOUT_MS", 2000) +const TOKEN_SCRIPT_COMPILED_CACHE_MAX = envInt("TOKEN_SCRIPT_COMPILED_CACHE_MAX", 256) + +function isThenable(value: any): value is Promise { + return !!value && (typeof value === "object" || typeof value === "function") && typeof value.then === "function" +} + +async function awaitWithTimeout(promise: Promise, timeoutMs: number, label: string): Promise { + if (!(timeoutMs > 0)) return await promise + let timer: any + try { + return await Promise.race([ + promise, + new Promise((_resolve, reject) => { + timer = setTimeout(() => reject(new Error(`${label} timed out after ${timeoutMs}ms`)), timeoutMs) + }), + ]) + } finally { + if (timer) clearTimeout(timer) + } +} + +function runExportedFunctionInVm(params: { + compiled: CompiledTokenScript + namespace: "views" | "hooks" | "methods" + name: string + args: any[] + timeoutMs: number + filename: string +}): any { + // Lazy import to keep this module tree simple for Bun bundling. + // eslint-disable-next-line @typescript-eslint/no-var-requires + const vm = require("vm") as typeof import("vm") + + const key = `__call_${++vmCallSeq}` + params.compiled.sandbox[key] = { ns: params.namespace, name: params.name, args: params.args } + + // Access the function via module.exports[ns][name] inside the VM context, with a hard timeout. + const code = `module.exports[${key}.ns][${key}.name](...${key}.args)` + const script = new vm.Script(code, { filename: params.filename }) + try { + if (params.timeoutMs > 0) return script.runInContext(params.compiled.context, { timeout: params.timeoutMs }) + return script.runInContext(params.compiled.context) + } finally { + delete params.compiled.sandbox[key] + } +} + +function compileScript(scriptCode: string): CompiledTokenScript { + const cached = compiledCache.get(scriptCode) + if (cached) return cached + + // Lazy import to keep this module tree simple for Bun bundling. + // eslint-disable-next-line @typescript-eslint/no-var-requires + const vm = require("vm") as typeof import("vm") + + const module = { exports: {} as any } + const sandbox = { + module, + exports: module.exports, + BigInt, + } as Record + + const context = vm.createContext(sandbox, { name: "TokenScript", codeGeneration: { strings: false, wasm: false } }) + + // Determinism hardening: token scripts must be replayable across nodes. Disable common sources + // of nondeterminism and avoid exposing node internals. + // NOTE: This is best-effort hardening; the primary safety guard is the per-call VM timeout. + const harden = new vm.Script( + ` + try { if (typeof Date !== "undefined") Date.now = () => { throw new Error("Date.now is disabled in token scripts") } } catch {} + try { if (typeof Math !== "undefined") Math.random = () => { throw new Error("Math.random is disabled in token scripts") } } catch {} + try { globalThis.process = undefined } catch {} + try { globalThis.require = undefined } catch {} + `, + { filename: "token-script-harden.js" }, + ) + harden.runInContext(context, { timeout: TOKEN_SCRIPT_COMPILE_TIMEOUT_MS }) + + const script = new vm.Script(String(scriptCode ?? ""), { filename: "token-script.js" }) + script.runInContext(context, { timeout: TOKEN_SCRIPT_COMPILE_TIMEOUT_MS }) + + const exported = (module.exports ?? sandbox.exports ?? {}) as any + + const compiled: CompiledTokenScript = { + views: typeof exported.views === "object" && exported.views ? exported.views : {}, + hooks: typeof exported.hooks === "object" && exported.hooks ? exported.hooks : {}, + methods: typeof exported.methods === "object" && exported.methods ? exported.methods : {}, + module, + sandbox, + context, + } + + if (TOKEN_SCRIPT_COMPILED_CACHE_MAX > 0) { + compiledCache.set(scriptCode, compiled) + while (compiledCache.size > TOKEN_SCRIPT_COMPILED_CACHE_MAX) { + const oldestKey = compiledCache.keys().next().value + if (!oldestKey) break + compiledCache.delete(oldestKey) + } + } + return compiled +} + +function hookNameForOperation(operation: string, phase: "before" | "after"): string | null { + const op = String(operation ?? "").toLowerCase() + if (op === "transfer") return phase === "before" ? "beforeTransfer" : "afterTransfer" + if (op === "mint") return phase === "before" ? "beforeMint" : "afterMint" + if (op === "burn") return phase === "before" ? "beforeBurn" : "afterBurn" + if (op === "approve") return "onApprove" + return null +} + +export const scriptExecutor: ScriptExecutor = { + async executeView(req) { + const started = Date.now() + try { + const compiled = compileScript(req.scriptCode) + const fn = compiled.views?.[req.method] + if (typeof fn !== "function") { + return { + success: false, + error: `Unknown view method: ${req.method}`, + errorType: "unknown_method", + executionTimeMs: Date.now() - started, + gasUsed: 0, + } + } + + const out = runExportedFunctionInVm({ + compiled, + namespace: "views", + name: req.method, + args: [req.tokenData, ...(Array.isArray(req.args) ? req.args : [])], + timeoutMs: TOKEN_SCRIPT_VIEW_TIMEOUT_MS, + filename: `token-view:${req.method}`, + }) + const value = isThenable(out) + ? await awaitWithTimeout(out, TOKEN_SCRIPT_ASYNC_TIMEOUT_MS, `token view ${req.method}`) + : out + return { + success: true, + value, + executionTimeMs: Date.now() - started, + gasUsed: 0, + } + } catch (error: any) { + const msg = error?.message ?? String(error) + return { + success: false, + error: msg, + errorType: msg.includes("Script execution timed out") || msg.toLowerCase().includes("timed out") + ? "timeout" + : "execution_error", + executionTimeMs: Date.now() - started, + gasUsed: 0, + } + } + }, + async executeMethod(req) { + try { + // For now: allow custom method execution for scripted tokens using `methods`. + // This is intentionally minimal; advanced gas/metering can be added later. + const compiled = compileScript(req.scriptCode ?? "") + const fn = compiled.methods?.[req.method] + if (typeof fn !== "function") { + return { success: false, error: `Unknown method: ${req.method}`, errorType: "unknown_method" } + } + const out = runExportedFunctionInVm({ + compiled, + namespace: "methods", + name: req.method, + args: [req.tokenData, ...(Array.isArray(req.args) ? req.args : [])], + timeoutMs: TOKEN_SCRIPT_METHOD_TIMEOUT_MS, + filename: `token-method:${req.method}`, + }) + const returnValue = isThenable(out) + ? await awaitWithTimeout(out, TOKEN_SCRIPT_ASYNC_TIMEOUT_MS, `token method ${req.method}`) + : out + return { success: true, returnValue, mutations: [] } + } catch (error: any) { + const msg = error?.message ?? String(error) + return { + success: false, + error: msg, + errorType: msg.includes("Script execution timed out") || msg.toLowerCase().includes("timed out") + ? "timeout" + : "execution_error", + } + } + }, + async executeWithHooks(req) { + const compiled = compileScript(req.scriptCode) + + const beforeName = hookNameForOperation(req.operation, "before") + const afterName = hookNameForOperation(req.operation, "after") + + let tokenData = req.tokenData + let mutations: TokenMutation[] = [...(req.nativeOperationMutations ?? [])] + let beforeHookExecuted = false + let afterHookExecuted = false + + const runHook = async (name: string) => { + const hook = compiled.hooks?.[name] + if (typeof hook !== "function") return null + const ctx = { + operation: req.operation, + operationData: req.operationData, + tokenAddress: req.tokenAddress, + token: tokenData, + txContext: req.txContext, + mutations, + } + const out = runExportedFunctionInVm({ + compiled, + namespace: "hooks", + name, + args: [ctx], + timeoutMs: TOKEN_SCRIPT_HOOK_TIMEOUT_MS, + filename: `token-hook:${name}`, + }) + const value = isThenable(out) + ? await awaitWithTimeout(out, TOKEN_SCRIPT_ASYNC_TIMEOUT_MS, `token hook ${name}`) + : out + return value ?? null + } + + try { + if (beforeName) { + let beforeOut: any + try { + beforeOut = await runHook(beforeName) + } catch (error: any) { + const msg = error?.message ?? String(error) + return { + finalState: tokenData, + mutations: [], + rejection: { hookType: beforeName, reason: msg }, + metadata: { beforeHookExecuted, afterHookExecuted }, + } + } + if (beforeOut) { + beforeHookExecuted = true + if (beforeOut.reject) { + return { + finalState: tokenData, + mutations: [], + rejection: { hookType: beforeName, reason: String(beforeOut.reject) }, + metadata: { beforeHookExecuted, afterHookExecuted }, + } + } + if (Array.isArray(beforeOut.mutations)) mutations = beforeOut.mutations + if (beforeOut.setStorage !== undefined) tokenData = { ...tokenData, storage: beforeOut.setStorage } + } + } + + const applied = applyMutations(tokenData, mutations) + tokenData = applied.newState + + if (afterName) { + let afterOut: any + try { + afterOut = await runHook(afterName) + } catch (error: any) { + const msg = error?.message ?? String(error) + return { + finalState: tokenData, + mutations, + rejection: { hookType: afterName, reason: msg }, + metadata: { beforeHookExecuted, afterHookExecuted }, + } + } + if (afterOut) { + afterHookExecuted = true + if (afterOut.reject) { + return { + finalState: tokenData, + mutations, + rejection: { hookType: afterName, reason: String(afterOut.reject) }, + metadata: { beforeHookExecuted, afterHookExecuted }, + } + } + if (Array.isArray(afterOut.mutations)) { + const appliedAfter = applyMutations(tokenData, afterOut.mutations) + tokenData = appliedAfter.newState + mutations = [...mutations, ...afterOut.mutations] + } + if (afterOut.setStorage !== undefined) tokenData = { ...tokenData, storage: afterOut.setStorage } + } + } + + return { + finalState: tokenData, + mutations, + rejection: null, + metadata: { beforeHookExecuted, afterHookExecuted }, + } + } catch (error: any) { + return { + finalState: req.tokenData, + mutations: [], + rejection: { hookType: "engine", reason: error?.message ?? String(error) }, + metadata: { beforeHookExecuted, afterHookExecuted }, + } + } + }, +} + +export class HookExecutor { + constructor(private readonly executor: ScriptExecutor) {} + + async executeWithHooks(req: ExecuteWithHooksRequest): Promise { + return await this.executor.executeWithHooks(req) + } +} diff --git a/src/model/datasource.ts b/src/model/datasource.ts index fef06f2dc..24bf25232 100644 --- a/src/model/datasource.ts +++ b/src/model/datasource.ts @@ -21,6 +21,7 @@ import { GlobalChangeRegistry } from "./entities/GCR/GlobalChangeRegistry.js" import { GCRHashes } from "./entities/GCRv2/GCRHashes.js" import { GCRSubnetsTxs } from "./entities/GCRv2/GCRSubnetsTxs.js" import { GCRMain } from "./entities/GCRv2/GCR_Main.js" +import { GCRToken } from "./entities/GCRv2/GCR_Token.js" import { GCRTLSNotary } from "./entities/GCRv2/GCR_TLSNotary.js" import { GCRTracker } from "./entities/GCR/GCRTracker.js" // ZK Identity entities @@ -34,6 +35,12 @@ import { L2PSMempoolTx } from "./entities/L2PSMempool.js" import { L2PSTransaction } from "./entities/L2PSTransactions.js" import { L2PSProof } from "./entities/L2PSProofs.js" +const DEFAULT_TYPEORM_SYNCHRONIZE = process.env.NODE_ENV !== "production" +const TYPEORM_SYNCHRONIZE = + typeof process.env.TYPEORM_SYNCHRONIZE === "string" + ? process.env.TYPEORM_SYNCHRONIZE.toLowerCase() === "true" + : DEFAULT_TYPEORM_SYNCHRONIZE + export const dataSource = new DataSource({ type: "postgres", host: process.env.PG_HOST || "localhost", @@ -54,6 +61,7 @@ export const dataSource = new DataSource({ GlobalChangeRegistry, GCRTracker, GCRMain, + GCRToken, GCRTLSNotary, // ZK Identity entities IdentityCommitment, @@ -66,7 +74,7 @@ export const dataSource = new DataSource({ L2PSTransaction, L2PSProof, ], - synchronize: true, + synchronize: TYPEORM_SYNCHRONIZE, logging: false, }) diff --git a/src/model/entities/GCRv2/GCR_Main.ts b/src/model/entities/GCRv2/GCR_Main.ts index e08c41a8d..8a2de0e69 100644 --- a/src/model/entities/GCRv2/GCR_Main.ts +++ b/src/model/entities/GCRv2/GCR_Main.ts @@ -7,8 +7,17 @@ import { PrimaryColumn, } from "typeorm" import type { StoredIdentities } from "../types/IdentityTypes" +import type { TokenHolderReference } from "@/libs/blockchain/gcr/types/Token" // Define the shape of your JSON data +export interface GCRMainExtended { + tokens: TokenHolderReference[] + nfts: any[] + xm: any[] + web2: any[] + other: any[] +} + @Entity("gcr_main") @Index("idx_gcr_main_pubkey", ["pubkey"]) export class GCRMain { @@ -22,6 +31,8 @@ export class GCRMain { balance: bigint @Column({ type: "jsonb", name: "identities" }) identities: StoredIdentities + @Column({ type: "jsonb", name: "extended", default: () => "'{}'" }) + extended: GCRMainExtended @Column({ type: "jsonb", name: "points", default: () => "'{}'" }) points: { totalPoints: number diff --git a/src/model/entities/GCRv2/GCR_Token.ts b/src/model/entities/GCRv2/GCR_Token.ts new file mode 100644 index 000000000..e8898c00c --- /dev/null +++ b/src/model/entities/GCRv2/GCR_Token.ts @@ -0,0 +1,149 @@ +// REVIEW: GCR_Token entity for storing token data +import { + Column, + CreateDateColumn, + UpdateDateColumn, + Entity, + Index, + PrimaryColumn, +} from "typeorm" +import type { + TokenMetadata, + TokenState, + TokenAccessControl, + TokenScript, +} from "@/libs/blockchain/gcr/types/Token" + +/** + * GCR_Token stores fungible token data. + * Each token has its own GCR entry with metadata, state, and ACL. + * + * Storage Model: + * - Token data is stored in this table (primary source of truth) + * - Holder pointers are stored in GCRExtended.tokens (lightweight references) + */ +@Entity("gcr_tokens") +@Index("idx_gcr_tokens_deployer", ["deployer"]) +@Index("idx_gcr_tokens_ticker", ["ticker"]) +export class GCRToken { + // Token address (derived: sha256(deployer + nonce + hash(tokenObject))) + @PrimaryColumn({ type: "text", name: "address" }) + address: string + + // Token metadata (immutable after creation) + @Column({ type: "text", name: "name" }) + name: string + + @Column({ type: "text", name: "ticker" }) + ticker: string + + @Column({ type: "integer", name: "decimals" }) + decimals: number + + @Column({ type: "text", name: "deployer" }) + deployer: string + + @Column({ type: "integer", name: "deployerNonce" }) + deployerNonce: number + + @Column({ type: "bigint", name: "deployedAt" }) + deployedAt: number + + @Column({ type: "boolean", name: "hasScript", default: false }) + hasScript: boolean + + // Token state (mutable) + @Column({ type: "text", name: "totalSupply" }) + totalSupply: string + + @Column({ type: "jsonb", name: "balances", default: () => "'{}'" }) + balances: Record // address -> balance + + @Column({ type: "jsonb", name: "allowances", default: () => "'{}'" }) + allowances: Record> // owner -> spender -> amount + + @Column({ type: "jsonb", name: "customState", default: () => "'{}'" }) + customState: Record + + // Access control + @Column({ type: "text", name: "owner" }) + owner: string + + @Column({ type: "boolean", name: "paused", default: false }) + paused: boolean + + @Column({ type: "jsonb", name: "aclEntries", default: () => "'[]'" }) + aclEntries: Array<{ + address: string + permissions: string[] + grantedAt: number + grantedBy: string + }> + + // Optional script (stored as JSONB for flexibility) + @Column({ type: "jsonb", name: "script", nullable: true }) + script?: TokenScript + + + // Script version tracking + // REVIEW: Phase 4.1 - Script upgrade mechanism version tracking + @Column({ type: "integer", name: "scriptVersion", default: 0 }) + scriptVersion: number + + @Column({ type: "bigint", name: "lastScriptUpdate", nullable: true }) + lastScriptUpdate: number | null + + // Tracking + @Column({ type: "text", name: "deployTxHash" }) + deployTxHash: string + + @CreateDateColumn({ type: "timestamp", name: "createdAt" }) + createdAt: Date + + @UpdateDateColumn({ type: "timestamp", name: "updatedAt" }) + updatedAt: Date + + /** + * Converts entity to TokenMetadata format + */ + toMetadata(): TokenMetadata { + return { + name: this.name, + ticker: this.ticker, + decimals: this.decimals, + address: this.address, + deployer: this.deployer, + deployerNonce: this.deployerNonce, + deployedAt: this.deployedAt, + hasScript: this.hasScript, + } + } + + /** + * Converts entity to TokenState format + */ + toState(): TokenState { + return { + totalSupply: this.totalSupply, + balances: this.balances, + allowances: this.allowances, + customState: this.customState, + } + } + + /** + * Converts entity to TokenAccessControl format + */ + toAccessControl(): TokenAccessControl { + return { + owner: this.owner, + paused: this.paused, + entries: this.aclEntries.map((e) => ({ + address: e.address, + permissions: e.permissions as any, + grantedAt: e.grantedAt, + grantedBy: e.grantedBy, + })), + } + } +} diff --git a/src/types/ffjavascript.d.ts b/src/types/ffjavascript.d.ts new file mode 100644 index 000000000..9a167443e --- /dev/null +++ b/src/types/ffjavascript.d.ts @@ -0,0 +1,2 @@ +declare module "ffjavascript" + diff --git a/src/types/token-augmentations.d.ts b/src/types/token-augmentations.d.ts new file mode 100644 index 000000000..f5ab5d8cd --- /dev/null +++ b/src/types/token-augmentations.d.ts @@ -0,0 +1,368 @@ +/** + * Token GCREdit Type Augmentations + * + * REVIEW: Phase 1.4 - Token GCREdit Types (node-sut5) + * + * Extends the SDK's GCREdit types with token-specific operations: + * - createToken: Create a new token (stores token data in GCR) + * - transferToken: Transfer tokens between addresses + * - mintToken: Mint new tokens (if authorized) + * - burnToken: Burn tokens (if authorized) + * - updateTokenACL: Modify token access control list + * - pauseToken: Pause token operations + * - unpauseToken: Resume token operations + * - upgradeTokenScript: Update token script code + * + * Note: Token types are defined locally until published in the SDK. + * Once SDK 2.12.0+ is available with token types, these can be replaced + * with re-exports from @kynesyslabs/demosdk/types. + */ + +// SECTION: Token Permission Types (local definitions pending SDK export) + +/** + * Permission flags for token access control + */ +export type TokenPermission = + | "canMint" + | "canBurn" + | "canUpgrade" + | "canPause" + | "canTransferOwnership" + | "canModifyACL" + | "canExecuteScript" + +/** + * Hook types that can trigger script execution + */ +export type TokenHookType = + | "beforeTransfer" + | "afterTransfer" + | "beforeMint" + | "afterMint" + | "beforeBurn" + | "afterBurn" + | "onApprove" + +/** + * Script method definition + */ +export interface TokenScriptMethod { + name: string + params: Array<{ name: string; type: string }> + returns?: string + mutates: boolean +} + +/** + * State mutation returned by scripts + */ +export interface StateMutation { + type: "setBalance" | "addBalance" | "subBalance" | "setCustomState" | "setAllowance" + address?: string + spender?: string + value: string | number | Record + key?: string +} + +// SECTION: Token Metadata Types + +/** + * Immutable token metadata set at creation time + */ +export interface TokenMetadata { + name: string + ticker: string + decimals: number + address: string + deployer: string + deployerNonce: number + deployedAt: number + hasScript: boolean +} + +/** + * Token balances mapping: address -> balance + */ +export type TokenBalances = Record + +/** + * Token allowances mapping: owner -> spender -> amount + */ +export type TokenAllowances = Record> + +/** + * Custom state for scripted tokens + */ +export type TokenCustomState = Record + +/** + * Complete token state + */ +export interface TokenState { + totalSupply: string + balances: TokenBalances + allowances: TokenAllowances + customState: TokenCustomState +} + +/** + * Token script definition + */ +export interface TokenScript { + version: number + code: string + methods: TokenScriptMethod[] + hooks: TokenHookType[] + codeHash: string + upgradedAt: number +} + +/** + * Access Control List entry + */ +export interface TokenACLEntry { + address: string + permissions: TokenPermission[] + grantedAt: number + grantedBy: string +} + +/** + * Token Access Control structure + */ +export interface TokenAccessControl { + owner: string + paused: boolean + entries: TokenACLEntry[] +} + +// SECTION: Token GCREdit Operation Types + +/** + * Token operation types for GCREdit + */ +export type TokenGCROperation = + | "createToken" + | "transferToken" + | "mintToken" + | "burnToken" + | "updateTokenACL" + | "pauseToken" + | "unpauseToken" + | "upgradeTokenScript" + | "approveToken" + | "transferFromToken" + | "executeScript" + +// SECTION: Token Operation Data Structures + +/** + * Data for createToken operation + */ +export interface TokenCreateData { + /** Token metadata (name, ticker, decimals, etc.) */ + metadata: TokenMetadata + /** Initial token state (supply, balances) */ + initialState: TokenState + /** Initial access control configuration */ + accessControl: TokenAccessControl + /** Optional script for advanced tokens */ + script?: TokenScript +} + +/** + * Data for transferToken operation + */ +export interface TokenTransferData { + /** Token address */ + tokenAddress: string + /** Sender address */ + from: string + /** Recipient address */ + to: string + /** Amount to transfer (string for bigint serialization) */ + amount: string + /** Script mutations if hooks were triggered */ + mutations?: StateMutation[] +} + +/** + * Data for mintToken operation + */ +export interface TokenMintData { + /** Token address */ + tokenAddress: string + /** Recipient address */ + to: string + /** Amount to mint (string for bigint serialization) */ + amount: string + /** Script mutations if hooks were triggered */ + mutations?: StateMutation[] +} + +/** + * Data for burnToken operation + */ +export interface TokenBurnData { + /** Token address */ + tokenAddress: string + /** Address to burn from */ + from: string + /** Amount to burn (string for bigint serialization) */ + amount: string + /** Script mutations if hooks were triggered */ + mutations?: StateMutation[] +} + +/** + * Data for updateTokenACL operation + */ +export interface TokenACLUpdateData { + /** Token address */ + tokenAddress: string + /** Action to perform */ + action: "grant" | "revoke" + /** Target address for ACL change */ + targetAddress: string + /** Permissions to grant/revoke */ + permissions: string[] + /** Who granted/revoked (for audit trail) */ + grantedBy: string + /** Timestamp of the change */ + timestamp: number +} + +/** + * Data for pauseToken / unpauseToken operations + */ +export interface TokenPauseData { + /** Token address */ + tokenAddress: string + /** Address that triggered the pause/unpause */ + triggeredBy: string + /** Timestamp of the action */ + timestamp: number +} + +/** + * Data for upgradeTokenScript operation + */ +export interface TokenScriptUpgradeData { + /** Token address */ + tokenAddress: string + /** New script code */ + newCode: string + /** New script version */ + newVersion: number + /** New method definitions */ + newMethods: TokenScriptMethod[] + /** New hooks */ + newHooks: TokenHookType[] + /** Hash of the new code for verification */ + newCodeHash: string + /** Address that performed the upgrade */ + upgradedBy: string + /** Timestamp of the upgrade */ + timestamp: number +} + +/** + * Result returned from script upgrade operation + * REVIEW: Phase 4.1 - Script upgrade result + */ +export interface TokenUpgradeResult { + /** Whether upgrade was successful */ + success: boolean + /** New version number after upgrade */ + newVersion: number + /** Previous version number before upgrade */ + previousVersion: number + /** Timestamp when upgrade occurred */ + upgradedAt: number + /** Hash of the new script code */ + newCodeHash: string +} + +/** + * Data for approveToken operation (ERC20-like allowance) + */ +export interface TokenApproveData { + /** Token address */ + tokenAddress: string + /** Owner address (who is approving) */ + owner: string + /** Spender address (who can spend) */ + spender: string + /** Approved amount (string for bigint serialization) */ + amount: string +} + +/** + * Data for transferFromToken operation (ERC20-like transferFrom) + */ +export interface TokenTransferFromData { + /** Token address */ + tokenAddress: string + /** Spender address (who is executing the transfer) */ + spender: string + /** From address (owner of the tokens) */ + from: string + /** To address (recipient) */ + to: string + /** Amount to transfer (string for bigint serialization) */ + amount: string + /** Script mutations if hooks were triggered */ + mutations?: StateMutation[] +} + +/** + * Data for executeScript operation (custom script methods) + */ +export interface TokenScriptExecuteData { + /** Token address */ + tokenAddress: string + /** Method name to execute */ + method: string + /** Method arguments */ + args: unknown[] + /** Caller address */ + caller: string + /** Resulting state mutations */ + mutations: StateMutation[] + /** Return value from script (if any) */ + returnValue?: unknown + /** Execution complexity for fee calculation */ + complexity: number +} + +// SECTION: GCREdit Token Interface + +/** + * GCREdit for token operations + * This follows the same pattern as other GCREdit types (GCREditBalance, GCREditTLSNotary, etc.) + */ +export interface GCREditToken { + type: "token" + operation: TokenGCROperation + /** Account that initiated the operation (transaction sender) */ + account: string + /** Token address (for all operations except createToken, where it's the new address) */ + tokenAddress: string + /** Operation-specific data */ + data: + | TokenCreateData + | TokenTransferData + | TokenMintData + | TokenBurnData + | TokenACLUpdateData + | TokenPauseData + | TokenScriptUpgradeData + | TokenApproveData + | TokenTransferFromData + | TokenScriptExecuteData + /** Transaction hash */ + txhash: string + /** Whether this is a rollback operation */ + isRollback: boolean +} diff --git a/src/utilities/sharedState.ts b/src/utilities/sharedState.ts index cc7f041a3..6e2e7ae09 100644 --- a/src/utilities/sharedState.ts +++ b/src/utilities/sharedState.ts @@ -74,6 +74,31 @@ export default class SharedState { inCleanMempool = false // REVIEW Mempool caching + // GCR / state application + // When true, committed-only read APIs should return 409 to avoid serving transient partial state. + private _inGcrApply = false + /** + * Timestamp (ms since epoch) marking when `inGcrApply` flipped from false -> true. + * Used as a watchdog signal to prevent committed-read APIs from being stuck forever + * if the apply phase wedges. + */ + inGcrApplySinceMs = 0 + + get inGcrApply(): boolean { + return this._inGcrApply + } + + set inGcrApply(value: boolean) { + const next = !!value + if (next && !this._inGcrApply) { + this.inGcrApplySinceMs = Date.now() + } + if (!next) { + this.inGcrApplySinceMs = 0 + } + this._inGcrApply = next + } + // DTR (Distributed Transaction Routing) - ValidityData cache for retry mechanism // Stores ValidityData for transactions that need to be relayed to validators validityDataCache = new Map() // txHash -> ValidityData diff --git a/tsconfig.check.json b/tsconfig.check.json new file mode 100644 index 000000000..2cd2c7853 --- /dev/null +++ b/tsconfig.check.json @@ -0,0 +1,15 @@ +{ + "extends": "./tsconfig.json", + "include": ["src/**/*.ts", "src/**/*.tsx"], + "exclude": [ + "src/**/tests/**", + "src/**/__tests__/**", + "src/**/*test*.ts", + "src/**/*_test*.ts", + "src/**/*Test*.ts", + "src/**/*spec*.ts", + "src/**/*.bench.ts", + "src/**/old/**" + ] +} +