9router / src /app /api /oauth /kiro /auto-import /route.js
2api
feat: configurable stream stall timeout + per-provider UI
88c4c60
Raw
History Blame Contribute Delete
2.38 kB
import { NextResponse } from "next/server";
import { readFile, readdir } from "fs/promises";
import { homedir } from "os";
import { join } from "path";
/**
* GET /api/oauth/kiro/auto-import
* Auto-detect and extract Kiro refresh token from AWS SSO cache
*/
export async function GET() {
try {
const cachePath = join(homedir(), ".aws/sso/cache");
// Try to read cache directory
let files;
try {
files = await readdir(cachePath);
} catch (error) {
return NextResponse.json({
found: false,
error: "AWS SSO cache not found. Please login to Kiro IDE first.",
});
}
// Look for kiro-auth-token.json or any .json file with refreshToken
let refreshToken = null;
let foundFile = null;
// First try kiro-auth-token.json
const kiroTokenFile = "kiro-auth-token.json";
if (files.includes(kiroTokenFile)) {
try {
const content = await readFile(join(cachePath, kiroTokenFile), "utf-8");
const data = JSON.parse(content);
if (data.refreshToken && data.refreshToken.startsWith("aorAAAAAG")) {
refreshToken = data.refreshToken;
foundFile = kiroTokenFile;
}
} catch (error) {
// Continue to search other files
}
}
// If not found, search all .json files
if (!refreshToken) {
for (const file of files) {
if (!file.endsWith(".json")) continue;
try {
const content = await readFile(join(cachePath, file), "utf-8");
const data = JSON.parse(content);
// Look for Kiro refresh token (starts with aorAAAAAG)
if (data.refreshToken && data.refreshToken.startsWith("aorAAAAAG")) {
refreshToken = data.refreshToken;
foundFile = file;
break;
}
} catch (error) {
// Skip invalid JSON files
continue;
}
}
}
if (!refreshToken) {
return NextResponse.json({
found: false,
error: "Kiro token not found in AWS SSO cache. Please login to Kiro IDE first.",
});
}
return NextResponse.json({
found: true,
refreshToken,
source: foundFile,
});
} catch (error) {
console.log("Kiro auto-import error:", error);
return NextResponse.json(
{ found: false, error: error.message },
{ status: 500 }
);
}
}