Files
2026-07-13 13:39:12 +08:00

124 lines
3.9 KiB
TypeScript

import test from "node:test";
import assert from "node:assert/strict";
import { kiro } from "@/lib/oauth/providers/kiro";
test("kiro.requestDeviceCode returns resolved region for IDC token endpoint", async () => {
const originalFetch = global.fetch;
const fetchCalls: Array<{ url: string; body?: string }> = [];
global.fetch = (async (input: RequestInfo | URL, init?: RequestInit) => {
const url = String(input);
fetchCalls.push({ url, body: typeof init?.body === "string" ? init.body : undefined });
if (url.endsWith("/client/register")) {
return new Response(JSON.stringify({ clientId: "client-ap", clientSecret: "secret-ap" }), {
status: 200,
});
}
if (url.endsWith("/device_authorization")) {
return new Response(
JSON.stringify({
deviceCode: "dev-code",
userCode: "user-code",
verificationUri: "https://d-tenant.awsapps.com/start/#/device",
verificationUriComplete: "https://d-tenant.awsapps.com/start/#/device?user_code=ABCD",
expiresIn: 600,
interval: 1,
}),
{ status: 200 }
);
}
return new Response("not-found", { status: 404 });
}) as typeof fetch;
try {
const result = await kiro.requestDeviceCode({
registerClientUrl: "https://oidc.ap-southeast-1.amazonaws.com/client/register",
deviceAuthUrl: "https://oidc.ap-southeast-1.amazonaws.com/device_authorization",
tokenUrl: "https://oidc.ap-southeast-1.amazonaws.com/token",
startUrl: "https://d-tenant.awsapps.com/start",
clientName: "kiro-oauth-client",
clientType: "public",
scopes: ["codewhisperer:completions"],
grantTypes: ["urn:ietf:params:oauth:grant-type:device_code", "refresh_token"],
skipIssuerUrlForRegistration: true,
});
assert.equal(result._region, "ap-southeast-1");
assert.equal(result._clientId, "client-ap");
assert.equal(result._clientSecret, "secret-ap");
const registerBody = JSON.parse(fetchCalls[0]?.body || "{}");
assert.equal(registerBody.issuerUrl, undefined);
} finally {
global.fetch = originalFetch;
}
});
test("kiro.pollToken uses region provided by extraData", async () => {
const originalFetch = global.fetch;
let requestedUrl = "";
global.fetch = (async (input: RequestInfo | URL) => {
requestedUrl = String(input);
return new Response(
JSON.stringify({
accessToken: "access",
refreshToken: "refresh",
expiresIn: 3600,
}),
{ status: 200 }
);
}) as typeof fetch;
try {
const result = await kiro.pollToken(
{ tokenUrl: "https://oidc.us-east-1.amazonaws.com/token" },
"device-code",
null,
{ _clientId: "cid", _clientSecret: "csecret", _region: "ap-southeast-1" }
);
assert.equal(requestedUrl, "https://oidc.ap-southeast-1.amazonaws.com/token");
assert.equal(result.ok, true);
assert.equal(result.data.access_token, "access");
assert.equal(result.data._region, "ap-southeast-1");
} finally {
global.fetch = originalFetch;
}
});
test("kiro.mapTokens persists region into providerSpecificData", () => {
const mapped = kiro.mapTokens({
access_token: "at",
refresh_token: "rt",
expires_in: 3600,
_clientId: "cid",
_clientSecret: "csec",
_region: "ap-southeast-1",
});
assert.equal(mapped.accessToken, "at");
assert.equal(mapped.refreshToken, "rt");
assert.equal(mapped.expiresIn, 3600);
assert.equal(mapped.providerSpecificData.clientId, "cid");
assert.equal(mapped.providerSpecificData.clientSecret, "csec");
assert.equal(mapped.providerSpecificData.region, "ap-southeast-1");
});
test("kiro.mapTokens defaults region to undefined when not provided", () => {
const mapped = kiro.mapTokens({
access_token: "at",
refresh_token: "rt",
expires_in: 3600,
_clientId: "cid",
_clientSecret: "csec",
});
assert.equal(mapped.providerSpecificData.region, undefined);
});