{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "scanner-7132cae72207ea77", "name": "Stray `console.log` in TS/JS \u2014 packages/server/src/index.ts:117", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/server/src/index.ts:117"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-181db1b30ffebfed", "name": "Stray `console.log` in TS/JS \u2014 packages/server/src/services/venue-verify.ts:109", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/server/src/services/venue-verify.ts:109"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-adbb4ea5aa127bc3", "name": "Stray `console.log` in TS/JS \u2014 packages/server/src/services/token-sync.ts:195", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/server/src/services/token-sync.ts:195"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d63da3583b14afc0", "name": "Dockerfile runs as root: Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-25de52372c63f233", "name": "Docker base image is tag-pinned but not digest-pinned: node:24-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:24-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b57484f89b59aea8", "name": "Insecure pattern 'direct_innerhtml_assignment' in packages/dashboard/src/modules/ReceiptScene.tsx:84", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in packages/dashboard/src/modules/ReceiptScene.tsx:84"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "0 test file(s) for 77 source file(s) (ratio 0.00). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-75a184eec78d87bc", "name": "Node manifest has dependencies but no lockfile: packages/dashboard/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/dashboard/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b739f2f2be1d714d", "name": "Node manifest has dependencies but no lockfile: packages/server/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/server/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-28e92806c0db3cd2", "name": "Node manifest has dependencies but no lockfile: packages/core/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/core/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 9 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, tests, lockfile. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bd9569b9a19ca640", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/server/src/aggregations/recent-transactions.ts:90", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/server/src/aggregations/recent-transactions.ts:90"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c74c69b45af974a1", "name": "Commented-code block (7 lines) in packages/server/src/aggregations/volume-history.ts:121", "shortDescription": {"text": "Commented-code block (7 lines) in packages/server/src/aggregations/volume-history.ts:121"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e1f26988fd3ea484", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/server/src/cache/db.ts:61", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/server/src/cache/db.ts:61"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-09a8da0797d4fd8a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/server/src/services/token-sync.ts:166", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/server/src/services/token-sync.ts:166"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-250f57e8a1dbd3c5", "name": "4 env vars used in code but missing from .env.example", "shortDescription": {"text": "4 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `NODE_ENV`, `PORT`, `STARKNET_RPC_URL`, `VITE_STRK20_API_URL`. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3abf952b8d28d710", "name": "Unused endpoint: USE /*", "shortDescription": {"text": "Unused endpoint: USE /*"}, "fullDescription": {"text": "`packages/server/src/index.ts` declares `USE /*` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fa413208496243a5", "name": "Unused endpoint: POST /sync", "shortDescription": {"text": "Unused endpoint: POST /sync"}, "fullDescription": {"text": "`packages/server/src/index.ts` declares `POST /sync` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-42c5c33f7eb34ebf", "name": "Unused endpoint: GET /agg/anonymity-set", "shortDescription": {"text": "Unused endpoint: GET /agg/anonymity-set"}, "fullDescription": {"text": "`packages/server/src/index.ts` declares `GET /agg/anonymity-set` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3f7b1807cd383cf0", "name": "Unused endpoint: GET /agg/private-ops", "shortDescription": {"text": "Unused endpoint: GET /agg/private-ops"}, "fullDescription": {"text": "`packages/server/src/index.ts` declares `GET /agg/private-ops` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-74e78efe375698b8", "name": "Unused endpoint: GET /agg/window-ops", "shortDescription": {"text": "Unused endpoint: GET /agg/window-ops"}, "fullDescription": {"text": "`packages/server/src/index.ts` declares `GET /agg/window-ops` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-13ff1d70836a8f12", "name": "Unused endpoint: GET /agg/active-depositors", "shortDescription": {"text": "Unused endpoint: GET /agg/active-depositors"}, "fullDescription": {"text": "`packages/server/src/index.ts` declares `GET /agg/active-depositors` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-36706556634297a5", "name": "Unused endpoint: GET /agg/distinct-depositors", "shortDescription": {"text": "Unused endpoint: GET /agg/distinct-depositors"}, "fullDescription": {"text": "`packages/server/src/index.ts` declares `GET /agg/distinct-depositors` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f0fb973bb055cde4", "name": "Unused endpoint: GET /agg/note-ages", "shortDescription": {"text": "Unused endpoint: GET /agg/note-ages"}, "fullDescription": {"text": "`packages/server/src/index.ts` declares `GET /agg/note-ages` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-de0aaae4ab8df4d7", "name": "Unused endpoint: GET /agg/tvl", "shortDescription": {"text": "Unused endpoint: GET /agg/tvl"}, "fullDescription": {"text": "`packages/server/src/index.ts` declares `GET /agg/tvl` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c43c5d1a9f2ed04f", "name": "Unused endpoint: GET /agg/pool-summary", "shortDescription": {"text": "Unused endpoint: GET /agg/pool-summary"}, "fullDescription": {"text": "`packages/server/src/index.ts` declares `GET /agg/pool-summary` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f73061b20ba31565", "name": "Unused endpoint: GET /agg/active-protocols", "shortDescription": {"text": "Unused endpoint: GET /agg/active-protocols"}, "fullDescription": {"text": "`packages/server/src/index.ts` declares `GET /agg/active-protocols` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-62930e10052d98f3", "name": "Unused endpoint: GET /agg/lifetime-volume", "shortDescription": {"text": "Unused endpoint: GET /agg/lifetime-volume"}, "fullDescription": {"text": "`packages/server/src/index.ts` declares `GET /agg/lifetime-volume` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d44c0375e9c7afde", "name": "Unused endpoint: GET /agg/lifetime-revenue", "shortDescription": {"text": "Unused endpoint: GET /agg/lifetime-revenue"}, "fullDescription": {"text": "`packages/server/src/index.ts` declares `GET /agg/lifetime-revenue` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2d430709f29fa92e", "name": "Unused endpoint: GET /agg/lifetime-conversions", "shortDescription": {"text": "Unused endpoint: GET /agg/lifetime-conversions"}, "fullDescription": {"text": "`packages/server/src/index.ts` declares `GET /agg/lifetime-conversions` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-804cbdb4fcdd5418", "name": "Unused endpoint: GET /agg/tvl-history", "shortDescription": {"text": "Unused endpoint: GET /agg/tvl-history"}, "fullDescription": {"text": "`packages/server/src/index.ts` declares `GET /agg/tvl-history` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-18a640adf66b317b", "name": "Unused endpoint: GET /agg/shielded-balance", "shortDescription": {"text": "Unused endpoint: GET /agg/shielded-balance"}, "fullDescription": {"text": "`packages/server/src/index.ts` declares `GET /agg/shielded-balance` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-41522175021a5441", "name": "Unused endpoint: GET /agg/routed-volume", "shortDescription": {"text": "Unused endpoint: GET /agg/routed-volume"}, "fullDescription": {"text": "`packages/server/src/index.ts` declares `GET /agg/routed-volume` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-259ae7be2b803a5b", "name": "Unused endpoint: GET /agg/swap-by-token", "shortDescription": {"text": "Unused endpoint: GET /agg/swap-by-token"}, "fullDescription": {"text": "`packages/server/src/index.ts` declares `GET /agg/swap-by-token` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fd02266d9202a176", "name": "Unused endpoint: GET /agg/actions-by-protocol", "shortDescription": {"text": "Unused endpoint: GET /agg/actions-by-protocol"}, "fullDescription": {"text": "`packages/server/src/index.ts` declares `GET /agg/actions-by-protocol` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8d45c98b05f25c80", "name": "Unused endpoint: GET /agg/transactions", "shortDescription": {"text": "Unused endpoint: GET /agg/transactions"}, "fullDescription": {"text": "`packages/server/src/index.ts` declares `GET /agg/transactions` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a2f0ed10cfd71321", "name": "Unused endpoint: GET /agg/volume-history", "shortDescription": {"text": "Unused endpoint: GET /agg/volume-history"}, "fullDescription": {"text": "`packages/server/src/index.ts` declares `GET /agg/volume-history` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dfd17899ac4b17bf", "name": "Unused endpoint: GET /agg/relayer-concentration", "shortDescription": {"text": "Unused endpoint: GET /agg/relayer-concentration"}, "fullDescription": {"text": "`packages/server/src/index.ts` declares `GET /agg/relayer-concentration` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-97044474427c971f", "name": "Unused endpoint: GET /agg/contract-uptime", "shortDescription": {"text": "Unused endpoint: GET /agg/contract-uptime"}, "fullDescription": {"text": "`packages/server/src/index.ts` declares `GET /agg/contract-uptime` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-53022e40588264e6", "name": "Unused endpoint: GET /agg/uptime-history", "shortDescription": {"text": "Unused endpoint: GET /agg/uptime-history"}, "fullDescription": {"text": "`packages/server/src/index.ts` declares `GET /agg/uptime-history` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-83c9e2e7a4c1d1ba", "name": "Unused endpoint: GET /agg/recent-transactions", "shortDescription": {"text": "Unused endpoint: GET /agg/recent-transactions"}, "fullDescription": {"text": "`packages/server/src/index.ts` declares `GET /agg/recent-transactions` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4401e58d0d4d71cc", "name": "Unused endpoint: GET /agg/flows-graph", "shortDescription": {"text": "Unused endpoint: GET /agg/flows-graph"}, "fullDescription": {"text": "`packages/server/src/index.ts` declares `GET /agg/flows-graph` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a098fe9b30cfe85e", "name": "Unused endpoint: GET /agg/top-callers", "shortDescription": {"text": "Unused endpoint: GET /agg/top-callers"}, "fullDescription": {"text": "`packages/server/src/index.ts` declares `GET /agg/top-callers` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bf667fb860144bbb", "name": "Unused endpoint: GET /events/selectors", "shortDescription": {"text": "Unused endpoint: GET /events/selectors"}, "fullDescription": {"text": "`packages/server/src/index.ts` declares `GET /events/selectors` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6eeec410852fde2a", "name": "Unused endpoint: GET /events/breakdown", "shortDescription": {"text": "Unused endpoint: GET /events/breakdown"}, "fullDescription": {"text": "`packages/server/src/index.ts` declares `GET /events/breakdown` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-50a0599901145756", "name": "Unused endpoint: GET /events/count", "shortDescription": {"text": "Unused endpoint: GET /events/count"}, "fullDescription": {"text": "`packages/server/src/index.ts` declares `GET /events/count` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ff3dc58b9e07535a", "name": "Unused endpoint: GET /events/sample", "shortDescription": {"text": "Unused endpoint: GET /events/sample"}, "fullDescription": {"text": "`packages/server/src/index.ts` declares `GET /events/sample` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/20236"}, "properties": {"repository": "starkience/strk20-dashboard", "repoUrl": "https://github.com/starkience/strk20-dashboard", "branch": "main"}, "results": [{"ruleId": "scanner-7132cae72207ea77", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/server/src/index.ts:117"}, "properties": {"repobilityId": "ac04c2b36447664c", "scanner": "scanner-primary", "fingerprint": "7132cae72207ea77", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-181db1b30ffebfed", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/server/src/services/venue-verify.ts:109"}, "properties": {"repobilityId": "1b8ecffa18e72fa6", "scanner": "scanner-primary", "fingerprint": "181db1b30ffebfed", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-adbb4ea5aa127bc3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/server/src/services/token-sync.ts:195"}, "properties": {"repobilityId": "5e728abd906e849a", "scanner": "scanner-primary", "fingerprint": "adbb4ea5aa127bc3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d63da3583b14afc0", "level": "warning", "message": {"text": "Dockerfile runs as root: Dockerfile"}, "properties": {"repobilityId": "a2ed1bd120e507db", "scanner": "scanner-primary", "fingerprint": "d63da3583b14afc0", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-25de52372c63f233", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:24-slim"}, "properties": {"repobilityId": "84f94353098f1c35", "scanner": "scanner-primary", "fingerprint": "25de52372c63f233", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-b57484f89b59aea8", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in packages/dashboard/src/modules/ReceiptScene.tsx:84"}, "properties": {"repobilityId": "625eb165ac11f1d0", "scanner": "scanner-primary", "fingerprint": "b57484f89b59aea8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/dashboard/src/modules/ReceiptScene.tsx"}, "region": {"startLine": 84}}}]}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "8b80daa3392c8fa8", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-75a184eec78d87bc", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/dashboard/package.json"}, "properties": {"repobilityId": "e5e0b9143dfb0e79", "scanner": "scanner-primary", "fingerprint": "75a184eec78d87bc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/dashboard/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b739f2f2be1d714d", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/server/package.json"}, "properties": {"repobilityId": "d7cb4fafc3b292b2", "scanner": "scanner-primary", "fingerprint": "b739f2f2be1d714d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/server/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-28e92806c0db3cd2", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/core/package.json"}, "properties": {"repobilityId": "8640e46be7e3f9b2", "scanner": "scanner-primary", "fingerprint": "28e92806c0db3cd2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/core/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "d68f7734c7e137ee", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "1af07ad33771c9aa", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "bd3d747f660f4c77", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "b1110e26a58c72db", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-bd9569b9a19ca640", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/server/src/aggregations/recent-transactions.ts:90"}, "properties": {"repobilityId": "00e168f13beb7333", "scanner": "scanner-primary", "fingerprint": "bd9569b9a19ca640", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c74c69b45af974a1", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/server/src/aggregations/volume-history.ts:121"}, "properties": {"repobilityId": "791b367d6a2bd0cc", "scanner": "scanner-primary", "fingerprint": "c74c69b45af974a1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e1f26988fd3ea484", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/server/src/cache/db.ts:61"}, "properties": {"repobilityId": "72bbabab360006d6", "scanner": "scanner-primary", "fingerprint": "e1f26988fd3ea484", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-09a8da0797d4fd8a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/server/src/services/token-sync.ts:166"}, "properties": {"repobilityId": "afa75d0e7db7246d", "scanner": "scanner-primary", "fingerprint": "09a8da0797d4fd8a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-250f57e8a1dbd3c5", "level": "none", "message": {"text": "4 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "57584f22b735b5ee", "scanner": "scanner-primary", "fingerprint": "250f57e8a1dbd3c5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-3abf952b8d28d710", "level": "note", "message": {"text": "Unused endpoint: USE /*"}, "properties": {"repobilityId": "01af219e832acd01", "scanner": "scanner-primary", "fingerprint": "3abf952b8d28d710", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fa413208496243a5", "level": "note", "message": {"text": "Unused endpoint: POST /sync"}, "properties": {"repobilityId": "ca9c9071becb9c9f", "scanner": "scanner-primary", "fingerprint": "fa413208496243a5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-42c5c33f7eb34ebf", "level": "note", "message": {"text": "Unused endpoint: GET /agg/anonymity-set"}, "properties": {"repobilityId": "0bbf621e18229759", "scanner": "scanner-primary", "fingerprint": "42c5c33f7eb34ebf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3f7b1807cd383cf0", "level": "note", "message": {"text": "Unused endpoint: GET /agg/private-ops"}, "properties": {"repobilityId": "05e3408245876b9d", "scanner": "scanner-primary", "fingerprint": "3f7b1807cd383cf0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-74e78efe375698b8", "level": "note", "message": {"text": "Unused endpoint: GET /agg/window-ops"}, "properties": {"repobilityId": "12e1e77d39d63101", "scanner": "scanner-primary", "fingerprint": "74e78efe375698b8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-13ff1d70836a8f12", "level": "note", "message": {"text": "Unused endpoint: GET /agg/active-depositors"}, "properties": {"repobilityId": "bb3d54523a505166", "scanner": "scanner-primary", "fingerprint": "13ff1d70836a8f12", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-36706556634297a5", "level": "note", "message": {"text": "Unused endpoint: GET /agg/distinct-depositors"}, "properties": {"repobilityId": "5768ab2aacea4fc7", "scanner": "scanner-primary", "fingerprint": "36706556634297a5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f0fb973bb055cde4", "level": "note", "message": {"text": "Unused endpoint: GET /agg/note-ages"}, "properties": {"repobilityId": "7f7426238f2bc165", "scanner": "scanner-primary", "fingerprint": "f0fb973bb055cde4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-de0aaae4ab8df4d7", "level": "note", "message": {"text": "Unused endpoint: GET /agg/tvl"}, "properties": {"repobilityId": "b6bed5174aea1513", "scanner": "scanner-primary", "fingerprint": "de0aaae4ab8df4d7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c43c5d1a9f2ed04f", "level": "note", "message": {"text": "Unused endpoint: GET /agg/pool-summary"}, "properties": {"repobilityId": "358659875aada585", "scanner": "scanner-primary", "fingerprint": "c43c5d1a9f2ed04f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f73061b20ba31565", "level": "note", "message": {"text": "Unused endpoint: GET /agg/active-protocols"}, "properties": {"repobilityId": "96f56be5f87ebc48", "scanner": "scanner-primary", "fingerprint": "f73061b20ba31565", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-62930e10052d98f3", "level": "note", "message": {"text": "Unused endpoint: GET /agg/lifetime-volume"}, "properties": {"repobilityId": "4654c497bb62edde", "scanner": "scanner-primary", "fingerprint": "62930e10052d98f3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d44c0375e9c7afde", "level": "note", "message": {"text": "Unused endpoint: GET /agg/lifetime-revenue"}, "properties": {"repobilityId": "4e1c06659918f8af", "scanner": "scanner-primary", "fingerprint": "d44c0375e9c7afde", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2d430709f29fa92e", "level": "note", "message": {"text": "Unused endpoint: GET /agg/lifetime-conversions"}, "properties": {"repobilityId": "67e2362237f50dd4", "scanner": "scanner-primary", "fingerprint": "2d430709f29fa92e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-804cbdb4fcdd5418", "level": "note", "message": {"text": "Unused endpoint: GET /agg/tvl-history"}, "properties": {"repobilityId": "2c35ff87ee3047cd", "scanner": "scanner-primary", "fingerprint": "804cbdb4fcdd5418", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-18a640adf66b317b", "level": "note", "message": {"text": "Unused endpoint: GET /agg/shielded-balance"}, "properties": {"repobilityId": "9c937bad9b71ee17", "scanner": "scanner-primary", "fingerprint": "18a640adf66b317b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-41522175021a5441", "level": "note", "message": {"text": "Unused endpoint: GET /agg/routed-volume"}, "properties": {"repobilityId": "2f82df31fea61c17", "scanner": "scanner-primary", "fingerprint": "41522175021a5441", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-259ae7be2b803a5b", "level": "note", "message": {"text": "Unused endpoint: GET /agg/swap-by-token"}, "properties": {"repobilityId": "3c72212f43631def", "scanner": "scanner-primary", "fingerprint": "259ae7be2b803a5b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fd02266d9202a176", "level": "note", "message": {"text": "Unused endpoint: GET /agg/actions-by-protocol"}, "properties": {"repobilityId": "39cbe3b506ddc237", "scanner": "scanner-primary", "fingerprint": "fd02266d9202a176", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8d45c98b05f25c80", "level": "note", "message": {"text": "Unused endpoint: GET /agg/transactions"}, "properties": {"repobilityId": "b2eeef11dc5db800", "scanner": "scanner-primary", "fingerprint": "8d45c98b05f25c80", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a2f0ed10cfd71321", "level": "note", "message": {"text": "Unused endpoint: GET /agg/volume-history"}, "properties": {"repobilityId": "d2362a7fc645ada4", "scanner": "scanner-primary", "fingerprint": "a2f0ed10cfd71321", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dfd17899ac4b17bf", "level": "note", "message": {"text": "Unused endpoint: GET /agg/relayer-concentration"}, "properties": {"repobilityId": "92469b802ee19973", "scanner": "scanner-primary", "fingerprint": "dfd17899ac4b17bf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-97044474427c971f", "level": "note", "message": {"text": "Unused endpoint: GET /agg/contract-uptime"}, "properties": {"repobilityId": "701a7aff7703c81f", "scanner": "scanner-primary", "fingerprint": "97044474427c971f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-53022e40588264e6", "level": "note", "message": {"text": "Unused endpoint: GET /agg/uptime-history"}, "properties": {"repobilityId": "b4c2ecc640a29ce5", "scanner": "scanner-primary", "fingerprint": "53022e40588264e6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-83c9e2e7a4c1d1ba", "level": "note", "message": {"text": "Unused endpoint: GET /agg/recent-transactions"}, "properties": {"repobilityId": "0ee11d7bdea56359", "scanner": "scanner-primary", "fingerprint": "83c9e2e7a4c1d1ba", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4401e58d0d4d71cc", "level": "note", "message": {"text": "Unused endpoint: GET /agg/flows-graph"}, "properties": {"repobilityId": "4dab59d62d1c8811", "scanner": "scanner-primary", "fingerprint": "4401e58d0d4d71cc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a098fe9b30cfe85e", "level": "note", "message": {"text": "Unused endpoint: GET /agg/top-callers"}, "properties": {"repobilityId": "5978fea3616ef58b", "scanner": "scanner-primary", "fingerprint": "a098fe9b30cfe85e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bf667fb860144bbb", "level": "note", "message": {"text": "Unused endpoint: GET /events/selectors"}, "properties": {"repobilityId": "3cd00768562514cb", "scanner": "scanner-primary", "fingerprint": "bf667fb860144bbb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6eeec410852fde2a", "level": "note", "message": {"text": "Unused endpoint: GET /events/breakdown"}, "properties": {"repobilityId": "7521d172894f829a", "scanner": "scanner-primary", "fingerprint": "6eeec410852fde2a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-50a0599901145756", "level": "note", "message": {"text": "Unused endpoint: GET /events/count"}, "properties": {"repobilityId": "deddb473e81d08d4", "scanner": "scanner-primary", "fingerprint": "50a0599901145756", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ff3dc58b9e07535a", "level": "note", "message": {"text": "Unused endpoint: GET /events/sample"}, "properties": {"repobilityId": "a7a3d97dd903f351", "scanner": "scanner-primary", "fingerprint": "ff3dc58b9e07535a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}