{"repo": "abnibsth/cek-api", "files": {"src/lib/providers.ts": {"2d935117ec2de7e35f937ef79fe7e0f5f63b66fa": {"t": 1785746419.1789608, "n": 4805, "h": "f6941cb0a439f017", "c": "/**\n * 🌐 Registry Provider AI\n * -----------------------\n * Daftar semua provider AI yang didukung + cara menghubunginya.\n *\n * Setiap provider berisi:\n * - baseUrl : URL dasar API (OpenAI-compatible)\n * - authHeader : nama header auth (Authorization / x-api-key / dll)\n * - authScheme : \"Bearer\" (sk-...) atau \"none\" (kirim key polos)\n * - balanceType : \"usd\" = ada endpoint saldo | \"none\" = tidak ada\n * - balanceEndpoint/balancePath: lokasi data saldo di respons API\n *\n * Khusus id \"custom\" = base URL bebas, untuk API apapun\n * (ini yang jadi DEFAULT di form, supaya semua API bisa masuk).\n *\n * ➕ Mau tambah provider? Cukup tambah 1 entry di array PROVIDERS.\n */\nimport type { ProviderDefinition } from \"./types\";\n\n/**\n * Registry of all supported AI providers.\n *\n * Every provider is OpenAI-compatible for the /v1/models endpoint,\n * but balance checking differs:\n * - Providers with a billing API expose balanceEndpoint + balancePath\n * - Free-tier / subscription providers have balanceType: \"none\"\n *\n * To add a new provider, just append an entry here.\n */\nexport const PROVIDERS: ProviderDefinition[] = [\n {\n id: \"openrouter\",\n name: \"OpenRouter\",\n baseUrl: \"https://openrouter.ai/api/v1\",\n docsUrl: \"https://openrouter.ai/docs/api-reference\",\n balanceType: \"usd\",\n balanceEndpoint: \"/key\",\n balancePath: \"data.usage\",\n authHeader: \"Authorization\",\n authScheme: \"Bearer\",\n },\n {\n id: \"openai\",\n name: \"OpenAI\",\n baseUrl: \"https://api.openai.com/v1\",\n docsUrl: \"https://platform.openai.com/docs\",\n balanceType: \"usd\",\n balanceEndpoint: \"/dashboard/billing/credit_grants\",\n balancePath: \"total_granted\",\n authHeader: \"Authorization\",\n authScheme: \"Bearer\",\n },\n {\n id: \"anthropic\",\n name: \"Anthropic (Claude)\",\n baseUrl: \"https://api.anthropic.com/v1\",\n docsUrl: \"https://docs.anthropic.com\",\n balanceType: \"none\",\n authHeader: \"x-api-key\",\n authScheme: \"none\",\n freeTier: true,\n },\n {\n id: \"gemini\",\n name: \"Google Gemini\",\n baseUrl: \"https://generativelanguage.googleapis.com/v1beta\",\n docsUrl: \"https://ai.google.dev/gemini-api/docs\",\n balanceType: \"none\",\n authHeader: \"x-goog-api-key\",\n authScheme: \"none\",\n keyParam: \"key\",\n freeTier: true,\n },\n {\n id: \"groq\",\n name: \"Groq\",\n baseUrl: \"https://api.groq.com/openai/v1\",\n docsUrl: \"https://console.groq.com/docs\",\n balanceType: \"none\",\n authHeader: \"Authorization\",\n authScheme: \"Bearer\",\n freeTier: true,\n },\n {\n id: \"mistral\",\n name: \"Mistral AI\",\n baseUrl: \"https://api.mistral.ai/v1\",\n docsUrl: \"https://docs.mistral.ai\",\n balanceType: \"none\",\n authHeader: \"Authorization\",\n authScheme: \"Bearer\",\n freeTier: true,\n },\n {\n id: \"cohere\",\n name: \"Cohere\",\n baseUrl: \"https://api.cohere.ai/v1\",\n docsUrl: \"https://docs.cohere.com\",\n balanceType: \"none\",\n authHeader: \"Authorization\",\n authScheme: \"Bearer\",\n freeTier: true,\n },\n {\n id: \"deepseek\",\n name: \"DeepSeek\",\n baseUrl: \"https://api.deepseek.com/v1\",\n docsUrl: \"https://api-docs.deepseek.com\",\n balanceType: \"none\",\n authHeader: \"Authorization\",\n authScheme: \"Bearer\",\n freeTier: true,\n },\n {\n id: \"xai\",\n name: \"xAI (Grok)\",\n baseUrl: \"https://api.x.ai/v1\",\n docsUrl: \"https://docs.x.ai\",\n balanceType: \"none\",\n authHeader: \"Authorization\",\n authScheme: \"Bearer\",\n freeTier: true,\n },\n {\n id: \"together\",\n name: \"Together AI\",\n baseUrl: \"https://api.together.xyz/v1\",\n docsUrl: \"https://docs.together.ai\",\n balanceType: \"none\",\n authHeader: \"Authorization\",\n authScheme: \"Bearer\",\n freeTier: true,\n },\n {\n id: \"fireworks\",\n name: \"Fireworks AI\",\n baseUrl: \"https://api.fireworks.ai/inference/v1\",\n docsUrl: \"https://docs.fireworks.ai\",\n balanceType: \"none\",\n authHeader: \"Authorization\",\n authScheme: \"Bearer\",\n freeTier: true,\n },\n {\n id: \"puter\",\n name: \"Puter\",\n baseUrl: \"https://api.puter.com/puterai/openai/v1\",\n docsUrl: \"https://puter.com/dashboard\",\n balanceType: \"none\",\n authHeader: \"Authorization\",\n authScheme: \"Bearer\",\n freeTier: true,\n testModel: \"gpt-5.4-nano\",\n },\n {\n id: \"perplexity\",\n name: \"Perplexity\",\n baseUrl: \"https://api.perplexity.ai\",\n docsUrl: \"https://docs.perplexity.ai\",\n balanceType: \"none\",\n authHeader: \"Authorization\",\n authScheme: \"Bearer\",\n freeTier: true,\n },\n {\n id: \"custom\",\n name: \"Custom (OpenAI-compatible)\",\n baseUrl: \"\",\n docsUrl: \"\",\n balanceType: \"none\",\n authHeader: \"Authorization\",\n authScheme: \"Bearer\",\n },\n];\n\nexport function getProvider(id: string): ProviderDefinition | undefined {\n return PROVIDERS.find((p) => p.id === id);\n}\n"}, "edfb9192983f4913d46cba8e901bd8acd9750ac9": {"t": 1785763840.7966905, "n": 4805, "h": "f6941cb0a439f017", "c": "/**\n * 🌐 Registry Provider AI\n * -----------------------\n * Daftar semua provider AI yang didukung + cara menghubunginya.\n *\n * Setiap provider berisi:\n * - baseUrl : URL dasar API (OpenAI-compatible)\n * - authHeader : nama header auth (Authorization / x-api-key / dll)\n * - authScheme : \"Bearer\" (sk-...) atau \"none\" (kirim key polos)\n * - balanceType : \"usd\" = ada endpoint saldo | \"none\" = tidak ada\n * - balanceEndpoint/balancePath: lokasi data saldo di respons API\n *\n * Khusus id \"custom\" = base URL bebas, untuk API apapun\n * (ini yang jadi DEFAULT di form, supaya semua API bisa masuk).\n *\n * ➕ Mau tambah provider? Cukup tambah 1 entry di array PROVIDERS.\n */\nimport type { ProviderDefinition } from \"./types\";\n\n/**\n * Registry of all supported AI providers.\n *\n * Every provider is OpenAI-compatible for the /v1/models endpoint,\n * but balance checking differs:\n * - Providers with a billing API expose balanceEndpoint + balancePath\n * - Free-tier / subscription providers have balanceType: \"none\"\n *\n * To add a new provider, just append an entry here.\n */\nexport const PROVIDERS: ProviderDefinition[] = [\n {\n id: \"openrouter\",\n name: \"OpenRouter\",\n baseUrl: \"https://openrouter.ai/api/v1\",\n docsUrl: \"https://openrouter.ai/docs/api-reference\",\n balanceType: \"usd\",\n balanceEndpoint: \"/key\",\n balancePath: \"data.usage\",\n authHeader: \"Authorization\",\n authScheme: \"Bearer\",\n },\n {\n id: \"openai\",\n name: \"OpenAI\",\n baseUrl: \"https://api.openai.com/v1\",\n docsUrl: \"https://platform.openai.com/docs\",\n balanceType: \"usd\",\n balanceEndpoint: \"/dashboard/billing/credit_grants\",\n balancePath: \"total_granted\",\n authHeader: \"Authorization\",\n authScheme: \"Bearer\",\n },\n {\n id: \"anthropic\",\n name: \"Anthropic (Claude)\",\n baseUrl: \"https://api.anthropic.com/v1\",\n docsUrl: \"https://docs.anthropic.com\",\n balanceType: \"none\",\n authHeader: \"x-api-key\",\n authScheme: \"none\",\n freeTier: true,\n },\n {\n id: \"gemini\",\n name: \"Google Gemini\",\n baseUrl: \"https://generativelanguage.googleapis.com/v1beta\",\n docsUrl: \"https://ai.google.dev/gemini-api/docs\",\n balanceType: \"none\",\n authHeader: \"x-goog-api-key\",\n authScheme: \"none\",\n keyParam: \"key\",\n freeTier: true,\n },\n {\n id: \"groq\",\n name: \"Groq\",\n baseUrl: \"https://api.groq.com/openai/v1\",\n docsUrl: \"https://console.groq.com/docs\",\n balanceType: \"none\",\n authHeader: \"Authorization\",\n authScheme: \"Bearer\",\n freeTier: true,\n },\n {\n id: \"mistral\",\n name: \"Mistral AI\",\n baseUrl: \"https://api.mistral.ai/v1\",\n docsUrl: \"https://docs.mistral.ai\",\n balanceType: \"none\",\n authHeader: \"Authorization\",\n authScheme: \"Bearer\",\n freeTier: true,\n },\n {\n id: \"cohere\",\n name: \"Cohere\",\n baseUrl: \"https://api.cohere.ai/v1\",\n docsUrl: \"https://docs.cohere.com\",\n balanceType: \"none\",\n authHeader: \"Authorization\",\n authScheme: \"Bearer\",\n freeTier: true,\n },\n {\n id: \"deepseek\",\n name: \"DeepSeek\",\n baseUrl: \"https://api.deepseek.com/v1\",\n docsUrl: \"https://api-docs.deepseek.com\",\n balanceType: \"none\",\n authHeader: \"Authorization\",\n authScheme: \"Bearer\",\n freeTier: true,\n },\n {\n id: \"xai\",\n name: \"xAI (Grok)\",\n baseUrl: \"https://api.x.ai/v1\",\n docsUrl: \"https://docs.x.ai\",\n balanceType: \"none\",\n authHeader: \"Authorization\",\n authScheme: \"Bearer\",\n freeTier: true,\n },\n {\n id: \"together\",\n name: \"Together AI\",\n baseUrl: \"https://api.together.xyz/v1\",\n docsUrl: \"https://docs.together.ai\",\n balanceType: \"none\",\n authHeader: \"Authorization\",\n authScheme: \"Bearer\",\n freeTier: true,\n },\n {\n id: \"fireworks\",\n name: \"Fireworks AI\",\n baseUrl: \"https://api.fireworks.ai/inference/v1\",\n docsUrl: \"https://docs.fireworks.ai\",\n balanceType: \"none\",\n authHeader: \"Authorization\",\n authScheme: \"Bearer\",\n freeTier: true,\n },\n {\n id: \"puter\",\n name: \"Puter\",\n baseUrl: \"https://api.puter.com/puterai/openai/v1\",\n docsUrl: \"https://puter.com/dashboard\",\n balanceType: \"none\",\n authHeader: \"Authorization\",\n authScheme: \"Bearer\",\n freeTier: true,\n testModel: \"gpt-5.4-nano\",\n },\n {\n id: \"perplexity\",\n name: \"Perplexity\",\n baseUrl: \"https://api.perplexity.ai\",\n docsUrl: \"https://docs.perplexity.ai\",\n balanceType: \"none\",\n authHeader: \"Authorization\",\n authScheme: \"Bearer\",\n freeTier: true,\n },\n {\n id: \"custom\",\n name: \"Custom (OpenAI-compatible)\",\n baseUrl: \"\",\n docsUrl: \"\",\n balanceType: \"none\",\n authHeader: \"Authorization\",\n authScheme: \"Bearer\",\n },\n];\n\nexport function getProvider(id: string): ProviderDefinition | undefined {\n return PROVIDERS.find((p) => p.id === id);\n}\n"}}}}