Set up the inference.sh proxy in Next.js with App Router or Page Router.
Installation
bash
1npm install @inferencesh/sdkApp Router (Recommended)
Create app/api/inference/proxy/route.ts:
typescript
1import { route } from "@inferencesh/sdk/proxy/nextjs";2 3export const { GET, POST, PUT } = route;That's it! The route handler exports all necessary HTTP methods.
With Edge Runtime
typescript
1import { route } from "@inferencesh/sdk/proxy/nextjs";2 3export const runtime = "edge";4export const { GET, POST, PUT } = route;Page Router
Create pages/api/inference/proxy.ts:
typescript
1export { handler as default } from "@inferencesh/sdk/proxy/nextjs";Note: Page Router doesn't support streaming. Use App Router for real-time updates.
Environment Variable
Add your API key to .env.local:
bash
1INFERENCE_API_KEY="inf_your_key_here"Client Configuration
typescript
1"use client";2 3import { inference } from "@inferencesh/sdk";4 5const client = inference({6 proxyUrl: "/api/inference/proxy"7});8 9export async function generateImage(prompt: string) {10 const result = await client.run({11 app: "infsh/flux",12 input: { prompt }13 });14 15 return result.output;16}Custom Logic
Add authentication, rate limiting, or analytics:
typescript
1// app/api/inference/proxy/route.ts2import { route } from "@inferencesh/sdk/proxy/nextjs";3import { getSession } from "@/lib/auth";4 5export const POST = async (req: Request) => {6 // Check authentication7 const session = await getSession();8 if (!session) {9 return Response.json({ error: "Unauthorized" }, { status: 401 });10 }11 12 // Add analytics13 await analytics.track("inference_request", {14 userId: session.user.id,15 });16 17 // Forward to inference.sh18 return route.POST(req);19};20 21export const GET = route.GET;22export const PUT = route.PUT;CORS (Cross-Origin)
If calling from a different domain:
typescript
1import { route } from "@inferencesh/sdk/proxy/nextjs";2import { NextResponse } from "next/server";3 4export async function OPTIONS() {5 return new NextResponse(null, {6 headers: {7 "Access-Control-Allow-Origin": "*",8 "Access-Control-Allow-Methods": "GET, POST, PUT, OPTIONS",9 "Access-Control-Allow-Headers": "Content-Type, x-inf-target-url",10 },11 });12}13 14export const { GET, POST, PUT } = route;Vercel Deployment
See Vercel for deployment-specific configuration and timeout settings.