SDK_TS // NEXT.JS APP ROUTER & TYPESCRIPT

Panduan Integrasi Next.js & TypeScript

Panduan ini mencakup cara memanggil endpoint TokenFajri dari sisi server Next.js App Router (app/api/*/route.ts atau Server Actions) menggunakan SDK resmi openai maupun Vercel AI SDK tanpa membocorkan kunci API ke browser klien.

1. Konfigurasi .env.local di Proyek Next.js

Simpan kunci API tanpa prefix NEXT_PUBLIC_ agar kunci hanya dapat dibaca di lingkungan server Node.js:

# .env.local
TOKENFAJRI_API_KEY="sk-tok-xxxxxxxxxxxxxxxxxxxxxxxx"
TOKENFAJRI_BASE_URL="https://token.fajriag.ai.id/v1"

2. Menggunakan SDK Resmi openai di Route Handler

// src/app/api/chat/route.ts
import { NextRequest, NextResponse } from "next/server";
import OpenAI from "openai";

const gateway = new OpenAI({
  apiKey: process.env.TOKENFAJRI_API_KEY,
  baseURL: process.env.TOKENFAJRI_BASE_URL || "https://token.fajriag.ai.id/v1",
});

export async function POST(req: NextRequest) {
  const { prompt } = await req.json();

  const completion = await gateway.chat.completions.create({
    model: "deepseek-v4.1-flash-1017",
    messages: [
      { role: "system", content: "Anda adalah asisten teknis aplikasi produksi." },
      { role: "user", content: String(prompt || "") },
    ],
    temperature: 0.3,
  });

  return NextResponse.json({
    reply: completion.choices[0]?.message?.content ?? "",
    usage: completion.usage,
  });
}

3. Integrasi Streaming dengan Vercel AI SDK (@ai-sdk/openai)

Jika Anda menggunakan hook useChat dari Vercel AI SDK, gunakan fungsi createOpenAI dengan opsi baseURL:

// npm install ai @ai-sdk/openai
// src/app/api/stream/route.ts
import { streamText } from "ai";
import { createOpenAI } from "@ai-sdk/openai";

const tokenFajri = createOpenAI({
  apiKey: process.env.TOKENFAJRI_API_KEY,
  baseURL: "https://token.fajriag.ai.id/v1",
});

export async function POST(req: Request) {
  const { messages } = await req.json();

  const result = streamText({
    model: tokenFajri.chat("deepseek-v4.1-flash-1017"),
    messages,
  });

  return result.toDataStreamResponse();
}
Panduan Integrasi Next.js App Router & TypeScript dengan AI Gateway | TokenFajri