1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import { sqlite } from "https://esm.town/v/std/sqlite?v=4";
interface RefreshVerificationTokenParams {
email: string;
token: string;
}
export async function refreshVerificationToken({ email, token }: RefreshVerificationTokenParams) {
const newToken = crypto.randomUUID();
const { rowsAffected } = await sqlite.execute({
sql: `
UPDATE subscribers
SET verification_token = CASE
WHEN datetime(subscribed_at) < datetime('now', '-30 minutes') THEN ?
ELSE verification_token
END,
subscribed_at = CASE
WHEN datetime(subscribed_at) < datetime('now', '-30 minutes') THEN CURRENT_TIMESTAMP
ELSE subscribed_at
END
WHERE email = ? AND verification_token = ?
AND (datetime(subscribed_at) < datetime('now', '-30 minutes'));
`,
args: [newToken, email, token],
});
return { newToken, didRefresh: rowsAffected === 1 };
}