Commit Graph

20 Commits

Author SHA1 Message Date
diegosouzapw
9739f41366 refactor: migrate entire src/ from JS to TypeScript
- Rename 254 .js files to .ts (domain, lib, services, stores, API routes, etc.)
- Rename 133 .js files to .tsx (components, pages, layouts)
- Fix ~230 import references (remove .js extensions from internal imports)
- Fix 10 open-sse cross-references to @/lib/ and ../../src/ paths
- Add TypeScript interfaces to Card, Modal, Button, and notificationStore
- Install tsx for test runner (handles extensionless .ts imports in Node ESM)
- Update test:unit script to use tsx/esm loader
- Update test imports from .js to .ts (20 files)
- Add typescript.ignoreBuildErrors in next.config.mjs for gradual migration
- Create src/types/global.d.ts for env vars and untyped modules
- Update tsconfig.json (jsx: preserve, forceConsistentCasingInFileNames)

Results:
- Build: ✓ compiles in ~40s
- Tests: ✓ 368/368 pass (100%)
- Zero .js files remain in src/
2026-02-17 01:53:41 -03:00
Diego Rodrigues de Sa e Souza
7152691755 Merge pull request #51 from diegosouzapw/fix/ci-actions
fix(ci): lower coverage thresholds, use production server for E2E, block ESLint major upgrades
2026-02-16 20:19:02 -03:00
Diego Rodrigues de Sa e Souza
e6c31bf890 Merge pull request #50 from diegosouzapw/dependabot/npm_and_yarn/development-55a9f41e4a
deps: bump eslint from 9.39.2 to 10.0.0 in the development group
2026-02-16 20:18:40 -03:00
diegosouzapw
127cdc9143 feat(proxy): implement TLS fingerprint spoofing via wreq-js
- Add TlsClient module (Chrome 124 fingerprint via wreq-js)
- Integrate TLS client as opt-in layer in proxyFetch.js (ENABLE_TLS_FINGERPRINT)
- Add per-request TLS tracking via AsyncLocalStorage
- Add TLS fingerprint column and badge to Proxy Logger dashboard
- Add TLS Fingerprint section to ProxyLogDetail modal
- Add wreq-js dependency
- Document ENABLE_TLS_FINGERPRINT in .env.example

Adapted from upstream PR decolua/9router#137, preserving all
OmniRoute-specific proxy features (AsyncLocalStorage context,
proxyDispatcher, SOCKS5, Symbol-based patch state).
2026-02-16 17:12:24 -03:00
diegosouzapw
23ee13818a fix(ci): lower coverage thresholds, use production server for E2E, block ESLint major upgrades 2026-02-16 17:01:50 -03:00
dependabot[bot]
9eeeb90dae deps: bump eslint from 9.39.2 to 10.0.0 in the development group
Bumps the development group with 1 update: [eslint](https://github.com/eslint/eslint).


Updates `eslint` from 9.39.2 to 10.0.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/compare/v9.39.2...v10.0.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 10.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: development
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-16 19:06:39 +00:00
diegosouzapw
e962e4f558 chore: bump version to 0.8.0
- Website launch (omniroute.online)
- Comprehensive SECURITY.md
- Documentation improvements
- Updated provider count to 36+
2026-02-16 14:33:13 -03:00
diegosouzapw
4cac582cb0 docs: add omniroute.online website URL to README, npm, and Docker
- Add Website badge to README header
- Add website link to nav, tech stack, support, and footer
- Update provider count from 28 to 36+
- Set package.json homepage to https://omniroute.online
- Add OCI image URL label to Dockerfile
2026-02-16 14:22:29 -03:00
diegosouzapw
5fe53168b2 chore: bump version to 0.7.0, reorganize changelog, add Docker Hub CI/CD and README
- Bump version from 0.6.0 to 0.7.0 in package.json
- Rewrite CHANGELOG.md with comprehensive entries from v0.1.0 to v0.7.0
- Add docker-publish.yml GitHub Actions workflow for auto Docker Hub push
- Add Docker Hub badge, Docker section, and Docker Hub link to README
- Update release command example to v0.7.0
2026-02-16 09:48:35 -03:00
diegosouzapw
1c6541f25d chore: bump version to 0.6.0 and update changelog 2026-02-16 00:22:55 -03:00
diegosouzapw
6572f2a1b6 chore: bump version to 0.5.0 and update changelog 2026-02-15 19:03:18 -03:00
diegosouzapw
0e238a61fb feat(core): implement 26 action items from critical analysis + bump v0.4.0
- Security: AES-256-GCM encryption for API keys/tokens, CI security audit
- Accessibility: ARIA labels, aria-live regions, skip-to-content, contrast utility
- Components: Tooltip, CloudSyncStatus, SystemMonitor, StreamTracker
- Utils: costEstimator, promptInjectionGuard middleware, Zod validation schemas
- Docs: openapi.yaml +9 routes, API_REFERENCE internal APIs, version bumps
- Quality: coverage thresholds 60/50/50, error handling improvements
2026-02-15 12:33:56 -03:00
diegosouzapw
3e89560a33 fix: downgrade ESLint v10→v9 for eslint-config-next compatibility
- ESLint 10 broke with scopeManager.addGlobals error (eslint-config-next plugins only support ≤v9)
- Rewrote eslint.config.mjs: removed defineConfig/globalIgnores (ESLint 10-only APIs)
- Now using ESLint 9 flat config format with plain array export
- Fixed TS lint warnings in compliance/index.js and a11yAudit.js
- Added omniroute-reset-password bin entry to package.json
- Lint passes cleanly (1 pre-existing React useState-in-effect warning)
- All 144 tests pass
2026-02-14 19:36:01 -03:00
diegosouzapw
1cbbc33f20 feat(security): FASE-01 to FASE-06 security hardening
FASE-01 — Security Hardening:
- Remove hardcoded JWT_SECRET and API_KEY_SECRET fallbacks (fail-fast)
- Create secretsValidator.js with enforceSecrets() at startup
- Create inputSanitizer.js (prompt injection + PII detection)
- Integrate sanitizer in chat.js handler pipeline
- Add structured logging to silent catch blocks in proxy.js
- Remove .passthrough() from Zod updateSettingsSchema
- Remove insecure npm fs dependency
- Update .env.example with generation commands

FASE-02 — CI/CD & Tests:
- Create ci.yml workflow (lint, build, test, coverage, e2e)
- Fix test scripts (test now runs actual tests)
- Add test:unit, test:security, test:coverage (c8), test:all
- Add security rules to ESLint (no-eval, no-implied-eval, no-new-func)

FASE-03 — Architecture:
- Create settingsCache.js (eliminate self-fetch anti-pattern)
- Create domain/types.js and domain/responses.js

FASE-04 — Observability:
- Create correlationId.js (AsyncLocalStorage tracing)
- Create circuitBreaker.js (full state machine + registry)
- Create requestTimeout.js (per-provider timeouts)

FASE-05 — Code Quality:
- Create structuredLogger.js (JSON/human-readable logging)

FASE-06 — Documentation:
- Update SECURITY.md with hardening practices
- Create CONTRIBUTING.md with dev setup and PR checklist

Tests: 52/52 pass (23 security + 15 observability + 14 integration)
2026-02-14 18:21:47 -03:00
diegosouzapw
81a4f2986c feat: v0.2.0 — advanced routing services, cost analytics dashboard, pricing overhaul
Added:
- 8 new open-sse services (account selector, IP filter, session manager, etc.)
- 6 new dashboard settings tabs (IP filter, system prompt, thinking budget, pricing)
- Usage cost dashboard with provider cost donut, cost trend line, model cost column
- Pricing API merging registry + custom + pricing-only models
- 9 unit tests for all new services

Changed:
- Usage analytics layout redesigned with prominent cost display
- DailyTrendChart upgraded to ComposedChart with dual Y-axes

Fixed:
- Pricing page now shows custom/imported models
- Icon rendering (material-symbols-rounded → outlined)
2026-02-14 13:50:45 -03:00
Diego Rodrigues de Sa e Souza
92b4c59fec feat(npm): add npm package publishing with CLI entry point (#15)
- Add bin/omniroute.mjs CLI with banner, auto-open browser, graceful shutdown
- Add scripts/prepublish.mjs to build Next.js standalone into app/
- Add .github/workflows/npm-publish.yml for automated publish on release
- Update package.json: name=omniroute, bin, files, engines, keywords, prepublishOnly
- Add output: 'standalone' to next.config.mjs
- Add MIT LICENSE
- Update .npmignore and .gitignore for app/ build artifact

Co-authored-by: diegosouzapw <diegosouzapw@users.noreply.github.com>
2026-02-14 04:14:14 -03:00
Diego Rodrigues de Sa e Souza
f5898d3898 Merge pull request #3 from diegosouzapw/dependabot/npm_and_yarn/development-55a9f41e4a
deps: bump eslint from 9.39.2 to 10.0.0 in the development group
2026-02-13 16:51:58 -03:00
diegosouzapw
50fc931086 feat(versioning): set initial version to 0.0.1 and restore dynamic model import
- Set package.json version to 0.0.1 (initial OmniRoute release)
- Set open-sse/package.json version to 0.0.1
- Restore 'Import from /models' button for standard providers (openai, gemini, deepseek, etc.)
- Add handleImportModels function to ProviderDetailPage
2026-02-13 16:49:06 -03:00
dependabot[bot]
172461863e deps: bump eslint from 9.39.2 to 10.0.0 in the development group
Bumps the development group with 1 update: [eslint](https://github.com/eslint/eslint).


Updates `eslint` from 9.39.2 to 10.0.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/compare/v9.39.2...v10.0.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 10.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: development
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-13 19:31:36 +00:00
diegosouzapw
699329944e feat: initial OmniRoute release (rebranded from 9router)
This project is inspired by and originally forked from 9router by decolua
(https://github.com/decolua/9router).

Full rebrand: 9router → OmniRoute across all source code, configuration,
Docker, documentation, and assets.
2026-02-13 16:29:27 -03:00