respond with relative code expiration time

This commit is contained in:
miloschwartz
2025-12-01 12:36:02 -05:00
parent 92125611e9
commit 8c62dfa706
3 changed files with 10 additions and 8 deletions

View File

@@ -22,7 +22,7 @@ export type StartDeviceWebAuthBody = z.infer<typeof bodySchema>;
export type StartDeviceWebAuthResponse = { export type StartDeviceWebAuthResponse = {
code: string; code: string;
expiresAt: number; expiresInSeconds: number;
}; };
// Helper function to generate device code in format A1AJ-N5JD // Helper function to generate device code in format A1AJ-N5JD
@@ -131,10 +131,13 @@ export async function startDeviceWebAuth(
createdAt: Date.now() createdAt: Date.now()
}); });
// calculate relative expiration in seconds
const expiresInSeconds = Math.floor((expiresAt - Date.now()) / 1000);
return response<StartDeviceWebAuthResponse>(res, { return response<StartDeviceWebAuthResponse>(res, {
data: { data: {
code, code,
expiresAt expiresInSeconds
}, },
success: true, success: true,
error: false, error: false,

View File

@@ -15,8 +15,6 @@ export default async function DeviceLoginPage({ searchParams }: Props) {
const params = await searchParams; const params = await searchParams;
const code = params.code || ""; const code = params.code || "";
console.log("user", user);
if (!user) { if (!user) {
const redirectDestination = code const redirectDestination = code
? `/auth/login/device?code=${encodeURIComponent(code)}` ? `/auth/login/device?code=${encodeURIComponent(code)}`

View File

@@ -84,6 +84,9 @@ export default function DeviceLoginForm({
if (!data.code.includes("-") && data.code.length === 8) { if (!data.code.includes("-") && data.code.length === 8) {
data.code = data.code.slice(0, 4) + "-" + data.code.slice(4); data.code = data.code.slice(0, 4) + "-" + data.code.slice(4);
} }
await new Promise((resolve) => setTimeout(resolve, 300));
// First check - get metadata // First check - get metadata
const res = await api.post( const res = await api.post(
"/device-web-auth/verify?forceLogin=true", "/device-web-auth/verify?forceLogin=true",
@@ -93,8 +96,6 @@ export default function DeviceLoginForm({
} }
); );
await new Promise((resolve) => setTimeout(resolve, 500)); // artificial delay for better UX
if (res.data.success && res.data.data.metadata) { if (res.data.success && res.data.data.metadata) {
setMetadata(res.data.data.metadata); setMetadata(res.data.data.metadata);
setCode(data.code.toUpperCase()); setCode(data.code.toUpperCase());
@@ -116,14 +117,14 @@ export default function DeviceLoginForm({
setLoading(true); setLoading(true);
try { try {
await new Promise((resolve) => setTimeout(resolve, 300));
// Final verify // Final verify
await api.post("/device-web-auth/verify", { await api.post("/device-web-auth/verify", {
code: code, code: code,
verify: true verify: true
}); });
await new Promise((resolve) => setTimeout(resolve, 500)); // artificial delay for better UX
// Redirect to success page // Redirect to success page
router.push("/auth/login/device/success"); router.push("/auth/login/device/success");
} catch (e: any) { } catch (e: any) {