| import { NextResponse } from "next/server"; |
| import { readFile, readdir } from "fs/promises"; |
| import { homedir } from "os"; |
| import { join } from "path"; |
|
|
| |
| |
| |
| |
| export async function GET() { |
| try { |
| const cachePath = join(homedir(), ".aws/sso/cache"); |
|
|
| |
| 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.", |
| }); |
| } |
|
|
| |
| let refreshToken = null; |
| let foundFile = null; |
|
|
| |
| 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) { |
| |
| } |
| } |
|
|
| |
| 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); |
|
|
| |
| if (data.refreshToken && data.refreshToken.startsWith("aorAAAAAG")) { |
| refreshToken = data.refreshToken; |
| foundFile = file; |
| break; |
| } |
| } catch (error) { |
| |
| 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 } |
| ); |
| } |
| } |
|
|