import { NextResponse } from 'next/server';
import { SandboxInstance } from "@blaxel/core";
const SANDBOX_NAME = 'my-sandbox';
const responseHeaders = {
"Access-Control-Allow-Origin": "http://localhost:3000",
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS, PATCH",
"Access-Control-Allow-Headers": "Content-Type, Authorization, X-Requested-With, X-Blaxel-Workspace, X-Blaxel-Preview-Token, X-Blaxel-Authorization",
"Access-Control-Allow-Credentials": "true",
"Access-Control-Expose-Headers": "Content-Length, X-Request-Id",
"Access-Control-Max-Age": "86400",
"Vary": "Origin"
}
export async function GET() {
// Get or create sandbox
const sandbox = await SandboxInstance.createIfNotExists({
name: SANDBOX_NAME,
image: "blaxel/prod-base:latest",
memory: 4096,
ports: [
{ name: "preview", target: 3000 }
]
});
// Create session (24 hours expiry)
const session = await sandbox.sessions.create({
expiresAt: new Date(Date.now() + 24 * 60 * 60 * 1000)
});
// Create preview for port 3000
const preview = await sandbox.previews.create({
metadata: { name: "app-preview" },
spec: {
port: 3000,
public: true,
responseHeaders: responseHeaders
}
});
return NextResponse.json({
session,
preview_url: preview.spec?.url
});
}