@kadoa/mcp 0.3.6-rc.1 → 0.3.6-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +29 -3
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -53948,6 +53948,14 @@ function generatePKCE() {
|
|
|
53948
53948
|
const challenge = createHash2("sha256").update(verifier).digest("base64url");
|
|
53949
53949
|
return { verifier, challenge };
|
|
53950
53950
|
}
|
|
53951
|
+
function jwtClaims(jwt2) {
|
|
53952
|
+
try {
|
|
53953
|
+
const payload = JSON.parse(Buffer.from(jwt2.split(".")[1], "base64url").toString());
|
|
53954
|
+
return { email: payload.email, sub: payload.sub };
|
|
53955
|
+
} catch {
|
|
53956
|
+
return {};
|
|
53957
|
+
}
|
|
53958
|
+
}
|
|
53951
53959
|
async function exchangeSupabaseCode(code, codeVerifier) {
|
|
53952
53960
|
const supabaseUrl = process.env.SUPABASE_URL;
|
|
53953
53961
|
if (!supabaseUrl)
|
|
@@ -54203,6 +54211,8 @@ class KadoaOAuthProvider {
|
|
|
54203
54211
|
clientId: entry.clientId
|
|
54204
54212
|
});
|
|
54205
54213
|
authCodes.delete(authorizationCode);
|
|
54214
|
+
const claims = jwtClaims(entry.supabaseJwt);
|
|
54215
|
+
console.log(`[AUTH] LOGIN: tokens issued (email=${claims.email}, team=${entry.teamId}, token=${accessToken.slice(0, 12)}..., ttl=${ACCESS_TOKEN_TTL}s, active_sessions=${accessTokens.size})`);
|
|
54206
54216
|
return {
|
|
54207
54217
|
access_token: accessToken,
|
|
54208
54218
|
token_type: "bearer",
|
|
@@ -54212,8 +54222,10 @@ class KadoaOAuthProvider {
|
|
|
54212
54222
|
}
|
|
54213
54223
|
async exchangeRefreshToken(_client, refreshToken) {
|
|
54214
54224
|
const entry = refreshTokens.get(refreshToken);
|
|
54215
|
-
if (!entry)
|
|
54225
|
+
if (!entry) {
|
|
54226
|
+
console.error(`[AUTH] REFRESH_FAIL: unknown refresh token (token=${refreshToken.slice(0, 12)}..., active_sessions=${refreshTokens.size})`);
|
|
54216
54227
|
throw new Error("Unknown refresh token");
|
|
54228
|
+
}
|
|
54217
54229
|
refreshTokens.delete(refreshToken);
|
|
54218
54230
|
let { supabaseJwt, supabaseRefreshToken } = entry;
|
|
54219
54231
|
try {
|
|
@@ -54231,9 +54243,18 @@ class KadoaOAuthProvider {
|
|
|
54231
54243
|
const data = await res.json();
|
|
54232
54244
|
supabaseJwt = data.access_token;
|
|
54233
54245
|
supabaseRefreshToken = data.refresh_token;
|
|
54246
|
+
const newClaims = jwtClaims(supabaseJwt);
|
|
54247
|
+
console.log(`[AUTH] REFRESH_OK: Supabase JWT refreshed (email=${newClaims.email}, team=${entry.teamId})`);
|
|
54248
|
+
} else {
|
|
54249
|
+
const body = await res.text().catch(() => "");
|
|
54250
|
+
const claims = jwtClaims(entry.supabaseJwt);
|
|
54251
|
+
console.error(`[AUTH] REFRESH_WARN: Supabase refresh failed HTTP ${res.status} (email=${claims.email}, team=${entry.teamId}): ${body.slice(0, 200)}`);
|
|
54234
54252
|
}
|
|
54235
54253
|
}
|
|
54236
|
-
} catch {
|
|
54254
|
+
} catch (err) {
|
|
54255
|
+
const claims = jwtClaims(entry.supabaseJwt);
|
|
54256
|
+
console.error(`[AUTH] REFRESH_WARN: Supabase refresh threw (email=${claims.email}, team=${entry.teamId}):`, err);
|
|
54257
|
+
}
|
|
54237
54258
|
const newAccessToken = randomToken();
|
|
54238
54259
|
const newRefreshToken = randomToken();
|
|
54239
54260
|
const expiresAt = Date.now() + ACCESS_TOKEN_TTL * 1000;
|
|
@@ -54268,9 +54289,14 @@ class KadoaOAuthProvider {
|
|
|
54268
54289
|
};
|
|
54269
54290
|
}
|
|
54270
54291
|
const entry = accessTokens.get(token);
|
|
54271
|
-
if (!entry)
|
|
54292
|
+
if (!entry) {
|
|
54293
|
+
console.error(`[AUTH] VERIFY_FAIL: unknown token (token=${token.slice(0, 12)}..., active_sessions=${accessTokens.size})`);
|
|
54272
54294
|
throw new Error("Unknown access token");
|
|
54295
|
+
}
|
|
54273
54296
|
if (entry.expiresAt < Date.now()) {
|
|
54297
|
+
const expiredAgo = Math.round((Date.now() - entry.expiresAt) / 1000);
|
|
54298
|
+
const claims = jwtClaims(entry.supabaseJwt);
|
|
54299
|
+
console.error(`[AUTH] VERIFY_FAIL: token expired ${expiredAgo}s ago (email=${claims.email}, team=${entry.teamId}, token=${token.slice(0, 12)}...)`);
|
|
54274
54300
|
accessTokens.delete(token);
|
|
54275
54301
|
throw new Error("Access token expired");
|
|
54276
54302
|
}
|