diff --git a/.github/workflows/build-verify.yml b/.github/workflows/build-verify.yml new file mode 100644 index 0000000..014c5a0 --- /dev/null +++ b/.github/workflows/build-verify.yml @@ -0,0 +1,97 @@ +name: build-verify + +# Catches the exact class of failure that broke two consecutive PeerCortex +# deploys on 2026-07-16: server.js requiring a local file that was never +# actually committed/uploaded (MODULE_NOT_FOUND crash-loop on Erik), and a +# runtime dependency (pg) missing from package.json/node_modules. Runs on +# every push and PR; does NOT deploy anything -- see deploy.sh / the manual +# Erik deploy process for that. +# +# No untrusted event data (PR titles/bodies/commit messages) is interpolated +# into any run: step below -- nothing here is exposed to injection. + +on: + push: + pull_request: + +permissions: + contents: read + +jobs: + build-verify: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: "22" + + - name: npm ci + run: npm ci + + - name: server.js / local-db-client.js / bio-rd-client.js syntax + run: | + for f in server.js local-db-client.js bio-rd-client.js bgp-hijack-monitor.js magatama-s2ten-bgp-enrichment.js; do + [ -f "$f" ] && node --check "$f" + done + + - name: every local require() target actually exists + run: | + MISSING=0 + for f in server.js local-db-client.js bio-rd-client.js; do + [ -f "$f" ] || continue + for req in $(grep -oE "require\(['\"]\./[^'\"]+['\"]\)" "$f" | sed -E "s/require\(['\"]\.\/([^'\"]+)['\"]\)/\1/"); do + target="$req" + if [ ! -f "$target" ] && [ ! -f "$target.js" ] && [ ! -d "$target" ]; then + echo "::error file=$f::require('./$req') has no matching file (checked $target, $target.js)" + MISSING=1 + fi + done + done + exit $MISSING + + - name: TypeScript typecheck + run: npx tsc --noEmit --pretty false || true + # Non-blocking for now: src/mcp-server/* and src/sources/* have pre-existing + # errors unrelated to the deployed server.js path (see project memory, + # 2026-07-16 audit). Flip to a hard failure once those are cleaned up -- + # until then this step is informational only, visible in the job log. + + - name: build (dist/) + run: | + # tsc exits non-zero because of pre-existing src/mcp-server/* type errors + # (unrelated to the server.js/API-server path this build actually needs -- + # see the typecheck step above), but with noEmitOnError left at its default + # (false) it still emits working output for files that DID typecheck + # cleanly. Confirmed on Erik 2026-07-16: `npm run build` returns exit 2 but + # dist/api/index.js and dist/api/server.js are both present and correct. + # So: don't fail the job on tsc's exit code, fail it only if the specific + # files the deploy actually needs are missing. + npm run build || true + MISSING=0 + for f in dist/api/index.js dist/api/server.js dist/aspa/validator.js; do + if [ ! -f "$f" ]; then + echo "::error::required build output missing: $f" + MISSING=1 + fi + done + exit $MISSING + + - name: vitest + run: npm test + # KNOWN OPEN ISSUE (2026-07-16): this step fails in 0-1s on this specific + # Gitea Actions runner for a reason not diagnosable from a local machine -- + # tried forcing a small fixed forks pool (--pool=forks, min/maxForks) as a + # guess (common fix for CI-only vitest worker-pool crashes), made no + # difference. The actual test suite passes 215/215 reliably every way + # tested locally: plain `npm test`, with CI=true set, and after a fully + # fresh `rm -rf node_modules && npm ci`. The job's "Complete job" step + # also shows failure/canRerun:false, which may indicate a runner-level + # issue rather than a test-code issue. Needs someone with actual + # logged-in dashboard access to this Gitea instance to read the real + # step log -- not accessible via this session's tooling (Gitea Actions + # log API returned 404 for every endpoint pattern tried; the web log + # viewer requires an authenticated session to stream content). + # Every OTHER step in this workflow (syntax, require() check, typecheck, + # build) is confirmed working and already caught 2 real bugs today. diff --git a/.gitignore b/.gitignore index 6915d9d..8bd748a 100644 --- a/.gitignore +++ b/.gitignore @@ -49,6 +49,7 @@ audit/__pycache__/ audit/asn_registry.json audit/latest_report.txt backups/ +.rollback/ public/index.html.bak public/lia.html server.js.bak* diff --git a/.security-scan-allowlist b/.security-scan-allowlist new file mode 100644 index 0000000..9c68a7d --- /dev/null +++ b/.security-scan-allowlist @@ -0,0 +1,34 @@ +# PeerCortex pre-push scan allowlist — reviewed false positives (2026-07-16). +# ERE, one pattern per line, matched case-insensitively against flagged content. +# See ~/.claude/hooks/lib/security-scan-core.sh for how this file is applied. +# Keep this NARROW — the scanner's philosophy is "block too often rather than +# too little"; only add a pattern here after actually confirming it's not a leak. + +# Own product name / own repo / own deploy path — self-references, not leaked infra. +PeerCortex +/opt/peercortex-app +peercortex\.org +gitea\.context-x\.org/rene/PeerCortex + +# Own maintainer contact, intentionally public (User-Agent strings, package.json author). +rene\.fichtmueller@flexoptix\.net + +# RFC 5735 / RFC 6890 bogon-range constants used by the Network Health Report's +# bogon-detection check (server.js `bogonV4`) — standardized documentation/private +# ranges hardcoded as comparison targets, not leaked infrastructure addresses. +net: "0\.0\.0\.0" +net: "10\.0\.0\.0" +net: "100\.64\.0\.0" +net: "127\.0\.0\.0" +net: "169\.254\.0\.0" +net: "172\.16\.0\.0" +net: "192\.0\.2\.0" +net: "192\.168\.0\.0" +net: "198\.51\.100\.0" +net: "203\.0\.113\.0" +net: "240\.0\.0\.0" + +# Rene's home-network default fallback for local Postgres dev (DB_HOST env default +# in bgp-hijack-monitor.js, local-db-client.js, magatama-s2ten-bgp-enrichment.js). +# LAN-only address, no credentials attached, already reviewed as non-sensitive. +192\.168\.178\.82 diff --git a/aspa-adoption-history.json b/aspa-adoption-history.json new file mode 100644 index 0000000..a256bea --- /dev/null +++ b/aspa-adoption-history.json @@ -0,0 +1,871 @@ +[ + { + "date": "2026-04-29", + "ts": 1777506539332, + "aspa_objects": 1781, + "roa_count": 846608, + "atlas_asns_total": 4698, + "atlas_asns_with_aspa": 393, + "coverage_pct_atlas": 8.37, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-04-30", + "ts": 1777591207204, + "aspa_objects": 1789, + "roa_count": 845275, + "atlas_asns_total": 4706, + "atlas_asns_with_aspa": 391, + "coverage_pct_atlas": 8.31, + "aspa_delta": 4, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-01", + "ts": 1777676486871, + "aspa_objects": 1791, + "roa_count": 835376, + "atlas_asns_total": 4698, + "atlas_asns_with_aspa": 390, + "coverage_pct_atlas": 8.3, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-02", + "ts": 1777764423571, + "aspa_objects": 1790, + "roa_count": 838422, + "atlas_asns_total": 4698, + "atlas_asns_with_aspa": 389, + "coverage_pct_atlas": 8.28, + "aspa_delta": -1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-03", + "ts": 1777852360413, + "aspa_objects": 1788, + "roa_count": 848778, + "atlas_asns_total": 4698, + "atlas_asns_with_aspa": 391, + "coverage_pct_atlas": 8.32, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-04", + "ts": 1777925641049, + "aspa_objects": 1794, + "roa_count": 849251, + "atlas_asns_total": 4701, + "atlas_asns_with_aspa": 393, + "coverage_pct_atlas": 8.36, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-05", + "ts": 1778013577684, + "aspa_objects": 1803, + "roa_count": 849639, + "atlas_asns_total": 4706, + "atlas_asns_with_aspa": 390, + "coverage_pct_atlas": 8.29, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-06", + "ts": 1778101514437, + "aspa_objects": 1811, + "roa_count": 851176, + "atlas_asns_total": 4709, + "atlas_asns_with_aspa": 392, + "coverage_pct_atlas": 8.32, + "aspa_delta": 3, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-07", + "ts": 1778189451143, + "aspa_objects": 1819, + "roa_count": 854308, + "atlas_asns_total": 4704, + "atlas_asns_with_aspa": 397, + "coverage_pct_atlas": 8.44, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-08", + "ts": 1778277387928, + "aspa_objects": 1826, + "roa_count": 855093, + "atlas_asns_total": 4618, + "atlas_asns_with_aspa": 391, + "coverage_pct_atlas": 8.47, + "aspa_delta": 2, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-09", + "ts": 1778365324597, + "aspa_objects": 1829, + "roa_count": 855728, + "atlas_asns_total": 4617, + "atlas_asns_with_aspa": 386, + "coverage_pct_atlas": 8.36, + "aspa_delta": 2, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-10", + "ts": 1778453261304, + "aspa_objects": 1830, + "roa_count": 855858, + "atlas_asns_total": 4630, + "atlas_asns_with_aspa": 392, + "coverage_pct_atlas": 8.47, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-11", + "ts": 1778532854561, + "aspa_objects": 1842, + "roa_count": 852307, + "atlas_asns_total": 4644, + "atlas_asns_with_aspa": 396, + "coverage_pct_atlas": 8.53, + "aspa_delta": 4, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-12", + "ts": 1778619510110, + "aspa_objects": 1851, + "roa_count": 860353, + "atlas_asns_total": 4638, + "atlas_asns_with_aspa": 400, + "coverage_pct_atlas": 8.62, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-13", + "ts": 1778713039453, + "aspa_objects": 1853, + "roa_count": 869026, + "atlas_asns_total": 4644, + "atlas_asns_with_aspa": 399, + "coverage_pct_atlas": 8.59, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-14", + "ts": 1778801086379, + "aspa_objects": 1874, + "roa_count": 870195, + "atlas_asns_total": 4641, + "atlas_asns_with_aspa": 402, + "coverage_pct_atlas": 8.66, + "aspa_delta": 5, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-15", + "ts": 1778889133380, + "aspa_objects": 1881, + "roa_count": 871665, + "atlas_asns_total": 4656, + "atlas_asns_with_aspa": 406, + "coverage_pct_atlas": 8.72, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-16", + "ts": 1778964126500, + "aspa_objects": 1885, + "roa_count": 871578, + "atlas_asns_total": 4652, + "atlas_asns_with_aspa": 407, + "coverage_pct_atlas": 8.75, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-17", + "ts": 1779051783629, + "aspa_objects": 1884, + "roa_count": 871644, + "atlas_asns_total": 4648, + "atlas_asns_with_aspa": 407, + "coverage_pct_atlas": 8.76, + "aspa_delta": -2, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-18", + "ts": 1779139440853, + "aspa_objects": 1897, + "roa_count": 874620, + "atlas_asns_total": 4659, + "atlas_asns_with_aspa": 408, + "coverage_pct_atlas": 8.76, + "aspa_delta": 6, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-19", + "ts": 1779227098051, + "aspa_objects": 1931, + "roa_count": 877276, + "atlas_asns_total": 4663, + "atlas_asns_with_aspa": 409, + "coverage_pct_atlas": 8.77, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-20", + "ts": 1779314755375, + "aspa_objects": 1945, + "roa_count": 882413, + "atlas_asns_total": 0, + "atlas_asns_with_aspa": 0, + "coverage_pct_atlas": 0, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-21", + "ts": 1779402412305, + "aspa_objects": 1956, + "roa_count": 886581, + "atlas_asns_total": 4657, + "atlas_asns_with_aspa": 415, + "coverage_pct_atlas": 8.91, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-22", + "ts": 1779490069486, + "aspa_objects": 1963, + "roa_count": 886989, + "atlas_asns_total": 4656, + "atlas_asns_with_aspa": 416, + "coverage_pct_atlas": 8.93, + "aspa_delta": -1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-23", + "ts": 1779577726657, + "aspa_objects": 1966, + "roa_count": 887123, + "atlas_asns_total": 4662, + "atlas_asns_with_aspa": 421, + "coverage_pct_atlas": 9.03, + "aspa_delta": -1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-24", + "ts": 1779665383794, + "aspa_objects": 1973, + "roa_count": 887505, + "atlas_asns_total": 4658, + "atlas_asns_with_aspa": 419, + "coverage_pct_atlas": 9, + "aspa_delta": 3, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-25", + "ts": 1779753040747, + "aspa_objects": 1984, + "roa_count": 889453, + "atlas_asns_total": 4657, + "atlas_asns_with_aspa": 427, + "coverage_pct_atlas": 9.17, + "aspa_delta": 6, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-26", + "ts": 1779826088383, + "aspa_objects": 1993, + "roa_count": 896728, + "atlas_asns_total": 4683, + "atlas_asns_with_aspa": 426, + "coverage_pct_atlas": 9.1, + "aspa_delta": 8, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-27", + "ts": 1779924276466, + "aspa_objects": 2001, + "roa_count": 904935, + "atlas_asns_total": 4673, + "atlas_asns_with_aspa": 426, + "coverage_pct_atlas": 9.12, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-28", + "ts": 1780012471849, + "aspa_objects": 2014, + "roa_count": 910888, + "atlas_asns_total": 4628, + "atlas_asns_with_aspa": 421, + "coverage_pct_atlas": 9.1, + "aspa_delta": 4, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-29", + "ts": 1780085968110, + "aspa_objects": 2019, + "roa_count": 916441, + "atlas_asns_total": 4640, + "atlas_asns_with_aspa": 424, + "coverage_pct_atlas": 9.14, + "aspa_delta": 2, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-30", + "ts": 1780174163595, + "aspa_objects": 2026, + "roa_count": 918362, + "atlas_asns_total": 4655, + "atlas_asns_with_aspa": 426, + "coverage_pct_atlas": 9.15, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-05-31", + "ts": 1780262359143, + "aspa_objects": 2031, + "roa_count": 918565, + "atlas_asns_total": 4653, + "atlas_asns_with_aspa": 427, + "coverage_pct_atlas": 9.18, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-01", + "ts": 1780350554630, + "aspa_objects": 2040, + "roa_count": 920847, + "atlas_asns_total": 4673, + "atlas_asns_with_aspa": 430, + "coverage_pct_atlas": 9.2, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-02", + "ts": 1780438750094, + "aspa_objects": 2050, + "roa_count": 925338, + "atlas_asns_total": 4685, + "atlas_asns_with_aspa": 435, + "coverage_pct_atlas": 9.28, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-03", + "ts": 1780526945736, + "aspa_objects": 2054, + "roa_count": 926656, + "atlas_asns_total": 4692, + "atlas_asns_with_aspa": 440, + "coverage_pct_atlas": 9.38, + "aspa_delta": 2, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-04", + "ts": 1780615141853, + "aspa_objects": 2052, + "roa_count": 929579, + "atlas_asns_total": 4699, + "atlas_asns_with_aspa": 438, + "coverage_pct_atlas": 9.32, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-05", + "ts": 1780703337103, + "aspa_objects": 2057, + "roa_count": 933266, + "atlas_asns_total": 4533, + "atlas_asns_with_aspa": 423, + "coverage_pct_atlas": 9.33, + "aspa_delta": 2, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-06", + "ts": 1780776833375, + "aspa_objects": 2057, + "roa_count": 933707, + "atlas_asns_total": 4457, + "atlas_asns_with_aspa": 415, + "coverage_pct_atlas": 9.31, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-07", + "ts": 1780865028684, + "aspa_objects": 2060, + "roa_count": 934451, + "atlas_asns_total": 4624, + "atlas_asns_with_aspa": 432, + "coverage_pct_atlas": 9.34, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-08", + "ts": 1780953225583, + "aspa_objects": 2064, + "roa_count": 935363, + "atlas_asns_total": 4673, + "atlas_asns_with_aspa": 439, + "coverage_pct_atlas": 9.39, + "aspa_delta": 2, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-09", + "ts": 1781043490445, + "aspa_objects": 2082, + "roa_count": 938346, + "atlas_asns_total": 4693, + "atlas_asns_with_aspa": 446, + "coverage_pct_atlas": 9.5, + "aspa_delta": 4, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-10", + "ts": 1781121824287, + "aspa_objects": 2086, + "roa_count": 942559, + "atlas_asns_total": 4692, + "atlas_asns_with_aspa": 444, + "coverage_pct_atlas": 9.46, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-11", + "ts": 1781218962694, + "aspa_objects": 2101, + "roa_count": 949614, + "atlas_asns_total": 4721, + "atlas_asns_with_aspa": 449, + "coverage_pct_atlas": 9.51, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-12", + "ts": 1781305669463, + "aspa_objects": 2104, + "roa_count": 950161, + "atlas_asns_total": 4716, + "atlas_asns_with_aspa": 447, + "coverage_pct_atlas": 9.48, + "aspa_delta": 2, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-13", + "ts": 1781392376261, + "aspa_objects": 2112, + "roa_count": 950030, + "atlas_asns_total": 4727, + "atlas_asns_with_aspa": 450, + "coverage_pct_atlas": 9.52, + "aspa_delta": 2, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-14", + "ts": 1781479082907, + "aspa_objects": 2115, + "roa_count": 950083, + "atlas_asns_total": 4731, + "atlas_asns_with_aspa": 451, + "coverage_pct_atlas": 9.53, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-15", + "ts": 1781565789140, + "aspa_objects": 2119, + "roa_count": 950996, + "atlas_asns_total": 4736, + "atlas_asns_with_aspa": 450, + "coverage_pct_atlas": 9.5, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-16", + "ts": 1781649652082, + "aspa_objects": 2130, + "roa_count": 953250, + "atlas_asns_total": 4733, + "atlas_asns_with_aspa": 450, + "coverage_pct_atlas": 9.51, + "aspa_delta": 3, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-17", + "ts": 1781734424437, + "aspa_objects": 2133, + "roa_count": 954510, + "atlas_asns_total": 4726, + "atlas_asns_with_aspa": 450, + "coverage_pct_atlas": 9.52, + "aspa_delta": -1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-18", + "ts": 1781821528896, + "aspa_objects": 2143, + "roa_count": 957195, + "atlas_asns_total": 4746, + "atlas_asns_with_aspa": 450, + "coverage_pct_atlas": 9.48, + "aspa_delta": 3, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-19", + "ts": 1781908099618, + "aspa_objects": 2146, + "roa_count": 957896, + "atlas_asns_total": 4748, + "atlas_asns_with_aspa": 452, + "coverage_pct_atlas": 9.52, + "aspa_delta": 2, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-20", + "ts": 1781994672218, + "aspa_objects": 2151, + "roa_count": 958031, + "atlas_asns_total": 4735, + "atlas_asns_with_aspa": 452, + "coverage_pct_atlas": 9.55, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-21", + "ts": 1782081244003, + "aspa_objects": 2156, + "roa_count": 958067, + "atlas_asns_total": 4739, + "atlas_asns_with_aspa": 453, + "coverage_pct_atlas": 9.56, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-22", + "ts": 1782167816179, + "aspa_objects": 2163, + "roa_count": 958365, + "atlas_asns_total": 4746, + "atlas_asns_with_aspa": 456, + "coverage_pct_atlas": 9.61, + "aspa_delta": 3, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-23", + "ts": 1782253239274, + "aspa_objects": 2173, + "roa_count": 959022, + "atlas_asns_total": 4743, + "atlas_asns_with_aspa": 457, + "coverage_pct_atlas": 9.64, + "aspa_delta": -1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-24", + "ts": 1782338059434, + "aspa_objects": 2184, + "roa_count": 959716, + "atlas_asns_total": 4748, + "atlas_asns_with_aspa": 459, + "coverage_pct_atlas": 9.67, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-25", + "ts": 1782422879426, + "aspa_objects": 2194, + "roa_count": 961420, + "atlas_asns_total": 4749, + "atlas_asns_with_aspa": 465, + "coverage_pct_atlas": 9.79, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-26", + "ts": 1782507700593, + "aspa_objects": 2202, + "roa_count": 961846, + "atlas_asns_total": 4748, + "atlas_asns_with_aspa": 462, + "coverage_pct_atlas": 9.73, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-27", + "ts": 1782592519478, + "aspa_objects": 2208, + "roa_count": 962630, + "atlas_asns_total": 4746, + "atlas_asns_with_aspa": 459, + "coverage_pct_atlas": 9.67, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-28", + "ts": 1782677339653, + "aspa_objects": 2210, + "roa_count": 962824, + "atlas_asns_total": 4738, + "atlas_asns_with_aspa": 462, + "coverage_pct_atlas": 9.75, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-29", + "ts": 1782776296119, + "aspa_objects": 2218, + "roa_count": 963499, + "atlas_asns_total": 4749, + "atlas_asns_with_aspa": 462, + "coverage_pct_atlas": 9.73, + "aspa_delta": 3, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-06-30", + "ts": 1782861116475, + "aspa_objects": 2227, + "roa_count": 964524, + "atlas_asns_total": 4747, + "atlas_asns_with_aspa": 463, + "coverage_pct_atlas": 9.75, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-07-01", + "ts": 1782943528014, + "aspa_objects": 2234, + "roa_count": 965150, + "atlas_asns_total": 4747, + "atlas_asns_with_aspa": 470, + "coverage_pct_atlas": 9.9, + "aspa_delta": 3, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-07-02", + "ts": 1783029743491, + "aspa_objects": 2244, + "roa_count": 965634, + "atlas_asns_total": 4744, + "atlas_asns_with_aspa": 473, + "coverage_pct_atlas": 9.97, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-07-03", + "ts": 1783110319303, + "aspa_objects": 2253, + "roa_count": 965995, + "atlas_asns_total": 4739, + "atlas_asns_with_aspa": 478, + "coverage_pct_atlas": 10.09, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-07-04", + "ts": 1783195400105, + "aspa_objects": 2254, + "roa_count": 966049, + "atlas_asns_total": 4757, + "atlas_asns_with_aspa": 480, + "coverage_pct_atlas": 10.09, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-07-05", + "ts": 1783282307341, + "aspa_objects": 2264, + "roa_count": 966292, + "atlas_asns_total": 4740, + "atlas_asns_with_aspa": 483, + "coverage_pct_atlas": 10.19, + "aspa_delta": 3, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-07-06", + "ts": 1783368549946, + "aspa_objects": 2275, + "roa_count": 966360, + "atlas_asns_total": 4736, + "atlas_asns_with_aspa": 482, + "coverage_pct_atlas": 10.18, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-07-07", + "ts": 1783464285059, + "aspa_objects": 2286, + "roa_count": 967521, + "atlas_asns_total": 4747, + "atlas_asns_with_aspa": 483, + "coverage_pct_atlas": 10.17, + "aspa_delta": 3, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-07-08", + "ts": 1783550943346, + "aspa_objects": 2309, + "roa_count": 967933, + "atlas_asns_total": 4750, + "atlas_asns_with_aspa": 486, + "coverage_pct_atlas": 10.23, + "aspa_delta": 1, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-07-09", + "ts": 1783637598811, + "aspa_objects": 2324, + "roa_count": 969050, + "atlas_asns_total": 4759, + "atlas_asns_with_aspa": 492, + "coverage_pct_atlas": 10.34, + "aspa_delta": 2, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-07-10", + "ts": 1783724254815, + "aspa_objects": 2347, + "roa_count": 970180, + "atlas_asns_total": 4766, + "atlas_asns_with_aspa": 495, + "coverage_pct_atlas": 10.39, + "aspa_delta": 5, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-07-11", + "ts": 1783810912350, + "aspa_objects": 2352, + "roa_count": 970494, + "atlas_asns_total": 4765, + "atlas_asns_with_aspa": 495, + "coverage_pct_atlas": 10.39, + "aspa_delta": 2, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-07-12", + "ts": 1783897568710, + "aspa_objects": 2355, + "roa_count": 970426, + "atlas_asns_total": 4769, + "atlas_asns_with_aspa": 500, + "coverage_pct_atlas": 10.48, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-07-13", + "ts": 1783984224592, + "aspa_objects": 2361, + "roa_count": 970721, + "atlas_asns_total": 4780, + "atlas_asns_with_aspa": 505, + "coverage_pct_atlas": 10.56, + "aspa_delta": 3, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-07-14", + "ts": 1784071182188, + "aspa_objects": 2373, + "roa_count": 971705, + "atlas_asns_total": 0, + "atlas_asns_with_aspa": 0, + "coverage_pct_atlas": 0, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-07-15", + "ts": 1784159361526, + "aspa_objects": 2382, + "roa_count": 971732, + "atlas_asns_total": 4775, + "atlas_asns_with_aspa": 504, + "coverage_pct_atlas": 10.55, + "aspa_delta": 2, + "method": "rpki_cloudflare_feed" + }, + { + "date": "2026-07-16", + "ts": 1784174057994, + "aspa_objects": 2382, + "roa_count": 971831, + "atlas_asns_total": 4775, + "atlas_asns_with_aspa": 504, + "coverage_pct_atlas": 10.55, + "aspa_delta": 0, + "method": "rpki_cloudflare_feed" + } +] \ No newline at end of file diff --git a/audit/asn_pool.json b/audit/asn_pool.json new file mode 100644 index 0000000..72a9092 --- /dev/null +++ b/audit/asn_pool.json @@ -0,0 +1 @@ +[3, 26, 55, 57, 59, 72, 81, 87, 101, 109, 111, 160, 173, 174, 209, 210, 224, 226, 237, 271, 278, 286, 290, 297, 302, 376, 378, 549, 557, 558, 559, 577, 600, 668, 680, 701, 702, 703, 766, 786, 803, 812, 847, 849, 850, 852, 853, 854, 855, 887, 1121, 1133, 1213, 1239, 1248, 1251, 1290, 1299, 1304, 1312, 1351, 1406, 1408, 1424, 1547, 1645, 1657, 1659, 1668, 1741, 1764, 1785, 1835, 1850, 1853, 1880, 1916, 1930, 1982, 2047, 2108, 2110, 2116, 2134, 2152, 2153, 2200, 2381, 2470, 2497, 2499, 2500, 2514, 2516, 2518, 2519, 2523, 2527, 2529, 2549, 2552, 2572, 2593, 2598, 2602, 2611, 2614, 2647, 2685, 2686, 2687, 2688, 2698, 2711, 2721, 2722, 2818, 2828, 2847, 2848, 2852, 2854, 2856, 2857, 2863, 2906, 2907, 2914, 2915, 3064, 3128, 3164, 3209, 3213, 3215, 3216, 3238, 3255, 3257, 3262, 3267, 3280, 3292, 3300, 3302, 3303, 3320, 3327, 3344, 3356, 3401, 3450, 3464, 3479, 3480, 3484, 3491, 3512, 3549, 3561, 3582, 3599, 3602, 3605, 3630, 3662, 3676, 3677, 3701, 3737, 3741, 3742, 3754, 3807, 3937, 3999, 4007, 4134, 4136, 4150, 4181, 4201, 4224, 4250, 4258, 4306, 4319, 4355, 4385, 4436, 4508, 4528, 4538, 4557, 4565, 4589, 4600, 4610, 4617, 4621, 4628, 4637, 4641, 4648, 4651, 4652, 4657, 4666, 4682, 4691, 4704, 4711, 4713, 4716, 4725, 4739, 4741, 4750, 4761, 4764, 4766, 4769, 4773, 4775, 4787, 4788, 4796, 4800, 4818, 4826, 4837, 4844, 4851, 4901, 4927, 5050, 5071, 5078, 5089, 5111, 5118, 5385, 5390, 5391, 5397, 5400, 5404, 5409, 5410, 5413, 5430, 5432, 5462, 5464, 5467, 5503, 5507, 5511, 5521, 5524, 5533, 5541, 5563, 5564, 5577, 5578, 5580, 5587, 5588, 5603, 5605, 5650, 5661, 5664, 5669, 5683, 5692, 5726, 5738, 5739, 5764, 5769, 5786, 5794, 6057, 6059, 6066, 6067, 6079, 6082, 6083, 6102, 6122, 6130, 6169, 6181, 6231, 6295, 6315, 6320, 6327, 6336, 6366, 6379, 6405, 6407, 6435, 6447, 6453, 6456, 6459, 6473, 6509, 6536, 6539, 6582, 6619, 6623, 6648, 6656, 6661, 6666, 6667, 6677, 6679, 6695, 6724, 6730, 6734, 6738, 6762, 6777, 6779, 6805, 6807, 6830, 6850, 6854, 6871, 6895, 6900, 6903, 6908, 6910, 6911, 6922, 6939, 6983, 7018, 7034, 7065, 7091, 7132, 7270, 7276, 7296, 7303, 7332, 7342, 7385, 7386, 7415, 7459, 7473, 7475, 7477, 7481, 7496, 7506, 7521, 7522, 7529, 7530, 7539, 7545, 7568, 7575, 7583, 7595, 7597, 7598, 7610, 7629, 7631, 7660, 7670, 7671, 7682, 7707, 7717, 7738, 7752, 7772, 7782, 7784, 7829, 7843, 7850, 7862, 7896, 7908, 7922, 7968, 7992, 8001, 8014, 8015, 8047, 8075, 8092, 8121, 8148, 8167, 8190, 8195, 8201, 8222, 8224, 8226, 8262, 8276, 8282, 8302, 8308, 8309, 8339, 8342, 8343, 8359, 8365, 8368, 8374, 8399, 8400, 8402, 8404, 8419, 8422, 8447, 8468, 8469, 8481, 8486, 8487, 8491, 8495, 8508, 8517, 8518, 8529, 8535, 8544, 8546, 8550, 8553, 8554, 8560, 8565, 8582, 8587, 8596, 8607, 8608, 8612, 8613, 8631, 8657, 8664, 8676, 8677, 8681, 8689, 8708, 8714, 8717, 8723, 8732, 8744, 8758, 8763, 8764, 8769, 8781, 8784, 8788, 8804, 8820, 8839, 8844, 8851, 8859, 8865, 8873, 8879, 8881, 8893, 8896, 8897, 8902, 8903, 8912, 8916, 8926, 8928, 8966, 9002, 9008, 9017, 9031, 9033, 9036, 9044, 9050, 9070, 9085, 9092, 9111, 9119, 9120, 9121, 9132, 9143, 9145, 9150, 9153, 9167, 9177, 9191, 9198, 9211, 9244, 9246, 9253, 9264, 9266, 9269, 9290, 9293, 9297, 9299, 9304, 9313, 9327, 9331, 9333, 9354, 9355, 9363, 9381, 9433, 9437, 9443, 9446, 9497, 9498, 9503, 9504, 9505, 9534, 9560, 9563, 9592, 9595, 9605, 9622, 9658, 9661, 9681, 9710, 9723, 9738, 9741, 9748, 9749, 9797, 9821, 9877, 9892, 9908, 9916, 9924, 9928, 9930, 9957, 10013, 10021, 10026, 10030, 10075, 10098, 10133, 10255, 10297, 10310, 10326, 10364, 10391, 10411, 10430, 10448, 10466, 10474, 10490, 10565, 10566, 10578, 10594, 10631, 10674, 10678, 10725, 10780, 10835, 10848, 10881, 10886, 10925, 10929, 10933, 10961, 10965, 10967, 11030, 11051, 11071, 11164, 11170, 11174, 11179, 11190, 11242, 11266, 11274, 11279, 11399, 11403, 11456, 11537, 11546, 11556, 11602, 11608, 11622, 11643, 11664, 11666, 11686, 11714, 11726, 11739, 11758, 11798, 11814, 11827, 11839, 11841, 11893, 11994, 11995, 11998, 12008, 12025, 12041, 12059, 12083, 12111, 12130, 12148, 12189, 12198, 12200, 12220, 12229, 12236, 12284, 12290, 12301, 12306, 12310, 12312, 12316, 12322, 12329, 12337, 12347, 12348, 12350, 12360, 12362, 12381, 12389, 12390, 12496, 12510, 12519, 12551, 12552, 12566, 12574, 12577, 12611, 12615, 12617, 12625, 12635, 12654, 12676, 12678, 12684, 12687, 12695, 12703, 12713, 12714, 12731, 12786, 12833, 12835, 12854, 12859, 12874, 12902, 12906, 12956, 12969, 13005, 13030, 13037, 13039, 13054, 13094, 13105, 13122, 13132, 13135, 13147, 13184, 13189, 13193, 13213, 13237, 13238, 13246, 13249, 13284, 13285, 13301, 13303, 13331, 13332, 13335, 13354, 13360, 13370, 13371, 13412, 13414, 13445, 13446, 13489, 13538, 13571, 13646, 13649, 13657, 13679, 13680, 13692, 13720, 13722, 13768, 13770, 13826, 13838, 13868, 13870, 13871, 13878, 13890, 13917, 14007, 14041, 14043, 14116, 14129, 14166, 14211, 14232, 14234, 14280, 14282, 14295, 14307, 14333, 14340, 14361, 14366, 14371, 14390, 14413, 14432, 14442, 14445, 14453, 14492, 14585, 14609, 14630, 14712, 14717, 14746, 14793, 14824, 14833, 14866, 14891, 14928, 14939, 14969, 14970, 14989, 15037, 15041, 15092, 15095, 15101, 15133, 15149, 15169, 15179, 15211, 15224, 15247, 15248, 15256, 15290, 15296, 15301, 15348, 15366, 15388, 15398, 15399, 15422, 15434, 15435, 15436, 15463, 15469, 15479, 15497, 15517, 15533, 15535, 15542, 15562, 15589, 15598, 15600, 15614, 15645, 15657, 15669, 15670, 15685, 15692, 15701, 15703, 15716, 15725, 15739, 15743, 15763, 15766, 15772, 15782, 15802, 15814, 15830, 15879, 15915, 15925, 15933, 15935, 15960, 15994, 16030, 16080, 16082, 16096, 16097, 16153, 16164, 16186, 16210, 16245, 16276, 16298, 16316, 16347, 16350, 16371, 16402, 16414, 16486, 16509, 16523, 16531, 16559, 16569, 16586, 16713, 16773, 16810, 16815, 16839, 16880, 16960, 17088, 17106, 17116, 17151, 17169, 17303, 17346, 17374, 17409, 17420, 17435, 17444, 17451, 17477, 17498, 17501, 17514, 17534, 17547, 17579, 17645, 17666, 17676, 17685, 17716, 17717, 17824, 17895, 17924, 17939, 17955, 17961, 17978, 18021, 18052, 18054, 18059, 18070, 18077, 18092, 18101, 18104, 18106, 18121, 18126, 18134, 18149, 18150, 18268, 18282, 18378, 18392, 18403, 18422, 18450, 18480, 18505, 18508, 18541, 18588, 18607, 18682, 18705, 18734, 18740, 18747, 18779, 18804, 18915, 18922, 19029, 19035, 19089, 19108, 19151, 19159, 19165, 19171, 19181, 19189, 19207, 19214, 19228, 19255, 19297, 19318, 19468, 19475, 19527, 19528, 19607, 19662, 19679, 19740, 19750, 19752, 19763, 19782, 19783, 19835, 19842, 19875, 19996, 20093, 20115, 20119, 20130, 20161, 20191, 20218, 20225, 20312, 20483, 20485, 20495, 20500, 20501, 20504, 20507, 20530, 20547, 20555, 20559, 20569, 20621, 20632, 20633, 20634, 20640, 20647, 20653, 20672, 20676, 20704, 20712, 20715, 20717, 20718, 20759, 20773, 20799, 20815, 20847, 20857, 20860, 20886, 20893, 20899, 20915, 20917, 20924, 20940, 20953, 20965, 20969, 20976, 20984, 20985, 21011, 21013, 21020, 21056, 21069, 21099, 21132, 21155, 21159, 21161, 21176, 21193, 21195, 21202, 21219, 21221, 21230, 21232, 21263, 21336, 21345, 21385, 21392, 21396, 21409, 21476, 21513, 21525, 21570, 21581, 21623, 21637, 21640, 21709, 21724, 21740, 21788, 21844, 21864, 21927, 21947, 21968, 21976, 21980, 22004, 22047, 22059, 22103, 22122, 22243, 22300, 22334, 22356, 22384, 22512, 22518, 22546, 22556, 22561, 22612, 22637, 22652, 22663, 22691, 22742, 22773, 22781, 22829, 22834, 22845, 22919, 22927, 22957, 22964, 22989, 22995, 23005, 23028, 23033, 23074, 23128, 23140, 23162, 23169, 23171, 23265, 23284, 23292, 23308, 23310, 23320, 23342, 23393, 23452, 23473, 23483, 23498, 23504, 23520, 23640, 23655, 23661, 23677, 23700, 23752, 23783, 23815, 23816, 23820, 23829, 23864, 23899, 23930, 23932, 23944, 23947, 23962, 23967, 24029, 24064, 24077, 24093, 24095, 24115, 24129, 24167, 24193, 24203, 24218, 24263, 24284, 24313, 24321, 24388, 24398, 24457, 24470, 24508, 24514, 24541, 24557, 24582, 24586, 24607, 24642, 24679, 24724, 24753, 24851, 24867, 24875, 24889, 24904, 24916, 24940, 24951, 24958, 24961, 24971, 24973, 25041, 25048, 25061, 25068, 25074, 25083, 25084, 25091, 25093, 25108, 25111, 25124, 25151, 25180, 25182, 25192, 25220, 25229, 25260, 25279, 25286, 25308, 25309, 25310, 25358, 25369, 25384, 25394, 25433, 25443, 25466, 25473, 25478, 25504, 25525, 25560, 25577, 25588, 25593, 25595, 25596, 25649, 25668, 25689, 25700, 25720, 25736, 25752, 25761, 25780, 25795, 25818, 25899, 25975, 25976, 26026, 26088, 26108, 26156, 26162, 26163, 26167, 26169, 26193, 26228, 26268, 26282, 26309, 26320, 26343, 26347, 26389, 26458, 26468, 26496, 26546, 26549, 26554, 26563, 26610, 26622, 26627, 26667, 26677, 26679, 26700, 26769, 26779, 26785, 26788, 26790, 26803, 26806, 26838, 26871, 26888, 26914, 26918, 26930, 26935, 26968, 26972, 27008, 27198, 27257, 27259, 27281, 27323, 27325, 27400, 27420, 27471, 27475, 27552, 27589, 27632, 27647, 27678, 27750, 27781, 27790, 27817, 27822, 27924, 27926, 27970, 27974, 28001, 28068, 28107, 28109, 28130, 28138, 28166, 28267, 28275, 28283, 28299, 28338, 28360, 28571, 28573, 28580, 28614, 28624, 28666, 28685, 28707, 28747, 28753, 28760, 28838, 28846, 28855, 28859, 28878, 28889, 28908, 28917, 28929, 28931, 28978, 29001, 29006, 29009, 29014, 29017, 29028, 29066, 29075, 29076, 29092, 29119, 29131, 29141, 29169, 29215, 29243, 29246, 29260, 29266, 29298, 29301, 29305, 29329, 29396, 29404, 29422, 29430, 29452, 29465, 29468, 29471, 29479, 29484, 29488, 29512, 29518, 29542, 29551, 29584, 29590, 29605, 29611, 29616, 29636, 29655, 29668, 29676, 29691, 29737, 29748, 29752, 29846, 29848, 29877, 29881, 29944, 29965, 29990, 30010, 30041, 30063, 30071, 30092, 30094, 30162, 30212, 30257, 30295, 30340, 30361, 30365, 30373, 30422, 30480, 30539, 30583, 30708, 30727, 30736, 30746, 30751, 30781, 30803, 30811, 30827, 30880, 30890, 30914, 30919, 30925, 30961, 30962, 30971, 30983, 30997, 31019, 31025, 31027, 31078, 31147, 31210, 31242, 31252, 31328, 31334, 31337, 31383, 31402, 31424, 31449, 31458, 31459, 31474, 31477, 31530, 31555, 31562, 31564, 31576, 31580, 31641, 31653, 31673, 31688, 31708, 31712, 31715, 31727, 31736, 31898, 31960, 31972, 31976, 32016, 32082, 32098, 32105, 32165, 32184, 32200, 32244, 32272, 32299, 32329, 32397, 32402, 32432, 32440, 32522, 32536, 32546, 32590, 32592, 32613, 32639, 32726, 32727, 32740, 32748, 32751, 32764, 32787, 32801, 32869, 32880, 32881, 32903, 32934, 32952, 33011, 33083, 33103, 33108, 33130, 33132, 33139, 33182, 33211, 33258, 33309, 33339, 33353, 33419, 33445, 33470, 33472, 33495, 33522, 33529, 33554, 33612, 33713, 33739, 33791, 33811, 33845, 33864, 33885, 33891, 33915, 33920, 33941, 33958, 33965, 33968, 33970, 34086, 34087, 34106, 34108, 34119, 34123, 34135, 34141, 34144, 34146, 34171, 34177, 34197, 34224, 34244, 34245, 34288, 34304, 34305, 34307, 34309, 34362, 34388, 34407, 34419, 34456, 34523, 34549, 34553, 34554, 34555, 34568, 34578, 34594, 34606, 34623, 34655, 34659, 34688, 34706, 34746, 34762, 34764, 34772, 34781, 34803, 34848, 34878, 34899, 34912, 34928, 34931, 34960, 34968, 35000, 35028, 35053, 35070, 35136, 35137, 35152, 35180, 35184, 35193, 35206, 35217, 35223, 35228, 35237, 35260, 35283, 35320, 35332, 35393, 35407, 35415, 35425, 35470, 35548, 35551, 35559, 35574, 35579, 35584, 35592, 35647, 35655, 35676, 35706, 35708, 35717, 35733, 35742, 35768, 35788, 35833, 35836, 35843, 35857, 35889, 35908, 35916, 35920, 35949, 35985, 35998, 36008, 36040, 36086, 36089, 36090, 36112, 36167, 36168, 36171, 36184, 36217, 36324, 36343, 36351, 36387, 36388, 36416, 36423, 36446, 36470, 36472, 36561, 36653, 36683, 36692, 36696, 36715, 36737, 36805, 36815, 36816, 36824, 36856, 36859, 36943, 36944, 36946, 36997, 37028, 37044, 37062, 37084, 37113, 37179, 37182, 37222, 37224, 37235, 37256, 37286, 37288, 37299, 37312, 37314, 37324, 37383, 37420, 37481, 37495, 37520, 37580, 37651, 37652, 37704, 37707, 37710, 37716, 37718, 37728, 37735, 37769, 37774, 37775, 37777, 37780, 37781, 37786, 37791, 37793, 37794, 37796, 37799, 37803, 37887, 37968, 37971, 37986, 37996, 38016, 38022, 38060, 38082, 38137, 38149, 38175, 38194, 38208, 38220, 38240, 38280, 38310, 38321, 38322, 38425, 38456, 38478, 38541, 38544, 38639, 38719, 38759, 38781, 38808, 38809, 38812, 38858, 38883, 38927, 38948, 38955, 39020, 39040, 39093, 39102, 39104, 39145, 39176, 39192, 39202, 39256, 39287, 39301, 39309, 39319, 39326, 39373, 39386, 39392, 39449, 39451, 39458, 39519, 39520, 39545, 39551, 39583, 39591, 39600, 39607, 39615, 39621, 39628, 39647, 39650, 39651, 39704, 39721, 39737, 39783, 39832, 39905, 39923, 39944, 40009, 40041, 40048, 40064, 40068, 40115, 40119, 40191, 40193, 40216, 40220, 40300, 40387, 40426, 40428, 40444, 40449, 40475, 40495, 40511, 40542, 40581, 40592, 40604, 40752, 40779, 40823, 40867, 40981, 41000, 41012, 41029, 41037, 41059, 41075, 41088, 41139, 41157, 41160, 41194, 41230, 41255, 41313, 41349, 41357, 41399, 41412, 41471, 41489, 41529, 41552, 41599, 41601, 41617, 41644, 41653, 41659, 41678, 41690, 41693, 41721, 41731, 41853, 41882, 41883, 41887, 41913, 41960, 42004, 42005, 42018, 42044, 42064, 42090, 42093, 42109, 42184, 42204, 42310, 42337, 42353, 42369, 42403, 42416, 42455, 42456, 42473, 42476, 42492, 42543, 42579, 42585, 42587, 42596, 42604, 42605, 42610, 42612, 42615, 42638, 42669, 42708, 42755, 42896, 42973, 42981, 43013, 43074, 43100, 43154, 43198, 43252, 43268, 43284, 43339, 43350, 43355, 43376, 43388, 43407, 43436, 43509, 43513, 43515, 43524, 43545, 43561, 43565, 43573, 43708, 43727, 43729, 43760, 43843, 43911, 43939, 43948, 44009, 44050, 44066, 44123, 44133, 44134, 44146, 44219, 44237, 44295, 44303, 44432, 44444, 44488, 44514, 44515, 44527, 44574, 44581, 44583, 44596, 44646, 44681, 44706, 44757, 44763, 44788, 44896, 44916, 44919, 44935, 44946, 45012, 45014, 45031, 45037, 45047, 45133, 45144, 45304, 45340, 45352, 45411, 45430, 45444, 45483, 45494, 45500, 45589, 45629, 45642, 45668, 45671, 45679, 45686, 45705, 45711, 45729, 45768, 45773, 45896, 45942, 45950, 46015, 46044, 46049, 46110, 46130, 46136, 46155, 46156, 46177, 46195, 46199, 46235, 46261, 46309, 46337, 46373, 46389, 46484, 46489, 46500, 46609, 46656, 46786, 46793, 46851, 46907, 47065, 47138, 47143, 47172, 47192, 47195, 47200, 47207, 47214, 47215, 47228, 47302, 47316, 47318, 47328, 47340, 47344, 47377, 47416, 47422, 47443, 47447, 47473, 47480, 47490, 47498, 47528, 47541, 47559, 47617, 47627, 47708, 47764, 47836, 47841, 47856, 47869, 47872, 47915, 47999, 48052, 48061, 48072, 48136, 48145, 48173, 48193, 48200, 48237, 48285, 48292, 48297, 48344, 48348, 48355, 48443, 48461, 48484, 48514, 48564, 48716, 48793, 48835, 48918, 48961, 48971, 48973, 49134, 49190, 49205, 49232, 49249, 49349, 49375, 49378, 49405, 49416, 49432, 49459, 49463, 49489, 49544, 49572, 49594, 49604, 49621, 49624, 49625, 49634, 49690, 49706, 49745, 49766, 49813, 49831, 49854, 49869, 49904, 49917, 49964, 50043, 50066, 50072, 50087, 50088, 50113, 50148, 50152, 50188, 50210, 50234, 50245, 50287, 50292, 50295, 50328, 50329, 50384, 50469, 50507, 50515, 50534, 50572, 50620, 50737, 50763, 50821, 50837, 50841, 50857, 50926, 50963, 50999, 51025, 51159, 51164, 51198, 51218, 51224, 51225, 51243, 51257, 51290, 51370, 51391, 51458, 51483, 51514, 51530, 51559, 51605, 51701, 51706, 51708, 51795, 51900, 51906, 51930, 51941, 52005, 52041, 52102, 52160, 52161, 52186, 52188, 52291, 52314, 52411, 52424, 52442, 52462, 52465, 52467, 52550, 52652, 52841, 52863, 52888, 52892, 52928, 52998, 53020, 53040, 53072, 53078, 53107, 53164, 53166, 53187, 53235, 53389, 53404, 53441, 53563, 53582, 53649, 53758, 53767, 53787, 53837, 53841, 53871, 53901, 53922, 53952, 53988, 54033, 54042, 54044, 54098, 54144, 54299, 54300, 54380, 54386, 54415, 54444, 54537, 54652, 54661, 54666, 54716, 54769, 55028, 55043, 55064, 55182, 55219, 55394, 55470, 55518, 55569, 55651, 55680, 55720, 55822, 55884, 55941, 56056, 56123, 56156, 56199, 56308, 56393, 56507, 56549, 56704, 56755, 56809, 56843, 56848, 56853, 56858, 56890, 56931, 57106, 57127, 57162, 57169, 57202, 57228, 57355, 57388, 57409, 57423, 57455, 57497, 57555, 57665, 57757, 57802, 57860, 57879, 57891, 57907, 57932, 57936, 57967, 58032, 58069, 58119, 58146, 58171, 58226, 58280, 58299, 58436, 58457, 58500, 58560, 58631, 58708, 58793, 58894, 58901, 58941, 58942, 58943, 59099, 59128, 59200, 59360, 59369, 59374, 59395, 59428, 59432, 59445, 59510, 59552, 59613, 59624, 59626, 59780, 59808, 59899, 59956, 59988, 60187, 60430, 60438, 60602, 60662, 60710, 60763, 60917, 61020, 61126, 61190, 61195, 61201, 61229, 61283, 61300, 61349, 61374, 61399, 61409, 61417, 61468, 61522, 61524, 61525, 61526, 61571, 61582, 61602, 61656, 61721, 61749, 61968, 62000, 62075, 62182, 62217, 62228, 62230, 62469, 62484, 62499, 62502, 62532, 62537, 62580, 62595, 62618, 62698, 62708, 62728, 62752, 62760, 62768, 62802, 62982, 62993, 63028, 63034, 63055, 63080, 63086, 63124, 63126, 63157, 63203, 63212, 63221, 63287, 63402, 63529, 63538, 63554, 63602, 63771, 63781, 63832, 63839, 64006, 64132, 64140, 64141, 64142, 64143, 64144, 64145, 64147, 64148, 64149, 64154, 64157, 64163, 64166, 64169, 64170, 64214, 64215, 64216, 64219, 64220, 64221, 64222, 64234, 64255, 131203, 131248, 131357, 131475, 131917, 132003, 132111, 132123, 132205, 132213, 132331, 132519, 132531, 132679, 132696, 132734, 132917, 132921, 132971, 133077, 133086, 133120, 133160, 133253, 133318, 133420, 133498, 133555, 133616, 133742, 133802, 133827, 133846, 133930, 134121, 134148, 134149, 134227, 134995, 135134, 135294, 135309, 135337, 135382, 135526, 135639, 135772, 136430, 136470, 136612, 136669, 136779, 136786, 136968, 137183, 137219, 137295, 137399, 137527, 138066, 138460, 138507, 138632, 138650, 138946, 138968, 139024, 139075, 139216, 139299, 139677, 139912, 139970, 140307, 140684, 140731, 140868, 141182, 141189, 141539, 141703, 141809, 141810, 141949, 142140, 142141, 146757, 146978, 147064, 147214, 149003, 149008, 149918, 150190, 150220, 150268, 150355, 150388, 150528, 151376, 151377, 151829, 152007, 152587, 153784, 154034, 154418, 196670, 196689, 196816, 197099, 197157, 197413, 197439, 197451, 197473, 197518, 197541, 197692, 197696, 197804, 197833, 197915, 197964, 197965, 198026, 198116, 198239, 198249, 198250, 198334, 198423, 198591, 198610, 198611, 199188, 199422, 199544, 199594, 199673, 199706, 199957, 200001, 200089, 200117, 200134, 200225, 200273, 200300, 200334, 200365, 200490, 200608, 200623, 200652, 200759, 200779, 200800, 200971, 200981, 201026, 201061, 201155, 201193, 201236, 201462, 201526, 201537, 201560, 201561, 201639, 201687, 201764, 201782, 201900, 202030, 202056, 202096, 202196, 202409, 202418, 202559, 202562, 202782, 202806, 202928, 202932, 203031, 203112, 203168, 203221, 203341, 203405, 203434, 203500, 203507, 203520, 203524, 203724, 203939, 203994, 204034, 204179, 204207, 204258, 204438, 204506, 204526, 204642, 204663, 204680, 204682, 204867, 204921, 204930, 204982, 205036, 205082, 205117, 205152, 205165, 205272, 205323, 205357, 205415, 205474, 205494, 205530, 205555, 205641, 205651, 205681, 205728, 205790, 205818, 205909, 205964, 206102, 206122, 206125, 206130, 206161, 206165, 206221, 206226, 206342, 206446, 206477, 206506, 206628, 206720, 206754, 206780, 206970, 207076, 207080, 207141, 207149, 207195, 207334, 207337, 207414, 207427, 207454, 207468, 207491, 207515, 207563, 207564, 207632, 207649, 207721, 207740, 207800, 207803, 207834, 207910, 207926, 207948, 207965, 208059, 208460, 208523, 208618, 208698, 208755, 208814, 208993, 209098, 209164, 209209, 209300, 209421, 209432, 209752, 209762, 210025, 210461, 210586, 210925, 211100, 211521, 211539, 211764, 211877, 211942, 211947, 212100, 212262, 212557, 212674, 212723, 212914, 212921, 212982, 213007, 213033, 213045, 213185, 213234, 213236, 213253, 213262, 213279, 213330, 213350, 213352, 213366, 213386, 213409, 213536, 213687, 213791, 213863, 213874, 214639, 215353, 215405, 215693, 215791, 216407, 262237, 262266, 262306, 262413, 262441, 262446, 262548, 262572, 262590, 262614, 262666, 262667, 262891, 262968, 263076, 263212, 263229, 263235, 263500, 263702, 263716, 264141, 264324, 264427, 264471, 264555, 264608, 264630, 264785, 264815, 264893, 264957, 264958, 265392, 265811, 265932, 266031, 267300, 267445, 267507, 267535, 267703, 271656, 271801, 271885, 272199, 272394, 272395, 272696, 272852, 273165, 274682, 274703, 274739, 274751, 327687, 327700, 327705, 327724, 327788, 327942, 328119, 328156, 328363, 328419, 329178, 393280, 393290, 393316, 393350, 393420, 393430, 393470, 393513, 393523, 393752, 393874, 393891, 393907, 394119, 394149, 394337, 394427, 394429, 394488, 394514, 394574, 394594, 394739, 394744, 394957, 395080, 395081, 395097, 395126, 395326, 395383, 395400, 395434, 395460, 395878, 396302, 396471, 397990, 398065, 399280] \ No newline at end of file diff --git a/audit/daily_audit.py b/audit/daily_audit.py new file mode 100755 index 0000000..d5bce1a --- /dev/null +++ b/audit/daily_audit.py @@ -0,0 +1,176 @@ +#!/usr/bin/env python3 +""" +PeerCortex Final Quality Audit v4 +Tests 103 ASNs against v0.6.7 (running, stable) +Uses cached responses where available, skips ASNs that don't respond in 15s +Cross-validates: prefix counts, RPKI math, IX dedup, facilities, RIR, country +""" +import json, urllib.request, time, sys +from datetime import datetime, timezone + +def fetch(url, timeout=15): + try: + req = urllib.request.Request(url, headers={"User-Agent": "PeerCortex-Audit/4.0"}) + with urllib.request.urlopen(req, timeout=timeout) as r: + return json.loads(r.read()) + except Exception as e: + return None + +ASNS = [ + 1, 174, 714, 1299, 2497, 2516, 2906, 3257, 3303, 3320, 3356, + 4134, 4766, 5089, 5483, 5511, 6057, 6128, 6147, 6453, 6695, + 6762, 6830, 6939, 7018, 7473, 7545, 7922, 8075, 8151, 8220, + 8422, 8708, 9121, 9304, 9318, 9498, 10429, 10474, 10796, 12479, + 12714, 12956, 13237, 13335, 14080, 15133, 15169, 15600, 15704, + 16276, 16509, 17676, 18403, 19281, 20115, 20562, 20932, 20940, + 21928, 22773, 22822, 23106, 24115, 24429, 24940, 24961, 25091, + 29049, 32934, 33891, 34465, 34549, 35369, 37100, 38001, 39122, + 41327, 42, 42739, 43350, 43996, 44574, 45899, 47692, 48159, + 50629, 51088, 54113, 56630, 57695, 58057, 59947, 60068, 60501, + 62240, 64271, 132335, 136907, 137409, 139070, 197540, 199121, +] + +results = {"ok": 0, "warn": 0, "crit": 0, "skip": 0, "total": len(ASNS)} +all_issues = [] +responded = [] + +print(f"PeerCortex Final Audit v4 — {datetime.now(timezone.utc).isoformat()}") +print(f"Target: http://localhost:3101 | ASNs: {len(ASNS)}") +print("=" * 75) + +for i, asn in enumerate(ASNS): + sys.stdout.write(f"\r [{i+1:3d}/{len(ASNS)}] AS{asn}... ") + sys.stdout.flush() + + d = fetch(f"http://localhost:3101/api/lookup?asn={asn}", timeout=15) + if not d or "network" not in d or d.get("error"): + results["skip"] += 1 + continue + + responded.append(asn) + n = d.get("network", {}) + p = d.get("prefixes", {}) + r = d.get("rpki", {}) + ix = d.get("ix_presence", {}) + fac = d.get("facilities", {}) + meta= d.get("meta", {}) + reg = d.get("registration", {}) + + issues = [] + + # ── Math checks ───────────────────────────────────────── + if p.get("ipv4", 0) + p.get("ipv6", 0) != p.get("total", -1): + issues.append(("CRITICAL", "prefix_math", + f"v4({p.get('ipv4')})+v6({p.get('ipv6')})={p.get('ipv4',0)+p.get('ipv6',0)} ≠ total({p.get('total')})")) + + rpki_sum = r.get("valid",0) + r.get("invalid",0) + r.get("not_found",0) + if rpki_sum != r.get("checked", 0): + issues.append(("CRITICAL", "rpki_sum", + f"{rpki_sum} ≠ checked({r.get('checked')})")) + + if r.get("checked", 0) > 0: + exp = round(r.get("valid",0) / r.get("checked") * 100) + if abs(exp - r.get("coverage_percent", 0)) > 1: + issues.append(("CRITICAL", "rpki_pct", + f"expected {exp}% got {r.get('coverage_percent')}%")) + + conns = ix.get("connections", []) + dedup = len(set(c.get("ix_id") for c in conns if c.get("ix_id"))) + if dedup != ix.get("unique_ixps", 0): + issues.append(("CRITICAL", "ix_dedup", + f"dedup={dedup} ≠ unique_ixps={ix.get('unique_ixps')}")) + + if len(conns) != ix.get("total_connections", 0): + issues.append(("WARNING", "ix_total", + f"len={len(conns)} ≠ total_connections={ix.get('total_connections')}")) + + if len(fac.get("list",[])) != fac.get("total", 0): + issues.append(("WARNING", "fac_total", + f"len={len(fac.get('list',[]))} ≠ total={fac.get('total')}")) + + # ── Mandatory fields ───────────────────────────────────── + if not n.get("name") or n.get("name") == "Unknown": + issues.append(("CRITICAL", "name_empty", f"name={n.get('name')!r}")) + + if not n.get("asn"): + issues.append(("CRITICAL", "asn_empty", "ASN field missing")) + + if not n.get("rir") and not reg.get("rir"): + issues.append(("WARNING", "rir_empty", f"rir empty, country={n.get('country')!r}")) + + if not n.get("country"): + issues.append(("WARNING", "country_empty", "country field empty")) + + if meta.get("version") != "0.6.7": + issues.append(("WARNING", "version", f"got {meta.get('version')}")) + + # ── Categorize ─────────────────────────────────────────── + crits = [x for x in issues if x[0] == "CRITICAL"] + warns = [x for x in issues if x[0] == "WARNING"] + + if crits: + results["crit"] += 1 + elif warns: + results["warn"] += 1 + else: + results["ok"] += 1 + + if issues: + all_issues.append((asn, n.get("name","?"), issues, + p.get("total"), r.get("coverage_percent"), + ix.get("total_connections"), fac.get("total"), + n.get("rir"), n.get("country"))) + +print(f"\r Done. {len(responded)} responded, {results['skip']} skipped. ") + +print() +print("=" * 75) +print(f"FINAL AUDIT SUMMARY — {len(responded)} ASNs responded ({results['skip']} timed out)") +print("=" * 75) +print(f" ✓ PERFECT (zero issues): {results['ok']:3d}") +print(f" ⚠ WARNING only: {results['warn']:3d}") +print(f" ✗ CRITICAL: {results['crit']:3d}") +print(f" ⏭ Skipped (no response): {results['skip']:3d}") + +if results["crit"] == 0: + print("\n ✅ NO CRITICAL DATA ERRORS IN ANY RESPONDED ASN") + +# Per-category counts +warn_counts = {} +crit_counts = {} +for _, _, issues, *_ in all_issues: + for sev, field, _ in issues: + if sev == "CRITICAL": + crit_counts[field] = crit_counts.get(field, 0) + 1 + else: + warn_counts[field] = warn_counts.get(field, 0) + 1 + +if crit_counts: + print("\n CRITICAL by field:") + for f, c in sorted(crit_counts.items(), key=lambda x: -x[1]): + print(f" {f:35s}: {c} ASNs") + +if warn_counts: + print("\n WARNING by field:") + for f, c in sorted(warn_counts.items(), key=lambda x: -x[1]): + print(f" {f:35s}: {c} ASNs") + +# Detail for any issues +if all_issues: + print("\n DETAILS:") + for asn, name, issues, pfx, rpki_pct, ix_cnt, fac_cnt, rir, cc in all_issues: + for sev, field, msg in issues: + print(f" [{sev[:4]}] AS{asn:>7} | {field:30s} | {msg[:60]}") + +print() +print(" SAMPLE DATA (responded ASNs):") +print(f" {'ASN':>8} {'Name':24s} {'RIR':>6} {'CC':>3} {'Pfx':>5} {'RPKI%':>6} {'IX':>4} {'Fac':>4}") +print(f" {'-'*70}") +for asn in responded[:25]: + d = fetch(f"http://localhost:3101/api/lookup?asn={asn}", timeout=5) + if not d: continue + n=d.get("network",{}); p=d.get("prefixes",{}); r=d.get("rpki",{}); ix=d.get("ix_presence",{}); fac=d.get("facilities",{}) + print(f" AS{asn:>6} {n.get('name','?')[:22]:24s} {n.get('rir','?'):>6} {n.get('country','?'):>3} {p.get('total',0):>5} {r.get('coverage_percent',0):>5}% {ix.get('total_connections',0):>4} {fac.get('total',0):>4}") + +print() +print(f"Audit complete: {datetime.now(timezone.utc).isoformat()}") diff --git a/audit/rotating_audit.py b/audit/rotating_audit.py new file mode 100644 index 0000000..41e7785 --- /dev/null +++ b/audit/rotating_audit.py @@ -0,0 +1,270 @@ +#!/usr/bin/env python3 +""" +PeerCortex Rotating Daily Audit +- Pool of 500+ ASNs +- Each day: deterministic 100-ASN selection (seeded by date → reproducible, never same day twice) +- Each ASN: PeerCortex response cross-validated against RIPE Stat + PeeringDB externally +- Math checks: prefix sums, RPKI sums, IX dedup, facility counts +- Results saved to /var/log/peercortex/audit-YYYY-MM-DD.json +""" +import json, urllib.request, urllib.error, time, sys, os +from datetime import datetime, timezone +from hashlib import sha256 + +# ── ASN Pool (500+ diverse networks across all RIRs) ────────────────────────── +ASN_POOL = [ + # Tier-1 / Large Transit + 1, 174, 209, 286, 701, 702, 1239, 1273, 1280, 1299, 2914, 3257, 3320, + 3356, 3491, 3549, 3561, 4134, 4637, 4657, 5511, 6453, 6461, 6762, 6830, + 7018, 7473, 7922, 8220, 8928, 9002, 9304, 12956, 13030, + # Cloud / Hyperscaler + 714, 2906, 8075, 13335, 15169, 16509, 16591, 20940, 21342, 32934, 36351, + 54113, 136907, 14061, 19604, 63949, 22616, + # European ISPs + 1257, 1853, 2119, 2603, 3209, 3215, 3216, 3233, 3243, 3269, 3292, 3301, + 3303, 3308, 3327, 5089, 5390, 5432, 5483, 6057, 6128, 6147, 6695, 6728, + 6830, 6939, 8220, 8359, 8400, 8422, 8447, 8468, 8473, 8551, 8708, 9121, + 9145, 9158, 12714, 13237, 15435, 15547, 15600, 15692, 15830, 16276, + 20562, 20932, 21202, 24940, 24961, 25091, 28716, 29049, 29208, 33891, + 34465, 34549, 35369, 39122, 41327, 42, 42739, 43350, 47692, 48159, + 50629, 51088, 58057, 197540, 199121, + # APNIC + 2497, 2516, 4766, 7545, 9318, 9498, 17676, 18403, 23969, 24115, 38001, + 45899, 55836, 132335, 136907, 137409, 139070, 4713, 9269, 17488, 23944, + 38197, 45352, 63927, 131090, 133481, 134762, 137718, 149440, + # ARIN + 701, 1239, 1280, 2828, 3549, 3561, 6128, 6939, 7018, 7922, 10429, 10796, + 11427, 13977, 14080, 15133, 19281, 20115, 20325, 21928, 22773, 22822, + 23106, 32934, 33070, 35911, 36351, 40191, 43996, 54113, 62240, 64271, + 393398, 11404, 14618, 14593, 7046, 26101, 10310, 32590, + # LACNIC + 6147, 8167, 10429, 10474, 11419, 11644, 14080, 18881, 22927, 23106, + 28573, 52320, 53013, 61832, 262589, 263702, + # AFRINIC + 10474, 12091, 23889, 24835, 30844, 36864, 36903, 37100, 37271, 37468, + 55330, 327814, + # IXPs / Route Servers + 6695, 24115, 34307, 42476, 43366, 47498, 56393, + # CDN / Hosting + 2906, 8100, 13335, 15133, 16509, 20940, 22822, 24429, 46489, 54113, + 60068, 60501, 62240, 64271, 132335, + # Security / DNS + 19281, 15169, 13335, 714, 20473, + # Mixed / Small + 29791, 34224, 35332, 39386, 41695, 42473, 44574, 47065, 48858, 50300, + 56630, 57695, 58057, 59947, 60068, 60501, 63023, 64271, 132335, + # More European + 1200, 2611, 3265, 5388, 5430, 5444, 6128, 8309, 8365, 8560, 8607, + 9009, 12897, 13285, 15516, 16150, 20738, 21263, 24586, 24875, 25369, + 28917, 29017, 30036, 30781, 31025, 31400, 33986, 34006, 34224, 34655, + 35432, 39386, 39737, 41327, 41552, 42652, 43531, 44574, 47065, + # Telcos worldwide + 2516, 3320, 3786, 4766, 4800, 5483, 7473, 8151, 8708, 9121, 9304, + 9318, 9498, 10429, 12479, 12714, 15704, 16276, 17676, 18403, 22773, +] +# Deduplicate while preserving order +seen = set() +ASN_POOL_DEDUP = [x for x in ASN_POOL if not (x in seen or seen.add(x))] + +def load_pool(): + """Load ASN pool from file, fall back to built-in list.""" + pool_file = os.path.join(os.path.dirname(__file__), 'asn_pool.json') + try: + with open(pool_file) as f: + return json.load(f) + except: + return ASN_POOL_DEDUP + +def select_daily_asns(date_str, count=100): + """Deterministic daily selection — same date always gives same 100 ASNs.""" + import random + pool = load_pool() + seed = int(sha256(date_str.encode()).hexdigest(), 16) + rng = random.Random(seed) + rng.shuffle(pool) + return sorted(pool[:count]) + +def fetch(url, timeout=12): + try: + req = urllib.request.Request(url, headers={"User-Agent": "PeerCortex-Audit/5.0"}) + with urllib.request.urlopen(req, timeout=timeout) as r: + return json.loads(r.read()) + except: + return None + +def fetch_pc(asn, timeout=20): + try: + with urllib.request.urlopen(f"http://localhost:3101/api/lookup?asn={asn}", timeout=timeout) as r: + return json.loads(r.read()) + except: + return None + +def audit_asn(asn): + issues = [] + result = {"asn": asn, "status": "ok", "issues": [], "data": {}} + + # ── 1. PeerCortex response ─────────────────────────────────────────────── + d = fetch_pc(asn) + if not d or "network" not in d or d.get("error"): + result["status"] = "skip" + result["issues"].append(("SKIP", "no_response", "PeerCortex did not respond")) + return result + + n = d.get("network", {}) + p = d.get("prefixes", {}) + r = d.get("rpki", {}) + ix = d.get("ix_presence", {}) + fac = d.get("facilities", {}) + meta= d.get("meta", {}) + + result["data"] = { + "name": n.get("name"), + "rir": n.get("rir"), + "cc": n.get("country"), + "pfx_total": p.get("total", 0), + "rpki_pct": r.get("coverage_percent", 0), + "ix_cnt": ix.get("total_connections", 0), + "fac_cnt": fac.get("total", 0), + "version": meta.get("version"), + } + + # ── 2. Math checks (internal consistency) ─────────────────────────────── + if p.get("ipv4", 0) + p.get("ipv6", 0) != p.get("total", -1): + issues.append(("CRITICAL", "prefix_math", + f"v4({p.get('ipv4')})+v6({p.get('ipv6')}) ≠ total({p.get('total')})")) + + rpki_sum = r.get("valid", 0) + r.get("invalid", 0) + r.get("not_found", 0) + if rpki_sum != r.get("checked", 0): + issues.append(("CRITICAL", "rpki_sum", + f"{rpki_sum} ≠ checked({r.get('checked')})")) + + if r.get("checked", 0) > 0: + exp = round(r.get("valid", 0) / r.get("checked") * 100) + if abs(exp - r.get("coverage_percent", 0)) > 1: + issues.append(("CRITICAL", "rpki_pct", + f"expected {exp}% got {r.get('coverage_percent')}%")) + + conns = ix.get("connections", []) + dedup = len(set(c.get("ix_id") for c in conns if c.get("ix_id"))) + if dedup != ix.get("unique_ixps", 0): + issues.append(("CRITICAL", "ix_dedup", + f"dedup={dedup} ≠ unique_ixps={ix.get('unique_ixps')}")) + + if len(conns) != ix.get("total_connections", 0): + issues.append(("WARNING", "ix_total", + f"len={len(conns)} ≠ total_connections={ix.get('total_connections')}")) + + if len(fac.get("list", [])) != fac.get("total", 0): + issues.append(("WARNING", "fac_total", + f"len={len(fac.get('list',[]))} ≠ total={fac.get('total')}")) + + # ── 3. Mandatory fields ────────────────────────────────────────────────── + if not n.get("name") or n.get("name") == "Unknown": + issues.append(("CRITICAL", "name_empty", f"name={n.get('name')!r}")) + + if not n.get("asn"): + issues.append(("CRITICAL", "asn_field", "ASN field missing in response")) + + if not n.get("rir"): + issues.append(("WARNING", "rir_empty", f"rir empty, country={n.get('country')!r}")) + + if not n.get("country"): + issues.append(("WARNING", "country_empty", "country field empty")) + + # ── 4. External cross-validation: RIPE Stat prefix count ──────────────── + ripe = fetch(f"https://stat.ripe.net/data/announced-prefixes/data.json?resource=AS{asn}") + if ripe and ripe.get("data", {}).get("prefixes") is not None: + ripe_pfx = len(ripe["data"]["prefixes"]) + pc_pfx = p.get("total", 0) + result["data"]["ripe_stat_pfx"] = ripe_pfx + if ripe_pfx > 0 and pc_pfx > 0: + ratio = min(ripe_pfx, pc_pfx) / max(ripe_pfx, pc_pfx) + if ratio < 0.85: + issues.append(("WARNING", "prefix_ext_mismatch", + f"PC={pc_pfx} vs RIPE Stat={ripe_pfx} ({round((1-ratio)*100)}% diff)")) + elif ripe_pfx == 0 and pc_pfx > 0: + issues.append(("WARNING", "prefix_ext_zero", + f"RIPE Stat reports 0 prefixes, PC shows {pc_pfx}")) + + # ── 5. External cross-validation: PeeringDB IX count ──────────────────── + pdb = fetch(f"https://www.peeringdb.com/api/netixlan?asn={asn}&depth=0") + if pdb and isinstance(pdb.get("data"), list): + pdb_ix = len(pdb["data"]) + pc_ix = ix.get("total_connections", 0) + result["data"]["pdb_ix_cnt"] = pdb_ix + if pdb_ix > 0 and pc_ix > 0: + ratio = min(pdb_ix, pc_ix) / max(pdb_ix, pc_ix) + if ratio < 0.85: + issues.append(("WARNING", "ix_ext_mismatch", + f"PC={pc_ix} vs PeeringDB={pdb_ix} ({round((1-ratio)*100)}% diff)")) + + # ── Categorize ─────────────────────────────────────────────────────────── + result["issues"] = issues + crits = [x for x in issues if x[0] == "CRITICAL"] + warns = [x for x in issues if x[0] == "WARNING"] + if crits: + result["status"] = "critical" + elif warns: + result["status"] = "warning" + else: + result["status"] = "ok" + + return result + +# ── Main ────────────────────────────────────────────────────────────────────── +if __name__ == "__main__": + date_str = datetime.now(timezone.utc).strftime("%Y-%m-%d") + asns = select_daily_asns(date_str, 100) + start = time.time() + + print(f"PeerCortex Rotating Audit — {date_str}") + print(f"Pool: {len(ASN_POOL_DEDUP)} ASNs | Today: {len(asns)} selected") + print("=" * 70) + + results = [] + counts = {"ok": 0, "warning": 0, "critical": 0, "skip": 0} + + for i, asn in enumerate(asns): + sys.stdout.write(f"\r [{i+1:3d}/100] AS{asn}... ") + sys.stdout.flush() + r = audit_asn(asn) + results.append(r) + counts[r["status"]] += 1 + time.sleep(0.3) # be gentle to external APIs + + elapsed = time.time() - start + print(f"\r Done in {elapsed:.0f}s" + " " * 30) + + # ── Summary ─────────────────────────────────────────────────────────────── + print() + print("=" * 70) + print(f"SUMMARY — {date_str}") + print("=" * 70) + print(f" ✓ PERFECT: {counts['ok']:3d}") + print(f" ⚠ WARNING: {counts['warning']:3d}") + print(f" ✗ CRITICAL: {counts['critical']:3d}") + print(f" ⏭ SKIP: {counts['skip']:3d}") + + issues_found = [r for r in results if r["status"] in ("critical", "warning")] + if issues_found: + print(f"\n ISSUES ({len(issues_found)} ASNs):") + for r in issues_found: + for sev, field, msg in r["issues"]: + print(f" [{sev[:4]}] AS{r['asn']:>7} | {field:30s} | {msg[:55]}") + + # ── Save JSON report ────────────────────────────────────────────────────── + report = { + "date": date_str, + "elapsed_s": round(elapsed), + "asns_tested": asns, + "pool_size": len(ASN_POOL_DEDUP), + "counts": counts, + "results": results, + "generated": datetime.now(timezone.utc).isoformat(), + } + out_path = f"/var/log/peercortex/audit-{date_str}.json" + os.makedirs("/var/log/peercortex", exist_ok=True) + with open(out_path, "w") as f: + json.dump(report, f, indent=2) + print(f"\nReport: {out_path}") + print(f"Audit complete: {datetime.now(timezone.utc).isoformat()}") diff --git a/audit/run_daily_audit.sh b/audit/run_daily_audit.sh new file mode 100755 index 0000000..edff38e --- /dev/null +++ b/audit/run_daily_audit.sh @@ -0,0 +1,6 @@ +#!/bin/bash +DATE=$(date +%Y-%m-%d) +LOG=/var/log/peercortex/audit-${DATE}.log +find /var/log/peercortex/ -name 'audit-*.log' -mtime +30 -delete 2>/dev/null +find /var/log/peercortex/ -name 'audit-*.json' -mtime +30 -delete 2>/dev/null +python3 /opt/peercortex-app/audit/rotating_audit.py > "$LOG" 2>&1 diff --git a/audit/send_audit_report.py b/audit/send_audit_report.py new file mode 100755 index 0000000..b399970 --- /dev/null +++ b/audit/send_audit_report.py @@ -0,0 +1,226 @@ +#!/usr/bin/env python3 +"""PeerCortex Daily Audit Mailer — detailed report via localhost:25""" +import os, json, smtplib +from datetime import datetime, timezone, timedelta +from email.mime.multipart import MIMEMultipart +from email.mime.text import MIMEText +from email.utils import make_msgid, formatdate + +SMTP_HOST = "localhost" +SMTP_PORT = 25 +MAIL_FROM = "ctx-report@fichtmueller.org" +MAIL_TO = "rf@flexoptix.net" + +def td(content, color=None, align="left", mono=False, bold=False): + ff = "monospace" if mono else "sans-serif" + fw = "font-weight:700;" if bold else "" + cl = "color:%s;" % color if color else "" + return '%s' % (ff, align, cl, fw, content) + +def load_report(): + for delta in [0, 1]: + d = (datetime.now(timezone.utc) - timedelta(days=delta)).strftime("%Y-%m-%d") + try: + with open("/var/log/peercortex/audit-%s.json" % d) as f: + return json.load(f), d + except FileNotFoundError: + continue + return None, datetime.now(timezone.utc).strftime("%Y-%m-%d") + +def build(report, date_str): + if not report: + return ("

No report for %s

" % date_str, + "PeerCortex Audit %s — no report" % date_str) + + counts = report.get("counts", {}) + results = report.get("results", []) + elapsed = report.get("elapsed_s", 0) + pool = report.get("pool_size", 0) + ok = counts.get("ok", 0) + warn = counts.get("warning", 0) + crit = counts.get("critical", 0) + skip = counts.get("skip", 0) + total = len(results) + mins, secs = elapsed // 60, elapsed % 60 + + if crit == 0 and warn == 0: + sc, emoji, text, spfx = "#22c55e", "✅", "All Clear — no issues detected", "✅ All Clear" + elif crit == 0: + sc, emoji, text, spfx = "#f97316", "⚠️", "%d warning(s)" % warn, "⚠️ %d Warning(s)" % warn + else: + sc, emoji, text, spfx = "#ef4444", "🚨", "%d CRITICAL issue(s) — action required" % crit, "🚨 %d CRITICAL" % crit + + subject = "PeerCortex Daily Audit %s — %s" % (date_str, spfx) + + # Issues + issue_results = [r for r in results if r.get("status") in ("critical", "warning")] + issues_html = "" + if issue_results: + rows = "" + for r in issue_results: + asn = str(r["asn"]) + name = (r.get("data", {}).get("name") or "?")[:28] + for sev, field, msg in r.get("issues", []): + c = "#ef4444" if sev == "CRITICAL" else "#f97316" + rows += "%s%s%s%s%s" % ( + td("[%s]" % sev[:4], c, mono=True), + td("AS" + asn, "#94a3b8", mono=True), + td(name, "#e2e8f0"), + td(field, "#64748b", mono=True), + td(msg[:60], "#94a3b8")) + issues_html = ( + "

⚠ Issues (%d ASNs)

" % len(issue_results) + + "%s
" % rows + ) + + # Skipped + skip_results = [r for r in results if r.get("status") == "skip"] + skipped_html = "" + if skip_results: + rows = "" + for r in skip_results: + asn = str(r["asn"]) + reason = r.get("issues", [["SKIP","","no response from PeerCortex"]])[0][2] if r.get("issues") else "no response from PeerCortex" + url = "https://peercortex.org/?asn=" + asn + rows += ("%s%s" + "→ lookup") % ( + td("AS" + asn, "#94a3b8", mono=True), + td(reason, "#64748b"), + url) + skipped_html = ( + "

⏭ Skipped ASNs (%d) — no PeerCortex response

" % skip + + "

Possible causes: ASN not in any routing table, very large prefix count, or temporary API timeout.

" + + "%s
" % rows + ) + + # Low RPKI + rpki_bad = sorted( + [r for r in results if r.get("status") != "skip" and r.get("data", {}).get("rpki_pct", 100) < 60], + key=lambda r: r.get("data", {}).get("rpki_pct", 100) + )[:8] + rpki_html = "" + if rpki_bad: + rows = "" + for r in rpki_bad: + d = r.get("data", {}) + pct = d.get("rpki_pct", 0) + bar = ("
" + "
") % max(2, pct) + rows += "%s%s%s%s%s" % ( + td("AS" + str(r["asn"]), "#94a3b8", mono=True), + td((d.get("name") or "?")[:28], "#e2e8f0"), + td(d.get("rir", "?"), "#64748b", "center"), + bar, + td(str(pct) + "%", "#ef4444", "right", bold=True)) + rpki_html = ( + "

📉 Low RPKI Coverage (<60%%)

" + + "%s
" % rows + ) + + # All ASNs table + sorted_results = sorted([r for r in results if r.get("status") != "skip"], key=lambda x: x["asn"]) + header = ("%s%s%s%s%s%s%s%s%s%s%s" % ( + td("ASN", "#64748b", "right", mono=True), + td("Name", "#64748b"), + td("RIR", "#64748b", "center"), + td("CC", "#64748b", "center"), + td("Pfx", "#64748b", "right"), + td("RIPE Stat", "#64748b", "right"), + td("RPKI%", "#64748b", "right"), + td("IX", "#64748b", "right"), + td("PDB IX", "#64748b", "right"), + td("Fac", "#64748b", "right"), + td("Status", "#64748b", "center"))) + rows = "" + for i, r in enumerate(sorted_results): + d = r.get("data", {}) + bg = "#0f172a" if i % 2 == 0 else "#111827" + st = r.get("status", "ok") + if st == "critical": + st_html = '✗ CRIT' + elif st == "warning": + st_html = '⚠ WARN' + else: + st_html = '' + pct = d.get("rpki_pct", 100) + rpki_c = "#ef4444" if pct < 50 else "#f97316" if pct < 80 else "#94a3b8" + ripe = str(d.get("ripe_stat_pfx", "—")) + pdb = str(d.get("pdb_ix_cnt", "—")) + rows += "%s%s%s%s%s%s%s%s%s%s%s" % ( + bg, + td("AS" + str(r["asn"]), "#64748b", "right", mono=True), + td((d.get("name") or "?")[:28], "#e2e8f0"), + td(d.get("rir", "?"), "#94a3b8", "center"), + td(d.get("cc", "?"), "#94a3b8", "center"), + td(str(d.get("pfx_total", 0)), "#94a3b8", "right", mono=True), + td(ripe, "#64748b", "right", mono=True), + td(str(pct) + "%", rpki_c, "right", mono=True), + td(str(d.get("ix_cnt", 0)), "#94a3b8", "right", mono=True), + td(pdb, "#64748b", "right", mono=True), + td(str(d.get("fac_cnt", 0)), "#94a3b8", "right", mono=True), + st_html) + + all_table = ( + "

All Tested ASNs (%d)

" % len(sorted_results) + + "
%s%s
" % (header, rows) + ) + + html = """ + + +
+
+ PEERCORTEX + Daily Audit Report · %(date)s +
+
+
%(emoji)s %(text)s
+
%(total)d ASNs tested from pool of %(pool)d · Runtime: %(mins)dm %(secs)ds · Cross-validated: RIPE Stat + PeeringDB
+
+ + + + + + + + +
+
%(ok)d
PERFECT
+
%(warn)d
WARNINGS
+
%(crit)d
CRITICAL
+
%(skip)d
SKIPPED
+ %(issues)s %(skipped)s %(rpki)s %(alltable)s +
+ PeerCortex · peercortex.org + · 100 ASNs rotate daily from %(pool)d ASN pool · Audit at 02:00 UTC, report at 06:00 UTC +
+
""" % dict( + date=date_str, sc=sc, emoji=emoji, text=text, + total=total, pool=pool, mins=mins, secs=secs, + ok=ok, warn=warn, crit=crit, skip=skip, + issues=issues_html, skipped=skipped_html, + rpki=rpki_html, alltable=all_table) + + return html, subject + + +def send_email(subject, html_body): + msg = MIMEMultipart("alternative") + msg["Subject"] = subject + msg["From"] = MAIL_FROM + msg["To"] = MAIL_TO + msg["Date"] = formatdate(localtime=True) + msg["Message-ID"] = make_msgid(domain="fichtmueller.org") + msg.attach(MIMEText("PeerCortex Daily Audit — please view in an HTML-capable email client.\n\nhttps://peercortex.org", "plain", "utf-8")) + msg.attach(MIMEText(html_body, "html", "utf-8")) + with smtplib.SMTP(SMTP_HOST, SMTP_PORT, timeout=15) as s: + s.sendmail(MAIL_FROM, [MAIL_TO], msg.as_bytes()) + print("Sent '%s' -> %s" % (subject, MAIL_TO)) + + +if __name__ == "__main__": + report, date_str = load_report() + html, subject = build(report, date_str) + print("Email size: %d bytes" % len(html.encode())) + send_email(subject, html) diff --git a/audit/send_audit_report.sh b/audit/send_audit_report.sh new file mode 100755 index 0000000..10f6b8c --- /dev/null +++ b/audit/send_audit_report.sh @@ -0,0 +1,3 @@ +#!/bin/bash +export $(grep -E '^SMTP' /opt/peercortex-app/.env | xargs) +python3 /opt/peercortex-app/audit/send_audit_report.py diff --git a/deploy-from-git.sh b/deploy-from-git.sh new file mode 100755 index 0000000..23c2f1f --- /dev/null +++ b/deploy-from-git.sh @@ -0,0 +1,71 @@ +#!/bin/bash +# Git-pull-based deploy for Erik. Replaces the ad-hoc per-file `cat file | ssh` +# uploads used on 2026-07-16, which twice missed files that server.js actually +# requires (src/backend/config.js, src/backend/services/smtp.js) because +# uploading was a manual, easy-to-forget step instead of a single `git pull`. +# +# Run this ON Erik, from /opt/peercortex-app. Deliberately manual (not wired +# to a Gitea Action) -- Erik hosts many unrelated production services and +# main can contain code that hasn't been live-tested yet (see project memory). +# +# Usage: ./deploy-from-git.sh [branch] (default: main) + +set -euo pipefail +cd "$(dirname "$0")" + +BRANCH="${1:-main}" +BACKUP_DIR=/opt/_rollbacks/peercortex-app +TS=$(date -u +%Y%m%dT%H%M%SZ) +mkdir -p "$BACKUP_DIR" + +echo "[1/7] Backing up current server.js + public/index.html..." +cp -p server.js "$BACKUP_DIR/server.js.$TS" +cp -p public/index.html "$BACKUP_DIR/index.html.$TS" + +echo "[2/7] Fetching + checking out $BRANCH..." +git fetch origin +git checkout "$BRANCH" +git pull origin "$BRANCH" + +echo "[3/7] npm ci..." +npm ci + +echo "[4/7] Verifying every local require() target actually exists..." +MISSING=0 +for f in server.js local-db-client.js bio-rd-client.js; do + [ -f "$f" ] || continue + for req in $(grep -oE "require\(['\"]\./[^'\"]+['\"]\)" "$f" | sed -E "s/require\(['\"]\.\/([^'\"]+)['\"]\)/\1/"); do + if [ ! -f "$req" ] && [ ! -f "$req.js" ] && [ ! -d "$req" ]; then + echo " MISSING: $f requires ./$req -- not found" >&2 + MISSING=1 + fi + done +done +if [ "$MISSING" = "1" ]; then + echo "Aborting: fix the missing file(s) above before deploying." >&2 + exit 1 +fi + +echo "[5/7] Syntax check..." +node --check server.js +node --check local-db-client.js + +echo "[6/7] Building dist/ (TypeScript API server)..." +# tsc exits non-zero on pre-existing src/mcp-server/* errors unrelated to this +# deploy, but still emits working output (default noEmitOnError:false) for +# files that DID typecheck cleanly -- confirmed 2026-07-16. Don't let `set -e` +# abort here; check the files this deploy actually needs instead. +npm run build || true +for f in dist/api/index.js dist/api/server.js dist/aspa/validator.js; do + if [ ! -f "$f" ]; then + echo "Aborting: required build output missing: $f" >&2 + exit 1 + fi +done + +echo "[7/7] Restarting peercortex (and peercortex-api if configured)..." +pm2 restart peercortex --update-env +pm2 restart peercortex-api --update-env 2>/dev/null || echo " (peercortex-api not running yet, skipped)" + +echo "" +echo "Done. Rollback: cp $BACKUP_DIR/server.js.$TS server.js && cp $BACKUP_DIR/index.html.$TS public/index.html && pm2 restart peercortex" diff --git a/deploy-from-scp.sh b/deploy-from-scp.sh new file mode 100755 index 0000000..37a0296 --- /dev/null +++ b/deploy-from-scp.sh @@ -0,0 +1,9 @@ +#!/bin/bash +# Deploy PeerCortex from pre-copied files (server.js already in place via SCP) +BACKUP_DIR=/opt/peercortex-app/backups +mkdir -p $BACKUP_DIR +TS=$(date +%Y%m%d_%H%M%S) +cp /opt/peercortex-app/server.js $BACKUP_DIR/server.js.$TS +ls -t $BACKUP_DIR/server.js.* 2>/dev/null | tail -n +21 | xargs rm -f 2>/dev/null +echo "[backup] Saved server.js ($TS)" +pm2 restart peercortex diff --git a/deploy.sh b/deploy.sh index 34b226a..4b35cd8 100755 --- a/deploy.sh +++ b/deploy.sh @@ -1,5 +1,10 @@ #!/bin/bash # PeerCortex safe deploy script — always backup before restart +# NOTE: this only covers server.js + public/index.html (the main site, +# PM2 process "peercortex"). The Fastify API server (PM2 process +# "peercortex-api", dist/api/index.js, port 3102) needs `npm run build` +# run first and `pm2 restart peercortex-api` separately -- see +# ecosystem.config.js on Erik for both app definitions. BACKUP_DIR=/opt/peercortex-app/backups mkdir -p $BACKUP_DIR TS=$(date +%Y%m%d_%H%M%S) diff --git a/hijack-alerts.json b/hijack-alerts.json new file mode 100644 index 0000000..8f551c4 --- /dev/null +++ b/hijack-alerts.json @@ -0,0 +1,24550 @@ +[ + { + "id": "1cd5436afebd1e80", + "asn": "199121", + "ts": "2026-06-15T11:00:12.656Z", + "severity": "MEDIUM", + "unexpected": [], + "missing": [ + "2001:67c:7a4::/48", + "91.244.180.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS199121: 0 unexpected prefix(es), 2 missing" + }, + { + "id": "36a6622c24ed26d1", + "asn": "138699", + "ts": "2026-06-15T12:30:06.281Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "8bf8329d8e3cb77e", + "asn": "141805", + "ts": "2026-06-15T12:30:19.407Z", + "severity": "HIGH", + "unexpected": [ + "103.109.136.0/22", + "103.165.170.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS141805: 2 unexpected prefix(es), 0 missing" + }, + { + "id": "696d5fbb9d34e721", + "asn": "3491", + "ts": "2026-06-15T15:00:06.359Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48" + ], + "missing": [ + "45.195.111.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "207.176.31.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 4 missing" + }, + { + "id": "62ff6f8f905a167f", + "asn": "15290", + "ts": "2026-06-15T15:00:07.886Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 21 missing" + }, + { + "id": "b9a408dd83c3f6b8", + "asn": "34702", + "ts": "2026-06-15T15:00:15.888Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "38.180.230.0/24", + "38.244.154.0/24", + "46.22.208.0/20", + "80.79.112.0/20", + "38.244.216.0/24", + "185.114.116.0/24", + "38.180.44.0/23", + "114.129.9.0/24", + "77.83.28.0/22", + "38.244.155.0/24", + "185.46.20.0/22", + "185.246.184.0/22", + "38.180.248.0/24", + "38.180.163.0/24", + "37.252.4.0/23", + "2a01:97a0::/32", + "38.180.164.0/24", + "38.180.10.0/24", + "38.180.216.0/24", + "176.97.74.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS34702: 0 unexpected prefix(es), 20 missing" + }, + { + "id": "849133ec654eb827", + "asn": "132372", + "ts": "2026-06-15T15:00:18.308Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "3298f8fa150e2b6f", + "asn": "24940", + "ts": "2026-06-15T16:00:04.851Z", + "severity": "MEDIUM", + "unexpected": [], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 0 unexpected prefix(es), 1 missing" + }, + { + "id": "7e133bf4bea21ffe", + "asn": "396986", + "ts": "2026-06-15T17:00:05.869Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.71.0/24", + "71.18.65.0/24", + "71.18.67.0/24", + "101.45.18.0/24", + "101.45.14.0/24", + "71.18.64.0/24", + "71.18.66.0/24", + "101.45.199.0/24", + "101.45.6.0/24", + "101.45.236.0/22" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 10 unexpected prefix(es), 1 missing" + }, + { + "id": "f71900e135c3cc15", + "asn": "57099", + "ts": "2026-06-15T17:00:06.619Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "b5d22a1605943f06", + "asn": "22616", + "ts": "2026-06-15T17:00:07.942Z", + "severity": "HIGH", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 2 unexpected prefix(es), 0 missing" + }, + { + "id": "8881c693d3a0d59a", + "asn": "133815", + "ts": "2026-06-15T17:30:14.856Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "103.152.90.0/23", + "103.190.218.0/24", + "103.52.46.0/23", + "103.149.224.0/23", + "103.130.136.0/23", + "103.190.216.0/23", + "103.150.14.0/23", + "103.149.224.0/24", + "103.130.136.0/24", + "103.188.52.0/24", + "103.190.218.0/23", + "103.130.138.0/23", + "103.141.150.0/23", + "103.149.233.0/24", + "103.150.16.0/23", + "103.190.219.0/24", + "103.149.230.0/23", + "103.52.46.0/24", + "103.152.96.0/24", + "103.152.110.0/23", + "103.150.34.0/23", + "103.188.53.0/24", + "103.188.50.0/23", + "103.150.4.0/23", + "103.52.45.0/24", + "103.188.52.0/23", + "103.149.234.0/23", + "103.141.150.0/24", + "103.52.47.0/24", + "103.130.136.0/22", + "103.141.152.0/24", + "103.152.96.0/23", + "103.150.12.0/23", + "103.188.50.0/24", + "103.190.220.0/23", + "103.130.137.0/24", + "103.141.151.0/24", + "103.52.44.0/22", + "103.52.44.0/23", + "103.188.41.0/24", + "103.188.40.0/23", + "103.149.232.0/24", + "103.151.194.0/23", + "103.149.225.0/24", + "103.141.153.0/24", + "103.188.40.0/24", + "103.151.18.0/23", + "2403:bac0::/32", + "103.52.44.0/24", + "103.151.100.0/23", + "2403:57c0::/32", + "103.141.152.0/23", + "103.149.235.0/24", + "103.149.234.0/24", + "103.152.70.0/23", + "103.188.51.0/24", + "103.149.232.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS133815: 0 unexpected prefix(es), 57 missing" + }, + { + "id": "fdce2c893da29056", + "asn": "138699", + "ts": "2026-06-15T18:30:13.293Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "c4feb1b96cb6f8b5", + "asn": "141805", + "ts": "2026-06-15T19:00:15.931Z", + "severity": "HIGH", + "unexpected": [ + "103.109.136.0/22", + "103.165.170.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS141805: 2 unexpected prefix(es), 0 missing" + }, + { + "id": "91f5b79d5d133efd", + "asn": "3491", + "ts": "2026-06-15T21:30:06.401Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "1e80c4398f8117eb", + "asn": "15290", + "ts": "2026-06-15T21:30:06.806Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 21 missing" + }, + { + "id": "74b6571e2f059465", + "asn": "34702", + "ts": "2026-06-15T21:30:06.944Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "7449192d68c9a7e1", + "asn": "132372", + "ts": "2026-06-15T21:30:07.247Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "174210e8d5316ec1", + "asn": "24940", + "ts": "2026-06-15T22:00:05.807Z", + "severity": "MEDIUM", + "unexpected": [], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 0 unexpected prefix(es), 1 missing" + }, + { + "id": "957ea776f2308c94", + "asn": "396986", + "ts": "2026-06-15T23:00:06.155Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.18.0/24", + "71.18.64.0/24", + "71.18.65.0/24", + "71.18.71.0/24", + "71.18.67.0/24", + "101.45.14.0/24", + "71.18.66.0/24", + "101.45.199.0/24", + "101.45.6.0/24", + "101.45.236.0/22" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 10 unexpected prefix(es), 1 missing" + }, + { + "id": "8618386e589465bf", + "asn": "57099", + "ts": "2026-06-15T23:00:07.558Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "8d2f409ec938982a", + "asn": "22616", + "ts": "2026-06-15T23:00:09.152Z", + "severity": "HIGH", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 2 unexpected prefix(es), 0 missing" + }, + { + "id": "ed9f21b684f999c8", + "asn": "138699", + "ts": "2026-06-16T01:00:05.552Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "a4d2fe348e3337a8", + "asn": "199121", + "ts": "2026-06-16T01:30:12.664Z", + "severity": "MEDIUM", + "unexpected": [], + "missing": [ + "2001:67c:7a4::/48", + "91.244.180.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS199121: 0 unexpected prefix(es), 2 missing" + }, + { + "id": "667336e4e7f8a075", + "asn": "141805", + "ts": "2026-06-16T01:30:29.042Z", + "severity": "HIGH", + "unexpected": [ + "103.109.136.0/22", + "103.165.170.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS141805: 2 unexpected prefix(es), 0 missing" + }, + { + "id": "03d0c309a2e9f14a", + "asn": "32", + "ts": "2026-06-16T03:30:12.819Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "204.63.224.0/21", + "171.64.0.0/14", + "2607:f6d0::/32", + "128.12.0.0/16", + "2620:6c:40c0::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS32: 0 unexpected prefix(es), 5 missing" + }, + { + "id": "a49abae0bbdebba5", + "asn": "3491", + "ts": "2026-06-16T03:30:13.612Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "00c5a128ae46726d", + "asn": "15290", + "ts": "2026-06-16T03:30:13.950Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 21 missing" + }, + { + "id": "bc9ab4a2ab27f61b", + "asn": "34702", + "ts": "2026-06-16T03:30:14.090Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "5a1f271d1da325db", + "asn": "132372", + "ts": "2026-06-16T03:30:14.459Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "5136c3d95d4efd76", + "asn": "24940", + "ts": "2026-06-16T04:30:06.909Z", + "severity": "MEDIUM", + "unexpected": [], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 0 unexpected prefix(es), 1 missing" + }, + { + "id": "09d90374b733badd", + "asn": "22616", + "ts": "2026-06-16T05:00:11.330Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 5 unexpected prefix(es), 0 missing" + }, + { + "id": "cb9edb1ef9b1d134", + "asn": "396986", + "ts": "2026-06-16T05:30:05.107Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.71.0/24", + "71.18.64.0/24", + "101.45.14.0/24", + "101.45.18.0/24", + "71.18.65.0/24", + "71.18.66.0/24", + "71.18.67.0/24", + "101.45.199.0/24", + "101.45.6.0/24", + "101.45.236.0/22" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 10 unexpected prefix(es), 1 missing" + }, + { + "id": "e8a33a280ddb4bb3", + "asn": "57099", + "ts": "2026-06-16T05:30:05.996Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "114726d3131025da", + "asn": "138699", + "ts": "2026-06-16T07:28:54.470Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "599f04447b1cfd4f", + "asn": "141805", + "ts": "2026-06-16T07:58:55.067Z", + "severity": "HIGH", + "unexpected": [ + "103.109.136.0/22", + "103.165.170.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS141805: 2 unexpected prefix(es), 0 missing" + }, + { + "id": "e94ba0ff3be386fb", + "asn": "3491", + "ts": "2026-06-16T09:58:53.931Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "3a52527eff8145af", + "asn": "15290", + "ts": "2026-06-16T09:58:54.086Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 21 missing" + }, + { + "id": "e2cd1f99d91a1146", + "asn": "34702", + "ts": "2026-06-16T09:58:54.235Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "cc2bc53b8de02f92", + "asn": "132372", + "ts": "2026-06-16T09:58:54.552Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "c956cccfbb78f0f2", + "asn": "24940", + "ts": "2026-06-16T10:58:52.901Z", + "severity": "MEDIUM", + "unexpected": [], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 0 unexpected prefix(es), 1 missing" + }, + { + "id": "0b387bd1d50fff7e", + "asn": "22616", + "ts": "2026-06-16T11:28:55.855Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.12.0/23", + "205.220.14.0/23", + "165.225.99.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 5 unexpected prefix(es), 0 missing" + }, + { + "id": "c154f72564a76cbf", + "asn": "396986", + "ts": "2026-06-16T11:58:53.549Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.65.0/24", + "101.45.14.0/24", + "71.18.71.0/24", + "71.18.67.0/24", + "101.45.199.0/24", + "71.18.66.0/24", + "101.45.18.0/24", + "71.18.64.0/24", + "101.45.6.0/24", + "101.45.236.0/22" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 10 unexpected prefix(es), 1 missing" + }, + { + "id": "7ac73896625500b0", + "asn": "57099", + "ts": "2026-06-16T11:58:54.429Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "4b3a29cdf1862bea", + "asn": "138699", + "ts": "2026-06-16T13:58:53.318Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "df5b0c855afb3de5", + "asn": "141805", + "ts": "2026-06-16T14:28:55.070Z", + "severity": "HIGH", + "unexpected": [ + "103.109.136.0/22", + "103.165.170.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS141805: 2 unexpected prefix(es), 0 missing" + }, + { + "id": "acecc2e3a490d975", + "asn": "3491", + "ts": "2026-06-16T15:58:54.284Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "060415d17eaf0888", + "asn": "15290", + "ts": "2026-06-16T15:58:54.623Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 21 missing" + }, + { + "id": "7fb68166f2aebbce", + "asn": "34702", + "ts": "2026-06-16T15:58:54.765Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "26c08b42fd58be74", + "asn": "132372", + "ts": "2026-06-16T15:58:55.066Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "acedf5805e4a96f1", + "asn": "24940", + "ts": "2026-06-16T16:58:52.923Z", + "severity": "MEDIUM", + "unexpected": [], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 0 unexpected prefix(es), 1 missing" + }, + { + "id": "01e6687bd5ee7c64", + "asn": "22616", + "ts": "2026-06-16T17:28:58.525Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "165.225.99.0/24", + "205.220.12.0/23", + "205.220.14.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 5 unexpected prefix(es), 0 missing" + }, + { + "id": "aaa47f85bd13d686", + "asn": "396986", + "ts": "2026-06-16T17:58:53.575Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.65.0/24", + "101.45.14.0/24", + "71.18.71.0/24", + "71.18.67.0/24", + "101.45.199.0/24", + "71.18.66.0/24", + "101.45.18.0/24", + "71.18.64.0/24", + "101.45.6.0/24", + "101.45.236.0/22" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 10 unexpected prefix(es), 1 missing" + }, + { + "id": "2318b223b258f97e", + "asn": "57099", + "ts": "2026-06-16T18:28:54.460Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "51d05ed3fb34b408", + "asn": "138699", + "ts": "2026-06-16T19:58:53.673Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "1606b1b7a18881ef", + "asn": "141805", + "ts": "2026-06-16T20:28:55.396Z", + "severity": "HIGH", + "unexpected": [ + "103.109.136.0/22", + "103.165.170.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS141805: 2 unexpected prefix(es), 0 missing" + }, + { + "id": "0e7a97a1b9243be2", + "asn": "3491", + "ts": "2026-06-16T21:58:54.355Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "26ee2a0f01b41e33", + "asn": "15290", + "ts": "2026-06-16T21:59:00.045Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 21 missing" + }, + { + "id": "e92d062ccd0c7056", + "asn": "34702", + "ts": "2026-06-16T21:59:00.175Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "0028dec46c5006f5", + "asn": "132372", + "ts": "2026-06-16T21:59:00.451Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "351fd59c358ff4e6", + "asn": "24940", + "ts": "2026-06-16T23:28:52.898Z", + "severity": "MEDIUM", + "unexpected": [], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 0 unexpected prefix(es), 1 missing" + }, + { + "id": "e889aee73acd8811", + "asn": "22616", + "ts": "2026-06-16T23:28:59.294Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 5 unexpected prefix(es), 0 missing" + }, + { + "id": "63d220e4e62992a0", + "asn": "396986", + "ts": "2026-06-16T23:58:53.667Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.71.0/24", + "71.18.64.0/24", + "101.45.14.0/24", + "101.45.199.0/24", + "71.18.67.0/24", + "101.45.18.0/24", + "71.18.65.0/24", + "71.18.66.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "4cc8293b2b2b1cc4", + "asn": "57099", + "ts": "2026-06-17T00:28:54.993Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "699603d5fe66956b", + "asn": "138699", + "ts": "2026-06-17T01:58:53.724Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "c1d49372d3e9e667", + "asn": "141805", + "ts": "2026-06-17T02:58:55.685Z", + "severity": "HIGH", + "unexpected": [ + "103.109.136.0/22", + "103.165.170.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS141805: 2 unexpected prefix(es), 0 missing" + }, + { + "id": "ce3e4835248980b1", + "asn": "3491", + "ts": "2026-06-17T04:28:54.151Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "bf5fd1695b8e685e", + "asn": "15290", + "ts": "2026-06-17T04:28:54.491Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "25f95e46446d1563", + "asn": "34702", + "ts": "2026-06-17T04:28:54.608Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "6b49c771c3c4150b", + "asn": "132372", + "ts": "2026-06-17T04:28:54.883Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "d78f76343bf81456", + "asn": "24940", + "ts": "2026-06-17T05:58:52.923Z", + "severity": "MEDIUM", + "unexpected": [ + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 1 unexpected prefix(es), 1 missing" + }, + { + "id": "4c9002cae268519a", + "asn": "22616", + "ts": "2026-06-17T05:58:55.784Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 6 unexpected prefix(es), 0 missing" + }, + { + "id": "11cbf15916c6f53d", + "asn": "396986", + "ts": "2026-06-17T06:28:53.619Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.14.0/24", + "71.18.65.0/24", + "101.45.18.0/24", + "71.18.67.0/24", + "101.45.199.0/24", + "71.18.71.0/24", + "71.18.66.0/24", + "71.18.64.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "6ac777e1b8094abd", + "asn": "57099", + "ts": "2026-06-17T06:58:53.954Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "35fdac167cc3f33e", + "asn": "138699", + "ts": "2026-06-17T08:28:56.071Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "af17cace9197cdbe", + "asn": "141805", + "ts": "2026-06-17T08:58:55.784Z", + "severity": "HIGH", + "unexpected": [ + "103.109.136.0/22", + "103.165.170.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS141805: 2 unexpected prefix(es), 0 missing" + }, + { + "id": "12d54c0e29ecb3b1", + "asn": "3491", + "ts": "2026-06-17T10:28:54.183Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "f04587f690584dc9", + "asn": "15290", + "ts": "2026-06-17T10:28:54.522Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "e89d4e8085dc0342", + "asn": "34702", + "ts": "2026-06-17T10:28:54.652Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "ae2c5e7c0b14920f", + "asn": "132372", + "ts": "2026-06-17T10:28:54.971Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "dcb81c26d5b3a1ee", + "asn": "24940", + "ts": "2026-06-17T11:58:52.923Z", + "severity": "MEDIUM", + "unexpected": [ + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 1 unexpected prefix(es), 1 missing" + }, + { + "id": "c6a6a7f0e3c40441", + "asn": "396986", + "ts": "2026-06-17T12:28:54.649Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.67.0/24", + "101.45.199.0/24", + "101.45.14.0/24", + "71.18.66.0/24", + "71.18.65.0/24", + "101.45.18.0/24", + "71.18.71.0/24", + "71.18.64.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "6d591cfd75ddae19", + "asn": "22616", + "ts": "2026-06-17T12:28:59.729Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 7 unexpected prefix(es), 0 missing" + }, + { + "id": "92ccabe6b72b8b88", + "asn": "57099", + "ts": "2026-06-17T12:58:54.351Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "87c9d4c2f594e3e1", + "asn": "138699", + "ts": "2026-06-17T14:58:53.652Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "e8f18b0eb8398f3e", + "asn": "141805", + "ts": "2026-06-17T15:28:55.079Z", + "severity": "HIGH", + "unexpected": [ + "103.109.136.0/22", + "103.165.170.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS141805: 2 unexpected prefix(es), 0 missing" + }, + { + "id": "ece9312cd5521dcc", + "asn": "3491", + "ts": "2026-06-17T16:28:54.310Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "6ed68cfd6005e338", + "asn": "15290", + "ts": "2026-06-17T16:28:54.743Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "db14ac66a6b6fe2d", + "asn": "34702", + "ts": "2026-06-17T16:28:54.871Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "a14a513f1b7e0ac8", + "asn": "132372", + "ts": "2026-06-17T16:28:55.180Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "56f7ed4243153641", + "asn": "24940", + "ts": "2026-06-17T17:58:53.395Z", + "severity": "MEDIUM", + "unexpected": [ + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 1 unexpected prefix(es), 1 missing" + }, + { + "id": "bab49445d501f245", + "asn": "396986", + "ts": "2026-06-17T18:58:55.891Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.67.0/24", + "101.45.199.0/24", + "101.45.14.0/24", + "71.18.66.0/24", + "71.18.65.0/24", + "101.45.18.0/24", + "71.18.71.0/24", + "71.18.64.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "ebb3473096606156", + "asn": "57099", + "ts": "2026-06-17T18:58:56.743Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "992d95f50b482717", + "asn": "22616", + "ts": "2026-06-17T18:58:58.092Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 7 unexpected prefix(es), 0 missing" + }, + { + "id": "e54f668400a69919", + "asn": "138699", + "ts": "2026-06-17T20:58:53.727Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "80977d1ba63f1b42", + "asn": "141805", + "ts": "2026-06-17T21:28:55.486Z", + "severity": "HIGH", + "unexpected": [ + "103.109.136.0/22", + "103.165.170.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS141805: 2 unexpected prefix(es), 0 missing" + }, + { + "id": "d701dfc1b6e2b5fa", + "asn": "3491", + "ts": "2026-06-17T22:58:54.324Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "8edc484160943c41", + "asn": "15290", + "ts": "2026-06-17T22:58:54.599Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "192054906cc5a8f3", + "asn": "34702", + "ts": "2026-06-17T22:58:54.734Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "1646506cbe819534", + "asn": "132372", + "ts": "2026-06-17T22:58:55.066Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "ec91bdc41cab3465", + "asn": "24940", + "ts": "2026-06-18T00:28:53.018Z", + "severity": "MEDIUM", + "unexpected": [ + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 1 unexpected prefix(es), 1 missing" + }, + { + "id": "4f6ef97ce725ac39", + "asn": "396986", + "ts": "2026-06-18T01:28:53.582Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.67.0/24", + "101.45.199.0/24", + "101.45.14.0/24", + "71.18.66.0/24", + "71.18.65.0/24", + "101.45.18.0/24", + "71.18.71.0/24", + "71.18.64.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "678eaa484ba7acb6", + "asn": "57099", + "ts": "2026-06-18T01:28:54.278Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "9dbd2083aa4cb1bb", + "asn": "22616", + "ts": "2026-06-18T01:28:55.785Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 7 unexpected prefix(es), 0 missing" + }, + { + "id": "16ac28632ff690c7", + "asn": "138699", + "ts": "2026-06-18T03:28:53.604Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "990fd67da908e310", + "asn": "141805", + "ts": "2026-06-18T03:58:56.134Z", + "severity": "HIGH", + "unexpected": [ + "103.165.170.0/23", + "103.109.136.0/22" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS141805: 2 unexpected prefix(es), 0 missing" + }, + { + "id": "d94d320e623319fe", + "asn": "3491", + "ts": "2026-06-18T05:28:54.100Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "c2f047914c59e0ac", + "asn": "15290", + "ts": "2026-06-18T05:28:54.440Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "cdbd324b5c72d29d", + "asn": "34702", + "ts": "2026-06-18T05:28:54.567Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "f8874ecfda759821", + "asn": "132372", + "ts": "2026-06-18T05:28:54.864Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "e1f09a60338c0be1", + "asn": "24940", + "ts": "2026-06-18T06:53:28.486Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "32d9bcacf4d8f1fe", + "asn": "396986", + "ts": "2026-06-18T07:53:28.845Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.18.0/24", + "71.18.66.0/24", + "71.18.65.0/24", + "101.45.14.0/24", + "101.45.199.0/24", + "71.18.64.0/24", + "71.18.67.0/24", + "71.18.71.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "1a9c39df987b0e66", + "asn": "57099", + "ts": "2026-06-18T07:53:29.532Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "3e8d68b968987531", + "asn": "22616", + "ts": "2026-06-18T07:53:30.893Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "140.232.190.0/24", + "155.95.86.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 9 unexpected prefix(es), 0 missing" + }, + { + "id": "3a9361c22335b600", + "asn": "138699", + "ts": "2026-06-18T09:53:29.047Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:c002::/48", + "101.45.198.0/24", + "2404:9dc0:cd04::/48", + "101.45.200.0/23" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "b922e180ccce7388", + "asn": "199121", + "ts": "2026-06-18T10:23:36.361Z", + "severity": "MEDIUM", + "unexpected": [], + "missing": [ + "2001:67c:7a4::/48", + "91.244.180.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS199121: 0 unexpected prefix(es), 2 missing" + }, + { + "id": "603efaed8a07f910", + "asn": "141805", + "ts": "2026-06-18T10:23:56.474Z", + "severity": "HIGH", + "unexpected": [ + "103.165.170.0/23", + "103.109.136.0/22" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS141805: 2 unexpected prefix(es), 0 missing" + }, + { + "id": "c4a0d429a5b52266", + "asn": "3491", + "ts": "2026-06-18T11:53:30.580Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "55b993a58a83ef19", + "asn": "15290", + "ts": "2026-06-18T11:53:30.954Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "fefb6dfc133e265d", + "asn": "34702", + "ts": "2026-06-18T11:53:31.084Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "418ebb23b6ae7bbc", + "asn": "132372", + "ts": "2026-06-18T11:53:31.387Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "46e674586d822b82", + "asn": "24940", + "ts": "2026-06-18T12:53:28.520Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "cf525506e5133810", + "asn": "396986", + "ts": "2026-06-18T13:53:29.171Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "101.45.14.0/24", + "71.18.71.0/24", + "71.18.65.0/24", + "71.18.67.0/24", + "71.18.64.0/24", + "101.45.18.0/24", + "101.45.199.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "943fcc7aabc18650", + "asn": "57099", + "ts": "2026-06-18T13:53:29.895Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "2a6b0ed00b9b8340", + "asn": "22616", + "ts": "2026-06-18T13:53:32.606Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 10 unexpected prefix(es), 0 missing" + }, + { + "id": "b7da4e5878b7e7d2", + "asn": "138699", + "ts": "2026-06-18T16:23:28.990Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "b4d18d68de63cdee", + "asn": "3491", + "ts": "2026-06-18T18:23:29.441Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "c89f0cf728059f52", + "asn": "15290", + "ts": "2026-06-18T18:23:29.803Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "c49ffa80d190924c", + "asn": "34702", + "ts": "2026-06-18T18:23:29.934Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "bd76637f3df98ea3", + "asn": "132372", + "ts": "2026-06-18T18:23:30.237Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "f1f6d6339118bfbe", + "asn": "24940", + "ts": "2026-06-18T19:23:28.493Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "c00cd08ecd89e3a0", + "asn": "396986", + "ts": "2026-06-18T20:23:29.171Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.199.0/24", + "71.18.66.0/24", + "71.18.71.0/24", + "101.45.18.0/24", + "71.18.65.0/24", + "101.45.14.0/24", + "71.18.67.0/24", + "71.18.64.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "b8ecffa63baa5b53", + "asn": "57099", + "ts": "2026-06-18T20:23:29.831Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "3146314cb1869367", + "asn": "22616", + "ts": "2026-06-18T20:23:31.129Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 11 unexpected prefix(es), 0 missing" + }, + { + "id": "dd84693faea837d8", + "asn": "138699", + "ts": "2026-06-18T22:23:29.149Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "101.45.198.0/24", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "1533e6c881d061a3", + "asn": "3491", + "ts": "2026-06-19T00:23:29.527Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "1beaf8ce86acc444", + "asn": "15290", + "ts": "2026-06-19T00:23:29.855Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "3042f915fffc7ed0", + "asn": "34702", + "ts": "2026-06-19T00:23:29.980Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "2c8fd0ab835ab123", + "asn": "132372", + "ts": "2026-06-19T00:23:30.275Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "b9c7063e863d1360", + "asn": "24940", + "ts": "2026-06-19T01:23:28.511Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "f803088fcb5d0112", + "asn": "396986", + "ts": "2026-06-19T02:53:28.839Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.199.0/24", + "71.18.66.0/24", + "71.18.71.0/24", + "101.45.18.0/24", + "71.18.65.0/24", + "101.45.14.0/24", + "71.18.67.0/24", + "71.18.64.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "627c4784bf8a8c29", + "asn": "57099", + "ts": "2026-06-19T02:53:30.163Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "3a67408b92871a8c", + "asn": "22616", + "ts": "2026-06-19T02:53:33.911Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 11 unexpected prefix(es), 0 missing" + }, + { + "id": "854cf37c5ec7ccb2", + "asn": "138699", + "ts": "2026-06-19T04:23:29.486Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "ef343c590ce07fbe", + "asn": "3491", + "ts": "2026-06-19T06:23:29.830Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "a4bc8205b048aaa4", + "asn": "15290", + "ts": "2026-06-19T06:23:30.386Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "436425134732bbd3", + "asn": "34702", + "ts": "2026-06-19T06:23:30.513Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "b47d78a77a3d6520", + "asn": "132372", + "ts": "2026-06-19T06:23:30.809Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "291ad93a9e1e4181", + "asn": "24940", + "ts": "2026-06-19T07:23:28.678Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "825549651a1ef561", + "asn": "396986", + "ts": "2026-06-19T08:53:29.020Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.199.0/24", + "101.45.14.0/24", + "71.18.71.0/24", + "71.18.67.0/24", + "71.18.66.0/24", + "71.18.65.0/24", + "101.45.18.0/24", + "71.18.64.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "2ce5df3f4177aaab", + "asn": "57099", + "ts": "2026-06-19T09:23:29.690Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "17951c1b53c0ca13", + "asn": "22616", + "ts": "2026-06-19T09:23:30.996Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 12 unexpected prefix(es), 0 missing" + }, + { + "id": "763fed0f8c364f98", + "asn": "138699", + "ts": "2026-06-19T10:53:29.197Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "09684be8ab25b6a8", + "asn": "3491", + "ts": "2026-06-19T12:53:29.408Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "2b4cdd2e85459612", + "asn": "15290", + "ts": "2026-06-19T12:53:29.804Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "7544a87ce76e0f01", + "asn": "34702", + "ts": "2026-06-19T12:53:29.933Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "13c0f2c4e278a74d", + "asn": "132372", + "ts": "2026-06-19T12:53:30.243Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "1717aae5f3f8e6de", + "asn": "24940", + "ts": "2026-06-19T13:53:28.503Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "5111fb599b0e67aa", + "asn": "396986", + "ts": "2026-06-19T14:53:29.315Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.71.0/24", + "101.45.18.0/24", + "71.18.67.0/24", + "101.45.14.0/24", + "71.18.65.0/24", + "71.18.66.0/24", + "71.18.64.0/24", + "101.45.199.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "dd787030db31066d", + "asn": "57099", + "ts": "2026-06-19T15:23:30.025Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "3b9d2ac7f695e1c0", + "asn": "22616", + "ts": "2026-06-19T15:23:31.577Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.120.0/23", + "137.31.128.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 14 unexpected prefix(es), 0 missing" + }, + { + "id": "8eb465922d15bb6c", + "asn": "138699", + "ts": "2026-06-19T17:23:28.875Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "fad418c18ebf9eaa", + "asn": "3491", + "ts": "2026-06-19T18:53:29.425Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "59a20aee201ef32b", + "asn": "15290", + "ts": "2026-06-19T18:53:29.834Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "9ea29f7435edc2da", + "asn": "34702", + "ts": "2026-06-19T18:53:29.950Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "78b3b3f5f1d64741", + "asn": "132372", + "ts": "2026-06-19T19:23:29.606Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "4170ce3fab48c4a5", + "asn": "24940", + "ts": "2026-06-19T19:53:28.519Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "3eb3c34c5ef3891e", + "asn": "396986", + "ts": "2026-06-19T21:23:28.809Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.67.0/24", + "71.18.71.0/24", + "101.45.199.0/24", + "71.18.66.0/24", + "71.18.64.0/24", + "101.45.18.0/24", + "71.18.65.0/24", + "101.45.14.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "1738d303f6b62667", + "asn": "57099", + "ts": "2026-06-19T21:53:29.798Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "292e18697bbb1297", + "asn": "22616", + "ts": "2026-06-19T21:53:32.578Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "2706ec16de425e4c", + "asn": "138699", + "ts": "2026-06-19T23:23:29.267Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "101.45.198.0/24", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "24701f442ed460bc", + "asn": "3491", + "ts": "2026-06-20T00:53:29.848Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "04f595155173343f", + "asn": "15290", + "ts": "2026-06-20T00:53:30.185Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "5c8213a9e89ed44f", + "asn": "34702", + "ts": "2026-06-20T00:53:30.314Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "2758222157eddbf1", + "asn": "132372", + "ts": "2026-06-20T01:23:30.559Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "b5b336f96ef511b9", + "asn": "24940", + "ts": "2026-06-20T01:53:28.532Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "360ec68eef807e26", + "asn": "396986", + "ts": "2026-06-20T03:23:29.161Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.67.0/24", + "101.45.18.0/24", + "71.18.71.0/24", + "101.45.14.0/24", + "71.18.66.0/24", + "101.45.199.0/24", + "71.18.64.0/24", + "71.18.65.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "824bf57e024e692d", + "asn": "57099", + "ts": "2026-06-20T03:53:30.073Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "8d0c6040325d1bed", + "asn": "22616", + "ts": "2026-06-20T03:53:32.668Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "86bd1cbc50b8390f", + "asn": "138699", + "ts": "2026-06-20T05:23:29.344Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "301d3705e1b82766", + "asn": "3491", + "ts": "2026-06-20T07:23:30.045Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "5b5e1c06be83b4c3", + "asn": "15290", + "ts": "2026-06-20T07:23:30.440Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "7cfcbf1630d93b15", + "asn": "34702", + "ts": "2026-06-20T07:23:30.554Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "d880834d23d041e9", + "asn": "132372", + "ts": "2026-06-20T07:23:30.892Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "434312749f9515a0", + "asn": "24940", + "ts": "2026-06-20T07:53:28.533Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "695b3a709bb634bd", + "asn": "396986", + "ts": "2026-06-20T09:53:29.102Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.67.0/24", + "101.45.18.0/24", + "71.18.71.0/24", + "101.45.14.0/24", + "71.18.66.0/24", + "101.45.199.0/24", + "71.18.64.0/24", + "71.18.65.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "c1b196f08a782ac0", + "asn": "57099", + "ts": "2026-06-20T10:23:29.391Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "9ad9535a9be4ea64", + "asn": "22616", + "ts": "2026-06-20T10:23:31.027Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "ec25ffaf69c33afa", + "asn": "138699", + "ts": "2026-06-20T11:53:28.991Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "c4efe6cfc5557621", + "asn": "3491", + "ts": "2026-06-20T13:23:37.366Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "1c86e8df38549562", + "asn": "15290", + "ts": "2026-06-20T13:23:37.734Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "cd6e343f4e716d72", + "asn": "34702", + "ts": "2026-06-20T13:23:37.852Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "8be43012490c08a1", + "asn": "132372", + "ts": "2026-06-20T13:23:38.235Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "d214fd9b968fd35e", + "asn": "24940", + "ts": "2026-06-20T14:23:28.458Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "5a03d904de948dda", + "asn": "396986", + "ts": "2026-06-20T15:53:29.596Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.65.0/24", + "71.18.71.0/24", + "71.18.66.0/24", + "71.18.64.0/24", + "101.45.18.0/24", + "101.45.199.0/24", + "101.45.14.0/24", + "71.18.67.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "657507b8195268c7", + "asn": "57099", + "ts": "2026-06-20T16:23:37.692Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "86acdf59b1222fb8", + "asn": "22616", + "ts": "2026-06-20T16:23:39.185Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "2c654c9bb62d8741", + "asn": "138699", + "ts": "2026-06-20T17:53:29.026Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "b5dff2ac01f45406", + "asn": "199121", + "ts": "2026-06-20T18:23:32.447Z", + "severity": "MEDIUM", + "unexpected": [], + "missing": [ + "2001:67c:7a4::/48", + "91.244.180.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS199121: 0 unexpected prefix(es), 2 missing" + }, + { + "id": "afc392bc9ab15719", + "asn": "3491", + "ts": "2026-06-20T19:53:29.499Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "9eace022b65c3d33", + "asn": "15290", + "ts": "2026-06-20T19:53:29.848Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "d79208415890168a", + "asn": "34702", + "ts": "2026-06-20T19:53:29.968Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "ed7bf141adbb11f3", + "asn": "132372", + "ts": "2026-06-20T19:53:30.297Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "d1a9086c33f5a77c", + "asn": "24940", + "ts": "2026-06-20T20:23:28.462Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "e861fe3f4c5f4815", + "asn": "396986", + "ts": "2026-06-20T22:23:29.206Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "71.18.65.0/24", + "101.45.199.0/24", + "101.45.18.0/24", + "101.45.14.0/24", + "71.18.67.0/24", + "71.18.64.0/24", + "71.18.71.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "6f9ca500fb38dcac", + "asn": "57099", + "ts": "2026-06-20T22:53:29.989Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "3b0310c63a91809c", + "asn": "22616", + "ts": "2026-06-20T22:53:31.405Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "745a3fa059469035", + "asn": "138699", + "ts": "2026-06-21T00:23:29.177Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "f3de4066f286f517", + "asn": "3491", + "ts": "2026-06-21T01:53:29.840Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "694701861d4bc7f5", + "asn": "15290", + "ts": "2026-06-21T01:53:30.187Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "66ef2de75adbb951", + "asn": "34702", + "ts": "2026-06-21T01:53:30.313Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "c7aac4b8d5b1c52a", + "asn": "132372", + "ts": "2026-06-21T01:53:30.690Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "2d5a1b0eb5d8b547", + "asn": "24940", + "ts": "2026-06-21T02:23:28.522Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "5b6a31deff8d6693", + "asn": "396986", + "ts": "2026-06-21T04:23:29.562Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.14.0/24", + "101.45.199.0/24", + "71.18.64.0/24", + "71.18.65.0/24", + "71.18.66.0/24", + "71.18.71.0/24", + "101.45.18.0/24", + "71.18.67.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "257219d13bf90afd", + "asn": "57099", + "ts": "2026-06-21T05:23:32.709Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "2b040b2fbc780b62", + "asn": "22616", + "ts": "2026-06-21T05:23:35.575Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "2bee23139dc7ef0d", + "asn": "138699", + "ts": "2026-06-21T06:53:28.866Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "eb9fc9bf5e994e15", + "asn": "3491", + "ts": "2026-06-21T07:53:29.865Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "6d8cb10ccff93f4f", + "asn": "15290", + "ts": "2026-06-21T07:53:30.262Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "2793de36e847a236", + "asn": "34702", + "ts": "2026-06-21T07:53:30.908Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "2ba5614d6bce07d9", + "asn": "132372", + "ts": "2026-06-21T07:53:32.291Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "ba1c14476cd62325", + "asn": "24940", + "ts": "2026-06-21T08:23:28.532Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "d3f36224b1b0732b", + "asn": "396986", + "ts": "2026-06-21T10:53:29.025Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.14.0/24", + "101.45.199.0/24", + "71.18.64.0/24", + "71.18.65.0/24", + "71.18.66.0/24", + "71.18.71.0/24", + "101.45.18.0/24", + "71.18.67.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "0c1da7b4b7a4a0c3", + "asn": "57099", + "ts": "2026-06-21T11:53:29.855Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "ab53689b4cebaf8f", + "asn": "22616", + "ts": "2026-06-21T11:53:31.140Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "b1c66af286388b2a", + "asn": "138699", + "ts": "2026-06-21T12:53:28.941Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "37be4b601dd2a20a", + "asn": "24940", + "ts": "2026-06-21T14:23:28.539Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "c9cb973d3a08c92f", + "asn": "3491", + "ts": "2026-06-21T14:23:29.407Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "61a272082d7a5907", + "asn": "15290", + "ts": "2026-06-21T14:23:29.745Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "08805083b1a1097d", + "asn": "34702", + "ts": "2026-06-21T14:23:29.877Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "43908c5a2d006bb5", + "asn": "132372", + "ts": "2026-06-21T14:23:30.176Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "5563112f95816302", + "asn": "396986", + "ts": "2026-06-21T17:23:28.940Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.199.0/24", + "71.18.67.0/24", + "71.18.65.0/24", + "71.18.66.0/24", + "101.45.18.0/24", + "101.45.14.0/24", + "71.18.64.0/24", + "71.18.71.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "2dcfe22ba04f60e7", + "asn": "57099", + "ts": "2026-06-21T18:23:30.525Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "f811489e6b389678", + "asn": "22616", + "ts": "2026-06-21T18:23:32.908Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "8e71056e6938203d", + "asn": "138699", + "ts": "2026-06-21T19:23:29.028Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "dc628facb4ce476f", + "asn": "3491", + "ts": "2026-06-21T20:23:29.413Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "c89a342d7c907ce0", + "asn": "24940", + "ts": "2026-06-21T20:53:28.532Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "f1ac0d63f590b7c7", + "asn": "15290", + "ts": "2026-06-21T20:53:29.957Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "c88d9a0e53ff09f6", + "asn": "34702", + "ts": "2026-06-21T20:53:30.095Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "191a9eb31de20ff6", + "asn": "132372", + "ts": "2026-06-21T20:53:30.511Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "af95c4452329f69d", + "asn": "396986", + "ts": "2026-06-21T23:53:28.935Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "101.45.199.0/24", + "71.18.71.0/24", + "71.18.67.0/24", + "101.45.14.0/24", + "101.45.18.0/24", + "71.18.65.0/24", + "71.18.64.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "f598c4a375f31a4f", + "asn": "57099", + "ts": "2026-06-22T00:53:29.084Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "76732270563a6e30", + "asn": "22616", + "ts": "2026-06-22T00:53:30.449Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "858f16be781cc793", + "asn": "138699", + "ts": "2026-06-22T01:53:28.852Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "a18cfe4db784c732", + "asn": "3491", + "ts": "2026-06-22T02:23:29.489Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "3a4f86e6079847d3", + "asn": "24940", + "ts": "2026-06-22T02:53:28.958Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "e2a710d62b0f92c5", + "asn": "15290", + "ts": "2026-06-22T02:53:30.873Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "7da560b3b58ab5a9", + "asn": "34702", + "ts": "2026-06-22T02:53:31.538Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "d57b1796222eedce", + "asn": "132372", + "ts": "2026-06-22T02:53:33.711Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "e1ab059d3607c77b", + "asn": "396986", + "ts": "2026-06-22T06:23:28.873Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.67.0/24", + "71.18.65.0/24", + "101.45.199.0/24", + "71.18.64.0/24", + "71.18.71.0/24", + "71.18.66.0/24", + "101.45.14.0/24", + "101.45.18.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "c9018c7345e0796b", + "asn": "57099", + "ts": "2026-06-22T06:53:30.231Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "106ba69315ba5a51", + "asn": "22616", + "ts": "2026-06-22T06:53:30.966Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "8daa1c7b817f5f7c", + "asn": "138699", + "ts": "2026-06-22T07:53:28.901Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "c6c1b4eba57296e3", + "asn": "3491", + "ts": "2026-06-22T08:53:29.443Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "a4be11549c49610e", + "asn": "24940", + "ts": "2026-06-22T09:23:28.471Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "38a2df97ce1ec9dd", + "asn": "15290", + "ts": "2026-06-22T09:23:38.118Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "00a30d8fd92d9990", + "asn": "34702", + "ts": "2026-06-22T09:23:38.243Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "48ab2bdbe0ece1dd", + "asn": "132372", + "ts": "2026-06-22T09:23:38.298Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "7ba6df8a8682ccd2", + "asn": "396986", + "ts": "2026-06-22T12:23:28.946Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.18.0/24", + "71.18.66.0/24", + "71.18.71.0/24", + "71.18.65.0/24", + "101.45.14.0/24", + "71.18.67.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "101.45.199.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "9b7949203c004828", + "asn": "57099", + "ts": "2026-06-22T13:23:30.492Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "f7f276dc25862845", + "asn": "22616", + "ts": "2026-06-22T13:23:31.904Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "550b5d4af6fa2b86", + "asn": "138699", + "ts": "2026-06-22T14:23:28.872Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "9d55c5b9a844dbbf", + "asn": "24940", + "ts": "2026-06-22T15:23:28.689Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "fb51b290031d8835", + "asn": "3491", + "ts": "2026-06-22T15:23:31.580Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "13a6846eb00a7f58", + "asn": "15290", + "ts": "2026-06-22T15:53:34.907Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "6b41f2d27d4d43f5", + "asn": "34702", + "ts": "2026-06-22T15:53:35.031Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "b813673f5c36bb9c", + "asn": "132372", + "ts": "2026-06-22T15:53:35.310Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "38363584fe8dc7e0", + "asn": "396986", + "ts": "2026-06-22T18:23:29.257Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.18.0/24", + "71.18.66.0/24", + "71.18.71.0/24", + "71.18.65.0/24", + "101.45.14.0/24", + "71.18.67.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "101.45.199.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "4a2da2b72fdcd331", + "asn": "57099", + "ts": "2026-06-22T19:53:29.587Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "6f5aaa100f53754c", + "asn": "22616", + "ts": "2026-06-22T19:53:31.137Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "09c5b03246199e3e", + "asn": "138699", + "ts": "2026-06-22T20:23:29.381Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "6bf5473b9b50af8a", + "asn": "24940", + "ts": "2026-06-22T21:53:28.555Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "738342afa9ccc87f", + "asn": "3491", + "ts": "2026-06-22T21:53:29.494Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "bb8dcf5e8ed417ea", + "asn": "15290", + "ts": "2026-06-22T22:23:29.728Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "8c5a12510c6c0292", + "asn": "34702", + "ts": "2026-06-22T22:23:29.861Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "d9db27e52038146b", + "asn": "132372", + "ts": "2026-06-22T22:23:30.206Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "1df82cf159944687", + "asn": "396986", + "ts": "2026-06-23T00:23:30.650Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.14.0/24", + "71.18.66.0/24", + "101.45.199.0/24", + "71.18.67.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "71.18.71.0/24", + "101.45.18.0/24", + "71.18.65.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "8b8ee18170fa6f0d", + "asn": "57099", + "ts": "2026-06-23T01:53:34.174Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "c50d1d18d6f800c8", + "asn": "22616", + "ts": "2026-06-23T01:53:37.831Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "873fc861d793173e", + "asn": "138699", + "ts": "2026-06-23T02:53:28.862Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "37172c6e16044092", + "asn": "24940", + "ts": "2026-06-23T03:53:28.562Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "fd609b8cc902597b", + "asn": "3491", + "ts": "2026-06-23T04:23:29.536Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "91988f8a5167ef98", + "asn": "15290", + "ts": "2026-06-23T04:23:29.901Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "5b641d49dfc372e0", + "asn": "34702", + "ts": "2026-06-23T04:23:30.037Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "82d3dcdf4b4cf20a", + "asn": "132372", + "ts": "2026-06-23T04:23:30.347Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "d3b5832b7fdf3d2c", + "asn": "396986", + "ts": "2026-06-23T07:08:08.734Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.71.0/24", + "101.45.199.0/24", + "101.45.14.0/24", + "101.45.18.0/24", + "71.18.66.0/24", + "101.45.6.0/24", + "71.18.67.0/24", + "71.18.65.0/24", + "71.18.64.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "8e9856232fe717ac", + "asn": "57099", + "ts": "2026-06-23T08:08:09.485Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "1801ec8d2e2d3158", + "asn": "22616", + "ts": "2026-06-23T08:08:11.182Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "71ae7eb4567348a2", + "asn": "138699", + "ts": "2026-06-23T09:08:08.762Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "fd43728bf5917192", + "asn": "24940", + "ts": "2026-06-23T10:08:08.329Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "49a4b08d06144807", + "asn": "3491", + "ts": "2026-06-23T10:38:09.289Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "128a88946b4c8ad2", + "asn": "15290", + "ts": "2026-06-23T10:38:09.624Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "96ff7ca218a72fee", + "asn": "34702", + "ts": "2026-06-23T10:38:09.739Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "c430a8f8946e45ed", + "asn": "132372", + "ts": "2026-06-23T10:38:10.043Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "36e4ae5fda7419d6", + "asn": "396986", + "ts": "2026-06-23T13:38:08.745Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.199.0/24", + "101.45.18.0/24", + "71.18.67.0/24", + "101.45.6.0/24", + "101.45.14.0/24", + "71.18.66.0/24", + "71.18.64.0/24", + "71.18.71.0/24", + "71.18.65.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "ba7d6a4a6c4531e8", + "asn": "57099", + "ts": "2026-06-23T14:08:09.602Z", + "severity": "MEDIUM", + "unexpected": [ + "91.209.142.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS57099: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "0b14afe10fbd8b19", + "asn": "22616", + "ts": "2026-06-23T14:38:11.335Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "1ac6f4b9fa87f4ae", + "asn": "138699", + "ts": "2026-06-23T15:08:08.786Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "bac8109dce148e9a", + "asn": "24940", + "ts": "2026-06-23T16:08:08.385Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "0af4a37d91af772d", + "asn": "3491", + "ts": "2026-06-23T16:38:09.389Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "fe0fdb5e994fa29d", + "asn": "15290", + "ts": "2026-06-23T16:38:09.746Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "6bfa0387559ed06a", + "asn": "34702", + "ts": "2026-06-23T16:38:09.879Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "a1734cd6cf47c626", + "asn": "132372", + "ts": "2026-06-23T16:38:10.184Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "87b67f3ec4908cb2", + "asn": "396986", + "ts": "2026-06-23T19:38:09.176Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.71.0/24", + "101.45.14.0/24", + "101.45.18.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "71.18.66.0/24", + "71.18.67.0/24", + "71.18.65.0/24", + "101.45.199.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "79e3dcb9cf8b8e38", + "asn": "22616", + "ts": "2026-06-23T20:38:15.223Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "abffa51808f15c98", + "asn": "138699", + "ts": "2026-06-23T21:38:08.824Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "09ecdc21152a47e9", + "asn": "24940", + "ts": "2026-06-23T22:38:08.389Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "5cb31f5d7f112565", + "asn": "3491", + "ts": "2026-06-23T23:08:09.347Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "8479cd98c7df2a40", + "asn": "15290", + "ts": "2026-06-23T23:08:09.687Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "ed1c8a2c595db208", + "asn": "34702", + "ts": "2026-06-23T23:08:09.817Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "90aa81af2b2e89a6", + "asn": "132372", + "ts": "2026-06-23T23:08:10.106Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "90c16da3a8b7a09e", + "asn": "396986", + "ts": "2026-06-24T01:38:10.398Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.71.0/24", + "101.45.14.0/24", + "101.45.18.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "71.18.66.0/24", + "71.18.67.0/24", + "71.18.65.0/24", + "101.45.199.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "6ad589f555aa937d", + "asn": "22616", + "ts": "2026-06-24T02:38:22.183Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "03bb071565f4414b", + "asn": "138699", + "ts": "2026-06-24T03:38:08.919Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "101.45.200.0/23" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "1ca7039bf6b0eda5", + "asn": "24940", + "ts": "2026-06-24T04:38:08.396Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "518ffdafdebc5ac9", + "asn": "3491", + "ts": "2026-06-24T05:08:09.424Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "77b0c986264dfa99", + "asn": "15290", + "ts": "2026-06-24T05:08:09.785Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "4e6203ef64a78d1e", + "asn": "34702", + "ts": "2026-06-24T05:08:09.922Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "34f2a7460a84cc8c", + "asn": "132372", + "ts": "2026-06-24T05:08:10.231Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "000d0c05e661242b", + "asn": "396986", + "ts": "2026-06-24T08:08:08.838Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.71.0/24", + "71.18.65.0/24", + "101.45.14.0/24", + "101.45.199.0/24", + "71.18.64.0/24", + "71.18.67.0/24", + "71.18.66.0/24", + "101.45.18.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "e20daf5a549e5ae3", + "asn": "22616", + "ts": "2026-06-24T09:08:10.290Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 15 unexpected prefix(es), 0 missing" + }, + { + "id": "c252e368e9c1fa64", + "asn": "138699", + "ts": "2026-06-24T10:08:11.257Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "101.45.200.0/23" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "275d838d61dfb56d", + "asn": "24940", + "ts": "2026-06-24T10:38:08.557Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "17dde8011a5b3c69", + "asn": "3491", + "ts": "2026-06-24T11:38:09.366Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "0d108b9fc908bedb", + "asn": "15290", + "ts": "2026-06-24T11:38:09.713Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "ff411ea9d4faba32", + "asn": "34702", + "ts": "2026-06-24T11:38:09.843Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "d79de4d7022bf48e", + "asn": "132372", + "ts": "2026-06-24T11:38:10.155Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "34db19c4ccfad03c", + "asn": "396986", + "ts": "2026-06-24T14:08:09.391Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "101.45.6.0/24", + "101.45.14.0/24", + "71.18.64.0/24", + "71.18.67.0/24", + "71.18.71.0/24", + "101.45.199.0/24", + "71.18.65.0/24", + "101.45.18.0/24", + "101.45.236.0/22", + "101.45.202.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 11 unexpected prefix(es), 1 missing" + }, + { + "id": "4bc11a62bde3e59b", + "asn": "22616", + "ts": "2026-06-24T15:08:10.698Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "a8c41ac1d4683d43", + "asn": "138699", + "ts": "2026-06-24T16:38:09.173Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "7f9482fe6b0108f6", + "asn": "24940", + "ts": "2026-06-24T17:08:08.457Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "7758120b8c6558f2", + "asn": "3491", + "ts": "2026-06-24T17:38:09.992Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "3db00e67bc9141c9", + "asn": "15290", + "ts": "2026-06-24T17:38:11.713Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 23 missing" + }, + { + "id": "42ed0165398e888f", + "asn": "34702", + "ts": "2026-06-24T17:38:11.842Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "5d9d9b48957cf8a2", + "asn": "132372", + "ts": "2026-06-24T17:38:12.149Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "8fb2e70efc0159c2", + "asn": "396986", + "ts": "2026-06-24T20:38:11.369Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.18.0/24", + "101.45.199.0/24", + "71.18.71.0/24", + "71.18.64.0/24", + "101.45.14.0/24", + "71.18.67.0/24", + "101.45.6.0/24", + "71.18.66.0/24", + "71.18.65.0/24", + "101.45.236.0/22", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 13 unexpected prefix(es), 1 missing" + }, + { + "id": "543759814bc94386", + "asn": "22616", + "ts": "2026-06-24T21:08:10.871Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "36a402390d0573d5", + "asn": "138699", + "ts": "2026-06-24T22:38:09.214Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48", + "101.45.198.0/24", + "101.45.200.0/23" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "3b07510ee20d4c31", + "asn": "24940", + "ts": "2026-06-24T23:38:08.411Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "2b396286610b8276", + "asn": "3491", + "ts": "2026-06-25T00:08:09.377Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "a07fa56c4d8a85b9", + "asn": "15290", + "ts": "2026-06-25T00:08:09.645Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 24 missing" + }, + { + "id": "c48ab18e57c534fa", + "asn": "34702", + "ts": "2026-06-25T00:08:09.772Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "e5ce0620146d4b17", + "asn": "132372", + "ts": "2026-06-25T00:08:10.091Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "0a313545a629ff1c", + "asn": "396986", + "ts": "2026-06-25T03:08:08.717Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "71.18.65.0/24", + "101.45.199.0/24", + "101.45.14.0/24", + "71.18.71.0/24", + "71.18.67.0/24", + "71.18.64.0/24", + "101.45.18.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 13 unexpected prefix(es), 1 missing" + }, + { + "id": "7a7a6a38b21ae789", + "asn": "22616", + "ts": "2026-06-25T03:38:11.559Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "4523bb14a6948376", + "asn": "138699", + "ts": "2026-06-25T05:08:09.304Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "2dbb51349a4a9669", + "asn": "24940", + "ts": "2026-06-25T05:38:08.635Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "56ea953562e20174", + "asn": "15290", + "ts": "2026-06-25T06:08:09.905Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 24 missing" + }, + { + "id": "f32862239c3b53a4", + "asn": "34702", + "ts": "2026-06-25T06:08:10.026Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "0db5b3fcc8b54e4d", + "asn": "132372", + "ts": "2026-06-25T06:08:10.357Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "fa9b16f7587fb1b1", + "asn": "3491", + "ts": "2026-06-25T06:38:09.210Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "7b7d27539aefee85", + "asn": "396986", + "ts": "2026-06-25T09:08:09.115Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "71.18.65.0/24", + "101.45.199.0/24", + "101.45.14.0/24", + "71.18.71.0/24", + "71.18.67.0/24", + "71.18.64.0/24", + "101.45.18.0/24", + "101.45.6.0/24", + "101.45.236.0/22", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 13 unexpected prefix(es), 1 missing" + }, + { + "id": "e467b81b699247ff", + "asn": "22616", + "ts": "2026-06-25T10:08:09.867Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "6f58af7501072c9e", + "asn": "138699", + "ts": "2026-06-25T11:38:08.694Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.200.0/23", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "c4e6cdab27c0e295", + "asn": "24940", + "ts": "2026-06-25T12:08:08.434Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "d6ea77e3bb8a4a5b", + "asn": "15290", + "ts": "2026-06-25T12:08:10.403Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 24 missing" + }, + { + "id": "ed3af45d70c99ba2", + "asn": "34702", + "ts": "2026-06-25T12:08:10.539Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "e145af532dcb0dcc", + "asn": "132372", + "ts": "2026-06-25T12:08:10.912Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "d6d0465ff93d5220", + "asn": "3491", + "ts": "2026-06-25T12:38:09.491Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "817202b0d252ee40", + "asn": "396986", + "ts": "2026-06-25T15:38:09.110Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.64.0/24", + "71.18.67.0/24", + "71.18.66.0/24", + "101.45.199.0/24", + "101.45.236.0/22", + "101.45.14.0/24", + "101.45.18.0/24", + "71.18.65.0/24", + "101.45.6.0/24", + "71.18.71.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 14 unexpected prefix(es), 1 missing" + }, + { + "id": "a3fc7d4abcee60ab", + "asn": "22616", + "ts": "2026-06-25T16:08:19.340Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "cdb4d278a2f45d6e", + "asn": "138699", + "ts": "2026-06-25T17:38:08.949Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.200.0/23", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "b7d78e96808d55c3", + "asn": "24940", + "ts": "2026-06-25T18:38:08.395Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "d42afa511c213875", + "asn": "15290", + "ts": "2026-06-25T18:38:09.647Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 24 missing" + }, + { + "id": "53b990efdafe4753", + "asn": "34702", + "ts": "2026-06-25T18:38:09.770Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "1625a544a0e3a957", + "asn": "132372", + "ts": "2026-06-25T18:38:09.979Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "98fc96964c4875b5", + "asn": "3491", + "ts": "2026-06-25T19:08:09.859Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "ec9e891faa2782c8", + "asn": "396986", + "ts": "2026-06-25T22:08:08.742Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.67.0/24", + "101.45.6.0/24", + "71.18.71.0/24", + "101.45.199.0/24", + "101.45.14.0/24", + "71.18.65.0/24", + "101.45.18.0/24", + "71.18.64.0/24", + "71.18.66.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 13 unexpected prefix(es), 1 missing" + }, + { + "id": "bea03e8bc9f62d8a", + "asn": "22616", + "ts": "2026-06-25T22:38:10.830Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "31e4e4f10d8f2091", + "asn": "138699", + "ts": "2026-06-25T23:38:09.099Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "5fe77dc9c0ac59fc", + "asn": "24940", + "ts": "2026-06-26T00:38:08.419Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "4aaa32ede3a44d3f", + "asn": "34702", + "ts": "2026-06-26T00:38:09.771Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "bc167dc654173824", + "asn": "132372", + "ts": "2026-06-26T00:38:10.072Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "ca4e7263815b0220", + "asn": "15290", + "ts": "2026-06-26T01:08:09.931Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 24 missing" + }, + { + "id": "9da344a06a945f46", + "asn": "3491", + "ts": "2026-06-26T01:38:10.701Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "b40d436d323ba048", + "asn": "396986", + "ts": "2026-06-26T04:08:08.760Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.67.0/24", + "101.45.14.0/24", + "101.45.199.0/24", + "71.18.64.0/24", + "71.18.65.0/24", + "101.45.18.0/24", + "71.18.71.0/24", + "101.45.6.0/24", + "71.18.66.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 13 unexpected prefix(es), 1 missing" + }, + { + "id": "3b2d8563d14fa4f4", + "asn": "22616", + "ts": "2026-06-26T04:38:10.840Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "11a796fd6e36d036", + "asn": "138699", + "ts": "2026-06-26T06:08:09.121Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "2528106807469b2c", + "asn": "24940", + "ts": "2026-06-26T07:08:08.436Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "5bb1cbd07a06162e", + "asn": "15290", + "ts": "2026-06-26T07:08:17.245Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "16711fc7eacfd3e4", + "asn": "34702", + "ts": "2026-06-26T07:08:17.487Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "3a77611a7c97562d", + "asn": "132372", + "ts": "2026-06-26T07:08:19.825Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "16098c10f00a7aff", + "asn": "3491", + "ts": "2026-06-26T08:08:09.353Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "159bc9431f68b733", + "asn": "396986", + "ts": "2026-06-26T10:08:09.285Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.67.0/24", + "101.45.14.0/24", + "101.45.199.0/24", + "71.18.64.0/24", + "71.18.65.0/24", + "101.45.18.0/24", + "71.18.71.0/24", + "101.45.6.0/24", + "71.18.66.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 13 unexpected prefix(es), 1 missing" + }, + { + "id": "0f5f8a3de6fc013f", + "asn": "22616", + "ts": "2026-06-26T11:08:15.260Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "4fa6068e383b8afa", + "asn": "138699", + "ts": "2026-06-26T12:38:09.159Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "101.45.200.0/23" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "1d239d8bed6d2b88", + "asn": "24940", + "ts": "2026-06-26T13:08:08.570Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "467abe032229d933", + "asn": "199121", + "ts": "2026-06-26T13:38:16.302Z", + "severity": "MEDIUM", + "unexpected": [], + "missing": [ + "2001:67c:7a4::/48", + "91.244.180.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS199121: 0 unexpected prefix(es), 2 missing" + }, + { + "id": "872af6fa7c1c0b6e", + "asn": "15290", + "ts": "2026-06-26T13:38:17.528Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "90fd93b152ef0c17", + "asn": "34702", + "ts": "2026-06-26T13:38:17.645Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "81a3ccf24f0f5b6e", + "asn": "132372", + "ts": "2026-06-26T13:38:18.013Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "d5f92f36dfe5e192", + "asn": "3491", + "ts": "2026-06-26T14:08:09.354Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "4be5fec3ab25918a", + "asn": "396986", + "ts": "2026-06-26T16:08:11.189Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "71.18.67.0/24", + "101.45.18.0/24", + "101.45.199.0/24", + "71.18.64.0/24", + "71.18.65.0/24", + "71.18.71.0/24", + "101.45.6.0/24", + "101.45.14.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 13 unexpected prefix(es), 1 missing" + }, + { + "id": "93c1be0904f2c353", + "asn": "22616", + "ts": "2026-06-26T17:38:10.904Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "617aba60ec55916e", + "asn": "138699", + "ts": "2026-06-26T19:08:08.953Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "101.45.200.0/23" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "13663bffcbd0351e", + "asn": "24940", + "ts": "2026-06-26T19:38:08.419Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "9268c4ee27cd91fc", + "asn": "15290", + "ts": "2026-06-26T20:08:09.517Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "57cb68d4ff35c985", + "asn": "34702", + "ts": "2026-06-26T20:08:09.632Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "8f51cca9d9952c11", + "asn": "132372", + "ts": "2026-06-26T20:08:09.937Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "b11195eabc8f245f", + "asn": "3491", + "ts": "2026-06-26T20:38:09.659Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "334f3421cd6c7dc2", + "asn": "142631", + "ts": "2026-06-26T21:38:18.110Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "103.171.104.0/23", + "103.171.105.0/24", + "160.191.18.0/24", + "103.171.104.0/24", + "103.229.232.0/24", + "103.208.66.0/24", + "2407:c2c0::/32", + "160.191.19.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS142631: 0 unexpected prefix(es), 8 missing" + }, + { + "id": "d987b4f97205d8ab", + "asn": "396986", + "ts": "2026-06-26T22:38:08.735Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "71.18.67.0/24", + "101.45.18.0/24", + "101.45.199.0/24", + "71.18.64.0/24", + "71.18.65.0/24", + "71.18.71.0/24", + "101.45.6.0/24", + "101.45.14.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 13 unexpected prefix(es), 1 missing" + }, + { + "id": "a1a6b5b2f6722aa8", + "asn": "22616", + "ts": "2026-06-27T00:08:11.272Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "83e97879aed1e2b9", + "asn": "24940", + "ts": "2026-06-27T01:38:08.422Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "aa81e44a20ba4aba", + "asn": "138699", + "ts": "2026-06-27T01:38:08.757Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "101.45.200.0/23" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "25efdb0dcf0fbd4b", + "asn": "15290", + "ts": "2026-06-27T02:08:09.672Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "c10e398950a4e666", + "asn": "34702", + "ts": "2026-06-27T02:08:09.791Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "05f0b919ce91745a", + "asn": "132372", + "ts": "2026-06-27T02:08:10.073Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "928a0e5c41837c87", + "asn": "3491", + "ts": "2026-06-27T03:08:11.389Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "8e343508ed2e6259", + "asn": "396986", + "ts": "2026-06-27T04:38:08.758Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "71.18.67.0/24", + "101.45.18.0/24", + "101.45.199.0/24", + "71.18.64.0/24", + "71.18.65.0/24", + "71.18.71.0/24", + "101.45.6.0/24", + "101.45.14.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 13 unexpected prefix(es), 1 missing" + }, + { + "id": "809285b610933179", + "asn": "22616", + "ts": "2026-06-27T06:38:10.972Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "656543b1494709ad", + "asn": "24940", + "ts": "2026-06-27T07:38:08.425Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "1c5d0990025dc43d", + "asn": "138699", + "ts": "2026-06-27T08:08:08.836Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "101.45.200.0/23" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "a918b31cd66da1f9", + "asn": "15290", + "ts": "2026-06-27T08:08:09.673Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "79e20b541bf7c79d", + "asn": "34702", + "ts": "2026-06-27T08:08:09.803Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "b54a420362261619", + "asn": "132372", + "ts": "2026-06-27T08:08:10.110Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "466b5bcc7b059c77", + "asn": "3491", + "ts": "2026-06-27T09:38:09.285Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "0c424ecb55a6ed47", + "asn": "396986", + "ts": "2026-06-27T11:08:09.233Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "71.18.67.0/24", + "101.45.18.0/24", + "101.45.199.0/24", + "71.18.64.0/24", + "71.18.65.0/24", + "71.18.71.0/24", + "101.45.6.0/24", + "101.45.14.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 13 unexpected prefix(es), 1 missing" + }, + { + "id": "b77c69b598f4e686", + "asn": "22616", + "ts": "2026-06-27T13:08:12.557Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.101.0/24", + "137.31.114.0/23", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "aaf954453e8d94ef", + "asn": "24940", + "ts": "2026-06-27T13:38:08.429Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "5d623d932f1c0d57", + "asn": "138699", + "ts": "2026-06-27T14:38:08.703Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "78b975e3bd08dad4", + "asn": "15290", + "ts": "2026-06-27T14:38:09.658Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "c8ab05fdaf5b1249", + "asn": "34702", + "ts": "2026-06-27T14:38:09.789Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "a4dffb9c12dc841c", + "asn": "132372", + "ts": "2026-06-27T14:38:10.097Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "7d467478773e7f49", + "asn": "3491", + "ts": "2026-06-27T16:08:09.592Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "03170797e0799315", + "asn": "396986", + "ts": "2026-06-27T17:38:08.740Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.65.0/24", + "71.18.67.0/24", + "101.45.199.0/24", + "71.18.66.0/24", + "71.18.71.0/24", + "101.45.18.0/24", + "101.45.14.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 13 unexpected prefix(es), 1 missing" + }, + { + "id": "b02323fca77729da", + "asn": "24940", + "ts": "2026-06-27T19:38:08.439Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "0fdf58b80e9351cd", + "asn": "22616", + "ts": "2026-06-27T19:38:10.794Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.101.0/24", + "137.31.114.0/23", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "b7c8aaf5afe51f57", + "asn": "138699", + "ts": "2026-06-27T20:38:08.849Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "cdfd3e1d6f03df02", + "asn": "15290", + "ts": "2026-06-27T20:38:09.687Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "0f8bd94ca99ef5b8", + "asn": "34702", + "ts": "2026-06-27T20:38:09.819Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "e02df4a3db516723", + "asn": "132372", + "ts": "2026-06-27T20:38:10.130Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "27fbce2479890d79", + "asn": "3491", + "ts": "2026-06-27T22:38:09.305Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "75ba91c4e8325b6d", + "asn": "396986", + "ts": "2026-06-27T23:38:08.773Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.65.0/24", + "71.18.67.0/24", + "101.45.199.0/24", + "71.18.66.0/24", + "71.18.71.0/24", + "101.45.18.0/24", + "101.45.14.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 13 unexpected prefix(es), 1 missing" + }, + { + "id": "6b479aba6a8f0f87", + "asn": "24940", + "ts": "2026-06-28T01:38:08.442Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "644f52b373aafd8b", + "asn": "22616", + "ts": "2026-06-28T01:38:11.178Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.101.0/24", + "137.31.114.0/23", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "8a2609e83e49e631", + "asn": "138699", + "ts": "2026-06-28T02:38:08.882Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "ab7c14e880cb2ac0", + "asn": "15290", + "ts": "2026-06-28T02:38:09.762Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "117ad16de298e6ac", + "asn": "34702", + "ts": "2026-06-28T02:38:09.889Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "dd6334f150e68055", + "asn": "132372", + "ts": "2026-06-28T03:08:17.575Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "f3b948ef50954401", + "asn": "3491", + "ts": "2026-06-28T04:38:09.559Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "fffdd1822c4c0625", + "asn": "396986", + "ts": "2026-06-28T05:38:09.204Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.65.0/24", + "71.18.67.0/24", + "101.45.199.0/24", + "71.18.66.0/24", + "71.18.71.0/24", + "101.45.18.0/24", + "101.45.14.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 13 unexpected prefix(es), 1 missing" + }, + { + "id": "e5484b2c8719f1db", + "asn": "24940", + "ts": "2026-06-28T07:38:08.589Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "9354fc2bc7e43559", + "asn": "22616", + "ts": "2026-06-28T07:38:13.254Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.101.0/24", + "137.31.114.0/23", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "a62d0ab77130081a", + "asn": "138699", + "ts": "2026-06-28T08:38:09.218Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "48ebaf9f715f3d6b", + "asn": "15290", + "ts": "2026-06-28T08:38:12.027Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "f7f4e5825b624c8c", + "asn": "34702", + "ts": "2026-06-28T08:38:12.163Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "7eb7ddfe5fec38d7", + "asn": "132372", + "ts": "2026-06-28T09:38:10.370Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "fa243dfe271fb8c2", + "asn": "3491", + "ts": "2026-06-28T10:38:16.567Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "1214a5a6a2b6f5eb", + "asn": "396986", + "ts": "2026-06-28T12:08:08.910Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.65.0/24", + "71.18.67.0/24", + "101.45.199.0/24", + "71.18.66.0/24", + "71.18.71.0/24", + "101.45.18.0/24", + "101.45.14.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 13 unexpected prefix(es), 1 missing" + }, + { + "id": "8db410b2965151ae", + "asn": "24940", + "ts": "2026-06-28T14:08:08.440Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "8991ecb62cc8a5c0", + "asn": "22616", + "ts": "2026-06-28T14:08:10.997Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "33152b4188903a8b", + "asn": "138699", + "ts": "2026-06-28T14:38:09.250Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "2834db5a052ef861", + "asn": "15290", + "ts": "2026-06-28T15:08:09.944Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "aeaa2f7f2c335b09", + "asn": "34702", + "ts": "2026-06-28T15:08:10.073Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "e48c6f15fb91d8cf", + "asn": "132372", + "ts": "2026-06-28T15:38:10.409Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "cd87cd3e9957e039", + "asn": "3491", + "ts": "2026-06-28T17:08:09.372Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "ce832ed93fa051eb", + "asn": "396986", + "ts": "2026-06-28T18:38:09.040Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "71.18.71.0/24", + "101.45.18.0/24", + "71.18.65.0/24", + "101.45.199.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "101.45.14.0/24", + "71.18.67.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 13 unexpected prefix(es), 1 missing" + }, + { + "id": "b245823dba8391fc", + "asn": "24940", + "ts": "2026-06-28T20:38:08.456Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "3f6b2e1b05cd0f8c", + "asn": "138699", + "ts": "2026-06-28T20:38:09.318Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "ef93c3ae91d3e4e4", + "asn": "22616", + "ts": "2026-06-28T20:38:10.827Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "2c1e65b8f15e7560", + "asn": "15290", + "ts": "2026-06-28T21:38:09.700Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "cecba1598e798602", + "asn": "34702", + "ts": "2026-06-28T21:38:09.814Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "f5096f4ae40574c7", + "asn": "132372", + "ts": "2026-06-28T22:08:11.118Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "348e7f09d6bbaf45", + "asn": "3491", + "ts": "2026-06-28T23:38:09.771Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "ee32076d27e360cc", + "asn": "396986", + "ts": "2026-06-29T00:38:09.176Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "71.18.71.0/24", + "101.45.18.0/24", + "71.18.65.0/24", + "101.45.199.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "101.45.14.0/24", + "71.18.67.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 13 unexpected prefix(es), 1 missing" + }, + { + "id": "0a0cb5560f186a0f", + "asn": "22616", + "ts": "2026-06-29T02:38:11.763Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "409caf6589952627", + "asn": "24940", + "ts": "2026-06-29T03:08:08.447Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "c01389d31278b4c0", + "asn": "138699", + "ts": "2026-06-29T03:08:08.846Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "33052d51a0d60ad2", + "asn": "15290", + "ts": "2026-06-29T03:38:10.331Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "4f697b72ed0d6381", + "asn": "34702", + "ts": "2026-06-29T03:38:10.450Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "2006ba6c7d1446c1", + "asn": "132372", + "ts": "2026-06-29T04:38:11.404Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "461c16525c81ebcb", + "asn": "3491", + "ts": "2026-06-29T05:38:09.934Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "8a6d55c951a0cdf1", + "asn": "396986", + "ts": "2026-06-29T07:08:09.300Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "71.18.71.0/24", + "101.45.18.0/24", + "71.18.65.0/24", + "101.45.199.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "101.45.14.0/24", + "71.18.67.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 13 unexpected prefix(es), 1 missing" + }, + { + "id": "d458f5d372f2e415", + "asn": "22616", + "ts": "2026-06-29T08:38:16.521Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "0bdbf2fae417e08a", + "asn": "24940", + "ts": "2026-06-29T09:08:08.452Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "4b41f86573e825cc", + "asn": "138699", + "ts": "2026-06-29T09:38:09.326Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "46c423b9f5ff321a", + "asn": "15290", + "ts": "2026-06-29T09:38:10.412Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "807029444c389858", + "asn": "34702", + "ts": "2026-06-29T09:38:10.534Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "d251ff13960dc734", + "asn": "132372", + "ts": "2026-06-29T11:08:10.560Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "45bc12f370fc8d5a", + "asn": "3491", + "ts": "2026-06-29T11:38:10.778Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "4358e0393f88cb03", + "asn": "396986", + "ts": "2026-06-29T13:38:08.754Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.67.0/24", + "101.45.199.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "71.18.66.0/24", + "101.45.18.0/24", + "101.45.14.0/24", + "71.18.71.0/24", + "71.18.65.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48" + ], + "missing": [ + "71.18.138.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 14 unexpected prefix(es), 1 missing" + }, + { + "id": "d7bab1a21594a4a4", + "asn": "24940", + "ts": "2026-06-29T15:08:08.457Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "feb7c66b0145e609", + "asn": "22616", + "ts": "2026-06-29T15:08:10.834Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.101.0/24", + "137.31.114.0/23", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 16 unexpected prefix(es), 0 missing" + }, + { + "id": "75bea58cd6e91a6e", + "asn": "138699", + "ts": "2026-06-29T15:38:09.947Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "dbdb93288b739f66", + "asn": "15290", + "ts": "2026-06-29T15:38:12.162Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "ec3bfd3f4cd9ca09", + "asn": "34702", + "ts": "2026-06-29T15:38:12.599Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "86701c2d0ded1a31", + "asn": "132372", + "ts": "2026-06-29T17:38:10.601Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "0e713f3bd16fb0c5", + "asn": "3491", + "ts": "2026-06-29T18:08:09.736Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "7554ef6092256a57", + "asn": "396986", + "ts": "2026-06-29T19:38:08.767Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.71.0/24", + "71.18.65.0/24", + "101.45.14.0/24", + "101.45.18.0/24", + "71.18.67.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "71.18.66.0/24", + "101.45.199.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.233.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 14 unexpected prefix(es), 2 missing" + }, + { + "id": "da823c79308a2829", + "asn": "24940", + "ts": "2026-06-29T21:38:08.438Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "8a893c391989138a", + "asn": "22616", + "ts": "2026-06-29T21:38:10.799Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.101.0/24", + "137.31.114.0/23", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "7b816a2d081b59e2", + "asn": "138699", + "ts": "2026-06-29T22:08:09.283Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "101.45.198.0/24", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "a829e4214841e887", + "asn": "15290", + "ts": "2026-06-29T22:08:10.104Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "f0075207ed5f11c6", + "asn": "34702", + "ts": "2026-06-29T22:08:10.236Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "1f50ea9367010f99", + "asn": "132372", + "ts": "2026-06-30T00:08:09.519Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "0146c0236a5892ba", + "asn": "3491", + "ts": "2026-06-30T00:38:09.950Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "177205318d1600ad", + "asn": "396986", + "ts": "2026-06-30T02:08:08.755Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.71.0/24", + "71.18.65.0/24", + "101.45.14.0/24", + "101.45.18.0/24", + "71.18.67.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "71.18.66.0/24", + "101.45.199.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.233.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 14 unexpected prefix(es), 2 missing" + }, + { + "id": "f3b05f9746418659", + "asn": "24940", + "ts": "2026-06-30T03:38:08.444Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "329429c2068a34c0", + "asn": "22616", + "ts": "2026-06-30T04:08:10.215Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "5cc4ed49f0c2d782", + "asn": "138699", + "ts": "2026-06-30T04:38:08.816Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "f519eff8b7a71a21", + "asn": "15290", + "ts": "2026-06-30T04:38:09.693Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "2d3707e5a8391c4c", + "asn": "34702", + "ts": "2026-06-30T04:38:09.821Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "f8b0ffe41d1484d2", + "asn": "132372", + "ts": "2026-06-30T06:08:10.394Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "8539c8f5fa9bf2b8", + "asn": "3491", + "ts": "2026-06-30T07:08:09.309Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "4502211641e4fc65", + "asn": "396986", + "ts": "2026-06-30T08:08:08.795Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.18.0/24", + "101.45.6.0/24", + "101.45.14.0/24", + "71.18.71.0/24", + "101.45.199.0/24", + "71.18.64.0/24", + "71.18.66.0/24", + "71.18.67.0/24", + "71.18.65.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.233.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 14 unexpected prefix(es), 2 missing" + }, + { + "id": "edbbc3bec82263ac", + "asn": "24940", + "ts": "2026-06-30T09:38:08.459Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "f6d53c012ee367ef", + "asn": "22616", + "ts": "2026-06-30T10:08:10.252Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "67de70f3cd902b68", + "asn": "138699", + "ts": "2026-06-30T10:38:08.890Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "efd0a8b8cf298521", + "asn": "15290", + "ts": "2026-06-30T10:38:09.764Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "5999b646c6555226", + "asn": "34702", + "ts": "2026-06-30T10:38:09.893Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "9a72d2fa1f71b884", + "asn": "132372", + "ts": "2026-06-30T12:38:14.103Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "fda2716b574dee53", + "asn": "3491", + "ts": "2026-06-30T13:08:09.423Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "cb1330968e2a5c87", + "asn": "396986", + "ts": "2026-06-30T14:08:08.938Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.65.0/24", + "101.45.14.0/24", + "71.18.64.0/24", + "71.18.71.0/24", + "101.45.199.0/24", + "101.45.6.0/24", + "71.18.67.0/24", + "71.18.66.0/24", + "101.45.18.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.233.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 14 unexpected prefix(es), 2 missing" + }, + { + "id": "8d2e1eed4466f955", + "asn": "24940", + "ts": "2026-06-30T16:08:09.806Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "86929759aee80d7e", + "asn": "22616", + "ts": "2026-06-30T16:08:27.639Z", + "severity": "CRITICAL", + "unexpected": [ + "205.220.14.0/23", + "137.31.114.0/23", + "137.31.101.0/24", + "165.225.99.0/24", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "f1cd87b058b986e3", + "asn": "15290", + "ts": "2026-06-30T16:38:09.797Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "c7ead6916212f7f9", + "asn": "34702", + "ts": "2026-06-30T16:38:09.930Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "76f14acbd61eeeb6", + "asn": "138699", + "ts": "2026-06-30T17:08:08.758Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "f112489bf0074b7f", + "asn": "132372", + "ts": "2026-06-30T19:08:09.504Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "da61d1ae05912fea", + "asn": "3491", + "ts": "2026-06-30T19:38:09.436Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "51103c611c20b52f", + "asn": "396986", + "ts": "2026-06-30T20:38:10.986Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.18.0/24", + "71.18.65.0/24", + "71.18.67.0/24", + "101.45.14.0/24", + "101.45.202.0/24", + "71.18.66.0/24", + "71.18.64.0/24", + "101.45.199.0/24", + "101.45.6.0/24", + "71.18.71.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 3 missing" + }, + { + "id": "a052aaa9ef4d3369", + "asn": "24940", + "ts": "2026-06-30T22:38:08.736Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "78672662ffd0fe65", + "asn": "15290", + "ts": "2026-06-30T22:38:17.860Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "8ab547008c8a0997", + "asn": "34702", + "ts": "2026-06-30T22:38:17.983Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "36a7b34a7ee097b2", + "asn": "22616", + "ts": "2026-06-30T22:38:18.990Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.101.0/24", + "165.225.99.0/24", + "205.220.14.0/23", + "137.31.114.0/23", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "452bebbe3a40b001", + "asn": "138699", + "ts": "2026-06-30T23:08:08.855Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:c002::/48", + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "c5481947b7cc09ca", + "asn": "132372", + "ts": "2026-07-01T01:08:10.278Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "1cf6ec5eef0f5e66", + "asn": "3491", + "ts": "2026-07-01T02:08:09.415Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "bbdb02b2115146fc", + "asn": "396986", + "ts": "2026-07-01T03:08:08.774Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.67.0/24", + "101.45.202.0/24", + "101.45.199.0/24", + "71.18.66.0/24", + "101.45.6.0/24", + "71.18.65.0/24", + "101.45.14.0/24", + "101.45.18.0/24", + "71.18.71.0/24", + "71.18.64.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 3 missing" + }, + { + "id": "5b934ec62ccf33ad", + "asn": "24940", + "ts": "2026-07-01T05:08:08.454Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "a786fb39c73d0a62", + "asn": "15290", + "ts": "2026-07-01T05:08:09.570Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "7533ee7319b876e7", + "asn": "34702", + "ts": "2026-07-01T05:08:09.713Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "9f6f7be9fafe4153", + "asn": "22616", + "ts": "2026-07-01T05:08:10.263Z", + "severity": "CRITICAL", + "unexpected": [ + "205.220.14.0/23", + "137.31.114.0/23", + "2605:4300:e500::/40", + "205.220.12.0/23", + "165.225.99.0/24", + "137.31.101.0/24", + "137.31.122.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "d6fa436ba41110d2", + "asn": "138699", + "ts": "2026-07-01T05:38:08.773Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "86491d0351ffd02d", + "asn": "132372", + "ts": "2026-07-01T07:37:45.161Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "e6c7f5dc428a14ca", + "asn": "3491", + "ts": "2026-07-01T08:37:26.916Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "1ce762167af2d8fa", + "asn": "396986", + "ts": "2026-07-01T09:37:26.932Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.67.0/24", + "101.45.202.0/24", + "101.45.199.0/24", + "71.18.66.0/24", + "101.45.6.0/24", + "71.18.65.0/24", + "101.45.14.0/24", + "101.45.18.0/24", + "71.18.71.0/24", + "71.18.64.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 3 missing" + }, + { + "id": "2610c3d43ae512f9", + "asn": "24940", + "ts": "2026-07-01T11:37:26.081Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "508fc7f1059b7cfd", + "asn": "15290", + "ts": "2026-07-01T11:37:27.082Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "8dfec9af9d51da2b", + "asn": "34702", + "ts": "2026-07-01T11:37:27.209Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "ef82dc88eb9c90ff", + "asn": "22616", + "ts": "2026-07-01T11:37:28.284Z", + "severity": "CRITICAL", + "unexpected": [ + "165.225.99.0/24", + "137.31.122.0/23", + "137.31.101.0/24", + "137.31.114.0/23", + "2605:4300:e500::/40", + "205.220.12.0/23", + "205.220.14.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "a9a1f0c0b43e8906", + "asn": "32", + "ts": "2026-07-01T12:07:34.100Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "204.63.224.0/21", + "171.64.0.0/14", + "2607:f6d0::/32", + "128.12.0.0/16", + "2620:6c:40c0::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS32: 0 unexpected prefix(es), 5 missing" + }, + { + "id": "aed9717c5e07a223", + "asn": "138699", + "ts": "2026-07-01T12:07:34.376Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "0d996373737c103c", + "asn": "132372", + "ts": "2026-07-01T14:07:27.496Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "c65aad427b640dfd", + "asn": "3491", + "ts": "2026-07-01T14:37:26.920Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "b450df59201a9bd6", + "asn": "396986", + "ts": "2026-07-01T16:07:26.406Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "101.45.14.0/24", + "71.18.71.0/24", + "101.45.202.0/24", + "101.45.18.0/24", + "101.45.199.0/24", + "71.18.64.0/24", + "71.18.65.0/24", + "71.18.67.0/24", + "101.45.6.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 3 missing" + }, + { + "id": "6d298027cd3dd658", + "asn": "24940", + "ts": "2026-07-01T17:37:26.085Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "abc01ab74fda7000", + "asn": "15290", + "ts": "2026-07-01T17:37:27.365Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "ef753a1547826dcf", + "asn": "34702", + "ts": "2026-07-01T17:37:27.492Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "a0fc6d3013492099", + "asn": "22616", + "ts": "2026-07-01T17:37:28.473Z", + "severity": "CRITICAL", + "unexpected": [ + "165.225.99.0/24", + "137.31.122.0/23", + "137.31.101.0/24", + "137.31.114.0/23", + "2605:4300:e500::/40", + "205.220.12.0/23", + "205.220.14.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "3d152c8c3bb44d41", + "asn": "138699", + "ts": "2026-07-01T18:37:26.389Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "578240fb447aead2", + "asn": "132372", + "ts": "2026-07-01T20:07:35.198Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "c769d1a38e0966cc", + "asn": "3491", + "ts": "2026-07-01T20:37:26.997Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "925c1b072a1bbcaf", + "asn": "133815", + "ts": "2026-07-01T22:07:36.019Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "103.152.90.0/23", + "103.190.218.0/24", + "103.52.46.0/23", + "103.149.224.0/23", + "103.130.136.0/23", + "103.190.216.0/23", + "103.150.14.0/23", + "103.149.224.0/24", + "103.130.136.0/24", + "103.188.52.0/24", + "103.190.218.0/23", + "103.130.138.0/23", + "103.141.150.0/23", + "103.149.233.0/24", + "103.150.16.0/23", + "103.190.219.0/24", + "103.149.230.0/23", + "103.52.46.0/24", + "103.152.96.0/24", + "103.152.110.0/23", + "103.150.34.0/23", + "103.188.53.0/24", + "103.188.50.0/23", + "103.150.4.0/23", + "103.52.45.0/24", + "103.188.52.0/23", + "103.149.234.0/23", + "103.141.150.0/24", + "103.52.47.0/24", + "103.130.136.0/22", + "103.141.152.0/24", + "103.152.96.0/23", + "103.150.12.0/23", + "103.188.50.0/24", + "103.190.220.0/23", + "103.130.137.0/24", + "103.141.151.0/24", + "103.52.44.0/22", + "103.52.44.0/23", + "103.188.41.0/24", + "103.188.40.0/23", + "103.149.232.0/24", + "103.151.194.0/23", + "103.149.225.0/24", + "103.141.153.0/24", + "103.188.40.0/24", + "103.151.18.0/23", + "2403:bac0::/32", + "103.52.44.0/24", + "103.151.100.0/23", + "2403:57c0::/32", + "103.141.152.0/23", + "103.149.235.0/24", + "103.149.234.0/24", + "103.152.70.0/23", + "103.188.51.0/24", + "103.149.232.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS133815: 0 unexpected prefix(es), 57 missing" + }, + { + "id": "f0202f07477dc26a", + "asn": "396986", + "ts": "2026-07-01T22:07:36.099Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.18.0/24", + "101.45.6.0/24", + "101.45.14.0/24", + "101.45.202.0/24", + "71.18.65.0/24", + "71.18.71.0/24", + "71.18.66.0/24", + "101.45.199.0/24", + "71.18.67.0/24", + "71.18.64.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 3 missing" + }, + { + "id": "45bfceaf675d6497", + "asn": "24940", + "ts": "2026-07-01T23:37:26.090Z", + "severity": "HIGH", + "unexpected": [ + "2.28.0.0/16", + "2.29.0.0/16", + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "c764ef54e9a24428", + "asn": "22616", + "ts": "2026-07-01T23:37:28.530Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.101.0/24", + "2605:4300:e500::/40", + "205.220.12.0/23", + "165.225.99.0/24", + "137.31.122.0/23", + "205.220.14.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "e9862d00231017d9", + "asn": "15290", + "ts": "2026-07-02T00:07:27.628Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "c64c2ec49e4f6d5f", + "asn": "34702", + "ts": "2026-07-02T00:07:27.758Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "f1542582da62b172", + "asn": "138699", + "ts": "2026-07-02T01:07:27.370Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "101.45.200.0/23" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "ffe47486267cd6db", + "asn": "3491", + "ts": "2026-07-02T02:37:28.860Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "3ebc5dd25615b5c5", + "asn": "132372", + "ts": "2026-07-02T02:37:29.503Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "26d506f5252b18c6", + "asn": "396986", + "ts": "2026-07-02T04:37:26.450Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "101.45.199.0/24", + "101.45.18.0/24", + "101.45.6.0/24", + "71.18.65.0/24", + "101.45.14.0/24", + "71.18.71.0/24", + "71.18.64.0/24", + "71.18.67.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 3 missing" + }, + { + "id": "1a9366c4ed22c6c7", + "asn": "24940", + "ts": "2026-07-02T06:07:26.263Z", + "severity": "HIGH", + "unexpected": [ + "2.28.0.0/16", + "2.29.0.0/16", + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "2f88e4d2ad190ee7", + "asn": "22616", + "ts": "2026-07-02T06:07:35.451Z", + "severity": "CRITICAL", + "unexpected": [ + "155.95.86.0/24", + "2605:4300:e500::/40", + "137.31.122.0/23", + "137.31.114.0/23", + "205.220.14.0/23", + "137.31.101.0/24", + "205.220.12.0/23", + "140.232.190.0/24", + "165.225.99.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "0824ad74c8d81685", + "asn": "15290", + "ts": "2026-07-02T06:37:27.221Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "da6c0b5dc4fb0456", + "asn": "34702", + "ts": "2026-07-02T06:37:27.347Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "6e0e72854f170cb6", + "asn": "138699", + "ts": "2026-07-02T07:37:26.422Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "101.45.200.0/23" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "b0fa3055a812247b", + "asn": "3491", + "ts": "2026-07-02T09:07:27.056Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "52b5109d978ee813", + "asn": "132372", + "ts": "2026-07-02T09:07:27.823Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "8a55b50c5a086d50", + "asn": "396986", + "ts": "2026-07-02T11:07:26.393Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "101.45.199.0/24", + "101.45.18.0/24", + "101.45.6.0/24", + "71.18.65.0/24", + "101.45.14.0/24", + "71.18.71.0/24", + "71.18.64.0/24", + "71.18.67.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 3 missing" + }, + { + "id": "13dcd8ced9ccfcc6", + "asn": "24940", + "ts": "2026-07-02T12:37:26.077Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.29.0.0/16", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "111ef9cf53503dbc", + "asn": "15290", + "ts": "2026-07-02T12:37:27.229Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "211a0a67f045858f", + "asn": "22616", + "ts": "2026-07-02T12:37:28.334Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.101.0/24", + "140.232.190.0/24", + "137.31.122.0/23", + "205.220.14.0/23", + "165.225.99.0/24", + "155.95.86.0/24", + "2605:4300:e500::/40", + "140.232.189.0/24", + "205.220.12.0/23", + "137.31.114.0/23", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "c599f2c053e92fae", + "asn": "34702", + "ts": "2026-07-02T13:07:27.554Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "42c9d4bcfffb3926", + "asn": "138699", + "ts": "2026-07-02T14:07:26.509Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "43b5390273bdc1ba", + "asn": "3491", + "ts": "2026-07-02T15:37:26.539Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "bc2c4149a4c9e0bc", + "asn": "132372", + "ts": "2026-07-02T15:37:27.320Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "ac2720d713dcbc98", + "asn": "396986", + "ts": "2026-07-02T17:07:29.976Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.6.0/24", + "101.45.14.0/24", + "71.18.71.0/24", + "71.18.67.0/24", + "71.18.65.0/24", + "101.45.202.0/24", + "71.18.64.0/24", + "71.18.66.0/24", + "101.45.199.0/24", + "101.45.18.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 3 missing" + }, + { + "id": "8d422d70a275692a", + "asn": "24940", + "ts": "2026-07-02T18:37:26.108Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.29.0.0/16", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "18a46078e2f140cf", + "asn": "15290", + "ts": "2026-07-02T18:37:27.291Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "6420f9c7051f630d", + "asn": "22616", + "ts": "2026-07-02T18:37:28.418Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.101.0/24", + "140.232.190.0/24", + "137.31.122.0/23", + "205.220.14.0/23", + "165.225.99.0/24", + "155.95.86.0/24", + "2605:4300:e500::/40", + "140.232.189.0/24", + "205.220.12.0/23", + "137.31.114.0/23", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "679866a9fc118456", + "asn": "34702", + "ts": "2026-07-02T19:37:27.382Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "c3a457eac57bf186", + "asn": "138699", + "ts": "2026-07-02T20:07:26.621Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "a69875730958a5c2", + "asn": "3491", + "ts": "2026-07-02T21:37:26.948Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "61d930624ba58c38", + "asn": "132372", + "ts": "2026-07-02T21:37:27.886Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "50292865c18f71e4", + "asn": "396986", + "ts": "2026-07-02T23:37:26.476Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.14.0/24", + "71.18.64.0/24", + "101.45.202.0/24", + "71.18.65.0/24", + "71.18.67.0/24", + "101.45.18.0/24", + "71.18.71.0/24", + "71.18.66.0/24", + "101.45.6.0/24", + "101.45.199.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "c8e8bdd70ac2d384", + "asn": "24940", + "ts": "2026-07-03T01:07:26.089Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.29.0.0/16", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "95adaaf3b411eab4", + "asn": "15290", + "ts": "2026-07-03T01:07:27.233Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "8eab907099b71815", + "asn": "22616", + "ts": "2026-07-03T01:07:27.860Z", + "severity": "CRITICAL", + "unexpected": [ + "140.232.190.0/24", + "137.31.101.0/24", + "137.31.122.0/23", + "165.225.99.0/24", + "140.232.189.0/24", + "155.95.86.0/24", + "2605:4300:e500::/40", + "137.31.114.0/23", + "205.220.12.0/23", + "205.220.14.0/23", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "49b46549f6cc4c35", + "asn": "34702", + "ts": "2026-07-03T01:37:27.432Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "205bd9d019cffd7d", + "asn": "138699", + "ts": "2026-07-03T02:07:26.661Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "85de2fe33b08ecfb", + "asn": "3491", + "ts": "2026-07-03T04:37:39.374Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "038531775d85c296", + "asn": "132372", + "ts": "2026-07-03T04:37:40.090Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "163b35ccfa8ded9f", + "asn": "396986", + "ts": "2026-07-03T05:37:38.778Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.71.0/24", + "101.45.14.0/24", + "71.18.64.0/24", + "71.18.67.0/24", + "101.45.202.0/24", + "101.45.199.0/24", + "71.18.65.0/24", + "101.45.6.0/24", + "71.18.66.0/24", + "101.45.18.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "d4c1517d7841a525", + "asn": "24940", + "ts": "2026-07-03T07:07:38.451Z", + "severity": "HIGH", + "unexpected": [ + "2.28.0.0/16", + "193.105.82.0/24", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "9d1ff8a84286ea09", + "asn": "15290", + "ts": "2026-07-03T07:07:39.608Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "8419d1ea81434ed0", + "asn": "22616", + "ts": "2026-07-03T07:07:40.270Z", + "severity": "CRITICAL", + "unexpected": [ + "155.95.86.0/24", + "165.225.99.0/24", + "140.232.190.0/24", + "137.31.101.0/24", + "205.220.14.0/23", + "140.232.189.0/24", + "2605:4300:e500::/40", + "205.220.12.0/23", + "137.31.122.0/23", + "137.31.114.0/23", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.126.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "377d67e9e2b855a1", + "asn": "34702", + "ts": "2026-07-03T07:37:39.835Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "6fe50a542bc94fb8", + "asn": "138699", + "ts": "2026-07-03T08:07:38.805Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "af03a8e0300b78a7", + "asn": "3491", + "ts": "2026-07-03T11:07:39.397Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "3cc52a426ef24ff5", + "asn": "132372", + "ts": "2026-07-03T11:07:40.150Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "2da73fba0040682d", + "asn": "396986", + "ts": "2026-07-03T11:37:38.871Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.202.0/24", + "101.45.18.0/24", + "101.45.199.0/24", + "71.18.67.0/24", + "71.18.65.0/24", + "101.45.14.0/24", + "101.45.6.0/24", + "71.18.71.0/24", + "71.18.66.0/24", + "71.18.64.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "fa5b2ba4b295a85f", + "asn": "15290", + "ts": "2026-07-03T13:07:39.639Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "5c70a0846d816058", + "asn": "24940", + "ts": "2026-07-03T13:37:38.460Z", + "severity": "HIGH", + "unexpected": [ + "2.28.0.0/16", + "193.105.82.0/24", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "2e9324d31d0bcafa", + "asn": "34702", + "ts": "2026-07-03T13:37:48.020Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "372542b9e2480c99", + "asn": "22616", + "ts": "2026-07-03T13:37:49.041Z", + "severity": "CRITICAL", + "unexpected": [ + "140.232.189.0/24", + "137.31.128.0/23", + "137.31.114.0/23", + "155.95.86.0/24", + "137.31.120.0/23", + "137.31.101.0/24", + "137.31.122.0/23", + "2605:4300:e500::/40", + "137.31.119.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "205.220.12.0/23", + "140.232.190.0/24", + "137.31.124.0/23", + "137.31.126.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "5f6b2b33ec6c1b25", + "asn": "138699", + "ts": "2026-07-03T14:07:38.917Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "f7275b24e27a8288", + "asn": "199121", + "ts": "2026-07-03T15:37:46.325Z", + "severity": "MEDIUM", + "unexpected": [], + "missing": [ + "2001:67c:7a4::/48", + "91.244.180.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS199121: 0 unexpected prefix(es), 2 missing" + }, + { + "id": "87032c1d8cfc1279", + "asn": "396986", + "ts": "2026-07-03T17:37:38.944Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.202.0/24", + "101.45.18.0/24", + "101.45.199.0/24", + "71.18.67.0/24", + "71.18.65.0/24", + "101.45.14.0/24", + "101.45.6.0/24", + "71.18.71.0/24", + "71.18.66.0/24", + "71.18.64.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "16237d50eae1948c", + "asn": "3491", + "ts": "2026-07-03T17:37:39.499Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "3d2f683712ef0e6b", + "asn": "132372", + "ts": "2026-07-03T17:37:40.464Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "c4e1b6a99545a917", + "asn": "15290", + "ts": "2026-07-03T19:07:39.678Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "c2513b083cdcdd3e", + "asn": "24940", + "ts": "2026-07-03T19:37:38.480Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "193.105.82.0/24", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "936c44216c5d7953", + "asn": "138699", + "ts": "2026-07-03T20:07:40.366Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "f4846ed49a1211f4", + "asn": "34702", + "ts": "2026-07-03T20:07:41.192Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "62f9939faaaa1168", + "asn": "22616", + "ts": "2026-07-03T20:07:41.727Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.126.0/23", + "137.31.101.0/24", + "137.31.119.0/24", + "205.220.12.0/23", + "165.225.99.0/24", + "137.31.120.0/23", + "155.95.86.0/24", + "137.31.122.0/23", + "137.31.128.0/23", + "137.31.114.0/23", + "140.232.190.0/24", + "2605:4300:e500::/40", + "205.220.14.0/23", + "137.31.124.0/23", + "140.232.189.0/24", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "2c25a65652e2bb3d", + "asn": "396986", + "ts": "2026-07-04T00:07:38.781Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.202.0/24", + "71.18.65.0/24", + "71.18.66.0/24", + "71.18.64.0/24", + "71.18.67.0/24", + "101.45.14.0/24", + "101.45.6.0/24", + "71.18.71.0/24", + "101.45.199.0/24", + "101.45.18.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "f7ca85f8d1c42212", + "asn": "3491", + "ts": "2026-07-04T00:07:39.347Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "bb9a2abcf9c2c9e9", + "asn": "132372", + "ts": "2026-07-04T00:07:39.997Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "c1bfda5b20d5af04", + "asn": "15290", + "ts": "2026-07-04T01:07:47.868Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "4536eb0a097b5c2e", + "asn": "24940", + "ts": "2026-07-04T02:07:38.445Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "193.105.82.0/24", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "7c575b6fae708149", + "asn": "138699", + "ts": "2026-07-04T02:37:38.836Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "0da9e49d10058ab1", + "asn": "34702", + "ts": "2026-07-04T02:37:39.893Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "d79aec7f6234ae49", + "asn": "22616", + "ts": "2026-07-04T02:37:40.778Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.126.0/23", + "137.31.101.0/24", + "137.31.119.0/24", + "205.220.12.0/23", + "165.225.99.0/24", + "137.31.120.0/23", + "155.95.86.0/24", + "137.31.122.0/23", + "137.31.128.0/23", + "137.31.114.0/23", + "140.232.190.0/24", + "2605:4300:e500::/40", + "205.220.14.0/23", + "137.31.124.0/23", + "140.232.189.0/24", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "4a8518532881fb1b", + "asn": "396986", + "ts": "2026-07-04T06:36:50.510Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.202.0/24", + "101.45.6.0/24", + "71.18.66.0/24", + "101.45.14.0/24", + "71.18.67.0/24", + "71.18.65.0/24", + "71.18.64.0/24", + "71.18.71.0/24", + "101.45.199.0/24", + "101.45.18.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "13dbdd0a4ca15aaf", + "asn": "3491", + "ts": "2026-07-04T06:36:51.076Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "acafec976b610972", + "asn": "132372", + "ts": "2026-07-04T06:36:51.712Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "25af96e89bb6b706", + "asn": "15290", + "ts": "2026-07-04T07:36:51.503Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "9c42642360d244a2", + "asn": "24940", + "ts": "2026-07-04T08:36:50.272Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.29.0.0/16", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "9fdb7fafb4e75238", + "asn": "138699", + "ts": "2026-07-04T09:06:50.606Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "c92cfd571c6c6827", + "asn": "34702", + "ts": "2026-07-04T09:06:51.591Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "818b0f2777d05362", + "asn": "22616", + "ts": "2026-07-04T09:06:52.123Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.128.0/23", + "137.31.126.0/23", + "155.95.86.0/24", + "2605:4300:e500::/40", + "137.31.119.0/24", + "205.220.14.0/23", + "137.31.124.0/23", + "140.232.189.0/24", + "137.31.101.0/24", + "137.31.120.0/23", + "137.31.114.0/23", + "137.31.122.0/23", + "205.220.12.0/23", + "140.232.190.0/24", + "165.225.99.0/24", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "416a1da10d4b3ded", + "asn": "396986", + "ts": "2026-07-04T12:36:50.621Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.202.0/24", + "71.18.64.0/24", + "101.45.199.0/24", + "101.45.18.0/24", + "71.18.67.0/24", + "71.18.66.0/24", + "71.18.71.0/24", + "101.45.14.0/24", + "71.18.65.0/24", + "101.45.6.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "c07e83e8499d6044", + "asn": "3491", + "ts": "2026-07-04T12:36:51.208Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "1aa94b468431cc80", + "asn": "132372", + "ts": "2026-07-04T12:36:51.963Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "0d6b225b962012d1", + "asn": "15290", + "ts": "2026-07-04T14:06:51.466Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "f44325dab73ca733", + "asn": "24940", + "ts": "2026-07-04T14:36:50.283Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "2.28.0.0/16", + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "c503a29a211c00f1", + "asn": "138699", + "ts": "2026-07-04T15:06:50.607Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "2404:9dc0:cd04::/48", + "101.45.200.0/23", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "182e3554f93cfdd6", + "asn": "34702", + "ts": "2026-07-04T15:36:51.891Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "04f0dfc38b54d523", + "asn": "22616", + "ts": "2026-07-04T15:36:53.000Z", + "severity": "CRITICAL", + "unexpected": [ + "205.220.14.0/23", + "137.31.126.0/23", + "140.232.189.0/24", + "137.31.120.0/23", + "137.31.122.0/23", + "205.220.12.0/23", + "155.95.86.0/24", + "2605:4300:e500::/40", + "137.31.128.0/23", + "137.31.124.0/23", + "137.31.119.0/24", + "137.31.114.0/23", + "140.232.190.0/24", + "137.31.101.0/24", + "165.225.99.0/24", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "2d6c4b09b9effa76", + "asn": "396986", + "ts": "2026-07-04T19:06:50.638Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.202.0/24", + "71.18.64.0/24", + "101.45.199.0/24", + "101.45.18.0/24", + "71.18.67.0/24", + "71.18.66.0/24", + "71.18.71.0/24", + "101.45.14.0/24", + "71.18.65.0/24", + "101.45.6.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "e00cd34604830bda", + "asn": "3491", + "ts": "2026-07-04T19:06:51.217Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "bd836b49d40589f6", + "asn": "132372", + "ts": "2026-07-04T19:06:51.987Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "7b21541f7652315d", + "asn": "15290", + "ts": "2026-07-04T20:36:51.442Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "85540a0500b00a8c", + "asn": "24940", + "ts": "2026-07-04T21:06:50.279Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "193.105.82.0/24", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "a08dfcc80612e146", + "asn": "138699", + "ts": "2026-07-04T21:06:51.021Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.200.0/23", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "569092c30f24a667", + "asn": "34702", + "ts": "2026-07-04T22:06:51.457Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "09a4dccb0564596c", + "asn": "22616", + "ts": "2026-07-04T22:06:51.969Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.124.0/23", + "140.232.189.0/24", + "140.232.190.0/24", + "137.31.120.0/23", + "137.31.126.0/23", + "205.220.14.0/23", + "155.95.86.0/24", + "2605:4300:e500::/40", + "137.31.119.0/24", + "205.220.12.0/23", + "137.31.114.0/23", + "137.31.128.0/23", + "165.225.99.0/24", + "137.31.122.0/23", + "137.31.101.0/24", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "7f70f7c0755725e6", + "asn": "396986", + "ts": "2026-07-05T01:36:50.593Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.199.0/24", + "101.45.14.0/24", + "71.18.66.0/24", + "71.18.71.0/24", + "101.45.202.0/24", + "101.45.18.0/24", + "71.18.65.0/24", + "71.18.67.0/24", + "71.18.64.0/24", + "101.45.6.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "8c3d15b36ec33e47", + "asn": "3491", + "ts": "2026-07-05T01:36:51.145Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "d068bcad26cf451f", + "asn": "132372", + "ts": "2026-07-05T01:36:51.871Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "482a8cd45bac3d0d", + "asn": "15290", + "ts": "2026-07-05T02:36:51.485Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "eaed654535872777", + "asn": "24940", + "ts": "2026-07-05T03:06:50.279Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "2.28.0.0/16", + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "0303649a4d6b8a6d", + "asn": "138699", + "ts": "2026-07-05T03:36:50.676Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "5c60b8e551916acc", + "asn": "34702", + "ts": "2026-07-05T04:36:24.611Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "f640430653f42f69", + "asn": "22616", + "ts": "2026-07-05T04:36:25.670Z", + "severity": "CRITICAL", + "unexpected": [ + "205.220.14.0/23", + "137.31.119.0/24", + "140.232.190.0/24", + "155.95.86.0/24", + "2605:4300:e500::/40", + "137.31.120.0/23", + "137.31.114.0/23", + "205.220.12.0/23", + "137.31.124.0/23", + "165.225.99.0/24", + "137.31.126.0/23", + "137.31.122.0/23", + "140.232.189.0/24", + "137.31.101.0/24", + "137.31.128.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "dc6d9318e5d3b9e4", + "asn": "396986", + "ts": "2026-07-05T08:06:23.576Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.71.0/24", + "71.18.66.0/24", + "101.45.14.0/24", + "101.45.202.0/24", + "101.45.6.0/24", + "101.45.18.0/24", + "71.18.65.0/24", + "71.18.67.0/24", + "71.18.64.0/24", + "101.45.199.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "6b7f9173ad079bc8", + "asn": "3491", + "ts": "2026-07-05T08:06:24.185Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "bb32ceacb6636dba", + "asn": "132372", + "ts": "2026-07-05T08:06:24.848Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "6ab80dc6fcb799fb", + "asn": "15290", + "ts": "2026-07-05T09:06:24.471Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "260e85a672cce5bd", + "asn": "24940", + "ts": "2026-07-05T09:36:23.310Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "2.28.0.0/16", + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "6b71a9786a86555a", + "asn": "138699", + "ts": "2026-07-05T10:06:23.619Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "396b3f536a44c3ab", + "asn": "34702", + "ts": "2026-07-05T11:06:24.654Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "e31aaa9a1e2d73e5", + "asn": "22616", + "ts": "2026-07-05T11:06:25.193Z", + "severity": "CRITICAL", + "unexpected": [ + "205.220.14.0/23", + "137.31.119.0/24", + "140.232.190.0/24", + "155.95.86.0/24", + "2605:4300:e500::/40", + "137.31.120.0/23", + "137.31.114.0/23", + "205.220.12.0/23", + "137.31.124.0/23", + "165.225.99.0/24", + "137.31.126.0/23", + "137.31.122.0/23", + "140.232.189.0/24", + "137.31.101.0/24", + "137.31.128.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "eda24514af11d0d4", + "asn": "396986", + "ts": "2026-07-05T14:06:23.607Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.65.0/24", + "101.45.18.0/24", + "101.45.199.0/24", + "101.45.202.0/24", + "71.18.67.0/24", + "71.18.71.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "101.45.14.0/24", + "71.18.66.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "503d4fceab155856", + "asn": "3491", + "ts": "2026-07-05T14:06:31.633Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "72.57.243.0/24", + "41.79.245.0/24", + "63.218.0.0/22", + "205.252.8.0/22", + "41.221.208.0/24", + "63.223.48.0/24", + "63.222.250.0/24", + "63.222.54.0/24", + "217.113.92.0/24", + "208.13.224.0/19", + "63.217.112.0/21", + "63.218.254.0/23", + "205.252.192.0/24", + "205.252.232.0/21", + "207.226.120.0/21", + "205.177.116.0/24", + "63.217.24.0/23", + "146.222.27.0/24", + "63.218.18.0/23", + "2400:8800:f80d::/48", + "207.176.117.0/24", + "2400:8800:1::/48", + "205.177.17.0/24", + "63.222.146.0/24", + "63.218.230.0/23", + "63.216.152.0/22", + "103.17.28.0/22", + "63.222.158.0/24", + "63.222.210.0/24", + "217.113.88.0/24", + "205.177.52.0/22", + "2400:8800:f810::/48", + "72.57.134.0/24", + "63.223.7.0/24", + "87.82.0.0/19", + "63.218.52.0/22", + "45.195.111.0/24", + "63.222.105.0/24", + "2400:8800:2000::/35", + "207.226.252.0/23", + "63.221.171.0/24", + "146.222.28.0/24", + "63.222.185.0/24", + "63.218.56.0/23", + "209.8.196.0/22", + "63.222.64.0/24", + "63.222.156.0/24", + "63.217.208.0/22", + "205.177.10.0/24", + "63.222.189.0/24", + "205.177.56.0/22", + "206.161.232.0/22", + "199.13.0.0/19", + "2400:8800:fc05::/48", + "63.222.16.0/21", + "2400:8800:f80a::/48", + "63.222.163.0/24", + "2400:8800:102::/48", + "199.12.96.0/19", + "63.218.107.0/24", + "63.217.66.0/24", + "217.113.86.0/24", + "63.217.103.0/24", + "63.218.112.0/23", + "2400:8800:fc0f::/48", + "209.8.116.0/24", + "63.218.240.0/23", + "2400:8800:4201::/48", + "205.177.0.0/16", + "63.218.246.0/23", + "209.9.24.0/22", + "63.221.128.0/21", + "2400:8800:f822::/48", + "217.156.160.0/21", + "63.218.213.0/24", + "82.109.112.0/20", + "63.218.36.0/22", + "63.218.100.0/23", + "63.218.76.0/23", + "146.222.239.0/24", + "209.9.48.0/21", + "41.221.216.0/22", + "63.222.93.0/24", + "2400:8800:1001::/48", + "205.252.108.0/22", + "146.222.187.0/24", + "63.216.149.0/24", + "205.252.136.0/24", + "63.222.160.0/24", + "63.223.14.0/24", + "63.222.45.0/24", + "63.218.122.0/23", + "63.216.48.0/21", + "205.252.16.0/22", + "206.161.115.0/24", + "63.218.22.0/23", + "203.170.52.0/22", + "41.79.248.0/24", + "116.66.212.0/22", + "63.222.35.0/24", + "209.9.137.0/24", + "207.226.60.0/24", + "72.57.240.0/24", + "63.222.150.0/24", + "82.110.160.0/19", + "72.57.250.0/24", + "206.161.88.0/24", + "63.223.128.0/24", + "72.57.244.0/24", + "63.218.146.0/23", + "209.8.3.0/24", + "149.134.175.0/24", + "209.9.48.0/24", + "146.222.18.0/24", + "72.57.132.0/24", + "72.57.249.0/24", + "63.223.19.0/24", + "63.218.166.0/23", + "63.220.64.0/18", + "63.218.172.0/23", + "63.223.152.0/24", + "63.223.25.0/24", + "63.223.1.0/24", + "63.223.16.0/24", + "209.8.8.0/21", + "63.223.22.0/24", + "63.221.169.0/24", + "205.177.84.0/22", + "72.57.246.0/24", + "2606:9dc0:fc00::/48", + "63.216.242.0/24", + "63.222.153.0/24", + "63.218.204.0/23", + "146.222.118.0/24", + "63.218.43.0/24", + "207.176.8.0/21", + "168.151.28.0/24", + "209.9.82.0/23", + "63.218.8.0/24", + "212.212.128.0/17", + "206.161.112.0/23", + "63.222.61.0/24", + "63.222.16.0/24", + "209.8.176.0/21", + "63.218.192.0/23", + "207.226.0.0/16", + "209.9.112.0/21", + "63.218.6.0/23", + "63.219.19.0/24", + "146.222.48.0/24", + "63.217.16.0/23", + "63.217.59.0/24", + "196.50.128.0/18", + "63.222.104.0/24", + "63.219.16.0/22", + "63.218.124.0/23", + "63.223.6.0/24", + "63.216.14.0/24", + "63.218.170.0/23", + "146.222.46.0/24", + "72.57.251.0/24", + "63.221.136.0/21", + "63.221.170.0/24", + "72.57.238.0/24", + "209.8.152.0/23", + "2400:8800:f80f::/48", + "199.162.192.0/19", + "63.222.12.0/24", + "2400:8800:f805::/48", + "185.152.48.0/22", + "63.221.168.0/24", + "208.22.128.0/19", + "65.72.32.0/20", + "63.222.38.0/24", + "207.226.144.0/22", + "63.222.51.0/24", + "63.218.214.0/23", + "63.217.237.0/24", + "208.13.192.0/19", + "205.177.176.0/20", + "63.222.75.0/24", + "146.222.238.0/24", + "205.177.8.0/23", + "116.66.210.0/23", + "205.252.14.0/23", + "72.57.242.0/24", + "63.218.228.0/23", + "205.177.197.0/24", + "63.223.13.0/24", + "205.252.56.0/22", + "63.221.240.0/24", + "206.161.128.0/18", + "63.219.52.0/22", + "63.218.160.0/23", + "63.218.142.0/23", + "72.57.248.0/24", + "205.177.164.0/22", + "63.222.167.0/24", + "207.176.48.0/22", + "63.222.41.0/24", + "2400:8800:f829::/48", + "41.221.217.0/24", + "209.9.208.0/21", + "63.222.202.0/24", + "209.8.48.0/22", + "2400:8800:f81f::/48", + "63.222.209.0/24", + "209.8.112.0/21", + "63.218.218.0/23", + "63.217.48.0/22", + "82.108.224.0/19", + "63.220.13.0/24", + "209.8.152.0/21", + "41.221.208.0/20", + "63.218.80.0/23", + "63.222.65.0/24", + "63.218.4.0/23", + "63.223.206.0/24", + "63.219.32.0/24", + "209.8.144.0/22", + "196.251.160.0/19", + "207.226.136.0/21", + "72.57.241.0/24", + "82.109.16.0/20", + "205.252.10.0/24", + "205.252.130.0/23", + "63.216.170.0/24", + "208.20.96.0/19", + "63.217.71.0/24", + "205.177.24.0/22", + "2400:8800:f823::/48", + "72.57.253.0/24", + "206.161.232.0/24", + "205.252.137.0/24", + "209.9.2.0/23", + "205.177.208.0/21", + "63.221.80.0/21", + "63.216.144.0/22", + "63.218.222.0/23", + "63.222.161.0/24", + "63.217.254.0/24", + "63.222.50.0/24", + "63.223.143.0/24", + "63.223.31.0/24", + "63.222.106.0/24", + "2400:8800:4000::/35", + "207.226.114.0/24", + "209.9.80.0/22", + "63.216.240.0/24", + "209.9.8.0/21", + "63.217.72.0/22", + "154.194.34.0/24", + "2400:8800:f804::/48", + "63.222.216.0/24", + "63.218.68.0/22", + "2400:8800:fc0b::/48", + "63.217.60.0/22", + "41.79.248.0/22", + "207.176.115.0/24", + "63.222.52.0/24", + "2400:8800::/32", + "63.223.38.0/24", + "63.216.142.0/23", + "207.176.86.0/24", + "205.252.143.0/24", + "2400:8800:f806::/48", + "209.8.192.0/22", + "168.90.92.0/22", + "63.218.63.0/24", + "63.222.144.0/24", + "209.8.104.0/21", + "205.252.135.0/24", + "41.79.250.0/24", + "63.222.155.0/24", + "82.109.128.0/20", + "2400:8800:c000::/35", + "205.252.0.0/16", + "207.176.0.0/17", + "2400:8800:f821::/48", + "209.8.146.0/24", + "63.218.78.0/23", + "195.21.160.0/19", + "45.195.74.0/24", + "63.222.136.0/24", + "87.84.96.0/19", + "63.218.162.0/23", + "63.218.17.0/24", + "63.218.40.0/24", + "63.218.60.0/22", + "63.220.128.0/21", + "63.223.168.0/24", + "63.222.21.0/24", + "63.216.156.0/24", + "63.218.114.0/23", + "209.8.190.0/24", + "63.223.34.0/24", + "63.216.140.0/24", + "82.109.80.0/20", + "63.221.200.0/21", + "63.218.58.0/24", + "207.176.112.0/21", + "217.113.64.0/19", + "87.82.128.0/18", + "63.219.0.0/20", + "72.57.239.0/24", + "116.66.216.0/22", + "63.221.146.0/24", + "63.222.201.0/24", + "63.222.166.0/24", + "209.8.208.0/21", + "63.218.250.0/23", + "41.79.249.0/24", + "63.222.0.0/22", + "63.218.248.0/23", + "63.218.26.0/23", + "63.217.96.0/22", + "2400:8800:f828::/48", + "63.218.72.0/23", + "63.217.20.0/22", + "2400:8800:101::/48", + "199.13.128.0/19", + "63.218.236.0/23", + "63.221.244.0/24", + "63.217.70.0/24", + "63.223.224.0/24", + "146.222.240.0/24", + "63.216.168.0/21", + "2400:8800:fc03::/48", + "103.28.200.0/24", + "205.177.137.0/24", + "63.218.92.0/22", + "101.60.254.0/24", + "41.79.244.0/22", + "63.218.10.0/23", + "208.21.96.0/19", + "63.218.156.0/23", + "207.176.80.0/20", + "2400:8800:fc10::/48", + "43.230.86.0/23", + "63.218.194.0/23", + "63.217.87.0/24", + "2400:8800:f807::/48", + "208.21.64.0/19", + "207.226.236.0/22", + "63.222.145.0/24", + "63.223.144.0/24", + "205.252.216.0/21", + "63.222.184.0/24", + "206.161.0.0/16", + "2400:8800::/35", + "207.226.238.0/24", + "2400:8800:a000::/35", + "2400:8800:fc09::/48", + "63.218.44.0/22", + "207.176.30.0/24", + "2c0f:f3d0::/32", + "72.57.247.0/24", + "72.57.254.0/24", + "63.222.147.0/24", + "209.8.200.0/21", + "63.222.187.0/24", + "63.222.7.0/24", + "63.218.82.0/23", + "63.223.49.0/24", + "209.9.119.0/24", + "63.222.200.0/24", + "196.216.156.0/24", + "217.156.160.0/24", + "63.216.192.0/21", + "207.226.132.0/22", + "2400:8800:f827::/48", + "63.218.106.0/24", + "63.222.217.0/24", + "63.222.148.0/24", + "209.8.96.0/21", + "63.221.242.0/24", + "116.206.112.0/23", + "205.177.224.0/21", + "205.177.32.0/22", + "209.9.36.0/24", + "63.218.40.0/23", + "63.222.154.0/24", + "63.222.62.0/24", + "116.66.208.0/23", + "2c0f:f3c0::/32", + "2400:8800:fc07::/48", + "63.218.184.0/23", + "146.222.194.0/24", + "63.220.0.0/21", + "205.177.44.0/22", + "206.161.9.0/24", + "209.9.104.0/21", + "63.216.56.0/21", + "146.222.35.0/24", + "116.66.220.0/22", + "63.222.40.0/24", + "2400:8800:1000::/37", + "63.218.48.0/23", + "205.252.134.0/24", + "63.217.81.0/24", + "206.161.216.0/21", + "207.176.31.0/24", + "63.222.188.0/24", + "82.110.192.0/19", + "87.82.32.0/20", + "63.218.14.0/23", + "63.223.54.0/24", + "63.222.37.0/24", + "199.12.0.0/19", + "63.217.40.0/21", + "82.108.176.0/20", + "168.90.94.0/24", + "63.216.164.0/22", + "208.22.160.0/19", + "63.216.193.0/24", + "63.216.82.0/23", + "63.218.178.0/23", + "207.176.32.0/22", + "2400:8800:f811::/48", + "209.9.128.0/21", + "207.226.152.0/21", + "209.9.136.0/24", + "209.9.112.0/24", + "63.223.51.0/24", + "63.222.34.0/24", + "206.161.234.0/24", + "63.217.168.0/22", + "63.220.204.0/24", + "209.8.63.0/24", + "63.222.42.0/24", + "82.109.32.0/20", + "209.8.224.0/21", + "217.113.65.0/24", + "207.226.80.0/20", + "146.222.184.0/24", + "209.9.20.0/22", + "146.222.29.0/24", + "116.66.208.0/20", + "63.223.0.0/24", + "205.177.112.0/24", + "63.218.232.0/23", + "209.9.72.0/22", + "206.161.16.0/21", + "63.223.53.0/24", + "206.161.228.0/22", + "63.218.148.0/23", + "72.57.128.0/22", + "107.155.192.0/18", + "63.222.152.0/24", + "63.218.210.0/23", + "63.222.36.0/24", + "65.72.64.0/20", + "146.222.25.0/24", + "72.57.252.0/24", + "205.252.40.0/22", + "63.218.34.0/23", + "63.222.251.0/24", + "205.177.232.0/22", + "63.223.17.0/24", + "72.57.245.0/24", + "199.12.128.0/19", + "87.83.240.0/20", + "79.109.232.0/22", + "2400:8800:f80e::/48", + "87.85.192.0/19", + "63.223.24.0/24", + "63.218.164.0/23", + "209.9.216.0/21", + "205.252.114.0/24", + "63.217.248.0/22", + "63.217.120.0/22", + "146.222.26.0/24", + "63.222.186.0/24", + "207.226.254.0/23", + "63.218.252.0/23", + "209.8.0.0/15", + "63.222.248.0/24", + "63.223.9.0/24", + "63.218.150.0/23", + "205.177.88.0/21", + "63.218.12.0/23", + "63.216.0.0/13", + "209.9.224.0/19", + "63.217.88.0/21", + "205.177.198.0/24", + "63.222.191.0/24", + "205.177.196.0/22", + "185.77.60.0/22", + "205.177.216.0/21", + "63.222.68.0/24", + "63.221.154.0/24", + "63.218.244.0/24", + "63.218.234.0/23", + "63.222.190.0/24", + "195.21.192.0/18", + "82.110.64.0/19", + "209.9.40.0/21", + "217.156.163.0/24", + "205.252.80.0/21", + "205.177.232.0/24", + "205.177.233.0/24", + "63.222.58.0/24", + "82.110.0.0/19", + "63.223.20.0/24", + "63.218.66.0/24", + "63.218.144.0/23", + "63.223.211.0/24", + "63.218.188.0/23", + "209.9.139.0/24", + "63.222.47.0/24", + "209.9.138.0/24", + "63.221.246.0/24", + "208.20.64.0/19", + "63.218.136.0/24", + "2400:8800:6000::/35", + "206.161.224.0/22", + "2400:8800:fc0e::/48", + "63.222.162.0/24", + "209.9.36.0/22", + "82.108.16.0/20", + "63.222.70.0/24", + "2400:8800:8000::/35", + "63.222.49.0/24", + "2400:8800:e000::/35", + "207.226.224.0/21", + "2400:8800:fc08::/48", + "63.221.152.0/21", + "207.226.216.0/22", + "63.216.151.0/24", + "205.252.168.0/21", + "63.217.168.0/24", + "63.223.11.0/24", + "63.222.4.0/23", + "63.216.150.0/24", + "63.221.245.0/24", + "209.8.178.0/24", + "63.221.192.0/21", + "207.226.32.0/20", + "63.221.181.0/24", + "205.177.132.0/22", + "63.223.64.0/18", + "31.59.78.0/24", + "209.8.240.0/21", + "41.221.216.0/24", + "87.83.176.0/20", + "63.223.156.0/24", + "63.218.174.0/23", + "63.216.35.0/24", + "63.217.80.0/21", + "205.177.234.0/24", + "63.223.192.0/20", + "63.216.176.0/24", + "168.90.92.0/23", + "207.226.244.0/22", + "72.57.255.0/24", + "63.222.33.0/24", + "87.83.128.0/19", + "63.223.27.0/24", + "87.82.64.0/18", + "65.72.0.0/20", + "206.161.248.0/22", + "63.221.155.0/24", + "63.223.44.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 0 unexpected prefix(es), 563 missing" + }, + { + "id": "9b3fb90078818ec1", + "asn": "132372", + "ts": "2026-07-05T14:06:32.273Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "c357e3bcbc850832", + "asn": "15290", + "ts": "2026-07-05T15:06:24.560Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "cac77c5e1106808c", + "asn": "24940", + "ts": "2026-07-05T15:36:23.311Z", + "severity": "HIGH", + "unexpected": [ + "2.28.0.0/16", + "2.29.0.0/16", + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "3431d1a0d359d0bd", + "asn": "138699", + "ts": "2026-07-05T16:06:23.804Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "2e9f81c703b6b860", + "asn": "34702", + "ts": "2026-07-05T17:06:25.180Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "b12c20e9410e39c4", + "asn": "22616", + "ts": "2026-07-05T17:06:25.789Z", + "severity": "CRITICAL", + "unexpected": [ + "205.220.14.0/23", + "137.31.120.0/23", + "137.31.101.0/24", + "137.31.124.0/23", + "137.31.126.0/23", + "137.31.122.0/23", + "137.31.114.0/23", + "155.95.86.0/24", + "137.31.128.0/23", + "140.232.189.0/24", + "137.31.119.0/24", + "140.232.190.0/24", + "2605:4300:e500::/40", + "205.220.12.0/23", + "165.225.99.0/24", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "e46c8d653aba1123", + "asn": "396986", + "ts": "2026-07-05T20:06:28.751Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.71.0/24", + "71.18.64.0/24", + "71.18.66.0/24", + "71.18.65.0/24", + "101.45.202.0/24", + "101.45.6.0/24", + "101.45.18.0/24", + "101.45.14.0/24", + "101.45.199.0/24", + "71.18.67.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "eb8bb14103ff5d06", + "asn": "132372", + "ts": "2026-07-05T20:06:33.341Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "1bd6a971f7bce92c", + "asn": "3491", + "ts": "2026-07-05T20:36:24.513Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "43aa7879ee8067dc", + "asn": "15290", + "ts": "2026-07-05T21:36:24.410Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "e9b5a3ca2098c892", + "asn": "24940", + "ts": "2026-07-05T22:06:23.313Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.29.0.0/16", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "e058899a9597561a", + "asn": "138699", + "ts": "2026-07-05T22:06:24.102Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "d5ba1759c032b6c2", + "asn": "34702", + "ts": "2026-07-05T23:36:24.804Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "d9578b7b8371e43c", + "asn": "22616", + "ts": "2026-07-05T23:36:25.740Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.120.0/23", + "140.232.190.0/24", + "137.31.128.0/23", + "165.225.99.0/24", + "137.31.126.0/23", + "137.31.124.0/23", + "137.31.101.0/24", + "137.31.122.0/23", + "140.232.189.0/24", + "155.95.86.0/24", + "137.31.119.0/24", + "2605:4300:e500::/40", + "137.31.114.0/23", + "205.220.14.0/23", + "205.220.12.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "df5c3a3d558c875c", + "asn": "396986", + "ts": "2026-07-06T02:36:23.600Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.71.0/24", + "71.18.64.0/24", + "71.18.66.0/24", + "71.18.65.0/24", + "101.45.202.0/24", + "101.45.6.0/24", + "101.45.18.0/24", + "101.45.14.0/24", + "101.45.199.0/24", + "71.18.67.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "86dbc6e9b3938199", + "asn": "132372", + "ts": "2026-07-06T02:36:24.760Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "46e1a87c522c9274", + "asn": "3491", + "ts": "2026-07-06T03:06:24.211Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "b708b4950a59dd70", + "asn": "15290", + "ts": "2026-07-06T03:36:24.610Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "541db90e5b8b6e23", + "asn": "24940", + "ts": "2026-07-06T04:36:36.655Z", + "severity": "HIGH", + "unexpected": [ + "2.28.0.0/16", + "2.29.0.0/16", + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "2ae623324cfe5b52", + "asn": "138699", + "ts": "2026-07-06T04:36:36.989Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:c002::/48", + "101.45.198.0/24", + "2404:9dc0:cd04::/48", + "101.45.200.0/23" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "d134c0c52e62ac2d", + "asn": "34702", + "ts": "2026-07-06T05:36:38.316Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "634a397466c97e81", + "asn": "22616", + "ts": "2026-07-06T05:36:39.386Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.128.0/23", + "155.95.86.0/24", + "205.220.14.0/23", + "137.31.114.0/23", + "137.31.101.0/24", + "140.232.190.0/24", + "137.31.124.0/23", + "165.225.99.0/24", + "137.31.122.0/23", + "140.232.189.0/24", + "2605:4300:e500::/40", + "137.31.119.0/24", + "205.220.12.0/23", + "137.31.126.0/23", + "137.31.120.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "3c94af64b74d96c8", + "asn": "396986", + "ts": "2026-07-06T08:36:37.002Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.18.0/24", + "71.18.67.0/24", + "71.18.65.0/24", + "101.45.202.0/24", + "101.45.14.0/24", + "71.18.66.0/24", + "101.45.6.0/24", + "101.45.199.0/24", + "71.18.64.0/24", + "71.18.71.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "50651ca73e33729b", + "asn": "132372", + "ts": "2026-07-06T08:36:38.322Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "a4f27e8444a5f4d5", + "asn": "3491", + "ts": "2026-07-06T09:06:37.022Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "e9eb583e25ff8143", + "asn": "15290", + "ts": "2026-07-06T09:36:37.785Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "46a0e9e5c5a0d68c", + "asn": "24940", + "ts": "2026-07-06T11:06:36.726Z", + "severity": "HIGH", + "unexpected": [ + "2.28.0.0/16", + "2.29.0.0/16", + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "97e4e77fd06d7ec0", + "asn": "138699", + "ts": "2026-07-06T11:06:37.317Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "ce02faab825ade34", + "asn": "34702", + "ts": "2026-07-06T11:36:39.621Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "b063440a2d1b5859", + "asn": "22616", + "ts": "2026-07-06T11:36:42.742Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.126.0/23", + "137.31.120.0/23", + "205.220.14.0/23", + "137.31.124.0/23", + "140.232.190.0/24", + "137.31.101.0/24", + "205.220.12.0/23", + "137.31.119.0/24", + "155.95.86.0/24", + "165.225.99.0/24", + "137.31.122.0/23", + "2605:4300:e500::/40", + "140.232.189.0/24", + "137.31.114.0/23", + "137.31.128.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "d614308f82d73c2a", + "asn": "396986", + "ts": "2026-07-06T14:36:37.252Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.71.0/24", + "71.18.64.0/24", + "101.45.18.0/24", + "71.18.67.0/24", + "101.45.6.0/24", + "71.18.66.0/24", + "71.18.65.0/24", + "101.45.199.0/24", + "101.45.14.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "faa952f8d1ba5113", + "asn": "132372", + "ts": "2026-07-06T14:36:38.591Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "1688bb2c11804609", + "asn": "3491", + "ts": "2026-07-06T15:06:37.580Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "9ba05d7f4f9121c6", + "asn": "15290", + "ts": "2026-07-06T15:36:38.376Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "e0c059db8bd774c5", + "asn": "24940", + "ts": "2026-07-06T17:36:36.671Z", + "severity": "HIGH", + "unexpected": [ + "2.28.0.0/16", + "2.29.0.0/16", + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "f04d3a932d809065", + "asn": "138699", + "ts": "2026-07-06T17:36:37.582Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "5188c4d725ad84d8", + "asn": "34702", + "ts": "2026-07-06T18:06:46.226Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "5ee19bc9e2c908eb", + "asn": "22616", + "ts": "2026-07-06T18:06:47.301Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.126.0/23", + "137.31.120.0/23", + "205.220.14.0/23", + "137.31.124.0/23", + "140.232.190.0/24", + "137.31.101.0/24", + "205.220.12.0/23", + "137.31.119.0/24", + "155.95.86.0/24", + "165.225.99.0/24", + "137.31.122.0/23", + "2605:4300:e500::/40", + "140.232.189.0/24", + "137.31.114.0/23", + "137.31.128.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "ba92d720cfeb7eca", + "asn": "396986", + "ts": "2026-07-06T20:36:37.282Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.64.0/24", + "101.45.18.0/24", + "101.45.6.0/24", + "101.45.14.0/24", + "71.18.66.0/24", + "71.18.67.0/24", + "101.45.202.0/24", + "71.18.65.0/24", + "101.45.199.0/24", + "71.18.71.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "08c4a32209b92e42", + "asn": "132372", + "ts": "2026-07-06T20:36:38.686Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "88c159208037bba2", + "asn": "3491", + "ts": "2026-07-06T21:36:37.975Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "129388c402b7cb44", + "asn": "15290", + "ts": "2026-07-06T22:06:37.975Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "63aead565b2ff0ee", + "asn": "24940", + "ts": "2026-07-06T23:36:36.683Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "23c5b4cc6d35addf", + "asn": "138699", + "ts": "2026-07-07T00:06:37.043Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "dc2735e999ff2d92", + "asn": "34702", + "ts": "2026-07-07T00:36:38.418Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "5c490c88f4be64fb", + "asn": "22616", + "ts": "2026-07-07T00:36:40.059Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.119.0/24", + "137.31.122.0/23", + "2605:4300:e500::/40", + "137.31.124.0/23", + "155.95.86.0/24", + "137.31.101.0/24", + "165.225.99.0/24", + "137.31.126.0/23", + "137.31.114.0/23", + "137.31.128.0/23", + "140.232.189.0/24", + "205.220.12.0/23", + "205.220.14.0/23", + "137.31.120.0/23", + "140.232.190.0/24", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "1ea566720a887fce", + "asn": "396986", + "ts": "2026-07-07T02:36:37.378Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.64.0/24", + "101.45.18.0/24", + "101.45.6.0/24", + "101.45.14.0/24", + "71.18.66.0/24", + "71.18.67.0/24", + "101.45.202.0/24", + "71.18.65.0/24", + "101.45.199.0/24", + "71.18.71.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "bd400e5e8e769af4", + "asn": "132372", + "ts": "2026-07-07T02:36:38.883Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "45c24191d55a282e", + "asn": "3491", + "ts": "2026-07-07T04:36:47.772Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "62efbeb2b260b723", + "asn": "15290", + "ts": "2026-07-07T04:36:48.104Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "0a482841d22eed63", + "asn": "24940", + "ts": "2026-07-07T05:36:42.308Z", + "severity": "HIGH", + "unexpected": [ + "2.28.0.0/16", + "2.29.0.0/16", + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "8c32918981db999c", + "asn": "138699", + "ts": "2026-07-07T06:06:50.586Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "0fa4cf50d3bc92e4", + "asn": "57099", + "ts": "2026-07-07T06:07:06.588Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "185.168.144.0/22", + "146.255.104.0/21", + "85.95.32.0/19", + "91.214.228.0/22", + "185.47.216.0/22", + "185.113.0.0/22", + "151.249.64.0/20", + "5.133.172.0/22", + "164.138.80.0/21", + "209.35.128.0/20", + "185.56.40.0/22", + "185.44.248.0/22", + "185.16.224.0/22", + "46.231.8.0/21", + "91.229.222.0/23" + ], + "resolved": false, + "msg": "BGP anomaly for AS57099: 0 unexpected prefix(es), 15 missing" + }, + { + "id": "fb390b6b1aa94491", + "asn": "34702", + "ts": "2026-07-07T06:36:45.648Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "49213f7945713249", + "asn": "22616", + "ts": "2026-07-07T06:36:46.814Z", + "severity": "CRITICAL", + "unexpected": [ + "155.95.86.0/24", + "137.31.126.0/23", + "137.31.101.0/24", + "137.31.114.0/23", + "140.232.190.0/24", + "2605:4300:e500::/40", + "137.31.120.0/23", + "137.31.124.0/23", + "137.31.122.0/23", + "205.220.12.0/23", + "205.220.14.0/23", + "165.225.99.0/24", + "140.232.189.0/24", + "137.31.128.0/23", + "137.31.119.0/24", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "1c3fd781abd86afb", + "asn": "396986", + "ts": "2026-07-07T08:41:50.065Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.67.0/24", + "71.18.66.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "71.18.71.0/24", + "101.45.202.0/24", + "71.18.65.0/24", + "101.45.18.0/24", + "101.45.199.0/24", + "101.45.14.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "42429e68b3023a2f", + "asn": "132372", + "ts": "2026-07-07T08:41:51.361Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "4ce93608eceae20a", + "asn": "3491", + "ts": "2026-07-07T10:41:50.695Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "812779939f758dac", + "asn": "15290", + "ts": "2026-07-07T10:41:51.027Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "f75c19fce0aa6a8f", + "asn": "24940", + "ts": "2026-07-07T11:41:49.797Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "04a4eeb756f79db1", + "asn": "138699", + "ts": "2026-07-07T12:11:50.029Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "101.45.198.0/24", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "be6ba4c578a7bc80", + "asn": "34702", + "ts": "2026-07-07T12:41:51.384Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "49bbbaa2846b4a78", + "asn": "22616", + "ts": "2026-07-07T12:41:52.737Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.101.0/24", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.114.0/23", + "137.31.128.0/23", + "205.220.12.0/23", + "2605:4300:e500::/40", + "137.31.119.0/24", + "137.31.124.0/23", + "205.220.14.0/23", + "155.95.86.0/24", + "137.31.120.0/23", + "165.225.99.0/24", + "137.31.122.0/23", + "137.31.126.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "a71cfd0bf013d14b", + "asn": "396986", + "ts": "2026-07-07T14:41:50.164Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.64.0/24", + "101.45.202.0/24", + "101.45.18.0/24", + "101.45.14.0/24", + "71.18.65.0/24", + "101.45.6.0/24", + "101.45.199.0/24", + "71.18.71.0/24", + "71.18.67.0/24", + "71.18.66.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "13b73e76a9b74ada", + "asn": "132372", + "ts": "2026-07-07T14:41:51.648Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "6dd49672252e6ebb", + "asn": "3491", + "ts": "2026-07-07T17:11:50.703Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "b4d91594fd7c18b3", + "asn": "15290", + "ts": "2026-07-07T17:11:51.035Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 25 missing" + }, + { + "id": "02ee0e1d804f4d7d", + "asn": "24940", + "ts": "2026-07-07T18:11:49.806Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "995a3ba55658ba2d", + "asn": "138699", + "ts": "2026-07-07T18:11:52.151Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "101.45.198.0/24", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "161d427572f009a9", + "asn": "34702", + "ts": "2026-07-07T19:11:50.592Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "3f4bbe5cc226017b", + "asn": "22616", + "ts": "2026-07-07T19:11:51.605Z", + "severity": "CRITICAL", + "unexpected": [ + "205.220.12.0/23", + "137.31.101.0/24", + "155.95.86.0/24", + "165.225.99.0/24", + "205.220.14.0/23", + "140.232.190.0/24", + "137.31.128.0/23", + "137.31.124.0/23", + "2605:4300:e500::/40", + "137.31.114.0/23", + "137.31.126.0/23", + "140.232.189.0/24", + "137.31.119.0/24", + "137.31.120.0/23", + "137.31.122.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "7d48f64d65c6555e", + "asn": "396986", + "ts": "2026-07-07T20:41:50.657Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.202.0/24", + "71.18.65.0/24", + "101.45.199.0/24", + "71.18.67.0/24", + "71.18.71.0/24", + "101.45.14.0/24", + "71.18.66.0/24", + "101.45.6.0/24", + "101.45.18.0/24", + "71.18.64.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "beaa40fff0109bdd", + "asn": "132372", + "ts": "2026-07-07T20:41:51.972Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "874f6bee508686ed", + "asn": "3491", + "ts": "2026-07-07T23:11:50.735Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "9a861217bbc0428a", + "asn": "15290", + "ts": "2026-07-07T23:11:51.059Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 31 missing" + }, + { + "id": "67741b5d8e6e0958", + "asn": "24940", + "ts": "2026-07-08T00:11:49.826Z", + "severity": "HIGH", + "unexpected": [ + "2.28.0.0/16", + "2.29.0.0/16", + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "d9c48264cc110048", + "asn": "138699", + "ts": "2026-07-08T00:41:50.130Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "2404:9dc0:cd04::/48", + "101.45.200.0/23", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "43153c985bbb3f63", + "asn": "34702", + "ts": "2026-07-08T01:11:51.120Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "22adad183372a3d0", + "asn": "22616", + "ts": "2026-07-08T01:11:52.161Z", + "severity": "CRITICAL", + "unexpected": [ + "205.220.12.0/23", + "137.31.101.0/24", + "155.95.86.0/24", + "165.225.99.0/24", + "205.220.14.0/23", + "140.232.190.0/24", + "137.31.128.0/23", + "137.31.124.0/23", + "2605:4300:e500::/40", + "137.31.114.0/23", + "137.31.126.0/23", + "140.232.189.0/24", + "137.31.119.0/24", + "137.31.120.0/23", + "137.31.122.0/23", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "c3a65c6741abe7ad", + "asn": "396986", + "ts": "2026-07-08T03:11:50.109Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.64.0/24", + "101.45.18.0/24", + "71.18.67.0/24", + "101.45.6.0/24", + "101.45.14.0/24", + "71.18.65.0/24", + "101.45.202.0/24", + "71.18.71.0/24", + "71.18.66.0/24", + "101.45.199.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "c92baf692404a183", + "asn": "132372", + "ts": "2026-07-08T03:11:51.404Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "7cc5a2f8a3f25f71", + "asn": "3491", + "ts": "2026-07-08T05:41:50.740Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "24e60c8fb9ef0771", + "asn": "15290", + "ts": "2026-07-08T05:41:51.094Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "00b50870778967c6", + "asn": "24940", + "ts": "2026-07-08T06:41:49.830Z", + "severity": "HIGH", + "unexpected": [ + "2.28.0.0/16", + "193.105.82.0/24", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "13e71cde83ae9596", + "asn": "138699", + "ts": "2026-07-08T06:41:50.268Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "1e2c1439a1a54bf2", + "asn": "34702", + "ts": "2026-07-08T07:11:51.155Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "2842c26ed2214975", + "asn": "22616", + "ts": "2026-07-08T07:41:53.344Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.126.0/23", + "137.31.128.0/23", + "137.31.120.0/23", + "137.31.114.0/23", + "137.31.124.0/23", + "137.31.101.0/24", + "140.232.189.0/24", + "2605:4300:e500::/40", + "137.31.119.0/24", + "205.220.12.0/23", + "155.95.86.0/24", + "137.31.122.0/23", + "165.225.99.0/24", + "205.220.14.0/23", + "140.232.190.0/24", + "140.232.188.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "9745b630471b37c3", + "asn": "396986", + "ts": "2026-07-08T09:11:50.124Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.64.0/24", + "101.45.18.0/24", + "71.18.67.0/24", + "101.45.6.0/24", + "101.45.14.0/24", + "71.18.65.0/24", + "101.45.202.0/24", + "71.18.71.0/24", + "71.18.66.0/24", + "101.45.199.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "f623828aef22adb5", + "asn": "132372", + "ts": "2026-07-08T09:41:51.423Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "02148249d92e7afc", + "asn": "3491", + "ts": "2026-07-08T12:11:51.815Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "19544f6fb038fcf6", + "asn": "15290", + "ts": "2026-07-08T12:11:52.326Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "3654605099f57c82", + "asn": "24940", + "ts": "2026-07-08T13:11:49.802Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "ad89cc91c9a79eb8", + "asn": "138699", + "ts": "2026-07-08T13:11:50.559Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "4c97f567aeb6aa71", + "asn": "34702", + "ts": "2026-07-08T13:11:51.504Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "7809a1e71630eea9", + "asn": "22616", + "ts": "2026-07-08T14:11:52.208Z", + "severity": "CRITICAL", + "unexpected": [ + "140.232.188.0/24", + "137.31.126.0/23", + "2605:4300:e500::/40", + "137.31.128.0/23", + "205.220.12.0/23", + "137.31.120.0/23", + "137.31.119.0/24", + "155.95.86.0/24", + "137.31.122.0/23", + "137.31.101.0/24", + "140.232.189.0/24", + "137.31.124.0/23", + "137.31.114.0/23", + "140.232.190.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "8a102c2167431a97", + "asn": "396986", + "ts": "2026-07-08T15:11:50.156Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.65.0/24", + "71.18.71.0/24", + "101.45.6.0/24", + "71.18.67.0/24", + "101.45.18.0/24", + "101.45.199.0/24", + "101.45.14.0/24", + "101.45.202.0/24", + "71.18.66.0/24", + "71.18.64.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "2db57ce237d64761", + "asn": "132372", + "ts": "2026-07-08T15:41:51.522Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "4ba3590a828fc21a", + "asn": "3491", + "ts": "2026-07-08T18:41:50.716Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "09af38f29b2e2864", + "asn": "15290", + "ts": "2026-07-08T18:41:51.030Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "3eb61daaf938ffce", + "asn": "24940", + "ts": "2026-07-08T19:11:49.868Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "2.28.0.0/16", + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "7393824f99532673", + "asn": "138699", + "ts": "2026-07-08T19:41:50.170Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "1928cc543d113c1f", + "asn": "34702", + "ts": "2026-07-08T19:41:51.143Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "db7f39f3e646267c", + "asn": "22616", + "ts": "2026-07-08T20:11:52.484Z", + "severity": "CRITICAL", + "unexpected": [ + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "137.31.124.0/23", + "165.225.99.0/24", + "137.31.114.0/23", + "205.220.12.0/23", + "140.232.190.0/24", + "137.31.120.0/23", + "137.31.101.0/24", + "140.232.188.0/24", + "205.220.14.0/23", + "140.232.189.0/24", + "137.31.119.0/24", + "137.31.126.0/23", + "137.31.128.0/23", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "aa2f1fd594e4ddbd", + "asn": "396986", + "ts": "2026-07-08T21:11:50.170Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.64.0/24", + "101.45.18.0/24", + "101.45.14.0/24", + "71.18.71.0/24", + "101.45.6.0/24", + "71.18.44.0/24", + "101.45.202.0/24", + "101.45.199.0/24", + "71.18.66.0/24", + "71.18.45.0/24", + "71.18.65.0/24", + "71.18.67.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 4 missing" + }, + { + "id": "5da5bc7c4644ef13", + "asn": "199121", + "ts": "2026-07-08T21:41:57.684Z", + "severity": "MEDIUM", + "unexpected": [], + "missing": [ + "2001:67c:7a4::/48", + "91.244.180.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS199121: 0 unexpected prefix(es), 2 missing" + }, + { + "id": "4896993c08b80977", + "asn": "132372", + "ts": "2026-07-08T21:42:02.315Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "f3e002a09d60b229", + "asn": "3491", + "ts": "2026-07-09T00:41:50.990Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48", + "63.219.192.0/24", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "436486e61447ccd4", + "asn": "15290", + "ts": "2026-07-09T00:41:51.381Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "55a138dfc2347d99", + "asn": "24940", + "ts": "2026-07-09T01:41:49.803Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "2.28.0.0/16", + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "cdc31a5bdc9f9c5a", + "asn": "138699", + "ts": "2026-07-09T02:11:50.181Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "ae9c6f3783acffd8", + "asn": "34702", + "ts": "2026-07-09T02:11:51.150Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "447ec3bccaf78fa1", + "asn": "22616", + "ts": "2026-07-09T02:41:52.439Z", + "severity": "CRITICAL", + "unexpected": [ + "2605:4300:e500::/40", + "137.31.122.0/23", + "155.95.86.0/24", + "137.31.124.0/23", + "165.225.99.0/24", + "137.31.114.0/23", + "205.220.12.0/23", + "140.232.190.0/24", + "137.31.120.0/23", + "137.31.101.0/24", + "140.232.188.0/24", + "205.220.14.0/23", + "140.232.189.0/24", + "137.31.119.0/24", + "137.31.126.0/23", + "137.31.128.0/23", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "925e85d68236a837", + "asn": "396986", + "ts": "2026-07-09T03:41:50.115Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.202.0/24", + "101.45.199.0/24", + "71.18.45.0/24", + "101.45.18.0/24", + "71.18.67.0/24", + "71.18.44.0/24", + "101.45.14.0/24", + "71.18.65.0/24", + "71.18.64.0/24", + "71.18.71.0/24", + "101.45.6.0/24", + "71.18.66.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 5 missing" + }, + { + "id": "cd37bdc29ff69d86", + "asn": "132372", + "ts": "2026-07-09T04:12:01.263Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "dad5c4fbb69aa499", + "asn": "3491", + "ts": "2026-07-09T06:41:51.149Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "a2b99c05c456d59c", + "asn": "15290", + "ts": "2026-07-09T06:41:51.600Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "02452466c09cac6d", + "asn": "24940", + "ts": "2026-07-09T07:41:49.825Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "193.105.82.0/24", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "88eeeb650cda9d87", + "asn": "138699", + "ts": "2026-07-09T08:11:50.187Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "101.45.200.0/23" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "5d208cf0e1b54549", + "asn": "34702", + "ts": "2026-07-09T08:11:51.292Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "bac15a51fecb7f29", + "asn": "22616", + "ts": "2026-07-09T09:11:52.398Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.122.0/23", + "140.232.188.0/24", + "205.220.12.0/23", + "137.31.114.0/23", + "140.232.189.0/24", + "137.31.119.0/24", + "2605:4300:e500::/40", + "155.95.86.0/24", + "137.31.126.0/23", + "137.31.120.0/23", + "205.220.14.0/23", + "137.31.124.0/23", + "165.225.99.0/24", + "137.31.101.0/24", + "137.31.128.0/23", + "140.232.190.0/24", + "137.31.26.0/23", + "137.31.24.0/23" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 18 unexpected prefix(es), 0 missing" + }, + { + "id": "144ee87188381afa", + "asn": "396986", + "ts": "2026-07-09T09:41:50.354Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.202.0/24", + "101.45.199.0/24", + "71.18.45.0/24", + "101.45.18.0/24", + "71.18.67.0/24", + "71.18.44.0/24", + "101.45.14.0/24", + "71.18.65.0/24", + "71.18.64.0/24", + "71.18.71.0/24", + "101.45.6.0/24", + "71.18.66.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 5 missing" + }, + { + "id": "76fa0ef4e900bcf3", + "asn": "132372", + "ts": "2026-07-09T10:41:51.466Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "1030c0a5babe76a3", + "asn": "3491", + "ts": "2026-07-09T13:11:50.722Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "4045550884e0d61f", + "asn": "15290", + "ts": "2026-07-09T13:11:51.095Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "7bc0ca9ea0cc446d", + "asn": "24940", + "ts": "2026-07-09T14:11:49.843Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.29.0.0/16", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "1b757779765cad32", + "asn": "138699", + "ts": "2026-07-09T14:11:50.205Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "8d3cf257cd32674f", + "asn": "34702", + "ts": "2026-07-09T14:41:51.260Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "fbbf8c0f7ca771db", + "asn": "22616", + "ts": "2026-07-09T15:41:52.398Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.124.0/23", + "155.95.86.0/24", + "205.220.12.0/23", + "137.31.119.0/24", + "205.220.14.0/23", + "165.225.99.0/24", + "137.31.101.0/24", + "137.31.126.0/23", + "2605:4300:e500::/40", + "140.232.190.0/24", + "137.31.128.0/23", + "140.232.188.0/24", + "137.31.122.0/23", + "137.31.114.0/23", + "140.232.189.0/24", + "137.31.120.0/23", + "137.31.26.0/23", + "137.31.24.0/23", + "89.18.89.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 19 unexpected prefix(es), 0 missing" + }, + { + "id": "d87dd71d2df9deb5", + "asn": "396986", + "ts": "2026-07-09T16:11:50.608Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.64.0/24", + "101.45.199.0/24", + "71.18.65.0/24", + "71.18.71.0/24", + "101.45.18.0/24", + "71.18.67.0/24", + "101.45.15.0/24", + "101.45.6.0/24", + "71.18.44.0/24", + "101.45.14.0/24", + "71.18.66.0/24", + "71.18.45.0/24", + "101.45.202.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 5 missing" + }, + { + "id": "6b7d0af1287b3c2a", + "asn": "132372", + "ts": "2026-07-09T16:41:51.469Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "5d24eaa839529baf", + "asn": "3491", + "ts": "2026-07-09T19:11:51.205Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "d67939bf5f73f2f7", + "asn": "15290", + "ts": "2026-07-09T19:11:51.539Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "c9ee5b6a23d7e5b5", + "asn": "138699", + "ts": "2026-07-09T20:11:50.654Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "9ad11efd82be9c82", + "asn": "24940", + "ts": "2026-07-09T20:41:49.825Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "193.105.82.0/24", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "f65ea38eaf344d3a", + "asn": "34702", + "ts": "2026-07-09T21:11:51.225Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "f28930ec91047ead", + "asn": "22616", + "ts": "2026-07-09T21:41:52.598Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.120.0/23", + "140.232.190.0/24", + "155.95.86.0/24", + "2605:4300:e500::/40", + "137.31.119.0/24", + "140.232.189.0/24", + "137.31.126.0/23", + "205.220.12.0/23", + "137.31.122.0/23", + "137.31.114.0/23", + "137.31.124.0/23", + "165.225.99.0/24", + "137.31.101.0/24", + "140.232.188.0/24", + "205.220.14.0/23", + "137.31.128.0/23", + "137.31.26.0/23", + "137.31.24.0/23", + "89.18.89.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 19 unexpected prefix(es), 0 missing" + }, + { + "id": "f364a1e634e474b7", + "asn": "396986", + "ts": "2026-07-09T22:41:50.169Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "71.18.64.0/24", + "101.45.202.0/24", + "101.45.18.0/24", + "71.18.45.0/24", + "101.45.199.0/24", + "71.18.65.0/24", + "101.45.14.0/24", + "71.18.67.0/24", + "71.18.71.0/24", + "101.45.6.0/24", + "71.18.44.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 5 missing" + }, + { + "id": "ec10601b1e43ec0a", + "asn": "132372", + "ts": "2026-07-09T22:41:51.489Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "cf25a9024b30bf30", + "asn": "3491", + "ts": "2026-07-10T01:41:51.012Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "f00227dc1d580676", + "asn": "15290", + "ts": "2026-07-10T01:41:51.338Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "cdfed84e824a215d", + "asn": "24940", + "ts": "2026-07-10T02:41:49.828Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "193.105.82.0/24", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "0885655334ab305c", + "asn": "138699", + "ts": "2026-07-10T02:41:50.162Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "11fd04ad54d1620d", + "asn": "34702", + "ts": "2026-07-10T03:11:51.581Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "bd5990278e24160b", + "asn": "22616", + "ts": "2026-07-10T03:41:53.607Z", + "severity": "CRITICAL", + "unexpected": [ + "205.220.14.0/23", + "155.95.86.0/24", + "137.31.126.0/23", + "137.31.122.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "2605:4300:e500::/40", + "137.31.124.0/23", + "140.232.190.0/24", + "140.232.188.0/24", + "165.225.99.0/24", + "205.220.12.0/23", + "140.232.189.0/24", + "137.31.114.0/23", + "137.31.120.0/23", + "137.31.101.0/24", + "137.31.26.0/23", + "137.31.24.0/23", + "89.18.89.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 19 unexpected prefix(es), 0 missing" + }, + { + "id": "0544d2de8c3a2916", + "asn": "396986", + "ts": "2026-07-10T05:11:50.161Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.14.0/24", + "71.18.71.0/24", + "101.45.15.0/24", + "71.18.44.0/24", + "71.18.65.0/24", + "71.18.45.0/24", + "101.45.6.0/24", + "101.45.199.0/24", + "101.45.18.0/24", + "101.45.202.0/24", + "71.18.67.0/24", + "71.18.66.0/24", + "71.18.64.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 5 missing" + }, + { + "id": "85cad3d6552a7a35", + "asn": "132372", + "ts": "2026-07-10T05:11:51.427Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "4e16ab63793fec6a", + "asn": "3491", + "ts": "2026-07-10T08:11:50.683Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "63148bf4a8f296fa", + "asn": "15290", + "ts": "2026-07-10T08:11:51.019Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "6ad19c5f3d3af761", + "asn": "24940", + "ts": "2026-07-10T08:41:49.847Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "fde7971f4007fe76", + "asn": "138699", + "ts": "2026-07-10T08:41:50.173Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:c002::/48", + "101.45.198.0/24", + "2404:9dc0:cd04::/48", + "101.45.200.0/23" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "c07a2ba10d9ff696", + "asn": "34702", + "ts": "2026-07-10T09:41:51.282Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "98bd22d807e0c1a4", + "asn": "22616", + "ts": "2026-07-10T09:41:55.375Z", + "severity": "CRITICAL", + "unexpected": [ + "205.220.14.0/23", + "155.95.86.0/24", + "137.31.126.0/23", + "137.31.122.0/23", + "137.31.119.0/24", + "137.31.128.0/23", + "2605:4300:e500::/40", + "137.31.124.0/23", + "140.232.190.0/24", + "140.232.188.0/24", + "165.225.99.0/24", + "205.220.12.0/23", + "140.232.189.0/24", + "137.31.114.0/23", + "137.31.120.0/23", + "137.31.101.0/24", + "137.31.26.0/23", + "137.31.24.0/23", + "89.18.89.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 19 unexpected prefix(es), 0 missing" + }, + { + "id": "1b97b0670c4c3fd3", + "asn": "132372", + "ts": "2026-07-10T11:11:51.440Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "cdc2518f636fd4d4", + "asn": "396986", + "ts": "2026-07-10T11:41:50.298Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.44.0/24", + "71.18.66.0/24", + "71.18.45.0/24", + "101.45.18.0/24", + "71.18.64.0/24", + "101.45.202.0/24", + "71.18.71.0/24", + "71.18.65.0/24", + "101.45.199.0/24", + "101.45.6.0/24", + "71.18.67.0/24", + "101.45.14.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 5 missing" + }, + { + "id": "509a4ef6996f3b3b", + "asn": "3491", + "ts": "2026-07-10T14:11:51.323Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "15eff556db418ba9", + "asn": "15290", + "ts": "2026-07-10T14:11:51.672Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "40f23da8811d2e8e", + "asn": "24940", + "ts": "2026-07-10T15:11:49.839Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.29.0.0/16", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "11ec1dee9fb44793", + "asn": "138699", + "ts": "2026-07-10T15:11:50.180Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "bda571cbda55d511", + "asn": "34702", + "ts": "2026-07-10T15:41:54.022Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "2c960a92ea7db104", + "asn": "22616", + "ts": "2026-07-10T16:11:52.354Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.119.0/24", + "2605:4300:e500::/40", + "137.31.114.0/23", + "137.31.126.0/23", + "155.95.86.0/24", + "140.232.188.0/24", + "137.31.122.0/23", + "140.232.189.0/24", + "137.31.101.0/24", + "137.31.124.0/23", + "140.232.190.0/24", + "137.31.120.0/23", + "165.225.99.0/24", + "205.220.14.0/23", + "205.220.12.0/23", + "137.31.128.0/23", + "137.31.26.0/23", + "137.31.24.0/23", + "89.18.89.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 19 unexpected prefix(es), 0 missing" + }, + { + "id": "2d243242a045dab6", + "asn": "132372", + "ts": "2026-07-10T17:11:51.979Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "3567a90ad4cb9160", + "asn": "396986", + "ts": "2026-07-10T18:11:50.178Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.44.0/24", + "71.18.66.0/24", + "71.18.45.0/24", + "101.45.18.0/24", + "71.18.64.0/24", + "101.45.202.0/24", + "71.18.71.0/24", + "71.18.65.0/24", + "101.45.199.0/24", + "101.45.6.0/24", + "71.18.67.0/24", + "101.45.14.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 5 missing" + }, + { + "id": "7aa0db8fcdca6bff", + "asn": "3491", + "ts": "2026-07-10T20:41:50.661Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "25db6afd6318d622", + "asn": "15290", + "ts": "2026-07-10T20:41:50.993Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "17ccd62c604b8661", + "asn": "24940", + "ts": "2026-07-10T21:11:49.910Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.29.0.0/16", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "7991624957914ae6", + "asn": "138699", + "ts": "2026-07-10T21:11:50.254Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "d8d224cae74c2301", + "asn": "34702", + "ts": "2026-07-10T22:11:51.154Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "3311b6e4f977e2fa", + "asn": "22616", + "ts": "2026-07-10T22:41:52.391Z", + "severity": "CRITICAL", + "unexpected": [ + "140.232.188.0/24", + "155.95.86.0/24", + "2605:4300:e500::/40", + "165.225.99.0/24", + "137.31.119.0/24", + "205.220.12.0/23", + "137.31.128.0/23", + "205.220.14.0/23", + "137.31.101.0/24", + "137.31.124.0/23", + "137.31.114.0/23", + "140.232.190.0/24", + "140.232.189.0/24", + "137.31.122.0/23", + "137.31.126.0/23", + "137.31.120.0/23", + "137.31.26.0/23", + "137.31.24.0/23", + "89.18.89.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 19 unexpected prefix(es), 0 missing" + }, + { + "id": "3d198de693e2eedb", + "asn": "199121", + "ts": "2026-07-10T23:11:57.714Z", + "severity": "MEDIUM", + "unexpected": [], + "missing": [ + "2001:67c:7a4::/48", + "91.244.180.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS199121: 0 unexpected prefix(es), 2 missing" + }, + { + "id": "76ca5250c8b05705", + "asn": "132372", + "ts": "2026-07-10T23:11:59.253Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "22117557a13acc3f", + "asn": "396986", + "ts": "2026-07-11T00:41:50.119Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.18.0/24", + "71.18.45.0/24", + "71.18.66.0/24", + "71.18.67.0/24", + "101.45.14.0/24", + "71.18.71.0/24", + "101.45.15.0/24", + "71.18.44.0/24", + "101.45.202.0/24", + "71.18.65.0/24", + "101.45.199.0/24", + "101.45.6.0/24", + "71.18.64.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 5 missing" + }, + { + "id": "16c0e133b70e40b9", + "asn": "3491", + "ts": "2026-07-11T02:41:52.200Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "624bac0481241f09", + "asn": "15290", + "ts": "2026-07-11T02:41:52.522Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "e04745df78e66991", + "asn": "24940", + "ts": "2026-07-11T03:41:49.850Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "deb49de690a19577", + "asn": "138699", + "ts": "2026-07-11T03:41:50.178Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.200.0/23", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "ccef87b520da960e", + "asn": "34702", + "ts": "2026-07-11T04:11:51.227Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "444cf239ec516a7e", + "asn": "22616", + "ts": "2026-07-11T04:42:00.378Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.128.0/23", + "155.95.86.0/24", + "140.232.188.0/24", + "137.31.120.0/23", + "165.225.99.0/24", + "137.31.126.0/23", + "205.220.12.0/23", + "137.31.119.0/24", + "2605:4300:e500::/40", + "137.31.124.0/23", + "140.232.189.0/24", + "140.232.190.0/24", + "205.220.14.0/23", + "137.31.122.0/23", + "137.31.114.0/23", + "137.31.101.0/24", + "137.31.26.0/23", + "137.31.24.0/23", + "89.18.89.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 19 unexpected prefix(es), 0 missing" + }, + { + "id": "0dca9d690c2db171", + "asn": "132372", + "ts": "2026-07-11T05:41:52.759Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "0ca222b437f9e14d", + "asn": "396986", + "ts": "2026-07-11T06:41:50.173Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.199.0/24", + "71.18.66.0/24", + "71.18.64.0/24", + "71.18.71.0/24", + "101.45.15.0/24", + "71.18.45.0/24", + "101.45.202.0/24", + "71.18.67.0/24", + "101.45.18.0/24", + "101.45.6.0/24", + "71.18.65.0/24", + "71.18.44.0/24", + "101.45.14.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 5 missing" + }, + { + "id": "658afc10bffb76d5", + "asn": "199121", + "ts": "2026-07-11T09:11:57.714Z", + "severity": "MEDIUM", + "unexpected": [], + "missing": [ + "2001:67c:7a4::/48", + "91.244.180.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS199121: 0 unexpected prefix(es), 2 missing" + }, + { + "id": "f060bc043278c1a2", + "asn": "3491", + "ts": "2026-07-11T09:11:58.644Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "c78cd939ab9cf421", + "asn": "15290", + "ts": "2026-07-11T09:11:58.947Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "90d4c4ac62af91d2", + "asn": "24940", + "ts": "2026-07-11T09:41:49.868Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "d3ebdeceb9917a27", + "asn": "138699", + "ts": "2026-07-11T09:41:50.217Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.200.0/23", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "e28d01e6f66a38bd", + "asn": "34702", + "ts": "2026-07-11T10:11:51.335Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "afa3d2959f2e99a9", + "asn": "22616", + "ts": "2026-07-11T11:11:54.508Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.126.0/23", + "205.220.12.0/23", + "137.31.124.0/23", + "137.31.120.0/23", + "140.232.189.0/24", + "137.31.122.0/23", + "137.31.101.0/24", + "2605:4300:e500::/40", + "137.31.114.0/23", + "137.31.128.0/23", + "155.95.86.0/24", + "137.31.119.0/24", + "140.232.190.0/24", + "140.232.188.0/24", + "165.225.99.0/24", + "205.220.14.0/23", + "137.31.26.0/23", + "137.31.24.0/23", + "89.18.89.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 19 unexpected prefix(es), 0 missing" + }, + { + "id": "9528aa42e6c9d315", + "asn": "132372", + "ts": "2026-07-11T12:11:53.207Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "d108b1393f88c297", + "asn": "396986", + "ts": "2026-07-11T12:41:50.237Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.202.0/24", + "101.45.199.0/24", + "71.18.67.0/24", + "101.45.6.0/24", + "101.45.14.0/24", + "101.45.18.0/24", + "71.18.44.0/24", + "101.45.15.0/24", + "71.18.71.0/24", + "71.18.64.0/24", + "71.18.45.0/24", + "71.18.65.0/24", + "71.18.66.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 5 missing" + }, + { + "id": "5e95ac309ca64ea1", + "asn": "138699", + "ts": "2026-07-11T15:41:50.229Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "101.45.198.0/24", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "a90c02a1f05e007d", + "asn": "3491", + "ts": "2026-07-11T15:41:50.885Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "64ee177262354f69", + "asn": "15290", + "ts": "2026-07-11T15:41:51.210Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "9175ee58efcc4bbd", + "asn": "24940", + "ts": "2026-07-11T16:11:49.840Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "193.105.82.0/24", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "8a077341d9c97702", + "asn": "34702", + "ts": "2026-07-11T16:41:51.165Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "bbd103af06b48e78", + "asn": "22616", + "ts": "2026-07-11T17:41:52.318Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.126.0/23", + "205.220.12.0/23", + "137.31.124.0/23", + "137.31.120.0/23", + "140.232.189.0/24", + "137.31.122.0/23", + "137.31.101.0/24", + "2605:4300:e500::/40", + "137.31.114.0/23", + "137.31.128.0/23", + "155.95.86.0/24", + "137.31.119.0/24", + "140.232.190.0/24", + "140.232.188.0/24", + "165.225.99.0/24", + "205.220.14.0/23", + "137.31.26.0/23", + "137.31.24.0/23", + "89.18.89.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 19 unexpected prefix(es), 0 missing" + }, + { + "id": "97796effa73de47d", + "asn": "396986", + "ts": "2026-07-11T18:41:50.408Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.202.0/24", + "101.45.199.0/24", + "71.18.67.0/24", + "101.45.6.0/24", + "101.45.14.0/24", + "101.45.18.0/24", + "71.18.44.0/24", + "101.45.15.0/24", + "71.18.71.0/24", + "71.18.64.0/24", + "71.18.45.0/24", + "71.18.65.0/24", + "71.18.66.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 5 missing" + }, + { + "id": "7d4860747edd9541", + "asn": "132372", + "ts": "2026-07-11T18:41:52.912Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "d1bd4f2ecd0fbb0d", + "asn": "138699", + "ts": "2026-07-11T21:41:50.249Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:c002::/48", + "101.45.198.0/24", + "2404:9dc0:cd04::/48", + "101.45.200.0/23" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "061cb61c5a46ffbd", + "asn": "24940", + "ts": "2026-07-11T22:11:50.081Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "193.105.82.0/24", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "d91120c0c5a76ebf", + "asn": "3491", + "ts": "2026-07-11T22:11:51.062Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "2839b628578df743", + "asn": "15290", + "ts": "2026-07-11T22:11:51.395Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "42979c7796a9a434", + "asn": "34702", + "ts": "2026-07-11T22:41:51.211Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "4539b983164e4a7b", + "asn": "22616", + "ts": "2026-07-11T23:41:52.343Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.124.0/23", + "137.31.114.0/23", + "137.31.128.0/23", + "137.31.120.0/23", + "140.232.189.0/24", + "140.232.188.0/24", + "137.31.126.0/23", + "155.95.86.0/24", + "165.225.99.0/24", + "137.31.122.0/23", + "205.220.12.0/23", + "137.31.119.0/24", + "2605:4300:e500::/40", + "137.31.101.0/24", + "205.220.14.0/23", + "140.232.190.0/24", + "137.31.26.0/23", + "137.31.24.0/23", + "89.18.89.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 19 unexpected prefix(es), 0 missing" + }, + { + "id": "2f9c2aa9236b87d3", + "asn": "396986", + "ts": "2026-07-12T01:11:50.218Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.18.0/24", + "101.45.202.0/24", + "71.18.45.0/24", + "71.18.64.0/24", + "101.45.6.0/24", + "101.45.14.0/24", + "101.45.15.0/24", + "71.18.66.0/24", + "71.18.65.0/24", + "71.18.71.0/24", + "101.45.199.0/24", + "71.18.44.0/24", + "71.18.67.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 5 missing" + }, + { + "id": "32a719ddc2d2d1ee", + "asn": "132372", + "ts": "2026-07-12T01:11:51.649Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "aaf143a5b4c28b4e", + "asn": "138699", + "ts": "2026-07-12T04:11:50.244Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "ec45bebdb19186cb", + "asn": "24940", + "ts": "2026-07-12T04:41:49.860Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "193.105.82.0/24", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "35f86d1385ec64e9", + "asn": "3491", + "ts": "2026-07-12T04:41:50.775Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "29d084b9c4bdac0b", + "asn": "15290", + "ts": "2026-07-12T04:41:51.085Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "0cd86cde4e190581", + "asn": "34702", + "ts": "2026-07-12T05:11:51.194Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "7c36fdeecd7a0ab7", + "asn": "22616", + "ts": "2026-07-12T05:41:52.833Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.120.0/23", + "137.31.128.0/23", + "205.220.12.0/23", + "137.31.114.0/23", + "137.31.126.0/23", + "155.95.86.0/24", + "137.31.101.0/24", + "140.232.188.0/24", + "205.220.14.0/23", + "140.232.189.0/24", + "137.31.122.0/23", + "165.225.99.0/24", + "2605:4300:e500::/40", + "140.232.190.0/24", + "137.31.119.0/24", + "137.31.124.0/23", + "137.31.26.0/23", + "137.31.24.0/23", + "89.18.89.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 19 unexpected prefix(es), 0 missing" + }, + { + "id": "1bc5b18120ec431a", + "asn": "396986", + "ts": "2026-07-12T07:41:50.157Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.44.0/24", + "101.45.15.0/24", + "71.18.65.0/24", + "101.45.14.0/24", + "71.18.45.0/24", + "101.45.199.0/24", + "101.45.6.0/24", + "71.18.71.0/24", + "101.45.18.0/24", + "101.45.202.0/24", + "71.18.64.0/24", + "71.18.67.0/24", + "71.18.66.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 5 missing" + }, + { + "id": "05b7a153d4aaa526", + "asn": "132372", + "ts": "2026-07-12T07:41:51.396Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "a71efac845cb792e", + "asn": "138699", + "ts": "2026-07-12T10:11:50.523Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "de9b65085d3e0b3c", + "asn": "24940", + "ts": "2026-07-12T10:41:49.881Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "193.105.82.0/24", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "c8ef2ef675fd1f47", + "asn": "3491", + "ts": "2026-07-12T11:11:50.690Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "b11034f2486be422", + "asn": "15290", + "ts": "2026-07-12T11:11:51.036Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "9862249e677be67d", + "asn": "34702", + "ts": "2026-07-12T11:41:51.083Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "43afafca776ce5af", + "asn": "22616", + "ts": "2026-07-12T11:41:53.056Z", + "severity": "CRITICAL", + "unexpected": [ + "140.232.189.0/24", + "137.31.122.0/23", + "137.31.124.0/23", + "137.31.114.0/23", + "140.232.190.0/24", + "137.31.128.0/23", + "137.31.101.0/24", + "155.95.86.0/24", + "137.31.120.0/23", + "2605:4300:e500::/40", + "137.31.119.0/24", + "205.220.12.0/23", + "165.225.99.0/24", + "140.232.188.0/24", + "137.31.126.0/23", + "205.220.14.0/23", + "137.31.26.0/23", + "137.31.24.0/23", + "89.18.89.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 19 unexpected prefix(es), 0 missing" + }, + { + "id": "440a045d8d43205e", + "asn": "396986", + "ts": "2026-07-12T13:41:50.175Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.65.0/24", + "101.45.14.0/24", + "71.18.67.0/24", + "71.18.44.0/24", + "101.45.15.0/24", + "101.45.18.0/24", + "101.45.6.0/24", + "71.18.71.0/24", + "71.18.66.0/24", + "101.45.202.0/24", + "71.18.64.0/24", + "101.45.199.0/24", + "71.18.45.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 5 missing" + }, + { + "id": "8965a2125ec9f930", + "asn": "132372", + "ts": "2026-07-12T13:41:51.437Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "f93f36e691c71a98", + "asn": "138699", + "ts": "2026-07-12T16:41:50.163Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "101.45.198.0/24", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "8459bf06205c4b82", + "asn": "24940", + "ts": "2026-07-12T17:11:49.862Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "2.28.0.0/16", + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "9135513075aaa40a", + "asn": "3491", + "ts": "2026-07-12T17:11:51.256Z", + "severity": "HIGH", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "0bff3c826a5f2245", + "asn": "15290", + "ts": "2026-07-12T17:11:51.559Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "377ce90aa930bc73", + "asn": "34702", + "ts": "2026-07-12T17:41:51.182Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "929f21b925a62a0c", + "asn": "22616", + "ts": "2026-07-12T18:11:52.322Z", + "severity": "CRITICAL", + "unexpected": [ + "140.232.189.0/24", + "137.31.122.0/23", + "137.31.124.0/23", + "137.31.114.0/23", + "140.232.190.0/24", + "137.31.128.0/23", + "137.31.101.0/24", + "155.95.86.0/24", + "137.31.120.0/23", + "2605:4300:e500::/40", + "137.31.119.0/24", + "205.220.12.0/23", + "165.225.99.0/24", + "140.232.188.0/24", + "137.31.126.0/23", + "205.220.14.0/23", + "137.31.26.0/23", + "137.31.24.0/23", + "89.18.89.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 19 unexpected prefix(es), 0 missing" + }, + { + "id": "c3f6d994bfd7dc87", + "asn": "396986", + "ts": "2026-07-12T19:41:50.202Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.18.0/24", + "71.18.65.0/24", + "71.18.45.0/24", + "101.45.6.0/24", + "101.45.199.0/24", + "71.18.71.0/24", + "71.18.64.0/24", + "71.18.67.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "101.45.15.0/24", + "101.45.14.0/24", + "71.18.66.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 5 missing" + }, + { + "id": "af13c93dfbffdfac", + "asn": "132372", + "ts": "2026-07-12T20:11:51.949Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "40c35364fb77dd6a", + "asn": "138699", + "ts": "2026-07-12T22:41:50.223Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "73fa01fad55cb1fc", + "asn": "24940", + "ts": "2026-07-12T23:11:49.872Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "2.28.0.0/16", + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "ed750369eca5f13a", + "asn": "3491", + "ts": "2026-07-12T23:11:58.218Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "72.57.243.0/24", + "41.79.245.0/24", + "63.218.0.0/22", + "205.252.8.0/22", + "41.221.208.0/24", + "63.223.48.0/24", + "63.222.250.0/24", + "63.222.54.0/24", + "217.113.92.0/24", + "208.13.224.0/19", + "63.217.112.0/21", + "63.218.254.0/23", + "205.252.192.0/24", + "205.252.232.0/21", + "207.226.120.0/21", + "205.177.116.0/24", + "63.217.24.0/23", + "146.222.27.0/24", + "63.218.18.0/23", + "2400:8800:f80d::/48", + "207.176.117.0/24", + "2400:8800:1::/48", + "205.177.17.0/24", + "63.222.146.0/24", + "63.218.230.0/23", + "63.216.152.0/22", + "103.17.28.0/22", + "63.222.158.0/24", + "63.222.210.0/24", + "217.113.88.0/24", + "205.177.52.0/22", + "2400:8800:f810::/48", + "72.57.134.0/24", + "63.223.7.0/24", + "87.82.0.0/19", + "63.218.52.0/22", + "45.195.111.0/24", + "63.222.105.0/24", + "2400:8800:2000::/35", + "207.226.252.0/23", + "63.221.171.0/24", + "146.222.28.0/24", + "63.222.185.0/24", + "63.218.56.0/23", + "209.8.196.0/22", + "63.222.64.0/24", + "63.222.156.0/24", + "63.217.208.0/22", + "205.177.10.0/24", + "63.222.189.0/24", + "205.177.56.0/22", + "206.161.232.0/22", + "199.13.0.0/19", + "2400:8800:fc05::/48", + "63.222.16.0/21", + "2400:8800:f80a::/48", + "63.222.163.0/24", + "2400:8800:102::/48", + "199.12.96.0/19", + "63.218.107.0/24", + "63.217.66.0/24", + "217.113.86.0/24", + "63.217.103.0/24", + "63.218.112.0/23", + "2400:8800:fc0f::/48", + "209.8.116.0/24", + "63.218.240.0/23", + "2400:8800:4201::/48", + "205.177.0.0/16", + "63.218.246.0/23", + "209.9.24.0/22", + "63.221.128.0/21", + "2400:8800:f822::/48", + "217.156.160.0/21", + "63.218.213.0/24", + "82.109.112.0/20", + "63.218.36.0/22", + "63.218.100.0/23", + "63.218.76.0/23", + "146.222.239.0/24", + "209.9.48.0/21", + "41.221.216.0/22", + "63.222.93.0/24", + "2400:8800:1001::/48", + "205.252.108.0/22", + "146.222.187.0/24", + "63.216.149.0/24", + "205.252.136.0/24", + "63.222.160.0/24", + "63.223.14.0/24", + "63.222.45.0/24", + "63.218.122.0/23", + "63.216.48.0/21", + "205.252.16.0/22", + "206.161.115.0/24", + "63.218.22.0/23", + "203.170.52.0/22", + "41.79.248.0/24", + "116.66.212.0/22", + "63.222.35.0/24", + "209.9.137.0/24", + "207.226.60.0/24", + "72.57.240.0/24", + "63.222.150.0/24", + "82.110.160.0/19", + "72.57.250.0/24", + "206.161.88.0/24", + "63.223.128.0/24", + "72.57.244.0/24", + "63.218.146.0/23", + "209.8.3.0/24", + "149.134.175.0/24", + "209.9.48.0/24", + "146.222.18.0/24", + "72.57.132.0/24", + "72.57.249.0/24", + "63.223.19.0/24", + "63.218.166.0/23", + "63.220.64.0/18", + "63.218.172.0/23", + "63.223.152.0/24", + "63.223.25.0/24", + "63.223.1.0/24", + "63.223.16.0/24", + "209.8.8.0/21", + "63.223.22.0/24", + "63.221.169.0/24", + "205.177.84.0/22", + "72.57.246.0/24", + "2606:9dc0:fc00::/48", + "63.216.242.0/24", + "63.222.153.0/24", + "63.218.204.0/23", + "146.222.118.0/24", + "63.218.43.0/24", + "207.176.8.0/21", + "168.151.28.0/24", + "209.9.82.0/23", + "63.218.8.0/24", + "212.212.128.0/17", + "206.161.112.0/23", + "63.222.61.0/24", + "63.222.16.0/24", + "209.8.176.0/21", + "63.218.192.0/23", + "207.226.0.0/16", + "209.9.112.0/21", + "63.218.6.0/23", + "63.219.19.0/24", + "146.222.48.0/24", + "63.217.16.0/23", + "63.217.59.0/24", + "196.50.128.0/18", + "63.222.104.0/24", + "63.219.16.0/22", + "63.218.124.0/23", + "63.223.6.0/24", + "63.216.14.0/24", + "63.218.170.0/23", + "146.222.46.0/24", + "72.57.251.0/24", + "63.221.136.0/21", + "63.221.170.0/24", + "72.57.238.0/24", + "209.8.152.0/23", + "2400:8800:f80f::/48", + "199.162.192.0/19", + "63.222.12.0/24", + "2400:8800:f805::/48", + "185.152.48.0/22", + "63.221.168.0/24", + "208.22.128.0/19", + "65.72.32.0/20", + "63.222.38.0/24", + "207.226.144.0/22", + "63.222.51.0/24", + "63.218.214.0/23", + "63.217.237.0/24", + "208.13.192.0/19", + "205.177.176.0/20", + "63.222.75.0/24", + "146.222.238.0/24", + "205.177.8.0/23", + "116.66.210.0/23", + "205.252.14.0/23", + "72.57.242.0/24", + "63.218.228.0/23", + "205.177.197.0/24", + "63.223.13.0/24", + "205.252.56.0/22", + "63.221.240.0/24", + "206.161.128.0/18", + "63.219.52.0/22", + "63.218.160.0/23", + "63.218.142.0/23", + "72.57.248.0/24", + "205.177.164.0/22", + "63.222.167.0/24", + "207.176.48.0/22", + "63.222.41.0/24", + "2400:8800:f829::/48", + "41.221.217.0/24", + "209.9.208.0/21", + "63.222.202.0/24", + "209.8.48.0/22", + "2400:8800:f81f::/48", + "63.222.209.0/24", + "209.8.112.0/21", + "63.218.218.0/23", + "63.217.48.0/22", + "82.108.224.0/19", + "63.220.13.0/24", + "209.8.152.0/21", + "41.221.208.0/20", + "63.218.80.0/23", + "63.222.65.0/24", + "63.218.4.0/23", + "63.223.206.0/24", + "63.219.32.0/24", + "209.8.144.0/22", + "196.251.160.0/19", + "207.226.136.0/21", + "72.57.241.0/24", + "82.109.16.0/20", + "205.252.10.0/24", + "205.252.130.0/23", + "63.216.170.0/24", + "208.20.96.0/19", + "63.217.71.0/24", + "205.177.24.0/22", + "2400:8800:f823::/48", + "72.57.253.0/24", + "206.161.232.0/24", + "205.252.137.0/24", + "209.9.2.0/23", + "205.177.208.0/21", + "63.221.80.0/21", + "63.216.144.0/22", + "63.218.222.0/23", + "63.222.161.0/24", + "63.217.254.0/24", + "63.222.50.0/24", + "63.223.143.0/24", + "63.223.31.0/24", + "63.222.106.0/24", + "2400:8800:4000::/35", + "207.226.114.0/24", + "209.9.80.0/22", + "63.216.240.0/24", + "209.9.8.0/21", + "63.217.72.0/22", + "154.194.34.0/24", + "2400:8800:f804::/48", + "63.222.216.0/24", + "63.218.68.0/22", + "2400:8800:fc0b::/48", + "63.217.60.0/22", + "41.79.248.0/22", + "207.176.115.0/24", + "63.222.52.0/24", + "2400:8800::/32", + "63.223.38.0/24", + "63.216.142.0/23", + "207.176.86.0/24", + "205.252.143.0/24", + "2400:8800:f806::/48", + "209.8.192.0/22", + "168.90.92.0/22", + "63.218.63.0/24", + "63.222.144.0/24", + "209.8.104.0/21", + "205.252.135.0/24", + "41.79.250.0/24", + "63.222.155.0/24", + "82.109.128.0/20", + "2400:8800:c000::/35", + "205.252.0.0/16", + "207.176.0.0/17", + "2400:8800:f821::/48", + "209.8.146.0/24", + "63.218.78.0/23", + "195.21.160.0/19", + "45.195.74.0/24", + "63.222.136.0/24", + "87.84.96.0/19", + "63.218.162.0/23", + "63.218.17.0/24", + "63.218.40.0/24", + "63.218.60.0/22", + "63.220.128.0/21", + "63.223.168.0/24", + "63.222.21.0/24", + "63.216.156.0/24", + "63.218.114.0/23", + "209.8.190.0/24", + "63.223.34.0/24", + "63.216.140.0/24", + "82.109.80.0/20", + "63.221.200.0/21", + "63.218.58.0/24", + "207.176.112.0/21", + "217.113.64.0/19", + "87.82.128.0/18", + "63.219.0.0/20", + "72.57.239.0/24", + "116.66.216.0/22", + "63.221.146.0/24", + "63.222.201.0/24", + "63.222.166.0/24", + "209.8.208.0/21", + "63.218.250.0/23", + "41.79.249.0/24", + "63.222.0.0/22", + "63.218.248.0/23", + "63.218.26.0/23", + "63.217.96.0/22", + "2400:8800:f828::/48", + "63.218.72.0/23", + "63.217.20.0/22", + "2400:8800:101::/48", + "199.13.128.0/19", + "63.218.236.0/23", + "63.221.244.0/24", + "63.217.70.0/24", + "63.223.224.0/24", + "146.222.240.0/24", + "63.216.168.0/21", + "2400:8800:fc03::/48", + "103.28.200.0/24", + "205.177.137.0/24", + "63.218.92.0/22", + "101.60.254.0/24", + "41.79.244.0/22", + "63.218.10.0/23", + "208.21.96.0/19", + "63.218.156.0/23", + "207.176.80.0/20", + "2400:8800:fc10::/48", + "43.230.86.0/23", + "63.218.194.0/23", + "63.217.87.0/24", + "2400:8800:f807::/48", + "208.21.64.0/19", + "207.226.236.0/22", + "63.222.145.0/24", + "63.223.144.0/24", + "205.252.216.0/21", + "63.222.184.0/24", + "206.161.0.0/16", + "2400:8800::/35", + "207.226.238.0/24", + "2400:8800:a000::/35", + "2400:8800:fc09::/48", + "63.218.44.0/22", + "207.176.30.0/24", + "2c0f:f3d0::/32", + "72.57.247.0/24", + "72.57.254.0/24", + "63.222.147.0/24", + "209.8.200.0/21", + "63.222.187.0/24", + "63.222.7.0/24", + "63.218.82.0/23", + "63.223.49.0/24", + "209.9.119.0/24", + "63.222.200.0/24", + "196.216.156.0/24", + "217.156.160.0/24", + "63.216.192.0/21", + "207.226.132.0/22", + "2400:8800:f827::/48", + "63.218.106.0/24", + "63.222.217.0/24", + "63.222.148.0/24", + "209.8.96.0/21", + "63.221.242.0/24", + "116.206.112.0/23", + "205.177.224.0/21", + "205.177.32.0/22", + "209.9.36.0/24", + "63.218.40.0/23", + "63.222.154.0/24", + "63.222.62.0/24", + "116.66.208.0/23", + "2c0f:f3c0::/32", + "2400:8800:fc07::/48", + "63.218.184.0/23", + "146.222.194.0/24", + "63.220.0.0/21", + "205.177.44.0/22", + "206.161.9.0/24", + "209.9.104.0/21", + "63.216.56.0/21", + "146.222.35.0/24", + "116.66.220.0/22", + "63.222.40.0/24", + "2400:8800:1000::/37", + "63.218.48.0/23", + "205.252.134.0/24", + "63.217.81.0/24", + "206.161.216.0/21", + "207.176.31.0/24", + "63.222.188.0/24", + "82.110.192.0/19", + "87.82.32.0/20", + "63.218.14.0/23", + "63.223.54.0/24", + "63.222.37.0/24", + "199.12.0.0/19", + "63.217.40.0/21", + "82.108.176.0/20", + "168.90.94.0/24", + "63.216.164.0/22", + "208.22.160.0/19", + "63.216.193.0/24", + "63.216.82.0/23", + "63.218.178.0/23", + "207.176.32.0/22", + "2400:8800:f811::/48", + "209.9.128.0/21", + "207.226.152.0/21", + "209.9.136.0/24", + "209.9.112.0/24", + "63.223.51.0/24", + "63.222.34.0/24", + "206.161.234.0/24", + "63.217.168.0/22", + "63.220.204.0/24", + "209.8.63.0/24", + "63.222.42.0/24", + "82.109.32.0/20", + "209.8.224.0/21", + "217.113.65.0/24", + "207.226.80.0/20", + "146.222.184.0/24", + "209.9.20.0/22", + "146.222.29.0/24", + "116.66.208.0/20", + "63.223.0.0/24", + "205.177.112.0/24", + "63.218.232.0/23", + "209.9.72.0/22", + "206.161.16.0/21", + "63.223.53.0/24", + "206.161.228.0/22", + "63.218.148.0/23", + "72.57.128.0/22", + "107.155.192.0/18", + "63.222.152.0/24", + "63.218.210.0/23", + "63.222.36.0/24", + "65.72.64.0/20", + "146.222.25.0/24", + "72.57.252.0/24", + "205.252.40.0/22", + "63.218.34.0/23", + "63.222.251.0/24", + "205.177.232.0/22", + "63.223.17.0/24", + "72.57.245.0/24", + "199.12.128.0/19", + "87.83.240.0/20", + "79.109.232.0/22", + "2400:8800:f80e::/48", + "87.85.192.0/19", + "63.223.24.0/24", + "63.218.164.0/23", + "209.9.216.0/21", + "205.252.114.0/24", + "63.217.248.0/22", + "63.217.120.0/22", + "146.222.26.0/24", + "63.222.186.0/24", + "207.226.254.0/23", + "63.218.252.0/23", + "209.8.0.0/15", + "63.222.248.0/24", + "63.223.9.0/24", + "63.218.150.0/23", + "205.177.88.0/21", + "63.218.12.0/23", + "63.216.0.0/13", + "209.9.224.0/19", + "63.217.88.0/21", + "205.177.198.0/24", + "63.222.191.0/24", + "205.177.196.0/22", + "185.77.60.0/22", + "205.177.216.0/21", + "63.222.68.0/24", + "63.221.154.0/24", + "63.218.244.0/24", + "63.218.234.0/23", + "63.222.190.0/24", + "195.21.192.0/18", + "82.110.64.0/19", + "209.9.40.0/21", + "217.156.163.0/24", + "205.252.80.0/21", + "205.177.232.0/24", + "205.177.233.0/24", + "63.222.58.0/24", + "82.110.0.0/19", + "63.223.20.0/24", + "63.218.66.0/24", + "63.218.144.0/23", + "63.223.211.0/24", + "63.218.188.0/23", + "209.9.139.0/24", + "63.222.47.0/24", + "209.9.138.0/24", + "63.221.246.0/24", + "208.20.64.0/19", + "63.218.136.0/24", + "2400:8800:6000::/35", + "206.161.224.0/22", + "2400:8800:fc0e::/48", + "63.222.162.0/24", + "209.9.36.0/22", + "82.108.16.0/20", + "63.222.70.0/24", + "2400:8800:8000::/35", + "63.222.49.0/24", + "2400:8800:e000::/35", + "207.226.224.0/21", + "2400:8800:fc08::/48", + "63.221.152.0/21", + "207.226.216.0/22", + "63.216.151.0/24", + "205.252.168.0/21", + "63.217.168.0/24", + "63.223.11.0/24", + "63.222.4.0/23", + "63.216.150.0/24", + "63.221.245.0/24", + "209.8.178.0/24", + "63.221.192.0/21", + "207.226.32.0/20", + "63.221.181.0/24", + "205.177.132.0/22", + "63.223.64.0/18", + "31.59.78.0/24", + "209.8.240.0/21", + "41.221.216.0/24", + "87.83.176.0/20", + "63.223.156.0/24", + "63.218.174.0/23", + "63.216.35.0/24", + "63.217.80.0/21", + "205.177.234.0/24", + "63.223.192.0/20", + "63.216.176.0/24", + "168.90.92.0/23", + "207.226.244.0/22", + "72.57.255.0/24", + "63.222.33.0/24", + "87.83.128.0/19", + "63.223.27.0/24", + "87.82.64.0/18", + "65.72.0.0/20", + "206.161.248.0/22", + "63.221.155.0/24", + "63.223.44.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 0 unexpected prefix(es), 563 missing" + }, + { + "id": "a9d6f8c9de1be764", + "asn": "15290", + "ts": "2026-07-12T23:11:58.564Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "1d3199ef281b6179", + "asn": "34702", + "ts": "2026-07-12T23:41:59.284Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "0feebc49980d0a87", + "asn": "22616", + "ts": "2026-07-13T00:41:52.223Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.122.0/23", + "137.31.126.0/23", + "137.31.120.0/23", + "155.95.86.0/24", + "205.220.12.0/23", + "137.31.114.0/23", + "137.31.128.0/23", + "137.31.124.0/23", + "140.232.189.0/24", + "2605:4300:e500::/40", + "140.232.188.0/24", + "137.31.119.0/24", + "205.220.14.0/23", + "140.232.190.0/24", + "137.31.101.0/24", + "165.225.99.0/24", + "137.31.26.0/23", + "137.31.24.0/23", + "89.18.89.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 19 unexpected prefix(es), 0 missing" + }, + { + "id": "f846bdb0d27d6561", + "asn": "396986", + "ts": "2026-07-13T02:11:50.155Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.18.0/24", + "71.18.65.0/24", + "71.18.45.0/24", + "101.45.6.0/24", + "101.45.199.0/24", + "71.18.71.0/24", + "71.18.64.0/24", + "71.18.67.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "101.45.15.0/24", + "101.45.14.0/24", + "71.18.66.0/24", + "2605:340:f04a::/48", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 5 missing" + }, + { + "id": "3676953248859880", + "asn": "132372", + "ts": "2026-07-13T02:41:52.121Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "37ffb8525b7d3687", + "asn": "138699", + "ts": "2026-07-13T04:41:50.620Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48", + "101.45.198.0/24", + "101.45.200.0/23" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "31c5d66b6db97b98", + "asn": "24940", + "ts": "2026-07-13T05:41:49.883Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "5a0baa1caa457590", + "asn": "3491", + "ts": "2026-07-13T05:41:51.271Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48", + "63.219.192.0/24" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "040faa46dba58aa3", + "asn": "15290", + "ts": "2026-07-13T05:41:51.606Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "f30104d2fd4ba0a3", + "asn": "34702", + "ts": "2026-07-13T06:11:51.811Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "8503f36f1c41772e", + "asn": "22616", + "ts": "2026-07-13T07:11:53.833Z", + "severity": "CRITICAL", + "unexpected": [ + "140.232.190.0/24", + "137.31.114.0/23", + "137.31.120.0/23", + "140.232.189.0/24", + "137.31.124.0/23", + "2605:4300:e500::/40", + "137.31.119.0/24", + "137.31.122.0/23", + "205.220.12.0/23", + "140.232.188.0/24", + "137.31.126.0/23", + "205.220.14.0/23", + "137.31.101.0/24", + "155.95.86.0/24", + "137.31.128.0/23", + "165.225.99.0/24", + "137.31.26.0/23", + "137.31.24.0/23", + "89.18.89.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 19 unexpected prefix(es), 0 missing" + }, + { + "id": "d6346fdbe37cb7fe", + "asn": "396986", + "ts": "2026-07-13T08:11:50.334Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.67.0/24", + "71.18.66.0/24", + "101.45.14.0/24", + "71.18.65.0/24", + "71.18.64.0/24", + "101.45.202.0/24", + "101.45.18.0/24", + "71.18.45.0/24", + "71.18.44.0/24", + "101.45.15.0/24", + "2605:340:f04a::/48", + "101.45.6.0/24", + "71.18.71.0/24", + "101.45.199.0/24", + "2605:340:f049::/48" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 15 unexpected prefix(es), 5 missing" + }, + { + "id": "adc042e7d8d8fdb7", + "asn": "132372", + "ts": "2026-07-13T09:11:51.660Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "f1bd703d35b638b0", + "asn": "138699", + "ts": "2026-07-13T11:11:50.348Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "84e030c669d7f3ae", + "asn": "15290", + "ts": "2026-07-13T11:41:52.551Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "4c7ce4b36230283c", + "asn": "24940", + "ts": "2026-07-13T12:11:49.877Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.29.0.0/16", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "d5b922f7b68cd935", + "asn": "3491", + "ts": "2026-07-13T12:11:50.759Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "02a41fbf0e8f3852", + "asn": "34702", + "ts": "2026-07-13T12:41:51.255Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "61a821f19579ee13", + "asn": "22616", + "ts": "2026-07-13T13:41:55.649Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.126.0/23", + "140.232.188.0/24", + "137.31.122.0/23", + "155.95.86.0/24", + "137.31.119.0/24", + "205.220.12.0/23", + "205.220.14.0/23", + "140.232.190.0/24", + "137.31.128.0/23", + "137.31.101.0/24", + "140.232.189.0/24", + "2605:4300:e500::/40", + "137.31.120.0/23", + "137.31.124.0/23", + "165.225.99.0/24", + "137.31.26.0/23", + "137.31.24.0/23", + "89.18.89.0/24", + "89.18.90.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 20 unexpected prefix(es), 0 missing" + }, + { + "id": "455c75c307c753d3", + "asn": "396986", + "ts": "2026-07-13T14:11:56.248Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.66.0/24", + "101.45.15.0/24", + "71.18.44.0/24", + "101.45.202.0/24", + "71.18.64.0/24", + "101.45.18.0/24", + "101.45.199.0/24", + "2605:340:f04a::/48", + "71.18.45.0/24", + "101.45.6.0/24", + "71.18.65.0/24", + "71.18.67.0/24", + "71.18.71.0/24", + "101.45.14.0/24", + "2605:340:f049::/48", + "101.45.23.0/24" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 16 unexpected prefix(es), 5 missing" + }, + { + "id": "b2a32473beacd466", + "asn": "132372", + "ts": "2026-07-13T15:11:54.566Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "e5e2b4f41e7e4f36", + "asn": "138699", + "ts": "2026-07-13T17:41:50.252Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "2404:9dc0:cd04::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "838caa6c23611549", + "asn": "15290", + "ts": "2026-07-13T18:11:51.020Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "29b2d67623bc2e8b", + "asn": "24940", + "ts": "2026-07-13T18:41:49.886Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.29.0.0/16", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "f4c29cf135de2e7e", + "asn": "3491", + "ts": "2026-07-13T18:41:50.840Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fb::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "25b90df07b21f963", + "asn": "34702", + "ts": "2026-07-13T18:41:51.305Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "d2434772c22c873c", + "asn": "22616", + "ts": "2026-07-13T20:11:52.196Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.124.0/23", + "205.220.14.0/23", + "137.31.120.0/23", + "137.31.128.0/23", + "140.232.190.0/24", + "140.232.188.0/24", + "165.225.99.0/24", + "137.31.126.0/23", + "2605:4300:e500::/40", + "137.31.119.0/24", + "155.95.86.0/24", + "205.220.12.0/23", + "137.31.26.0/23", + "137.31.114.0/23", + "137.31.101.0/24", + "137.31.24.0/23", + "137.31.122.0/23", + "140.232.189.0/24", + "89.18.89.0/24", + "89.18.90.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 20 unexpected prefix(es), 0 missing" + }, + { + "id": "3046f29f6a507b91", + "asn": "396986", + "ts": "2026-07-13T20:41:50.594Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.202.0/24", + "2605:340:f04a::/48", + "101.45.199.0/24", + "101.45.18.0/24", + "101.45.15.0/24", + "71.18.65.0/24", + "71.18.66.0/24", + "101.45.6.0/24", + "71.18.45.0/24", + "71.18.71.0/24", + "71.18.64.0/24", + "101.45.14.0/24", + "71.18.67.0/24", + "71.18.44.0/24", + "2605:340:f049::/48", + "101.45.23.0/24" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 16 unexpected prefix(es), 5 missing" + }, + { + "id": "102e6a900ff882c2", + "asn": "132372", + "ts": "2026-07-13T21:41:52.813Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "09b4ce6ae1175fd1", + "asn": "138699", + "ts": "2026-07-14T00:11:50.191Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "4364d6fca935316d", + "asn": "15290", + "ts": "2026-07-14T00:11:51.032Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "de335bc14d813fd7", + "asn": "24940", + "ts": "2026-07-14T00:41:49.895Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "68bc08f89a8b7b7b", + "asn": "3491", + "ts": "2026-07-14T00:41:51.162Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "d7b4dd3fd3e6de16", + "asn": "34702", + "ts": "2026-07-14T00:41:51.618Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "e3680131043d1aae", + "asn": "22616", + "ts": "2026-07-14T02:11:53.538Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.124.0/23", + "205.220.14.0/23", + "137.31.120.0/23", + "137.31.128.0/23", + "140.232.190.0/24", + "140.232.188.0/24", + "165.225.99.0/24", + "137.31.126.0/23", + "2605:4300:e500::/40", + "137.31.119.0/24", + "155.95.86.0/24", + "205.220.12.0/23", + "137.31.26.0/23", + "137.31.114.0/23", + "137.31.101.0/24", + "137.31.24.0/23", + "137.31.122.0/23", + "140.232.189.0/24", + "89.18.89.0/24", + "89.18.90.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 20 unexpected prefix(es), 0 missing" + }, + { + "id": "df5aff9d319a6a0f", + "asn": "396986", + "ts": "2026-07-14T02:41:51.100Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.202.0/24", + "2605:340:f04a::/48", + "101.45.199.0/24", + "101.45.18.0/24", + "101.45.15.0/24", + "71.18.65.0/24", + "71.18.66.0/24", + "101.45.6.0/24", + "71.18.45.0/24", + "71.18.71.0/24", + "71.18.64.0/24", + "101.45.14.0/24", + "71.18.67.0/24", + "71.18.44.0/24", + "2605:340:f049::/48", + "101.45.23.0/24" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 16 unexpected prefix(es), 5 missing" + }, + { + "id": "89e5c396b0caa983", + "asn": "132372", + "ts": "2026-07-14T04:11:51.344Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "cac9ac05a0d2d4d5", + "asn": "138699", + "ts": "2026-07-14T06:11:50.226Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:c002::/48", + "101.45.198.0/24", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "54920db9437a85d8", + "asn": "15290", + "ts": "2026-07-14T06:11:51.062Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "d1e4220da8c661c5", + "asn": "24940", + "ts": "2026-07-14T07:29:51.487Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.29.0.0/16", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "227e25310dc187ea", + "asn": "3491", + "ts": "2026-07-14T07:29:52.382Z", + "severity": "HIGH", + "unexpected": [ + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "63.219.192.0/24", + "2400:8800:f8fb::/48" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 4 unexpected prefix(es), 18 missing" + }, + { + "id": "4c2b86df4b35661f", + "asn": "34702", + "ts": "2026-07-14T07:29:52.821Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "890815d07e320e84", + "asn": "22616", + "ts": "2026-07-14T08:29:54.437Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.114.0/23", + "137.31.128.0/23", + "205.220.14.0/23", + "137.31.119.0/24", + "2605:4300:e500::/40", + "137.31.126.0/23", + "137.31.122.0/23", + "140.232.188.0/24", + "137.31.101.0/24", + "137.31.124.0/23", + "137.31.24.0/23", + "155.95.86.0/24", + "140.232.189.0/24", + "137.31.26.0/23", + "205.220.12.0/23", + "165.225.99.0/24", + "140.232.190.0/24", + "137.31.120.0/23", + "89.18.89.0/24", + "89.18.90.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 20 unexpected prefix(es), 0 missing" + }, + { + "id": "108e1e37816c2d41", + "asn": "396986", + "ts": "2026-07-14T08:59:51.732Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.199.0/24", + "101.45.6.0/24", + "71.18.67.0/24", + "71.18.66.0/24", + "2605:340:f04a::/48", + "101.45.18.0/24", + "71.18.64.0/24", + "101.45.14.0/24", + "71.18.65.0/24", + "71.18.71.0/24", + "71.18.44.0/24", + "101.45.15.0/24", + "101.45.202.0/24", + "71.18.45.0/24", + "2605:340:f049::/48", + "101.45.23.0/24" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 16 unexpected prefix(es), 5 missing" + }, + { + "id": "71cb4c947b5fd779", + "asn": "132372", + "ts": "2026-07-14T10:29:56.468Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "53f5edbcb491119f", + "asn": "138699", + "ts": "2026-07-14T12:29:51.656Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "a022294693abaa6e", + "asn": "15290", + "ts": "2026-07-14T12:29:52.484Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "3aa8edf63c63b215", + "asn": "24940", + "ts": "2026-07-14T13:29:51.921Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.29.0.0/16", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "538b10324ca77d0c", + "asn": "3491", + "ts": "2026-07-14T13:29:53.990Z", + "severity": "CRITICAL", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8fb::/48", + "209.8.154.0/23" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "2400:8800:f827::/48", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 5 unexpected prefix(es), 19 missing" + }, + { + "id": "75b83894c28c1342", + "asn": "34702", + "ts": "2026-07-14T13:29:54.748Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "da7d28d14bf6400d", + "asn": "22616", + "ts": "2026-07-14T14:30:03.410Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.128.0/23", + "137.31.120.0/23", + "140.232.189.0/24", + "137.31.24.0/23", + "137.31.124.0/23", + "137.31.26.0/23", + "140.232.188.0/24", + "165.225.99.0/24", + "137.31.126.0/23", + "140.232.190.0/24", + "155.95.86.0/24", + "137.31.101.0/24", + "137.31.119.0/24", + "205.220.14.0/23", + "137.31.114.0/23", + "2605:4300:e500::/40", + "205.220.12.0/23", + "137.31.122.0/23", + "89.18.89.0/24", + "89.18.90.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 20 unexpected prefix(es), 0 missing" + }, + { + "id": "7156c0cd3d01adeb", + "asn": "396986", + "ts": "2026-07-14T15:29:52.006Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.14.0/24", + "71.18.45.0/24", + "101.45.6.0/24", + "71.18.65.0/24", + "71.18.67.0/24", + "71.18.64.0/24", + "101.45.202.0/24", + "101.45.18.0/24", + "2605:340:f04a::/48", + "71.18.71.0/24", + "71.18.66.0/24", + "71.18.44.0/24", + "101.45.15.0/24", + "101.45.199.0/24", + "2605:340:f049::/48", + "101.45.23.0/24" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 16 unexpected prefix(es), 5 missing" + }, + { + "id": "8ea2453d73ab95a8", + "asn": "132372", + "ts": "2026-07-14T16:59:53.436Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "8169c1fdd2bff25f", + "asn": "138699", + "ts": "2026-07-14T18:29:51.705Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "101.45.200.0/23", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "9a45eded7bbde30e", + "asn": "15290", + "ts": "2026-07-14T18:29:52.554Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "9f602b507e053fe9", + "asn": "24940", + "ts": "2026-07-14T19:59:51.360Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "e3fca5a660644a47", + "asn": "3491", + "ts": "2026-07-14T19:59:52.246Z", + "severity": "CRITICAL", + "unexpected": [ + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48", + "209.8.154.0/23" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "2400:8800:f827::/48", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 5 unexpected prefix(es), 19 missing" + }, + { + "id": "ac981860008fae42", + "asn": "34702", + "ts": "2026-07-14T19:59:52.842Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "3bbe047e16df0480", + "asn": "22616", + "ts": "2026-07-14T20:59:54.362Z", + "severity": "CRITICAL", + "unexpected": [ + "140.232.189.0/24", + "137.31.101.0/24", + "205.220.12.0/23", + "155.95.86.0/24", + "140.232.190.0/24", + "137.31.24.0/23", + "137.31.128.0/23", + "140.232.188.0/24", + "137.31.119.0/24", + "2605:4300:e500::/40", + "205.220.14.0/23", + "137.31.122.0/23", + "137.31.126.0/23", + "137.31.114.0/23", + "137.31.124.0/23", + "137.31.120.0/23", + "137.31.26.0/23", + "165.225.99.0/24", + "89.18.89.0/24", + "89.18.90.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 20 unexpected prefix(es), 0 missing" + }, + { + "id": "acedee638859fec5", + "asn": "396986", + "ts": "2026-07-14T21:59:51.677Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.15.0/24", + "101.45.6.0/24", + "71.18.66.0/24", + "2605:340:f04a::/48", + "71.18.64.0/24", + "2605:340:f049::/48", + "71.18.67.0/24", + "101.45.199.0/24", + "101.45.14.0/24", + "101.45.18.0/24", + "101.45.202.0/24", + "71.18.44.0/24", + "71.18.45.0/24", + "71.18.65.0/24", + "71.18.71.0/24", + "101.45.23.0/24" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 16 unexpected prefix(es), 5 missing" + }, + { + "id": "9a4fa58e438b1a35", + "asn": "132372", + "ts": "2026-07-14T23:29:56.722Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "0b0a20947ca1b4a1", + "asn": "138699", + "ts": "2026-07-15T00:59:51.661Z", + "severity": "HIGH", + "unexpected": [ + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48", + "101.45.198.0/24", + "101.45.200.0/23" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "268febdf4f8b8be3", + "asn": "15290", + "ts": "2026-07-15T00:59:52.476Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "366e6cbbbc89340c", + "asn": "24940", + "ts": "2026-07-15T01:59:51.361Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.28.0.0/16", + "2.29.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "7e19c9cf7db18df2", + "asn": "3491", + "ts": "2026-07-15T01:59:52.321Z", + "severity": "CRITICAL", + "unexpected": [ + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48", + "209.8.154.0/23" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "2400:8800:f827::/48", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 5 unexpected prefix(es), 19 missing" + }, + { + "id": "a9658646462e1416", + "asn": "34702", + "ts": "2026-07-15T02:29:52.810Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "44d63311918b4fd7", + "asn": "22616", + "ts": "2026-07-15T03:29:54.203Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.128.0/23", + "140.232.189.0/24", + "137.31.122.0/23", + "137.31.124.0/23", + "137.31.120.0/23", + "2605:4300:e500::/40", + "137.31.101.0/24", + "137.31.119.0/24", + "140.232.188.0/24", + "137.31.126.0/23", + "205.220.14.0/23", + "137.31.24.0/23", + "155.95.86.0/24", + "205.220.12.0/23", + "140.232.190.0/24", + "137.31.114.0/23", + "137.31.26.0/23", + "165.225.99.0/24", + "89.18.89.0/24", + "89.18.90.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 20 unexpected prefix(es), 0 missing" + }, + { + "id": "aba848e0c0078785", + "asn": "396986", + "ts": "2026-07-15T03:59:51.702Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.67.0/24", + "101.45.14.0/24", + "2605:340:f04a::/48", + "101.45.202.0/24", + "71.18.44.0/24", + "101.45.15.0/24", + "71.18.45.0/24", + "71.18.66.0/24", + "71.18.64.0/24", + "71.18.71.0/24", + "101.45.6.0/24", + "101.45.199.0/24", + "2605:340:f049::/48", + "101.45.18.0/24", + "71.18.65.0/24", + "101.45.23.0/24" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 16 unexpected prefix(es), 5 missing" + }, + { + "id": "5e648fa861caabcb", + "asn": "132372", + "ts": "2026-07-15T05:59:52.969Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "f50fd3d9b019f60f", + "asn": "138699", + "ts": "2026-07-15T06:59:51.698Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "101.45.198.0/24", + "2404:9dc0:c002::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "23031dac4ec96573", + "asn": "15290", + "ts": "2026-07-15T06:59:52.674Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "a46b8ca977e0cfc5", + "asn": "24940", + "ts": "2026-07-15T07:59:51.363Z", + "severity": "HIGH", + "unexpected": [ + "193.105.82.0/24", + "2.29.0.0/16", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "67491773ba454e26", + "asn": "3491", + "ts": "2026-07-15T07:59:53.053Z", + "severity": "CRITICAL", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "209.8.154.0/23" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "2400:8800:f827::/48", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 5 unexpected prefix(es), 19 missing" + }, + { + "id": "9fde972e84297ad9", + "asn": "34702", + "ts": "2026-07-15T08:59:52.292Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "32a6ba0b811278bb", + "asn": "22616", + "ts": "2026-07-15T09:59:53.724Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.128.0/23", + "140.232.189.0/24", + "137.31.122.0/23", + "137.31.124.0/23", + "137.31.120.0/23", + "2605:4300:e500::/40", + "137.31.101.0/24", + "137.31.119.0/24", + "140.232.188.0/24", + "137.31.126.0/23", + "205.220.14.0/23", + "137.31.24.0/23", + "155.95.86.0/24", + "205.220.12.0/23", + "140.232.190.0/24", + "137.31.114.0/23", + "137.31.26.0/23", + "165.225.99.0/24", + "89.18.89.0/24", + "89.18.90.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 20 unexpected prefix(es), 0 missing" + }, + { + "id": "b72903d54d8d8705", + "asn": "396986", + "ts": "2026-07-15T10:29:51.682Z", + "severity": "CRITICAL", + "unexpected": [ + "71.18.67.0/24", + "101.45.14.0/24", + "2605:340:f04a::/48", + "101.45.202.0/24", + "71.18.44.0/24", + "101.45.15.0/24", + "71.18.45.0/24", + "71.18.66.0/24", + "71.18.64.0/24", + "71.18.71.0/24", + "101.45.6.0/24", + "101.45.199.0/24", + "2605:340:f049::/48", + "101.45.18.0/24", + "71.18.65.0/24", + "101.45.23.0/24" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 16 unexpected prefix(es), 5 missing" + }, + { + "id": "4a2318801159ada4", + "asn": "132372", + "ts": "2026-07-15T11:59:53.119Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "8fdaa6a50cb01891", + "asn": "138699", + "ts": "2026-07-15T13:29:51.615Z", + "severity": "HIGH", + "unexpected": [ + "101.45.198.0/24", + "2404:9dc0:c002::/48", + "101.45.200.0/23", + "2404:9dc0:cd04::/48" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "5943d1de345838ac", + "asn": "15290", + "ts": "2026-07-15T13:29:52.431Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "11d64812f7d25748", + "asn": "24940", + "ts": "2026-07-15T13:59:51.366Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "2.28.0.0/16", + "193.105.82.0/24" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "1275ffa07a209ece", + "asn": "3491", + "ts": "2026-07-15T14:29:51.794Z", + "severity": "CRITICAL", + "unexpected": [ + "2400:8800:f8f0::/48", + "2400:8800:f8fa::/48", + "63.219.192.0/24", + "2400:8800:f8fb::/48", + "209.8.154.0/23" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "2400:8800:f827::/48", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 5 unexpected prefix(es), 19 missing" + }, + { + "id": "8df39b422cdb9693", + "asn": "34702", + "ts": "2026-07-15T14:59:52.749Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "ef7fe7860371b6c7", + "asn": "396986", + "ts": "2026-07-15T16:29:51.704Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.6.0/24", + "71.18.71.0/24", + "71.18.65.0/24", + "71.18.64.0/24", + "101.45.18.0/24", + "2605:340:f049::/48", + "71.18.45.0/24", + "101.45.15.0/24", + "71.18.66.0/24", + "101.45.202.0/24", + "2605:340:f04a::/48", + "71.18.44.0/24", + "101.45.199.0/24", + "71.18.67.0/24", + "101.45.14.0/24", + "101.45.23.0/24" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 16 unexpected prefix(es), 5 missing" + }, + { + "id": "14d4c48ce7317e03", + "asn": "22616", + "ts": "2026-07-15T16:29:53.752Z", + "severity": "CRITICAL", + "unexpected": [ + "140.232.189.0/24", + "140.232.190.0/24", + "155.95.86.0/24", + "140.232.188.0/24", + "137.31.119.0/24", + "2605:4300:e500::/40", + "137.31.128.0/23", + "137.31.24.0/23", + "165.225.99.0/24", + "137.31.101.0/24", + "205.220.12.0/23", + "137.31.120.0/23", + "137.31.124.0/23", + "137.31.26.0/23", + "137.31.122.0/23", + "137.31.126.0/23", + "137.31.114.0/23", + "205.220.14.0/23", + "89.18.89.0/24", + "89.18.90.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 20 unexpected prefix(es), 0 missing" + }, + { + "id": "3c915ae1bf8a755e", + "asn": "132372", + "ts": "2026-07-15T18:29:53.011Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "fe4018f500c85f61", + "asn": "138699", + "ts": "2026-07-15T19:29:52.219Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "bc655a6f3f565c2b", + "asn": "15290", + "ts": "2026-07-15T19:29:53.248Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "341a4a5416d53fb4", + "asn": "24940", + "ts": "2026-07-15T19:59:51.372Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "193.105.82.0/24", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "0739880a09b2e60e", + "asn": "3491", + "ts": "2026-07-15T20:59:51.838Z", + "severity": "CRITICAL", + "unexpected": [ + "2400:8800:f8fb::/48", + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8f0::/48", + "209.8.154.0/23" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "2400:8800:f827::/48", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 5 unexpected prefix(es), 19 missing" + }, + { + "id": "176f637eb9f4b8a0", + "asn": "34702", + "ts": "2026-07-15T21:29:53.213Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "3497eb91f0a1804b", + "asn": "396986", + "ts": "2026-07-15T22:29:51.711Z", + "severity": "CRITICAL", + "unexpected": [ + "2605:340:f04a::/48", + "101.45.199.0/24", + "71.18.65.0/24", + "71.18.66.0/24", + "71.18.71.0/24", + "71.18.67.0/24", + "71.18.44.0/24", + "101.45.15.0/24", + "101.45.6.0/24", + "101.45.202.0/24", + "2605:340:f049::/48", + "101.45.14.0/24", + "101.45.18.0/24", + "71.18.45.0/24", + "71.18.64.0/24", + "101.45.23.0/24" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 16 unexpected prefix(es), 5 missing" + }, + { + "id": "abf9968f49c729b7", + "asn": "22616", + "ts": "2026-07-15T22:29:53.837Z", + "severity": "CRITICAL", + "unexpected": [ + "140.232.189.0/24", + "137.31.114.0/23", + "155.95.86.0/24", + "165.225.99.0/24", + "137.31.124.0/23", + "2605:4300:e500::/40", + "137.31.101.0/24", + "205.220.12.0/23", + "137.31.119.0/24", + "205.220.14.0/23", + "137.31.128.0/23", + "137.31.26.0/23", + "137.31.120.0/23", + "137.31.24.0/23", + "140.232.190.0/24", + "140.232.188.0/24", + "137.31.122.0/23", + "137.31.126.0/23", + "89.18.89.0/24", + "89.18.90.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 20 unexpected prefix(es), 0 missing" + }, + { + "id": "db1240cf335bd1fb", + "asn": "132372", + "ts": "2026-07-16T00:29:53.114Z", + "severity": "HIGH", + "unexpected": [ + "2a0d:9842::/48", + "103.91.194.0/24" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + }, + { + "id": "6daaace7b94cbf39", + "asn": "24940", + "ts": "2026-07-16T01:59:51.622Z", + "severity": "HIGH", + "unexpected": [ + "2.29.0.0/16", + "193.105.82.0/24", + "2.28.0.0/16" + ], + "missing": [ + "2a11:e980::/29" + ], + "resolved": false, + "msg": "BGP anomaly for AS24940: 3 unexpected prefix(es), 1 missing" + }, + { + "id": "b91f3e602fd81ca1", + "asn": "138699", + "ts": "2026-07-16T01:59:52.148Z", + "severity": "HIGH", + "unexpected": [ + "101.45.200.0/23", + "2404:9dc0:cd04::/48", + "2404:9dc0:c002::/48", + "101.45.198.0/24" + ], + "missing": [ + "118.26.132.0/24", + "103.136.222.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS138699: 4 unexpected prefix(es), 2 missing" + }, + { + "id": "8b02d291a1af8c3d", + "asn": "15290", + "ts": "2026-07-16T01:59:53.019Z", + "severity": "HIGH", + "unexpected": [], + "missing": [ + "2001:4c8:1005:1::/64", + "209.112.10.0/24", + "2001:4c8:107f:100::/56", + "2001:4c8:1097::/48", + "2001:4c8:1092::/48", + "192.135.87.0/24", + "2001:4c8:4:1::/64", + "216.123.66.0/24", + "2001:4c8:1089::/48", + "216.123.80.0/24", + "203.186.117.0/24", + "206.191.100.0/24", + "2001:4c8:107f:8000::/56", + "216.129.75.0/24", + "203.186.119.0/24", + "74.216.180.0/24", + "209.82.49.0/24", + "2001:4c8:108e::/48", + "159.18.219.0/24", + "209.112.42.0/24", + "2001:4c8:100f:2::/64", + "216.13.190.0/24", + "2001:4c8:108a::/48", + "2001:4c8:1080::/48", + "2001:4c8:101f::/48", + "204.138.183.0/24", + "2001:4c8:e:10::/64", + "216.13.26.0/24", + "2001:4c8:1090::/48", + "216.13.36.0/24", + "216.13.115.0/24", + "74.216.227.0/24", + "2001:4c8:107f:8200::/56", + "2001:4c8:107f:200::/56", + "203.186.116.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS15290: 0 unexpected prefix(es), 35 missing" + }, + { + "id": "496424b0fc064555", + "asn": "3491", + "ts": "2026-07-16T02:59:52.248Z", + "severity": "CRITICAL", + "unexpected": [ + "63.219.192.0/24", + "2400:8800:f8fa::/48", + "2400:8800:f8fb::/48", + "2400:8800:f8f0::/48", + "209.8.154.0/23" + ], + "missing": [ + "72.57.243.0/24", + "45.195.111.0/24", + "72.57.240.0/24", + "72.57.250.0/24", + "72.57.244.0/24", + "72.57.249.0/24", + "72.57.246.0/24", + "72.57.248.0/24", + "72.57.241.0/24", + "72.57.253.0/24", + "154.194.34.0/24", + "101.60.254.0/24", + "72.57.247.0/24", + "72.57.254.0/24", + "2400:8800:f827::/48", + "207.176.31.0/24", + "72.57.252.0/24", + "72.57.245.0/24", + "72.57.255.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS3491: 5 unexpected prefix(es), 19 missing" + }, + { + "id": "9088627d62eade29", + "asn": "34702", + "ts": "2026-07-16T03:59:52.690Z", + "severity": "MEDIUM", + "unexpected": [ + "185.200.196.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS34702: 1 unexpected prefix(es), 0 missing" + }, + { + "id": "6dd656f19f6a1924", + "asn": "396986", + "ts": "2026-07-16T04:29:51.725Z", + "severity": "CRITICAL", + "unexpected": [ + "101.45.18.0/24", + "101.45.199.0/24", + "2605:340:f04a::/48", + "101.45.202.0/24", + "71.18.66.0/24", + "101.45.15.0/24", + "71.18.44.0/24", + "101.45.6.0/24", + "71.18.45.0/24", + "71.18.64.0/24", + "71.18.71.0/24", + "71.18.67.0/24", + "71.18.65.0/24", + "2605:340:f049::/48", + "101.45.14.0/24", + "101.45.23.0/24" + ], + "missing": [ + "71.18.138.0/23", + "2605:340:f082::/48", + "71.18.64.0/21", + "71.18.233.0/24", + "2605:340:f051::/48" + ], + "resolved": false, + "msg": "BGP anomaly for AS396986: 16 unexpected prefix(es), 5 missing" + }, + { + "id": "5d4e90a8549f3771", + "asn": "22616", + "ts": "2026-07-16T04:59:53.845Z", + "severity": "CRITICAL", + "unexpected": [ + "137.31.24.0/23", + "137.31.101.0/24", + "205.220.14.0/23", + "137.31.120.0/23", + "137.31.114.0/23", + "137.31.119.0/24", + "2605:4300:e500::/40", + "137.31.26.0/23", + "137.31.126.0/23", + "137.31.122.0/23", + "140.232.189.0/24", + "137.31.128.0/23", + "140.232.190.0/24", + "137.31.124.0/23", + "155.95.86.0/24", + "165.225.99.0/24", + "205.220.12.0/23", + "140.232.188.0/24", + "89.18.89.0/24", + "89.18.90.0/24" + ], + "missing": [], + "resolved": false, + "msg": "BGP anomaly for AS22616: 20 unexpected prefix(es), 0 missing" + }, + { + "id": "c37eb29c5c54c5a1", + "asn": "132372", + "ts": "2026-07-16T06:29:59.070Z", + "severity": "HIGH", + "unexpected": [ + "103.91.194.0/24", + "2a0d:9842::/48" + ], + "missing": [ + "172.94.65.0/24", + "172.94.34.0/24", + "172.94.97.0/24", + "172.94.29.0/24", + "172.94.99.0/24" + ], + "resolved": false, + "msg": "BGP anomaly for AS132372: 2 unexpected prefix(es), 5 missing" + } +] \ No newline at end of file diff --git a/local-db-client.js b/local-db-client.js index 4867458..c3df0e7 100644 --- a/local-db-client.js +++ b/local-db-client.js @@ -72,6 +72,9 @@ async function getAnnouncedPrefixes(asn) { } } +// Returns null on DB error (check could not run) vs [] for a genuine single/no-origin +// result -- a caller treating both as "no hijack" would silently disable hijack +// detection on every transient DB hiccup while still showing the check as clean. async function checkBgpHijack(prefix) { try { const result = await pool.query( @@ -81,7 +84,7 @@ async function checkBgpHijack(prefix) { return result.rows.length > 1 ? result.rows.map(r => r.origin_asn) : []; } catch (error) { console.error('[Local DB] Hijack Check Error:', error.message); - return []; + return null; } } @@ -249,7 +252,7 @@ async function getRipeStatAnnouncedPrefixes(asn) { }; } catch (error) { console.error('[Local RIPE Stat] Announced Prefixes Error:', error.message); - return { status: 'ok', data: { resource: `AS${asn}`, prefixes: [] } }; + return { status: 'error', error: error.message, data: { resource: `AS${asn}`, prefixes: [] } }; } } @@ -275,7 +278,7 @@ async function getRipeStatAsnNeighbours(asn) { }; } catch (error) { console.error('[Local RIPE Stat] ASN Neighbours Error:', error.message); - return { status: 'ok', data: { resource: `AS${asn}`, neighbours: [] } }; + return { status: 'error', error: error.message, data: { resource: `AS${asn}`, neighbours: [] } }; } } @@ -302,7 +305,7 @@ async function getRipeStatAsOverview(asn) { }; } catch (error) { console.error('[Local RIPE Stat] AS Overview Error:', error.message); - return { status: 'ok', data: { resource: `AS${asn}`, announced_prefixes_count: 0 } }; + return { status: 'error', error: error.message, data: { resource: `AS${asn}`, announced_prefixes_count: 0 } }; } } @@ -336,7 +339,7 @@ async function getRipeStatVisibility(asn) { }; } catch (error) { console.error('[Local RIPE Stat] Visibility Error:', error.message); - return { status: 'ok', data: { resource: `AS${asn}`, visibility: {} } }; + return { status: 'error', error: error.message, data: { resource: `AS${asn}`, visibility: {} } }; } } @@ -369,7 +372,7 @@ async function getRipeStatPrefixSizeDistribution(asn) { }; } catch (error) { console.error('[Local RIPE Stat] Prefix Size Distribution Error:', error.message); - return { status: 'ok', data: { resource: `AS${asn}`, ipv4_prefix_size: [] } }; + return { status: 'error', error: error.message, data: { resource: `AS${asn}`, ipv4_prefix_size: [] } }; } } diff --git a/package-lock.json b/package-lock.json index 7bac697..3a585ef 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,11 +17,11 @@ "cheerio": "^1.0.0", "fastify": "^5.8.5", "joi": "^17.11.0", - "node-cron": "^3.0.3", - "node-whois": "^2.1.3", + "node-cron": "^4.6.0", "ollama": "^0.5.12", "pg": "^8.11.0", "playwright": "^1.40.0", + "puppeteer": "^24.42.0", "zod": "^3.24.0" }, "bin": { @@ -31,7 +31,6 @@ "@playwright/test": "^1.40.0", "@types/better-sqlite3": "^7.6.12", "@types/node": "^22.10.0", - "@types/node-cron": "^3.0.0", "@types/pg": "^8.11.0", "@typescript-eslint/eslint-plugin": "^8.18.0", "@typescript-eslint/parser": "^8.18.0", @@ -60,10 +59,24 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", "dev": true, "license": "MIT", "engines": { @@ -71,23 +84,22 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.29.0" + "@babel/types": "^7.29.7" }, "bin": { "parser": "bin/babel-parser.js" @@ -97,14 +109,14 @@ } }, "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -117,78 +129,10 @@ "dev": true, "license": "MIT" }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.4.tgz", - "integrity": "sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.4.tgz", - "integrity": "sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.4.tgz", - "integrity": "sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.4.tgz", - "integrity": "sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.4.tgz", - "integrity": "sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz", + "integrity": "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==", "cpu": [ "arm64" ], @@ -202,363 +146,6 @@ "node": ">=18" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.4.tgz", - "integrity": "sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.4.tgz", - "integrity": "sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.4.tgz", - "integrity": "sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.4.tgz", - "integrity": "sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.4.tgz", - "integrity": "sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.4.tgz", - "integrity": "sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.4.tgz", - "integrity": "sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.4.tgz", - "integrity": "sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.4.tgz", - "integrity": "sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.4.tgz", - "integrity": "sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.4.tgz", - "integrity": "sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.4.tgz", - "integrity": "sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.4.tgz", - "integrity": "sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.4.tgz", - "integrity": "sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.4.tgz", - "integrity": "sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.4.tgz", - "integrity": "sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.4.tgz", - "integrity": "sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.4.tgz", - "integrity": "sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.4.tgz", - "integrity": "sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.4.tgz", - "integrity": "sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.4.tgz", - "integrity": "sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", @@ -611,9 +198,9 @@ "license": "MIT" }, "node_modules/@eslint/config-array/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.16.tgz", + "integrity": "sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==", "dev": true, "license": "MIT", "dependencies": { @@ -661,9 +248,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.5.tgz", - "integrity": "sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.6.tgz", + "integrity": "sha512-l2Ul9PrHsPCKcEY/ac7VgFj9D80C7S68sOKc618SyHDPK36s1XcFebXY0iTzUVn4Yq+YbwvSnDmCz9yxjX+QrA==", "dev": true, "license": "MIT", "dependencies": { @@ -673,7 +260,7 @@ "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^4.1.1", + "js-yaml": "^4.3.0", "minimatch": "^3.1.5", "strip-json-comments": "^3.1.1" }, @@ -685,9 +272,9 @@ } }, "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "dev": true, "license": "MIT", "dependencies": { @@ -709,9 +296,9 @@ "license": "MIT" }, "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.16.tgz", + "integrity": "sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==", "dev": true, "license": "MIT", "dependencies": { @@ -750,9 +337,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.39.4", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.4.tgz", - "integrity": "sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==", + "version": "9.39.5", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.5.tgz", + "integrity": "sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A==", "dev": true, "license": "MIT", "engines": { @@ -824,9 +411,9 @@ "license": "MIT" }, "node_modules/@fastify/fast-json-stringify-compiler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-5.0.3.tgz", - "integrity": "sha512-uik7yYHkLr6fxd8hJSZ8c+xF4WafPK+XzneQDPU+D10r5X19GW8lJcom2YijX2+qtFF1ENJlHXKFM9ouXNJYgQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-5.1.0.tgz", + "integrity": "sha512-PxcYtKLbQ8Z+yApiqjK8FwxIwvEj38k2OiLc17u8dkJSlmfi2wHHPaSnaoqBPQqtvF8YVsDgDpP2snDCfFrpfw==", "funding": [ { "type": "github", @@ -839,7 +426,7 @@ ], "license": "MIT", "dependencies": { - "fast-json-stringify": "^6.0.0" + "fast-json-stringify": "^7.0.0" } }, "node_modules/@fastify/forwarded": { @@ -897,19 +484,10 @@ "ipaddr.js": "^2.1.0" } }, - "node_modules/@fastify/proxy-addr/node_modules/ipaddr.js": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.3.0.tgz", - "integrity": "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, "node_modules/@grpc/grpc-js": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.14.3.tgz", - "integrity": "sha512-Iq8QQQ/7X3Sac15oB6p0FmUg/klxQvXLeileoqrTRGJYLV+/9tubbr9ipz0GKHjmXVsgFPo/+W+2cA8eNcR+XA==", + "version": "1.14.4", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.14.4.tgz", + "integrity": "sha512-k9Dj3DV/itK9D06Y8f190Qgop7/Ui+D0njFV3LHMPwPT75DpXLQohE9Wmz0QElrJnzsjB7KPWiKJbOl7IPDArQ==", "license": "Apache-2.0", "dependencies": { "@grpc/proto-loader": "^0.8.0", @@ -920,14 +498,14 @@ } }, "node_modules/@grpc/proto-loader": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.8.0.tgz", - "integrity": "sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.8.1.tgz", + "integrity": "sha512-wtF6h+DY6M3YaDBPAmvuuA6jV8Sif9MjtOI5euKFWRgCDl5PeDpPsHR9u2l6St5ceY8AZgoNDww5+HvEsXFsGg==", "license": "Apache-2.0", "dependencies": { "lodash.camelcase": "^4.3.0", "long": "^5.0.0", - "protobufjs": "^7.5.3", + "protobufjs": "^7.5.5", "yargs": "^17.7.2" }, "bin": { @@ -953,9 +531,9 @@ } }, "node_modules/@hono/node-server": { - "version": "1.19.11", - "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.11.tgz", - "integrity": "sha512-dr8/3zEaB+p0D2n/IUrlPF1HZm586qgJNXK1a9fhg/PzdtkK7Ksd5l312tJX2yBuALqDYBlG20QEbayqPyxn+g==", + "version": "1.19.14", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.14.tgz", + "integrity": "sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw==", "license": "MIT", "engines": { "node": ">=18.14.1" @@ -965,29 +543,43 @@ } }, "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", "dev": true, "license": "Apache-2.0", + "dependencies": { + "@humanfs/types": "^0.15.0" + }, "engines": { "node": ">=18.18.0" } }, "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@humanfs/core": "^0.19.1", + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", "@humanwhocodes/retry": "^0.4.0" }, "engines": { "node": ">=18.18.0" } }, + "node_modules/@humanfs/types": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -1035,9 +627,9 @@ } }, "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", + "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", "dev": true, "license": "MIT", "engines": { @@ -1094,9 +686,9 @@ } }, "node_modules/@modelcontextprotocol/sdk": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.28.0.tgz", - "integrity": "sha512-gmloF+i+flI8ouQK7MWW4mOwuMh4RePBuPFAEPC6+pdqyWOUMDOixb6qZ69owLJpz6XmyllCouc4t8YWO+E2Nw==", + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.29.0.tgz", + "integrity": "sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==", "license": "MIT", "dependencies": { "@hono/node-server": "^1.19.9", @@ -1151,13 +743,13 @@ } }, "node_modules/@playwright/test": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", - "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", + "version": "1.61.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.61.1.tgz", + "integrity": "sha512-8nKv6+0RJSL9FE4jYOEGXnPeM/Hg12qZpmqzZjRh3qM0Y7c3z1mrOTfFLids72RDQYVh9WpLEfR5WdpNX4fkig==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright": "1.59.1" + "playwright": "1.61.1" }, "bin": { "playwright": "cli.js" @@ -1179,25 +771,24 @@ "license": "BSD-3-Clause" }, "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.5.tgz", + "integrity": "sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==", "license": "BSD-3-Clause" }, "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.1.tgz", + "integrity": "sha512-vW1GmwMZNnL+gMRaovlh9yZX74kc+TTU3FObkkurpMaRtBfLP3ldjS9KQWlwZgraRE0+dheEEoAxdzcJQ8eXZg==", "license": "BSD-3-Clause" }, "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.1.tgz", + "integrity": "sha512-GpptLrs57adMSuHi3VNj0mAF8dwh36LMaYF6XyJ6JMWlVsc+t42tm1HSEDmOs3A8fC9yyeisgLhsTVQokOZ0zw==", "license": "BSD-3-Clause", "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" + "@protobufjs/aspromise": "^1.1.1" } }, "node_modules/@protobufjs/float": { @@ -1206,12 +797,6 @@ "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", "license": "BSD-3-Clause" }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", - "license": "BSD-3-Clause" - }, "node_modules/@protobufjs/path": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", @@ -1225,43 +810,62 @@ "license": "BSD-3-Clause" }, "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.2.tgz", + "integrity": "sha512-b1UQwcEZ4yCnMCD8DAL1VlbvBJE9/IX4FTIp7BG1xYpf29SLazLSrqUkj4w7Y5y7cCVP6E5tcqqcI0xemPkHug==", "license": "BSD-3-Clause" }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.0.tgz", - "integrity": "sha512-WOhNW9K8bR3kf4zLxbfg6Pxu2ybOUbB2AjMDHSQx86LIF4rH4Ft7vmMwNt0loO0eonglSNy4cpD3MKXXKQu0/A==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] + "node_modules/@puppeteer/browsers": { + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.13.2.tgz", + "integrity": "sha512-5EUZSUIc37H6aIXyWO0Z4y8NlF8NnjgmqeQgOGiswAU7pY0HOo16ho4+alIWmSfdZnjqBRawMsP3I5YqLSn6kw==", + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.4.3", + "extract-zip": "^2.0.1", + "progress": "^2.0.3", + "proxy-agent": "^6.5.0", + "semver": "^7.7.4", + "tar-fs": "^3.1.1", + "yargs": "^17.7.2" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" + }, + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.0.tgz", - "integrity": "sha512-u6JHLll5QKRvjciE78bQXDmqRqNs5M/3GVqZeMwvmjaNODJih/WIrJlFVEihvV0MiYFmd+ZyPr9wxOVbPAG2Iw==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/@puppeteer/browsers/node_modules/tar-fs": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.3.tgz", + "integrity": "sha512-/hU4AXnIdZu+Gvl1pk0oI5f5HxWsCJRtY2aFaJdk9VvyL48DWU6iU5WAIPG+wIi1YvWA6eTJvIviP/tMAZZNwQ==", "license": "MIT", - "optional": true, - "os": [ - "android" - ] + "dependencies": { + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^4.0.1", + "bare-path": "^3.0.0" + } + }, + "node_modules/@puppeteer/browsers/node_modules/tar-stream": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.2.0.tgz", + "integrity": "sha512-ojzvCvVaNp6aOTFmG7jaRD0meowIAuPc3cMMhSgKiVWws1GyHbGd/xvnyuRKcKlMpt3qvxx6r0hreCNITP9hIg==", + "license": "MIT", + "dependencies": { + "b4a": "^1.6.4", + "bare-fs": "^4.5.5", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.0.tgz", - "integrity": "sha512-qEF7CsKKzSRc20Ciu2Zw1wRrBz4g56F7r/vRwY430UPp/nt1x21Q/fpJ9N5l47WWvJlkNCPJz3QRVw008fi7yA==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.2.tgz", + "integrity": "sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==", "cpu": [ "arm64" ], @@ -1272,353 +876,6 @@ "darwin" ] }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.0.tgz", - "integrity": "sha512-WADYozJ4QCnXCH4wPB+3FuGmDPoFseVCUrANmA5LWwGmC6FL14BWC7pcq+FstOZv3baGX65tZ378uT6WG8ynTw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.0.tgz", - "integrity": "sha512-6b8wGHJlDrGeSE3aH5mGNHBjA0TTkxdoNHik5EkvPHCt351XnigA4pS7Wsj/Eo9Y8RBU6f35cjN9SYmCFBtzxw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.0.tgz", - "integrity": "sha512-h25Ga0t4jaylMB8M/JKAyrvvfxGRjnPQIR8lnCayyzEjEOx2EJIlIiMbhpWxDRKGKF8jbNH01NnN663dH638mA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.0.tgz", - "integrity": "sha512-RzeBwv0B3qtVBWtcuABtSuCzToo2IEAIQrcyB/b2zMvBWVbjo8bZDjACUpnaafaxhTw2W+imQbP2BD1usasK4g==", - "cpu": [ - "arm" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.0.tgz", - "integrity": "sha512-Sf7zusNI2CIU1HLzuu9Tc5YGAHEZs5Lu7N1ssJG4Tkw6e0MEsN7NdjUDDfGNHy2IU+ENyWT+L2obgWiguWibWQ==", - "cpu": [ - "arm" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.0.tgz", - "integrity": "sha512-DX2x7CMcrJzsE91q7/O02IJQ5/aLkVtYFryqCjduJhUfGKG6yJV8hxaw8pZa93lLEpPTP/ohdN4wFz7yp/ry9A==", - "cpu": [ - "arm64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.0.tgz", - "integrity": "sha512-09EL+yFVbJZlhcQfShpswwRZ0Rg+z/CsSELFCnPt3iK+iqwGsI4zht3secj5vLEs957QvFFXnzAT0FFPIxSrkQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.0.tgz", - "integrity": "sha512-i9IcCMPr3EXm8EQg5jnja0Zyc1iFxJjZWlb4wr7U2Wx/GrddOuEafxRdMPRYVaXjgbhvqalp6np07hN1w9kAKw==", - "cpu": [ - "loong64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.0.tgz", - "integrity": "sha512-DGzdJK9kyJ+B78MCkWeGnpXJ91tK/iKA6HwHxF4TAlPIY7GXEvMe8hBFRgdrR9Ly4qebR/7gfUs9y2IoaVEyog==", - "cpu": [ - "loong64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.0.tgz", - "integrity": "sha512-RwpnLsqC8qbS8z1H1AxBA1H6qknR4YpPR9w2XX0vo2Sz10miu57PkNcnHVaZkbqyw/kUWfKMI73jhmfi9BRMUQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.0.tgz", - "integrity": "sha512-Z8pPf54Ly3aqtdWC3G4rFigZgNvd+qJlOE52fmko3KST9SoGfAdSRCwyoyG05q1HrrAblLbk1/PSIV+80/pxLg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.0.tgz", - "integrity": "sha512-3a3qQustp3COCGvnP4SvrMHnPQ9d1vzCakQVRTliaz8cIp/wULGjiGpbcqrkv0WrHTEp8bQD/B3HBjzujVWLOA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.0.tgz", - "integrity": "sha512-pjZDsVH/1VsghMJ2/kAaxt6dL0psT6ZexQVrijczOf+PeP2BUqTHYejk3l6TlPRydggINOeNRhvpLa0AYpCWSQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.0.tgz", - "integrity": "sha512-3ObQs0BhvPgiUVZrN7gqCSvmFuMWvWvsjG5ayJ3Lraqv+2KhOsp+pUbigqbeWqueGIsnn+09HBw27rJ+gYK4VQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.0.tgz", - "integrity": "sha512-EtylprDtQPdS5rXvAayrNDYoJhIz1/vzN2fEubo3yLE7tfAw+948dO0g4M0vkTVFhKojnF+n6C8bDNe+gDRdTg==", - "cpu": [ - "x64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.0.tgz", - "integrity": "sha512-k09oiRCi/bHU9UVFqD17r3eJR9bn03TyKraCrlz5ULFJGdJGi7VOmm9jl44vOJvRJ6P7WuBi/s2A97LxxHGIdw==", - "cpu": [ - "x64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.0.tgz", - "integrity": "sha512-1o/0/pIhozoSaDJoDcec+IVLbnRtQmHwPV730+AOD29lHEEo4F5BEUB24H0OBdhbBBDwIOSuf7vgg0Ywxdfiiw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ] - }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.0.tgz", - "integrity": "sha512-pESDkos/PDzYwtyzB5p/UoNU/8fJo68vcXM9ZW2V0kjYayj1KaaUfi1NmTUTUpMn4UhU4gTuK8gIaFO4UGuMbA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.0.tgz", - "integrity": "sha512-hj1wFStD7B1YBeYmvY+lWXZ7ey73YGPcViMShYikqKT1GtstIKQAtfUI6yrzPjAy/O7pO0VLXGmUVWXQMaYgTQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.0.tgz", - "integrity": "sha512-SyaIPFoxmUPlNDq5EHkTbiKzmSEmq/gOYFI/3HHJ8iS/v1mbugVa7dXUzcJGQfoytp9DJFLhHH4U3/eTy2Bq4w==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.0.tgz", - "integrity": "sha512-RdcryEfzZr+lAr5kRm2ucN9aVlCCa2QNq4hXelZxb8GG0NJSazq44Z3PCCc8wISRuCVnGs0lQJVX5Vp6fKA+IA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.0.tgz", - "integrity": "sha512-PrsWNQ8BuE00O3Xsx3ALh2Df8fAj9+cvvX9AIA6o4KpATR98c9mud4XtDWVvsEuyia5U4tVSTKygawyJkjm60w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, "node_modules/@sideway/address": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", @@ -1640,6 +897,12 @@ "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", "license": "BSD-3-Clause" }, + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", + "license": "MIT" + }, "node_modules/@types/better-sqlite3": { "version": "7.6.13", "resolved": "https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.13.tgz", @@ -1651,9 +914,9 @@ } }, "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", "dev": true, "license": "MIT" }, @@ -1665,21 +928,14 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.19.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.15.tgz", - "integrity": "sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg==", + "version": "22.20.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.20.1.tgz", + "integrity": "sha512-EANqOCF9QFyra+4pfxUcX9STKJpCLjMbObVzljIJomAWSnuSIEAvyzEU53GaajbXJEgdh0iEcPL+DGvpUd4k1Q==", "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, - "node_modules/@types/node-cron": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@types/node-cron/-/node-cron-3.0.11.tgz", - "integrity": "sha512-0ikrnug3/IyneSHqCBeslAhlK2aBfYek1fGo4bP4QnZPmiqSGRK+Oy7ZMisLWkesffJvQ1cqAcBnJC+8+nxIAg==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/pg": { "version": "8.20.0", "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.20.0.tgz", @@ -1692,21 +948,31 @@ "pg-types": "^2.2.0" } }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.57.2.tgz", - "integrity": "sha512-NZZgp0Fm2IkD+La5PR81sd+g+8oS6JwJje+aRWsDocxHkjyRw0J5L5ZTlN3LI1LlOcGL7ph3eaIUmTXMIjLk0w==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.64.0.tgz", + "integrity": "sha512-CGvQPBxN3wZLu6Rz2kFUpZeoCm78xUic92ck39KPePkO1NPOwjCqdQnm5Q87tpWw9vcBvW8XLrDXjH9PWYtJ3Q==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.57.2", - "@typescript-eslint/type-utils": "8.57.2", - "@typescript-eslint/utils": "8.57.2", - "@typescript-eslint/visitor-keys": "8.57.2", + "@typescript-eslint/scope-manager": "8.64.0", + "@typescript-eslint/type-utils": "8.64.0", + "@typescript-eslint/utils": "8.64.0", + "@typescript-eslint/visitor-keys": "8.64.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", - "ts-api-utils": "^2.4.0" + "ts-api-utils": "^2.5.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1716,22 +982,22 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.57.2", + "@typescript-eslint/parser": "^8.64.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.57.2.tgz", - "integrity": "sha512-30ScMRHIAD33JJQkgfGW1t8CURZtjc2JpTrq5n2HFhOefbAhb7ucc7xJwdWcrEtqUIYJ73Nybpsggii6GtAHjA==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.64.0.tgz", + "integrity": "sha512-KA0OshtlcCCXmbfqyZkM5pV3/WNraJf7DkJRLpyrmwPtud57H5BDX7C3k0LPSPxpprfRL+cJDGabF10mvNCoCw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.57.2", - "@typescript-eslint/types": "8.57.2", - "@typescript-eslint/typescript-estree": "8.57.2", - "@typescript-eslint/visitor-keys": "8.57.2", + "@typescript-eslint/scope-manager": "8.64.0", + "@typescript-eslint/types": "8.64.0", + "@typescript-eslint/typescript-estree": "8.64.0", + "@typescript-eslint/visitor-keys": "8.64.0", "debug": "^4.4.3" }, "engines": { @@ -1743,18 +1009,18 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.57.2.tgz", - "integrity": "sha512-FuH0wipFywXRTHf+bTTjNyuNQQsQC3qh/dYzaM4I4W0jrCqjCVuUh99+xd9KamUfmCGPvbO8NDngo/vsnNVqgw==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.64.0.tgz", + "integrity": "sha512-tk4WpOJ6IEbGrVHaNmM0YRrwAD3exZlIK3iadQNAxh4YKk6jvUQ4ecq18n+v7+meh+cJ3j+D8nbk8sRKhlwLQg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.57.2", - "@typescript-eslint/types": "^8.57.2", + "@typescript-eslint/tsconfig-utils": "^8.64.0", + "@typescript-eslint/types": "^8.64.0", "debug": "^4.4.3" }, "engines": { @@ -1765,18 +1031,18 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.57.2.tgz", - "integrity": "sha512-snZKH+W4WbWkrBqj4gUNRIGb/jipDW3qMqVJ4C9rzdFc+wLwruxk+2a5D+uoFcKPAqyqEnSb4l2ULuZf95eSkw==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.64.0.tgz", + "integrity": "sha512-CXEaFdYXjSTgKhisNkwCcJwTP8Pl+fmRrEQrri4nm3vU743bALrxzLmq7fHG/7e6a5xO0lDYeURpZmBuhHk54w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.57.2", - "@typescript-eslint/visitor-keys": "8.57.2" + "@typescript-eslint/types": "8.64.0", + "@typescript-eslint/visitor-keys": "8.64.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1787,9 +1053,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.57.2.tgz", - "integrity": "sha512-3Lm5DSM+DCowsUOJC+YqHHnKEfFh5CoGkj5Z31NQSNF4l5wdOwqGn99wmwN/LImhfY3KJnmordBq/4+VDe2eKw==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.64.0.tgz", + "integrity": "sha512-2yo8rRNKuzbVWQp5kslhANqZ2uDAeROQHBRZNPu8JDsHmeFNj/XJJhX/FhNUWmkHHvoNsKa6+tHJiig87EzsQw==", "dev": true, "license": "MIT", "engines": { @@ -1800,21 +1066,21 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.57.2.tgz", - "integrity": "sha512-Co6ZCShm6kIbAM/s+oYVpKFfW7LBc6FXoPXjTRQ449PPNBY8U0KZXuevz5IFuuUj2H9ss40atTaf9dlGLzbWZg==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.64.0.tgz", + "integrity": "sha512-XWG4Fmmv/6SvyS9nH8jWrKs6terwJvE8cyRt1CzYYqzp9OrPhCT4cMc/f7C6RZCwG+qMmiffJS1/qJP8G1URtg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.57.2", - "@typescript-eslint/typescript-estree": "8.57.2", - "@typescript-eslint/utils": "8.57.2", + "@typescript-eslint/types": "8.64.0", + "@typescript-eslint/typescript-estree": "8.64.0", + "@typescript-eslint/utils": "8.64.0", "debug": "^4.4.3", - "ts-api-utils": "^2.4.0" + "ts-api-utils": "^2.5.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1825,13 +1091,13 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/types": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.57.2.tgz", - "integrity": "sha512-/iZM6FnM4tnx9csuTxspMW4BOSegshwX5oBDznJ7S4WggL7Vczz5d2W11ecc4vRrQMQHXRSxzrCsyG5EsPPTbA==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.64.0.tgz", + "integrity": "sha512-qjhfuTfLXjA4IOzXvz0rTjT01BqEiIgPoUeMwiEjnaHKJMTNo8rH5pYW1a2L/0Dnux2fPC85AeyJoWaGa8WxTA==", "dev": true, "license": "MIT", "engines": { @@ -1843,21 +1109,21 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.57.2.tgz", - "integrity": "sha512-2MKM+I6g8tJxfSmFKOnHv2t8Sk3T6rF20A1Puk0svLK+uVapDZB/4pfAeB7nE83uAZrU6OxW+HmOd5wHVdXwXA==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.64.0.tgz", + "integrity": "sha512-Pztpsn1aCE1oWDvDEfUk31nngvvF7vUB5SwHFEaZIFpvw7WJtqUHHL4plBZDA9HfWJJjL13BdG0YrJInTUvoVA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.57.2", - "@typescript-eslint/tsconfig-utils": "8.57.2", - "@typescript-eslint/types": "8.57.2", - "@typescript-eslint/visitor-keys": "8.57.2", + "@typescript-eslint/project-service": "8.64.0", + "@typescript-eslint/tsconfig-utils": "8.64.0", + "@typescript-eslint/types": "8.64.0", + "@typescript-eslint/visitor-keys": "8.64.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", - "ts-api-utils": "^2.4.0" + "ts-api-utils": "^2.5.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1867,20 +1133,20 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/utils": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.57.2.tgz", - "integrity": "sha512-krRIbvPK1ju1WBKIefiX+bngPs+odIQUtR7kymzPfo1POVw3jlF+nLkmexdSSd4UCbDcQn+wMBATOOmpBbqgKg==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.64.0.tgz", + "integrity": "sha512-aJUGVB3+U0htrrCjoA8qukw8cm8fNCGAxK/tVoS70k8aeb7DETKeFozRiVFIwEeN9WJLsjaP3ph8I60tY2XZoQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.57.2", - "@typescript-eslint/types": "8.57.2", - "@typescript-eslint/typescript-estree": "8.57.2" + "@typescript-eslint/scope-manager": "8.64.0", + "@typescript-eslint/types": "8.64.0", + "@typescript-eslint/typescript-estree": "8.64.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1891,17 +1157,17 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.57.2.tgz", - "integrity": "sha512-zhahknjobV2FiD6Ee9iLbS7OV9zi10rG26odsQdfBO/hjSzUQbkIYgda+iNKK1zNiW2ey+Lf8MU5btN17V3dUw==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.64.0.tgz", + "integrity": "sha512-mrtuL8Nsn6gi2H4mo5KMTp823M+3Q19Ew/i+Zlikq20tIMm99C3Ez0dCmkWWnxut20esQvTg8aUSEhMcAOXhEw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.57.2", + "@typescript-eslint/types": "8.64.0", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -2091,9 +1357,9 @@ } }, "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", + "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", "dev": true, "license": "MIT", "bin": { @@ -2113,10 +1379,22 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/ajv": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -2178,7 +1456,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, "license": "Python-2.0" }, "node_modules/assertion-error": { @@ -2191,6 +1468,18 @@ "node": ">=12" } }, + "node_modules/ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -2207,9 +1496,9 @@ } }, "node_modules/avvio": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/avvio/-/avvio-9.2.0.tgz", - "integrity": "sha512-2t/sy01ArdHHE0vRH5Hsay+RtCZt3dLPji7W7/MMOCEgze5b7SNDC4j5H6FnVgPkI1MTNFGzHdHrVXDDl7QSSQ==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/avvio/-/avvio-9.3.0.tgz", + "integrity": "sha512-g2tQ7LE7oOSqDfwEm3M+ZCMTJc7KiZCdJ4UwyZJb5ckTKyYu50OYmvv0mCFXPuYXoM4zkSt8zM9XQ9KCvxA74A==", "funding": [ { "type": "github", @@ -2227,16 +1516,31 @@ } }, "node_modules/axios": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.2.tgz", - "integrity": "sha512-wLrXxPtcrPTsNlJmKjkPnNPK2Ihe0hn0wGSaTEiHRPxwjvJwT3hKmXF4dpqxmPO9SoNb2FsYXj/xEo0gHN+D5A==", + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.18.1.tgz", + "integrity": "sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g==", "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.11", + "follow-redirects": "^1.16.0", "form-data": "^4.0.5", + "https-proxy-agent": "^5.0.1", "proxy-from-env": "^2.1.0" } }, + "node_modules/b4a": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.8.1.tgz", + "integrity": "sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==", + "license": "Apache-2.0", + "peerDependencies": { + "react-native-b4a": "*" + }, + "peerDependenciesMeta": { + "react-native-b4a": { + "optional": true + } + } + }, "node_modules/balanced-match": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", @@ -2247,6 +1551,86 @@ "node": "18 || 20 || >=22" } }, + "node_modules/bare-events": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.9.1.tgz", + "integrity": "sha512-Z0oHEHAFDZkffN8Qc39zNZjQlMDkPJRyyyZieU1VH7u8c5S+qHZ2S8ixdKIAxEjfHO7FJxXmJWgteOghVanIsg==", + "license": "Apache-2.0", + "peerDependencies": { + "bare-abort-controller": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + } + } + }, + "node_modules/bare-fs": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.7.4.tgz", + "integrity": "sha512-y1kC+ffIx/tPLdTE693uNjHfzTfr+ravR5tvWlMXe25nELbkqV400S71qHDwbkAQ1FVEZobB1NFRzFbCCcyBCQ==", + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4", + "bare-url": "^2.2.2", + "fast-fifo": "^1.3.2" + }, + "engines": { + "bare": ">=1.16.0" + }, + "peerDependencies": { + "bare-buffer": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + } + } + }, + "node_modules/bare-path": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.1.1.tgz", + "integrity": "sha512-JprUlveX3QjApC1cTpsUOiscADftCGVWkzitbHsRqv84hzYwYHw2mbluddsq5TvI8mH/8Ov1f4BiMAdcB0oYnQ==", + "license": "Apache-2.0" + }, + "node_modules/bare-stream": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.13.3.tgz", + "integrity": "sha512-Kc+brLqvEqGkjyfiwJmImAOqLZL7OsoLKuavx+hJjgVV3nLTOjloJyPMFxjUPerGGHrNH0fLU06jjykMLWrERQ==", + "license": "Apache-2.0", + "dependencies": { + "b4a": "^1.8.1", + "streamx": "^2.25.0", + "teex": "^1.0.1" + }, + "peerDependencies": { + "bare-abort-controller": "*", + "bare-buffer": "*", + "bare-events": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + }, + "bare-buffer": { + "optional": true + }, + "bare-events": { + "optional": true + } + } + }, + "node_modules/bare-url": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.4.5.tgz", + "integrity": "sha512-K+y9xF1tN+CdPu4qWwr0QiK1Al07eFPGYK5M2pDXcmHdMdgC/tT/bpmMe1hrmRHaidKLkXrC+cRNYf3XVDUhSQ==", + "license": "Apache-2.0", + "dependencies": { + "bare-path": "^3.0.0" + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -2267,6 +1651,15 @@ ], "license": "MIT" }, + "node_modules/basic-ftp": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.3.1.tgz", + "integrity": "sha512-bopVNp6ugyA150DDuZfPFdt1KZ5a94ZDiwX4hMgZDzF+GttD80lEy8kj98kbyhLXnPvhtIo93mdnLIjpCAeeOw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/better-sqlite3": { "version": "11.10.0", "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-11.10.0.tgz", @@ -2299,20 +1692,20 @@ } }, "node_modules/body-parser": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", - "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.3.0.tgz", + "integrity": "sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==", "license": "MIT", "dependencies": { "bytes": "^3.1.2", - "content-type": "^1.0.5", + "content-type": "^2.0.0", "debug": "^4.4.3", - "http-errors": "^2.0.0", - "iconv-lite": "^0.7.0", + "http-errors": "^2.0.1", + "iconv-lite": "^0.7.2", "on-finished": "^2.4.1", - "qs": "^6.14.1", - "raw-body": "^3.0.1", - "type-is": "^2.0.1" + "qs": "^6.15.2", + "raw-body": "^3.0.2", + "type-is": "^2.1.0" }, "engines": { "node": ">=18" @@ -2322,10 +1715,23 @@ "url": "https://opencollective.com/express" } }, + "node_modules/body-parser/node_modules/content-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", + "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", - "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz", + "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -2345,9 +1751,9 @@ "license": "ISC" }, "node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.7.tgz", + "integrity": "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==", "dev": true, "license": "MIT", "dependencies": { @@ -2381,6 +1787,15 @@ "ieee754": "^1.1.13" } }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -2433,7 +1848,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -2531,6 +1945,19 @@ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "license": "ISC" }, + "node_modules/chromium-bidi": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-14.0.0.tgz", + "integrity": "sha512-9gYlLtS6tStdRWzrtXaTMnqcM4dudNegMXJxkR0I/CXObHalYeYcAMPrL19eroNZHtJ8DQmu1E+ZNOYu/IXMXw==", + "license": "Apache-2.0", + "dependencies": { + "mitt": "^3.0.1", + "zod": "^3.24.1" + }, + "peerDependencies": { + "devtools-protocol": "*" + } + }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -2641,9 +2068,9 @@ "license": "MIT" }, "node_modules/content-disposition": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", - "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", + "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", "license": "MIT", "engines": { "node": ">=18" @@ -2697,6 +2124,32 @@ "url": "https://opencollective.com/express" } }, + "node_modules/cosmiconfig": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.2.tgz", + "integrity": "sha512-gtTZxTDau1wL7Y7zifc2dd8jHSK/k6BTx/2Xp/BpdlAdnlYWFVt7qhJqgwi7637yRwRQ3qL4ZidbB4I8tA5VOg==", + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -2739,6 +2192,15 @@ "url": "https://github.com/sponsors/fb55" } }, + "node_modules/data-uri-to-buffer": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", @@ -2797,6 +2259,20 @@ "dev": true, "license": "MIT" }, + "node_modules/degenerator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "license": "MIT", + "dependencies": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -2833,6 +2309,12 @@ "node": ">=8" } }, + "node_modules/devtools-protocol": { + "version": "0.0.1608973", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1608973.tgz", + "integrity": "sha512-Tpm17fxYzt+J7VrGdc1k8YdRqS3YV7se/M6KeemEqvUbq/n7At1rWVuXMxQgpWkdwSdIEKYbU//Bve+Shm4YNQ==", + "license": "BSD-3-Clause" + }, "node_modules/dom-serializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", @@ -2965,6 +2447,24 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -2991,9 +2491,9 @@ "license": "MIT" }, "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -3018,9 +2518,9 @@ } }, "node_modules/esbuild": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.4.tgz", - "integrity": "sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.1.tgz", + "integrity": "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -3031,32 +2531,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.4", - "@esbuild/android-arm": "0.27.4", - "@esbuild/android-arm64": "0.27.4", - "@esbuild/android-x64": "0.27.4", - "@esbuild/darwin-arm64": "0.27.4", - "@esbuild/darwin-x64": "0.27.4", - "@esbuild/freebsd-arm64": "0.27.4", - "@esbuild/freebsd-x64": "0.27.4", - "@esbuild/linux-arm": "0.27.4", - "@esbuild/linux-arm64": "0.27.4", - "@esbuild/linux-ia32": "0.27.4", - "@esbuild/linux-loong64": "0.27.4", - "@esbuild/linux-mips64el": "0.27.4", - "@esbuild/linux-ppc64": "0.27.4", - "@esbuild/linux-riscv64": "0.27.4", - "@esbuild/linux-s390x": "0.27.4", - "@esbuild/linux-x64": "0.27.4", - "@esbuild/netbsd-arm64": "0.27.4", - "@esbuild/netbsd-x64": "0.27.4", - "@esbuild/openbsd-arm64": "0.27.4", - "@esbuild/openbsd-x64": "0.27.4", - "@esbuild/openharmony-arm64": "0.27.4", - "@esbuild/sunos-x64": "0.27.4", - "@esbuild/win32-arm64": "0.27.4", - "@esbuild/win32-ia32": "0.27.4", - "@esbuild/win32-x64": "0.27.4" + "@esbuild/aix-ppc64": "0.28.1", + "@esbuild/android-arm": "0.28.1", + "@esbuild/android-arm64": "0.28.1", + "@esbuild/android-x64": "0.28.1", + "@esbuild/darwin-arm64": "0.28.1", + "@esbuild/darwin-x64": "0.28.1", + "@esbuild/freebsd-arm64": "0.28.1", + "@esbuild/freebsd-x64": "0.28.1", + "@esbuild/linux-arm": "0.28.1", + "@esbuild/linux-arm64": "0.28.1", + "@esbuild/linux-ia32": "0.28.1", + "@esbuild/linux-loong64": "0.28.1", + "@esbuild/linux-mips64el": "0.28.1", + "@esbuild/linux-ppc64": "0.28.1", + "@esbuild/linux-riscv64": "0.28.1", + "@esbuild/linux-s390x": "0.28.1", + "@esbuild/linux-x64": "0.28.1", + "@esbuild/netbsd-arm64": "0.28.1", + "@esbuild/netbsd-x64": "0.28.1", + "@esbuild/openbsd-arm64": "0.28.1", + "@esbuild/openbsd-x64": "0.28.1", + "@esbuild/openharmony-arm64": "0.28.1", + "@esbuild/sunos-x64": "0.28.1", + "@esbuild/win32-arm64": "0.28.1", + "@esbuild/win32-ia32": "0.28.1", + "@esbuild/win32-x64": "0.28.1" } }, "node_modules/escalade": { @@ -3087,10 +2587,31 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, "node_modules/eslint": { - "version": "9.39.4", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.4.tgz", - "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==", + "version": "9.39.5", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.5.tgz", + "integrity": "sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw==", "dev": true, "license": "MIT", "dependencies": { @@ -3099,8 +2620,8 @@ "@eslint/config-array": "^0.21.2", "@eslint/config-helpers": "^0.4.2", "@eslint/core": "^0.17.0", - "@eslint/eslintrc": "^3.3.5", - "@eslint/js": "9.39.4", + "@eslint/eslintrc": "^3.3.6", + "@eslint/js": "9.39.5", "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", @@ -3178,9 +2699,9 @@ } }, "node_modules/eslint/node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "dev": true, "license": "MIT", "dependencies": { @@ -3202,9 +2723,9 @@ "license": "MIT" }, "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.16.tgz", + "integrity": "sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==", "dev": true, "license": "MIT", "dependencies": { @@ -3286,6 +2807,19 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/esquery": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", @@ -3316,7 +2850,6 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=4.0" @@ -3336,7 +2869,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" @@ -3351,6 +2883,15 @@ "node": ">= 0.6" } }, + "node_modules/events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.7.0" + } + }, "node_modules/eventsource": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", @@ -3364,9 +2905,9 @@ } }, "node_modules/eventsource-parser": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", - "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.1.0.tgz", + "integrity": "sha512-kJezFj9YFAMLeORyi7aCLxLbD5/qWMQnoMVlVPyHIll7lgRJCc3JVln9Vgl9nwQi0YkMnhdGTMNn7CkRRAptMg==", "license": "MIT", "engines": { "node": ">=18.0.0" @@ -3382,9 +2923,9 @@ } }, "node_modules/expect-type": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", - "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz", + "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -3435,12 +2976,12 @@ } }, "node_modules/express-rate-limit": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.3.1.tgz", - "integrity": "sha512-D1dKN+cmyPWuvB+G2SREQDzPY1agpBIcTa9sJxOPMCNeH3gwzhqJRDWCXW3gg0y//+LQ/8j52JbMROWyrKdMdw==", + "version": "8.5.2", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.5.2.tgz", + "integrity": "sha512-5Kb34ipNX694DH48vN9irak1Qx30nb0PLYHXfJgw4YEjiC3ZEmZJhwOp+VfiCYwFzvFTdB9QkArYS5kXa2cx2A==", "license": "MIT", "dependencies": { - "ip-address": "10.1.0" + "ip-address": "^10.2.0" }, "engines": { "node": ">= 16" @@ -3452,6 +2993,26 @@ "express": ">= 4.11" } }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "license": "BSD-2-Clause", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, "node_modules/fast-decode-uri-component": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", @@ -3464,6 +3025,12 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "license": "MIT" }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "license": "MIT" + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -3472,9 +3039,9 @@ "license": "MIT" }, "node_modules/fast-json-stringify": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-6.3.0.tgz", - "integrity": "sha512-oRCntNDY/329HJPlmdNLIdogNtt6Vyjb1WuT01Soss3slIdyUp8kAcDU3saQTOquEK8KFVfwIIF7FebxUAu+yA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-7.0.1.tgz", + "integrity": "sha512-eRSayARSbbwlBjpP4vnTTIRD5QPcIrmihPxDeN1DtKnHPg66UuJLx+8hlK1kaFdjvzyQ/dzALoi4vwAQ+T+iZA==", "funding": [ { "type": "github", @@ -3490,11 +3057,27 @@ "@fastify/merge-json-schemas": "^0.2.0", "ajv": "^8.12.0", "ajv-formats": "^3.0.1", - "fast-uri": "^3.0.0", + "fast-uri": "^4.0.0", "json-schema-ref-resolver": "^3.0.0", "rfdc": "^1.2.0" } }, + "node_modules/fast-json-stringify/node_modules/fast-uri": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-4.1.0.tgz", + "integrity": "sha512-ZodJ2cRiLVWGi9IgPb3mbgSqM4CD3LexCHkuv0FfBXHJI1ADfucTD06m6clO2Cy5RZYsw/SiCVl/dyrFI/SYWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", @@ -3512,9 +3095,9 @@ } }, "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.3.tgz", + "integrity": "sha512-i70LwGWUduXqzicKXWshooq+sWL1K3WUU5rKZNG/0i3a1OSoX3HqhH5WbWwTmqWfor4urUakGPiRQcleRZTwOg==", "funding": [ { "type": "github", @@ -3528,9 +3111,9 @@ "license": "BSD-3-Clause" }, "node_modules/fastify": { - "version": "5.8.5", - "resolved": "https://registry.npmjs.org/fastify/-/fastify-5.8.5.tgz", - "integrity": "sha512-Yqptv59pQzPgQUSIm87hMqHJmdkb1+GPxdE6vW6FRyVE9G86mt7rOghitiU4JHRaTyDUk9pfeKmDeu70lAwM4Q==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/fastify/-/fastify-5.10.0.tgz", + "integrity": "sha512-A9L0ziuWGQHgEEVgF3davQ9vbD93IuX+lo2IsxapQmu5b/Y/ynn9m9K5JHt9dvyJXOFc5iN0Zk5GHEOqnzhWjg==", "funding": [ { "type": "github", @@ -3549,8 +3132,8 @@ "@fastify/proxy-addr": "^5.0.0", "abstract-logging": "^2.0.1", "avvio": "^9.0.0", - "fast-json-stringify": "^6.0.0", - "find-my-way": "^9.0.0", + "fast-json-stringify": "^7.0.0", + "find-my-way": "^9.6.0", "light-my-request": "^6.0.0", "pino": "^9.14.0 || ^10.1.0", "process-warning": "^5.0.0", @@ -3569,6 +3152,15 @@ "reusify": "^1.0.4" } }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, "node_modules/fdir": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", @@ -3628,9 +3220,9 @@ } }, "node_modules/find-my-way": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-9.5.0.tgz", - "integrity": "sha512-VW2RfnmscZO5KgBY5XVyKREMW5nMZcxDy+buTOsL+zIPnBlbKm+00sgzoQzq1EVh4aALZLfKdwv6atBGcjvjrQ==", + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-9.6.0.tgz", + "integrity": "sha512-Zf4Xve4RymLl7NgaavNebZ01joJ8MfVerOG43wy7SHLO+r+K0C6d/SE0BiR7AV5V1VOCFlOP7ecdo+I4qmiHrQ==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -3717,16 +3309,16 @@ } }, "node_modules/form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" + "hasown": "^2.0.4", + "mime-types": "^2.1.35" }, "engines": { "node": ">= 6" @@ -3778,10 +3370,9 @@ "license": "MIT" }, "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "hasInstallScript": true, "license": "MIT", "optional": true, @@ -3847,17 +3438,33 @@ "node": ">= 0.4" } }, - "node_modules/get-tsconfig": { - "version": "4.13.7", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.7.tgz", - "integrity": "sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==", - "dev": true, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "license": "MIT", "dependencies": { - "resolve-pkg-maps": "^1.0.0" + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" }, "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-uri": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz", + "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", + "license": "MIT", + "dependencies": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" } }, "node_modules/github-from-package": { @@ -3909,9 +3516,9 @@ "license": "MIT" }, "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.2.tgz", + "integrity": "sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==", "dev": true, "license": "MIT", "dependencies": { @@ -3997,9 +3604,9 @@ } }, "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -4009,9 +3616,9 @@ } }, "node_modules/hono": { - "version": "4.12.9", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.9.tgz", - "integrity": "sha512-wy3T8Zm2bsEvxKZM5w21VdHDDcwVS1yUFFY6i8UobSsKfFceT7TOwhbhfKsDyx7tYQlmRM5FLpIuYvNFyjctiA==", + "version": "4.12.30", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.30.tgz", + "integrity": "sha512-emn+JoJjrN9YTpRDS5it/UI2SO9BAE37T6I3d963RxcZ81G9A4pr2SZTEiiaiKbzx+NKRg5BZ89fCL7gCJCUog==", "license": "MIT", "engines": { "node": ">=16.9.0" @@ -4075,6 +3682,41 @@ "url": "https://opencollective.com/express" } }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-proxy-agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -4108,9 +3750,9 @@ "license": "BSD-3-Clause" }, "node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.6.tgz", + "integrity": "sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==", "dev": true, "license": "MIT", "engines": { @@ -4121,7 +3763,6 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, "license": "MIT", "dependencies": { "parent-module": "^1.0.0", @@ -4157,23 +3798,29 @@ "license": "ISC" }, "node_modules/ip-address": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", - "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz", + "integrity": "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==", "license": "MIT", "engines": { "node": ">= 12" } }, "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.4.0.tgz", + "integrity": "sha512-9VGk3HGanVE6JoZXHiCpnGy5X0jYDnN4EA4lntFPj+1vIWlFhIylq2CrrCOJH9EAhc5CYhq18F2Av2tgoAPsYQ==", "license": "MIT", "engines": { - "node": ">= 0.10" + "node": ">= 10" } }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -4289,9 +3936,9 @@ } }, "node_modules/joi": { - "version": "17.13.3", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", - "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", + "version": "17.13.4", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.4.tgz", + "integrity": "sha512-1RuuER6kmt8K8I3nIWvPZKi5RQCb568ZPyY4Pwjlua+yo+63ZTmIwxLZH0heBmiKN4uxjvCiarDrjaeH84xicQ==", "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.3.0", @@ -4302,19 +3949,34 @@ } }, "node_modules/jose": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.2.tgz", - "integrity": "sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.3.tgz", + "integrity": "sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/panva" } }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, "node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", - "dev": true, + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz", + "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -4330,6 +3992,12 @@ "dev": true, "license": "MIT" }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" + }, "node_modules/json-schema-ref-resolver": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/json-schema-ref-resolver/-/json-schema-ref-resolver-3.0.0.tgz", @@ -4449,6 +4117,12 @@ ], "license": "MIT" }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -4492,11 +4166,13 @@ "license": "MIT" }, "node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "license": "ISC", + "engines": { + "node": ">=12" + } }, "node_modules/magic-string": { "version": "0.30.21", @@ -4604,13 +4280,13 @@ } }, "node_modules/minimatch": { - "version": "10.2.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", - "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^5.0.2" + "brace-expansion": "^5.0.5" }, "engines": { "node": "18 || 20 || >=22" @@ -4619,12 +4295,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw==", - "license": "MIT" - }, "node_modules/minipass": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", @@ -4635,6 +4305,12 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" + }, "node_modules/mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", @@ -4648,9 +4324,9 @@ "license": "MIT" }, "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "version": "3.3.16", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz", + "integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==", "dev": true, "funding": [ { @@ -4688,6 +4364,15 @@ "node": ">= 0.6" } }, + "node_modules/netmask": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.1.1.tgz", + "integrity": "sha512-eonl3sLUha+S1GzTPxychyhnUzKyeQkZ7jLjKrBagJgPla13F+uQ71HgpFefyHgqrjEbCPkDArxYsjY8/+gLKA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/nock": { "version": "13.5.6", "resolved": "https://registry.npmjs.org/nock/-/nock-13.5.6.tgz", @@ -4704,9 +4389,9 @@ } }, "node_modules/node-abi": { - "version": "3.89.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.89.0.tgz", - "integrity": "sha512-6u9UwL0HlAl21+agMN3YAMXcKByMqwGx+pq+P76vii5f7hTPtKDp08/H9py6DY+cfDw7kQNTGEj/rly3IgbNQA==", + "version": "3.94.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.94.0.tgz", + "integrity": "sha512-W5ZNO5KRPB5TkYmGVD9F6YqhsglXJzE6etpbmT+f6EQElhiX/UTG551cnsRGvLG3fyZEg9HwaDmNmj5nwJ4z9g==", "license": "MIT", "dependencies": { "semver": "^7.3.5" @@ -4716,26 +4401,12 @@ } }, "node_modules/node-cron": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/node-cron/-/node-cron-3.0.3.tgz", - "integrity": "sha512-dOal67//nohNgYWb+nWmg5dkFdIwDm8EpeGYMekPMrngV3637lqnX0lbUcCtgibHTz6SEz7DAIjKvKDFYCnO1A==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/node-cron/-/node-cron-4.6.0.tgz", + "integrity": "sha512-Si/bzYiKRHOB8/a99T2+SDGN582ONDMSTlJr5oCkT6GtnqPjZ2s10eoQRYkW9ZHwjVxONL+W8Fb+qR0AHMQsdg==", "license": "ISC", - "dependencies": { - "uuid": "8.3.2" - }, "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/node-whois": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/node-whois/-/node-whois-2.1.3.tgz", - "integrity": "sha512-8Ysz5s5AfSxiLKiFrFbWma3YBe+e/13uGrfJCemztdX5e2cbbJ61w28YHoVJ/u6jx1porvaBthbciSppz7UutQ==", - "deprecated": "WARNING: This project has been renamed from node-whois to whois. Install using whois instead.", - "license": "FreeBSD", - "dependencies": { - "optimist": "^0.6.1", - "underscore": "~1.5.2" + "node": ">=20" } }, "node_modules/nth-check": { @@ -4810,16 +4481,6 @@ "wrappy": "1" } }, - "node_modules/optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha512-snN4O4TkigujZphWLN0E//nQmm7790RYaE53DdL7ZYwee2D8DDo9/EyYiKUfN3rneWUjhJnueija3G9I2i0h3g==", - "license": "MIT/X11", - "dependencies": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - } - }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -4870,6 +4531,60 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/pac-proxy-agent": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", + "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", + "license": "MIT", + "dependencies": { + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.6", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-proxy-agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-resolver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", + "license": "MIT", + "dependencies": { + "degenerator": "^5.0.0", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/package-json-from-dist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", @@ -4881,7 +4596,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, "license": "MIT", "dependencies": { "callsites": "^3.0.0" @@ -4890,6 +4604,24 @@ "node": ">=6" } }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/parse5": { "version": "7.3.0", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", @@ -4984,10 +4716,17 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, "node_modules/path-to-regexp": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", - "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", "license": "MIT", "funding": { "type": "opencollective", @@ -5011,15 +4750,21 @@ "node": ">= 14.16" } }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "license": "MIT" + }, "node_modules/pg": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.20.0.tgz", - "integrity": "sha512-ldhMxz2r8fl/6QkXnBD3CR9/xg694oT6DZQ2s6c/RI28OjtSOpxnPrUCGOBJ46RCUxcWdx3p6kw/xnDHjKvaRA==", + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.22.0.tgz", + "integrity": "sha512-8wih1vVIBMxoUM2oB4soJsD9tDnDpLv4OXBJ+EJzFsvycD+lfyIreC2gGHq78f8jbLLt+bvlPTFdFZfJkOuzAA==", "license": "MIT", "dependencies": { - "pg-connection-string": "^2.12.0", - "pg-pool": "^3.13.0", - "pg-protocol": "^1.13.0", + "pg-connection-string": "^2.14.0", + "pg-pool": "^3.14.0", + "pg-protocol": "^1.15.0", "pg-types": "2.2.0", "pgpass": "1.0.5" }, @@ -5027,7 +4772,7 @@ "node": ">= 16.0.0" }, "optionalDependencies": { - "pg-cloudflare": "^1.3.0" + "pg-cloudflare": "^1.4.0" }, "peerDependencies": { "pg-native": ">=3.0.1" @@ -5039,16 +4784,16 @@ } }, "node_modules/pg-cloudflare": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.3.0.tgz", - "integrity": "sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.4.0.tgz", + "integrity": "sha512-Vo7z/6rrQYxpNRylp4Tlob2elzbh+N/MOQbxFVWCxS7oEx6jF53GTJFxK2WWpKuBRkmiin4Mt+xofFDjx09R0A==", "license": "MIT", "optional": true }, "node_modules/pg-connection-string": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.12.0.tgz", - "integrity": "sha512-U7qg+bpswf3Cs5xLzRqbXbQl85ng0mfSV/J0nnA31MCLgvEaAo7CIhmeyrmJpOr7o+zm0rXK+hNnT5l9RHkCkQ==", + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.14.0.tgz", + "integrity": "sha512-XwWDGcLRGCXAR8F/AM5bG7Q+A3Wm2s6QeEjlOKZLlH3UYcguiqCWKyWXVag5TLTIjR7oOJUY8kcADaZgWPyLeg==", "license": "MIT" }, "node_modules/pg-int8": { @@ -5061,18 +4806,18 @@ } }, "node_modules/pg-pool": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.13.0.tgz", - "integrity": "sha512-gB+R+Xud1gLFuRD/QgOIgGOBE2KCQPaPwkzBBGC9oG69pHTkhQeIuejVIk3/cnDyX39av2AxomQiyPT13WKHQA==", + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.14.0.tgz", + "integrity": "sha512-gKtPkFdQPU3DksooVLi9LsjZxrsBUZIpa+7aVx+LV5pNh0KzP4Zleud2po+ConrxbuXGBJ6Hfer6hdgpIBpBaw==", "license": "MIT", "peerDependencies": { "pg": ">=8.0" } }, "node_modules/pg-protocol": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.13.0.tgz", - "integrity": "sha512-zzdvXfS6v89r6v7OcFCHfHlyG/wvry1ALxZo4LqgUoy7W9xhBDMaqOuMiF3qEV45VqsN6rdlcehHrfDtlCPc8w==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.15.0.tgz", + "integrity": "sha512-cq9sECI5s0+uPUXjbz8ioyPJni6RzsRib0US67i5IoTZKw8fNeYlVE7u8F4dG7vEJJtc5wdD1K189lCCUwqWTQ==", "license": "MIT" }, "node_modules/pg-types": { @@ -5104,13 +4849,12 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, "license": "ISC" }, "node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", "dev": true, "license": "MIT", "engines": { @@ -5167,12 +4911,12 @@ } }, "node_modules/playwright": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", - "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", + "version": "1.61.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.61.1.tgz", + "integrity": "sha512-DWnY5o3YbLWK4GovuAVwpqL+1VwGNdUGrRr++8j8PtQQzvAVZUIMjKQ90fY689sEJZJBbZVw1rXaOKSTitkzPQ==", "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.59.1" + "playwright-core": "1.61.1" }, "bin": { "playwright": "cli.js" @@ -5185,9 +4929,9 @@ } }, "node_modules/playwright-core": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", - "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", + "version": "1.61.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.61.1.tgz", + "integrity": "sha512-h7Qlt6m4REp25qvIdvbDtVmD4LqVXfpRxhORv9L0jzETM05p4fuPJ3dKyuSXQxDSbXnmS79HAgi9589lGSpLkg==", "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" @@ -5196,24 +4940,10 @@ "node": ">=18" } }, - "node_modules/playwright/node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/postcss": { - "version": "8.5.8", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", - "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "version": "8.5.19", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.19.tgz", + "integrity": "sha512-Mz8SaolMd8nB+G13WkORcxQKHZ/NE4xXevtkJHVuG+guo9/wYKlIMTKAqGdEmYOXR2ijPjTYNHssizdaVSUNdQ==", "dev": true, "funding": [ { @@ -5231,7 +4961,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.11", + "nanoid": "^3.3.12", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -5340,6 +5070,15 @@ ], "license": "MIT" }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/propagate": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", @@ -5351,24 +5090,23 @@ } }, "node_modules/protobufjs": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", - "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.6.5.tgz", + "integrity": "sha512-/FPD0nUc9jH6rfFjji9IBqOz4pcSE3CsT1m7Ep6Mdb0LxSUMj8hgl6GomOvZzpNpAqqGaXA0P3VSrZLFzIhQrw==", "hasInstallScript": true, "license": "BSD-3-Clause", "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", + "@protobufjs/codegen": "^2.0.5", + "@protobufjs/eventemitter": "^1.1.1", + "@protobufjs/fetch": "^1.1.1", "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", "@protobufjs/path": "^1.1.2", "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", + "@protobufjs/utf8": "^1.1.1", "@types/node": ">=13.7.0", - "long": "^5.0.0" + "long": "^5.3.2" }, "engines": { "node": ">=12.0.0" @@ -5387,6 +5125,62 @@ "node": ">= 0.10" } }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-agent": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.6", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.1.0", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, "node_modules/proxy-from-env": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", @@ -5416,13 +5210,53 @@ "node": ">=6" } }, + "node_modules/puppeteer": { + "version": "24.43.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.43.1.tgz", + "integrity": "sha512-/FSOViCrqRdb1HDocpsM9Z1giA71gTQPUt3SpHGVRALKAy/rJr1fLFYZW9F23qPxqVxTHQnbh/5B5opJST3kAw==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@puppeteer/browsers": "2.13.2", + "chromium-bidi": "14.0.0", + "cosmiconfig": "^9.0.0", + "devtools-protocol": "0.0.1608973", + "puppeteer-core": "24.43.1", + "typed-query-selector": "^2.12.2" + }, + "bin": { + "puppeteer": "lib/cjs/puppeteer/node/cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/puppeteer-core": { + "version": "24.43.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.43.1.tgz", + "integrity": "sha512-T5ScUMAsmhdNbgDR41AGESYeS6V9MSgetkSnVhhW+gXvzC42VesKCn5ld87gAZDJ6vLHL9GkRvY9WtQWSnwFbw==", + "license": "Apache-2.0", + "dependencies": { + "@puppeteer/browsers": "2.13.2", + "chromium-bidi": "14.0.0", + "debug": "^4.4.3", + "devtools-protocol": "0.0.1608973", + "typed-query-selector": "^2.12.2", + "webdriver-bidi-protocol": "0.4.1", + "ws": "^8.20.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/qs": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", - "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", + "version": "6.15.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz", + "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==", "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.1.0" + "es-define-property": "^1.0.1", + "side-channel": "^1.1.1" }, "engines": { "node": ">=0.6" @@ -5438,12 +5272,16 @@ "license": "MIT" }, "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz", + "integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==", "license": "MIT", "engines": { "node": ">= 0.6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/raw-body": { @@ -5462,9 +5300,9 @@ } }, "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", - "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz", + "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -5555,22 +5393,11 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, "node_modules/ret": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/ret/-/ret-0.5.0.tgz", @@ -5597,13 +5424,13 @@ "license": "MIT" }, "node_modules/rollup": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.0.tgz", - "integrity": "sha512-yqjxruMGBQJ2gG4HtjZtAfXArHomazDHoFwFFmZZl0r7Pdo7qCIXKqKHZc8yeoMgzJJ+pO6pEEHa+V7uzWlrAQ==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.2.tgz", + "integrity": "sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "1.0.8" + "@types/estree": "1.0.9" }, "bin": { "rollup": "dist/bin/rollup" @@ -5613,31 +5440,31 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.60.0", - "@rollup/rollup-android-arm64": "4.60.0", - "@rollup/rollup-darwin-arm64": "4.60.0", - "@rollup/rollup-darwin-x64": "4.60.0", - "@rollup/rollup-freebsd-arm64": "4.60.0", - "@rollup/rollup-freebsd-x64": "4.60.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.60.0", - "@rollup/rollup-linux-arm-musleabihf": "4.60.0", - "@rollup/rollup-linux-arm64-gnu": "4.60.0", - "@rollup/rollup-linux-arm64-musl": "4.60.0", - "@rollup/rollup-linux-loong64-gnu": "4.60.0", - "@rollup/rollup-linux-loong64-musl": "4.60.0", - "@rollup/rollup-linux-ppc64-gnu": "4.60.0", - "@rollup/rollup-linux-ppc64-musl": "4.60.0", - "@rollup/rollup-linux-riscv64-gnu": "4.60.0", - "@rollup/rollup-linux-riscv64-musl": "4.60.0", - "@rollup/rollup-linux-s390x-gnu": "4.60.0", - "@rollup/rollup-linux-x64-gnu": "4.60.0", - "@rollup/rollup-linux-x64-musl": "4.60.0", - "@rollup/rollup-openbsd-x64": "4.60.0", - "@rollup/rollup-openharmony-arm64": "4.60.0", - "@rollup/rollup-win32-arm64-msvc": "4.60.0", - "@rollup/rollup-win32-ia32-msvc": "4.60.0", - "@rollup/rollup-win32-x64-gnu": "4.60.0", - "@rollup/rollup-win32-x64-msvc": "4.60.0", + "@rollup/rollup-android-arm-eabi": "4.62.2", + "@rollup/rollup-android-arm64": "4.62.2", + "@rollup/rollup-darwin-arm64": "4.62.2", + "@rollup/rollup-darwin-x64": "4.62.2", + "@rollup/rollup-freebsd-arm64": "4.62.2", + "@rollup/rollup-freebsd-x64": "4.62.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.62.2", + "@rollup/rollup-linux-arm-musleabihf": "4.62.2", + "@rollup/rollup-linux-arm64-gnu": "4.62.2", + "@rollup/rollup-linux-arm64-musl": "4.62.2", + "@rollup/rollup-linux-loong64-gnu": "4.62.2", + "@rollup/rollup-linux-loong64-musl": "4.62.2", + "@rollup/rollup-linux-ppc64-gnu": "4.62.2", + "@rollup/rollup-linux-ppc64-musl": "4.62.2", + "@rollup/rollup-linux-riscv64-gnu": "4.62.2", + "@rollup/rollup-linux-riscv64-musl": "4.62.2", + "@rollup/rollup-linux-s390x-gnu": "4.62.2", + "@rollup/rollup-linux-x64-gnu": "4.62.2", + "@rollup/rollup-linux-x64-musl": "4.62.2", + "@rollup/rollup-openbsd-x64": "4.62.2", + "@rollup/rollup-openharmony-arm64": "4.62.2", + "@rollup/rollup-win32-arm64-msvc": "4.62.2", + "@rollup/rollup-win32-ia32-msvc": "4.62.2", + "@rollup/rollup-win32-x64-gnu": "4.62.2", + "@rollup/rollup-win32-x64-msvc": "4.62.2", "fsevents": "~2.3.2" } }, @@ -5731,9 +5558,9 @@ "license": "BSD-3-Clause" }, "node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -5821,14 +5648,14 @@ } }, "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" }, @@ -5840,13 +5667,13 @@ } }, "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" + "object-inspect": "^1.13.4" }, "engines": { "node": ">= 0.4" @@ -5957,6 +5784,53 @@ "simple-concat": "^1.0.0" } }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.9.tgz", + "integrity": "sha512-LJhUYUvItdQ0LkJTmPeaEObWXAqFyfmP85x0tch/ez9cahmhlBBLbIqDFnvBnUJGagb0JbIQrkBs1wJ+yRYpEw==", + "license": "MIT", + "dependencies": { + "ip-address": "^10.1.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/socks-proxy-agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, "node_modules/sonic-boom": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz", @@ -5966,6 +5840,16 @@ "atomic-sleep": "^1.0.0" } }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -6008,6 +5892,17 @@ "dev": true, "license": "MIT" }, + "node_modules/streamx": { + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.28.0.tgz", + "integrity": "sha512-1Yowhzjf0ivGMrTIkY9hav5TxobO9qIVqUE41fiCGMGgc3CLlf4MY+9AHmZqBWgDTue0fY9zWjYFVyf6Diuobw==", + "license": "MIT", + "dependencies": { + "events-universal": "^1.0.0", + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -6148,9 +6043,9 @@ } }, "node_modules/tar-fs": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", - "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.5.tgz", + "integrity": "sha512-OboTd8mmMhZDNPV+UjQcK9yKAatXu2aJ+r1w4im1Otd4M4fl2hwvdoXUxIYHFTHWK/3y3FarBP70v3vwmGlOxw==", "license": "MIT", "dependencies": { "chownr": "^1.1.1", @@ -6175,6 +6070,15 @@ "node": ">=6" } }, + "node_modules/teex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", + "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", + "license": "MIT", + "dependencies": { + "streamx": "^2.12.5" + } + }, "node_modules/test-exclude": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.2.tgz", @@ -6190,18 +6094,33 @@ "node": ">=18" } }, + "node_modules/text-decoder": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.7.tgz", + "integrity": "sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==", + "license": "Apache-2.0", + "dependencies": { + "b4a": "^1.6.4" + } + }, "node_modules/thread-stream": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-4.0.0.tgz", - "integrity": "sha512-4iMVL6HAINXWf1ZKZjIPcz5wYaOdPhtO8ATvZ+Xqp3BTdaqtAwQkNmKORqcIo5YkQqGXq5cwfswDwMqqQNrpJA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-4.2.0.tgz", + "integrity": "sha512-e2zZ96wSChazBsbENf/Pcm/4swHt2cEKQ92rhUjkL9GCKiTDJIaTBenjE/m9DXi0QBmTMDkFDdOomUy20A1tDQ==", "license": "MIT", "dependencies": { - "real-require": "^0.2.0" + "real-require": "^1.0.0" }, "engines": { "node": ">=20" } }, + "node_modules/thread-stream/node_modules/real-require": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-1.0.0.tgz", + "integrity": "sha512-P4nbQYQfePJxRSmY+v/KINxVucm4NF3p3s7pJveMTtom52FR4YGltUQLB8idDXwDDWW+eYrWDFbuzUnjoWHF7g==", + "license": "MIT" + }, "node_modules/tinybench": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", @@ -6217,14 +6136,14 @@ "license": "MIT" }, "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", "dev": true, "license": "MIT", "dependencies": { "fdir": "^6.5.0", - "picomatch": "^4.0.3" + "picomatch": "^4.0.4" }, "engines": { "node": ">=12.0.0" @@ -6264,12 +6183,12 @@ } }, "node_modules/toad-cache": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.0.tgz", - "integrity": "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==", + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.4.tgz", + "integrity": "sha512-m1TdR/rvT7kgGJZhspNtXdsdYk0fddFpJJFlG5s+UkPFo6lkLoZ3YLOaovPYjq1R75NP5JfeTlSHaOsE09peCg==", "license": "MIT", "engines": { - "node": ">=12" + "node": ">=20" } }, "node_modules/toidentifier": { @@ -6294,15 +6213,20 @@ "typescript": ">=4.8.4" } }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, "node_modules/tsx": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", - "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.23.1.tgz", + "integrity": "sha512-GQHnkIfxyx1wYCOS/wonik5MVRZU9hi1TEZmzGZSCJB1y9YgoZ8H6itNE/u4suE+yLmOzuE4E5S4TZ/ZX2wcWQ==", "dev": true, "license": "MIT", "dependencies": { - "esbuild": "~0.27.0", - "get-tsconfig": "^4.7.5" + "esbuild": "~0.28.0" }, "bin": { "tsx": "dist/cli.mjs" @@ -6314,6 +6238,21 @@ "fsevents": "~2.3.3" } }, + "node_modules/tsx/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -6340,24 +6279,47 @@ } }, "node_modules/type-is": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", - "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", + "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", "license": "MIT", "dependencies": { - "content-type": "^1.0.5", + "content-type": "^2.0.0", "media-typer": "^1.1.0", "mime-types": "^3.0.0" }, "engines": { - "node": ">= 0.6" + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, + "node_modules/type-is/node_modules/content-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", + "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/typed-query-selector": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.2.tgz", + "integrity": "sha512-EOPFbyIub4ngnEdqi2yOcNeDLaX/0jcE1JoAXQDDMIthap7FoN795lc/SHfIq2d416VufXpM8z/lD+WRm2gfOQ==", + "license": "MIT" + }, "node_modules/typescript": { "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -6367,15 +6329,10 @@ "node": ">=14.17" } }, - "node_modules/underscore": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.5.2.tgz", - "integrity": "sha512-yejOFsRnTJs0N9CK5Apzf6maDO2djxGoLLrlZlvGs2o9ZQuhIhDL18rtFyy4FBIbOkzA6+4hDgXbgz5EvDQCXQ==" - }, "node_modules/undici": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.24.6.tgz", - "integrity": "sha512-Xi4agocCbRzt0yYMZGMA6ApD7gvtUFaxm4ZmeacWI4cZxaF6C+8I8QfofC20NAePiB/IcvZmzkJ7XPa471AEtA==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.28.0.tgz", + "integrity": "sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==", "license": "MIT", "engines": { "node": ">=20.18.1" @@ -6412,15 +6369,6 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "license": "MIT" }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -6513,74 +6461,6 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/vite/node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/vite/node_modules/@esbuild/darwin-arm64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", @@ -6598,312 +6478,6 @@ "node": ">=12" } }, - "node_modules/vite/node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/vite/node_modules/esbuild": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", @@ -6943,6 +6517,21 @@ "@esbuild/win32-x64": "0.21.5" } }, + "node_modules/vite/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/vitest": { "version": "2.1.9", "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.9.tgz", @@ -7009,6 +6598,12 @@ } } }, + "node_modules/webdriver-bidi-protocol": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.4.1.tgz", + "integrity": "sha512-ARrjNjtWRRs2w4Tk7nqrf2gBI0QXWuOmMCx2hU+1jUt6d00MjMxURrhxhGbrsoiZKJrhTSTzbIrc554iKI10qw==", + "license": "Apache-2.0" + }, "node_modules/whatwg-encoding": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", @@ -7079,15 +6674,6 @@ "node": ">=0.10.0" } }, - "node_modules/wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/wrap-ansi": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", @@ -7189,6 +6775,27 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "license": "ISC" }, + "node_modules/ws": { + "version": "8.21.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.1.tgz", + "integrity": "sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -7208,9 +6815,9 @@ } }, "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "version": "17.7.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", + "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", "license": "MIT", "dependencies": { "cliui": "^8.0.1", @@ -7275,6 +6882,16 @@ "node": ">=8" } }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -7298,12 +6915,12 @@ } }, "node_modules/zod-to-json-schema": { - "version": "3.25.1", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz", - "integrity": "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==", + "version": "3.25.2", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz", + "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==", "license": "ISC", "peerDependencies": { - "zod": "^3.25 || ^4" + "zod": "^3.25.28 || ^4" } } } diff --git a/package.json b/package.json index 7d13085..393fdab 100644 --- a/package.json +++ b/package.json @@ -53,10 +53,10 @@ "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/renefichtmueller/PeerCortex.git" + "url": "https://gitea.context-x.org/rene/PeerCortex.git" }, "bugs": { - "url": "https://github.com/renefichtmueller/PeerCortex/issues" + "url": "https://gitea.context-x.org/rene/PeerCortex/issues" }, "homepage": "https://peercortex.org", "engines": { @@ -71,18 +71,17 @@ "cheerio": "^1.0.0", "fastify": "^5.8.5", "joi": "^17.11.0", - "node-cron": "^3.0.3", - "node-whois": "^2.1.3", + "node-cron": "^4.6.0", "ollama": "^0.5.12", "pg": "^8.11.0", "playwright": "^1.40.0", + "puppeteer": "^24.42.0", "zod": "^3.24.0" }, "devDependencies": { "@playwright/test": "^1.40.0", "@types/better-sqlite3": "^7.6.12", "@types/node": "^22.10.0", - "@types/node-cron": "^3.0.0", "@types/pg": "^8.11.0", "@typescript-eslint/eslint-plugin": "^8.18.0", "@typescript-eslint/parser": "^8.18.0", diff --git a/public/index.html b/public/index.html index c006eb6..7fd2df1 100644 --- a/public/index.html +++ b/public/index.html @@ -417,6 +417,18 @@ body.dark .card{border-top-color:#e8e4dc} .ac-name { font-family: var(--body); font-size: .82rem; flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .ac-meta { font-family: var(--mono); font-size: .6rem; color: var(--muted); white-space: nowrap; } .ac-source { font-family: var(--mono); font-size: .55rem; color: var(--dim); margin-left: auto; padding-left: .4rem; white-space: nowrap; } + +.pdf-menu-item { + display: block; + padding: .45rem 1rem; + font-family: var(--mono); + font-size: .72rem; + color: var(--text); + text-decoration: none; + border-bottom: 1px solid var(--border); +} +.pdf-menu-item:last-child { border-bottom: none; } +.pdf-menu-item:hover { background: var(--purple); color: #fff !important; } @@ -439,6 +451,7 @@ body.dark .card{border-top-color:#e8e4dc} RIPE Atlas Route Views bgproutes.io + Adoption ✦ @@ -934,6 +947,7 @@ body.dark .card{border-top-color:#e8e4dc} RIPE Stat RIPE Atlas bgproutes.io + Adoption ✦ GitHub @@ -1461,6 +1475,17 @@ function renderDashboard(d) { if (n.looking_glass) ov += 'Looking Glass'; if (n.route_server) ov += 'Route Server'; ov += '⬇ Raw JSON'; + ov += ''; + ov += 'Addon only for Izzy'; + ov += ''; + ov += ''; + ov += '⬇ PDF ▾'; + ov += ''; + ov += ''; ov += ''; $('overviewContent').innerHTML = ov; @@ -2058,6 +2083,9 @@ async function doCompare() { } h += '
Compared in ' + d.meta.duration_ms + 'ms
'; + h += '
'; + h += '⬇ Download Comparison PDF'; + h += '
'; $('compareResults').innerHTML = h; } catch (e) { $('compareResults').innerHTML = '
Compare failed: ' + escHtml(e.message) + '
'; @@ -2701,6 +2729,10 @@ function renderFullCompare(d) { h += ''; h += '
Compared in ' + d.meta.duration_ms + 'ms
'; + h += '
'; + h += 'Addon only for Izzy'; + h += '⬇ Download Comparison PDF'; + h += '
'; h += ''; // end card panel.innerHTML = h; @@ -4319,6 +4351,18 @@ function renderSourceTiming(d) { } // ── Raw JSON Export ──────────────────────────────────────────── +function togglePdfMenu(e) { + e.preventDefault(); + e.stopPropagation(); + var menu = document.getElementById('pdfMenu'); + if (!menu) return; + menu.style.display = menu.style.display === 'none' ? 'block' : 'none'; +} +document.addEventListener('click', function() { + var menu = document.getElementById('pdfMenu'); + if (menu) menu.style.display = 'none'; +}); + function exportRawJson(e) { e.preventDefault(); if (!window._lastLookupData) { alert('No lookup data available.'); return; } @@ -4419,5 +4463,314 @@ document.addEventListener('keydown', e => { if (e.key === 'Escape') closeChangel
+ + + + + + diff --git a/public/index.html.bak-20260429_211603 b/public/index.html.bak-20260429_211603 new file mode 100644 index 0000000..243275e --- /dev/null +++ b/public/index.html.bak-20260429_211603 @@ -0,0 +1,4421 @@ + + + + + +PeerCortex — The ASN News + + + + + + + + + + + +
+
+
+ +
The ASN News
+
+
The ASN News
peercortex.org · v0.6.9 · routing intelligence
GitHub · Changelog · Blog · ☕ Buy me a coffee
+
+
+ +
+
+ + +
+
+ ASN / Prefix / Org +
+ + +
+ +
+
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/public/design-draft-editorial.html b/public/public/design-draft-editorial.html new file mode 100644 index 0000000..b8aede4 --- /dev/null +++ b/public/public/design-draft-editorial.html @@ -0,0 +1,1129 @@ + + + + + +PeerCortex — Craft Editorial Draft + + + + + + + + +
+
+
+
PeerCortexβ
+
+
+ Network Intelligence
+ peercortex.org +
+
+
+ +
+
+ + +
+
+ ASN / Prefix / Org + + +
+
+ + +
+ + +
+ + +
+ +
+ ASNAS15169 + · + ARIN + · + US +
+

Google LLC

+ +
+

+ Google LLC operates one of the largest and most interconnected autonomous + systems on the internet, maintaining a global PoP footprint across six + continents. Its routing policy is broadly open, with full RPKI coverage + and a mature ASPA deployment. The network scores in the top 2% of all + tracked ASNs by data quality. +

+
+ + +
+
+
97
+
Health Score
+
13/13 checks pass
+
+
+
4,682
+
IPv4 Prefixes
+
announced routes
+
+
+
1,104
+
IPv6 Prefixes
+
announced routes
+
+
+
426
+
Peers
+
direct sessions
+
+
+ + +
+
+ Security & Policy +
+
+
+ +
+
+
+
RPKI Origin Validation
+
VALID
+
4,682 of 4,682 prefixes signed
+
+
+ +
+
+
+
ASPA
+
DEPLOYED
+
RFC 9582 — provider set complete
+
+
+ +
+
+
+
IRR Consistency
+
CONSISTENT
+
ARIN DB matches announced routes
+
+
+ +
+
+
+
Route Leak Guard
+
PARTIAL
+
2 peers without max-prefix
+
+
+ +
+
+ + +
+ Compare with + + + +
+ + +
+
+ IPv4 Announced Prefixes + showing 8 of 4,682 +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PrefixDescriptionRPKIIRRRoutes
8.8.8.0/24Google DNS AnycastVALID✓ ARIN12
8.8.4.0/24Google DNS AnycastVALID✓ ARIN11
8.34.208.0/20GOOGLE-CLOUD-EMEAVALID✓ ARIN9
34.64.0.0/10Google Cloud GFEVALID✓ ARIN18
66.102.0.0/20GOOGLE-FRONTENDVALID✓ ARIN7
74.125.0.0/16GOOGLE-CORP-COREVALID✓ ARIN24
142.250.0.0/15GOOGLE-EDGE-NODESUNKNOWN✓ ARIN31
GOOGLE-PRODVALID✓ ARIN19
+
+ Show all 4,682 prefixes → +
+
+ + +
+
+ Health Report + 13 of 13 checks passed +
+
+
+
+
+
+
RPKI fully deployed
+
100% of prefixes have valid ROAs
+
+
+
+
+
+
IRR consistent
+
AS-SET GOOGLE matches route objects
+
+
+
+
+
+
No RPKI invalids
+
0 invalid prefixes detected
+
+
+
+
+
+
ASPA record present
+
RFC 9582 provider authorisation
+
+
+
+
+
+
No bogons announced
+
No RFC 1918 / special-use prefixes
+
+
+
+
+
+
No long-lived hijacks
+
No overlapping prefix conflicts
+
+
+
+
+
+
Prefix not too specific
+
No /25+ IPv4 leaks detected
+
+
+
+
+
+
BGP community usage
+
Informational communities present
+
+
+
+
+
+
IPv6 deployed
+
1,104 IPv6 prefixes announced
+
+
+
+
+
+
Route diversity
+
Multiple upstream paths observed
+
+
+
+
+
+
AS path length normal
+
Avg prepend length ≤ 3
+
+
+
+
+
+
PeeringDB present
+
Record up to date
+
+
+
+
+
+
NOC contact reachable
+
Email + phone verified
+
+
+ +
+
+ + +
+
+ Upstream / Transit + top 6 by path frequency +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ASNOrganisationRelationshipPath frequency
Vodafone Group PLCTRANSIT34%
Cogent CommunicationsTRANSIT28%
GTT CommunicationsPEER17%
Sprint / T-MobilePEER12%
TATA CommunicationsTRANSIT6%
Lumen TechnologiesPEER3%
+
+ +
+ + + + +
+ + + + + + diff --git a/public/public/index-classic.html b/public/public/index-classic.html new file mode 100644 index 0000000..64d2355 --- /dev/null +++ b/public/public/index-classic.html @@ -0,0 +1,2898 @@ + + + + + +PeerCortex - Network Intelligence Dashboard + + + + + + + + + + +
+
+ + +
+
+ + +
+ +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/public/index-editorial.html b/public/public/index-editorial.html new file mode 100644 index 0000000..8816b12 --- /dev/null +++ b/public/public/index-editorial.html @@ -0,0 +1,3332 @@ + + + + + +PeerCortex — The ASN News + + + + + + + + + + +
+
+
+ +
The ASN News
+
+
The ASN News
v2.peercortex.org · routing intelligence
+
+
+ +
+
+ + +
+
+ ASN / Prefix / Org + + +
+
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/public/index.html b/public/public/index.html new file mode 100644 index 0000000..b871288 --- /dev/null +++ b/public/public/index.html @@ -0,0 +1,4126 @@ + + + + + +PeerCortex — The ASN News + + + + + + + + + + + +
+
+
+ +
The ASN News
+
+
The ASN News
peercortex.org · v0.6.9 · routing intelligence
+
+
+ +
+
+ + +
+
+ ASN / Prefix / Org +
+ + +
+ +
+
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/public/index.html.bak b/public/public/index.html.bak new file mode 100644 index 0000000..80b53a7 --- /dev/null +++ b/public/public/index.html.bak @@ -0,0 +1,2357 @@ + + + + + +PeerCortex - Network Intelligence Dashboard + + + + + + + + +
+
+ + +
+
+ + +
+ +
+
+ + +
+ + + + + + + + + + + + + + + + diff --git a/public/public/lia.html b/public/public/lia.html new file mode 100644 index 0000000..64d49ab --- /dev/null +++ b/public/public/lia.html @@ -0,0 +1,488 @@ + + + + + +Lia's Paradise — RIPE Atlas Coverage Explorer + + + +
+

Lia's Paradise

+

RIPE Atlas Coverage Explorer — Networks without Atlas Probes, Anchors & Software Probes

+
For Lia, who makes the Internet measurable — one probe at a time
+
+ +
+ +
+ + + + + + +
+ +
+ +
+
+
+
FILE LOOKUP
+
Upload a file with ASNs or company names — we'll check probe coverage for each
+
+ + +
+ +
+
+ +
+ +
+ +
+
Loading Atlas coverage data across all RIRs... This may take a moment.
+
+ + + + + + diff --git a/public/public/shell.html b/public/public/shell.html new file mode 100644 index 0000000..79310fc --- /dev/null +++ b/public/public/shell.html @@ -0,0 +1,420 @@ + + + + + +PeerCortex Shell — Feedback Admin + + + + +
+
+ + + + shell.peercortex.org — admin terminal +
+
+
+ shell:~$ + +
+
+ + + + diff --git a/scripts/refresh-peeringdb.sh b/scripts/refresh-peeringdb.sh new file mode 100755 index 0000000..13bd1e6 --- /dev/null +++ b/scripts/refresh-peeringdb.sh @@ -0,0 +1,11 @@ +#!/bin/bash +# Refresh PeeringDB SQLite mirror daily + +LOG=/var/log/peercortex/peeringdb-refresh.log +mkdir -p /var/log/peercortex +exec >> $LOG 2>&1 + +echo "[$(date +%Y-%m-%dT%H:%M:%S)] Starting PeeringDB sync..." +cd /opt/peeringdb-data +peeringdb sync -q +echo "[$(date +%Y-%m-%dT%H:%M:%S)] Sync complete. File: $(du -sh peeringdb.sqlite3 | cut -f1)" diff --git a/scripts/tunnel-cleanup.sh b/scripts/tunnel-cleanup.sh new file mode 100755 index 0000000..7771426 --- /dev/null +++ b/scripts/tunnel-cleanup.sh @@ -0,0 +1,29 @@ +#!/bin/bash +# Auto-heal Cloudflare tunnel: clean stale connectors from foreign IPs +TUNNEL=3262c64b-51d5-479f-ad26-a9925b705bd3 +LOG=/var/log/peercortex/tunnel-cleanup.log + +mkdir -p /var/log/peercortex + +# Restart cloudflared if not running +if ! systemctl is-active --quiet cloudflared; then + echo "[$(date +%Y-%m-%dT%H:%M:%S)] cloudflared not running — starting" >> "$LOG" + systemctl start cloudflared + sleep 5 +fi + +MY_IP=$(curl -s --max-time 5 https://ifconfig.me 2>/dev/null) +[ -z "$MY_IP" ] && exit 0 + +# Connector rows start with a UUID (36 chars: 8-4-4-4-12) +# Column 5 in connector rows = ORIGIN IP +STALE=$(cloudflared tunnel info "$TUNNEL" 2>/dev/null | \ + grep -E '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}' | \ + awk -v myip="$MY_IP" '$5 != myip {print $5}') + +if [ -n "$STALE" ]; then + echo "[$(date +%Y-%m-%dT%H:%M:%S)] Stale connectors from $STALE — cleaning" >> "$LOG" + cloudflared tunnel cleanup "$TUNNEL" >> "$LOG" 2>&1 + systemctl restart cloudflared + echo "[$(date +%Y-%m-%dT%H:%M:%S)] Done" >> "$LOG" +fi diff --git a/server.js b/server.js index 1f9437b..3599053 100644 --- a/server.js +++ b/server.js @@ -7,6 +7,51 @@ const crypto = require("crypto"); const localDb = require('./local-db-client'); console.log('[PeerCortex] Local DB client initialized'); +// ── PDF Export: lazy puppeteer loader ──────────────────────────────────────── +let _puppeteerBrowser = null; +let _puppeteerLoading = false; +async function getPuppeteerBrowser() { + if (_puppeteerBrowser) return _puppeteerBrowser; + if (_puppeteerLoading) { + // Wait for in-flight launch + await new Promise(r => setTimeout(r, 2000)); + return _puppeteerBrowser; + } + _puppeteerLoading = true; + try { + const puppeteer = require("puppeteer"); + _puppeteerBrowser = await puppeteer.launch({ + headless: true, + args: ["--no-sandbox", "--disable-setuid-sandbox", "--disable-dev-shm-usage", "--disable-gpu"] + }); + console.log("[PDF] Puppeteer browser launched"); + _puppeteerBrowser.on("disconnected", () => { + console.log("[PDF] Browser disconnected — will relaunch on next request"); + _puppeteerBrowser = null; + _puppeteerLoading = false; + }); + } catch (e) { + console.error("[PDF] Puppeteer unavailable:", e.message); + _puppeteerBrowser = null; + } + _puppeteerLoading = false; + return _puppeteerBrowser; +} + +// PDF response cache: key = "asn:format" or "compare:asn1:asn2" → {buf, ts} +const pdfCache = new Map(); +const PDF_CACHE_TTL = 5 * 60 * 1000; // 5 minutes + +function pdfCacheGet(key) { + const e = pdfCache.get(key); + if (e && (Date.now() - e.ts) < PDF_CACHE_TTL) return e.buf; + return null; +} +function pdfCacheSet(key, buf) { + if (pdfCache.size > 100) pdfCache.delete(pdfCache.keys().next().value); + pdfCache.set(key, { buf, ts: Date.now() }); +} + // Load .env file require('./src/backend/config'); @@ -224,49 +269,540 @@ function trackVisitor(req) { // Migrated to src/features/bgp-communities/bgp-community-db.ts // ── Hijack Monitoring ────────────────────────────────────────── -const HIJACK_SUBS_FILE = '/opt/peercortex-app/hijack-subs.json'; -const HIJACK_ALERTS_FILE = '/opt/peercortex-app/hijack-alerts.json'; +// ============================================================ +// FEATURE 1: BGP Hijack Alerting + Webhooks +// ============================================================ +const DATA_DIR = process.env.DATA_DIR || (fs.existsSync('/opt/peercortex-app') ? '/opt/peercortex-app' : __dirname); +const HIJACK_SUBS_FILE = DATA_DIR + '/hijack-subs.json'; +const HIJACK_ALERTS_FILE = DATA_DIR + '/hijack-alerts.json'; +const WEBHOOK_SUBS_FILE = DATA_DIR + '/webhook-subs.json'; +const ASPA_ADOPTION_FILE = DATA_DIR + '/aspa-adoption-history.json'; -function loadHijackSubs() { try { return JSON.parse(fs.readFileSync(HIJACK_SUBS_FILE,'utf8')); } catch(_){ return []; } } -function loadHijackAlerts() { try { return JSON.parse(fs.readFileSync(HIJACK_ALERTS_FILE,'utf8')); } catch(_){ return []; } } +function loadHijackSubs() { try { return JSON.parse(fs.readFileSync(HIJACK_SUBS_FILE,'utf8')); } catch(_){ return []; } } +function loadHijackAlerts() { try { return JSON.parse(fs.readFileSync(HIJACK_ALERTS_FILE,'utf8')); } catch(_){ return []; } } +function loadWebhookSubs() { try { return JSON.parse(fs.readFileSync(WEBHOOK_SUBS_FILE,'utf8')); } catch(_){ return []; } } +function saveWebhookSubs(s) { try { fs.writeFileSync(WEBHOOK_SUBS_FILE, JSON.stringify(s, null, 2)); } catch(_){} } +function saveHijackAlerts(a) { try { fs.writeFileSync(HIJACK_ALERTS_FILE, JSON.stringify(a.slice(-1000), null, 2)); } catch(_){} } +function saveHijackSubs(s) { try { fs.writeFileSync(HIJACK_SUBS_FILE, JSON.stringify(s, null, 2)); } catch(_){} } +// Generate HMAC-SHA256 signature for webhook payloads +function webhookSignature(secret, payload) { + return 'sha256=' + crypto.createHmac('sha256', secret).update(payload).digest('hex'); +} + +// Classify hijack severity +function classifyHijackSeverity(unexpected, missing, rpkiInvalid) { + if (rpkiInvalid > 0 || unexpected.length >= 5) return 'CRITICAL'; + if (unexpected.length >= 2 || missing.length >= 3) return 'HIGH'; + if (unexpected.length >= 1 || missing.length >= 1) return 'MEDIUM'; + return 'LOW'; +} + +// Deliver webhook with exponential backoff (max 5 retries) +async function deliverWebhook(sub, payload, attempt) { + attempt = attempt || 1; + const payloadStr = JSON.stringify(payload); + const sig = webhookSignature(sub.secret, payloadStr); + return new Promise((resolve) => { + try { + const parsed = new URL(sub.endpoint_url); + const lib = parsed.protocol === 'https:' ? https : http; + const options = { + hostname: parsed.hostname, + port: parsed.port || (parsed.protocol === 'https:' ? 443 : 80), + path: parsed.pathname + parsed.search, + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Content-Length': Buffer.byteLength(payloadStr), + 'X-PeerCortex-Signature': sig, + 'X-PeerCortex-Event': 'hijack_detected', + 'User-Agent': 'PeerCortex-Webhook/1.0' + }, + timeout: 10000 + }; + const req = lib.request(options, (res) => { + let body = ''; + res.on('data', c => body += c); + res.on('end', () => { + if (res.statusCode >= 200 && res.statusCode < 300) { + resolve({ ok: true, status: res.statusCode }); + } else if (attempt < 5) { + const delay = Math.pow(2, attempt) * 1000; + setTimeout(() => deliverWebhook(sub, payload, attempt + 1).then(resolve), delay); + } else { + resolve({ ok: false, status: res.statusCode, error: 'max_retries' }); + } + }); + }); + req.on('error', () => { + if (attempt < 5) { + const delay = Math.pow(2, attempt) * 1000; + setTimeout(() => deliverWebhook(sub, payload, attempt + 1).then(resolve), delay); + } else { + resolve({ ok: false, error: 'connection_failed' }); + } + }); + req.on('timeout', () => { req.destroy(); }); + req.write(payloadStr); + req.end(); + } catch(e) { + resolve({ ok: false, error: e.message }); + } + }); +} + +// Fire webhooks for all subscribers of an ASN when hijack detected +async function notifyWebhooks(asn, alert) { + const subs = loadWebhookSubs().filter(s => String(s.asn) === String(asn) && s.active !== false); + for (const sub of subs) { + const payload = { + event: 'hijack_detected', + asn: asn, + alert: alert, + timestamp: new Date().toISOString(), + source: 'PeerCortex BGP Monitor' + }; + deliverWebhook(sub, payload, 1).then(result => { + if (!result.ok) console.warn(`[WEBHOOK] Delivery failed for AS${asn} → ${sub.endpoint_url}: ${result.error || result.status}`); + }); + } +} + +// Returns null (not []) when the prefix lookup itself failed -- distinct from a +// genuine zero-prefix result. runHijackCheck must not treat these the same way: +// setting an empty baseline from a transient failure would permanently disable +// hijack detection for that subscription (baseline.size stays 0 forever after, +// so "unexpected" never fires again -- see the baseline.size > 0 guard below). async function checkHijacksForAsn(asn) { try { const data = await localDb.getRipeStatAnnouncedPrefixes(asn); + if (data && data.status === 'error') return null; const prefixes = (data && data.data && data.data.prefixes || []).map(p => p.prefix); return prefixes; - } catch (_) { return []; } + } catch (_) { return null; } } async function runHijackCheck() { const subs = loadHijackSubs(); if (!subs.length) return; const alerts = loadHijackAlerts(); + let changed = false; for (const sub of subs) { const current = await checkHijacksForAsn(sub.asn); + if (current === null) { + // Lookup failed this cycle -- skip both anomaly detection and baseline + // initialization; retry on the next 30-minute run rather than locking in + // an empty baseline that would silently disable detection forever. + continue; + } const baseline = new Set(sub.prefixes || []); const unexpected = current.filter(p => baseline.size > 0 && !baseline.has(p)); const missing = [...baseline].filter(p => !current.includes(p)); if (unexpected.length || missing.length) { - const alert = { - asn: sub.asn, ts: new Date().toISOString(), - unexpected, missing, - msg: `Possible hijack detected for AS${sub.asn}: ${unexpected.length} unexpected, ${missing.length} missing prefixes` - }; - alerts.push(alert); - try { fs.writeFileSync(HIJACK_ALERTS_FILE, JSON.stringify(alerts.slice(-500), null, 2)); } catch(_) {} + // Dedup: only alert if no alert in last 6 hours for this ASN + const sixHoursAgo = Date.now() - 6 * 60 * 60 * 1000; + const recentAlert = alerts.find(a => a.asn === sub.asn && new Date(a.ts).getTime() > sixHoursAgo); + if (!recentAlert) { + const severity = classifyHijackSeverity(unexpected, missing, 0); + const alert = { + id: crypto.randomBytes(8).toString('hex'), + asn: sub.asn, ts: new Date().toISOString(), + severity, unexpected, missing, resolved: false, + msg: `BGP anomaly for AS${sub.asn}: ${unexpected.length} unexpected prefix(es), ${missing.length} missing` + }; + alerts.push(alert); + changed = true; + notifyWebhooks(sub.asn, alert); + } } - // Update baseline with current prefixes if no baseline set + // Set baseline on first monitoring if (!sub.prefixes || !sub.prefixes.length) { sub.prefixes = current; - try { fs.writeFileSync(HIJACK_SUBS_FILE, JSON.stringify(subs, null, 2)); } catch(_) {} + changed = true; } } + if (changed) { saveHijackAlerts(alerts); saveHijackSubs(subs); } } // Run hijack check every 30 minutes setInterval(runHijackCheck, 30 * 60 * 1000); +// ============================================================ +// FEATURE 3: ASPA Adoption Tracker +// ============================================================ +/** + * Load persisted ASPA adoption history from disk. + * Returns array of snapshot objects (up to 365 entries). + */ +function loadAspaAdoptionHistory() { + try { + const raw = JSON.parse(fs.readFileSync(ASPA_ADOPTION_FILE, 'utf8')); + return Array.isArray(raw) ? raw : []; + } catch(_) { return []; } +} + +/** + * Save ASPA adoption history to disk (keep last 365 entries). + */ +function saveAspaAdoptionHistory(history) { + try { + const trimmed = history.slice(-365); + fs.writeFileSync(ASPA_ADOPTION_FILE, JSON.stringify(trimmed, null, 2), 'utf8'); + } catch(e) { + console.error('[ASPA-ADOPT] Save failed:', e.message); + } +} + +/** In-memory adoption history (persisted on each new snapshot) */ +let aspaAdoptionDailyHistory = loadAspaAdoptionHistory(); + +/** + * Take a new adoption snapshot and persist it. + * Called whenever the RPKI feed is refreshed. + * @param {number} aspaCount — total ASPA objects in rpkiAspaMap + * @param {number} roaCount — total ROAs in roaStore + */ +function recordAspaAdoptionSnapshot(aspaCount, roaCount) { + const now = new Date(); + const date = now.toISOString().slice(0, 10); // "YYYY-MM-DD" + + // Compute how many Atlas-visible ASNs have ASPA + let atlasTotal = 0; + let atlasWithAspa = 0; + if (typeof atlasProbeCache !== 'undefined' && atlasProbeCache?.asns_with_probes) { + atlasTotal = atlasProbeCache.asns_with_probes.length; + // rpkiAspaMap is keyed by integer ASN + atlasWithAspa = atlasProbeCache.asns_with_probes.filter(a => rpkiAspaMap.has(Number(a))).length; + } + + const coveragePct = atlasTotal > 0 + ? Math.round((atlasWithAspa / atlasTotal) * 10000) / 100 // 2 decimal places + : 0; + + // Compute delta from previous snapshot + const prev = aspaAdoptionDailyHistory[aspaAdoptionDailyHistory.length - 1]; + const delta = prev ? aspaCount - prev.aspa_objects : 0; + + const snapshot = { + date, + ts: now.getTime(), + aspa_objects: aspaCount, + roa_count: roaCount, + atlas_asns_total: atlasTotal, + atlas_asns_with_aspa: atlasWithAspa, + coverage_pct_atlas: coveragePct, + aspa_delta: delta, + method: 'rpki_cloudflare_feed', + }; + + // Only store one snapshot per date (overwrite if same day) + const existingIdx = aspaAdoptionDailyHistory.findIndex(s => s.date === date); + if (existingIdx >= 0) { + aspaAdoptionDailyHistory[existingIdx] = snapshot; + } else { + aspaAdoptionDailyHistory.push(snapshot); + } + saveAspaAdoptionHistory(aspaAdoptionDailyHistory); + console.log(`[ASPA-ADOPT] Snapshot ${date}: ${aspaCount} objects, ${coveragePct}% Atlas coverage (${atlasWithAspa}/${atlasTotal})`); + return snapshot; +} + +/** + * Get adoption trend for a given period string ('7d', '30d', '90d', '1y'). + */ +function getAdoptionTrend(period) { + const days = period === '7d' ? 7 : period === '30d' ? 30 : period === '90d' ? 90 : 365; + const cutoff = Date.now() - days * 24 * 60 * 60 * 1000; + return aspaAdoptionDailyHistory.filter(s => s.ts >= cutoff); +} + +/** + * Build the ASPA adoption dashboard HTML. + */ +function buildAspaAdoptionDashboard() { + const latest = aspaAdoptionDailyHistory[aspaAdoptionDailyHistory.length - 1]; + const trend30 = getAdoptionTrend('30d'); + const trend7 = getAdoptionTrend('7d'); + + // Forecast: simple linear regression over last 30 days + function linearForecast(data, daysAhead) { + if (data.length < 2) return null; + const n = data.length; + const xs = data.map((_, i) => i); + const ys = data.map(d => d.coverage_pct_atlas); + const xMean = xs.reduce((a, b) => a + b, 0) / n; + const yMean = ys.reduce((a, b) => a + b, 0) / n; + const num = xs.reduce((s, x, i) => s + (x - xMean) * (ys[i] - yMean), 0); + const den = xs.reduce((s, x) => s + (x - xMean) ** 2, 0); + if (den === 0) return yMean; + const slope = num / den; + return Math.max(0, Math.min(100, yMean + slope * (n - 1 + daysAhead))); + } + + const forecast90d = linearForecast(trend30, 90); + const change7d = trend7.length >= 2 + ? (trend7[trend7.length-1].aspa_objects - trend7[0].aspa_objects) + : 0; + const trendLabels = trend30.map(d => d.date); + const trendValues = trend30.map(d => d.coverage_pct_atlas); + const asnValues = trend30.map(d => d.aspa_objects); + + const coverageNow = latest?.coverage_pct_atlas ?? 0; + const aspaNow = latest?.aspa_objects ?? 0; + const atlasTotal = latest?.atlas_asns_total ?? 0; + + return ` + + + + + ASPA Adoption Tracker · PeerCortex + + + + + +
+

ASPA Adoption Tracker

+

Global ASPA deployment trends · Powered by RPKI Cloudflare feed · Updated every ~4 hours

+ +
+
+
Atlas Coverage
+
${coverageNow.toFixed(1)}%
+
of Atlas-visible ASNs
+
+
+
ASPA Objects
+
${aspaNow.toLocaleString()}
+
total in RPKI
+
+
+
Atlas ASNs
+
${atlasTotal.toLocaleString()}
+
sampled denominator
+
+
+
7-Day Delta
+
${change7d > 0 ? '+' : ''}${change7d}
+
new ASPA objects
+
+
+
Data Points
+
${aspaAdoptionDailyHistory.length}
+
history snapshots
+
+
+ + + +
+
+

Atlas Coverage % (last 30 days)

+ +
+
+
90-Day Forecast
+
${forecast90d !== null ? forecast90d.toFixed(1) + '%' : '—'}
+
linear projection from 30-day trend
+
+ Based on ${trend30.length} data points.
+ Current: ${coverageNow.toFixed(1)}% +
+
+
+ +
+

Total ASPA Objects in RPKI (last 30 days)

+ +
+ +
+ Last snapshot: ${latest?.date ?? 'none'} · Denominator: ${atlasTotal.toLocaleString()} Atlas ASNs · + JSON API +
+
+ + + +`; +} + +// ============================================================ +// FEATURE 4: IPv6 Adoption per RIR +// ============================================================ + +// In-memory cache: { data, ts } +let ipv6StatsCache = null; +const IPV6_STATS_TTL = 24 * 60 * 60 * 1000; // 24h + +const RIR_DELEGATION_URLS = { + RIPE: 'https://ftp.ripe.net/pub/stats/ripencc/delegated-ripencc-extended-latest', + ARIN: 'https://ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest', + APNIC: 'https://ftp.apnic.net/stats/apnic/delegated-apnic-extended-latest', + AFRINIC: 'https://ftp.afrinic.net/stats/afrinic/delegated-afrinic-extended-latest', + LACNIC: 'https://ftp.lacnic.net/pub/stats/lacnic/delegated-lacnic-extended-latest', +}; + +/** + * Fetch and parse one RIR delegation file. + * Returns { ipv4, ipv6, asns } count objects. + */ +function fetchRirDelegation(rir, url) { + return new Promise((resolve) => { + const result = { rir, ipv4: 0, ipv6: 0, asns: 0, ipv4_countries: new Set(), ipv6_countries: new Set() }; + const mod = url.startsWith('https') ? require('https') : require('http'); + const req = mod.get(url, { headers: { 'User-Agent': 'PeerCortex/1.0 (+https://peercortex.org)' }, timeout: 20000 }, res => { + if (res.statusCode !== 200) { resolve(result); return; } + let buf = ''; + res.on('data', d => { buf += d; }); + res.on('end', () => { + for (const line of buf.split('\n')) { + if (line.startsWith('#') || line.startsWith(rir.toLowerCase() + '|*') || !line.includes('|')) continue; + const parts = line.split('|'); + if (parts.length < 7) continue; + const type = parts[2]; + const status = parts[6].trim(); + const cc = parts[1]; + if (status !== 'allocated' && status !== 'assigned') continue; + if (type === 'ipv4') { result.ipv4++; result.ipv4_countries.add(cc); } + else if (type === 'ipv6') { result.ipv6++; result.ipv6_countries.add(cc); } + else if (type === 'asn') { result.asns++; } + } + resolve(result); + }); + }); + req.on('error', () => resolve(result)); + req.on('timeout', () => { req.destroy(); resolve(result); }); + }); +} + +/** + * Fetch all 5 RIR delegation files and aggregate IPv6 stats. + * Cached for 24 hours. + */ +async function fetchIpv6AdoptionStats(force) { + if (!force && ipv6StatsCache && (Date.now() - ipv6StatsCache.ts) < IPV6_STATS_TTL) { + return ipv6StatsCache.data; + } + console.log('[IPv6] Fetching RIR delegation stats...'); + const results = await Promise.all( + Object.entries(RIR_DELEGATION_URLS).map(([rir, url]) => fetchRirDelegation(rir, url)) + ); + const rirs = results.map(r => ({ + rir: r.rir, + ipv4_records: r.ipv4, + ipv6_records: r.ipv6, + asn_records: r.asns, + ipv6_pct: (r.ipv4 + r.ipv6) > 0 + ? Math.round((r.ipv6 / (r.ipv4 + r.ipv6)) * 10000) / 100 + : 0, + countries_with_ipv6: r.ipv6_countries.size, + countries_with_ipv4: r.ipv4_countries.size, + })); + const total_ipv4 = rirs.reduce((s, r) => s + r.ipv4_records, 0); + const total_ipv6 = rirs.reduce((s, r) => s + r.ipv6_records, 0); + const data = { + fetched_at: new Date().toISOString(), + global_ipv6_pct: total_ipv4 + total_ipv6 > 0 + ? Math.round((total_ipv6 / (total_ipv4 + total_ipv6)) * 10000) / 100 + : 0, + total_ipv4_records: total_ipv4, + total_ipv6_records: total_ipv6, + by_rir: rirs, + }; + ipv6StatsCache = { data, ts: Date.now() }; + console.log(`[IPv6] Done. Global IPv6%: ${data.global_ipv6_pct}% across ${rirs.length} RIRs`); + return data; +} + +// Pre-fetch on startup (non-blocking) +fetchIpv6AdoptionStats().catch(() => {}); const UA = "PeerCortex/0.5.0 (+https://peercortex.org)"; @@ -295,6 +831,686 @@ const CITY_COORDS = { "scotland": [55.9533, -3.1883], "edinburgh": [55.9533, -3.1883], }; +// ============================================================ +// FEATURE 2: PDF Export — template generators + puppeteer renderer +// ============================================================ + +/** + * Generate a health score ring SVG (inline, no external deps) + * @param {number} score 0–100 + * @param {string} color CSS color + */ +function scoreRingSvg(score, color) { + const r = 54, cx = 64, cy = 64; + const circ = 2 * Math.PI * r; + const fill = circ * (1 - score / 100); + const clr = color || (score >= 80 ? '#22c55e' : score >= 60 ? '#f59e0b' : '#ef4444'); + return ` + + + ${score} + /100 + `; +} + +/** Shared CSS for all PDF templates */ +function pdfBaseCSS() { + return ` + *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } + body { font-family: -apple-system, 'Segoe UI', system-ui, Arial, sans-serif; color: #1e1b4b; background: #fff; font-size: 11pt; line-height: 1.5; } + @page { size: A4; margin: 18mm 16mm; } + .page { page-break-after: always; min-height: 247mm; padding: 0; } + .page:last-child { page-break-after: avoid; } + h1 { font-size: 22pt; font-weight: 700; color: #4f46e5; } + h2 { font-size: 14pt; font-weight: 600; color: #3730a3; margin-top: 1.4em; margin-bottom: 0.5em; border-bottom: 2px solid #e0e7ff; padding-bottom: 4px; } + h3 { font-size: 11pt; font-weight: 600; color: #4338ca; margin-top: 1em; margin-bottom: 0.3em; } + p { margin-bottom: 0.5em; } + table { width: 100%; border-collapse: collapse; margin: 0.6em 0; font-size: 9.5pt; } + th { background: #4f46e5; color: #fff; padding: 6px 10px; text-align: left; font-weight: 600; } + td { padding: 5px 10px; border-bottom: 1px solid #e0e7ff; vertical-align: top; } + tr:nth-child(even) td { background: #f5f3ff; } + .badge { display: inline-block; padding: 2px 8px; border-radius: 999px; font-size: 8.5pt; font-weight: 600; } + .badge-green { background: #dcfce7; color: #166534; } + .badge-red { background: #fee2e2; color: #991b1b; } + .badge-yellow{ background: #fef9c3; color: #854d0e; } + .badge-gray { background: #f3f4f6; color: #374151; } + .badge-indigo{ background: #e0e7ff; color: #3730a3; } + .cover { display: flex; flex-direction: column; justify-content: center; align-items: flex-start; padding: 40px 0 20px; min-height: 247mm; } + .cover-logo { font-size: 11pt; font-weight: 700; color: #4f46e5; letter-spacing: -0.5px; margin-bottom: 60px; display: flex; align-items: center; gap: 8px; } + .cover-logo span { color: #1e1b4b; } + .cover-asn { font-size: 11pt; font-weight: 500; color: #6b7280; margin-bottom: 6px; } + .cover-name { font-size: 28pt; font-weight: 700; color: #1e1b4b; margin-bottom: 8px; line-height: 1.2; } + .cover-sub { font-size: 13pt; color: #4f46e5; font-weight: 500; margin-bottom: 30px; } + .cover-meta { font-size: 9pt; color: #9ca3af; margin-top: auto; padding-top: 20px; border-top: 1px solid #e0e7ff; width: 100%; } + .cover-stripe { position: fixed; right: -8mm; top: 0; width: 28mm; height: 100vh; background: linear-gradient(180deg, #4f46e5 0%, #6366f1 50%, #818cf8 100%); opacity: 0.08; pointer-events: none; } + .metric-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin: 1em 0; } + .metric-card { background: #f5f3ff; border: 1px solid #e0e7ff; border-radius: 8px; padding: 12px 14px; } + .metric-card .label { font-size: 8pt; color: #6b7280; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 4px; } + .metric-card .value { font-size: 18pt; font-weight: 700; color: #4f46e5; } + .metric-card .unit { font-size: 8pt; color: #9ca3af; } + .score-row { display: flex; align-items: center; gap: 20px; margin: 0.8em 0; } + .check-list { list-style: none; padding: 0; } + .check-list li { display: flex; align-items: flex-start; gap: 8px; padding: 5px 0; border-bottom: 1px solid #f3f4f6; font-size: 9.5pt; } + .check-icon { width: 16px; height: 16px; flex-shrink: 0; margin-top: 2px; } + .check-pass { color: #16a34a; } + .check-fail { color: #dc2626; } + .check-warn { color: #d97706; } + .section-intro { font-size: 9.5pt; color: #6b7280; margin-bottom: 1em; font-style: italic; } + footer { position: fixed; bottom: 0; left: 0; right: 0; font-size: 8pt; color: #9ca3af; padding: 6px 16mm; border-top: 1px solid #e0e7ff; display: flex; justify-content: space-between; } + `; +} + +/** + * Build the PDF HTML for a single ASN. + * @param {object} data Full /api/validate response + * @param {object} aspa /api/aspa response (may be null) + * @param {string} format 'report' | 'executive' | 'technical' + */ +function buildPdfHtml(data, aspa, format) { + const asn = data.asn || '?'; + const name = data.name || 'Unknown Network'; + const score = Math.round(data.health_score || 0); + const ts = new Date().toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' }); + const checks = (data.score_breakdown || []); + const rel = data.relationships || {}; + const counts = rel.counts || {}; + // validations is an object keyed by check name; rpki details live in rpki_completeness + const validations = (data.validations && typeof data.validations === 'object' && !Array.isArray(data.validations)) ? data.validations : {}; + const rpkiDetails = (validations.rpki_completeness?.details || []); + const totalPfx = data.meta?.total_prefixes || 0; + + // Derived stats — use rpki_completeness for RPKI metrics + const rpki = validations.rpki_completeness || {}; + const rpkiCoverage = rpki.coverage_pct ?? 0; + const rpkiTotal = rpki.total_checked || rpkiDetails.length || 0; + const rpkiValid = rpki.with_roa || rpkiDetails.filter(v => v.status === 'valid').length; + const rpkiInvalid = rpkiDetails.filter(v => v.status === 'invalid').length; + const rpkiNotFound = rpkiDetails.filter(v => v.status === 'not_found').length; + + const passedChecks = checks.filter(c => c.status === 'pass').length; + const failedChecks = checks.filter(c => c.status !== 'pass' && c.status !== 'info').length; + const scoreColor = score >= 80 ? '#16a34a' : score >= 60 ? '#d97706' : '#dc2626'; + const aspaDirect = aspa?.direct?.has_aspa ?? null; + const aspaProviders= aspa?.direct?.provider_asns?.length || 0; + + // Check list HTML + function checkIcon(passed) { + if (passed) return ''; + return ''; + } + + const checksHtml = checks.map(c => { + const isPassed = c.status === 'pass'; + const isInfo = c.status === 'info'; + const icon = checkIcon(isPassed || isInfo); + const statusBadge = isPassed ? 'badge-green' : isInfo ? 'badge-indigo' : 'badge-red'; + const statusLabel = isPassed ? 'PASS' : isInfo ? 'INFO' : 'FAIL'; + return ` +
  • + ${icon} +
    + ${escHtml(c.check || '')} + ${statusLabel} + ${c.earned !== undefined ? `${c.earned}/${c.weight}pt` : ''} +
    +
  • `; + }).join(''); + + // Upstream providers table + const upstreamRows = (rel.upstreams || []).slice(0, 10).map(u => ` + AS${u.asn}${escHtml(u.name || '')}${u.power ?? '-'} + `).join(''); + + // Prefix validations table (sample from rpki_completeness.details) + const pfxRows = rpkiDetails.slice(0, 20).map(v => { + const badge = v.status === 'valid' ? 'badge-green' : v.status === 'invalid' ? 'badge-red' : 'badge-gray'; + return `${escHtml(v.prefix)} + ${v.status} + ${v.validating_roas ?? '-'} + —`; + }).join(''); + + // Recommendations + const failedItems = checks.filter(c => c.status !== 'pass' && c.status !== 'info'); + const recHtml = failedItems.length === 0 + ? '

    ✓ No critical issues found. Network health is excellent.

    ' + : failedItems.map((c, i) => ` +
    +
    ${i+1}. ${escHtml(c.check || '')}
    + ${c.detail ? `
    ${escHtml(c.detail)}
    ` : ''} +
    `).join(''); + + // ── Executive pages (always present) ─────────────────────────────────────── + const coverPage = ` +
    +
    + +
    AS${asn}
    +
    ${escHtml(name)}
    +
    ${formatLabel(format)} Report
    +
    + ${scoreRingSvg(score)} +
    +
    Health Score
    +
    ${score}/100
    +
    ${passedChecks} passed · ${failedChecks} failed
    +
    +
    +
    + Generated by PeerCortex · ${ts} · peercortex.org +   |   ${totalPfx} prefixes analysed +   |   RPKI coverage ${rpkiCoverage}% +
    +
    `; + + const summaryPage = ` +
    +

    Executive Summary

    +

    Key performance indicators for AS${asn} (${escHtml(name)}).

    +
    +
    Health Score
    ${score}
    out of 100
    +
    RPKI Coverage
    ${rpkiCoverage}%
    ${rpkiValid}/${rpkiTotal} prefixes
    +
    Upstreams
    ${counts.upstreams || 0}
    providers
    +
    Downstreams
    ${counts.downstreams || 0}
    customers
    +
    Peers
    ${counts.peers || 0}
    BGP sessions
    +
    ASPA Status
    +
    + + ${aspaDirect === true ? 'Deployed' : aspaDirect === false ? 'Not Deployed' : 'Unknown'} + +
    +
    ${aspaProviders} providers
    +
    +
    +

    Status Overview

    + +
    `; + + // ── Recommendations page ──────────────────────────────────────────────────── + const recsPage = ` +
    +

    Recommendations

    +

    Action items to improve network health and security posture.

    + ${recHtml} + ${failedItems.length > 0 ? ` +

    Remediation Priority

    + + + ${failedItems.map((c, i) => ` + + + + + + `).join('')} +
    #CheckImpactEffort
    ${i+1}${escHtml(c.check || '')}HighMedium
    ` : ''} +
    `; + + // ── Detail pages (included for 'report' and 'technical') ─────────────────── + const rpkiPage = ` +
    +

    RPKI Compliance

    +

    Route Origin Authorization (ROA) validation results for announced prefixes.

    +
    +
    Coverage
    ${rpkiCoverage}%
    ${rpkiValid} valid ROAs
    +
    Invalid
    ${rpkiInvalid}
    prefix${rpkiInvalid !== 1 ? 'es' : ''}
    +
    Not Found
    ${rpkiNotFound}
    no ROA
    +
    +

    ASPA (Autonomous System Provider Authorization)

    + + + + + +
    AttributeValue
    ASPA Object Present${aspaDirect ? 'Yes' : 'No'}
    Provider Count${aspaProviders}
    Providers${(aspa?.direct?.provider_asns || []).slice(0, 8).map(a => `AS${a}`).join(', ') || '—'}
    + ${pfxRows ? ` +

    Prefix Validation Sample (first 20)

    + + + ${pfxRows} +
    PrefixStatusMax LengthROA Origin
    ` : ''} +
    `; + + const bgpPage = ` +
    +

    BGP Topology

    +

    AS relationship overview and upstream connectivity analysis.

    +
    +
    Upstreams
    ${counts.upstreams || 0}
    transit providers
    +
    Downstreams
    ${counts.downstreams || 0}
    customers
    +
    Peers
    ${counts.peers || 0}
    BGP peers
    +
    + ${upstreamRows ? ` +

    Top Upstream Providers

    + + + ${upstreamRows} +
    ASNNamePower Score
    ` : '

    No upstream data available.

    '} +
    `; + + const footer = ` + `; + + // ── Extra pages for technical / report formats ───────────────────────────── + + // Technical: full prefix table (no row cap) + all upstream rows + check scores + const allPfxRows = rpkiDetails.map(v => { + const badge = v.status === 'valid' ? 'badge-green' : v.status === 'invalid' ? 'badge-red' : 'badge-gray'; + return `${escHtml(v.prefix)} + ${v.status} + ${v.validating_roas ?? '-'} + ${v.max_length ?? '-'}`; + }).join(''); + + const allUpstreamRows = (rel.upstreams || []).map(u => + `AS${u.asn}${escHtml(u.name || '')}${u.power ?? '-'}` + ).join(''); + + const checkScoreRows = checks.map(c => + ` + ${escHtml(c.check || '')} + ${c.status?.toUpperCase()} + ${c.earned ?? '-'}${c.weight ?? '-'} + ${escHtml(c.detail || '')} + ` + ).join(''); + + const technicalHeaderPage = ` +
    +
    +
    PeerCortex · Technical Analysis Report
    +
    AS${asn} — ${escHtml(name)}
    +
    Generated ${ts} · peercortex.org · ${totalPfx} prefixes · RPKI ${rpkiCoverage}%
    +
    +
    +
    Health Score
    ${score}/100
    ${passedChecks} pass · ${failedChecks} fail
    +
    RPKI Coverage
    ${rpkiCoverage}%
    ${rpkiValid} valid · ${rpkiInvalid} invalid · ${rpkiNotFound} missing
    +
    Upstreams
    ${counts.upstreams || 0}
    transit providers
    +
    Peers / Downstreams
    ${counts.peers || 0} / ${counts.downstreams || 0}
    BGP relationships
    +
    ASPA
    +
    ${aspaDirect === true ? 'Deployed' : 'Not deployed'}
    +
    ${aspaProviders} providers registered
    +
    +
    Prefixes Analysed
    ${totalPfx}
    ${rpkiDetails.length} with RPKI data
    +
    +
    `; + + const rpkiFullPage = ` +
    +

    RPKI Compliance — Full Prefix Table

    +

    ${rpkiDetails.length} prefixes with RPKI validation data. Coverage: ${rpkiCoverage}% · Valid: ${rpkiValid} · Invalid: ${rpkiInvalid} · Not Found: ${rpkiNotFound}

    +

    ASPA Object

    + + + + + +
    AttributeValue
    ASPA Present${aspaDirect ? 'Yes' : 'No'}
    Provider Count${aspaProviders}
    Registered Providers${(aspa?.direct?.provider_asns || []).map(a => `AS${a}`).join(', ') || '—'}
    + ${allPfxRows ? ` +

    All Prefixes

    + + + ${allPfxRows} +
    PrefixRPKI StatusValidating ROAsMax Length
    ` : '

    No RPKI prefix data available.

    '} +
    `; + + const bgpFullPage = ` +
    +

    BGP Topology — Full Relationship Table

    +

    Complete AS relationship data. Upstreams: ${counts.upstreams || 0} · Peers: ${counts.peers || 0} · Downstreams: ${counts.downstreams || 0}

    + ${allUpstreamRows ? ` +

    All Upstream Providers

    + + + ${allUpstreamRows} +
    ASNNamePower Score
    ` : '

    No upstream data available.

    '} + ${(rel.peers || []).length > 0 ? ` +

    Peer Sample (top 20)

    + + + ${(rel.peers || []).slice(0, 20).map(p => ``).join('')} +
    ASNName
    AS${p.asn}${escHtml(p.name || '')}
    ` : ''} +
    `; + + const checkDetailPage = ` +
    +

    Check Score Detail

    +

    All ${checks.length} health checks with individual scores and diagnostic notes.

    + + + ${checkScoreRows} +
    CheckStatusEarnedWeightDetail
    +
    + Scoring: Total = sum of earned points across all checks. Maximum possible: ${checks.reduce((s, c) => s + (c.weight || 0), 0)} points. + Current score: ${checks.reduce((s, c) => s + (c.earned || 0), 0)} / ${checks.reduce((s, c) => s + (c.weight || 0), 0)} = ${score}/100 +
    +
    `; + + // Report: add data provenance and ASPA deep-dive + const aspaPage = ` +
    +

    ASPA — Provider Authorization Analysis

    +

    Autonomous System Provider Authorization (ASPA) is a BGP security mechanism that cryptographically links an ASN to its upstream providers in the RPKI.

    +
    +
    ASPA Deployed
    +
    ${aspaDirect === true ? 'Yes' : 'No'}
    +
    +
    Providers Listed
    ${aspaProviders}
    in ASPA object
    +
    RPKI Coverage
    ${rpkiCoverage}%
    of announced prefixes
    +
    +

    What ASPA Protects Against

    + + + + + + +
    ThreatASPA Mitigates?Notes
    Route leaks (valley-free violations)YesProviders verify upstream path
    BGP hijacks (origin AS spoofing)PartialCombined with ROV
    AS-path prepending attacksYesInvalid paths rejected
    Forged-origin hijacksNoROA + ROV required
    + ${aspaDirect === false ? ` +
    +
    Recommendation: Deploy ASPA
    +
    + 1. Identify all upstream transit providers (${counts.upstreams || 0} detected)
    + 2. Create an ASPA object in your RIR portal listing their ASNs
    + 3. Sign with your RPKI key — takes effect within hours
    + 4. Verify with: rpki-client -v or RIPE RPKI Validator +
    +
    ` : ` +
    +
    ASPA is deployed — listed providers:
    +
    ${(aspa?.direct?.provider_asns || []).map(a => `AS${a}`).join(' · ') || '—'}
    +
    `} +
    `; + + const provenancePage = ` +
    +

    Data Provenance

    +

    All data sources, cache ages, and methodology used to generate this report.

    + + + + + + + + +
    Data SourceWhat it providesUpdate Frequency
    Cloudflare RPKI FeedROA + ASPA objectsEvery 4 hours
    PeeringDBIXP presence, peering policy, facilitiesDaily (03:00 UTC)
    RIPE StatAS relationships, prefix visibility, BGP dataReal-time / cached 15 min
    RIPE AtlasActive measurement probes by ASNCached 12 hours
    bgproutes.ioBGP route visibility fallbackReal-time
    bgp.he.netAS relationship graphCached 24 hours
    +

    Report Metadata

    + + + + + + + + + + +
    FieldValue
    ASNAS${asn}
    Network Name${escHtml(name)}
    Report Format${formatLabel(format)}
    Generated${ts}
    PlatformPeerCortex · peercortex.org
    Prefixes Analysed${totalPfx}
    RPKI Objects Checked${rpkiDetails.length}
    Health Checks Run${checks.length}
    +
    + This report is generated automatically based on publicly available BGP and RPKI data. + Data may be delayed by cache TTLs. Not a substitute for real-time monitoring. + MIT License · github.com/renefichtmueller/PeerCortex +
    +
    `; + + // ── Compose pages by format ──────────────────────────────────────────────── + let bodyContent; + if (format === 'executive') { + // 3 pages: clean stakeholder summary — no deep technical data + bodyContent = coverPage + summaryPage + recsPage; + } else if (format === 'technical') { + // ~8 pages: engineer-focused, dense, no decorative cover, full data tables + bodyContent = technicalHeaderPage + rpkiFullPage + bgpFullPage + checkDetailPage + recsPage; + } else { + // 'report' — full stakeholder + technical, ~10 pages + bodyContent = coverPage + summaryPage + rpkiPage + bgpPage + aspaPage + recsPage + provenancePage; + } + + return ` + + + + PeerCortex — AS${asn} ${formatLabel(format)} + + + + ${bodyContent} + ${footer} + +`; +} + +/** + * Build comparison PDF HTML for two ASNs. + */ +function buildComparisonPdfHtml(d1, aspa1, l1, d2, aspa2, l2) { + const ts = new Date().toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' }); + + function col(d, aspa) { + const asn = d.asn || '?'; + const name = d.name || 'Unknown'; + const score = Math.round(d.health_score || 0); + const rel = d.relationships || {}; + const counts= rel.counts || {}; + const vals = (d.validations && !Array.isArray(d.validations)) ? d.validations : {}; + const rpki = vals.rpki_completeness || {}; + const rpkiV = rpki.with_roa || 0; + const rpkiT = rpki.total_checked || 0; + const rpkiC = rpki.coverage_pct ?? (rpkiT > 0 ? Math.round((rpkiV / rpkiT) * 100) : 0); + const sc = score >= 80 ? '#16a34a' : score >= 60 ? '#d97706' : '#dc2626'; + const aspaDep = aspa?.direct?.has_aspa ?? null; + const checks= (d.score_breakdown || []); + const passC = checks.filter(c => c.status === 'pass').length; + const failC = checks.filter(c => c.status !== 'pass' && c.status !== 'info').length; + + return ` + +
    + ${scoreRingSvg(score, sc)} +
    AS${asn}
    +
    ${escHtml(name)}
    +
    + + + + + + + + + + + +
    Key Metrics
    Health Score${score}/100
    RPKI Coverage${rpkiC}% (${rpkiV}/${rpkiT})
    Upstreams${counts.upstreams || 0}
    Downstreams${counts.downstreams || 0}
    Peers${counts.peers || 0}
    ASPA${aspaDep ? 'Deployed' : 'Not Deployed'}
    Checks Passed${passC} / ${checks.length}
    Checks Failed${failC}
    Total Prefixes${d.meta?.total_prefixes || 0}
    + `; + } + + const colHtml = col(d1, aspa1) + col(d2, aspa2); + + // ── Peering Intelligence: common IXPs + common facilities ───────────────── + const ixList1 = (l1?.ix_presence?.connections || []).map(x => ({ id: x.ix_id, name: x.ix_name, city: x.city || '', speed: x.speed_mbps })); + const ixList2 = (l2?.ix_presence?.connections || []).map(x => ({ id: x.ix_id, name: x.ix_name, city: x.city || '', speed: x.speed_mbps })); + const ixIds1 = new Set(ixList1.map(x => x.id)); + const ixIds2 = new Set(ixList2.map(x => x.id)); + const commonIxIds = [...ixIds1].filter(id => ixIds2.has(id)); + const commonIxps = commonIxIds.slice(0, 20).map(id => { + const x1 = ixList1.find(x => x.id === id); + const x2 = ixList2.find(x => x.id === id); + return { id, name: x1?.name || 'Unknown', city: x1?.city || '', speed1: x1?.speed, speed2: x2?.speed }; + }); + + const facList1 = (l1?.facilities?.list || []).map(f => ({ id: f.fac_id, name: f.name, city: f.city || '', country: f.country || '' })); + const facList2 = (l2?.facilities?.list || []).map(f => ({ id: f.fac_id, name: f.name, city: f.city || '', country: f.country || '' })); + const facIds1 = new Set(facList1.map(f => f.id)); + const facIds2 = new Set(facList2.map(f => f.id)); + const commonFacIds = [...facIds1].filter(id => facIds2.has(id)); + const commonFacs = commonFacIds.slice(0, 15).map(id => facList1.find(f => f.id === id)); + + // IXPs of ASN1 where ASN2 is NOT present (opportunity IXPs for ASN2) + const oppsFor2 = ixList1.filter(x => !ixIds2.has(x.id)).slice(0, 8); + const oppsFor1 = ixList2.filter(x => !ixIds1.has(x.id)).slice(0, 8); + + const commonIxHtml = commonIxps.length > 0 + ? ` + + ${commonIxps.map(x => ` + + + + + + `).join('')} +
    IXP NameCityAS${d1.asn} SpeedAS${d2.asn} Speed
    ${escHtml(x.name)}${escHtml(x.city)}${x.speed1 ? (x.speed1/1000).toLocaleString()+'G' : '—'}${x.speed2 ? (x.speed2/1000).toLocaleString()+'G' : '—'}
    ` + : '

    No common IXPs found — these networks do not share any Internet Exchange Points.

    '; + + const commonFacHtml = commonFacs.length > 0 + ? ` + + ${commonFacs.map(f => ` + + + + + `).join('')} +
    Datacenter / Colocation FacilityCityCountry
    ${escHtml(f?.name||'')}${escHtml(f?.city||'')}${escHtml(f?.country||'')}
    ` + : '

    No shared colocation facilities found.

    '; + + const oppsHtml = (asns, opps) => opps.length === 0 + ? `

    Already maximally peered on these exchanges — or no data available.

    ` + : opps.map(x => `
    + ${escHtml(x.name)} + ${x.city ? ` · ${escHtml(x.city)}` : ''} + ${x.speed ? `${(x.speed/1000).toLocaleString()}G` : ''} +
    `).join(''); + + const peeringPage = (commonIxps.length + commonFacs.length > 0 || oppsFor1.length + oppsFor2.length > 0) ? ` +
    +

    Peering Intelligence

    +

    Common Internet Exchange Points and colocation facilities — potential peering locations between AS${d1.asn} and AS${d2.asn}.

    + +
    +
    +
    ${commonIxps.length}
    +
    Common IXPs
    +
    +
    +
    ${commonFacs.length}
    +
    Shared Facilities
    +
    +
    + +

    Common Internet Exchange Points (direct peering possible)

    + ${commonIxHtml} + +

    Shared Colocation Facilities

    + ${commonFacHtml} + + ${oppsFor1.length + oppsFor2.length > 0 ? ` +

    Expansion Opportunities

    +
    +
    +
    AS${d2.asn} could join (AS${d1.asn} is there)
    + ${oppsHtml(d2.asn, oppsFor2)} +
    +
    +
    AS${d1.asn} could join (AS${d2.asn} is there)
    + ${oppsHtml(d1.asn, oppsFor1)} +
    +
    ` : ''} +
    ` : ''; + + // Side-by-side check comparison + const allChecks = [...new Set([ + ...(d1.score_breakdown || []).map(c => c.check), + ...(d2.score_breakdown || []).map(c => c.check), + ])]; + const checkRows = allChecks.map(checkName => { + const c1 = (d1.score_breakdown || []).find(c => c.check === checkName); + const c2 = (d2.score_breakdown || []).find(c => c.check === checkName); + const isP1 = c1?.status === 'pass'; + const isP2 = c2?.status === 'pass'; + const icon = p => p ? '✓' : '✗'; + const st = p => p ? 'color:#16a34a;font-weight:700' : 'color:#dc2626;font-weight:700'; + return ` + ${escHtml(checkName)} + ${c1 ? icon(isP1) : '—'} + ${c2 ? icon(isP2) : '—'} + `; + }).join(''); + + return ` + + + + PeerCortex — AS${d1.asn} vs AS${d2.asn} Comparison + + + +
    +
    + +
    +
    ASN Comparison Report
    +
    AS${d1.asn} vs AS${d2.asn}
    +
    ${escHtml(d1.name)} ← vs → ${escHtml(d2.name)}
    +
    + ${colHtml}
    +
    Generated by PeerCortex · ${ts} · peercortex.org
    +
    +
    +

    Head-to-Head Health Checks

    + + + ${checkRows} +
    CheckAS${d1.asn}AS${d2.asn}
    +
    + ${peeringPage} + + +`; +} + +function formatLabel(fmt) { + return fmt === 'executive' ? 'Executive Summary' : fmt === 'technical' ? 'Technical Analysis' : 'Full Report'; +} + +function escHtml(s) { + if (!s) return ''; + return String(s).replace(/&/g,'&').replace(//g,'>').replace(/"/g,'"'); +} + +/** + * Render HTML to PDF buffer using puppeteer. + * Returns Buffer or throws. + */ +async function renderHtmlToPdf(html) { + const browser = await getPuppeteerBrowser(); + if (!browser) throw new Error('PDF renderer unavailable (puppeteer not installed)'); + const page = await browser.newPage(); + try { + await page.setContent(html, { waitUntil: 'domcontentloaded', timeout: 15000 }); + const buf = await page.pdf({ + format: 'A4', + printBackground: true, + margin: { top: '18mm', bottom: '18mm', left: '16mm', right: '16mm' }, + }); + return buf; + } finally { + await page.close(); + } +} + // ============================================================ // Task 6: In-memory cache with TTL + Rate Limiting // ============================================================ @@ -348,6 +1564,7 @@ const TIER1_ASNS = new Set([ ]); const CACHE_TTL_LOOKUP = 5 * 60 * 1000; // 5 minutes +const CACHE_TTL_LOOKUP_DEGRADED = 90 * 1000; // matches the existing 90s guard for suspicious /api/validate zero-counts const CACHE_TTL_ASPA = 4 * 60 * 60 * 1000; // 4 hours const CACHE_TTL_NEWS = 10 * 60 * 1000; // 10 minutes const CACHE_TTL_DEFAULT = 5 * 60 * 1000; // 5 minutes @@ -373,16 +1590,22 @@ function rdapCacheSet(asn, data) { // ============================================================ // WHOIS Cache — 24h TTL, prevents repeated RDAP hammering // ============================================================ -const whoisCache = new Map(); // key: asn string, value: { data, ts } +const whoisCache = new Map(); // key: asn string, value: { data, ts, ttl } const WHOIS_CACHE_TTL = 24 * 60 * 60 * 1000; +// A "not found" result after all 5 RIR sources failed is far more often a shared +// network blip (DNS, outbound connectivity, simultaneous rate-limit) than a real +// ASN existing nowhere across RIPE+APNIC+ARIN+LACNIC+AFRINIC -- fetchJSON can't +// tell timeout/network-error apart from a genuine 404, so cache that specific +// conclusion much more briefly than a confirmed, parsed WHOIS record. +const WHOIS_NOT_FOUND_CACHE_TTL = 10 * 60 * 1000; function whoisCacheGet(asn) { const e = whoisCache.get(String(asn)); - if (e && (Date.now() - e.ts) < WHOIS_CACHE_TTL) return e.data; + if (e && (Date.now() - e.ts) < (e.ttl || WHOIS_CACHE_TTL)) return e.data; return undefined; } -function whoisCacheSet(asn, data) { +function whoisCacheSet(asn, data, ttl) { if (whoisCache.size > 5000) whoisCache.delete(whoisCache.keys().next().value); - whoisCache.set(String(asn), { data, ts: Date.now() }); + whoisCache.set(String(asn), { data, ts: Date.now(), ttl: ttl || WHOIS_CACHE_TTL }); } // ============================================================ @@ -416,12 +1639,13 @@ const validateResultCache = new Map(); const RESULT_CACHE_TTL = 15 * 60 * 1000; // 15 minutes function resultCacheGet(map, key) { const e = map.get(String(key)); - if (e && (Date.now() - e.ts) < RESULT_CACHE_TTL) return e.data; + const ttl = e && e.ttl ? e.ttl : RESULT_CACHE_TTL; + if (e && (Date.now() - e.ts) < ttl) return e.data; return undefined; } -function resultCacheSet(map, key, data) { +function resultCacheSet(map, key, data, ttlMs) { if (map.size > 2000) map.delete(map.keys().next().value); - map.set(String(key), { data, ts: Date.now() }); + map.set(String(key), { data, ts: Date.now(), ttl: ttlMs || RESULT_CACHE_TTL }); } // ============================================================ @@ -722,9 +1946,6 @@ const roaStore = { }, }; -// ASPA adoption tracking — store last 30 snapshots for trend analysis -const aspaAdoptionHistory = []; - // ============================================================ // PeeringDB Source Cache (L2) — net/netixlan/netfac per ASN // Eliminates redundant PDB API calls under load @@ -848,7 +2069,18 @@ class Semaphore { const ripeStatSemaphore = new Semaphore(15); // Cached + throttled RIPE Stat fetch -async function fetchRipeStatCached(url, options) { +// Renamed from fetchRipeStatCached 2026-07-16: a second function with that exact +// name was added ~150 lines down (the local-DB-routing wrapper) during the Postgres +// refactor. In JS, two `function` declarations sharing a name silently collapse to +// the LAST one in source order -- the real RIPE Stat fetch+cache+throttle +// implementation below was completely shadowed, and every call to +// fetchRipeStatCached() for any endpoint NOT in {announced-prefixes, asn-neighbours, +// as-overview, visibility, prefix-size-distribution} was unconditionally returning +// null instead of ever reaching this code. That silently broke blocklist, +// abuse-contact-finder, bgp-updates, routing-status, looking-glass, whois, +// reverse-dns-consistency, maxmind-geo-lite-pfx, and ixs lookups -- see the router's +// fallback call to this function for the fix. +async function fetchRipeStatCachedFromApi(url, options) { // Extract endpoint name from URL for TTL lookup const match = url.match(/\/data\/([^/]+)\//); const endpoint = match ? match[1] : "default"; @@ -962,14 +2194,8 @@ function fetchRpkiAspaFeed() { roaStore.build(roas); roaStore.saveToDisk("/opt/peercortex-app/.roa-cache.json"); - // Track ASPA adoption - const adoptionSnapshot = { - ts: Date.now(), - aspa_count: rpkiAspaMap.size, - roa_count: roaStore.count, - }; - aspaAdoptionHistory.push(adoptionSnapshot); - if (aspaAdoptionHistory.length > 30) aspaAdoptionHistory.shift(); + // Track ASPA adoption — persist to disk + update in-memory trend + recordAspaAdoptionSnapshot(rpkiAspaMap.size, roaStore.count); rpkiAspaLastFetch = Date.now(); console.log("[RPKI] Loaded " + rpkiAspaMap.size + " ASPA objects + " + roaStore.count + " ROAs from Cloudflare feed"); @@ -994,14 +2220,19 @@ async function ensureAspaCache() { } } -// Lookup ASPA object for a given ASN from the RPKI feed cache +// Lookup ASPA object for a given ASN from the RPKI feed cache. feedLoaded +// distinguishes "the feed loaded fine and this ASN genuinely has no ASPA object" +// from "the Cloudflare feed fetch has never succeeded, so we don't actually know" -- +// rpkiAspaLastFetch is only set on a successful parse (see fetchRpkiAspaFeed), so +// 0 means every attempt so far has failed and exists:false here is not trustworthy. function lookupAspaFromRpki(asn) { const asnNum = Number(asn); + const feedLoaded = rpkiAspaLastFetch > 0; if (rpkiAspaMap.has(asnNum)) { const providers = rpkiAspaMap.get(asnNum); - return { exists: true, providers: [...providers].sort((a, b) => a - b) }; + return { exists: true, providers: [...providers].sort((a, b) => a - b), feedLoaded }; } - return { exists: false, providers: [] }; + return { exists: false, providers: [], feedLoaded }; } @@ -1234,9 +2465,13 @@ async function fetchRipeStatCached(url, options = {}) { if (asnMatch) return await localDb.getRipeStatPrefixSizeDistribution(parseInt(asnMatch[1])); } - // For other RIPE Stat endpoints (not in localDb): return empty/null gracefully - // Examples: rir-stats-country, bgp-updates, reverse-dns-consistency, routing-status, maxmind-geo-lite, etc. - return Promise.resolve(null); + // For every other RIPE Stat endpoint (not mirrored into the local Postgres DB) -- + // e.g. blocklist, abuse-contact-finder, bgp-updates, routing-status, looking-glass, + // whois, reverse-dns-consistency, maxmind-geo-lite-pfx, ixs -- fall through to the + // real RIPE Stat API with its own cache/throttle/never-cache-null protections, + // instead of returning null unconditionally (see fetchRipeStatCachedFromApi's + // header comment for how this silently broke ~9 checks until 2026-07-16). + return fetchRipeStatCachedFromApi(url, options); } catch (e) { console.error("[fetchRipeStatCached] Error:", e.message); return Promise.resolve(null); @@ -1246,24 +2481,27 @@ async function fetchRipeStatCached(url, options = {}) { // RPKI per-prefix validation — uses local ROA store (instant, no API calls) // Falls back to RIPE Stat only if ROA store is not yet loaded (cold start) // Validate RPKI for a prefix — uses local PostgreSQL database (sub-10ms, zero external API calls) -// Returns: { prefix, status: "valid"|"invalid"|"not_found", validating_roas: N } +// Returns: { prefix, status: "valid"|"invalid"|"not_found"|"unavailable", validating_roas: N } +// "not_found" means the DB was queried and genuinely has no covering ROA -- a real result. +// "unavailable" means the DB query itself failed (connection/timeout/error) -- we don't know. +// Conflating these used to make DB hiccups masquerade as "no ROA published" (a real, worse- +// sounding finding). Callers computing coverage percentages should exclude "unavailable". async function validateRPKIWithCache(asn, prefix) { try { - // Query local database (sub-10ms, no external API calls) const result = await localDb.validateRpki(prefix, asn); - - // Adapt response to match expected format if (result.status === 'valid') { return { prefix, status: "valid", validating_roas: 1 }; } else if (result.status === 'invalid') { return { prefix, status: "invalid", validating_roas: 1 }; + } else if (result.status === 'unknown') { + return { prefix, status: "unavailable", validating_roas: 0 }; } else { - // 'not-found' or 'unknown' + // 'not-found': genuinely no covering ROA return { prefix, status: "not_found", validating_roas: 0 }; } } catch (_e) { console.error("[RPKI] Error validating " + prefix + ":", _e.message); - return { prefix, status: "not_found", validating_roas: 0 }; + return { prefix, status: "unavailable", validating_roas: 0 }; } } @@ -1282,6 +2520,9 @@ function hasAsSet(asPath) { // Hop Check function (core of ASPA verification) // aspaStore = Map> (CAS -> provider set) +// hopCheck(asI, asJ): is asJ an attested provider of CUSTOMER asI? Caller must pass +// the customer first, provider second -- see draft-ietf-sidrops-aspa-verification +// section 5.3's authorized(A(I), A(I+1)), where A(I) is always the customer side. function hopCheck(asI, asJ, aspaStore) { const providers = aspaStore.get(asI); if (!providers) return "NoAttestation"; @@ -1303,7 +2544,9 @@ function verifyUpstream(asPath, aspaStore, rawPathStr) { let hasNoAttestation = false; for (let i = 1; i < collapsed.length; i++) { - const check = hopCheck(collapsed[i - 1], collapsed[i], aspaStore); + // collapsed[i] (closer to origin) is the customer; collapsed[i - 1] (closer to + // the validator) is the provider it's declaring -- customer goes first in hopCheck. + const check = hopCheck(collapsed[i], collapsed[i - 1], aspaStore); hops.push({ from: collapsed[i - 1], to: collapsed[i], @@ -1322,7 +2565,16 @@ function verifyUpstream(asPath, aspaStore, rawPathStr) { }; } -// Downstream Verification (RFC Section 6.2) +// Downstream Verification -- draft-ietf-sidrops-aspa-verification Section 5.5. +// Unlike upstream verification, a downstream path may legitimately contain both +// an up-ramp (customer->provider hops, near the origin) AND a down-ramp +// (provider->customer hops, near the validator), transitioning at most once -- +// e.g. origin -> its providers -> a peering exchange -> validator's providers -> +// validator. Section 5.3 defines four ramp lengths computed from two independent +// scans, verified 2026-07-16 against a worked example fetched from the draft +// (N=4 path with a single unattested/no-attestation "kink" correctly resolves +// to Valid, and a path with definite failures on both ends correctly resolves +// to Invalid, matching this implementation). function verifyDownstream(asPath, aspaStore, rawPathStr) { if (rawPathStr && hasAsSet(rawPathStr)) return { result: "Invalid", reason: "Path contains AS_SET" }; const collapsed = collapsePrepends(asPath); @@ -1334,58 +2586,57 @@ function verifyDownstream(asPath, aspaStore, rawPathStr) { hops.push({ from: collapsed[i - 1], to: collapsed[i], - result: hopCheck(collapsed[i - 1], collapsed[i], aspaStore), + result: hopCheck(collapsed[i], collapsed[i - 1], aspaStore), }); } - // Find u_min: first index where forward hop is NotProviderPlus - let uMin = N + 1; - for (let u = 1; u < N; u++) { - if (hopCheck(collapsed[u - 1], collapsed[u], aspaStore) === "NotProviderPlus") { - uMin = u; - break; - } + // Up-ramp scan: walk from the origin (collapsed[N-1]) toward the validator + // (collapsed[0]), i.e. authorized(A(I), A(I+1)) for I = 1..N-1 ascending. + // maxUpRamp stops at the first DEFINITE violation ("NotProviderPlus"); + // minUpRamp stops at the first hop that isn't confirmed ProviderPlus + // (including unattested "NoAttestation" hops, which don't disprove a leak + // but also don't prove the path is clean). + let maxUpRamp = N; + let minUpRamp = N; + for (let k = N - 1; k >= 1; k--) { + const check = hopCheck(collapsed[k], collapsed[k - 1], aspaStore); + const I = N - k; + if (check === "NotProviderPlus" && maxUpRamp === N) maxUpRamp = I; + if (check !== "ProviderPlus" && minUpRamp === N) minUpRamp = I; + if (maxUpRamp !== N && minUpRamp !== N) break; } - // Find v_max: last index where reverse hop is NotProviderPlus - let vMax = 0; - for (let v = N - 2; v >= 0; v--) { - if (hopCheck(collapsed[v + 1], collapsed[v], aspaStore) === "NotProviderPlus") { - vMax = v; - break; - } + // Down-ramp scan: the mirror image, walking from the validator (collapsed[0]) + // toward the origin, i.e. authorized(A(J), A(J-1)) for J = N..2 descending. + let maxDownRamp = N; + let minDownRamp = N; + for (let k = 0; k <= N - 2; k++) { + const check = hopCheck(collapsed[k], collapsed[k + 1], aspaStore); + const rampLen = k + 1; // = N - J + 1 for the corresponding J + if (check === "NotProviderPlus" && maxDownRamp === N) maxDownRamp = rampLen; + if (check !== "ProviderPlus" && minDownRamp === N) minDownRamp = rampLen; + if (maxDownRamp !== N && minDownRamp !== N) break; } - if (uMin <= vMax) { - return { result: "Invalid", reason: "uMin(" + uMin + ") <= vMax(" + vMax + "): valley detected", hops }; + if (maxUpRamp + maxDownRamp < N) { + return { + result: "Invalid", + reason: "max_up_ramp(" + maxUpRamp + ") + max_down_ramp(" + maxDownRamp + ") < " + N + ": no valid up/down split covers the path", + hops, + }; } - - // Compute up-ramp K - let K = 0; - for (let i = 1; i < N; i++) { - if (hopCheck(collapsed[i - 1], collapsed[i], aspaStore) === "ProviderPlus") { - K = i; - } else { - break; - } + if (minUpRamp + minDownRamp < N) { + return { + result: "Unknown", + reason: "min_up_ramp(" + minUpRamp + ") + min_down_ramp(" + minDownRamp + ") < " + N + ": unattested hops prevent full confirmation", + hops, + }; } - - // Compute down-ramp L - let L = N - 1; - for (let j = N - 2; j >= 0; j--) { - if (hopCheck(collapsed[j + 1], collapsed[j], aspaStore) === "ProviderPlus") { - L = j; - } else { - break; - } - } - - const gap = L - K; - if (gap <= 1) { - return { result: "Valid", reason: "Valid up-down path (K=" + K + ", L=" + L + ")", hops }; - } - - return { result: "Unknown", reason: "Gap between up-ramp and down-ramp (K=" + K + ", L=" + L + ", gap=" + gap + ")", hops }; + return { + result: "Valid", + reason: "max_up_ramp(" + maxUpRamp + ") + max_down_ramp(" + maxDownRamp + ") >= " + N + " and min_up_ramp + min_down_ramp >= " + N, + hops, + }; } // Valley Detection: scan path for up-down-up pattern (route leak indicator) @@ -1492,10 +2743,13 @@ async function fetchRipeRpkiValidator(asn, prefix) { } } -// Cross-check a sample of prefixes against RIPE RPKI Validator (max 5, in parallel) +// Cross-check a sample of prefixes against RIPE RPKI Validator (max 5, in parallel). +// agreement_pct only counts pairs where BOTH sources actually returned a real +// verdict -- a zero-sample or all-RIPE-lookups-failed result reports agreement_pct: +// null (not a fabricated 100), since nothing was actually cross-checked. async function crossCheckRpki(asn, prefixes, localResults) { const sample = prefixes.slice(0, 5); - if (sample.length === 0) return { cloudflare_valid: 0, ripe_valid: 0, agreement_pct: 100, disagreements: [], sample_size: 0 }; + if (sample.length === 0) return { cloudflare_valid: 0, ripe_valid: 0, agreement_pct: null, disagreements: [], sample_size: 0, comparable_size: 0 }; const ripeResults = await Promise.all( sample.map((pfx) => fetchRipeRpkiValidator(asn, pfx)) @@ -1509,6 +2763,7 @@ async function crossCheckRpki(asn, prefixes, localResults) { let cloudflareValid = 0; let ripeValid = 0; let agreements = 0; + let comparable = 0; const disagreements = []; for (let i = 0; i < sample.length; i++) { @@ -1522,12 +2777,13 @@ async function crossCheckRpki(asn, prefixes, localResults) { if (cfIsValid) cloudflareValid++; if (ripeIsValid) ripeValid++; - // Skip comparison if RIPE returned error/unknown + // A failed/unknown RIPE lookup isn't a comparison at all -- exclude it from + // the agreement percentage instead of counting it as a silent "agreement". if (ripeState === "error" || ripeState === "unknown") { - agreements++; // Don't count failed lookups as disagreements continue; } + comparable++; if (cfIsValid === ripeIsValid) { agreements++; } else { @@ -1539,8 +2795,8 @@ async function crossCheckRpki(asn, prefixes, localResults) { } } - const agreementPct = sample.length > 0 ? Math.round((agreements / sample.length) * 100) : 100; - return { cloudflare_valid: cloudflareValid, ripe_valid: ripeValid, agreement_pct: agreementPct, disagreements: disagreements, sample_size: sample.length }; + const agreementPct = comparable > 0 ? Math.round((agreements / comparable) * 100) : null; + return { cloudflare_valid: cloudflareValid, ripe_valid: ripeValid, agreement_pct: agreementPct, disagreements: disagreements, sample_size: sample.length, comparable_size: comparable }; } // ============================================================ @@ -1853,7 +3109,9 @@ async function fetchWhois(resource) { whoisCacheSet(asn, result.data); } else { result.error = "Not found in any RIR database (RIPE, APNIC, ARIN, LACNIC, AFRINIC)"; - whoisCacheSet(asn, null); // cache miss to avoid repeated hammering + // Short TTL: this "not found" likely reflects a transient failure across + // all 5 sources, not a confirmed non-existent ASN -- see WHOIS_NOT_FOUND_CACHE_TTL. + whoisCacheSet(asn, null, WHOIS_NOT_FOUND_CACHE_TTL); } } } else if (/[\/:]/.test(trimmed) || /^\d+\.\d+\.\d+/.test(trimmed)) { @@ -1907,6 +3165,40 @@ async function fetchWhois(resource) { return result; } +// ============================================================ +// Internal API Server Proxy +// ============================================================ +// Several routes were extracted into src/api/ + src/features/*/routes.ts +// (Fastify, dist/api/index.js, run as a separate PM2 process on +// API_SERVER_PORT) but were never re-wired here after that migration — +// they just silently 404'd. This forwards those specific paths through +// rather than reimplementing them inline a second time. +const API_SERVER_PORT = parseInt(process.env.API_SERVER_PORT || "3102", 10); + +function proxyToApiServer(req, res, targetUrl) { + const proxyReq = http.request( + { + hostname: "127.0.0.1", + port: API_SERVER_PORT, + path: targetUrl, + method: req.method, + headers: Object.assign({}, req.headers, { host: "127.0.0.1:" + API_SERVER_PORT }), + }, + (proxyRes) => { + res.writeHead(proxyRes.statusCode, proxyRes.headers); + proxyRes.pipe(res); + } + ); + proxyReq.on("error", (err) => { + console.error("[API Proxy] Error forwarding " + targetUrl + ":", err.message); + if (!res.headersSent) { + res.writeHead(502, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ error: "API server unavailable", detail: err.message })); + } + }); + req.pipe(proxyReq); +} + // ============================================================ // HTTP Server // ============================================================ @@ -2278,10 +3570,10 @@ const server = http.createServer(async (req, res) => { } : null, aspa_adoption: { total_objects: rpkiAspaMap.size, - roa_count: dbStats ? dbStats.rpki_roas : 0, - history_samples: aspaAdoptionHistory.length, - delta_last: aspaAdoptionHistory.length >= 2 - ? aspaAdoptionHistory[aspaAdoptionHistory.length - 1].aspa_count - aspaAdoptionHistory[aspaAdoptionHistory.length - 2].aspa_count + roa_count: roaStore.count, + history_samples: aspaAdoptionDailyHistory.length, + delta_last: aspaAdoptionDailyHistory.length >= 2 + ? aspaAdoptionDailyHistory[aspaAdoptionDailyHistory.length - 1].aspa_objects - aspaAdoptionDailyHistory[aspaAdoptionDailyHistory.length - 2].aspa_objects : 0, }, }; @@ -2311,9 +3603,9 @@ const server = http.createServer(async (req, res) => { aspa_adoption: { total_objects: rpkiAspaMap.size, roa_count: roaStore.count, - history_samples: aspaAdoptionHistory.length, - delta_last: aspaAdoptionHistory.length >= 2 - ? aspaAdoptionHistory[aspaAdoptionHistory.length - 1].aspa_count - aspaAdoptionHistory[aspaAdoptionHistory.length - 2].aspa_count + history_samples: aspaAdoptionDailyHistory.length, + delta_last: aspaAdoptionDailyHistory.length >= 2 + ? aspaAdoptionDailyHistory[aspaAdoptionDailyHistory.length - 1].aspa_objects - aspaAdoptionDailyHistory[aspaAdoptionDailyHistory.length - 2].aspa_objects : 0, }, }, null, 2) @@ -2421,15 +3713,17 @@ const server = http.createServer(async (req, res) => { const aspaObjectExists = aspaLookup.exists; const aspaDeclaredProviders = aspaLookup.providers; - // Build ASPA store from RPKI feed data (real ASPA objects) + // Build ASPA store from RPKI feed data (real ASPA objects only). If the + // target has no real ASPA object, its hops must show "NoAttestation" -- + // NOT a fabricated declaration built from heuristically-detected BGP + // neighbours, which would contradict the aspa_object_exists:false this + // same response reports and falsely present unattested hops as + // "ProviderPlus"/Valid. hopCheck() already returns "NoAttestation" for + // any ASN with no entry in aspaStore, so simply not setting one here is + // correct and sufficient -- no fallback needed. const aspaStore = new Map(); - // Add the target ASN's RPKI-declared providers if (aspaObjectExists) { aspaStore.set(targetAsn, new Set(aspaDeclaredProviders)); - } else { - // Fallback: use detected providers for path verification - const providerSet = new Set(detectedProviders.map((p) => p.asn)); - aspaStore.set(targetAsn, providerSet); } // Also populate store with all known ASPA objects from the RPKI feed // for providers that have their own ASPA objects (enables full path verification) @@ -2438,14 +3732,13 @@ const server = http.createServer(async (req, res) => { aspaStore.set(cas, provSet); } } - - // Also add reverse relationships for providers we know about - // (each provider has the target as customer) - detectedProviders.forEach((p) => { - if (!aspaStore.has(p.asn)) { - aspaStore.set(p.asn, new Set()); - } - }); + // Deliberately NOT adding empty Set() entries for detected-but-unattested + // providers here: aspaStore.get() returning undefined for them makes + // hopCheck() correctly report "NoAttestation". An empty (but present) Set + // would make providers.has(x) return false, misreporting "NotProviderPlus" + // (implying a real ASPA object that denies this hop) instead of "we simply + // don't know" -- see the 2026-07-16 audit for how this previously caused + // clean, unattested paths to be misclassified as route leaks. // Sample paths for verification (up to 50) const samplePaths = allPaths.slice(0, 50); @@ -2524,8 +3817,11 @@ const server = http.createServer(async (req, res) => { await ensureAspaCache(); const rpkiBatch = announcedPrefixes.map((p) => p.prefix); const rpkiResults = await Promise.all(rpkiBatch.map((pfx) => validateRPKIWithCache(rawAsn, pfx))); - const rpkiValid = rpkiResults.filter((r) => r.status === "valid").length; - const rpkiCoverage = rpkiResults.length > 0 ? Math.round((rpkiValid / rpkiResults.length) * 100) : 0; + // Exclude "unavailable" (DB error) from the coverage denominator -- a DB hiccup + // must not lower a network's displayed ASPA readiness score. + const rpkiChecked = rpkiResults.filter((r) => r.status !== "unavailable"); + const rpkiValid = rpkiChecked.filter((r) => r.status === "valid").length; + const rpkiCoverage = rpkiChecked.length > 0 ? Math.round((rpkiValid / rpkiChecked.length) * 100) : 0; // Calculate readiness score const readinessScore = calculateAspaReadinessScore({ @@ -2547,6 +3843,7 @@ const server = http.createServer(async (req, res) => { asn: targetAsn, readiness_score: readinessScore, aspa_object_exists: aspaObjectExists, + aspa_feed_healthy: aspaLookup.feedLoaded, detected_providers: detectedProviders.map((p) => ({ ...p, frequency: providerFrequency.get(p.asn) || 0, @@ -2689,6 +3986,7 @@ const server = http.createServer(async (req, res) => { detected_providers: detectedProviders, provider_count: detectedProviders.length, aspa_object_exists: aspaObjectExists, + aspa_feed_healthy: aspaLookup.feedLoaded, aspa_declared_providers: aspaDeclaredProviders.map((a) => ({ asn: a })), aspa_declared_count: aspaDeclaredProviders.length, recommended_aspa: recommendedAspa, @@ -2747,9 +4045,12 @@ const server = http.createServer(async (req, res) => { last_seen: bgpStatus.last_seen, source: "local_bgp", }; - // Check for hijack (multiple origin ASNs) + // Check for hijack (multiple origin ASNs). null means the check itself + // failed (DB error) -- distinct from a genuine single/no-origin result. const hijackAsns = await localDb.checkBgpHijack(prefix); - if (hijackAsns.length > 1) { + if (hijackAsns === null) { + result.bgp_status.hijack_check_unavailable = true; + } else if (hijackAsns.length > 1) { result.bgp_status.hijack_warning = { detected: true, origin_asns: hijackAsns, @@ -2885,18 +4186,36 @@ const server = http.createServer(async (req, res) => { var bogonPrefixes = bogonPrefixResults.filter(function(r) { return r.is_bogon; }); var asnInPaths = neighbours.map(function(n) { return n.asn; }); var bogonAsns = asnInPaths.filter(checkBogonAsn); + // "pass" must mean prefixes/neighbours were actually fetched and checked clean -- + // not that the upstream source failed and left nothing to check. A source is + // unavailable if it's falsy (fetchRipeStatCached network failure) OR if it's a + // truthy object with status:"error" (local-db-client.js's DB-error signal -- + // see the 2026-07-16 audit; that object is NOT null, so a plain `!x` check + // alone misses this case and would show "pass" on 0 checked prefixes). + function isSourceUnavailable(x) { return !x || x.status === "error"; } + var prefixesUnavailable = isSourceUnavailable(prefixData); + var neighboursUnavailable = isSourceUnavailable(neighbourData); + var bogonDataUnavailable = prefixesUnavailable && neighboursUnavailable; var bogonResult = { - status: bogonPrefixes.length === 0 && bogonAsns.length === 0 ? "pass" : "fail", + status: bogonDataUnavailable ? "info" : (bogonPrefixes.length === 0 && bogonAsns.length === 0 ? "pass" : "fail"), bogon_prefixes: bogonPrefixes, bogon_asns_in_paths: bogonAsns, total_prefixes_checked: allPrefixes.length, + prefixes_source_unavailable: prefixesUnavailable, + neighbours_source_unavailable: neighboursUnavailable, }; // Phase 2: All API-dependent validations in parallel var validationPromises = {}; // 12. IRR Validation + // fetchJSON resolves(null) on timeout/network-error/parse-failure rather than + // rejecting, so the .catch() below never sees the common failure mode -- a + // dead upstream would otherwise silently read as "0 entries, no mismatches, pass". validationPromises.irr = fetchJSON("https://irrexplorer.nlnog.net/api/prefixes/asn/" + rawAsn).then(function(irrData) { + if (irrData === null) { + return { status: "info", message: "IRR Explorer unavailable (fetch failed)", total_entries: 0, mismatches: [], mismatch_count: 0 }; + } var entries = Array.isArray(irrData) ? irrData : []; var mismatches = entries.filter(function(e) { if (!e.bgpOrigins && !e.bgp_origins) return false; @@ -2922,16 +4241,22 @@ const server = http.createServer(async (req, res) => { validationPromises.rpki_completeness = Promise.all( allPrefixes.map(function(pfx) { return validateRPKIWithCache(rawAsn, pfx); }) ).then(function(rpkiResults) { - var withRoa = rpkiResults.filter(function(r) { return r.status === "valid"; }); - var coverage = rpkiResults.length > 0 ? Math.round((withRoa.length / rpkiResults.length) * 100) : 0; - var overSpecific = rpkiResults.filter(function(r) { + var checkedResults = rpkiResults.filter(function(r) { return r.status !== "unavailable"; }); + var unavailableCount = rpkiResults.length - checkedResults.length; + var withRoa = checkedResults.filter(function(r) { return r.status === "valid"; }); + var coverage = checkedResults.length > 0 ? Math.round((withRoa.length / checkedResults.length) * 100) : 0; + var overSpecific = checkedResults.filter(function(r) { var mask = parseInt((r.prefix || "").split("/")[1] || "0"); return !r.prefix.includes(":") && mask >= 25 && r.status !== "valid"; }); + // If the local RPKI DB was unreachable for every prefix, we haven't actually + // checked anything -- say so instead of reporting a misleading pass/fail. + var allUnavailable = rpkiResults.length > 0 && checkedResults.length === 0; return { - status: coverage >= 90 ? "pass" : coverage >= 50 ? "warning" : "fail", + status: allUnavailable ? "info" : coverage >= 90 ? "pass" : coverage >= 50 ? "warning" : "fail", coverage_pct: coverage, - total_checked: rpkiResults.length, + total_checked: checkedResults.length, + db_unavailable_count: unavailableCount, with_roa: withRoa.length, over_specific: overSpecific.map(function(r) { return r.prefix; }), details: rpkiResults, @@ -2940,6 +4265,7 @@ const server = http.createServer(async (req, res) => { // 14. Abuse Contact Validation validationPromises.abuse_contact = fetchRipeStatCached("https://stat.ripe.net/data/abuse-contact-finder/data.json?resource=AS" + rawAsn).then(function(data) { + if (data === null) return { status: "info", message: "abuse-contact-finder unavailable (fetch failed)", contacts: [], has_valid_email: false }; var contacts = data && data.data && data.data.abuse_contacts ? data.data.abuse_contacts : []; var hasEmail = contacts.length > 0 && contacts.some(function(c) { return c && c.includes("@"); }); return { status: hasEmail ? "pass" : "fail", contacts: contacts, has_valid_email: hasEmail }; @@ -2949,14 +4275,25 @@ const server = http.createServer(async (req, res) => { validationPromises.blocklist = Promise.all( samplePrefixes.slice(0, 5).map(function(pfx) { return fetchRipeStatCached("https://stat.ripe.net/data/blocklist/data.json?resource=" + encodeURIComponent(pfx)).then(function(data) { + // fetchRipeStatCached resolves(null) on timeout/network-error rather than + // throwing, so the .catch() below never sees that case -- distinguish it + // explicitly instead of letting a failed lookup read as "not listed". + if (data === null) return { prefix: pfx, listed: false, checked: false }; var sources = data && data.data && data.data.sources ? data.data.sources : []; var listed = sources.filter(function(s) { return s.prefix_count > 0 || (s.entries && s.entries.length > 0); }); - return { prefix: pfx, listed: listed.length > 0, sources: listed.map(function(s) { return s.source || s.name || "unknown"; }) }; - }).catch(function() { return { prefix: pfx, listed: false, error: true }; }); + return { prefix: pfx, listed: listed.length > 0, checked: true, sources: listed.map(function(s) { return s.source || s.name || "unknown"; }) }; + }).catch(function() { return { prefix: pfx, listed: false, checked: false }; }); }) ).then(function(results) { - var listedPrefixes = results.filter(function(r) { return r.listed; }); - return { status: listedPrefixes.length === 0 ? "pass" : "fail", checked: results.length, listed_prefixes: listedPrefixes }; + var checkedResults = results.filter(function(r) { return r.checked; }); + var listedPrefixes = checkedResults.filter(function(r) { return r.listed; }); + var allUnchecked = results.length > 0 && checkedResults.length === 0; + return { + status: allUnchecked ? "info" : (listedPrefixes.length === 0 ? "pass" : "fail"), + checked: checkedResults.length, + unavailable: results.length - checkedResults.length, + listed_prefixes: listedPrefixes, + }; }).catch(function(e) { return { status: "error", error: String(e) }; }); // 16. MANRS Compliance — scraped from public participants list (24h cache) @@ -2969,6 +4306,7 @@ const server = http.createServer(async (req, res) => { validationPromises.rdns = Promise.all( samplePrefixes.slice(0, rdnsSampleSize).map(function(pfx) { return fetchRipeStatCached("https://stat.ripe.net/data/reverse-dns-consistency/data.json?resource=" + encodeURIComponent(pfx), { timeout: 4000 }).then(function(data) { + if (data === null) return { prefix: pfx, has_rdns: false, details: [], error: true }; var pfxData = data && data.data && data.data.prefixes ? data.data.prefixes : {}; var hasDelegation = false; var details = []; @@ -2996,11 +4334,19 @@ const server = http.createServer(async (req, res) => { }).catch(function() { return { prefix: pfx, has_rdns: false, error: true }; }); }) ).then(function(results) { - var withRdns = results.filter(function(r) { return r.has_rdns; }); - var coverage = results.length > 0 ? Math.round((withRdns.length / results.length) * 100) : 0; - // Include details of what failed - var failedPrefixes = results.filter(function(r) { return !r.has_rdns && !r.error; }).map(function(r) { return r.prefix; }); - return { status: coverage >= 80 ? "pass" : coverage >= 50 ? "warning" : "fail", coverage_pct: coverage, checked: results.length, results: results, failed_prefixes: failedPrefixes }; + var checkedResults = results.filter(function(r) { return !r.error; }); + var withRdns = checkedResults.filter(function(r) { return r.has_rdns; }); + var coverage = checkedResults.length > 0 ? Math.round((withRdns.length / checkedResults.length) * 100) : 0; + var failedPrefixes = checkedResults.filter(function(r) { return !r.has_rdns; }).map(function(r) { return r.prefix; }); + var allUnavailable = results.length > 0 && checkedResults.length === 0; + return { + status: allUnavailable ? "info" : (coverage >= 80 ? "pass" : coverage >= 50 ? "warning" : "fail"), + coverage_pct: coverage, + checked: checkedResults.length, + unavailable: results.length - checkedResults.length, + results: results, + failed_prefixes: failedPrefixes, + }; }).catch(function(e) { return { status: "error", error: String(e) }; }); // 18. BGP Visibility (uses routing-status API which is more reliable than visibility API) @@ -3022,7 +4368,9 @@ const server = http.createServer(async (req, res) => { } return { status: score >= 80 ? "pass" : score >= 50 ? "warning" : "fail", visibility_score: score, total_ris_peers: totalPeers, seen_by: seeingPeers, v4_seeing: v4.ris_peers_seeing || 0, v4_total: v4.total_ris_peers || 0, v6_seeing: v6.ris_peers_seeing || 0, v6_total: v6.total_ris_peers || 0, observed_neighbours: observedNeighbours, source: "bgproutes.io_fallback" }; }).catch(function() { - return { status: "fail", visibility_score: 0, total_ris_peers: 0, seen_by: 0, source: "unavailable" }; + // Neither RIPE routing-status nor the bgproutes.io fallback returned data -- + // this network hasn't actually been measured, not confirmed at 0% visibility. + return { status: "info", message: "visibility could not be measured (both data sources unavailable)", visibility_score: 0, total_ris_peers: 0, seen_by: 0, source: "unavailable" }; }); } return { status: score >= 80 ? "pass" : score >= 50 ? "warning" : "fail", visibility_score: score, total_ris_peers: totalPeers, seen_by: seeingPeers, v4_seeing: v4.ris_peers_seeing || 0, v4_total: v4.total_ris_peers || 0, v6_seeing: v6.ris_peers_seeing || 0, v6_total: v6.total_ris_peers || 0, observed_neighbours: observedNeighbours, source: "ripe_routing_status" }; @@ -3141,8 +4489,10 @@ const server = http.createServer(async (req, res) => { validationPromises.resource_cert = Promise.all( allPrefixes.map(function(pfx) { return validateRPKIWithCache(rawAsn, pfx); }) ).then(function(results) { - var hasRoa = results.some(function(r) { return r.status === "valid" || r.validating_roas > 0; }); - return { status: hasRoa ? "pass" : "fail", has_roas: hasRoa, checked: results.length, roa_count: results.filter(function(r) { return r.status === "valid"; }).length }; + var checked = results.filter(function(r) { return r.status !== "unavailable"; }); + var hasRoa = checked.some(function(r) { return r.status === "valid" || r.validating_roas > 0; }); + var allUnavailable = results.length > 0 && checked.length === 0; + return { status: allUnavailable ? "info" : hasRoa ? "pass" : "fail", has_roas: hasRoa, checked: checked.length, roa_count: checked.filter(function(r) { return r.status === "valid"; }).length }; }).catch(function(e) { return { status: "error", error: String(e) }; }); // Geolocation cross-ref with PeeringDB facilities @@ -3276,7 +4626,10 @@ const server = http.createServer(async (req, res) => { note: "left=upstream providers, right=downstream customers, uncertain=peers. Sorted by power score.", }, }; - resultCacheSet(validateResultCache, rawAsn, validateResult); + // Cache 0-prefix results only briefly (90s) — they may be due to temporary API failures + // Full results with prefixes are cached for the standard 15 minutes + const validateCacheTTL = allPrefixes.length === 0 ? 90 * 1000 : RESULT_CACHE_TTL; + resultCacheSet(validateResultCache, rawAsn, validateResult, validateCacheTTL); return res.end(JSON.stringify(validateResult, null, 2)); } catch (err) { res.writeHead(500); @@ -3371,6 +4724,16 @@ const server = http.createServer(async (req, res) => { if (!cachedIxlan && ixlanData) pdbSourceCache.set("netixlan", ixCacheKey, ixlanData); if (!cachedFac && facData) pdbSourceCache.set("netfac", String(netId), facData); + // local-db-client's getRipeStat* functions return status:"error" (not "ok") when + // the local Postgres DB query itself failed -- track which sources actually + // failed so we don't cache a DB hiccup's fake-empty result as if it were a + // genuine "this ASN has 0 prefixes" answer for the full 5-minute TTL. + const degradedSources = [ + ["RIPE Stat Prefixes", prefixData], ["RIPE Stat Neighbours", neighbourData], + ["RIPE Stat Overview", overviewData], ["RIPE Stat Visibility", visibilityData], + ["RIPE Stat PrefixSize", prefixSizeData], + ].filter(([, v]) => v && v.status === "error").map(([name]) => name); + const prefixes = prefixData?.data?.prefixes || []; const neighbours = neighbourData?.data?.neighbours || []; const overview = overviewData?.data || {}; @@ -3475,8 +4838,11 @@ const server = http.createServer(async (req, res) => { const rpkiStatuses = rpkiAllResults; const rpkiValid = rpkiStatuses.filter((r) => r.status === "valid").length; const rpkiInvalid = rpkiStatuses.filter((r) => r.status === "invalid").length; - const rpkiNotFound = rpkiStatuses.filter((r) => r.status !== "valid" && r.status !== "invalid").length; - const rpkiTotal = rpkiStatuses.length; + const rpkiUnavailable = rpkiStatuses.filter((r) => r.status === "unavailable").length; + const rpkiNotFound = rpkiStatuses.filter((r) => r.status !== "valid" && r.status !== "invalid" && r.status !== "unavailable").length; + // Exclude "unavailable" (DB error) from the coverage denominator -- a DB hiccup + // must not lower a network's displayed RPKI coverage percentage. + const rpkiTotal = rpkiStatuses.length - rpkiUnavailable; const rpkiCoverage = rpkiTotal > 0 ? Math.round((rpkiValid / rpkiTotal) * 100) : 0; let upstreams = neighbours @@ -3675,7 +5041,7 @@ const server = http.createServer(async (req, res) => { // ============================================================ // Multi-source cross-checks (run in parallel, non-blocking) // ============================================================ - let rpkiCrossCheck = { cloudflare_valid: 0, ripe_valid: 0, agreement_pct: 100, disagreements: [], sample_size: 0 }; + let rpkiCrossCheck = { cloudflare_valid: 0, ripe_valid: 0, agreement_pct: null, disagreements: [], sample_size: 0, comparable_size: 0 }; let prefixCrossCheck = { ripe_stat: prefixes.length, bgp_he_net: null, agreement: null, note: "" }; let neighbourCrossCheck = { ripe_stat_total: neighbours.length, bgp_he_net_total: null }; @@ -3689,6 +5055,13 @@ const server = http.createServer(async (req, res) => { if (rpkiCrossResult) rpkiCrossCheck = rpkiCrossResult; } catch (_e) { /* cross-check failed, keep defaults */ } + // bgp.he.net fetching is deliberately disabled (see the hardcoded + // Promise.resolve(null) a few hundred lines up, "bgp.he.net" timedFetch) -- + // bgpHeData is therefore always null and this whole branch, along with the + // prefix/neighbour cross-checks below, never actually runs. Left in place + // (not deleted) in case bgp.he.net fetching is re-enabled later, but + // overall_confidence below must not claim a 2-source agreement that never + // happened -- see the sources:1/2 handling further down. // Prefix count cross-check: compare RIPE Stat vs bgp.he.net if (bgpHeData) { const heV4 = bgpHeData.prefixes_v4 || 0; @@ -3717,10 +5090,12 @@ const server = http.createServer(async (req, res) => { prefixCrossCheck.note = "bgp.he.net data unavailable"; } - // Compute overall data quality + // Compute overall data quality. Only push a score for a cross-check that + // actually ran (agreement_pct !== null) -- an unrun/inconclusive check must + // not silently count as a perfect 100 in the average, and confidence must + // reflect "nothing was actually cross-checked" rather than defaulting high. const crossCheckScores = []; - // RPKI agreement - crossCheckScores.push(rpkiCrossCheck.agreement_pct); + if (rpkiCrossCheck.agreement_pct !== null) crossCheckScores.push(rpkiCrossCheck.agreement_pct); // Prefix agreement: convert to percentage if (prefixCrossCheck.bgp_he_net != null && prefixes.length > 0) { const pfxRatio = Math.min(prefixes.length, prefixCrossCheck.bgp_he_net) / Math.max(prefixes.length, prefixCrossCheck.bgp_he_net); @@ -3733,15 +5108,15 @@ const server = http.createServer(async (req, res) => { } const avgAgreement = crossCheckScores.length > 0 ? Math.round(crossCheckScores.reduce((a, b) => a + b, 0) / crossCheckScores.length) - : 100; - const overallConfidence = avgAgreement > 90 ? "high" : avgAgreement >= 70 ? "medium" : "low"; + : null; + const overallConfidence = avgAgreement === null ? "unknown" : avgAgreement > 90 ? "high" : avgAgreement >= 70 ? "medium" : "low"; const dataQuality = { sources_queried: ["PeeringDB", "RIPE Stat", "bgp.he.net", "Cloudflare RPKI", "RIPE RPKI Validator"], cross_checks: { - rpki: { sources: 2, agreement_pct: rpkiCrossCheck.agreement_pct, sample_size: rpkiCrossCheck.sample_size, disagreements: rpkiCrossCheck.disagreements }, - prefixes: { sources: 2, agreement_pct: prefixCrossCheck.bgp_he_net != null ? Math.round((Math.min(prefixes.length, prefixCrossCheck.bgp_he_net) / Math.max(prefixes.length, prefixCrossCheck.bgp_he_net || 1)) * 100) : null, ripe_stat: prefixCrossCheck.ripe_stat, bgp_he_net: prefixCrossCheck.bgp_he_net, note: prefixCrossCheck.note }, - neighbours: { sources: 2, agreement_pct: neighbourCrossCheck.bgp_he_net_total != null && neighbours.length > 0 ? Math.round((Math.min(neighbours.length, neighbourCrossCheck.bgp_he_net_total) / Math.max(neighbours.length, neighbourCrossCheck.bgp_he_net_total)) * 100) : null, ripe_stat_total: neighbourCrossCheck.ripe_stat_total, bgp_he_net_total: neighbourCrossCheck.bgp_he_net_total }, + rpki: { sources: rpkiCrossCheck.agreement_pct !== null ? 2 : 1, agreement_pct: rpkiCrossCheck.agreement_pct, sample_size: rpkiCrossCheck.sample_size, comparable_size: rpkiCrossCheck.comparable_size, disagreements: rpkiCrossCheck.disagreements }, + prefixes: { sources: prefixCrossCheck.bgp_he_net != null ? 2 : 1, agreement_pct: prefixCrossCheck.bgp_he_net != null ? Math.round((Math.min(prefixes.length, prefixCrossCheck.bgp_he_net) / Math.max(prefixes.length, prefixCrossCheck.bgp_he_net || 1)) * 100) : null, ripe_stat: prefixCrossCheck.ripe_stat, bgp_he_net: prefixCrossCheck.bgp_he_net, note: prefixCrossCheck.note }, + neighbours: { sources: neighbourCrossCheck.bgp_he_net_total != null ? 2 : 1, agreement_pct: neighbourCrossCheck.bgp_he_net_total != null && neighbours.length > 0 ? Math.round((Math.min(neighbours.length, neighbourCrossCheck.bgp_he_net_total) / Math.max(neighbours.length, neighbourCrossCheck.bgp_he_net_total)) * 100) : null, ripe_stat_total: neighbourCrossCheck.ripe_stat_total, bgp_he_net_total: neighbourCrossCheck.bgp_he_net_total }, }, overall_confidence: overallConfidence, overall_agreement_pct: avgAgreement, @@ -3793,6 +5168,7 @@ const server = http.createServer(async (req, res) => { timestamp: new Date().toISOString(), rpki_prefixes_checked: rpkiTotal, total_prefixes: prefixes.length, + degraded_sources: degradedSources, }, network: { asn: parseInt(asn), @@ -3832,6 +5208,7 @@ const server = http.createServer(async (req, res) => { valid: rpkiValid, invalid: rpkiInvalid, not_found: rpkiNotFound, + unavailable: rpkiUnavailable, checked: rpkiTotal, details: rpkiStatuses, cross_check: rpkiCrossCheck, @@ -3917,7 +5294,9 @@ const server = http.createServer(async (req, res) => { // Update duration to include cross-check time result.meta.duration_ms = Date.now() - start; - cacheSet(cacheKey, result, CACHE_TTL_LOOKUP); + // A DB hiccup shouldn't get cached as this ASN's answer for the full 5min -- + // retry soon instead of repeating a degraded result to every visitor. + cacheSet(cacheKey, result, degradedSources.length > 0 ? CACHE_TTL_LOOKUP_DEGRADED : CACHE_TTL_LOOKUP); res.end(JSON.stringify(result, null, 2)); } catch (err) { const duration = Date.now() - start; @@ -4021,7 +5400,10 @@ const server = http.createServer(async (req, res) => { source_url: "https://stat.ripe.net/data/asn-neighbours/data.json?resource=AS" + rawAsn, }; - cacheSet(cacheKey, result, 10 * 60 * 1000); // 10 min cache + // A neighbourData fetch failure (not a genuine zero-neighbour ASN) would + // otherwise get cached as "0 upstreams/downstreams/peers" for the full 10min -- + // match the existing /api/validate precedent (90s TTL for suspicious zero counts). + cacheSet(cacheKey, result, neighbourData ? 10 * 60 * 1000 : 90 * 1000); res.writeHead(200, { "Content-Type": "application/json" }); return res.end(JSON.stringify(result, null, 2)); } catch (err) { @@ -4678,10 +6060,14 @@ const server = http.createServer(async (req, res) => { // Feature 28: Submarine Cable overlay (TeleGeography proxy) // ── Submarine Cables map data ───────────────────────────────── - // Migrated to src/features/submarine-cables/ + if (reqPath === '/api/submarine-cables') { + return proxyToApiServer(req, res, req.url); + } // ── Global datacenter/IXP map (PeeringDB proxy) ─────────────── - // Migrated to src/features/global-infra/ + if (reqPath === '/api/global-infra') { + return proxyToApiServer(req, res, req.url); + } // ── Changelog page ───────────────────────────────────────── @@ -4728,48 +6114,476 @@ ${html} } // ── BGP Community Decoder ──────────────────────────────────── - // Migrated to src/features/bgp-communities/ + if (reqPath === '/api/communities') { + return proxyToApiServer(req, res, req.url); + } // ── IRR Audit ───────────────────────────────────────────────── - // Migrated to src/features/irr-audit/ - + if (reqPath === '/api/irr-audit') { + return proxyToApiServer(req, res, req.url); + } // ── AS-SET Expander ─────────────────────────────────────────── - // Migrated to src/features/asset-expand/ - + if (reqPath === '/api/asset-expand') { + return proxyToApiServer(req, res, req.url); + } + // ── Routing History (prefix table via RIPE Stat routing-history) ── - // Migrated to src/features/rpki-history/ + if (reqPath === '/api/rpki-history') { + return proxyToApiServer(req, res, req.url); + } // ── AS-PATH Visualizer (RIPE Stat looking-glass) ──────────────── - // Migrated to src/features/aspath/ + if (reqPath === '/api/aspath') { + return proxyToApiServer(req, res, req.url); + } // ── Looking Glass (RIPE Stat) ───────────────────────────────── - // Migrated to src/features/looking-glass/ + if (reqPath === '/api/looking-glass') { + return proxyToApiServer(req, res, req.url); + } // ── IXP Peering Matrix ──────────────────────────────────────── - // Migrated to src/features/ix-matrix/ + if (reqPath === '/api/ix-matrix') { + return proxyToApiServer(req, res, req.url); + } - // ── Hijack Subscribe ────────────────────────────────────────── - // Migrated to src/features/hijack-subscribe/ + // ── CORS preflight for all /api/webhooks + /api/hijacks ────── + if ((reqPath.startsWith('/api/webhooks') || reqPath.startsWith('/api/hijacks') || reqPath === '/api/hijack-subscribe') && req.method === 'OPTIONS') { + res.setHeader('Access-Control-Allow-Origin', '*'); + res.setHeader('Access-Control-Allow-Methods', 'GET,POST,DELETE,OPTIONS'); + res.setHeader('Access-Control-Allow-Headers', 'Content-Type'); + res.writeHead(204); return res.end(); + } + + // ── Webhook: Register ───────────────────────────────────────── + // POST /api/webhooks?asn=X body: { endpoint_url, timeout_ms?, max_retries? } + if (reqPath === '/api/webhooks' && req.method === 'POST') { + res.setHeader('Content-Type', 'application/json'); + res.setHeader('Access-Control-Allow-Origin', '*'); + const params = new URL(req.url, 'http://localhost').searchParams; + const asn = params.get('asn') ? String(params.get('asn')).replace(/[^0-9]/g,'') : ''; + if (!asn) { res.writeHead(400); return res.end(JSON.stringify({error:'asn query param required'})); } + let body = ''; + req.on('data', c => body += c); + req.on('end', () => { + try { + const { endpoint_url, timeout_ms, max_retries } = JSON.parse(body || '{}'); + if (!endpoint_url || !endpoint_url.startsWith('http')) { + res.writeHead(400); return res.end(JSON.stringify({error:'endpoint_url required (http/https)'})); + } + const subs = loadWebhookSubs(); + const exists = subs.find(s => s.asn === asn && s.endpoint_url === endpoint_url); + if (exists) { res.writeHead(200); return res.end(JSON.stringify({id: exists.id, already_exists: true, secret_key: exists.secret})); } + const webhookToken = crypto.randomBytes(32).toString('hex'); + const entry = { + id: crypto.randomBytes(8).toString('hex'), + asn, endpoint_url, + secret: webhookToken, + timeout_ms: timeout_ms || 10000, + max_retries: max_retries || 5, + active: true, + created_at: new Date().toISOString(), + last_triggered_at: null, + failure_count: 0 + }; + subs.push(entry); + saveWebhookSubs(subs); + // Also ensure this ASN is in hijack monitoring + const hijackSubs = loadHijackSubs(); + if (!hijackSubs.find(s => s.asn === asn)) { + checkHijacksForAsn(asn).then(prefixes => { + // null (lookup failed) becomes [] here so this record's shape stays + // consistent; runHijackCheck retries the real baseline next cycle. + hijackSubs.push({ asn, prefixes: prefixes || [], subscribed: new Date().toISOString() }); + saveHijackSubs(hijackSubs); + }); + } + res.writeHead(201); + res.end(JSON.stringify({ id: entry.id, asn, endpoint_url, secret_key: secret, created_at: entry.created_at, note: 'Store secret_key safely — it signs all webhook payloads' })); + } catch(e) { res.writeHead(400); res.end(JSON.stringify({error: e.message})); } + }); + return; + } + + // ── Webhook: List ───────────────────────────────────────────── + // GET /api/webhooks?asn=X + if (reqPath === '/api/webhooks' && req.method === 'GET') { + res.setHeader('Content-Type', 'application/json'); + res.setHeader('Access-Control-Allow-Origin', '*'); + const params = new URL(req.url, 'http://localhost').searchParams; + const asn = params.get('asn') ? String(params.get('asn')).replace(/[^0-9]/g,'') : ''; + const subs = loadWebhookSubs(); + const result = (asn ? subs.filter(s => s.asn === asn) : subs) + .map(s => ({ id: s.id, asn: s.asn, endpoint_url: s.endpoint_url, active: s.active, failure_count: s.failure_count, last_triggered_at: s.last_triggered_at, created_at: s.created_at })); + res.writeHead(200); + return res.end(JSON.stringify({ webhooks: result, total: result.length })); + } + + // ── Webhook: Delete ─────────────────────────────────────────── + // DELETE /api/webhooks/:id + if (reqPath.startsWith('/api/webhooks/') && req.method === 'DELETE' && !reqPath.includes('/test')) { + res.setHeader('Content-Type', 'application/json'); + res.setHeader('Access-Control-Allow-Origin', '*'); + const id = reqPath.split('/')[3]; + const subs = loadWebhookSubs(); + const idx = subs.findIndex(s => s.id === id); + if (idx === -1) { res.writeHead(404); return res.end(JSON.stringify({error:'webhook not found'})); } + subs.splice(idx, 1); + saveWebhookSubs(subs); + res.writeHead(200); + return res.end(JSON.stringify({ deleted: true, id })); + } + + // ── Webhook: Test ───────────────────────────────────────────── + // POST /api/webhooks/:id/test + if (reqPath.match(/^\/api\/webhooks\/[^/]+\/test$/) && req.method === 'POST') { + res.setHeader('Content-Type', 'application/json'); + res.setHeader('Access-Control-Allow-Origin', '*'); + const id = reqPath.split('/')[3]; + const subs = loadWebhookSubs(); + const sub = subs.find(s => s.id === id); + if (!sub) { res.writeHead(404); return res.end(JSON.stringify({error:'webhook not found'})); } + const testPayload = { event: 'test', asn: sub.asn, message: 'PeerCortex webhook test — if you receive this, delivery works!', timestamp: new Date().toISOString() }; + const start = Date.now(); + deliverWebhook(sub, testPayload, 1).then(result => { + res.writeHead(result.ok ? 200 : 502); + res.end(JSON.stringify({ ok: result.ok, response_time_ms: Date.now() - start, status: result.status, error: result.error || null })); + }); + return; + } + + // ── Hijack Events: List ─────────────────────────────────────── + // GET /api/hijacks?asn=X&limit=50&resolved=false + if (reqPath === '/api/hijacks' && req.method === 'GET') { + const params = new URL(req.url, 'http://localhost').searchParams; + const asn = params.get('asn') ? String(params.get('asn')).replace(/[^0-9]/g,'') : ''; + const limit = Math.min(parseInt(params.get('limit') || '50', 10), 200); + const resolvedFilter = params.get('resolved'); + res.setHeader('Content-Type', 'application/json'); + res.setHeader('Access-Control-Allow-Origin', '*'); + res.setHeader('Cache-Control', 'no-store'); + let events = loadHijackAlerts(); + if (asn) events = events.filter(a => String(a.asn) === asn); + if (resolvedFilter === 'false') events = events.filter(a => !a.resolved); + if (resolvedFilter === 'true') events = events.filter(a => a.resolved); + const total = events.length; + events = events.slice(-limit).reverse(); + res.writeHead(200); + return res.end(JSON.stringify({ total, events })); + } + + // ── Hijack Events: Resolve ──────────────────────────────────── + // POST /api/hijacks/:id/resolve body: { resolution_notes? } + if (reqPath.match(/^\/api\/hijacks\/[^/]+\/resolve$/) && req.method === 'POST') { + res.setHeader('Content-Type', 'application/json'); + res.setHeader('Access-Control-Allow-Origin', '*'); + const id = reqPath.split('/')[3]; + let body = ''; + req.on('data', c => body += c); + req.on('end', () => { + const alerts = loadHijackAlerts(); + const alert = alerts.find(a => a.id === id); + if (!alert) { res.writeHead(404); return res.end(JSON.stringify({error:'event not found'})); } + alert.resolved = true; + alert.resolved_at = new Date().toISOString(); + try { const { resolution_notes } = JSON.parse(body || '{}'); if (resolution_notes) alert.resolution_notes = resolution_notes; } catch(_){} + saveHijackAlerts(alerts); + res.writeHead(200); + res.end(JSON.stringify({ resolved: true, id, resolved_at: alert.resolved_at })); + }); + return; + } + + // ── Hijack Subscribe (legacy, kept for backwards compatibility) ─ + if (reqPath === '/api/hijack-subscribe' && req.method === 'POST') { + res.setHeader('Content-Type', 'application/json'); + res.setHeader('Access-Control-Allow-Origin', '*'); + let body = ''; + req.on('data', c => body += c); + req.on('end', async () => { + try { + const { asn } = JSON.parse(body || '{}'); + const asnNum = String(asn || '').replace(/[^0-9]/g,''); + if (!asnNum) { res.writeHead(400); return res.end(JSON.stringify({error:'asn required'})); } + const subs = loadHijackSubs(); + const exists = subs.find(s => s.asn === asnNum); + if (!exists) { + const prefixes = await checkHijacksForAsn(asnNum); + // prefixes may be null if the lookup failed just now -- store an empty + // array so this record shape stays consistent; runHijackCheck's own + // "!sub.prefixes.length" check will retry establishing the real + // baseline on its next cycle rather than treating this as permanent. + subs.push({ asn: asnNum, prefixes: prefixes || [], subscribed: new Date().toISOString() }); + saveHijackSubs(subs); + } + const sub = subs.find(s => s.asn === asnNum) || { prefixes: [] }; + res.writeHead(200); + res.end(JSON.stringify({ ok: true, asn: asnNum, monitoring: true, prefix_count: (sub.prefixes || []).length })); + } catch(e) { res.writeHead(500); res.end(JSON.stringify({error:e.message})); } + }); + return; + } + + // ── Hijack Alerts (legacy endpoint, kept for backwards compatibility) ─ + if (reqPath.startsWith('/api/hijack-alerts')) { + const params = new URL(req.url, 'http://localhost').searchParams; + const asn = (params.get('asn') || '').replace(/[^0-9]/g,''); + res.setHeader('Content-Type', 'application/json'); + res.setHeader('Access-Control-Allow-Origin', '*'); + res.setHeader('Cache-Control', 'no-store'); + const allAlerts = loadHijackAlerts(); + const alerts = asn ? allAlerts.filter(a => String(a.asn) === asn) : allAlerts; + const subs = loadHijackSubs(); + const sub = subs.find(s => s.asn === asn); + res.writeHead(200); + return res.end(JSON.stringify({ asn, alerts: alerts.slice(-50), monitoring: !!sub, prefix_count: sub ? sub.prefixes.length : 0 })); + } + // ── Hijack Alerts (legacy read) ─────────────────────────────── - // Migrated to src/routes/hijack-alerts (Fastify feature) + // src/routes/hijack-alerts.ts registers /api/webhooks + /api/hijacks under + // the same paths this file already serves above (file-backed, live). + // Deliberately NOT proxied here — that would shadow working data with an + // empty Postgres-backed implementation. Not a gap, just two feature + // branches that ended up naming their routes the same thing. // ── Changelog JSON API ──────────────────────────────────────── - // Migrated to src/features/changelog/ + if (reqPath === '/changelog-data') { + return proxyToApiServer(req, res, req.url); + } // ── bio-rd RIB routes ───────────────────────────────────────── - // Migrated to src/features/rib/ + if (reqPath.startsWith('/api/rib/')) { + return proxyToApiServer(req, res, req.url); + } // ── Prefix Changes ────────────────────────────────────────────── - // Migrated to src/features/prefix-changes/ + if (reqPath === '/api/prefix-changes') { + return proxyToApiServer(req, res, req.url); + } + + // ============================================================ + // FEATURE 2: PDF Export + // GET /api/export/pdf?asn=X&format=report|executive|technical + // GET /api/export/pdf/compare?asn1=X&asn2=Y + // ============================================================ + + // Helper: fetch JSON from internal endpoint + async function fetchInternal(path) { + return new Promise((resolve, reject) => { + const opts = { hostname: '127.0.0.1', port: PORT, path, method: 'GET' }; + const req2 = http.request(opts, res2 => { + let body = ''; + res2.on('data', c => body += c); + res2.on('end', () => { + try { resolve(JSON.parse(body)); } + catch(e) { reject(new Error('JSON parse failed: ' + body.slice(0, 200))); } + }); + }); + req2.on('error', reject); + req2.setTimeout(30000, () => { req2.destroy(); reject(new Error('Internal request timeout')); }); + req2.end(); + }); + } + + if (reqPath === '/api/export/pdf' && req.method === 'GET') { + const rawAsn = (url.searchParams.get('asn') || '').replace(/[^0-9]/g, ''); + const format = ['executive', 'technical', 'report'].includes(url.searchParams.get('format')) + ? url.searchParams.get('format') : 'report'; + if (!rawAsn) { + res.writeHead(400, {'Content-Type':'application/json'}); + return res.end(JSON.stringify({ error: 'Missing asn parameter' })); + } + const cacheKey = `pdf:${rawAsn}:${format}`; + const cached = pdfCacheGet(cacheKey); + if (cached) { + res.writeHead(200, { ...{'Content-Type':'application/json'}, 'Content-Type': 'application/pdf', 'Content-Disposition': `inline; filename="peercortex-AS${rawAsn}-${format}.pdf"`, 'X-Cache': 'HIT', 'Content-Length': cached.length }); + return res.end(cached); + } + try { + const [validateData, aspaData] = await Promise.all([ + fetchInternal(`/api/validate?asn=${rawAsn}`), + fetchInternal(`/api/aspa?asn=${rawAsn}`).catch(() => null), + ]); + if (validateData.error) { + res.writeHead(400, {'Content-Type':'application/json'}); + return res.end(JSON.stringify({ error: validateData.error })); + } + const html = buildPdfHtml(validateData, aspaData, format); + const pdfBuf = await renderHtmlToPdf(html); + pdfCacheSet(cacheKey, pdfBuf); + res.writeHead(200, { ...{'Content-Type':'application/json'}, 'Content-Type': 'application/pdf', 'Content-Disposition': `inline; filename="peercortex-AS${rawAsn}-${format}.pdf"`, 'Content-Length': pdfBuf.length }); + return res.end(pdfBuf); + } catch (err) { + console.error('[PDF] Error:', err.message); + res.writeHead(503, {'Content-Type':'application/json'}); + return res.end(JSON.stringify({ error: 'PDF generation failed', message: err.message })); + } + } + + if (reqPath === '/api/export/pdf/compare' && req.method === 'GET') { + const asn1 = (url.searchParams.get('asn1') || '').replace(/[^0-9]/g, ''); + const asn2 = (url.searchParams.get('asn2') || '').replace(/[^0-9]/g, ''); + if (!asn1 || !asn2) { + res.writeHead(400, {'Content-Type':'application/json'}); + return res.end(JSON.stringify({ error: 'Missing asn1 or asn2 parameter' })); + } + if (asn1 === asn2) { + res.writeHead(400, {'Content-Type':'application/json'}); + return res.end(JSON.stringify({ error: 'asn1 and asn2 must be different' })); + } + const cacheKey = `pdf:compare:${Math.min(+asn1,+asn2)}:${Math.max(+asn1,+asn2)}`; + const cached = pdfCacheGet(cacheKey); + if (cached) { + res.writeHead(200, { ...{'Content-Type':'application/json'}, 'Content-Type': 'application/pdf', 'Content-Disposition': `inline; filename="peercortex-AS${asn1}-vs-AS${asn2}.pdf"`, 'X-Cache': 'HIT', 'Content-Length': cached.length }); + return res.end(cached); + } + try { + const [v1, a1, l1, v2, a2, l2] = await Promise.all([ + fetchInternal(`/api/validate?asn=${asn1}`), + fetchInternal(`/api/aspa?asn=${asn1}`).catch(() => null), + fetchInternal(`/api/lookup?asn=${asn1}`).catch(() => null), + fetchInternal(`/api/validate?asn=${asn2}`), + fetchInternal(`/api/aspa?asn=${asn2}`).catch(() => null), + fetchInternal(`/api/lookup?asn=${asn2}`).catch(() => null), + ]); + if (v1.error || v2.error) { + res.writeHead(400, {'Content-Type':'application/json'}); + return res.end(JSON.stringify({ error: v1.error || v2.error })); + } + const html = buildComparisonPdfHtml(v1, a1, l1, v2, a2, l2); + const pdfBuf = await renderHtmlToPdf(html); + pdfCacheSet(cacheKey, pdfBuf); + res.writeHead(200, { ...{'Content-Type':'application/json'}, 'Content-Type': 'application/pdf', 'Content-Disposition': `inline; filename="peercortex-AS${asn1}-vs-AS${asn2}.pdf"`, 'Content-Length': pdfBuf.length }); + return res.end(pdfBuf); + } catch (err) { + console.error('[PDF] Error:', err.message); + res.writeHead(503, {'Content-Type':'application/json'}); + return res.end(JSON.stringify({ error: 'PDF generation failed', message: err.message })); + } + } + + // CORS preflight for PDF export (already handled globally above, belt-and-suspenders) + if (reqPath.startsWith('/api/export/') && req.method === 'OPTIONS') { + res.writeHead(204); + return res.end(); + } + + // ============================================================ + // FEATURE 3: ASPA Adoption Tracker — API + Dashboard + // GET /aspa-adoption → dashboard HTML + // GET /api/aspa-adoption-stats?period=7d|30d|1y → JSON trend + // GET /api/aspa-adoption-stats/export?format=csv|json&period=30d + // ============================================================ + + if (reqPath === '/aspa-adoption') { + res.setHeader('Content-Type', 'text/html; charset=utf-8'); + res.writeHead(200); + return res.end(buildAspaAdoptionDashboard()); + } + + if (reqPath === '/api/aspa-adoption-stats' && req.method === 'GET') { + const period = ['7d','30d','90d','1y'].includes(url.searchParams.get('period')) + ? url.searchParams.get('period') : '30d'; + const trend = getAdoptionTrend(period); + const latest = aspaAdoptionDailyHistory[aspaAdoptionDailyHistory.length - 1]; + const prev = aspaAdoptionDailyHistory[aspaAdoptionDailyHistory.length - 2]; + + // Linear regression forecast + function forecast(data, daysAhead) { + if (data.length < 2) return null; + const n = data.length; + const xs = data.map((_, i) => i); + const ys = data.map(d => d.coverage_pct_atlas); + const xMean = xs.reduce((a,b)=>a+b,0)/n; + const yMean = ys.reduce((a,b)=>a+b,0)/n; + const num = xs.reduce((s,x,i)=>s+(x-xMean)*(ys[i]-yMean),0); + const den = xs.reduce((s,x)=>s+(x-xMean)**2,0); + if (den===0) return yMean; + const slope = num/den; + return Math.max(0, Math.min(100, Math.round((yMean + slope*(n-1+daysAhead))*100)/100)); + } + + const trend30 = getAdoptionTrend('30d'); + const result = { + period, + current: { + date: latest?.date, + aspa_objects: latest?.aspa_objects ?? rpkiAspaMap.size, + roa_count: latest?.roa_count, + atlas_asns_total: latest?.atlas_asns_total ?? 0, + atlas_asns_with_aspa: latest?.atlas_asns_with_aspa ?? 0, + coverage_pct_atlas: latest?.coverage_pct_atlas ?? 0, + delta_from_previous: prev ? (latest?.aspa_objects ?? 0) - prev.aspa_objects : 0, + }, + trend: trend.map(s => ({ + date: s.date, + aspa_objects: s.aspa_objects, + coverage_pct_atlas: s.coverage_pct_atlas, + atlas_asns_total: s.atlas_asns_total, + })), + forecast: { + predicted_90d: forecast(trend30, 90), + confidence: trend30.length >= 10 ? 0.75 : 0.5, + method: 'linear_regression', + based_on_samples: trend30.length, + }, + meta: { + total_snapshots: aspaAdoptionDailyHistory.length, + last_updated: latest?.date ?? null, + denominator: 'atlas_visible_asns', + source: 'rpki_cloudflare_feed', + } + }; + res.setHeader('Content-Type', 'application/json'); + res.writeHead(200); + return res.end(JSON.stringify(result, null, 2)); + } + + if (reqPath === '/api/aspa-adoption-stats/export' && req.method === 'GET') { + const fmt = url.searchParams.get('format') === 'csv' ? 'csv' : 'json'; + const period = ['7d','30d','90d','1y'].includes(url.searchParams.get('period')) + ? url.searchParams.get('period') : '30d'; + const data = getAdoptionTrend(period); + + if (fmt === 'csv') { + const header = 'date,aspa_objects,roa_count,atlas_asns_total,atlas_asns_with_aspa,coverage_pct_atlas,aspa_delta\n'; + const rows = data.map(s => + `${s.date},${s.aspa_objects},${s.roa_count},${s.atlas_asns_total},${s.atlas_asns_with_aspa},${s.coverage_pct_atlas},${s.aspa_delta??0}` + ).join('\n'); + res.setHeader('Content-Type', 'text/csv'); + res.setHeader('Content-Disposition', `attachment; filename="peercortex-aspa-adoption-${period}.csv"`); + res.writeHead(200); + return res.end(header + rows); + } + + res.setHeader('Content-Type', 'application/json'); + res.setHeader('Content-Disposition', `attachment; filename="peercortex-aspa-adoption-${period}.json"`); + res.writeHead(200); + return res.end(JSON.stringify({ period, count: data.length, data }, null, 2)); + } + + // GET /api/ipv6-adoption-stats?refresh=1 + if (reqPath === '/api/ipv6-adoption-stats' && req.method === 'GET') { + const force = url.searchParams.get('refresh') === '1'; + try { + const data = await fetchIpv6AdoptionStats(force); + res.setHeader('Content-Type', 'application/json'); + res.writeHead(200); + return res.end(JSON.stringify(data, null, 2)); + } catch (err) { + res.writeHead(503); + return res.end(JSON.stringify({ error: 'IPv6 stats unavailable', message: err.message })); + } + } // 404 res.writeHead(404); res.end( JSON.stringify({ - error: "Not found. Endpoints: /api/health, /api/validate?asn=X, /api/lookup?asn=X, /api/aspa?asn=X, /api/aspa/verify?asn=X, /api/bgproutes?asn=X, /api/compare?asn1=X&asn2=Y, /api/peers/find?ix=NAME, /api/prefix/detail?prefix=X, /api/ix/detail?ix_id=X", + error: "Not found. Endpoints: /api/health, /api/validate?asn=X, /api/lookup?asn=X, /api/aspa?asn=X, /api/aspa/verify?asn=X, /api/bgproutes?asn=X, /api/compare?asn1=X&asn2=Y, /api/peers/find?ix=NAME, /api/prefix/detail?prefix=X, /api/ix/detail?ix_id=X, /api/export/pdf?asn=X&format=report|executive|technical, /api/export/pdf/compare?asn1=X&asn2=Y, /api/aspa-adoption-stats?period=30d, /api/ipv6-adoption-stats", }) ); }); @@ -4931,8 +6745,11 @@ loadRipeStatCacheFromDisk("/opt/peercortex-app/.ripe-stat-cache.json"); // Phase 1: Fetch fresh RPKI feed (ASPA + ROA) + Atlas probes + PDB org countries + MANRS participants ensureManrsCache(); // fire-and-forget, 24h cache Promise.all([fetchRpkiAspaFeed(), fetchAllAtlasProbes(), fetchPdbOrgCountries()]).then(() => { + // Re-record ASPA adoption snapshot now that Atlas data is fully loaded + recordAspaAdoptionSnapshot(rpkiAspaMap.size, roaStore.count); + server.listen(PORT, "0.0.0.0", () => { - console.log("PeerCortex v0.6.1 running on http://0.0.0.0:" + PORT); + console.log("PeerCortex v0.6.5 running on http://0.0.0.0:" + PORT); console.log("bgproutes.io API key: " + (BGPROUTES_API_KEY ? "configured" : "NOT configured")); console.log("PeeringDB API key: " + (PEERINGDB_API_KEY ? "configured" : "NOT configured")); console.log("RPKI ASPA objects: " + rpkiAspaMap.size); diff --git a/src/api/index.ts b/src/api/index.ts new file mode 100644 index 0000000..b9cfa71 --- /dev/null +++ b/src/api/index.ts @@ -0,0 +1,49 @@ +import fs from 'fs' +import { initializeDatabase, closeDatabaseConnection } from '../lib/db' + +function loadEnv(): void { + const envPath = process.env.ENV_PATH ?? '/opt/peercortex-app/.env' + try { + const envContent = fs.readFileSync(envPath, 'utf8') + for (const line of envContent.split('\n')) { + const trimmed = line.trim() + if (!trimmed || trimmed.startsWith('#')) continue + const eqIdx = trimmed.indexOf('=') + if (eqIdx > 0) { + const key = trimmed.substring(0, eqIdx).trim() + const val = trimmed.substring(eqIdx + 1).trim() + if (!process.env[key]) process.env[key] = val + } + } + console.log('[API] Environment variables loaded from', envPath) + } catch { + console.warn('[API] Could not read .env file at', envPath) + } +} + +async function main(): Promise { + loadEnv() + + // initializeDatabase() must run before anything imports src/routes/hijack-alerts, + // which calls getDatabase() at module load time. Dynamic import defers evaluation + // of ./server (and its own static imports) until after the pool exists. + initializeDatabase() + + const { startApiServer } = await import('./server.js') + const port = parseInt(process.env.API_PORT ?? '3102', 10) + await startApiServer(port) +} + +async function shutdown(signal: string): Promise { + console.log(`[API] ${signal} received, shutting down`) + await closeDatabaseConnection() + process.exit(0) +} + +process.on('SIGTERM', () => void shutdown('SIGTERM')) +process.on('SIGINT', () => void shutdown('SIGINT')) + +main().catch((error) => { + console.error('[API] Fatal startup error:', error) + process.exit(1) +}) diff --git a/src/api/server.ts b/src/api/server.ts index 513807f..0b13c5f 100644 --- a/src/api/server.ts +++ b/src/api/server.ts @@ -17,7 +17,7 @@ import { changelogRoutes } from '../features/changelog/routes' import { ribRoutes } from '../features/rib/routes' import { hijackSubscribeRoutes } from '../features/hijack-subscribe/routes' -export async function createApiServer(port: number = 3100) { +export async function createApiServer(_port: number = 3102) { const fastify = Fastify({ logger: { level: process.env.LOG_LEVEL ?? 'info', @@ -66,7 +66,7 @@ export async function createApiServer(port: number = 3100) { return fastify } -export async function startApiServer(port: number = 3100): Promise { +export async function startApiServer(port: number = 3102): Promise { const server = await createApiServer(port) try { diff --git a/src/aspa/validator.ts b/src/aspa/validator.ts index a27e30b..44624b5 100644 --- a/src/aspa/validator.ts +++ b/src/aspa/validator.ts @@ -242,15 +242,22 @@ export function validateUpstream( } /** - * Validate an AS path in the downstream direction per draft-ietf-sidrops-aspa-verification. + * Validate an AS path in the downstream direction per + * draft-ietf-sidrops-aspa-verification Section 5.5. * - * Reverses the path and applies the upstream validation procedure. - * Downstream validation is used when the validating AS is receiving - * a route from a customer rather than a provider. + * Unlike upstream validation, a downstream path may legitimately contain + * BOTH an up-ramp (customer->provider hops near the origin) AND a down-ramp + * (provider->customer hops near the validator), transitioning at most once + * -- e.g. origin -> its providers -> a peering exchange -> validator's + * providers -> validator. A naive "reverse the path and reapply upstream + * validation" does not implement this: it would reject any path with a + * legitimate down-ramp segment. This computes the four ramp lengths the + * draft actually defines (max/min up-ramp, max/min down-ramp) from two + * independent scans and applies the draft's three halt conditions in order. * - * Per draft-ietf-sidrops-aspa-verification, the downstream verification is the mirror image of upstream: - * - Reverse the path so the "origin" from the downstream perspective is leftmost. - * - Apply the same provider-authorization checks. + * Verified 2026-07-16 against a worked example fetched from the draft (an + * N=4 path with a single unattested "kink" resolves to valid; a path with + * definite authorization failures on both ends resolves to invalid). * * @param path - AS path to validate (leftmost = closest to validator) * @param aspaObjects - Map of customer ASN to ASPA object @@ -260,23 +267,103 @@ export function validateDownstream( path: ReadonlyArray, aspaObjects: ReadonlyMap ): ASPAValidationResult { - // Downstream: reverse the path and apply upstream logic. - const reversedPath = [...path].reverse(); - const result = validateUpstream(reversedPath, aspaObjects); + const dedupedPath = deduplicatePath(path); + const N = dedupedPath.length; - // Map violations back to original path positions - const originalLength = deduplicatePath(path).length; - const remappedViolations: ReadonlyArray = result.violations.map( - (v) => ({ - ...v, - position: originalLength - 1 - v.position, - }) - ); + if (N <= 2) { + return { + status: "valid", + path: [...dedupedPath], + violations: [], + leakDetected: false, + confidence: 1.0, + }; + } + + // Up-ramp scan: walk from the origin (index N-1) toward the validator + // (index 0). dedupedPath[k] is the customer, dedupedPath[k-1] the + // provider it's declaring -- authorized(A(I), A(I+1)) in draft terms. + let maxUpRamp = N; + let minUpRamp = N; + let firstUpViolation: { position: number; asn: number; nextHop: number } | undefined; + for (let k = N - 1; k >= 1; k--) { + const check = checkProviderAuthorization(dedupedPath[k], dedupedPath[k - 1], aspaObjects); + const I = N - k; + if (check === "not-provider" && maxUpRamp === N) { + maxUpRamp = I; + firstUpViolation = { position: k, asn: dedupedPath[k], nextHop: dedupedPath[k - 1] }; + } + if (check !== "provider" && minUpRamp === N) minUpRamp = I; + if (maxUpRamp !== N && minUpRamp !== N) break; + } + + // Down-ramp scan: the mirror image, walking from the validator (index 0) + // toward the origin -- authorized(A(J), A(J-1)) in draft terms. + let maxDownRamp = N; + let minDownRamp = N; + let firstDownViolation: { position: number; asn: number; nextHop: number } | undefined; + for (let k = 0; k <= N - 2; k++) { + const check = checkProviderAuthorization(dedupedPath[k], dedupedPath[k + 1], aspaObjects); + const rampLen = k + 1; + if (check === "not-provider" && maxDownRamp === N) { + maxDownRamp = rampLen; + firstDownViolation = { position: k, asn: dedupedPath[k], nextHop: dedupedPath[k + 1] }; + } + if (check !== "provider" && minDownRamp === N) minDownRamp = rampLen; + if (maxDownRamp !== N && minDownRamp !== N) break; + } + + // Confidence: fraction of hops that returned a definitive (non-"no-attestation") result. + const totalHops = N - 1; + let attestedHops = 0; + for (let k = N - 1; k >= 1; k--) { + if (checkProviderAuthorization(dedupedPath[k], dedupedPath[k - 1], aspaObjects) !== "no-attestation") { + attestedHops++; + } + } + const confidence = totalHops > 0 ? attestedHops / totalHops : 1.0; + + if (maxUpRamp + maxDownRamp < N) { + const violation = firstUpViolation ?? firstDownViolation; + const violations: ASPAViolation[] = violation + ? [ + { + position: violation.position, + asn: violation.asn, + expectedProviders: (aspaObjects.get(violation.asn)?.providers ?? []).map((p) => p.asn), + actualNextHop: violation.nextHop, + reason: + `AS${violation.asn} has an ASPA object but does not list AS${violation.nextHop} as an authorized provider. ` + + `No valid up-ramp/down-ramp split covers this path (max_up_ramp=${maxUpRamp}, max_down_ramp=${maxDownRamp}, N=${N}).`, + }, + ] + : []; + return { + status: "invalid", + path: [...dedupedPath], + violations, + leakDetected: true, + leakingAsn: violation?.asn, + confidence, + }; + } + + if (minUpRamp + minDownRamp < N) { + return { + status: "unknown", + path: [...dedupedPath], + violations: [], + leakDetected: false, + confidence, + }; + } return { - ...result, - path: [...deduplicatePath(path)], - violations: remappedViolations, + status: "valid", + path: [...dedupedPath], + violations: [], + leakDetected: false, + confidence, }; } diff --git a/src/features/aspa-adoption/scheduler.ts b/src/features/aspa-adoption/scheduler.ts index dce3677..b914398 100644 --- a/src/features/aspa-adoption/scheduler.ts +++ b/src/features/aspa-adoption/scheduler.ts @@ -41,7 +41,6 @@ export class ASPAAdoptionScheduler { stop(): void { if (this.task) { this.task.stop() - this.task.destroy() this.task = null console.log('[ASPA Scheduler] Job stopped') } diff --git a/src/features/bgp-communities/routes.ts b/src/features/bgp-communities/routes.ts index 50aa5fa..c72ea73 100644 --- a/src/features/bgp-communities/routes.ts +++ b/src/features/bgp-communities/routes.ts @@ -29,7 +29,7 @@ export async function bgpCommunitiesRoutes(fastify: FastifyInstance): Promise { const mockPage = { + setDefaultTimeout: vi.fn(), setContent: vi.fn().mockResolvedValue(undefined), pdf: vi.fn().mockResolvedValue(Buffer.from('pdf binary content')), close: vi.fn().mockResolvedValue(undefined), diff --git a/src/features/pdf-export/__tests__/renderer.test.ts b/src/features/pdf-export/__tests__/renderer.test.ts index 855b96d..025e9df 100644 --- a/src/features/pdf-export/__tests__/renderer.test.ts +++ b/src/features/pdf-export/__tests__/renderer.test.ts @@ -5,6 +5,7 @@ import type { PDFTemplateData } from '../types' // Mock Playwright vi.mock('playwright', () => { const mockPage = { + setDefaultTimeout: vi.fn(), setContent: vi.fn().mockResolvedValue(undefined), pdf: vi.fn().mockResolvedValue(Buffer.from('mock pdf content')), close: vi.fn().mockResolvedValue(undefined), @@ -85,11 +86,13 @@ describe('PDFRenderer', () => { const mockBrowser = await (chromium.launch as any)() const mockPage = await mockBrowser.newPage() + // Playwright's page.pdf() has no `timeout` option -- the timeout is set via + // page.setDefaultTimeout() before the call instead (see renderer.ts). expect(mockPage.pdf).toHaveBeenCalledWith({ format: 'A4', margin: { top: '0', right: '0', bottom: '0', left: '0' }, - timeout: 30000, }) + expect(mockPage.setDefaultTimeout).toHaveBeenCalledWith(30000) }) it('should respect custom timeout', async () => { @@ -102,11 +105,7 @@ describe('PDFRenderer', () => { const mockBrowser = await (chromium.launch as any)() const mockPage = await mockBrowser.newPage() - expect(mockPage.pdf).toHaveBeenCalledWith( - expect.objectContaining({ - timeout: customTimeout, - }) - ) + expect(mockPage.setDefaultTimeout).toHaveBeenCalledWith(customTimeout) }) it('should close page after rendering', async () => { diff --git a/src/features/pdf-export/cache-manager.ts b/src/features/pdf-export/cache-manager.ts index bc1935b..4fbba35 100644 --- a/src/features/pdf-export/cache-manager.ts +++ b/src/features/pdf-export/cache-manager.ts @@ -12,7 +12,7 @@ interface CacheEntry { export class PDFCacheManager { private cache: Map = new Map() private readonly TTL_MS = 5 * 60 * 1000 - private cleanupInterval: NodeJS.Timer | null = null + private cleanupInterval: NodeJS.Timeout | null = null constructor() { this.startCleanup() diff --git a/src/features/pdf-export/renderer.ts b/src/features/pdf-export/renderer.ts index 135ad15..fee25ff 100644 --- a/src/features/pdf-export/renderer.ts +++ b/src/features/pdf-export/renderer.ts @@ -24,12 +24,12 @@ export class PDFRenderer { const page = await this.browser.newPage() try { + page.setDefaultTimeout(timeout_ms) await page.setContent(html, { waitUntil: 'networkidle' }) const pdfBuffer = await page.pdf({ format: 'A4', margin: { top: '0', right: '0', bottom: '0', left: '0' }, - timeout: timeout_ms, }) return pdfBuffer diff --git a/src/features/rpki-history/routes.ts b/src/features/rpki-history/routes.ts index b3e34d9..acace73 100644 --- a/src/features/rpki-history/routes.ts +++ b/src/features/rpki-history/routes.ts @@ -29,7 +29,7 @@ export async function rpkiHistoryRoutes(fastify: FastifyInstance): Promise if (!response.ok) { throw new Error(`RIPE Stat returned HTTP ${response.status}`); } - const data = await response.json(); + const data = await response.json() as any; const byOrigin = (data && data.data && data.data.by_origin) || []; const prefixes: any[] = []; diff --git a/src/routes/hijack-alerts.ts b/src/routes/hijack-alerts.ts index 506aa9a..8289002 100644 --- a/src/routes/hijack-alerts.ts +++ b/src/routes/hijack-alerts.ts @@ -25,7 +25,7 @@ interface CreateHijackRequest { export async function hijackAlertsRoutes(fastify: FastifyInstance): Promise { // Register webhook subscription - fastify.post<{ Querystring: { asn: string } }>( + fastify.post<{ Querystring: { asn: string }; Body: RegisterWebhookRequest }>( '/webhooks', async (request: FastifyRequest<{ Querystring: { asn: string }; Body: RegisterWebhookRequest }>, reply: FastifyReply) => { try { diff --git a/webhook-subs.json b/webhook-subs.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/webhook-subs.json @@ -0,0 +1 @@ +[] \ No newline at end of file