78 lines
2.6 KiB
TypeScript
78 lines
2.6 KiB
TypeScript
// Script diagnóstico para testar login Supabase password grant
|
|
// Executar com: npx ts-node scripts/diagnose-login.ts (ou adicionar script no package.json)
|
|
|
|
// Node 18+ possui fetch nativo; sem dependência externa
|
|
// Declaração mínima para evitar erro de tipos sem adicionar @types/node
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
declare const process: any | undefined;
|
|
|
|
const SUPABASE_URL =
|
|
(typeof process !== "undefined" && process.env.VITE_SUPABASE_URL) ||
|
|
"https://yuanqfswhberkoevtmfr.supabase.co";
|
|
const ANON_KEY =
|
|
(typeof process !== "undefined" && process.env.VITE_SUPABASE_ANON_KEY) ||
|
|
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Inl1YW5xZnN3aGJlcmtvZXZ0bWZyIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NTQ5NTQzNjksImV4cCI6MjA3MDUzMDM2OX0.g8Fm4XAvtX46zifBZnYVH4tVuQkqUH6Ia9CXQj4DztQ";
|
|
|
|
// Credenciais admin de desenvolvimento (fornecidas)
|
|
const EMAIL =
|
|
(typeof process !== "undefined" && process.env.TEST_ADMIN_EMAIL) ||
|
|
"riseup@popcode.com.br";
|
|
const PASSWORD =
|
|
(typeof process !== "undefined" && process.env.TEST_ADMIN_PASSWORD) ||
|
|
"riseup";
|
|
|
|
async function attemptLogin() {
|
|
const url = `${SUPABASE_URL}/auth/v1/token?grant_type=password`;
|
|
const body = { email: EMAIL, password: PASSWORD };
|
|
try {
|
|
const res = await fetch(url, {
|
|
method: "POST",
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
apikey: ANON_KEY,
|
|
Authorization: `Bearer ${ANON_KEY}`,
|
|
},
|
|
body: JSON.stringify(body),
|
|
});
|
|
const text = await res.text();
|
|
let parsed: unknown = null;
|
|
try {
|
|
parsed = JSON.parse(text);
|
|
} catch {
|
|
/* plain text */
|
|
}
|
|
console.log("STATUS", res.status);
|
|
console.log("RAW", text);
|
|
if (
|
|
res.ok &&
|
|
typeof parsed === "object" &&
|
|
parsed &&
|
|
"access_token" in parsed
|
|
) {
|
|
const token = (parsed as { access_token: string }).access_token;
|
|
console.log("LOGIN OK: access_token prefix", token.slice(0, 20));
|
|
return true;
|
|
}
|
|
// Erro comum: user not confirmed / invalid login
|
|
if (parsed && typeof parsed === "object") {
|
|
const p = parsed as Record<string, unknown>;
|
|
if (p.error) console.log("ERROR CODE:", p.error);
|
|
if (p.msg) console.log("MSG:", p.msg);
|
|
}
|
|
if (/email/i.test(text) && /confirm/i.test(text)) {
|
|
console.log(
|
|
"Possível conta não confirmada. Verifique no painel Supabase se o email foi confirmado."
|
|
);
|
|
}
|
|
return false;
|
|
} catch (e) {
|
|
console.error("Falha inesperada:", e);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
(async () => {
|
|
const ok = await attemptLogin();
|
|
if (!ok && typeof process !== "undefined") process.exit(1);
|
|
})();
|