export const runtime = 'edge'; import Link from 'next/link'; import SiteNav from '../components/SiteNav'; type Recipe = { id: string; name: string; primitive: 'static_key' | 'service_account'; category: string; secrets: string[]; badge?: 'official'; }; const RECIPES: Recipe[] = [ // AI / LLM { id: 'openai', name: 'OpenAI', primitive: 'static_key', category: 'AI', secrets: ['OPENAI_API_KEY'], badge: 'official' }, { id: 'anthropic', name: 'Anthropic', primitive: 'static_key', category: 'AI', secrets: ['ANTHROPIC_API_KEY'], badge: 'official' }, // Productivity { id: 'notion', name: 'Notion', primitive: 'static_key', category: 'Productivity', secrets: ['NOTION_TOKEN'], badge: 'official' }, { id: 'airtable', name: 'Airtable', primitive: 'static_key', category: 'Productivity', secrets: ['AIRTABLE_TOKEN'], badge: 'official' }, { id: 'typeform', name: 'Typeform', primitive: 'static_key', category: 'Productivity', secrets: ['TYPEFORM_TOKEN'], badge: 'official' }, { id: 'jira', name: 'Jira', primitive: 'static_key', category: 'Productivity', secrets: ['JIRA_DOMAIN', 'JIRA_EMAIL', 'JIRA_API_TOKEN'], badge: 'official' }, // Communication { id: 'slack', name: 'Slack', primitive: 'static_key', category: 'Communication', secrets: ['SLACK_TOKEN'], badge: 'official' }, { id: 'discord', name: 'Discord', primitive: 'static_key', category: 'Communication', secrets: ['DISCORD_BOT_TOKEN'], badge: 'official' }, { id: 'twilio', name: 'Twilio', primitive: 'static_key', category: 'Communication', secrets: ['TWILIO_ACCOUNT_SID', 'TWILIO_AUTH_TOKEN'], badge: 'official' }, { id: 'sendgrid', name: 'SendGrid', primitive: 'static_key', category: 'Communication', secrets: ['SENDGRID_API_KEY'], badge: 'official' }, { id: 'resend', name: 'Resend', primitive: 'static_key', category: 'Communication', secrets: ['RESEND_API_KEY'], badge: 'official' }, // Dev / Code { id: 'github', name: 'GitHub', primitive: 'static_key', category: 'Dev', secrets: ['GITHUB_TOKEN'], badge: 'official' }, { id: 'linear', name: 'Linear', primitive: 'static_key', category: 'Dev', secrets: ['LINEAR_API_KEY'], badge: 'official' }, { id: 'supabase', name: 'Supabase', primitive: 'static_key', category: 'Dev', secrets: ['SUPABASE_URL', 'SUPABASE_SERVICE_ROLE_KEY'], badge: 'official' }, // Commerce { id: 'stripe', name: 'Stripe', primitive: 'static_key', category: 'Commerce', secrets: ['STRIPE_SECRET_KEY'], badge: 'official' }, { id: 'shopify', name: 'Shopify', primitive: 'static_key', category: 'Commerce', secrets: ['SHOPIFY_STORE_DOMAIN', 'SHOPIFY_ACCESS_TOKEN'], badge: 'official' }, { id: 'hubspot', name: 'HubSpot', primitive: 'static_key', category: 'Commerce', secrets: ['HUBSPOT_ACCESS_TOKEN'], badge: 'official' }, // Google Service Account { id: 'google_drive_sa', name: 'Google Drive', primitive: 'service_account', category: 'Google', secrets: ['GOOGLE_SERVICE_ACCOUNT_JSON'], badge: 'official' }, { id: 'google_gmail_sa', name: 'Gmail', primitive: 'service_account', category: 'Google', secrets: ['GOOGLE_SERVICE_ACCOUNT_JSON'], badge: 'official' }, { id: 'google_sheets_sa', name: 'Google Sheets', primitive: 'service_account', category: 'Google', secrets: ['GOOGLE_SERVICE_ACCOUNT_JSON'], badge: 'official' }, ]; const CATEGORIES = ['All', 'AI', 'Productivity', 'Communication', 'Dev', 'Commerce', 'Google']; export default function IntegrationsPage({ searchParams, }: { searchParams: Promise<{ cat?: string }>; }) { return ; } async function IntegrationsContent({ searchParamsPromise, }: { searchParamsPromise: Promise<{ cat?: string }>; }) { const params = await searchParamsPromise; const cat = params.cat ?? 'All'; const filtered = cat === 'All' ? RECIPES : RECIPES.filter(r => r.category === cat); const staticCount = RECIPES.filter(r => r.primitive === 'static_key').length; const saCount = RECIPES.filter(r => r.primitive === 'service_account').length; return (
{/* Header */}

{RECIPES.length} 個已驗證的認證服務

由 arcrun 團隊維護,每個 recipe 都通過整合測試。

{staticCount} API Key 類 · {saCount} Service Account 類
{/* Category filter */}
{CATEGORIES.map(c => ( {c} ))}
{/* Recipe grid */}
{filtered.map(recipe => ( ))}
{/* Contribute CTA */}

找不到你要的服務?

大部分 API Key 類的服務,填一份 YAML 就能加進來。 把 API 文件丟給 AI,五分鐘生成,開 PR 送出。

); } function RecipeCard({ recipe }: { recipe: Recipe }) { const primitiveLabel = recipe.primitive === 'static_key' ? 'API Key' : 'Service Account'; const primitiveColor = recipe.primitive === 'static_key' ? 'text-blue-400' : 'text-orange-400'; return (

{recipe.name}

{primitiveLabel}
{recipe.badge === 'official' && ( ★ 官方 )}
{recipe.secrets.map(s => (
{s}
))}
acr auth-recipe scaffold {recipe.id}
); }