# 🌐 OmniRoute Proxy Guide (āĻŦāĻžāĻ‚āϞāĻž) 🌐 **Languages:** đŸ‡ē🇸 [English](../../../../ops/PROXY_GUIDE.md) ¡ đŸ‡Ē🇹 [am](../../../am/docs/ops/PROXY_GUIDE.md) ¡ 🇸đŸ‡Ļ [ar](../../../ar/docs/ops/PROXY_GUIDE.md) ¡ đŸ‡ĻđŸ‡ŋ [az](../../../az/docs/ops/PROXY_GUIDE.md) ¡ 🇧đŸ‡Ŧ [bg](../../../bg/docs/ops/PROXY_GUIDE.md) ¡ 🇧đŸ‡Ļ [bs](../../../bs/docs/ops/PROXY_GUIDE.md) ¡ 🇨đŸ‡ŋ [cs](../../../cs/docs/ops/PROXY_GUIDE.md) ¡ 🇩🇰 [da](../../../da/docs/ops/PROXY_GUIDE.md) ¡ 🇩đŸ‡Ē [de](../../../de/docs/ops/PROXY_GUIDE.md) ¡ đŸ‡Ŧ🇷 [el](../../../el/docs/ops/PROXY_GUIDE.md) ¡ đŸ‡Ē🇸 [es](../../../es/docs/ops/PROXY_GUIDE.md) ¡ đŸ‡ĒđŸ‡Ē [et](../../../et/docs/ops/PROXY_GUIDE.md) ¡ 🇮🇷 [fa](../../../fa/docs/ops/PROXY_GUIDE.md) ¡ đŸ‡Ģ🇮 [fi](../../../fi/docs/ops/PROXY_GUIDE.md) ¡ đŸ‡Ģ🇷 [fr](../../../fr/docs/ops/PROXY_GUIDE.md) ¡ 🇮đŸ‡Ē [ga](../../../ga/docs/ops/PROXY_GUIDE.md) ¡ đŸ‡ŽđŸ‡ŗ [gu](../../../gu/docs/ops/PROXY_GUIDE.md) ¡ đŸ‡ŗđŸ‡Ŧ [ha](../../../ha/docs/ops/PROXY_GUIDE.md) ¡ 🇮🇱 [he](../../../he/docs/ops/PROXY_GUIDE.md) ¡ đŸ‡ŽđŸ‡ŗ [hi](../../../hi/docs/ops/PROXY_GUIDE.md) ¡ 🇭🇷 [hr](../../../hr/docs/ops/PROXY_GUIDE.md) ¡ 🇭đŸ‡ē [hu](../../../hu/docs/ops/PROXY_GUIDE.md) ¡ đŸ‡Ļ🇲 [hy](../../../hy/docs/ops/PROXY_GUIDE.md) ¡ 🇮🇩 [id](../../../id/docs/ops/PROXY_GUIDE.md) ¡ đŸ‡ŗđŸ‡Ŧ [ig](../../../ig/docs/ops/PROXY_GUIDE.md) ¡ 🇮🇹 [it](../../../it/docs/ops/PROXY_GUIDE.md) ¡ đŸ‡¯đŸ‡ĩ [ja](../../../ja/docs/ops/PROXY_GUIDE.md) ¡ đŸ‡ŦđŸ‡Ē [ka](../../../ka/docs/ops/PROXY_GUIDE.md) ¡ 🇰🇭 [km](../../../km/docs/ops/PROXY_GUIDE.md) ¡ đŸ‡ŽđŸ‡ŗ [kn](../../../kn/docs/ops/PROXY_GUIDE.md) ¡ 🇰🇷 [ko](../../../ko/docs/ops/PROXY_GUIDE.md) ¡ 🇱🇹 [lt](../../../lt/docs/ops/PROXY_GUIDE.md) ¡ 🇱đŸ‡ģ [lv](../../../lv/docs/ops/PROXY_GUIDE.md) ¡ đŸ‡ŽđŸ‡ŗ [ml](../../../ml/docs/ops/PROXY_GUIDE.md) ¡ đŸ‡ŽđŸ‡ŗ [mr](../../../mr/docs/ops/PROXY_GUIDE.md) ¡ 🇲🇾 [ms](../../../ms/docs/ops/PROXY_GUIDE.md) ¡ 🇲🇹 [mt](../../../mt/docs/ops/PROXY_GUIDE.md) ¡ 🇲🇲 [my](../../../my/docs/ops/PROXY_GUIDE.md) ¡ đŸ‡ŗđŸ‡ĩ [ne](../../../ne/docs/ops/PROXY_GUIDE.md) ¡ đŸ‡ŗđŸ‡ą [nl](../../../nl/docs/ops/PROXY_GUIDE.md) ¡ đŸ‡ŗđŸ‡´ [no](../../../no/docs/ops/PROXY_GUIDE.md) ¡ đŸ‡ŽđŸ‡ŗ [or](../../../or/docs/ops/PROXY_GUIDE.md) ¡ đŸ‡ŽđŸ‡ŗ [pa](../../../pa/docs/ops/PROXY_GUIDE.md) ¡ đŸ‡ĩ🇭 [phi](../../../phi/docs/ops/PROXY_GUIDE.md) ¡ đŸ‡ĩ🇱 [pl](../../../pl/docs/ops/PROXY_GUIDE.md) ¡ đŸ‡ĩ🇹 [pt](../../../pt/docs/ops/PROXY_GUIDE.md) ¡ 🇧🇷 [pt-BR](../../../pt-BR/docs/ops/PROXY_GUIDE.md) ¡ 🇷🇴 [ro](../../../ro/docs/ops/PROXY_GUIDE.md) ¡ 🇷đŸ‡ē [ru](../../../ru/docs/ops/PROXY_GUIDE.md) ¡ 🇱🇰 [si](../../../si/docs/ops/PROXY_GUIDE.md) ¡ 🇸🇰 [sk](../../../sk/docs/ops/PROXY_GUIDE.md) ¡ 🇸🇮 [sl](../../../sl/docs/ops/PROXY_GUIDE.md) ¡ 🇷🇸 [sr](../../../sr/docs/ops/PROXY_GUIDE.md) ¡ 🇸đŸ‡Ē [sv](../../../sv/docs/ops/PROXY_GUIDE.md) ¡ 🇰đŸ‡Ē [sw](../../../sw/docs/ops/PROXY_GUIDE.md) ¡ đŸ‡ŽđŸ‡ŗ [ta](../../../ta/docs/ops/PROXY_GUIDE.md) ¡ đŸ‡ŽđŸ‡ŗ [te](../../../te/docs/ops/PROXY_GUIDE.md) ¡ 🇹🇭 [th](../../../th/docs/ops/PROXY_GUIDE.md) ¡ 🇹🇷 [tr](../../../tr/docs/ops/PROXY_GUIDE.md) ¡ đŸ‡ēđŸ‡Ļ [uk-UA](../../../uk-UA/docs/ops/PROXY_GUIDE.md) ¡ đŸ‡ĩ🇰 [ur](../../../ur/docs/ops/PROXY_GUIDE.md) ¡ đŸ‡ēđŸ‡ŋ [uz](../../../uz/docs/ops/PROXY_GUIDE.md) ¡ đŸ‡ģđŸ‡ŗ [vi](../../../vi/docs/ops/PROXY_GUIDE.md) ¡ đŸ‡ŗđŸ‡Ŧ [yo](../../../yo/docs/ops/PROXY_GUIDE.md) ¡ đŸ‡¨đŸ‡ŗ [zh-CN](../../../zh-CN/docs/ops/PROXY_GUIDE.md) ¡ 🇹đŸ‡ŧ [zh-TW](../../../zh-TW/docs/ops/PROXY_GUIDE.md) --- > **āϭ⧌āĻ—ā§‹āϞāĻŋāĻ• āĻŦā§āϞāĻ• āĻāĻĄāĻŧāĻŋāϝāĻŧ⧇ āϝāĻžāύ, āφāĻĒāύāĻžāϰ āĻĒāϰāĻŋāϚāϝāĻŧ āϏ⧁āϰāĻ•ā§āώāĻŋāϤ āϰāĻžāϖ⧁āύ āĻāĻŦāĻ‚ āϝ⧇āϕ⧋āύ⧋ āĻĒā§āϰāĻ•ā§āϏāĻŋāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ AI āĻŸā§āϰāĻžāĻĢāĻŋāĻ• āϰāĻžāωāϟ āĻ•āϰ⧁āύ — āϕ⧋āύ⧋ āϜāϟāĻŋāϞ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻ›āĻžāĻĄāĻŧāĻžāχāĨ¤** OmniRoute-āĻ āĻāĻ•āϟāĻŋ āĻĒā§‚āĻ°ā§āĻŖāĻžāĻ™ā§āĻ— āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻŦā§āϝāĻŦāĻ¸ā§āĻĨāĻžāĻĒāύāĻž āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āϰāϝāĻŧ⧇āϛ⧇, āϝāĻž āφāĻĒāύāĻžāϕ⧇ HTTP, HTTPS āĻ…āĻĨāĻŦāĻž SOCKS5 āĻĒā§āϰāĻ•ā§āϏāĻŋāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āφāĻĒāĻ¸ā§āĻŸā§āϰāĻŋāĻŽ AI āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϰ āĻŸā§āϰāĻžāĻĢāĻŋāĻ• āϰāĻžāωāϟ āĻ•āϰāϤ⧇ āĻĻ⧇āϝāĻŧāĨ¤ āφāĻĒāύāĻŋ āĻŦā§āϞāĻ• āĻ•āϰāĻž āĻ…āĻžā§āϚāϞ⧇ āĻĨāĻžāϕ⧁āύ, IP āϰ⧋āĻŸā§‡āĻļāύ⧇āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšā§‹āĻ• āĻ…āĻĨāĻŦāĻž āĻ—ā§‹āĻĒāύ āĻĢāĻŋāĻ™ā§āĻ—āĻžāϰāĻĒā§āϰāĻŋāĻ¨ā§āϟāĻŋāĻ‚ āϚāĻžāχ⧁āύ — āĻāχ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻŋāĻ•āĻžāϝāĻŧ āϏāĻŦāĻ•āĻŋāϛ⧁ āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ āϰāϝāĻŧ⧇āϛ⧇āĨ¤ --- ## āϏ⧂āϚāĻŋāĻĒāĻ¤ā§āϰ - [āϕ⧇āύ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ⧇āύ?](#why-use-proxies) - [āφāĻ°ā§āĻ•āĻŋāĻŸā§‡āĻ•āϚāĻžāϰ⧇āϰ āϏāĻžāϰāϏāĻ‚āĻ•ā§āώ⧇āĻĒ](#architecture-overview) - [ā§Ē-āĻ¸ā§āϤāϰāĻŦāĻŋāĻļāĻŋāĻˇā§āϟ āĻĒā§āϰāĻ•ā§āϏāĻŋ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ](#4-level-proxy-system) - [āĻĒā§āϰāĻ•ā§āϏāĻŋ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ (CRUD)](#proxy-registry-crud) - [1proxy āĻŦāĻŋāύāĻžāĻŽā§‚āĻ˛ā§āϝ⧇āϰ āĻŽāĻžāĻ°ā§āϕ⧇āϟāĻĒā§āϞ⧇āϏ](#1proxy-free-proxy-marketplace) - [āĻĒā§āϰāĻ•ā§āϏāĻŋ āϰ⧋āĻŸā§‡āĻļāύ](#proxy-rotation) - [āĻļāύāĻžāĻ•ā§āϤāĻ•āϰāĻŖ āĻĒā§āϰāϤāĻŋāϰ⧋āϧ āĻ“ āĻ—ā§‹āĻĒāύ⧀āϝāĻŧāϤāĻž](#anti-detection--stealth) - [āφāĻĒāĻ¸ā§āĻŸā§āϰāĻŋāĻŽ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻŽā§‹āĻĄ](#upstream-proxy-modes) - [āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄ UI](#dashboard-ui) - [API āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ](#api-reference) - [āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ](#environment-variables) - [āϏāĻŽāĻ¸ā§āϝāĻž āϏāĻŽāĻžāϧāĻžāύ](#troubleshooting) --- ## āϕ⧇āύ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ⧇āύ? āĻ…āύ⧇āĻ• AI āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀ āϭ⧌āĻ—ā§‹āϞāĻŋāĻ• āĻ…āĻžā§āϚāϞ⧇āϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋāϤ⧇ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧ āĻ•āϰ⧇āĨ¤ **āϰāĻžāĻļāĻŋāϝāĻŧāĻž, āĻšā§€āύ, āχāϰāĻžāύ, āĻ•āĻŋāωāĻŦāĻž, āϤ⧁āϰāĻ¸ā§āĻ•** āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻĻ⧇āĻļ⧇āϰ āĻĄā§‡āϭ⧇āϞāĻĒāĻžāϰāϰāĻž āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āϧāϰāύ⧇āϰ āĻ¤ā§āϰ⧁āϟāĻŋāϰ āϏāĻŽā§āĻŽā§āĻ–ā§€āύ āĻšāύ: ``` unsupported_country_region_territory ``` āĻāĻŽāύāĻ•āĻŋ āĻŦā§āϞāĻ• āĻ•āϰāĻž āĻ…āĻžā§āϚāϞ⧇āϰ āĻŦāĻžāχāϰ⧇āĻ“ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻ•āĻžāĻœā§‡ āωāĻĒāϝ⧋āĻ—ā§€: | āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇āϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ | āĻŦāĻŋāĻŦāϰāĻŖ | | ----------------------- | ---------------------------------------------------------------------- | | **āϭ⧌āĻ—ā§‹āϞāĻŋāĻ• āĻŦā§āϞāĻ• āĻāĻĄāĻŧāĻžāύ⧋** | āĻŦā§āϞāĻ• āĻ•āϰāĻž āĻĻ⧇āĻļāϗ⧁āϞ⧋ āĻĨ⧇āϕ⧇ OpenAI, Anthropic, Codex, Copilot āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āϰ⧁āύ | | **IP āϰ⧋āĻŸā§‡āĻļāύ** | āϰ⧇āϟ āϞāĻŋāĻŽāĻŋāϟāĻŋāĻ‚ āĻāĻĄāĻŧāĻžāϤ⧇ āĻāĻ•āĻžāϧāĻŋāĻ• IP-āϤ⧇ āĻ…āύ⧁āϰ⧋āϧ āĻŦāĻŋāϤāϰāĻŖ āĻ•āϰ⧁āύ | | **āĻ—ā§‹āĻĒāύ⧀āϝāĻŧāϤāĻž** | āφāĻĒāĻ¸ā§āĻŸā§āϰāĻŋāĻŽ āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āĻ•āĻžāĻ› āĻĨ⧇āϕ⧇ āφāĻĒāύāĻžāϰ āφāϏāϞ IP āϞ⧁āĻ•āĻŋāϝāĻŧ⧇ āϰāĻžāϖ⧁āύ | | **āĻ•āĻŽāĻĒā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϏ** | āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻŦāĻŋāϚāĻžāϰāĻŦā§āϝāĻŦāĻ¸ā§āĻĨāĻžāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻŸā§āϰāĻžāĻĢāĻŋāĻ• āϰāĻžāωāϟ āĻ•āϰ⧁āύ | | **āĻĒāϰ⧀āĻ•ā§āώāĻž** | āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻ…āĻžā§āϚāϞ āĻĨ⧇āϕ⧇ āφāϏāĻž āĻ…āύ⧁āϰ⧋āϧ āϏāĻŋāĻŽā§āϞ⧇āϟ āĻ•āϰ⧁āύ | --- ## āφāĻ°ā§āĻ•āĻŋāĻŸā§‡āĻ•āϚāĻžāϰ⧇āϰ āϏāĻžāϰāϏāĻ‚āĻ•ā§āώ⧇āĻĒ ``` ┌───────────────────────────────────────────────────────────────┐ │ OmniRoute āϏāĻžāĻ°ā§āĻ­āĻžāϰ │ │ │ │ ┌─────────────┐ ┌──────────────┐ ┌──────────────────┐ │ │ │ āĻĒā§āϰāĻ•ā§āϏāĻŋ │ │ āĻĒā§āϰāĻ•ā§āϏāĻŋ │ │ āĻĒā§āϰāĻ•ā§āϏāĻŋ │ │ │ │ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ │───â–ļ│ āĻĄāĻŋāϏāĻĒā§āϝāĻžāϚāĻžāϰ │───â–ļ│ Fetch (undici) │ │ │ │ (SQLite) │ │ (āĻ•ā§āϝāĻžāĻļāĻĄ) │ │ │ │ │ └─────────────┘ └──────────────┘ └────────â”Ŧ─────────┘ │ │ ▲ │ │ │ │ â–ŧ │ │ ┌──────┴──────┐ ┌──────────────────┐ │ │ │ 1proxy āϏāĻŋāĻ™ā§āĻ• │ │ āφāĻĒāĻ¸ā§āĻŸā§āϰāĻŋāĻŽ │ │ │ │ (āĻŦāĻŋāύāĻžāĻŽā§‚āĻ˛ā§āϝ⧇āϰ āĻĒ⧁āϞ) │ │ āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀ API │ │ │ └─────────────┘ └──────────────────┘ │ └───────────────────────────────────────────────────────────────┘ ``` ### āĻĒā§āϰāϧāĻžāύ āĻ•āĻŽā§āĻĒā§‹āύ⧇āĻ¨ā§āϟāϏāĻŽā§‚āĻš | āĻ•āĻŽā§āĻĒā§‹āύ⧇āĻ¨ā§āϟ | āĻĢāĻžāχāϞ | āĻ­ā§‚āĻŽāĻŋāĻ•āĻž | | ---------------------- | -------------------------------------------- | ----------------------------------------------------------- | | **āĻĒā§āϰāĻ•ā§āϏāĻŋ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ** | `src/lib/db/proxies.ts` | āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻāĻ¨ā§āĻŸā§āϰāĻŋ āĻ“ āĻ¸ā§āϕ⧋āĻĒ āĻ…ā§āϝāĻžāϏāĻžāχāύāĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ CRUD | | **āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻĄāĻŋāϏāĻĒā§āϝāĻžāϚāĻžāϰ** | `open-sse/utils/proxyDispatcher.ts` | āĻ•ā§āϝāĻžāĻļāĻŋāĻ‚āϏāĻš `undici` ProxyAgent/SOCKS āĻĄāĻŋāϏāĻĒā§āϝāĻžāϚāĻžāϰ āϤ⧈āϰāĻŋ āĻ•āϰ⧇ | | **āĻĒā§āϰāĻ•ā§āϏāĻŋ Fetch** | `open-sse/utils/proxyFetch.ts` | āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻĄāĻŋāϏāĻĒā§āϝāĻžāϚāĻžāϰ āχāύāĻœā§‡āĻ•āĻļāύāϏāĻš `fetch()` āĻ°ā§āϝāĻžāĻĒ āĻ•āϰ⧇ | | **āϏ⧇āϟāĻŋāĻ‚āϏ āϰ⧁āϟ** | `src/app/api/settings/proxy/route.ts` | āϞāĻŋāĻ—ā§āϝāĻžāϏāĻŋ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ API (GET/PUT/DELETE) | | **āĻŽā§āϝāĻžāύ⧇āϜāĻŽā§‡āĻ¨ā§āϟ āϰ⧁āϟ** | `src/app/api/v1/management/proxies/route.ts` | āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ CRUD API (GET/POST/PATCH/DELETE) | | **1proxy DB** | `src/lib/db/oneproxy.ts` | āĻŦāĻŋāύāĻžāĻŽā§‚āĻ˛ā§āϝ⧇āϰ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻŽāĻžāĻ°ā§āϕ⧇āϟāĻĒā§āϞ⧇āϏ⧇āϰ āĻ¸ā§āĻĨāĻžāϝāĻŧā§€ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻŦā§āϝāĻŦāĻ¸ā§āĻĨāĻž | --- ## ā§Ē-āĻ¸ā§āϤāϰ⧀āϝāĻŧ āĻĒā§āϰāĻ•ā§āϏāĻŋ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ OmniRoute **āϚāĻžāϰāϟāĻŋ āĻ¸ā§āĻŦāϤāĻ¨ā§āĻ¤ā§āϰ āĻ¸ā§āϕ⧋āĻĒ⧇** āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āϏāĻŽāĻ°ā§āĻĨāύ āĻ•āϰ⧇, āϝ⧇āϗ⧁āϞ⧋ āĻ…āĻ—ā§āϰāĻžāϧāĻŋāĻ•āĻžāϰ⧇āϰ āĻ•ā§āϰāĻŽ āĻ…āύ⧁āϏāĻžāϰ⧇ āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰāĻž āĻšāϝāĻŧ: ``` āĻ…āĻ—ā§āϰāĻžāϧāĻŋāĻ•āĻžāϰ āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ āϏāĻŽāĻžāϧāĻžāύ⧇āϰ āĻ•ā§āϰāĻŽ (āϏāĻ°ā§āĻŦā§‹āĻšā§āϚ → āϏāĻ°ā§āĻŦāύāĻŋāĻŽā§āύ): 1. đŸ”ĩ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ/āĻ•āĻžāύ⧇āĻ•āĻļāύ āĻĒā§āϰāĻ•ā§āϏāĻŋ → āĻĒā§āϰāϤāĻŋ API āϕ⧀ / OAuth āĻ•āĻžāύ⧇āĻ•āĻļāύ 2. 🟡 āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ āĻĒā§āϰāĻ•ā§āϏāĻŋ → āĻĒā§āϰāϤāĻŋ āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ (āϝ⧇āĻŽāύ, āϏāĻŽāĻ¸ā§āϤ OpenAI āĻŸā§āϰāĻžāĻĢāĻŋāĻ•) 3. 🟠 āĻ•āĻŽā§āĻŦā§‹ āĻĒā§āϰāĻ•ā§āϏāĻŋ → āĻĒā§āϰāϤāĻŋ āĻ•āĻŽā§āĻŦā§‹/āϰāĻžāωāϟāĻŋāĻ‚ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ 4. đŸŸĸ āĻ—ā§āϞ⧋āĻŦāĻžāϞ āĻĒā§āϰāĻ•ā§āϏāĻŋ → āϏāĻŽāĻ¸ā§āϤ āĻŸā§āϰāĻžāĻĢāĻŋāĻ•, āϏāĻŽāĻ¸ā§āϤ āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ ``` ### āϏāĻŽāĻžāϧāĻžāύ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇ OmniRoute āϝāĻ–āύ āϕ⧋āύ⧋ āφāĻĒāĻ¸ā§āĻŸā§āϰāĻŋāĻŽ āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ⧇āϰ āĻ•āĻžāϛ⧇ āĻ…āύ⧁āϰ⧋āϧ āĻĒāĻžāĻ āĻžāϝāĻŧ, āϤāĻ–āύ āĻāϟāĻŋ `resolveProxyForConnectionFromRegistry()` āĻ•āϞ āĻ•āϰ⧇, āϝāĻž āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ¸ā§āϤāϰ āĻ•ā§āϰāĻŽāĻžāύ⧁āϏāĻžāϰ⧇ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧇: 1. **āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ-āĻ¸ā§āϤāϰ** — āĻāχ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āĻžāύ⧇āĻ•āĻļāύ ID-āϤ⧇ āĻ•āĻŋ āϕ⧋āύ⧋ āĻĒā§āϰāĻ•ā§āϏāĻŋ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŋāϤ āφāϛ⧇? 2. **āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ-āĻ¸ā§āϤāϰ** — āĻāχ āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ⧇āϰ āϜāĻ¨ā§āϝ (āϝ⧇āĻŽāύ, `openai`) āĻ•āĻŋ āϕ⧋āύ⧋ āĻĒā§āϰāĻ•ā§āϏāĻŋ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŋāϤ āφāϛ⧇? 3. **āĻ—ā§āϞ⧋āĻŦāĻžāϞ-āĻ¸ā§āϤāϰ** — āϕ⧋āύ⧋ āĻ—ā§āϞ⧋āĻŦāĻžāϞ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻ•āĻŋ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ āĻ•āϰāĻž āφāϛ⧇? 4. **āϕ⧋āύ⧋ āĻĒā§āϰāĻ•ā§āϏāĻŋ āύ⧇āχ** — āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ⧇āϰ āϏāĻ™ā§āϗ⧇ āϏāϰāĻžāϏāϰāĻŋ āĻ•āĻžāύ⧇āĻ•āĻļāύāĨ¤ āĻĒā§āϰāĻĨāĻŽ āĻŽāĻŋāϞ⧇ āϝāĻžāĻ“āϝāĻŧāĻž āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύāϟāĻŋāχ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāϝāĻŧāĨ¤ āĻāϰ āĻ…āĻ°ā§āĻĨ āĻšāϞ⧋, āφāĻĒāύāĻŋ āĻĢāϞāĻŦā§āϝāĻžāĻ• āĻšāĻŋāϏ⧇āĻŦ⧇ āĻāĻ•āϟāĻŋ āĻ—ā§āϞ⧋āĻŦāĻžāϞ āĻĒā§āϰāĻ•ā§āϏāĻŋ āϏ⧇āϟ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ, āϤāĻŦ⧇ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ āĻŦāĻž āĻ•āĻžāύ⧇āĻ•āĻļāύ⧇āϰ āϜāĻ¨ā§āϝ āϏ⧇āϟāĻŋ āĻ“āĻ­āĻžāϰāϰāĻžāχāĻĄ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ ### āϕ⧋āύ āĻŸā§āϰāĻžāĻĢāĻŋāĻ• āĻĒā§āϰāĻ•ā§āϏāĻŋāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϝāĻžāϝāĻŧ | āĻŸā§āϰāĻžāĻĢāĻŋāϕ⧇āϰ āϧāϰāύ | āĻĒā§āϰāĻ•ā§āϏāĻŋāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϝāĻžāϝāĻŧ? | āύ⧋āϟ | | --------------------- | ---------------------- | -------------------------------------------------- | | āĻšā§āϝāĻžāϟ āĻ•āĻŽāĻĒā§āϞāĻŋāĻļāύ | ✅ | āϏāĻŽāĻ¸ā§āϤ `/v1/chat/completions` āĻ…āύ⧁āϰ⧋āϧ | | āĻāĻŽā§āĻŦ⧇āĻĄāĻŋāĻ‚ | ✅ | `/v1/embeddings` | | āĻ›āĻŦāĻŋ āϤ⧈āϰāĻŋ | ✅ | `/v1/images/generations` | | āĻ…āĻĄāĻŋāĻ“ (TTS/STT) | ✅ | `/v1/audio/*` | | OAuth āĻŸā§‹āϕ⧇āύ āĻāĻ•ā§āϏāĻšā§‡āĻžā§āϜ | ✅ | `unsupported_country_region_territory` āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰ⧇ | | āĻ•āĻžāύ⧇āĻ•āĻļāύ āĻĒāϰ⧀āĻ•ā§āώāĻž | ✅ | "āĻ•āĻžāύ⧇āĻ•āĻļāύ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧁āύ" āĻŦā§‹āϤāĻžāĻŽāϟāĻŋ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ | | āĻŸā§‹āϕ⧇āύ āϰāĻŋāĻĢā§āϰ⧇āĻļ | ✅ | āĻŦā§āϝāĻžāĻ•āĻ—ā§āϰāĻžāωāĻ¨ā§āĻĄ OAuth āύāĻŦāĻžāϝāĻŧāύ | | āĻŽāĻĄā§‡āϞ āϏāĻŋāĻ™ā§āĻ• | ✅ | āĻŽāĻĄā§‡āϞ⧇āϰ āϤāĻžāϞāĻŋāĻ•āĻž āϤ⧈āϰāĻŋ āĻ“ āφāĻŦāĻŋāĻˇā§āĻ•āĻžāϰ | --- ## āĻĒā§āϰāĻ•ā§āϏāĻŋ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ (CRUD) āĻĒā§āϰāĻ•ā§āϏāĻŋ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ āĻšāϞ⧋ āĻāĻ•āϟāĻŋ SQLite āĻŸā§‡āĻŦāĻŋāϞ (`proxy_registry`), āϝ⧇āĻ–āĻžāύ⧇ āφāĻĒāύāĻžāϰ āϏāĻŦ āĻĒā§āϰāĻ•ā§āϏāĻŋ āϏāĻ‚āϰāĻ•ā§āώāĻŋāϤ āĻĨāĻžāϕ⧇āĨ¤ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĒā§āϰāĻ•ā§āϏāĻŋāϤ⧇ āϰāϝāĻŧ⧇āϛ⧇: | āĻĢāĻŋāĻ˛ā§āĻĄ | āϧāϰāύ | āĻŦāĻŋāĻŦāϰāĻŖ | | ---------- | ------- | --------------------------------------------------------------- | | `id` | UUID | āĻ…āύāĻ¨ā§āϝ āĻļāύāĻžāĻ•ā§āϤāĻ•āĻžāϰ⧀ | | `name` | String | āĻŽāĻžāύ⧁āώ⧇āϰ āĻĒāĻžāĻ āϝ⧋āĻ—ā§āϝ āϞ⧇āĻŦ⧇āϞ | | `type` | String | āĻĒā§āϰ⧋āĻŸā§‹āĻ•āϞ: `http`, `https`, `socks5` | | `host` | String | āĻĒā§āϰāĻ•ā§āϏāĻŋāϰ āĻšā§‹āĻ¸ā§āϟāύ⧇āĻŽ āĻŦāĻž IP | | `port` | Integer | āĻĒā§‹āĻ°ā§āϟ āύāĻŽā§āĻŦāϰ | | `username` | String | āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāϪ⧇āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āύāĻžāĻŽ (āϏāĻ‚āϰāĻ•ā§āώāĻŋāϤ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāϝāĻŧ āĻāύāĻ•ā§āϰāĻŋāĻĒā§āϟ āĻ•āϰāĻž) | | `password` | String | āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāϪ⧇āϰ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ (āϏāĻ‚āϰāĻ•ā§āώāĻŋāϤ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāϝāĻŧ āĻāύāĻ•ā§āϰāĻŋāĻĒā§āϟ āĻ•āϰāĻž) | | `region` | String | āϭ⧌āĻ—ā§‹āϞāĻŋāĻ• āĻ…āĻžā§āϚāϞ⧇āϰ āϞ⧇āĻŦ⧇āϞ | | `notes` | String | āĻŽā§āĻ•ā§āϤ-āĻĒāĻžāĻ ā§āϝ āύ⧋āϟ | | `status` | String | `active` āĻ…āĻĨāĻŦāĻž `inactive` | | `source` | String | `manual` āĻ…āĻĨāĻŦāĻž `oneproxy` | ### āĻāĻ•āϟāĻŋ āĻĒā§āϰāĻ•ā§āϏāĻŋ āϤ⧈āϰāĻŋ āĻ•āϰāĻž **āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄā§‡āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡:** 1. **Settings → Proxy**-āĻ āϝāĻžāύ 2. **Add Proxy**-āϤ⧇ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰ⧁āύ 3. āϧāϰāύ, āĻšā§‹āĻ¸ā§āϟ, āĻĒā§‹āĻ°ā§āϟ āĻāĻŦāĻ‚ āϐāĻšā§āĻ›āĻŋāĻ• āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻ•ā§āϰ⧇āĻĄā§‡āύāĻļāĻŋāϝāĻŧāĻžāϞ āĻĒā§‚āϰāĻŖ āĻ•āϰ⧁āύ 4. āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧁āύ **API-āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡:** ```bash curl -X POST http://localhost:20128/api/v1/management/proxies \ -H "Content-Type: application/json" \ -d '{ "name": "US Proxy", "type": "http", "host": "proxy.example.com", "port": 8080, "username": "user", "password": "pass", "region": "US" }' ``` ### āĻāĻ•āϟāĻŋ āĻĒā§āϰāĻ•ā§āϏāĻŋ āφāĻĒāĻĄā§‡āϟ āĻ•āϰāĻž ```bash curl -X PATCH http://localhost:20128/api/v1/management/proxies \ -H "Content-Type: application/json" \ -d '{ "id": "proxy-uuid-here", "host": "new-proxy.example.com", "port": 9090 }' ``` > **āύ⧋āϟ:** āφāĻĒāύāĻŋ āĻ¸ā§āĻĒāĻˇā§āϟāĻ­āĻžāĻŦ⧇ āĻĢāĻžāρāĻ•āĻž āύāϝāĻŧ āĻāĻŽāύ āĻĒā§āϰāϤāĻŋāĻ¸ā§āĻĨāĻžāĻĒāύ āĻĒāĻžāĻ āĻžāύ⧋ āύāĻž āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āĻ•ā§āϰ⧇āĻĄā§‡āύāĻļāĻŋāϝāĻŧāĻžāϞāϗ⧁āϞ⧋ āϏāĻ‚āϰāĻ•ā§āώāĻŋāϤ āĻĨāĻžāϕ⧇āĨ¤ `username`/`password`-āĻāϰ āϜāĻ¨ā§āϝ āĻĢāĻžāρāĻ•āĻž āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āĻĒāĻžāĻ āĻžāϞ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŋāϤ āĻŽāĻžāύāϗ⧁āϞ⧋ āĻ…āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻĨāĻžāĻ•āĻŦ⧇āĨ¤ ### āĻāĻ•āϟāĻŋ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻŽā§āϛ⧇ āĻĢ⧇āϞāĻž ```bash # āĻĒā§āϰāĻ•ā§āϏāĻŋāϟāĻŋ āϕ⧋āύ⧋ āĻ¸ā§āϕ⧋āĻĒ⧇ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŋāϤ āĻĨāĻžāĻ•āϞ⧇ āĻŦā§āϝāĻ°ā§āĻĨ āĻšāĻŦ⧇ curl -X DELETE "http://localhost:20128/api/v1/management/proxies?id=proxy-uuid" # āĻœā§‹āϰāĻĒā§‚āĻ°ā§āĻŦāĻ• āĻŽā§āϛ⧇ āĻĢ⧇āϞāĻž (āĻ…ā§āϝāĻžāϏāĻžāχāύāĻŽā§‡āĻ¨ā§āϟāĻ“ āϏāϰāĻŋāϝāĻŧ⧇ āĻĻ⧇āϝāĻŧ) curl -X DELETE "http://localhost:20128/api/v1/management/proxies?id=proxy-uuid&force=1" ``` ### āĻĒā§āϰāĻ•ā§āϏāĻŋāϗ⧁āϞ⧋āϰ āϤāĻžāϞāĻŋāĻ•āĻž āĻĻ⧇āĻ–āĻž ```bash curl "http://localhost:20128/api/v1/management/proxies?limit=50&offset=0" ``` ### āĻ¸ā§āϕ⧋āĻĒ⧇ āĻĒā§āϰāĻ•ā§āϏāĻŋ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰāĻž ```bash # āĻ—ā§āϞ⧋āĻŦāĻžāϞ āĻ¸ā§āϕ⧋āĻĒ⧇ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰ⧁āύ curl -X PUT http://localhost:20128/api/settings/proxy \ -H "Content-Type: application/json" \ -d '{"level": "global", "proxy": {"type":"http","host":"proxy.example.com","port":8080}}' # āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ⧇ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰ⧁āύ curl -X PUT http://localhost:20128/api/settings/proxy \ -H "Content-Type: application/json" \ -d '{"level": "provider", "id": "openai", "proxy": {"type":"socks5","host":"socks.example.com","port":1080}}' # āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āĻžāύ⧇āĻ•āĻļāύ/āϕ⧀āϤ⧇ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰ⧁āύ curl -X PUT http://localhost:20128/api/settings/proxy \ -H "Content-Type: application/json" \ -d '{"level": "key", "id": "connection-uuid", "proxy": {"type":"http","host":"key-proxy.com","port":3128}}' ``` ### āĻ•āĻžāĻ°ā§āϝāĻ•āϰ āĻĒā§āϰāĻ•ā§āϏāĻŋ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰāĻž āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āĻžāύ⧇āĻ•āĻļāύ⧇āϰ āϜāĻ¨ā§āϝ āϕ⧋āύ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāĻŦ⧇ āϤāĻž āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧁āύ: ```bash curl "http://localhost:20128/api/settings/proxy?resolve=connection-uuid" ``` āĻāϟāĻŋ āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰāĻž āĻĒā§āϰāĻ•ā§āϏāĻŋāϟāĻŋāϕ⧇ āϤāĻžāϰ āĻ¸ā§āϤāϰ (`account`, `provider`, āĻ…āĻĨāĻŦāĻž `global`) āĻāĻŦāĻ‚ āĻ‰ā§ŽāϏāϏāĻš āĻĢ⧇āϰāϤ āĻĻ⧇āϝāĻŧāĨ¤ ### āĻŦāĻžāĻ˛ā§āĻ• āĻ…ā§āϝāĻžāϏāĻžāχāύāĻŽā§‡āĻ¨ā§āϟ āĻāĻ•āϏāĻ™ā§āϗ⧇ āĻāĻ•āĻžāϧāĻŋāĻ• āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ āĻŦāĻž āĻ•āĻžāύ⧇āĻ•āĻļāύ⧇ āĻāĻ•āϟāĻŋ āĻĒā§āϰāĻ•ā§āϏāĻŋ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰ⧁āύ: ```bash curl -X POST http://localhost:20128/api/v1/management/proxies/bulk-assign \ -H "Content-Type: application/json" \ -d '{ "scope": "provider", "scopeIds": ["openai", "anthropic", "codex"], "proxyId": "proxy-uuid" }' ``` ### āχāĻŽāĻĒā§‹āĻ°ā§āϟ/āĻāĻ•ā§āϏāĻĒā§‹āĻ°ā§āϟ āĻĒā§āϰāĻ•ā§āϏāĻŋāϗ⧁āϞ⧋ **Backup/Restore** āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡ āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ āĻĨāĻžāϕ⧇āĨ¤ āφāĻĒāύāĻžāϰ OmniRoute āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻāĻ•ā§āϏāĻĒā§‹āĻ°ā§āϟ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ: 1. **Dashboard → Settings → Backup**-āĻ āϝāĻžāύ 2. **Export**-āĻ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰ⧁āύ — āĻĒā§āϰāĻ•ā§āϏāĻŋ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ āĻāĻŦāĻ‚ āĻ…ā§āϝāĻžāϏāĻžāχāύāĻŽā§‡āĻ¨ā§āϟāϗ⧁āϞ⧋ āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ āĻĨāĻžāĻ•āĻŦ⧇ 3. āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰāϤ⧇, **Import**-āĻ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āĻŦā§āϝāĻžāĻ•āφāĻĒ āĻĢāĻžāχāϞāϟāĻŋ āφāĻĒāϞ⧋āĻĄ āĻ•āϰ⧁āύ āĻĒā§āϰāĻ•ā§āϏāĻŋ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ **host+port āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ upsert**-āĻ“ āϏāĻŽāĻ°ā§āĻĨāύ āĻ•āϰ⧇ — āφāĻĒāύāĻŋ āφāϗ⧇ āĻĨ⧇āϕ⧇āχ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āϕ⧋āύ⧋ āĻĒā§āϰāĻ•ā§āϏāĻŋ (āĻāĻ•āχ āĻšā§‹āĻ¸ā§āϟ āĻ“ āĻĒā§‹āĻ°ā§āϟ) āχāĻŽāĻĒā§‹āĻ°ā§āϟ āĻ•āϰāϞ⧇, āĻĄā§āĻĒā§āϞāĻŋāϕ⧇āϟ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇ āϏ⧇āϟāĻŋ āφāĻĒāĻĄā§‡āϟ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤ ### āϞāĻŋāĻ—ā§āϝāĻžāϏāĻŋ āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύ āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻĒ⧁āϰ⧋āύ⧋ āϕ⧋āύ⧋ āϏāĻ‚āĻ¸ā§āĻ•āϰāϪ⧇ (āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ-āĻĒā§‚āĻ°ā§āĻŦāĻŦāĻ°ā§āϤ⧀) āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ āĻ•āϰ⧇ āĻĨāĻžāϕ⧇āύ, OmniRoute āϏ⧇āϗ⧁āϞ⧋ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āĻŽāĻžāχāĻ—ā§āϰ⧇āϟ āĻ•āϰ⧇: ``` āϞāĻŋāĻ—ā§āϝāĻžāϏāĻŋ key_value āĻ¸ā§āĻŸā§‹āϰ → proxy_registry + proxy_assignments ``` āφāĻĒāĻ—ā§āϰ⧇āĻĄā§‡āϰ āĻĒāϰ āĻĒā§āϰāĻĨāĻŽāĻŦāĻžāϰ āϚāĻžāϞ⧁ āĻšāĻ“āϝāĻŧāĻžāϰ āϏāĻŽāϝāĻŧ āĻāϟāĻŋ āĻāĻ•āĻŦāĻžāϰ āϘāĻŸā§‡āĨ¤ āĻĒ⧁āύāϰāĻžāϝāĻŧ āϚāĻžāϞāĻžāϤ⧇ `migrateLegacyProxyConfigToRegistry({ force: true })` āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύāĨ¤ --- ## 1proxy āĻŦāĻŋāύāĻžāĻŽā§‚āĻ˛ā§āϝ⧇āϰ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻŽāĻžāĻ°ā§āϕ⧇āϟāĻĒā§āϞ⧇āϏ > 🆕 **[@oyi77](https://github.com/oyi77) āĻ•āĻ°ā§āϤ⧃āĻ• āĻ…āĻŦāĻĻāĻžāύāĻ•ā§ƒāϤ** — PR [#1847](https://github.com/diegosouzapw/OmniRoute/pull/1847) (āχāĻ¸ā§āϝ⧁ [#1788](https://github.com/diegosouzapw/OmniRoute/issues/1788)) āĻŦāĻŋāĻļā§āĻŦāϜ⧁āĻĄāĻŧ⧇ **āĻļāϤ āĻļāϤ āĻŦāĻŋāύāĻžāĻŽā§‚āĻ˛ā§āϝ⧇āϰ, āϝāĻžāϚāĻžāχāĻ•ā§ƒāϤ āĻĒā§āϰāĻ•ā§āϏāĻŋāϤ⧇** āĻĒā§āϰāĻŦ⧇āĻļāĻžāϧāĻŋāĻ•āĻžāϰ āĻĻāĻŋāϤ⧇ OmniRoute **[1proxy](https://1proxy-api.aitradepulse.com)** āĻ•āĻŽāĻŋāωāύāĻŋāϟāĻŋ āĻĒā§āĻ˛ā§āϝāĻžāϟāĻĢāĻ°ā§āĻŽā§‡āϰ āϏāĻ™ā§āϗ⧇ āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āϟ āĻ•āϰ⧇āĨ¤ āϝ⧇āϏāĻŦ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āύāĻŋāϜāĻ¸ā§āĻŦ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻ…āĻŦāĻ•āĻžāĻ āĻžāĻŽā§‹ āύ⧇āχ, āϤāĻžāρāĻĻ⧇āϰ āϜāĻ¨ā§āϝ āĻāϟāĻŋ āφāĻĻāĻ°ā§āĻļāĨ¤ ### āĻāϟāĻŋ āϝ⧇āĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇ ``` ┌─────────────┐ āϏāĻŋāĻ™ā§āĻ• ┌─────────────────┐ āϰ⧋āĻŸā§‡āϟ ┌──────────┐ │ 1proxy API │ ────────────â–ļ │ proxy_registry │ ────────────â–ļ │ āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀ │ │ (āĻŦāĻžāĻšā§āϝāĻŋāĻ•) │ āϏāĻ°ā§āĻŦā§‹āĻšā§āϚ 500 │ source=oneproxy │ āϗ⧁āĻŖāĻŽāĻžāύ āĻ…āύ⧁āϝāĻžāϝāĻŧā§€â”‚ API │ └─────────────┘ āĻĒā§āϰāĻ•ā§āϏāĻŋ └─────────────────┘ └──────────┘ ``` 1. **āϏāĻŋāĻ™ā§āĻ•** — OmniRoute 1proxy API āĻĨ⧇āϕ⧇ āϝāĻžāϚāĻžāχāĻ•ā§ƒāϤ āĻĒā§āϰāĻ•ā§āϏāĻŋ āϏāĻ‚āĻ—ā§āϰāĻš āĻ•āϰ⧇ 2. **āϏāĻ‚āϰāĻ•ā§āώāĻŖ** — āĻĒā§āϰāĻ•ā§āϏāĻŋāϗ⧁āϞ⧋ āĻāĻ•āχ `proxy_registry` āĻŸā§‡āĻŦāĻŋāϞ⧇ `source = 'oneproxy'` āϏāĻš āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāĻž āĻšāϝāĻŧ 3. **āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ** — āĻĒā§āϰ⧋āĻŸā§‹āĻ•āϞ, āĻĻ⧇āĻļ āĻ“ āϗ⧁āĻŖāĻŽāĻžāύ⧇āϰ āĻ¸ā§āϕ⧋āϰ āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āĻ•āϰ⧁āύ 4. **āϰ⧋āĻŸā§‡āϟ** — āϗ⧁āĻŖāĻŽāĻžāύāĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ•, āĻ°ā§āϝāĻžāĻ¨ā§āĻĄāĻŽ āĻŦāĻž āϧāĻžāϰāĻžāĻŦāĻžāĻšāĻŋāĻ• āĻ•ā§ŒāĻļāϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϏ⧇āϰāĻž āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻŦ⧇āϛ⧇ āύāĻŋāύ 5. **āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧ āĻ…āĻŦāύāĻŽāύ** — āĻŦā§āϝāĻ°ā§āĻĨ āĻĒā§āϰāĻ•ā§āϏāĻŋāϗ⧁āϞ⧋āϰ āϗ⧁āĻŖāĻŽāĻžāύ⧇āϰ āĻ¸ā§āϕ⧋āϰ āĻ•āĻŽā§‡ āϝāĻžāϝāĻŧ; āĻĨā§āϰ⧇āĻļāĻšā§‹āĻ˛ā§āĻĄā§‡āϰ āύāĻŋāĻšā§‡ āϗ⧇āϞ⧇ → āύāĻŋāĻˇā§āĻ•ā§āϰāĻŋāϝāĻŧ āĻšāĻŋāϏ⧇āĻŦ⧇ āϚāĻŋāĻšā§āύāĻŋāϤ āĻšāϝāĻŧ ### āĻĒā§āϰāĻ•ā§āϏāĻŋ āϏāĻŋāĻ™ā§āĻ• āĻ•āϰāĻž **āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄā§‡āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡:** 1. **Settings → 1proxy** āĻŸā§āϝāĻžāĻŦ⧇ āϝāĻžāύ 2. **"Sync Now"**-āĻ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰ⧁āύ 3. āĻĒāϰāĻŋāϏāĻ‚āĻ–ā§āϝāĻžāύ āĻĻ⧇āϖ⧁āύ: āĻŽā§‹āϟ āĻĒā§āϰāĻ•ā§āϏāĻŋ, āϏāĻ•ā§āϰāĻŋāϝāĻŧ āϏāĻ‚āĻ–ā§āϝāĻž, āĻ—āĻĄāĻŧ āϗ⧁āĻŖāĻŽāĻžāύ āĻāĻŦāĻ‚ āĻĻ⧇āĻļāĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āĻŦāĻŋāĻ­āĻžāϜāύ **API-āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡:** ```bash # āϏāĻŋāĻ™ā§āĻ• āĻļ⧁āϰ⧁ āĻ•āϰ⧁āύ curl -X POST http://localhost:20128/api/settings/oneproxy \ -H "Content-Type: application/json" \ -d '{}' # āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž: # { "success": true, "added": 127, "updated": 45, "failed": 2, "total": 172 } ``` ### āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āĻ•āϰāĻž ```bash # āĻĒā§āϰ⧋āĻŸā§‹āĻ•āϞ āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āĻ•āϰ⧁āύ curl "http://localhost:20128/api/settings/oneproxy?protocol=socks5" # āĻĻ⧇āĻļ āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āĻ•āϰ⧁āύ curl "http://localhost:20128/api/settings/oneproxy?countryCode=US" # āĻ¨ā§āϝ⧂āύāϤāĻŽ āϗ⧁āĻŖāĻŽāĻžāύ⧇āϰ āĻ¸ā§āϕ⧋āϰ āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āĻ•āϰ⧁āύ curl "http://localhost:20128/api/settings/oneproxy?minQuality=80" # āĻĢāĻŋāĻ˛ā§āϟāĻžāϰāϗ⧁āϞ⧋ āĻāĻ•āĻ¤ā§āϰ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ curl "http://localhost:20128/api/settings/oneproxy?protocol=http&countryCode=DE&minQuality=70" ``` ### āĻĒā§āϰāĻ•ā§āϏāĻŋāϰ āϗ⧁āĻŖāĻŽāĻžāύ⧇āϰ āĻ¸ā§āϕ⧋āϰ āĻĒā§āϰāϤāĻŋāϟāĻŋ 1proxy āĻĒā§āϰāĻ•ā§āϏāĻŋāϰ āϏāĻ™ā§āϗ⧇ āĻŽā§‡āϟāĻžāĻĄā§‡āϟāĻž āĻĨāĻžāϕ⧇: | āĻĢāĻŋāĻ˛ā§āĻĄ | āĻŦāĻŋāĻŦāϰāĻŖ | | --------------- | -------------------------------------------------- | | `qualityScore` | 1proxy-āĻāϰ āϝāĻžāϚāĻžāχāĻ•āϰāĻŖ āĻĨ⧇āϕ⧇ āĻĒā§āϰāĻžāĻĒā§āϤ 0-100 āϰ⧇āϟāĻŋāĻ‚ | | `latencyMs` | āĻĒāϰāĻŋāĻŽāĻžāĻĒ āĻ•āϰāĻž āύ⧇āϟāĻ“āϝāĻŧāĻžāĻ°ā§āĻ• āĻ˛ā§āϝāĻžāĻŸā§‡āĻ¨ā§āϏāĻŋ | | `anonymity` | `transparent`, `anonymous` āĻ…āĻĨāĻŦāĻž `elite` | | `googleAccess` | āĻĒā§āϰāĻ•ā§āϏāĻŋāϟāĻŋ Google āĻĒāϰāĻŋāώ⧇āĻŦāĻž āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇ āĻ•āĻŋ āύāĻž | | `countryCode` | āĻĻ⧁āχ āĻ…āĻ•ā§āώāϰ⧇āϰ ISO āĻĻ⧇āĻļ āϕ⧋āĻĄ | | `lastValidated` | āϏāĻ°ā§āĻŦāĻļ⧇āώ āϝāĻžāϚāĻžāχāĻ•āϰāϪ⧇āϰ āϟāĻžāχāĻŽāĻ¸ā§āĻŸā§āϝāĻžāĻŽā§āĻĒ | āϗ⧁āĻŖāĻŽāĻžāύ⧇āϰ āĻ¸ā§āϕ⧋āϰ āĻ—āϤāĻŋāĻļā§€āϞāĻ­āĻžāĻŦ⧇ āϏāĻŽāĻ¨ā§āĻŦāϝāĻŧ āĻ•āϰāĻž āĻšāϝāĻŧ: - **āĻŦā§āϝāĻ°ā§āĻĨ āĻ…āύ⧁āϰ⧋āϧ** āĻ¸ā§āϕ⧋āϰ 10 āĻĒāϝāĻŧ⧇āĻ¨ā§āϟ āĻ•āĻŽāĻŋāϝāĻŧ⧇ āĻĻ⧇āϝāĻŧ - **āĻ¸ā§āϕ⧋āϰ ≤10-āĻ āύ⧇āĻŽā§‡ āϗ⧇āϞ⧇** → āĻĒā§āϰāĻ•ā§āϏāĻŋāϟāĻŋ `inactive` āĻšāĻŋāϏ⧇āĻŦ⧇ āϚāĻŋāĻšā§āύāĻŋāϤ āĻšāϝāĻŧ - āύāĻŋāĻˇā§āĻ•ā§āϰāĻŋāϝāĻŧ āĻĒā§āϰāĻ•ā§āϏāĻŋāϗ⧁āϞ⧋ āϰ⧋āĻŸā§‡āĻļāύ āĻĨ⧇āϕ⧇ āĻŦāĻžāĻĻ āĻĻ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧ ### āϰ⧋āĻŸā§‡āĻļāύ āĻ•ā§ŒāĻļāϞ ```bash # āϗ⧁āĻŖāĻŽāĻžāύ āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ āϰ⧋āĻŸā§‡āϟ āĻ•āϰ⧁āύ (āϏ⧇āϰāĻž āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻĒā§āϰāĻĨāĻŽā§‡) — āĻĄāĻŋāĻĢāĻ˛ā§āϟ curl -X POST http://localhost:20128/api/settings/oneproxy/rotate \ -H "Content-Type: application/json" \ -d '{"strategy": "quality"}' # āĻ°ā§āϝāĻžāĻ¨ā§āĻĄāĻŽ āϰ⧋āĻŸā§‡āĻļāύ curl -X POST http://localhost:20128/api/settings/oneproxy/rotate \ -d '{"strategy": "random"}' # āϧāĻžāϰāĻžāĻŦāĻžāĻšāĻŋāĻ• (āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āφāϗ⧇ āϝāĻžāϚāĻžāχ āĻ•āϰāĻž āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻĒā§āϰāĻĨāĻŽā§‡) curl -X POST http://localhost:20128/api/settings/oneproxy/rotate \ -d '{"strategy": "sequential"}' ``` ### āϏāĻžāĻ°ā§āĻ•āĻŋāϟ āĻŦā§āϰ⧇āĻ•āĻžāϰ 1proxy āϏāĻŋāĻ™ā§āϕ⧇ āĻāĻ•āϟāĻŋ āĻŦāĻŋāĻ˛ā§āϟ-āχāύ āϏāĻžāĻ°ā§āĻ•āĻŋāϟ āĻŦā§āϰ⧇āĻ•āĻžāϰ āϰāϝāĻŧ⧇āϛ⧇: - **āĻĒāϰāĻĒāϰ 5āϟāĻŋ āϏāĻŋāĻ™ā§āĻ• āĻŦā§āϝāĻ°ā§āĻĨāϤāĻžāϰ** āĻĒāϰ⧇ āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āϏāĻŋāĻ™ā§āĻ• āĻĒā§āϰāĻšā§‡āĻˇā§āϟāĻžāϗ⧁āϞ⧋ āĻŦā§āϞāĻ• āĻ•āϰāĻž āĻšāϝāĻŧ - āĻāϟāĻŋ āĻĻāĻŋāϝāĻŧ⧇ āϰāĻŋāϏ⧇āϟ āĻ•āϰ⧁āύ: `resetOneproxyCircuitBreaker()` āĻ…āĻĨāĻŦāĻž āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻĒ⧁āύāϰāĻžāϝāĻŧ āϚāĻžāϞ⧁ āĻ•āϰ⧁āύ - āϏāĻŋāĻ™ā§āϕ⧇āϰ āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ `GET /api/settings/oneproxy?action=status`-āĻ āĻĒāĻžāĻ“āϝāĻŧāĻž āϝāĻžāϝāĻŧ ### 1proxy āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻŽā§āϛ⧇ āĻĢ⧇āϞāĻž ```bash # āĻāĻ•āϟāĻŋ 1proxy āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻŽā§āϛ⧁āύ curl -X DELETE "http://localhost:20128/api/settings/oneproxy?id=proxy-uuid" # āϏāĻŦ 1proxy āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻŽā§āϛ⧁āύ (āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞ āĻĒā§āϰāĻ•ā§āϏāĻŋāϗ⧁āϞ⧋ āĻ…āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻĨāĻžāĻ•āĻŦ⧇) curl -X DELETE "http://localhost:20128/api/settings/oneproxy?clearAll=1" ``` --- ## āĻ…ā§āϝāĻžāĻ¨ā§āϟāĻŋ-āĻĄāĻŋāĻŸā§‡āĻ•āĻļāύ āĻ“ āĻ¸ā§āĻŸā§‡āϞāĻĨ OmniRoute āĻļ⧁āϧ⧁ āĻāĻ•āϟāĻŋ āĻĒā§āϰāĻ•ā§āϏāĻŋāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻŸā§āϰāĻžāĻĢāĻŋāĻ• āϰāĻžāωāϟāχ āĻ•āϰ⧇ āύāĻž — āĻāϟāĻŋ āĻŸā§āϰāĻžāĻĢāĻŋāĻ•āϕ⧇ āĻŦ⧈āϧ āĻŦāϞ⧇āĻ“ āĻĒā§āϰāϤ⧀āϝāĻŧāĻŽāĻžāύ āĻ•āϰ⧇: ### TLS āĻĢāĻŋāĻ™ā§āĻ—āĻžāϰāĻĒā§āϰāĻŋāĻ¨ā§āϟ āĻ¸ā§āĻĒ⧁āĻĢāĻŋāĻ‚ `wreq-js` āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻŦā§āϰāĻžāωāϜāĻžāϰ⧇āϰ āĻŽāϤ⧋ TLS āĻĢāĻŋāĻ™ā§āĻ—āĻžāϰāĻĒā§āϰāĻŋāĻ¨ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰ⧇, āϝāĻž āύāύ-āĻŦā§āϰāĻžāωāϜāĻžāϰ TLS āĻšā§āϝāĻžāĻ¨ā§āĻĄāĻļ⧇āĻ• āĻļāύāĻžāĻ•ā§āϤāĻ•āĻžāϰ⧀ āĻŦāϟ āĻĄāĻŋāĻŸā§‡āĻ•āĻļāύ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽāϕ⧇ āĻāĻĄāĻŧāĻŋāϝāĻŧ⧇ āϝāĻžāϝāĻŧāĨ¤ ### CLI āĻĢāĻŋāĻ™ā§āĻ—āĻžāϰāĻĒā§āϰāĻŋāĻ¨ā§āϟ āĻŽā§āϝāĻžāϚāĻŋāĻ‚ **CLI āĻĢāĻŋāĻ™ā§āĻ—āĻžāϰāĻĒā§āϰāĻŋāĻ¨ā§āϟ āϟāĻ—āϞ** (`Settings → Security`) HTTP āĻšā§‡āĻĄāĻžāϰ āĻāĻŦāĻ‚ JSON āĻŦāĻĄāĻŋ āĻĢāĻŋāĻ˛ā§āĻĄāϗ⧁āϞ⧋ āĻĒ⧁āύāĻ°ā§āĻŦāĻŋāĻ¨ā§āϝāĻ¸ā§āϤ āĻ•āϰ⧇, āϝāĻžāϤ⧇ āϏ⧇āϗ⧁āϞ⧋ āύ⧇āϟāĻŋāĻ­ CLI āĻŦāĻžāχāύāĻžāϰāĻŋāϰ (Claude Code, Codex āχāĻ¤ā§āϝāĻžāĻĻāĻŋ) āϏ⧁āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϏāĻŋāĻ—āύ⧇āϚāĻžāϰ⧇āϰ āϏāĻ™ā§āϗ⧇ āĻŽāĻŋāϞ⧇ āϝāĻžāϝāĻŧāĨ¤ āĻāϟāĻŋ āĻĒā§āϰāĻ•ā§āϏāĻŋāϰ **āωāĻĒāϰ āĻāĻ•āϟāĻŋ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āĻ¸ā§āϤāϰ āĻšāĻŋāϏ⧇āĻŦ⧇** āĻ•āĻžāϜ āĻ•āϰ⧇: ``` āφāĻĒāύāĻžāϰ IP (āĻŦā§āϞāĻ• āĻ•āϰāĻž) → āĻĒā§āϰāĻ•ā§āϏāĻŋ IP (US) → āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ API + TLS āĻ¸ā§āĻĒ⧁āĻĢ + CLI āĻĢāĻŋāĻ™ā§āĻ—āĻžāϰāĻĒā§āϰāĻŋāĻ¨ā§āϟ ``` āφāĻĒāύāĻŋ āĻāĻ•āχ āϏāĻ™ā§āϗ⧇ **IP āĻŽāĻžāĻ¸ā§āĻ•āĻŋāĻ‚** āĻāĻŦāĻ‚ **āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¸ā§āĻŸā§‡āϰ āϏāĻ¤ā§āϝāϤāĻž**—āωāĻ­āϝāĻŧ āϏ⧁āĻŦāĻŋāϧāĻžāχ āĻĒāĻžāύāĨ¤ ### āĻĒā§āϰāĻ•ā§āϏāĻŋ IP āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄā§‡āϰ āϰāĻ™āĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āĻŦā§āϝāĻžāϜāϗ⧁āϞ⧋ āĻĻ⧇āĻ–āĻžāϝāĻŧ āϕ⧋āύ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻ¸ā§āϤāϰ āϏāĻ•ā§āϰāĻŋāϝāĻŧ āϰāϝāĻŧ⧇āϛ⧇: | āĻŦā§āϝāĻžāϜ | āĻ¸ā§āϤāϰ | āĻ…āĻ°ā§āĻĨ | | ----- | ---------- | --------------------------------------------------- | | đŸŸĸ | āĻ—ā§āϞ⧋āĻŦāĻžāϞ | āϏāĻŽāĻ¸ā§āϤ āĻŸā§āϰāĻžāĻĢāĻŋāĻ• āĻāχ āĻĒā§āϰāĻ•ā§āϏāĻŋāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϝāĻžāϝāĻŧ | | 🟡 | āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ | āĻļ⧁āϧ⧁ āĻāχ āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ⧇āϰ āĻŸā§āϰāĻžāĻĢāĻŋāĻ• āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻ•āϰāĻž āĻšāϝāĻŧ | | đŸ”ĩ | āĻ•āĻžāύ⧇āĻ•āĻļāύ | āĻāχ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϕ⧀/āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟāϟāĻŋ āĻāχ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ | āϝāĻžāϚāĻžāχāϝāĻŧ⧇āϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻžāĻœā§‡ āϰāĻŋāϜāϞāĻ­ āĻ•āϰāĻž āĻĒā§āϰāĻ•ā§āϏāĻŋ IP-āĻ“ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāϝāĻŧāĨ¤ --- ## āφāĻĒāĻ¸ā§āĻŸā§āϰāĻŋāĻŽ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻŽā§‹āĻĄ CLIProxyAPI āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰāϗ⧁āϞ⧋āϰ āϜāĻ¨ā§āϝ OmniRoute āϤāĻŋāύāϟāĻŋ āφāĻĒāĻ¸ā§āĻŸā§āϰāĻŋāĻŽ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻŽā§‹āĻĄ āϏāĻŽāĻ°ā§āĻĨāύ āĻ•āϰ⧇: | āĻŽā§‹āĻĄ | āĻŦāĻŋāĻŦāϰāĻŖ | | ------------- | -------------------------------------------------------------- | | `native` | OmniRoute āϏāϰāĻžāϏāϰāĻŋ āĻĒā§āϰāĻ•ā§āϏāĻŋ āϰāĻžāωāϟāĻŋāĻ‚ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰ⧇ (āĻĄāĻŋāĻĢāĻ˛ā§āϟ) | | `cliproxyapi` | āĻāĻ•āϟāĻŋ āĻŦāĻžāĻšā§āϝāĻŋāĻ• CLIProxyAPI āχāύāĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āϏ⧇āϰ āĻ•āĻžāϛ⧇ āĻĻāĻžāϝāĻŧāĻŋāĻ¤ā§āĻŦ āĻ…āĻ°ā§āĻĒāĻŖ āĻ•āϰ⧇ | | `fallback` | āĻĒā§āϰāĻĨāĻŽā§‡ āύ⧇āϟāĻŋāĻ­ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰ⧇, āĻŦā§āϝāĻ°ā§āĻĨ āĻšāϞ⧇ CLIProxyAPI āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ | āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ⧇āϰ āϜāĻ¨ā§āϝ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ āĻ•āϰ⧁āύ: ```bash curl -X PUT "http://localhost:20128/api/upstream-proxy/openai" \ -H "Content-Type: application/json" \ -d '{"mode": "native", "enabled": true}' ``` --- ## āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄ UI ### Settings → Proxy āĻŸā§āϝāĻžāĻŦ - āϏāĻŽāĻ¸ā§āϤ āĻŸā§āϰāĻžāĻĢāĻŋāϕ⧇āϰ āϜāĻ¨ā§āϝ **āĻ—ā§āϞ⧋āĻŦāĻžāϞ āĻĒā§āϰāĻ•ā§āϏāĻŋ** āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ (āĻāĻ•āĻŦāĻžāϰ āϏ⧇āϟ āĻ•āϰ⧁āύ) - **āĻĒā§āϰāϤāĻŋ-āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ āĻĒā§āϰāĻ•ā§āϏāĻŋ** āĻ“āĻ­āĻžāϰāϰāĻžāχāĻĄ - **āĻĒā§āϰāϤāĻŋ-āĻ•āĻžāύ⧇āĻ•āĻļāύ āĻĒā§āϰāĻ•ā§āϏāĻŋ** āĻ…ā§āϝāĻžāϏāĻžāχāύāĻŽā§‡āĻ¨ā§āϟ - āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ āĻ•āϰāĻž āĻĒā§āϰāĻ•ā§āϏāĻŋāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ **āĻ•āĻžāύ⧇āĻ•āĻļāύ āĻĒāϰ⧀āĻ•ā§āώāĻž** - āϏāĻ•ā§āϰāĻŋāϝāĻŧ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻ¸ā§āϤāϰ āĻĒā§āϰāĻĻāĻ°ā§āĻļāύāĻ•āĻžāϰ⧀ **āϰāĻ™āĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āĻŦā§āϝāĻžāϜ** ### Settings → 1proxy āĻŸā§āϝāĻžāĻŦ - āĻŦāĻŋāύāĻžāĻŽā§‚āĻ˛ā§āϝ⧇āϰ āĻĒā§āϰāĻ•ā§āϏāĻŋ āφāύāϤ⧇ **Sync Now** āĻŦā§‹āϤāĻžāĻŽ - **āĻĒāϰāĻŋāϏāĻ‚āĻ–ā§āϝāĻžāύ āĻ•āĻžāĻ°ā§āĻĄ**: āĻŽā§‹āϟ, āϏāĻ•ā§āϰāĻŋāϝāĻŧ, āĻ—āĻĄāĻŧ āĻŽāĻžāύ, āϏāĻ°ā§āĻŦāĻļ⧇āώ āϏāĻŋāĻ™ā§āĻ• - **āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ**: āĻĒā§āϰ⧋āĻŸā§‹āĻ•āϞ, āĻĻ⧇āĻļ⧇āϰ āϕ⧋āĻĄ, āĻ¨ā§āϝ⧂āύāϤāĻŽ āĻŽāĻžāύ - āĻšā§‹āĻ¸ā§āϟ, āĻĒā§āϰ⧋āĻŸā§‹āĻ•āϞ, āĻĻ⧇āĻļ, āĻŽāĻžāύ⧇āϰ āĻ¸ā§āϕ⧋āϰ, āĻ˛ā§āϝāĻžāĻŸā§‡āĻ¨ā§āϏāĻŋ, āĻ…ā§āϝāĻžāύ⧋āύāĻŋāĻŽāĻŋāϟāĻŋ āĻāĻŦāĻ‚ Google āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏāϏāĻš **āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻŸā§‡āĻŦāĻŋāϞ** - āϏāĻĢāϞāϤāĻž/āĻŦā§āϝāĻ°ā§āĻĨāϤāĻž āĻŸā§āĻ°ā§āϝāĻžāĻ•āĻŋāĻ‚ āĻāĻŦāĻ‚ āϧāĻžāϰāĻžāĻŦāĻžāĻšāĻŋāĻ• āĻŦā§āϝāĻ°ā§āĻĨāϤāĻžāϰ āϏāĻ‚āĻ–ā§āϝāĻž āĻĻ⧇āĻ–āĻžāύ⧋ **āϏāĻŋāĻ™ā§āĻ• āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ** āĻĒā§āϝāĻžāύ⧇āϞ - āϏāĻŦ 1proxy āĻāĻ¨ā§āĻŸā§āϰāĻŋ āϏāϰāĻžāϤ⧇ **Clear All** --- ## API āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ ### āĻĒā§āϰāĻ•ā§āϏāĻŋ āϏ⧇āϟāĻŋāĻ‚āϏ API | āĻŽā§‡āĻĨāĻĄ | āĻāĻ¨ā§āĻĄāĻĒāϝāĻŧ⧇āĻ¨ā§āϟ | āĻŦāĻŋāĻŦāϰāĻŖ | | -------- | ---------------------------------------------- | ----------------------------- | | `GET` | `/api/settings/proxy` | āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻ•āύāĻĢāĻŋāĻ— āĻĒāĻžāύ | | `GET` | `/api/settings/proxy?level=global` | āĻ—ā§āϞ⧋āĻŦāĻžāϞ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻĒāĻžāύ | | `GET` | `/api/settings/proxy?level=provider&id=openai` | āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻĒāĻžāύ | | `GET` | `/api/settings/proxy?resolve=connectionId` | āĻ•āĻžāĻ°ā§āϝāĻ•āϰ āĻĒā§āϰāĻ•ā§āϏāĻŋ āϰāĻŋāϜāϞāĻ­ āĻ•āϰ⧁āύ | | `PUT` | `/api/settings/proxy` | āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻ•āύāĻĢāĻŋāĻ— āφāĻĒāĻĄā§‡āϟ āĻ•āϰ⧁āύ | | `DELETE` | `/api/settings/proxy?level=provider&id=openai` | āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ¸ā§āϤāϰ⧇āϰ āĻĒā§āϰāĻ•ā§āϏāĻŋ āϏāϰāĻžāύ | ### āĻĒā§āϰāĻ•ā§āϏāĻŋ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ API | āĻŽā§‡āĻĨāĻĄ | āĻāĻ¨ā§āĻĄāĻĒāϝāĻŧ⧇āĻ¨ā§āϟ | āĻŦāĻŋāĻŦāϰāĻŖ | | -------- | ------------------------------------------------- | -------------------------------------- | | `GET` | `/api/v1/management/proxies` | āϏāĻŦ āĻĒā§āϰāĻ•ā§āϏāĻŋāϰ āϤāĻžāϞāĻŋāĻ•āĻž āĻĻ⧇āϖ⧁āύ | | `GET` | `/api/v1/management/proxies?id=uuid` | ID āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻĒāĻžāύ | | `GET` | `/api/v1/management/proxies?id=uuid&where_used=1` | āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻ…ā§āϝāĻžāϏāĻžāχāύāĻŽā§‡āĻ¨ā§āϟ āĻĒāĻžāύ | | `POST` | `/api/v1/management/proxies` | āĻĒā§āϰāĻ•ā§āϏāĻŋ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ | | `PATCH` | `/api/v1/management/proxies` | āĻĒā§āϰāĻ•ā§āϏāĻŋ āφāĻĒāĻĄā§‡āϟ āĻ•āϰ⧁āύ | | `DELETE` | `/api/v1/management/proxies?id=uuid` | āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻŽā§āϛ⧁āύ | | `DELETE` | `/api/v1/management/proxies?id=uuid&force=1` | āĻœā§‹āϰāĻĒā§‚āĻ°ā§āĻŦāĻ• āĻŽā§āϛ⧁āύ | | `POST` | `/api/v1/management/proxies/bulk-assign` | āĻāĻ•āϏāĻ™ā§āϗ⧇ āĻ…ā§āϝāĻžāϏāĻžāχāύ āĻ•āϰ⧁āύ | | `GET` | `/api/v1/management/proxies/assignments` | āĻ…ā§āϝāĻžāϏāĻžāχāύāĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āϤāĻžāϞāĻŋāĻ•āĻž āĻĻ⧇āϖ⧁āύ | | `GET` | `/api/v1/management/proxies/health` | āĻĒā§āϰāĻ•ā§āϏāĻŋāϰ āĻ¸ā§āĻŦāĻžāĻ¸ā§āĻĨā§āϝāϏāĻ‚āĻ•ā§āϰāĻžāĻ¨ā§āϤ āĻĒāϰāĻŋāϏāĻ‚āĻ–ā§āϝāĻžāύ | ### āϟāĻžāύ⧇āϞ API āĻĒā§āϰāĻ•ā§āϏāĻŋāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āφāωāϟāĻŦāĻžāωāĻ¨ā§āĻĄ āϰāĻžāωāϟāĻŋāĻ‚āϝāĻŧ⧇āϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇ āφāĻĒāύāĻžāϰ OmniRoute āχāύāĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āϏāϕ⧇ āĻĒāĻžāĻŦāϞāĻŋāĻ• āχāĻ¨ā§āϟāĻžāϰāύ⧇āĻŸā§‡ (Cloudflare/ngrok/Tailscale) āωāĻ¨ā§āĻŽā§āĻ•ā§āϤ āĻ•āϰāϤ⧇ [TUNNELS_GUIDE.md](./TUNNELS_GUIDE.md) āĻĻ⧇āϖ⧁āύāĨ¤ āϟāĻžāύ⧇āϞ⧇āϰ REST API `/api/tunnels/{cloudflared,ngrok,tailscale}/*`-āĻāϰ āĻ…āϧ⧀āύ⧇ āϰāϝāĻŧ⧇āϛ⧇ āĻāĻŦāĻ‚ āĻāϟāĻŋ āωāĻĒāϰ⧇ āύāĻĨāĻŋāϭ⧁āĻ•ā§āϤ āφāωāϟāĻŦāĻžāωāĻ¨ā§āĻĄ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻšā§‡āχāύ āĻĨ⧇āϕ⧇ āĻ¸ā§āĻŦāϤāĻ¨ā§āĻ¤ā§āϰāĨ¤ ### 1proxy API | āĻŽā§‡āĻĨāĻĄ | āĻāĻ¨ā§āĻĄāĻĒāϝāĻŧ⧇āĻ¨ā§āϟ | āĻŦāĻŋāĻŦāϰāĻŖ | | -------- | -------------------------------------- | -------------------------------- | | `GET` | `/api/settings/oneproxy` | 1proxy āĻĒā§āϰāĻ•ā§āϏāĻŋāϰ āϤāĻžāϞāĻŋāĻ•āĻž āĻĻ⧇āϖ⧁āύ | | `GET` | `/api/settings/oneproxy?action=stats` | āĻĒāϰāĻŋāϏāĻ‚āĻ–ā§āϝāĻžāύ + āϏāĻŋāĻ™ā§āĻ• āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ āĻĒāĻžāύ | | `GET` | `/api/settings/oneproxy?action=status` | āĻļ⧁āϧ⧁ āϏāĻŋāĻ™ā§āĻ• āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ āĻĒāĻžāύ | | `POST` | `/api/settings/oneproxy` | āϏāĻŋāĻ™ā§āĻ• āĻŸā§āϰāĻŋāĻ—āĻžāϰ āĻ•āϰ⧁āύ | | `POST` | `/api/settings/oneproxy/rotate` | āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āĻĒā§āϰāĻ•ā§āϏāĻŋāϤ⧇ āϰ⧋āĻŸā§‡āϟ āĻ•āϰ⧁āύ | | `DELETE` | `/api/settings/oneproxy?id=uuid` | āĻāĻ•āϟāĻŋ āĻŽā§āϛ⧁āύ | | `DELETE` | `/api/settings/oneproxy?clearAll=1` | āϏāĻŦ āĻŽā§āϛ⧁āύ | ### āφāĻĒāĻ¸ā§āĻŸā§āϰāĻŋāĻŽ āĻĒā§āϰāĻ•ā§āϏāĻŋ API | āĻŽā§‡āĻĨāĻĄ | āĻāĻ¨ā§āĻĄāĻĒāϝāĻŧ⧇āĻ¨ā§āϟ | āĻŦāĻŋāĻŦāϰāĻŖ | | -------- | --------------------------------- | ------------------------------ | | `GET` | `/api/upstream-proxy/:providerId` | āφāĻĒāĻ¸ā§āĻŸā§āϰāĻŋāĻŽ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻ•āύāĻĢāĻŋāĻ— āĻĒāĻžāύ | | `PUT` | `/api/upstream-proxy/:providerId` | āφāĻĒāĻ¸ā§āĻŸā§āϰāĻŋāĻŽ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻŽā§‹āĻĄ āϏ⧇āϟ āĻ•āϰ⧁āύ | | `DELETE` | `/api/upstream-proxy/:providerId` | āφāĻĒāĻ¸ā§āĻŸā§āϰāĻŋāĻŽ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻ•āύāĻĢāĻŋāĻ— āϏāϰāĻžāύ | --- ## āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞāϏāĻŽā§‚āĻš | āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ | āĻĄāĻŋāĻĢāĻ˛ā§āϟ | āĻŦāĻŋāĻŦāϰāĻŖ | | --------------------- | ------ | ------------------------------------------------------------------- | | `ENABLE_SOCKS5_PROXY` | `true` | SOCKS5 āĻĒā§āϰāĻ•ā§āϏāĻŋ āϏāĻŽāĻ°ā§āĻĨāύ āϏāĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āϰ⧁āύ (`.env.example`-āĻ āĻĄāĻŋāĻĢāĻ˛ā§āϟ `true`) | --- ## āϏāĻŽāĻ¸ā§āϝāĻž āϏāĻŽāĻžāϧāĻžāύ ### "SOCKS5 āĻĒā§āϰāĻ•ā§āϏāĻŋ āύāĻŋāĻˇā§āĻ•ā§āϰāĻŋāϝāĻŧ" āφāĻĒāύāĻžāϰ `.env` āĻĢāĻžāχāϞ⧇ `ENABLE_SOCKS5_PROXY=true` āϏ⧇āϟ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āĻĒ⧁āύāϰāĻžāϝāĻŧ āϚāĻžāϞ⧁ āĻ•āϰ⧁āύāĨ¤ ### āĻĒā§āϰāĻ•ā§āϏāĻŋāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ "socket hang up" āĻ¤ā§āϰ⧁āϟāĻŋ āύāĻŋāĻˇā§āĻ•ā§āϰāĻŋāϝāĻŧ āϏāĻ‚āϝ⧋āĻ— āĻŦāĻŋāĻšā§āĻ›āĻŋāĻ¨ā§āύ āĻ•āϰ⧇ āĻĻ⧇āϝāĻŧ āĻāĻŽāύ āϏāĻ¸ā§āϤāĻž āĻĒā§āϰāĻ•ā§āϏāĻŋāϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āĻāϟāĻŋ āĻ¸ā§āĻŦāĻžāĻ­āĻžāĻŦāĻŋāĻ•āĨ¤ OmniRoute āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇āχ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āωāĻĒāĻžāϝāĻŧ⧇ āĻāϟāĻŋ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰ⧇: - āĻĒā§āϰāĻ•ā§āϏāĻŋ āϏāĻ‚āϝ⧋āϗ⧇ keep-alive āύāĻŋāĻˇā§āĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āϰ⧇ (`keepAliveTimeout: 1`) - pipelining āύāĻŋāĻˇā§āĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āϰ⧇ (`pipelining: 0`) - āĻŦāĻžāϰāĻŦāĻžāϰ handshake āĻāĻĄāĻŧāĻžāϤ⧇ dispatcher āĻ•ā§āϝāĻžāĻļ āĻ•āϰ⧇ āϏāĻŽāĻ¸ā§āϝāĻžāϟāĻŋ āϚāϞāϤ⧇ āĻĨāĻžāĻ•āϞ⧇, āĻ…āĻ¨ā§āϝ āϕ⧋āύ⧋ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰ⧁āύ āĻ…āĻĨāĻŦāĻž 1proxy rotation āĻĢāĻŋāϚāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύāĨ¤ ### OAuth-āĻāϰ āϏāĻŽāϝāĻŧ "unsupported_country_region_territory" OAuth āĻĒā§āϰāĻŦāĻžāĻš āĻļ⧁āϰ⧁ āĻ•āϰāĻžāϰ **āφāϗ⧇** āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇ āĻ•āĻŋ āύāĻž āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰ⧁āύāĨ¤ OmniRoute āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ āĻ•āϰāĻž āĻĒā§āϰāĻ•ā§āϏāĻŋāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ OAuth token exchange āϰāĻžāωāϟ āĻ•āϰ⧇āĨ¤ āĻĒā§āϰāĻĨāĻŽā§‡ āĻāĻ•āϟāĻŋ global āĻŦāĻž provider-level āĻĒā§āϰāĻ•ā§āϏāĻŋ āϏ⧇āϟ āĻ•āϰ⧁āύ, āϤāĻžāϰāĻĒāϰ āϏāĻ‚āϝ⧋āĻ— āĻ•āϰ⧁āύāĨ¤ ### āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāĻšā§āϛ⧇ āύāĻž resolution-āĻāϰ āĻ•ā§āϰāĻŽ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧁āύ: 1. `GET /api/settings/proxy?resolve=your-connection-id` āĻĻāĻŋāϝāĻŧ⧇ āϝāĻžāϚāĻžāχ āĻ•āϰ⧁āύ 2. āĻĒā§āϰāĻ•ā§āϏāĻŋāϰ `status` `active` āĻ•āĻŋ āύāĻž āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧁āύ (`inactive` āύāϝāĻŧ) 3. āĻĒā§āϰāĻ•ā§āϏāĻŋ assignment scope āφāĻĒāύāĻžāϰ āϏāĻ‚āϝ⧋āϗ⧇āϰ āϏāĻ™ā§āϗ⧇ āĻŽā§‡āϞ⧇ āĻ•āĻŋ āύāĻž āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰ⧁āύ ### 1proxy sync āĻŦā§āϝāĻ°ā§āĻĨ āĻšāĻšā§āϛ⧇ sync status āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧁āύ: ```bash curl "http://localhost:20128/api/settings/oneproxy?action=status" ``` āϝāĻĻāĻŋ `consecutiveFailures >= 5` āĻšāϝāĻŧ, āϤāĻŦ⧇ circuit breaker āĻŸā§āϰāĻŋāĻ—āĻžāϰ āĻšāϝāĻŧ⧇āϛ⧇āĨ¤ āϰāĻŋāϏ⧇āϟ āĻ•āϰāϤ⧇ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻĒ⧁āύāϰāĻžāϝāĻŧ āϚāĻžāϞ⧁ āĻ•āϰ⧁āύ āĻ…āĻĨāĻŦāĻž āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞ āϰāĻŋāϏ⧇āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āĻ…āĻĒ⧇āĻ•ā§āώāĻž āĻ•āϰ⧁āύāĨ¤ --- ## āĻĄā§‡āϟāĻžāĻŦ⧇āϏ āĻ¸ā§āĻ•āĻŋāĻŽāĻž ### `proxy_registry` āĻŸā§‡āĻŦāĻŋāϞ ```sql CREATE TABLE proxy_registry ( id TEXT PRIMARY KEY, name TEXT NOT NULL, type TEXT NOT NULL DEFAULT 'http', host TEXT NOT NULL, port INTEGER NOT NULL, username TEXT DEFAULT '', password TEXT DEFAULT '', region TEXT, notes TEXT, status TEXT DEFAULT 'active', source TEXT NOT NULL DEFAULT 'manual', -- 'manual' āĻ…āĻĨāĻŦāĻž 'oneproxy' quality_score INTEGER, -- 0-100 (āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ 1proxy) latency_ms INTEGER, -- āĻŽāĻŋāϞāĻŋāϏ⧇āϕ⧇āĻ¨ā§āĻĄ (āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ 1proxy) anonymity TEXT, -- transparent/anonymous/elite google_access INTEGER DEFAULT 0, -- Google āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āϰāĻž āϝāĻžāϝāĻŧ? (1proxy) last_validated TEXT, -- ISO āϟāĻžāχāĻŽāĻ¸ā§āĻŸā§āϝāĻžāĻŽā§āĻĒ (1proxy) country_code TEXT, -- ISO 2-āĻ…āĻ•ā§āώāϰ⧇āϰ āϕ⧋āĻĄ (1proxy) created_at TEXT NOT NULL, updated_at TEXT NOT NULL ); ``` ### `proxy_assignments` āĻŸā§‡āĻŦāĻŋāϞ ```sql CREATE TABLE proxy_assignments ( id INTEGER PRIMARY KEY AUTOINCREMENT, proxy_id TEXT NOT NULL REFERENCES proxy_registry(id), scope TEXT NOT NULL, -- 'global', 'provider', 'account', 'combo' scope_id TEXT, -- provider ID, connection ID āĻ…āĻĨāĻŦāĻž combo ID created_at TEXT NOT NULL, updated_at TEXT NOT NULL, UNIQUE(scope, scope_id) ); ``` --- ## āĻĒā§āϰāĻ•ā§āϏāĻŋāϰ āĻ¸ā§āĻŦāĻžāĻ¸ā§āĻĨā§āϝ āĻĒāϰ⧀āĻ•ā§āώāĻž (v3.8.16+) OmniRoute-āĻāϰ **proxy fast-fail** āĻŦā§āϝāĻŦāĻ¸ā§āĻĨāĻž (`src/lib/proxyHealth.ts`) āĻĻā§āϰ⧁āϤ TCP āϏāĻ‚āϝ⧋āĻ— āĻĒāϰ⧀āĻ•ā§āώāĻžāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ <2s-āĻāϰ āĻŽāĻ§ā§āϝ⧇ āĻ…āϚāϞ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻļāύāĻžāĻ•ā§āϤ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻāϰāĻĒāϰ āĻĒā§āϰāϤāĻŋāϟāĻŋ request-āĻāϰ overhead āĻāĻĄāĻŧāĻžāϤ⧇ **āĻĢāϞāĻžāĻĢāϞāϟāĻŋ āĻ•ā§āϝāĻžāĻļ āĻ•āϰ⧇**āĨ¤ ### āĻāϟāĻŋ āϝ⧇āĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇ ``` Request ──â–ļ ProxyHealthCache.get(url) │ ├─ Cache hit + fresh? ──â–ļ āĻ•ā§āϝāĻžāĻļ āĻ•āϰāĻž status āĻĢ⧇āϰāϤ āĻĻāĻŋāύ │ └─ Cache miss / stale? ──â–ļ host:port-āĻ TCP āϏāĻ‚āϝ⧋āĻ— āĻ•āϰ⧁āύ (timeout: FAST_FAIL_TIMEOUT_MS) ──â–ļ HEALTH_CACHE_TTL_MS āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āĻ•ā§āϝāĻžāĻļ āĻ•āϰ⧁āύ ──â–ļ āĻĢāϞāĻžāĻĢāϞ āĻĢ⧇āϰāϤ āĻĻāĻŋāύ ``` āĻāϟāĻŋ āύāĻž āĻĨāĻžāĻ•āϞ⧇, āĻāĻ•āϟāĻŋ āĻ…āϚāϞ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻŦā§āϝāĻ°ā§āĻĨ āĻšāĻ“āϝāĻŧāĻžāϰ āφāϗ⧇ āĻĒā§āϰāϤāĻŋāϟāĻŋ request-āϕ⧇ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ `PROXY_TIMEOUT_MS` āϏāĻŽāϝāĻŧ āϧāϰ⧇ (āĻĄāĻŋāĻĢāĻ˛ā§āϟ 30s) āφāϟāϕ⧇ āϰāĻžāĻ–āϤāĨ¤ ### āϏāĻžāĻŽāĻžā§āϜāĻ¸ā§āϝāϝ⧋āĻ—ā§āϝ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞāϏāĻŽā§‚āĻš | āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ | āĻĄāĻŋāĻĢāĻ˛ā§āϟ | āωāĻĻā§āĻĻ⧇āĻļā§āϝ | | ---------------------------- | ------- | --------------------------------------------- | | `PROXY_FAST_FAIL_TIMEOUT_MS` | `2000` | āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ¸ā§āĻŦāĻžāĻ¸ā§āĻĨā§āϝ āĻĒāϰ⧀āĻ•ā§āώāĻžāϰ TCP āϏāĻ‚āϝ⧋āĻ— timeout | | `PROXY_HEALTH_CACHE_TTL_MS` | `30000` | āĻ¸ā§āĻŦāĻžāĻ¸ā§āĻĨā§āϝ āĻĒāϰ⧀āĻ•ā§āώāĻžāϰ āĻĢāϞāĻžāĻĢāϞ āĻ•āϤāĻ•ā§āώāĻŖ āĻ•ā§āϝāĻžāĻļ āĻ•āϰāĻž āĻšāĻŦ⧇ | **āĻĒā§āϰāĻ¸ā§āϤāĻžāĻŦāĻŋāϤ āĻŽāĻžāύāϏāĻŽā§‚āĻš:** | āĻĒāϰāĻŋāĻ¸ā§āĻĨāĻŋāϤāĻŋ | Fast-fail timeout | Cache TTL | āϝ⧁āĻ•ā§āϤāĻŋ | | ------------------------------ | ----------------- | --------- | ---------------------------------------------------------------------------- | | āωāĻšā§āϚ-throughput API gateway | 1500ms | 60000ms | āφāĻ•ā§āϰāĻŽāĻŖāĻžāĻ¤ā§āĻŽāĻ• fail-fast, āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āĻŽāĻžāϤ⧇ āĻĻā§€āĻ°ā§āϘāϤāϰ cache | | āϭ⧌āĻ—ā§‹āϞāĻŋāĻ•āĻ­āĻžāĻŦ⧇ āĻŦāĻŋāϤāϰāĻŖāĻ•ā§ƒāϤ node | 3000ms | 15000ms | āϧ⧀āϰāĻ—āϤāĻŋāϰ network-āĻāϰ āφāϰāĻ“ āϏāĻŽāϝāĻŧ āĻĒā§āϰāϝāĻŧā§‹āϜāύ; āĻĻā§āϰ⧁āϤ failover-āĻāϰ āϜāĻ¨ā§āϝ āϏāĻ‚āĻ•ā§āώāĻŋāĻĒā§āϤ cache | | āĻĄā§‡āϭ⧇āϞāĻĒāĻŽā§‡āĻ¨ā§āϟ / āĻĒāϰ⧀āĻ•ā§āώāĻž | 1000ms | 10000ms | āĻ¸ā§āĻĨāĻžāύ⧀āϝāĻŧ āĻĒā§āϰāĻ•ā§āϏāĻŋāϤ⧇ āĻĻā§āϰ⧁āϤ iteration | | āĻ—ā§‹āĻĒāύ⧀āϝāĻŧāϤāĻž / āĻļāύāĻžāĻ•ā§āϤāĻ•āϰāĻŖ āĻĒā§āϰāϤāĻŋāϰ⧋āϧ | 2500ms | 45000ms | rate limit āĻŸā§āϰāĻŋāĻ—āĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇ āĻāĻŽāύ āĻĻā§āϰ⧁āϤ probing āĻāĻĄāĻŧāĻžāύ | ### āĻĒā§āϰāĻ•ā§āϏāĻŋāϰ āĻ¸ā§āĻŦāĻžāĻ¸ā§āĻĨā§āϝ āĻĒāϰāĻŋāĻĻāĻ°ā§āĻļāύ ```ts import { getAllProxyHealthStatuses, invalidateProxyHealth } from "omniroute/proxyHealth"; const statuses = getAllProxyHealthStatuses(); for (const s of statuses) { console.log(`${s.proxyUrl} → healthy=${s.healthy}, stale=${s.stale}`); } // āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻāĻ•āϟāĻŋ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻœā§‹āϰāĻĒā§‚āĻ°ā§āĻŦāĻ• āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧁āύ invalidateProxyHealth("http://user:pass@203.0.113.7:8080"); ``` cache entry-āĻāϰ āϏāĻŽāϝāĻŧāϏ⧀āĻŽāĻž `HEALTH_CACHE_TTL_MS` āĻ…āϤāĻŋāĻ•ā§āϰāĻŽ āĻ•āϰāϞ⧇ `stale` flag-āĻāϰ āĻŽāĻžāύ `true` āĻšāϝāĻŧ āĻāĻŦāĻ‚ āĻĒāϰāĻŦāĻ°ā§āϤ⧀ request āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻŸā§āϰāĻŋāĻ—āĻžāϰ āĻ•āϰāĻŦ⧇āĨ¤ ### āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĒā§āϰāĻ•ā§āϏāĻŋ āϟāĻžāχāĻĒ⧇āϰ āĻĄāĻŋāĻĢāĻ˛ā§āϟ āĻ¸ā§āĻŦāĻžāĻ¸ā§āĻĨā§āϝ āĻĒāϰ⧀āĻ•ā§āώāĻž URL scheme-āĻāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋāϤ⧇ āωāĻĒāϝ⧁āĻ•ā§āϤ āĻĄāĻŋāĻĢāĻ˛ā§āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇: | Scheme | āĻĄāĻŋāĻĢāĻ˛ā§āϟ port | | -------------------------- | ----------- | | `http://` | 8080 | | `https://` | 443 | | `socks5://` / `socks5h://` | 1080 | URL-āĻāϰ custom port (`http://host:9999`) āϏāĻŦāϏāĻŽāϝāĻŧ scheme-āĻāϰ āĻĄāĻŋāĻĢāĻ˛ā§āĻŸā§‡āϰ āϤ⧁āϞāύāĻžāϝāĻŧ āĻ…āĻ—ā§āϰāĻžāϧāĻŋāĻ•āĻžāϰ āĻĒāĻžāϝāĻŧāĨ¤ --- ## āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻ…ā§āϝāĻžāύāĻžāϞāĻŋāϟāĻŋāĻ•ā§āϏ āĻ“ āĻĒāĻ°ā§āϝāĻŦ⧇āĻ•ā§āώāĻŖāϝ⧋āĻ—ā§āϝāϤāĻž āĻ…āĻĒāĻžāϰ⧇āϟāϰāĻĻ⧇āϰ āϰāĻžāωāϟāĻŋāĻ‚ āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύ, āĻ˛ā§āϝāĻžāĻŸā§‡āĻ¨ā§āϏāĻŋāϰ āφāĻ•āĻ¸ā§āĻŽāĻŋāĻ• āĻŦ⧃āĻĻā§āϧāĻŋ āĻāĻŦāĻ‚ āĻĒ⧁āύāϰāĻžāĻŦ⧃āĻ¤ā§āϤ āĻŦā§āϝāĻ°ā§āĻĨāϤāĻž āύāĻŋāĻ°ā§āĻŖāϝāĻŧ⧇ āϏāĻšāĻžāϝāĻŧāϤāĻž āĻ•āϰāϤ⧇ OmniRoute āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĒā§āϰāĻ•ā§āϏāĻŋāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻŸā§āĻ°ā§āϝāĻžāĻ• āĻ•āϰ⧇āĨ¤ ### āϕ⧀ āϕ⧀ āĻŸā§āĻ°ā§āϝāĻžāĻ• āĻ•āϰāĻž āĻšāϝāĻŧ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ āĻ•āϰāĻž āĻĒā§āϰāĻ•ā§āϏāĻŋāϰ āĻŽāĻ§ā§āϝ āĻĻāĻŋāϝāĻŧ⧇ āϝāĻžāĻ“āϝāĻŧāĻž āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ…āύ⧁āϰ⧋āϧ⧇āϰ āϜāĻ¨ā§āϝ OmniRoute āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āϤāĻĨā§āϝ āϰ⧇āĻ•āĻ°ā§āĻĄ āĻ•āϰ⧇: | āĻŽā§‡āĻŸā§āϰāĻŋāĻ• | āĻŦāĻŋāĻŦāϰāĻŖ | | ------------ | -------------------------------------------------------------- | | `proxy_url` | āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻĒā§āϰāĻ•ā§āϏāĻŋ URL (āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻ•ā§āϰ⧇āĻĄā§‡āύāĻļāĻŋāϝāĻŧāĻžāϞ āĻŽāĻžāĻ¸ā§āĻ• āĻ•āϰāĻž āĻĨāĻžāϕ⧇) | | `provider` | āφāĻĒāĻ¸ā§āĻŸā§āϰāĻŋāĻŽ āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ ID (openai, anthropic āχāĻ¤ā§āϝāĻžāĻĻāĻŋ) | | `latency_ms` | āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻšā§āϝāĻžāĻ¨ā§āĻĄāĻļ⧇āĻ•āϏāĻš āĻŽā§‹āϟ āϰāĻžāωāĻ¨ā§āĻĄ-āĻŸā§āϰāĻŋāĻĒ āϏāĻŽāϝāĻŧ | | `connect_ms` | āĻļ⧁āϧ⧁ TCP āϏāĻ‚āϝ⧋āϗ⧇āϰ āϏāĻŽāϝāĻŧ | | `status` | āφāĻĒāĻ¸ā§āĻŸā§āϰāĻŋāĻŽ āĻĨ⧇āϕ⧇ āĻĒāĻžāĻ“āϝāĻŧāĻž HTTP āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ āϕ⧋āĻĄ | | `error` | āĻ…āύ⧁āϰ⧋āϧ āĻŦā§āϝāĻ°ā§āĻĨ āĻšāϞ⧇ āĻ¤ā§āϰ⧁āϟāĻŋāϰ āĻļā§āϰ⧇āĻŖāĻŋ | | `timestamp` | ISO 8601 UTC | ### āĻĄā§‡āϟāĻž āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āϰāĻž ```bash # āϏāĻžāĻŽā§āĻĒā§āϰāϤāĻŋāĻ• āĻĒā§āϰāĻ•ā§āϏāĻŋ āχāϭ⧇āĻ¨ā§āϟ curl -H "Authorization: Bearer $OMNIROUTE_KEY" \ "http://localhost:20128/api/usage/proxy-logs?limit=100" ``` āĻĒā§āϰāĻ•ā§ƒāϤ āĻāĻ¨ā§āĻĄāĻĒāϝāĻŧ⧇āĻ¨ā§āϟ āĻšāϞ⧋ `/api/usage/proxy-logs` (`src/app/api/usage/proxy-logs/route.ts` āĻĻ⧇āϖ⧁āύ)āĨ¤ āĻāχ āĻāĻ¨ā§āĻĄāĻĒāϝāĻŧ⧇āĻ¨ā§āϟ āϏāĻŽāĻ°ā§āĻĨāύ āĻ•āϰ⧇: - `GET /api/usage/proxy-logs` — āĻĒā§āϰāĻ•ā§āϏāĻŋ āϞāĻ— āϏāĻ‚āĻ—ā§āϰāĻš āĻ•āϰ⧁āύ - `DELETE /api/usage/proxy-logs` — āϏāĻŦ āĻĒā§āϰāĻ•ā§āϏāĻŋ āϞāĻ— āĻŽā§āϛ⧁āύ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāϞ⧇ SQL-āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϏāϰāĻžāϏāϰāĻŋ `proxy_logs` āĻŸā§‡āĻŦāĻŋāϞ āĻĨ⧇āϕ⧇ āϏāĻŽāĻˇā§āϟāĻŋāĻ—āϤ āĻĒāϰāĻŋāϏāĻ‚āĻ–ā§āϝāĻžāύ āϕ⧋āϝāĻŧ⧇āϰāĻŋ āĻ•āϰāĻž āϝāĻžāϝāĻŧāĨ¤ āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄ UI-āϤ⧇ āϏāĻŽāĻˇā§āϟāĻŋāĻ—āϤ āĻ­āĻŋāω āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ ### āϏāĻžāϧāĻžāϰāĻŖ āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύ **āĻāĻ•āϟāĻŋ āĻ…āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻļāύāĻžāĻ•ā§āϤ āĻ•āϰ⧁āύ** (āĻĒāĻ°ā§āϝāĻžāϝāĻŧāĻ•ā§āϰāĻŽā§‡ āϏāĻĢāϞ/āĻŦā§āϝāĻ°ā§āĻĨ āĻšāϝāĻŧ): ```sql SELECT proxy_url, COUNT(*) AS total, SUM(CASE WHEN status >= 500 THEN 1 ELSE 0 END) AS errors, ROUND(100.0 * SUM(CASE WHEN status >= 500 THEN 1 ELSE 0 END) / COUNT(*), 1) AS error_pct FROM proxy_logs WHERE timestamp > datetime('now', '-1 hour') GROUP BY proxy_url HAVING error_pct > 5 ORDER BY error_pct DESC; ``` **āϧ⧀āϰāĻ—āϤāĻŋāϰ āĻĒā§āϰāĻ•ā§āϏāĻŋ āϖ⧁āρāϜ⧁āύ** (p95 āĻ˛ā§āϝāĻžāĻŸā§‡āĻ¨ā§āϏāĻŋ > 2s): ```sql WITH ranked AS ( SELECT proxy_url, latency_ms, PERCENT_RANK() OVER (PARTITION BY proxy_url ORDER BY latency_ms) AS pct FROM proxy_logs WHERE timestamp > datetime('now', '-24 hour') ) SELECT proxy_url, latency_ms FROM ranked WHERE pct >= 0.95 ORDER BY latency_ms DESC; ``` --- ## āϰ⧋āĻŸā§‡āĻļāύ āĻ•ā§ŒāĻļāϞ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ⧇āϰ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ-āĻŦ⧃āĻ•ā§āώ āĻāĻ•āϟāĻŋ āĻ¸ā§āϕ⧋āĻĒ⧇ āĻāĻ•āĻžāϧāĻŋāĻ• āĻĒā§āϰāĻ•ā§āϏāĻŋ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŋāϤ āĻĨāĻžāĻ•āϞ⧇, āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ…āύ⧁āϰ⧋āϧ⧇āϰ āϜāĻ¨ā§āϝ āϕ⧋āύāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāĻŦ⧇ āϤāĻž āĻŦ⧇āϛ⧇ āύāĻŋāϤ⧇ OmniRoute āĻāĻ•āϟāĻŋ **āϰ⧋āĻŸā§‡āĻļāύ āĻ•ā§ŒāĻļāϞ** āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āĨ¤ āĻ•ā§ŒāĻļāϞāϟāĻŋ āĻ¸ā§āϕ⧋āĻĒ āĻ¸ā§āϤāϰ⧇ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧ (āĻ—ā§āϞ⧋āĻŦāĻžāϞ, āĻĒā§āϰāϤāĻŋ-āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ, āĻĒā§āϰāϤāĻŋ-āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ, āĻĒā§āϰāϤāĻŋ-āĻ•āĻŽā§āĻŦā§‹)āĨ¤ ### āωāĻĒāϞāĻ­ā§āϝ āĻ•ā§ŒāĻļāϞāϏāĻŽā§‚āĻš | āĻ•ā§ŒāĻļāϞ | āĻ•āĻ–āύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ⧇āύ | āφāĻĒāϏ | | ------------------ | --------------------------------- | --------------------------------------------------------------------------------------- | | `quality` (āĻĄāĻŋāĻĢāĻ˛ā§āϟ) | āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻŽāĻžāύ⧇āϰ āĻĒā§āϰāĻ•ā§āϏāĻŋāϏāĻš āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ | āωāĻšā§āϚ āϰ⧇āϟāĻŋāĻ‚ āĻĒāĻžāĻ“āϝāĻŧāĻž āĻĒā§āϰāĻ•ā§āϏāĻŋāϕ⧇ āĻ…āĻ—ā§āϰāĻžāϧāĻŋāĻ•āĻžāϰ āĻĻ⧇āϝāĻŧ; āĻ•āĻŽ āϰ⧇āϟāĻŋāĻ‚ āĻĒāĻžāĻ“āϝāĻŧāĻž āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻ…āύāĻžāĻšāĻžāϰ⧇ āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇ | | `random` | āϞ⧋āĻĄ āĻŦāĻŋāϤāϰāĻŖ, āĻ—ā§‹āĻĒāύ⧀āϝāĻŧāϤāĻž | āϏāĻŽāĻžāύ āĻŦāĻŋāϤāϰāĻŖ; āĻŽāĻžāύāϏāĻ‚āĻ•ā§āϰāĻžāĻ¨ā§āϤ āϏāĻ‚āϕ⧇āϤ āωāĻĒ⧇āĻ•ā§āώāĻž āĻ•āϰ⧇ | | `sequential` | āĻĄāĻŋāĻŦāĻžāĻ—āĻŋāĻ‚, āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖāĻŽā§‚āϞāĻ• āĻĒāϰ⧀āĻ•ā§āώāĻž | āĻ•ā§āϰāĻŽāĻžāύ⧁āϏāĻžāϰ⧇ āĻĒā§āϰāĻ•ā§āϏāĻŋāϗ⧁āϞ⧋āϰ āĻŽāĻ§ā§āϝ⧇ āφāĻŦāĻ°ā§āϤāĻŋāϤ āĻšāϝāĻŧ; āĻŦā§‹āĻāĻž āϏāĻšāϜ | ### āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ-āĻŦ⧃āĻ•ā§āώ ``` āφāĻĒāύāĻžāϰ āĻĒā§āϰāĻ•ā§āϏāĻŋāϗ⧁āϞ⧋āϰ āϜāĻ¨ā§āϝ āĻ•āĻŋ āĻŽāĻžāύ⧇āϰ āĻ¸ā§āϕ⧋āϰ āφāϛ⧇? │ ┌───────────┴───────────┐ │ │ āĻšā§āϝāĻžāρ āύāĻž │ │ āϏāĻŦ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻ•āĻŋ │ āĻŽāĻžāύ⧇āϰ āĻĻāĻŋāĻ• āĻĨ⧇āϕ⧇ │ āĻĒā§āϰāĻžāϝāĻŧ āϏāĻŽāĻžāύ? │ │ │ ┌────┴────┐ │ │ │ │ āĻšā§āϝāĻžāρ āύāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ │ │ `random` │ │ (āϏāĻŽāĻžāύ āĻŦāĻŋāϤāϰāĻŖ │ │ āϏāĻŽāϝāĻŧ⧇āϰ āϏāĻ™ā§āϗ⧇ āĻŽāĻžāύ⧇āϰ │ │ āĻĄā§‡āϟāĻž āϤ⧈āϰāĻŋ āĻ•āϰ⧇) │ │ │ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ `quality` │ (āĻŽāĻŋāĻļā§āϰ āĻŽāĻžāύ⧇āϰ āϜāĻ¨ā§āϝ │ āϏāĻ°ā§āĻŦā§‹āĻ¤ā§āϤāĻŽ) │ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ `random` (āϞ⧋āĻĄ āϏāĻŽāĻžāύāĻ­āĻžāĻŦ⧇ āĻŦāĻŋāϤāϰāĻŖ āĻ•āϰ⧁āύ) ``` ## āφāĻĒāύāĻžāϰ āύāĻŋāϜāĻ¸ā§āĻŦ āĻĒā§āϰāĻ•ā§āϏāĻŋāϗ⧁āϞ⧋āϰ āϜāĻ¨ā§āϝ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧ āĻŦā§āϝāĻ°ā§āĻĨāϤāĻž āĻŦāĻ°ā§āϜāύ 1proxy āĻŽāĻžāĻ°ā§āϕ⧇āϟāĻĒā§āϞ⧇āϏ āĻĒ⧁āϞ āύāĻŋāĻœā§‡ āĻĨ⧇āϕ⧇āχ āĻŦā§āϝāĻ°ā§āĻĨ āĻĒā§āϰāĻ•ā§āϏāĻŋāϗ⧁āϞ⧋āϰ āĻŽāĻžāύ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āĻ•āĻŽāĻŋāϝāĻŧ⧇ āĻĻ⧇āϝāĻŧ ([āĻĒā§āϰāĻ•ā§āϏāĻŋāϰ āϗ⧁āĻŖāĻŽāĻžāύ⧇āϰ āĻ¸ā§āϕ⧋āϰ](#proxy-quality-scores) āĻĻ⧇āϖ⧁āύ)āĨ¤ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋāϤ⧇ **āφāĻĒāύāĻžāϰ** āϝ⧋āĻ— āĻ•āϰāĻž āĻĒā§āϰāĻ•ā§āϏāĻŋāϗ⧁āϞ⧋āϰ āϜāĻ¨ā§āϝ, āĻŦā§āϝāĻžāĻ•āĻ—ā§āϰāĻžāωāĻ¨ā§āĻĄ āĻšā§‡āϞāĻĨ āĻļāĻŋāĻĄāĻŋāωāϞāĻžāϰ (`src/lib/proxyHealth/scheduler.ts`) āϕ⧋āύ⧋ āĻ•āĻŋāϛ⧁ āĻŽā§āϛ⧇ āύāĻž āĻĻāĻŋāϝāĻŧ⧇āχ āĻāĻ•āχāĻ­āĻžāĻŦ⧇ "āĻ…āϚāϞ āϏāĻĻāĻ¸ā§āϝāϕ⧇ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āĻšā§‡āχāύ āĻĨ⧇āϕ⧇ āĻŦāĻžāĻĻ āĻĻ⧇āĻ“āϝāĻŧāĻž"āϰ āϏ⧁āĻŦāĻŋāϧāĻž āĻĻ⧇āϝāĻŧ: ```bash # .env — āĻĒāϰāĻĒāϰ 3āϟāĻŋ āĻĒā§āϰ⧋āĻŦ āĻŦā§āϝāĻ°ā§āĻĨ āĻšāϞ⧇ āĻāĻ•āϟāĻŋ āĻĒā§āϰāĻ•ā§āϏāĻŋāϕ⧇ āϏāĻžāĻŽāϝāĻŧāĻŋāĻ•āĻ­āĻžāĻŦ⧇ āύāĻŋāĻˇā§āĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āϏ⧇āϟāĻŋ # āφāĻŦāĻžāϰ āĻĒā§āϰ⧋āĻŦ⧇āϰ āωāĻ¤ā§āϤāϰ āĻĻāĻŋāϤ⧇ āĻļ⧁āϰ⧁ āĻ•āϰāϞ⧇ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āĻĒ⧁āύāϰāĻžāϝāĻŧ āϏāĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āϰ⧁āύāĨ¤ PROXY_AUTO_DISABLE=true PROXY_AUTO_REMOVE_AFTER=3 ``` āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻŽāĻžāĻ˛ā§āϟāĻŋ-āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻšā§‡āχāύ⧇ āϝ⧇āĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇: 1. āĻļāĻŋāĻĄāĻŋāωāϞāĻžāϰ āĻĒā§āϰāϤāĻŋ `PROXY_HEALTH_INTERVAL_MS` āĻ…āĻ¨ā§āϤāϰ āύāĻŋāĻŦāĻ¨ā§āϧāĻŋāϤ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĒā§āϰāĻ•ā§āϏāĻŋāϕ⧇ āĻĒā§āϰ⧋āĻŦ āĻ•āϰ⧇ (āĻĄāĻŋāĻĢāĻ˛ā§āϟ 10 āĻŽāĻŋāύāĻŋāϟ; āϏāĻ°ā§āĻŦāύāĻŋāĻŽā§āύ 1 āĻŽāĻŋāύāĻŋāϟ)āĨ¤ 2. āĻĒāϰāĻĒāϰ `PROXY_AUTO_REMOVE_AFTER`āϟāĻŋ **āĻšā§‚āĻĄāĻŧāĻžāĻ¨ā§āϤāĻ­āĻžāĻŦ⧇ āύāĻŋāĻ°ā§āĻŖā§€āϤ** āĻŦā§āϝāĻ°ā§āĻĨāϤāĻžāϰ āĻĒāϰ (āĻāĻ•āϟāĻŋ āĻĒā§āϰāĻ•ā§ƒāϤ āϏāĻ‚āϝ⧋āĻ— āĻŦā§āϝāĻ°ā§āĻĨāϤāĻž — āϟāĻžāχāĻŽāφāωāϟ āĻŦāĻž āĻĒā§āϰ⧋āĻŦ āϟāĻžāĻ°ā§āϗ⧇āĻŸā§‡āϰ āύāĻŋāϜāĻ¸ā§āĻŦ 5xx āĻ•āĻ–āύ⧋āχ āĻ—āĻŖāύāĻž āĻ•āϰāĻž āĻšāϝāĻŧ āύāĻž, [āĻĒā§āϰāĻ•ā§āϏāĻŋāϰ āĻ¸ā§āĻŦāĻžāĻ¸ā§āĻĨā§āϝ āĻĒāϰ⧀āĻ•ā§āώāĻž](#proxy-health-checking-v3816) āĻĻ⧇āϖ⧁āύ), āĻĒā§āϰāĻ•ā§āϏāĻŋāϟāĻŋāϰ `status` `dead` āĻšāĻŋāϏ⧇āĻŦ⧇ āϏ⧇āϟ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤ 3. āĻĒ⧁āϞ/āϰ⧋āĻŸā§‡āĻļāύ āϏāĻŽāĻžāϧāĻžāύ⧇ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āϏāĻ•ā§āϰāĻŋāϝāĻŧ-āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āϝ⧇āϏāĻŦ āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ āĻŦāĻžāĻĻ āĻĻ⧇āϝāĻŧ, `dead` āϏ⧇āϗ⧁āϞ⧋āϰ āĻāĻ•āϟāĻŋāĨ¤ āĻĢāϞ⧇ āϕ⧋āύ⧋ āĻ¸ā§āϕ⧋āĻĒ⧇āϰ āϰ⧋āĻŸā§‡āĻļāύ (āϰāĻžāωāĻ¨ā§āĻĄ-āϰāĻŦāĻŋāύ / āĻ°ā§āϝāĻžāĻ¨ā§āĻĄāĻŽ / āĻ¸ā§āϟāĻŋāĻ•āĻŋ / āĻ˛ā§āϝāĻžāĻŸā§‡āĻ¨ā§āϏāĻŋ — [āϰ⧋āĻŸā§‡āĻļāύ āĻ•ā§ŒāĻļāϞ āύāĻŋāĻ°ā§āϧāĻžāϰāϪ⧇āϰ āĻĄāĻŋāϏāĻŋāĻļāύ āĻŸā§āϰāĻŋ](#rotation-strategy-decision-tree) āĻĻ⧇āϖ⧁āύ) āĻ…āĻŦāĻŋāϞāĻŽā§āĻŦ⧇ āύāϤ⧁āύ āĻ…āύ⧁āϰ⧋āϧ⧇ āϏ⧇āχ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻĻ⧇āĻ“āϝāĻŧāĻž āĻŦāĻ¨ā§āϧ āĻ•āϰ⧇āĨ¤ āĻĒ⧁āϞ⧇āϰ āĻ…āĻ¨ā§āϝ āϕ⧋āύ⧋ āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻāϤ⧇ āĻĒā§āϰāĻ­āĻžāĻŦāĻŋāϤ āĻšāϝāĻŧ āύāĻž āĻāĻŦāĻ‚ āĻĒ⧁āϰ⧋ āĻĒ⧁āϞ āĻ•āĻ–āύ⧋āχ āύ⧀āϰāĻŦ⧇ āϏāϰāĻžāϏāϰāĻŋ āϏāĻ‚āϝ⧋āϗ⧇ āĻĢāĻŋāϰ⧇ āϝāĻžāϝāĻŧ āύāĻž — fail-closed āϏ⧁āϰāĻ•ā§āώāĻžāϰ āϜāĻ¨ā§āϝ [4-āĻ¸ā§āϤāϰ⧇āϰ āĻĒā§āϰāĻ•ā§āϏāĻŋ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ](#4-level-proxy-system) āĻĻ⧇āϖ⧁āύāĨ¤ 4. āĻļāĻŋāĻĄāĻŋāωāϞāĻžāϰ āĻāĻ•āχ āĻŦāĻŋāϰāϤāĻŋāϤ⧇ `dead` āĻĒā§āϰāĻ•ā§āϏāĻŋāϗ⧁āϞ⧋āϕ⧇ āĻĒā§āϰ⧋āĻŦ āĻ•āϰāĻž āϚāĻžāϞāĻŋāϝāĻŧ⧇ āϝāĻžāϝāĻŧāĨ¤ āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āϏāĻĢāϞ āĻĒā§āϰ⧋āĻŦ `status` āφāĻŦāĻžāϰ `active`-āĻ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻĒā§āϰāĻ•ā§āϏāĻŋāϟāĻŋ āĻĒ⧁āύāϰāĻžāϝāĻŧ āϰ⧋āĻŸā§‡āĻļāύ⧇ āĻĒā§āϰāĻŦ⧇āĻļ āĻ•āϰ⧇ — āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞāĻŋ āφāĻŦāĻžāϰ āϝ⧋āĻ— āĻ•āϰāĻžāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āύ⧇āχāĨ¤ āĻāϟāĻŋ āχāĻšā§āĻ›āĻžāĻ•ā§ƒāϤāĻ­āĻžāĻŦ⧇ **āϐāĻšā§āĻ›āĻŋāĻ• āĻāĻŦāĻ‚ āĻ…-āĻŦāĻŋāĻ§ā§āĻŦāĻ‚āϏ⧀**: āĻĄāĻŋāĻĢāĻ˛ā§āϟāĻ­āĻžāĻŦ⧇ āĻļāĻŋāĻĄāĻŋāωāϞāĻžāϰ āĻļ⧁āϧ⧁ āĻŦā§āϝāĻ°ā§āĻĨāϤāĻžāϰ āϏāĻ‚āĻ–ā§āϝāĻž āĻ—āĻŖāύāĻž āĻ“ āϞāĻ— āĻ•āϰ⧇ (`decision.ts`-āĻ āύ⧀āϤāĻŋ C āĻĻ⧇āϖ⧁āύ), āĻāĻŦāĻ‚ `PROXY_AUTO_DISABLE` āĻ•āĻ–āύ⧋ āϕ⧋āύ⧋ āϏāĻžāϰāĻŋ āĻŽā§āϛ⧇ āĻĻ⧇āϝāĻŧ āύāĻž — āĻāϰ āϜāĻ¨ā§āϝ āĻĒ⧃āĻĨāĻ• āĻ“ āĻ…āϧāĻŋāĻ• āφāĻ•ā§āϰāĻŽāĻŖāĻžāĻ¤ā§āĻŽāĻ• `PROXY_AUTO_REMOVE` āĻĢā§āĻ˛ā§āϝāĻžāĻ—āϟāĻŋ āϰāϝāĻŧ⧇āϛ⧇āĨ¤ āωāĻ­āϝāĻŧāϟāĻŋ `true` āĻšāĻŋāϏ⧇āĻŦ⧇ āϏ⧇āϟ āĻ•āϰāĻž āĻĨāĻžāĻ•āϞ⧇, `PROXY_AUTO_REMOVE` āĻ…āĻ—ā§āϰāĻžāϧāĻŋāĻ•āĻžāϰ āĻĒāĻžāϝāĻŧ (āĻŽā§āϛ⧇ āĻĢ⧇āϞāĻž āĻšāϤ⧇ āϝāĻžāĻšā§āϛ⧇ āĻāĻŽāύ āϕ⧋āύ⧋ āĻĒā§āϰāĻ•ā§āϏāĻŋāϕ⧇ āĻŽāĻžāĻāĻ–āĻžāύ⧇ āϏāĻžāĻŽāϝāĻŧāĻŋāĻ•āĻ­āĻžāĻŦ⧇ āύāĻŋāĻˇā§āĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āϰāĻžāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āύ⧇āχ)āĨ¤ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ⧇āϰ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āϤāĻžāϞāĻŋāĻ•āĻžāϰ āϜāĻ¨ā§āϝ [āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āĻ•āύāĻĢāĻŋāĻ—](../reference/ENVIRONMENT.md) āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ āĻĻ⧇āϖ⧁āύāĨ¤ --- > 📖 **āϏāĻŽā§āĻĒāĻ°ā§āĻ•āĻŋāϤ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ:** > > - [āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻŋāĻ•āĻž](../guides/USER_GUIDE.md) — āϏāĻžāϧāĻžāϰāĻŖ āϏ⧇āϟāφāĻĒ āĻ“ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ > - [API āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ](../reference/API_REFERENCE.md) — āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ API āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ > - [āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āĻ•āύāĻĢāĻŋāĻ—](../reference/ENVIRONMENT.md) — āϏāĻŦ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ