fix(#2): state checking

This commit is contained in:
2026-03-10 16:41:26 +01:00
parent 0ffd1e52ae
commit 3fb0f7166b
4 changed files with 14 additions and 7 deletions

View File

@@ -22,6 +22,7 @@ import {
getDefaultWishlistData,
Habit,
PomodoroAtom,
User,
UserId
} from "./types";
@@ -77,6 +78,10 @@ export const currentUserAtom = atom((get) => {
return users.users.find(user => user.id === currentUserId);
})
function removeHasPassword(users: Omit<User, 'password'>[]): Omit<User, 'password'>[] {
return users.map(user => { delete user.hasPassword; return user });
}
/**
* Asynchronous atom that calculates a freshness token (hash) based on the current client-side data.
* This token can be compared with a server-generated token to detect data discrepancies.
@@ -86,9 +91,10 @@ export const clientFreshnessTokenAtom = atom(async (get) => {
const habits = get(habitsAtom);
const coins = get(coinsAtom);
const wishlist = get(wishlistAtom);
const users = get(usersAtom);
const users = structuredClone(get(usersAtom));
const usersWithoutHasPassword = removeHasPassword(users.users);
const dataString = prepareDataForHashing(settings, habits, coins, wishlist, users);
const dataString = prepareDataForHashing(settings, habits, coins, wishlist, { users: usersWithoutHasPassword });
const hash = await generateCryptoHash(dataString);
return hash;
});

View File

@@ -33,4 +33,6 @@ export const QUICK_DATES = [
export const MAX_COIN_LIMIT = 9999
export const DESKTOP_DISPLAY_ITEM_COUNT = 4
export const DESKTOP_DISPLAY_ITEM_COUNT = 4
export const DATA_FRESHNESS_INTERVAL = 30000;