[READ-ONLY] Mirror of https://github.com/danielroe/n3rdle. n3rdle.vercel.app
0

Configure Feed

Select the types of activity you want to include in your feed.

feat: return error if guesses aren't in wordlist or unique (#7)

Co-authored-by: Paul Kenneth Egell-Johnsen <paul.k.egell-johnsen@gmail.com>

+18 -3
+18 -3
server/api/guess.ts
··· 4 4 5 5 import wordList from 'wordlist-english/index.js' 6 6 const validWords = wordList['english/10'].filter(word => word.length === 5) 7 - 8 7 storage.mount('', MemoryDriver()) 9 8 10 9 const decode = (state = '[]'): GameState => JSON.parse(state) ··· 12 11 13 12 export default defineHandle(async (req, res) => { 14 13 const guess = (await useBody(req)).guess?.toLowerCase() 14 + const state: GameState = decode(useCookie(req, 'state')) 15 15 16 16 if (!guess || guess.length !== 5) { 17 17 return createError({ 18 18 statusCode: 422, 19 - message: 'Invalid guess', 19 + message: 'Invalid guess, 5 letter words only', 20 + }) 21 + } 22 + 23 + if (!validWords.includes(guess)) { 24 + return createError({ 25 + statusCode: 422, 26 + message: 'Invalid guess, word not in word list', 27 + }) 28 + } 29 + 30 + if (state.some(([word]) => word === guess)) { 31 + return createError({ 32 + statusCode: 422, 33 + message: 'Invalid guess, word already guessed', 20 34 }) 21 35 } 22 36 ··· 27 41 28 42 await storage.setItem(day, word) 29 43 30 - const state: GameState = decode(useCookie(req, 'state')) 31 44 state.push([guess, generateHint(word, guess)]) 32 45 setCookie(res, 'state', encode(state), { 33 46 path: '/', 34 47 maxAge: 60 * 60 * 24, 48 + sameSite: false, 49 + secure: false, 35 50 }) 36 51 37 52 return state