Ctrl K
ComunidadGuías…

package.json

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
{
  "name": "world-monitor",
  "private": true,
  "version": "2.11.8",
  "license": "AGPL-3.0-only",
  "allowScripts": {
    "@bufbuild/buf": true,
    "@sentry/cli": true,
    "@vaadin/vaadin-usage-statistics": false,
    "browser-tabs-lock": false,
    "bufferutil": false,
    "core-js": false,
    "es5-ext": false,
    "esbuild": true,
    "fsevents": false,
    "protobufjs": false,
    "sharp": true,
    "utf-8-validate": false
  },
  "type": "module",
  "scripts": {
    "lint": "biome lint ./src ./server ./api ./tests ./e2e ./scripts ./middleware.ts && npm run lint:safe-html",
    "lint:fix": "biome check ./src ./server ./api ./tests ./e2e ./scripts ./middleware.ts --fix",
    "lint:boundaries": "node scripts/lint-boundaries.mjs",
    "lint:api-contract": "node scripts/enforce-sebuf-api-contract.mjs",
    "lint:safe-html": "node scripts/enforce-safe-html.mjs",
    "lint:panel-content-writes": "node scripts/enforce-panel-content-writes.mjs",
    "lint:safe-local-storage": "node scripts/enforce-safe-local-storage.mjs",
    "lint:overlay-reload-policy": "node scripts/enforce-overlay-reload-policy.mjs",
    "lint:rate-limit-policies": "tsx scripts/enforce-rate-limit-policies.mjs",
    "lint:premium-fetch": "tsx scripts/enforce-premium-fetch.mjs",
    "lint:outbound-deadlines": "node scripts/audit-outbound-calls.mjs --check",
    "lint:mintlify-slugs": "node scripts/enforce-mintlify-reserved-slugs.mjs",
    "lint:public-docs": "node scripts/check-public-doc-plan-references.mjs",
    "lint:unicode": "node scripts/check-unicode-safety.mjs",
    "lint:unicode:staged": "node scripts/check-unicode-safety.mjs --staged",
    "security:local-env-dumps": "node scripts/check-local-secret-dumps.mjs",
    "security:vite-env-secrets": "node scripts/check-vite-env-secrets.mjs",
    "agent:preflight": "node scripts/agent-preflight.mjs",
    "agent:pr-snapshot": "node scripts/agent-pr-snapshot.mjs",
    "agent:attach-pr-evidence": "node scripts/publish-pr-media-evidence.mjs",
    "railway:cross-strait-history:force": "node scripts/run-cross-strait-history-one-off.mjs",
    "worktree:bootstrap": "node scripts/bootstrap-worktree.mjs",
    "worktree:bootstrap:test-only": "node scripts/bootstrap-worktree.mjs --ignore-scripts",
    "worktree:env": "node scripts/bootstrap-worktree.mjs --skip-install",
    "lint:md": "markdownlint-cli2 '**/*.md' '!**/node_modules/**' '!.agent/**' '!.agents/**' '!.claude/**' '!.factory/**' '!.windsurf/**' '!skills/**' '!docs/internal/**' '!docs/Docs_To_Review/**' '!docs/archive/**' '!todos/**' '!docs/plans/**' '!docs/brainstorms/**' '!docs/ideation/**'",
    "version:sync": "node scripts/sync-desktop-version.mjs",
    "version:check": "node scripts/sync-desktop-version.mjs --check",
    "check:prereqs": "node scripts/check-build-prereqs.mjs",
    "check:prereqs:desktop": "node scripts/check-build-prereqs.mjs --scope desktop",
    "check:prereqs:desktop:bundle": "node scripts/check-build-prereqs.mjs --scope desktop --bundle",
    "desktop:check-env": "node scripts/check-desktop-build-env.mjs",
    "desktop:check-rust-floors": "node scripts/check-rust-security-floors.mjs",
    "sync:locales": "node scripts/sync-locale-keys.mjs",
    "sync:locales:check": "node scripts/sync-locale-keys.mjs --check",
    "locales:zh-tw": "python3 scripts/convert-zh-tw.py",
    "locales:zh-tw:check": "python3 scripts/convert-zh-tw.py --check",
    "sync:bootstrap-tier-keys": "node scripts/sync-bootstrap-tier-keys.mjs",
    "sync:bootstrap-tier-keys:check": "node scripts/sync-bootstrap-tier-keys.mjs --check",
    "sync:live-video-channels": "node --import tsx scripts/sync-live-video-refresh-channels.mjs",
    "sync:live-video-channels:check": "node --import tsx scripts/sync-live-video-refresh-channels.mjs --check",
    "sync:tui-catalog": "node --import tsx scripts/sync-tui-catalog.mjs",
    "sync:tui-catalog:check": "node --import tsx scripts/sync-tui-catalog.mjs --check",
    "bundle:budgets": "node scripts/bundle-budgets.mjs",
    "bundle:check": "node scripts/bundle-budgets.mjs --check",
    "bundle:budgets:pro": "node scripts/bundle-budgets.mjs --surface pro",
    "bundle:check:pro": "node scripts/bundle-budgets.mjs --check --surface pro",
    "bundle:budgets:embed": "node scripts/bundle-budgets.mjs --surface embed",
    "bundle:check:embed": "node scripts/bundle-budgets.mjs --check --surface embed",
    "sandbox:fixtures": "node scripts/generate-sandbox-fixtures.mjs",
    "sandbox:fixtures:check": "node scripts/generate-sandbox-fixtures.mjs --check",
    "brief-fonts:subset": "node scripts/brief-fonts/run.mjs",
    "generate": "node scripts/generate-derived.mjs",
    "generate:check": "node scripts/generate-derived.mjs --check",
    "product:facts": "node --import tsx scripts/generate-product-config.mjs && node --import tsx scripts/generate-public-product-facts.mjs && npm run inventory:facts && npm run build:ai-search",
    "product:facts:check": "node --import tsx scripts/generate-public-product-facts.mjs --check && npm run inventory:facts:check",
    "inventory:facts": "node scripts/generate-inventory-facts.mjs",
    "inventory:facts:check": "node scripts/generate-inventory-facts.mjs --check",
    "docs:stats": "npm run inventory:facts",
    "docs:check": "node scripts/docs-stats.mjs --check",
    "entitlement:crosswalk": "node scripts/generate-entitlement-crosswalk.mjs",
    "entitlement:crosswalk:check": "node scripts/generate-entitlement-crosswalk.mjs --check",
    "scorecard:edge-mirrors": "node scripts/generate-scorecard-edge-mirrors.mjs",
    "scorecard:edge-mirrors:check": "node scripts/generate-scorecard-edge-mirrors.mjs --check",
    "study:story-phase-fading": "node scripts/study-story-phase-fading.mjs",
    "study:story-phase-fading:check": "node scripts/study-story-phase-fading.mjs --check",
    "freeze:crawlable-live-pulse": "node scripts/freeze-crawlable-live-pulse.mjs",
    "freeze:resilience-cri-golden": "tsx scripts/generate-cri-golden-baseline.mts",
    "open-data:chokepoints": "node scripts/build-open-data-chokepoints.mjs",
    "teasers:welcome": "node scripts/build-welcome-teasers.mjs",
    "teasers:welcome:check": "node scripts/build-welcome-teasers.mjs --check",
    "sources:generate": "node scripts/source-attribution.mjs --write",
    "sources:check": "node scripts/source-attribution.mjs --check",
    "syndication:candidates": "node scripts/syndication-candidates.mjs",
    "dev": "vite",
    "dev:tech": "cross-env VITE_VARIANT=tech vite",
    "dev:finance": "cross-env VITE_VARIANT=finance vite",
    "dev:happy": "cross-env VITE_VARIANT=happy vite",
    "dev:commodity": "cross-env VITE_VARIANT=commodity vite",
    "dev:energy": "cross-env VITE_VARIANT=energy vite",
    "postinstall": "npm run inventory:facts",
    "ci:blog-site": "cross-env npm_config_allow_scripts= npm --prefix blog-site ci --prefer-offline",
    "prebuild:blog": "npm run product:facts",
    "build:blog": "npm run build:blog:raw",
    "build:blog:raw": "cross-env npm_config_allow_scripts= npm --prefix blog-site ci --prefer-offline && cd blog-site && npm run build && rm -rf ../public/blog && mkdir -p ../public/blog && cp -r dist/* ../public/blog/",
    "corpus:country-slugs": "node --import tsx scripts/generate-country-corpus-slugs.mjs",
    "corpus:country-slugs:check": "node --import tsx scripts/generate-country-corpus-slugs.mjs --check",
    "build:crawlable-corpus": "npm run corpus:country-slugs && node --import tsx scripts/build-crawlable-corpus.mjs",
    "audit:microstate-corpus": "node scripts/audit-microstate-corpus-similarity.mjs --check",
    "build:llms-full": "node --import tsx scripts/build-llms-full.mjs",
    "build:llms-full:check": "node --import tsx scripts/build-llms-full.mjs --check",
    "build:ai-search": "node --import tsx scripts/build-ai-search.mjs",
    "resilience:coverage": "node --import tsx scripts/sync-resilience-coverage.mjs",
    "build:ai-search:check": "node --import tsx scripts/build-ai-search.mjs --check",
    "build:sitemap": "node --import tsx scripts/build-sitemap.mjs",
    "seo:internal-links": "node scripts/internal-links.mjs",
    "build:sitemap:check": "npm run build:crawlable-corpus && node --import tsx scripts/build-sitemap.mjs --check",
    "verify:sitemaps": "node scripts/verify-sitemaps.mjs",
    "build:pro": "cross-env npm_config_allow_scripts= npm --prefix pro-test ci --prefer-offline && npm --prefix pro-test run build",
    "build:openapi": "node -e \"require('fs').cpSync('docs/api/worldmonitor.openapi.yaml', 'public/openapi.yaml')\" && node scripts/build-openapi-json.mjs",
    "gen:openapi:security": "node scripts/openapi-inject-security.mjs",
    "gen:openapi:examples": "node scripts/openapi-inject-examples.mjs",
    "gen:openapi:required": "node scripts/openapi-inject-required.mjs",
    "gen:openapi:servers": "node scripts/openapi-inject-servers.mjs",
    "gen:openapi:deprecated": "node scripts/openapi-inject-deprecated.mjs",
    "gen:openapi:jmespath": "node scripts/openapi-inject-jmespath.mjs",
    "gen:openapi:webhooks": "node scripts/openapi-inject-webhooks.mjs",
    "gen:openapi:idempotency": "node scripts/openapi-inject-idempotency.mjs",
    "gen:openapi:rate-limit-errors": "node scripts/openapi-inject-rate-limit-errors.mjs",
    "gen:openapi:billing-verification": "node scripts/openapi-inject-billing-verification.mjs",
    "gen:openapi:async-jobs": "node scripts/openapi-inject-async-jobs.mjs",
    "gen:openapi:china-decision-signals": "node scripts/openapi-inject-china-decision-signals.mjs",
    "build:agent-skills": "node scripts/build-agent-skills-index.mjs",
    "prebuild": "npm run docs:dates -- --fetch-history && npm run product:facts && npm run build:openapi && npm run build:agent-skills",
    "build": "npm run security:vite-env-secrets -- --strict-local && npm run build:blog:raw && npm run build:pro && npm run build:crawlable-corpus && npm run build:sitemap && tsc && vite build",
    "build:sidecar-sebuf": "node scripts/build-sidecar-sebuf.mjs",
    "prebuild:desktop": "npm run product:facts",
    "build:desktop": "npm run security:vite-env-secrets -- --strict-local && node scripts/generate-third-party-notices.mjs && node scripts/build-sidecar-sebuf.mjs && node scripts/build-sidecar-handlers.mjs && tsc && vite build",
    "prebuild:full": "npm run docs:dates -- --fetch-history && npm run product:facts",
    "build:plugin": "npm run security:vite-env-secrets -- --strict-local && cross-env VITE_VARIANT=full vite build --config vite.plugin.config.ts",
    "build:full": "npm run security:vite-env-secrets -- --strict-local && npm run build:openapi && npm run build:agent-skills && npm run build:blog:raw && npm run build:pro && npm run build:crawlable-corpus && npm run build:sitemap && cross-env-shell VITE_VARIANT=full \"tsc && vite build\" && npm run build:plugin && npm run check:source-maps",
    "check:source-maps": "node --import tsx scripts/check-no-public-source-maps.mjs dist",
    "prebuild:tech": "npm run docs:dates -- --fetch-history && npm run product:facts",
    "build:tech": "npm run security:vite-env-secrets -- --strict-local && npm run build:openapi && npm run build:agent-skills && cross-env-shell VITE_VARIANT=tech \"tsc && vite build\"",
    "prebuild:finance": "npm run docs:dates -- --fetch-history && npm run product:facts",
    "build:finance": "npm run security:vite-env-secrets -- --strict-local && npm run build:openapi && npm run build:agent-skills && cross-env-shell VITE_VARIANT=finance \"tsc && vite build\"",
    "prebuild:happy": "npm run docs:dates -- --fetch-history && npm run product:facts",
    "build:happy": "npm run security:vite-env-secrets -- --strict-local && npm run build:openapi && npm run build:agent-skills && cross-env-shell VITE_VARIANT=happy \"tsc && vite build\"",
    "prebuild:commodity": "npm run docs:dates -- --fetch-history && npm run product:facts",
    "build:commodity": "npm run security:vite-env-secrets -- --strict-local && npm run build:openapi && npm run build:agent-skills && cross-env-shell VITE_VARIANT=commodity \"tsc && vite build\"",
    "prebuild:energy": "npm run docs:dates -- --fetch-history && npm run product:facts",
    "build:energy": "npm run security:vite-env-secrets -- --strict-local && npm run build:openapi && npm run build:agent-skills && cross-env-shell VITE_VARIANT=energy \"tsc && vite build\"",
    "typecheck": "tsc --noEmit",
    "typecheck:api": "tsc --noEmit -p tsconfig.api.json && node scripts/audit-convex-string-calls.cjs && node scripts/sync-sentry-convex-probe-filters.mjs --check",
    "typecheck:all": "tsc --noEmit && tsc --noEmit -p tsconfig.api.json && node scripts/audit-convex-string-calls.cjs && node scripts/sync-sentry-convex-probe-filters.mjs --check",
    "audit:convex-string-calls": "node scripts/audit-convex-string-calls.cjs",
    "generate:sentry-convex-probe-filters": "node scripts/sync-sentry-convex-probe-filters.mjs --write",
    "check:sentry-convex-probe-filters": "node scripts/sync-sentry-convex-probe-filters.mjs --check",
    "sync:sentry-convex-probe-filters": "node scripts/sync-sentry-convex-probe-filters.mjs --apply",
    "audit:dodo-catalog": "node scripts/audit-dodo-catalog.cjs",
    "audit:inventory-counts": "node scripts/check-inventory-count-contracts.mjs",
    "audit:sentry-resolve-pins": "node scripts/audit-sentry-resolve-pins.mjs",
    "tauri": "tauri",
    "preview": "vite preview",
    "test:e2e:full": "npm run build:pro && cross-env VITE_VARIANT=full playwright test",
    "test:e2e:tech": "cross-env VITE_VARIANT=tech playwright test",
    "test:e2e:finance": "cross-env VITE_VARIANT=finance playwright test",
    "test:e2e:commodity": "cross-env VITE_VARIANT=commodity playwright test",
    "test:e2e:energy": "cross-env VITE_VARIANT=energy playwright test",
    "test:e2e:happy": "cross-env VITE_VARIANT=happy playwright test",
    "test:e2e:country-brief": "cross-env VITE_VARIANT=full playwright test e2e/country-brief.spec.ts e2e/country-brief-reports.spec.ts",
    "test:e2e:runtime": "cross-env VITE_VARIANT=full playwright test e2e/runtime-fetch.spec.ts",
    "test:e2e:webmcp": "cross-env VITE_VARIANT=full WM_REQUIRE_WEBMCP=1 playwright test e2e/webmcp.spec.ts e2e/webmcp-cancellation.spec.ts e2e/embed.spec.ts --project=chromium",
    "test:e2e:webmcp:production": "cross-env VITE_VARIANT=full WM_REQUIRE_WEBMCP=1 WM_WEBMCP_PRODUCTION=1 playwright test e2e/webmcp.spec.ts --project=chromium --headed",
    "test:e2e:mcp-grant": "cross-env VITE_VARIANT=full playwright test e2e/mcp-grant-consent.spec.ts",
    "test:e2e:news-budget": "cross-env VITE_VARIANT=full playwright test e2e/dashboard-news-request-budget.spec.ts",
    "test:e2e:source-live-apply": "cross-env VITE_VARIANT=full playwright test e2e/settings-source-live-apply.spec.ts",
    "test:e2e:ci-smoke": "cross-env VITE_VARIANT=full playwright test e2e/variant-live-smoke.spec.ts e2e/country-brief.spec.ts e2e/country-brief-reports.spec.ts e2e/mcp-grant-consent.spec.ts e2e/dashboard-news-request-budget.spec.ts e2e/bootstrap-request-budget.spec.ts e2e/population-exposure-legacy.spec.ts e2e/bootstrap-hydration-request-budget.spec.ts e2e/settings-panel-live-apply.spec.ts e2e/settings-source-live-apply.spec.ts e2e/keyword-spike-flow.spec.ts e2e/breaking-news-banner-provenance.spec.ts e2e/dompurify-regression.spec.ts e2e/a11y-axe-scan.spec.ts e2e/dashboard-lcp-attribution.spec.ts e2e/mobile-displacement.spec.ts e2e/map-overlay-marker-budget.spec.ts e2e/map-distance.spec.ts e2e/mcp-market-built.spec.ts e2e/live-panel-layout-8276.spec.ts e2e/panel-grid-no-overlap.spec.ts e2e/panel-table-overflow.spec.ts e2e/etf-panel-overflow.spec.ts e2e/panel-header-fits.spec.ts e2e/news-source-row-fits.spec.ts e2e/procurement-filters-fit.spec.ts e2e/progress-chart-fits.spec.ts e2e/energy-table-values-whole.spec.ts e2e/panel-text-unclipped.spec.ts e2e/regional-intelligence-region-select.spec.ts e2e/panel-grid-column-clamp.spec.ts e2e/narrow-panel-overflow.spec.ts e2e/hormuz-chart-width.spec.ts e2e/settings-tabs-all-visible.spec.ts",
    "test:e2e:ci-smoke:1": "cross-env VITE_VARIANT=full playwright test e2e/a11y-axe-scan.spec.ts e2e/dompurify-regression.spec.ts e2e/live-panel-layout-8276.spec.ts e2e/map-distance.spec.ts e2e/map-overlay-marker-budget.spec.ts e2e/mcp-grant-consent.spec.ts e2e/mcp-market-built.spec.ts e2e/mobile-displacement.spec.ts",
    "test:e2e:ci-smoke:2": "cross-env VITE_VARIANT=full playwright test e2e/country-brief.spec.ts e2e/dashboard-news-request-budget.spec.ts e2e/energy-table-values-whole.spec.ts e2e/hormuz-chart-width.spec.ts e2e/keyword-spike-flow.spec.ts e2e/narrow-panel-overflow.spec.ts e2e/news-source-row-fits.spec.ts",
    "test:e2e:ci-smoke:3": "cross-env VITE_VARIANT=full playwright test e2e/breaking-news-banner-provenance.spec.ts e2e/country-brief-reports.spec.ts e2e/dashboard-lcp-attribution.spec.ts e2e/etf-panel-overflow.spec.ts e2e/panel-grid-column-clamp.spec.ts e2e/panel-header-fits.spec.ts e2e/panel-table-overflow.spec.ts e2e/procurement-filters-fit.spec.ts",
    "test:e2e:ci-smoke:4": "cross-env VITE_VARIANT=full playwright test e2e/bootstrap-hydration-request-budget.spec.ts e2e/bootstrap-request-budget.spec.ts e2e/population-exposure-legacy.spec.ts e2e/panel-grid-no-overlap.spec.ts e2e/panel-text-unclipped.spec.ts e2e/progress-chart-fits.spec.ts e2e/regional-intelligence-region-select.spec.ts e2e/settings-panel-live-apply.spec.ts e2e/settings-source-live-apply.spec.ts e2e/settings-tabs-all-visible.spec.ts e2e/variant-live-smoke.spec.ts",
    "test:e2e:prehydration": "cross-env VITE_VARIANT=full playwright test e2e/prehydration-shell.spec.ts --project=chromium --grep \"server-rendered welcome page|dashboard shell without JavaScript\"",
    "test:e2e:pro-cls": "cross-env VITE_VARIANT=full playwright test e2e/pro-critical-css-cls.spec.ts --project=chromium",
    "test:e2e:pro-overflow": "cross-env VITE_VARIANT=full playwright test e2e/pro-mobile-overflow.spec.ts --project=chromium",
    "test:e2e:pro-hero": "cross-env VITE_VARIANT=full playwright test e2e/pro-hero-animation.spec.ts --project=chromium",
    "test:e2e:pro-lcp": "cross-env VITE_VARIANT=full playwright test e2e/pro-hero-lcp.spec.ts --project=chromium",
    "test:e2e:pro-anchor": "cross-env VITE_VARIANT=full playwright test e2e/pro-pricing-anchor.spec.ts e2e/welcome-nav-fit.spec.ts --project=chromium",
    "test:e2e:pro-gates": "cross-env VITE_VARIANT=full playwright test e2e/pro-critical-css-cls.spec.ts e2e/pro-mobile-overflow.spec.ts e2e/pro-hero-animation.spec.ts e2e/pro-hero-lcp.spec.ts e2e/pro-pricing-anchor.spec.ts e2e/welcome-nav-fit.spec.ts --project=chromium",
    "test:e2e:variant-smoke:full": "cross-env VITE_VARIANT=full playwright test e2e/variant-live-smoke.spec.ts",
    "test:e2e:variant-smoke:tech": "cross-env VITE_VARIANT=tech playwright test e2e/variant-live-smoke.spec.ts",
    "test:e2e:variant-smoke:finance": "cross-env VITE_VARIANT=finance playwright test e2e/variant-live-smoke.spec.ts",
    "test:e2e:variant-smoke:commodity": "cross-env VITE_VARIANT=commodity playwright test e2e/variant-live-smoke.spec.ts",
    "test:e2e:variant-smoke:energy": "cross-env VITE_VARIANT=energy playwright test e2e/variant-live-smoke.spec.ts",
    "test:e2e:variant-smoke:happy": "cross-env VITE_VARIANT=happy playwright test e2e/variant-live-smoke.spec.ts",
    "test:e2e:variant-smoke": "npm run test:e2e:variant-smoke:full && npm run test:e2e:variant-smoke:tech && npm run test:e2e:variant-smoke:finance && npm run test:e2e:variant-smoke:commodity && npm run test:e2e:variant-smoke:energy && npm run test:e2e:variant-smoke:happy",
    "test:e2e": "npm run test:e2e:full && npm run test:e2e:tech && npm run test:e2e:finance && npm run test:e2e:energy",
    "report:geo-coverage": "node scripts/geo-coverage-report.mjs",
    "pretest:data": "npm run docs:dates",
    "test:railway-registry": "node --import tsx --test --test-timeout=120000 --test-concurrency=2 tests/railway-registry-sync-cli.test.mjs tests/railway-registry-sync-runner.test.mjs tests/railway-registry-sync-workflow.test.mjs tests/railway-watch-path-audit.test.mjs tests/railway-services-registry-coverage.test.mts",
    "test:data": "node scripts/run-data-tests.mjs tests/*.test.mjs tests/*.test.mts cli/test/*.test.mjs api/security/report.test.mjs workers/api-cors-preflight/*.test.mjs",
    "test:related": "node scripts/select-related-tests.mjs",
    "test:resilience-validation-smoke": "tsx --test tests/resilience-validation-artifacts-schema.test.mts tests/benchmark-resilience-external.test.mjs tests/backtest-resilience-outcomes.test.mjs tests/resilience-sensitivity-v2.test.mts tests/seed-bundle-resilience-validation.test.mjs tests/resilience-validation-import-graph.test.mjs",
    "dryrun:resilience": "node --import tsx/esm scripts/dry-run-resilience-rebalance.mjs",
    "test:feeds": "node scripts/validate-rss-feeds.mjs",
    "live-video:check": "node --import tsx scripts/check-live-video-sources.mjs",
    "test:feeds:ci": "node scripts/validate-rss-feeds.mjs --ci",
    "test:sidecar": "node --test src-tauri/sidecar/local-api-server.test.mjs src-tauri/sidecar/youtube-embed-message.test.mjs src-tauri/open-url-safety.test.mjs api/_cors.test.mjs api/_session.test.mjs api/_api-key.test.mjs api/_user-api-key.test.mjs api/_rate-limit.test.mjs api/_sentry-common.test.mjs api/bootstrap-auth.test.mjs api/bootstrap-cors.test.mjs api/health-cors.test.mjs api/og-story.test.mjs api/story.test.mjs api/wm-session.test.mjs api/product-catalog.test.mjs api/youtube/embed.test.mjs api/miit-news.test.mjs api/rss-proxy.test.mjs api/rss-proxy-body.test.mjs api/rss-proxy-relay-sentry.test.mjs scripts/ais-relay-rss.test.cjs scripts/ais-relay-ingestion.test.cjs scripts/ais-relay-entity-decode.test.cjs scripts/ais-relay-seed-fetchedat.test.cjs scripts/ais-relay-ais-gaps.test.cjs scripts/ais-relay-opensky-shared-cooldown.test.cjs api/loaders-xml-wms-regression.test.mjs api/analytics-health.test.mjs",
    "test:e2e:visual:full": "cross-env VITE_VARIANT=full playwright test -g \"matches golden screenshots per layer and zoom\"",
    "test:e2e:visual:tech": "cross-env VITE_VARIANT=tech playwright test -g \"matches golden screenshots per layer and zoom\"",
    "test:e2e:visual": "npm run test:e2e:visual:full && npm run test:e2e:visual:tech",
    "test:e2e:chrome": "cross-env VITE_VARIANT=full playwright test e2e/visual-chrome.spec.ts",
    "test:e2e:visual:update:full": "cross-env VITE_VARIANT=full playwright test -g \"matches golden screenshots per layer and zoom\" --update-snapshots",
    "test:e2e:visual:update:tech": "cross-env VITE_VARIANT=tech playwright test -g \"matches golden screenshots per layer and zoom\" --update-snapshots",
    "test:e2e:visual:update": "npm run test:e2e:visual:update:full && npm run test:e2e:visual:update:tech",
    "desktop:dev": "npm run check:prereqs:desktop && npm run version:sync && cross-env VITE_DESKTOP_RUNTIME=1 tauri dev -f devtools",
    "desktop:tauri:build": "npm run security:vite-env-secrets -- --strict-local && npm run check:prereqs:desktop:bundle && npm run desktop:check-env && npm run version:sync && cross-env VITE_VARIANT=full VITE_DESKTOP_RUNTIME=1 tauri build",
    "desktop:package:macos": "node scripts/desktop-package.mjs --os macos",
    "desktop:package:windows": "node scripts/desktop-package.mjs --os windows",
    "desktop:package:macos:sign": "node scripts/desktop-package.mjs --os macos --sign",
    "desktop:package:windows:sign": "node scripts/desktop-package.mjs --os windows --sign",
    "desktop:package": "node scripts/desktop-package.mjs",
    "test:convex": "vitest run --config vitest.config.mts",
    "test:convex:tap": "vitest run --config vitest.config.mts --reporter=tap",
    "test:dom": "vitest run --config vitest.dom.config.mts",
    "typecheck:dom-tests": "tsc --noEmit -p tsconfig.dom-tests.json",
    "typecheck:contract-tests": "tsc --noEmit -p tsconfig.contract-tests.json",
    "typecheck:e2e": "tsc --noEmit -p e2e/tsconfig.json",
    "company-monitoring:digest": "tsx scripts/recompute-company-monitoring-digest.mjs",
    "company-monitoring:curation": "tsx scripts/company-monitoring-curation.mts",
    "company-monitoring:blind-evaluation": "tsx scripts/company-monitoring-blind-evaluation.mts",
    "company-monitoring:offline-predictions": "tsx scripts/company-monitoring-offline-predictions.mts",
    "test:convex:watch": "vitest --config vitest.config.mts",
    "notices": "node scripts/generate-third-party-notices.mjs",
    "notices:check": "node scripts/generate-third-party-notices.mjs --check",
    "legal:digests": "node scripts/legal-digests.mjs",
    "legal:digests:check": "node scripts/legal-digests.mjs --check",
    "legal:pdfs": "node scripts/build-legal-pdfs.mjs",
    "legal:pdfs:check": "node scripts/build-legal-pdfs.mjs --check",
    "docs:dates": "node scripts/generate-docs-page-dates.mjs",
    "docs:dates:check": "node scripts/generate-docs-page-dates.mjs --check",
    "freeze:github-stars": "node scripts/freeze-github-stars.mjs"
  },
  "devDependencies": {
    "@axe-core/playwright": "^4.13.0",
    "@biomejs/biome": "^2.4.7",
    "@bufbuild/buf": "^1.66.0",
    "@edge-runtime/vm": "^5.0.0",
    "@modelcontextprotocol/client": "2.3.1",
    "@playwright/test": "^1.63.0",
    "@sentry/vite-plugin": "^5.4.0",
    "@tauri-apps/cli": "^2.10.0",
    "@types/canvas-confetti": "^1.9.0",
    "@types/d3": "^7.4.3",
    "@types/dompurify": "^3.0.5",
    "@types/geojson": "^7946.0.14",
    "@types/jmespath": "^0.15.2",
    "@types/maplibre-gl": "^1.13.2",
    "@types/marked": "^5.0.2",
    "@types/papaparse": "^5.5.2",
    "@types/supercluster": "^7.1.3",
    "@types/three": "^0.183.1",
    "@types/topojson-client": "^3.1.5",
    "@types/topojson-specification": "^1.0.5",
    "@typescript/native": "npm:typescript@^7.0.2",
    "ajv": "^8.20.0",
    "convex-test": "^0.0.43",
    "cross-env": "^10.1.0",
    "deepmerge": "file:scripts/vendor/deepmerge",
    "esbuild": "0.28.1",
    "exceljs": "^4.4.0",
    "fengari": "^0.1.5",
    "happy-dom": "^21.0.4",
    "js-yaml": "^4.3.2",
    "markdownlint-cli2": "^0.21.0",
    "opencc-js": "^1.4.1",
    "pdfjs-dist": "6.2.108",
    "tsx": "^4.21.0",
    "typescript": "npm:@typescript/typescript6@^6.0.2",
    "vite": "^6.4.5",
    "vite-plugin-pwa": "^1.2.0",
    "vitest": "^4.1.12",
    "webmcp-types": "^0.1.3"
  },
  "dependencies": {
    "@anthropic-ai/sdk": "^0.91.1",
    "@aws-sdk/client-s3": "^3.1009.0",
    "@clerk/clerk-js": "^6.13.0",
    "@deck.gl/core": "^9.4.0",
    "@deck.gl/layers": "^9.4.0",
    "@deck.gl/maplibre": "^9.4.0",
    "@dodopayments/convex": "^0.2.8",
    "@e965/xlsx": "0.20.3",
    "@fontsource/nunito": "^5.2.7",
    "@fontsource/tajawal": "^5.2.7",
    "@noble/hashes": "1.4.0",
    "@protomaps/basemaps": "^5.7.1",
    "@sentry/browser": "^10.39.0",
    "@upstash/ratelimit": "^2.0.8",
    "@upstash/redis": "^1.36.1",
    "@vercel/analytics": "^2.0.0",
    "@vercel/functions": "^3.7.5",
    "@vercel/og": "file:vendor/vercel-og",
    "@xenova/transformers": "^2.17.2",
    "aws4fetch": "^1.0.20",
    "braces": "file:vendor/braces",
    "canvas-confetti": "^1.9.4",
    "convex": "^1.32.0",
    "d3": "^7.9.0",
    "deck.gl": "^9.4.0",
    "dompurify": "^3.4.17",
    "fast-xml-parser": "^5.8.0",
    "fflate": "0.8.3",
    "globe.gl": "^2.45.0",
    "h3-js": "^4.4.0",
    "hls.js": "^1.6.15",
    "hyparquet": "1.32.0",
    "i18next": "^25.8.10",
    "i18next-browser-languagedetector": "^8.2.1",
    "jmespath": "^0.16.0",
    "jose": "^6.2.2",
    "mailchecker": "^6.0.21",
    "maplibre-gl": "^6.4.1",
    "marked": "^17.0.3",
    "onnxruntime-web": "^1.26.0",
    "papaparse": "^5.5.3",
    "pmtiles": "^4.4.0",
    "preact": "^10.25.4",
    "satellite.js": "^6.0.2",
    "stream-json": "file:vendor/stream-json",
    "supercluster": "^8.0.1",
    "telegram": "^2.26.22",
    "topojson-client": "^3.1.0",
    "undici": "8.12.3",
    "uqr": "^0.1.2",
    "web-vitals": "^5.3.0",
    "ws": "^8.21.0",
    "yaml": "^2.8.3",
    "zod": "^4.6.6"
  },
  "overrides": {
    "glob@11": "14.0.2",
    "glob@13": "14.0.2",
    "uuid@8": "11.1.1",
    "uuid@11": "11.1.1",
    "deepmerge": "$deepmerge",
    "braces": "$braces",
    "convex": {
      "esbuild": "0.28.1"
    },
    "@vercel/cli-config": {
      "zod": "$zod"
    },
    "js-yaml@4": "$js-yaml",
    "fast-xml-parser": "^5.8.0",
    "serialize-javascript": "^7.0.4",
    "node-forge": "^1.4.0",
    "srvx": "^0.11.13",
    "protobufjs": "^7.6.2",
    "ws": "$ws",
    "shell-quote": "^1.8.4",
    "ip-address": "^10.3.1",
    "brace-expansion@1": "^1.1.21",
    "brace-expansion@2": "^2.1.7",
    "brace-expansion@5": "^5.0.12",
    "sharp": "0.35.5",
    "postcss": "8.5.23",
    "fast-uri": "3.1.9",
    "markdown-it": "14.3.3",
    "fflate@0.7": "0.7.5",
    "fflate@0.8": "0.8.3",
    "@luma.gl/gltf": {
      "@loaders.gl/core": "4.5.2",
      "@loaders.gl/gltf": "4.5.2",
      "@loaders.gl/textures": "4.5.2"
    },
    "metro": "0.83.8",
    "stream-json": "$stream-json",
    "katex": "0.18.2"
  }
}