Files

1 line
10 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"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"}}}}