mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-07-26 09:52:11 +03:00
Replace regex-based compression artifact cleanup with linear helpers to avoid pathological backtracking and normalize whitespace safely. Tighten request and response parsing in assess, Gemini translation, and executor telemetry to avoid unsafe property access and invalid category filtering. Also add managed database backup support for legacy encrypted connection migration, improve SQLite load error handling, and cover the regressions with unit tests.
226 lines
8.6 KiB
JSON
226 lines
8.6 KiB
JSON
{
|
|
"name": "omniroute",
|
|
"version": "3.7.9",
|
|
"description": "Unified AI router with 160+ providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.",
|
|
"type": "module",
|
|
"bin": {
|
|
"omniroute": "bin/omniroute.mjs",
|
|
"omniroute-reset-password": "bin/reset-password.mjs"
|
|
},
|
|
"files": [
|
|
"bin/",
|
|
"app/",
|
|
"open-sse/mcp-server/index.ts",
|
|
"open-sse/mcp-server/server.ts",
|
|
"open-sse/mcp-server/httpTransport.ts",
|
|
"open-sse/mcp-server/audit.ts",
|
|
"open-sse/mcp-server/runtimeHeartbeat.ts",
|
|
"open-sse/mcp-server/scopeEnforcement.ts",
|
|
"open-sse/mcp-server/schemas/",
|
|
"open-sse/mcp-server/tools/",
|
|
"open-sse/mcp-server/README.md",
|
|
"src/shared/contracts/",
|
|
"src/shared/utils/nodeRuntimeSupport.ts",
|
|
".env.example",
|
|
"scripts/postinstall.mjs",
|
|
"scripts/postinstallSupport.mjs",
|
|
"scripts/responses-ws-proxy.mjs",
|
|
"scripts/check-supported-node-runtime.ts",
|
|
"scripts/sync-env.mjs",
|
|
"scripts/native-binary-compat.mjs",
|
|
"scripts/build-next-isolated.mjs",
|
|
"README.md",
|
|
"LICENSE"
|
|
],
|
|
"workspaces": [
|
|
"open-sse"
|
|
],
|
|
"engines": {
|
|
"node": ">=20.20.2 <21 || >=22.22.2 <23 || >=24.0.0 <27"
|
|
},
|
|
"keywords": [
|
|
"ai",
|
|
"router",
|
|
"proxy",
|
|
"openai",
|
|
"claude",
|
|
"anthropic",
|
|
"gemini",
|
|
"fallback",
|
|
"cursor",
|
|
"cline",
|
|
"codex",
|
|
"llm",
|
|
"auto-fallback"
|
|
],
|
|
"license": "MIT",
|
|
"author": "diegosouzapw",
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "https://github.com/diegosouzapw/OmniRoute"
|
|
},
|
|
"homepage": "https://omniroute.online",
|
|
"scripts": {
|
|
"dev": "node scripts/run-next.mjs dev",
|
|
"prebuild:docs": "node scripts/generate-docs-index.mjs",
|
|
"build": "node scripts/build-next-isolated.mjs",
|
|
"build:cli": "node --import tsx/esm scripts/prepublish.ts",
|
|
"start": "node scripts/run-next.mjs start",
|
|
"lint": "eslint .",
|
|
"electron:dev": "concurrently \"npm run dev\" \"wait-on http://localhost:20128 && cd electron && npm run dev\"",
|
|
"electron:build": "npm run build && cd electron && npm run build",
|
|
"electron:build:win": "npm run build && cd electron && npm run build:win",
|
|
"electron:build:mac": "npm run build && cd electron && npm run build:mac",
|
|
"electron:build:linux": "npm run build && cd electron && npm run build:linux",
|
|
"electron:smoke:packaged": "node scripts/smoke-electron-packaged.mjs",
|
|
"test": "cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=10 tests/unit/*.test.ts",
|
|
"test:unit": "cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test --test-concurrency=10 tests/unit/*.test.ts",
|
|
"test:plan3": "cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/plan3-p0.test.ts",
|
|
"test:fixes": "cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/fixes-p1.test.ts",
|
|
"test:security": "cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm --test tests/unit/security-fase01.test.ts",
|
|
"check:cycles": "node scripts/check-cycles.mjs",
|
|
"check:route-validation:t06": "node scripts/check-route-validation.mjs",
|
|
"check:any-budget:t11": "node scripts/check-t11-any-budget.mjs",
|
|
"check:docs-sync": "node scripts/check-docs-sync.mjs",
|
|
"check:node-runtime": "node --import tsx/esm scripts/check-supported-node-runtime.ts",
|
|
"check:pack-artifact": "node --import tsx/esm scripts/validate-pack-artifact.ts",
|
|
"audit:deps": "npm audit --audit-level=moderate && npm run audit:electron",
|
|
"audit:electron": "npm --prefix electron audit --audit-level=moderate",
|
|
"typecheck:core": "tsc --pretty false -p tsconfig.typecheck-core.json",
|
|
"typecheck:noimplicit:core": "tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json",
|
|
"backfill-aggregation": "node --import tsx/esm src/scripts/backfillAggregation.ts",
|
|
"env:sync": "node scripts/sync-env.mjs",
|
|
"test:integration": "node --import tsx/esm --test tests/integration/*.test.ts",
|
|
"test:e2e": "node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts",
|
|
"test:protocols:e2e": "node scripts/run-protocol-clients-tests.mjs",
|
|
"test:vitest": "vitest run --config vitest.mcp.config.ts",
|
|
"test:ecosystem": "node scripts/run-ecosystem-tests.mjs",
|
|
"test:coverage": "c8 --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov --check-coverage --statements 60 --lines 60 --functions 60 --branches 60 node --import tsx/esm --test --test-concurrency=10 tests/unit/*.test.ts",
|
|
"test:coverage:legacy": "c8 --output-dir coverage --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.ts",
|
|
"coverage:report": "c8 report --output-dir coverage --exclude=tests/** --exclude=**/*.test.* --reporter=text --reporter=text-summary --reporter=html --reporter=json-summary --reporter=lcov",
|
|
"coverage:summary": "node scripts/test-report-summary.mjs --input coverage/coverage-summary.json --output coverage/coverage-report.md --threshold 60",
|
|
"check:pr-test-policy": "node scripts/check-pr-test-policy.mjs",
|
|
"coverage:report:legacy": "c8 report --output-dir coverage --exclude=open-sse --reporter=text --reporter=text-summary",
|
|
"test:all": "npm run test:unit && npm run test:vitest && npm run test:ecosystem && npm run test:e2e",
|
|
"check": "npm run lint && npm run test",
|
|
"prepublishOnly": "npm run build:cli && npm run check:pack-artifact",
|
|
"postinstall": "node scripts/postinstall.mjs",
|
|
"uninstall": "node scripts/uninstall.mjs",
|
|
"uninstall:full": "node scripts/uninstall.mjs --full",
|
|
"prepare": "husky",
|
|
"system-info": "node scripts/system-info.mjs"
|
|
},
|
|
"dependencies": {
|
|
"@lobehub/icons": "^5.5.4",
|
|
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
"@monaco-editor/react": "^4.7.0",
|
|
"@ngrok/ngrok": "^1.7.0",
|
|
"@swc/helpers": "0.5.21",
|
|
"axios": "^1.16.0",
|
|
"bcryptjs": "^3.0.3",
|
|
"better-sqlite3": "^12.6.2",
|
|
"bottleneck": "^2.19.5",
|
|
"express": "^5.2.1",
|
|
"fetch-socks": "^1.3.2",
|
|
"fuse.js": "^7.3.0",
|
|
"http-proxy-middleware": "^3.0.5",
|
|
"https-proxy-agent": "^9.0.0",
|
|
"isomorphic-dompurify": "^3.12.0",
|
|
"jose": "^6.1.3",
|
|
"js-yaml": "^4.1.0",
|
|
"jsonc-parser": "^3.3.1",
|
|
"lowdb": "^7.0.1",
|
|
"lucide-react": "^1.14.0",
|
|
"marked": "^18.0.3",
|
|
"mermaid": "^11.14.0",
|
|
"monaco-editor": "^0.55.1",
|
|
"next": "^16.2.3",
|
|
"next-intl": "^4.11.0",
|
|
"node-machine-id": "^1.1.12",
|
|
"open": "^11.0.0",
|
|
"ora": "^9.1.0",
|
|
"pino": "^10.3.1",
|
|
"pino-abstract-transport": "^3.0.0",
|
|
"pino-pretty": "^13.1.3",
|
|
"react": "19.2.5",
|
|
"react-dom": "19.2.5",
|
|
"react-is": "^19.2.5",
|
|
"react-markdown": "^10.1.0",
|
|
"recharts": "^3.7.0",
|
|
"selfsigned": "^5.5.0",
|
|
"tls-client-node": "^0.1.13",
|
|
"tsx": "^4.21.0",
|
|
"undici": "^8.2.0",
|
|
"uuid": "^14.0.0",
|
|
"wreq-js": "^2.0.1",
|
|
"xxhash-wasm": "^1.1.0",
|
|
"yazl": "^3.3.1",
|
|
"zod": "^4.4.3",
|
|
"zustand": "^5.0.10"
|
|
},
|
|
"optionalDependencies": {
|
|
"keytar": "^7.9.0"
|
|
},
|
|
"devDependencies": {
|
|
"@playwright/test": "^1.58.2",
|
|
"@tailwindcss/postcss": "^4.1.18",
|
|
"@testing-library/jest-dom": "^6.9.1",
|
|
"@testing-library/react": "^16.3.2",
|
|
"@types/bcryptjs": "^3.0.0",
|
|
"@types/better-sqlite3": "^7.6.13",
|
|
"@types/keytar": "^4.4.0",
|
|
"@types/node": "^25.2.3",
|
|
"@types/react": "^19.2.14",
|
|
"@types/react-dom": "^19.2.3",
|
|
"@vitejs/plugin-react": "^6.0.1",
|
|
"c8": "^11.0.0",
|
|
"concurrently": "^9.2.1",
|
|
"cross-env": "^10.1.0",
|
|
"eslint": "^9.39.2",
|
|
"eslint-config-next": "16.2.4",
|
|
"glob": "^13.0.6",
|
|
"gray-matter": "^4.0.3",
|
|
"husky": "^9.1.7",
|
|
"jsdom": "^29.1.1",
|
|
"lint-staged": "^16.2.7",
|
|
"node-loader": "^2.1.0",
|
|
"prettier": "^3.8.1",
|
|
"tailwindcss": "^4",
|
|
"typescript": "^6.0.2",
|
|
"typescript-eslint": "^8.59.2",
|
|
"vitest": "^4.1.2",
|
|
"wait-on": "^9.0.4",
|
|
"wtfnode": "^0.10.1"
|
|
},
|
|
"lint-staged": {
|
|
"*.{js,jsx,ts,tsx,mjs}": [
|
|
"prettier --write",
|
|
"eslint --fix --no-error-on-unmatched-pattern"
|
|
],
|
|
"*.{json,md,yml,yaml,css}": [
|
|
"prettier --write"
|
|
]
|
|
},
|
|
"pnpm": {
|
|
"onlyBuiltDependencies": [
|
|
"@parcel/watcher",
|
|
"@swc/core",
|
|
"better-sqlite3",
|
|
"esbuild",
|
|
"omniroute",
|
|
"sharp"
|
|
]
|
|
},
|
|
"overrides": {
|
|
"lodash-es": "^4.18.1",
|
|
"dompurify": "^3.4.2",
|
|
"path-to-regexp": "^8.4.0",
|
|
"postcss": "^8.5.10",
|
|
"ip-address": "10.1.1",
|
|
"hono": "^4.12.14",
|
|
"@hono/node-server": "^1.19.13",
|
|
"react": "$react",
|
|
"react-dom": "$react-dom"
|
|
}
|
|
}
|