1import { nanoid } from 'nanoid';
2import { get, writable } from 'svelte/store';
3
4const tokens = writable<Map<string, number>>(new Map());
5
6export const newToken = () => {
7 const token = nanoid(100);
8 tokens.update((v) => v.set(token, Date.now()));
9 return token;
10};
11export const useToken = (token: string) => {
12 const _tokens = get(tokens);
13 // delete older tokens
14 for (const [_token, timestamp] of _tokens) {
15 if (Date.now() - timestamp > 30 * 60 * 1000) {
16 _tokens.delete(_token);
17 }
18 }
19 tokens.set(_tokens);
20 return _tokens.has(token);
21};
22
23export const checkUrl = (url: URL) => {
24 const token = url.searchParams.get('_token');
25 return token !== null && useToken(token);
26};