diff --git a/src/data/nouns.ts b/src/data/nouns.ts index e2dfb47..dacd633 100644 --- a/src/data/nouns.ts +++ b/src/data/nouns.ts @@ -2,79 +2,579 @@ * Collection of common nouns for feed ID generation */ export const nouns = [ - 'actor', 'almond', 'amber', 'anchor', 'angel', 'animal', 'answer', 'apple', - 'autumn', 'avenue', 'badge', 'bagel', 'baker', 'ballet', 'bamboo', - 'banana', 'basket', 'beach', 'beard', 'beauty', 'beetle', 'berry', 'bicycle', - 'bird', 'blanket', 'blossom', 'boat', 'bottle', 'bowl', 'breeze', 'bubble', - 'bucket', 'button', 'cabin', 'cactus', 'cafe', 'camera', 'candle', 'candy', - 'canvas', 'canyon', 'captain', 'carpet', 'carrot', 'castle', 'cave', 'cellar', - 'chair', 'chalk', 'cheese', 'cherry', 'chest', 'chicken', 'chimney', - 'circus', 'cliff', 'clock', 'cloud', 'clover', 'coast', 'cobalt', 'cocoa', - 'coffee', 'coin', 'comet', 'compass', 'cookie', 'copper', 'coral', 'corner', - 'cotton', 'cradle', 'craft', 'creek', 'cricket', 'crown', 'crystal', 'cube', - 'cupboard', 'curtain', 'cushion', 'daisy', 'dance', 'date', 'dawn', 'deer', - 'desert', 'dew', 'diamond', 'dinner', 'dish', 'doctor', 'dolphin', - 'donut', 'door', 'dream', 'dress', 'drink', 'drum', 'duck', 'dusk', - 'eagle', 'earth', 'echo', 'emerald', 'engine', 'evening', 'face', 'fairy', - 'fall', 'family', 'fan', 'farm', 'feather', 'fence', 'ferry', 'field', - 'finger', 'fire', 'fish', 'flag', 'flame', 'flash', 'flavor', 'flight', - 'floor', 'flour', 'flower', 'flute', 'fog', 'foil', 'forest', 'fork', - 'fox', 'frame', 'friend', 'frog', 'frost', 'fruit', 'garden', 'garlic', - 'gate', 'gem', 'gift', 'ginger', 'giraffe', 'glacier', 'glass', - 'glitter', 'glove', 'glow', 'goat', 'gold', 'grape', 'grass', 'gravel', - 'gravity', 'guitar', 'gum', 'hair', 'hammer', 'hand', 'harbor', 'harp', - 'hat', 'hawk', 'heart', 'heath', 'heaven', 'helmet', 'herb', 'hill', - 'hippo', 'honey', 'hood', 'horn', 'horse', 'hotel', 'hour', 'house', - 'hunter', 'ice', 'icicle', 'idea', 'ink', 'insect', 'iron', 'island', - 'ivy', 'jacket', 'jade', 'jam', 'jasmine', 'jelly', 'jewel', - 'joke', 'journal', 'journey', 'joy', 'judge', 'jungle', 'kettle', 'key', - 'kid', 'kingdom', 'kitchen', 'kite', 'kitten', 'knight', - 'lab', 'ladder', 'lake', 'lamb', 'lamp', 'land', 'lantern', - 'laptop', 'laugh', 'lava', 'lawn', 'leaf', 'legend', 'lemon', 'letter', - 'library', 'light', 'lily', 'lime', 'lion', 'lip', 'lobby', 'lock', - 'locket', 'lodge', 'lotus', 'love', 'lunch', 'lyric', 'magic', 'magnet', - 'mango', 'maple', 'marble', 'market', 'mask', 'meadow', 'melody', 'melon', - 'memory', 'metal', 'meteor', 'milk', 'mint', 'mirror', 'mist', 'mitten', - 'moon', 'morning', 'moth', 'motor', 'mountain', 'mouse', - 'movie', 'muffin', 'museum', 'music', 'myth', 'napkin', 'nectar', 'needle', - 'nest', 'net', 'nickel', 'night', 'nose', 'note', 'novel', 'number', - 'nurse', 'nutmeg', 'oasis', 'ocean', 'olive', 'onion', 'opera', 'orange', - 'orbit', 'orchard', 'orchid', 'ostrich', 'otter', 'oven', 'owl', 'oxygen', - 'oyster', 'page', 'paint', 'palace', 'palm', 'pan', 'pancake', 'panda', - 'paper', 'parade', 'parcel', 'park', 'parrot', 'party', 'pasta', 'patch', - 'path', 'peach', 'peanut', 'pear', 'pearl', 'pebble', 'pencil', 'penny', - 'people', 'pepper', 'petal', 'phone', 'photo', 'piano', 'pickle', 'picture', - 'pie', 'pillow', 'pine', 'pink', 'pirate', 'pizza', 'planet', - 'plant', 'plum', 'pocket', 'poem', 'poet', 'point', 'pony', 'pool', - 'popcorn', 'porch', 'port', 'potato', 'powder', 'prairie', 'pretzel', 'prism', - 'prose', 'puppet', 'puppy', 'puzzle', 'quail', 'quartz', 'queen', 'quilt', - 'rabbit', 'raccoon', 'radio', 'raft', 'rain', 'rainbow', 'raisin', - 'ranch', 'rapids', 'raven', 'ray', 'record', 'reef', 'ribbon', 'rice', - 'ring', 'river', 'road', 'robin', 'robot', 'rock', 'rocket', 'rodeo', - 'roof', 'room', 'root', 'rope', 'rose', 'ruby', 'rug', 'ruler', 'sage', - 'sail', 'salad', 'salmon', 'salt', 'sand', 'sandal', 'sauce', 'saucer', - 'scale', 'scarf', 'school', 'sea', 'seed', 'shadow', 'shell', 'ship', - 'shirt', 'shoe', 'shop', 'shower', 'shrimp', 'side', 'sign', 'silk', - 'silver', 'singer', 'sink', 'sky', 'sled', 'sleet', 'sleigh', 'slice', - 'slide', 'slipper', 'slope', 'smoke', 'snail', 'snake', 'snow', 'soap', - 'sock', 'soda', 'sofa', 'soil', 'song', 'soup', 'spade', 'spark', 'sparrow', - 'spice', 'spider', 'spoon', 'spot', 'spring', 'sprout', 'square', 'squirrel', - 'stable', 'stage', 'stair', 'stamp', 'star', 'station', 'steam', 'steel', - 'stem', 'stick', 'stone', 'stork', 'storm', 'story', 'stove', 'straw', - 'stream', 'street', 'string', 'studio', 'sugar', 'summer', 'sun', 'sunset', - 'swan', 'sweater', 'sweets', 'sword', 'table', 'tablet', 'tail', 'talent', - 'tangerine', 'tank', 'tea', 'team', 'teapot', 'tear', 'temple', 'tennis', - 'tent', 'theater', 'thistle', 'thought', 'thread', 'thunder', - 'ticket', 'tide', 'tiger', 'tile', 'time', 'toast', 'toffee', 'tomato', - 'tooth', 'top', 'torch', 'tower', 'town', 'toy', 'track', - 'train', 'tree', 'triangle', 'trick', 'truck', 'trumpet', 'tulip', 'tunnel', - 'turkey', 'turtle', 'twig', 'uncle', 'unicorn', 'universe', 'vacuum', 'valley', - 'vanilla', 'vase', 'velvet', 'vessel', 'village', 'vine', 'violin', - 'voice', 'volcano', 'voyage', 'wagon', 'walnut', 'waltz', 'water', - 'wave', 'wax', 'weather', 'web', 'wedding', 'whale', 'wheat', - 'wheel', 'whistle', 'whisper', 'willow', 'wind', 'window', 'wine', 'wing', - 'winter', 'wire', 'wish', 'wizard', 'wood', 'wool', - 'word', 'world', 'wreath', 'wrist', 'writer', 'xylophone', 'yacht', - 'yard', 'yarn', 'year', 'yolk', 'zebra', 'zephyr', 'zinc', 'zipper', - 'zone', 'zoo' -]; \ No newline at end of file + "actor", + "almond", + "amber", + "anchor", + "angel", + "animal", + "answer", + "apple", + "autumn", + "avenue", + "badge", + "bagel", + "baker", + "ballet", + "bamboo", + "banana", + "basket", + "beach", + "beard", + "beauty", + "beetle", + "berry", + "bicycle", + "bird", + "blanket", + "blossom", + "boat", + "bottle", + "bowl", + "breeze", + "bubble", + "bucket", + "button", + "cabin", + "cactus", + "cafe", + "camera", + "candle", + "candy", + "canvas", + "canyon", + "captain", + "carpet", + "carrot", + "castle", + "cave", + "cellar", + "chair", + "chalk", + "cheese", + "cherry", + "chest", + "chicken", + "chimney", + "circus", + "cliff", + "clock", + "cloud", + "clover", + "coast", + "cobalt", + "cocoa", + "coffee", + "coin", + "comet", + "compass", + "cookie", + "copper", + "coral", + "corner", + "cotton", + "cradle", + "craft", + "creek", + "cricket", + "crown", + "crystal", + "cube", + "cupboard", + "curtain", + "cushion", + "daisy", + "dance", + "date", + "dawn", + "deer", + "desert", + "dew", + "diamond", + "dinner", + "dish", + "doctor", + "dolphin", + "donut", + "door", + "dream", + "dress", + "drink", + "drum", + "duck", + "dusk", + "eagle", + "earth", + "echo", + "emerald", + "engine", + "evening", + "face", + "fairy", + "fall", + "family", + "fan", + "farm", + "feather", + "fence", + "ferry", + "field", + "finger", + "fire", + "fish", + "flag", + "flame", + "flash", + "flavor", + "flight", + "floor", + "flour", + "flower", + "flute", + "fog", + "foil", + "forest", + "fork", + "fox", + "frame", + "friend", + "frog", + "frost", + "fruit", + "garden", + "garlic", + "gate", + "gem", + "gift", + "ginger", + "giraffe", + "glacier", + "glass", + "glitter", + "glove", + "glow", + "goat", + "gold", + "grape", + "grass", + "gravel", + "gravity", + "guitar", + "gum", + "hair", + "hammer", + "hand", + "harbor", + "harp", + "hat", + "hawk", + "heart", + "heath", + "heaven", + "helmet", + "herb", + "hill", + "hippo", + "honey", + "hood", + "horn", + "horse", + "hotel", + "hour", + "house", + "hunter", + "ice", + "icicle", + "idea", + "ink", + "insect", + "iron", + "island", + "ivy", + "jacket", + "jade", + "jam", + "jasmine", + "jelly", + "jewel", + "joke", + "journal", + "journey", + "joy", + "judge", + "jungle", + "kettle", + "key", + "kid", + "kingdom", + "kitchen", + "kite", + "kitten", + "knight", + "lab", + "ladder", + "lake", + "lamb", + "lamp", + "land", + "lantern", + "laptop", + "laugh", + "lava", + "lawn", + "leaf", + "legend", + "lemon", + "letter", + "library", + "light", + "lily", + "lime", + "lion", + "lip", + "lobby", + "lock", + "locket", + "lodge", + "lotus", + "love", + "lunch", + "lyric", + "magic", + "magnet", + "mango", + "maple", + "marble", + "market", + "mask", + "meadow", + "melody", + "melon", + "memory", + "metal", + "meteor", + "milk", + "mint", + "mirror", + "mist", + "mitten", + "moon", + "morning", + "moth", + "motor", + "mountain", + "mouse", + "movie", + "muffin", + "museum", + "music", + "myth", + "napkin", + "nectar", + "needle", + "nest", + "net", + "nickel", + "night", + "nose", + "note", + "novel", + "number", + "nurse", + "nutmeg", + "oasis", + "ocean", + "olive", + "onion", + "opera", + "orange", + "orbit", + "orchard", + "orchid", + "ostrich", + "otter", + "oven", + "owl", + "oxygen", + "oyster", + "page", + "paint", + "palace", + "palm", + "pan", + "pancake", + "panda", + "paper", + "parade", + "parcel", + "park", + "parrot", + "party", + "pasta", + "patch", + "path", + "peach", + "peanut", + "pear", + "pearl", + "pebble", + "pencil", + "penny", + "people", + "pepper", + "petal", + "phone", + "photo", + "piano", + "pickle", + "picture", + "pie", + "pillow", + "pine", + "pink", + "pirate", + "pizza", + "planet", + "plant", + "plum", + "pocket", + "poem", + "poet", + "point", + "pony", + "pool", + "popcorn", + "porch", + "port", + "potato", + "powder", + "prairie", + "pretzel", + "prism", + "prose", + "puppet", + "puppy", + "puzzle", + "quail", + "quartz", + "queen", + "quilt", + "rabbit", + "raccoon", + "radio", + "raft", + "rain", + "rainbow", + "raisin", + "ranch", + "rapids", + "raven", + "ray", + "record", + "reef", + "ribbon", + "rice", + "ring", + "river", + "road", + "robin", + "robot", + "rock", + "rocket", + "rodeo", + "roof", + "room", + "root", + "rope", + "rose", + "ruby", + "rug", + "ruler", + "sage", + "sail", + "salad", + "salmon", + "salt", + "sand", + "sandal", + "sauce", + "saucer", + "scale", + "scarf", + "school", + "sea", + "seed", + "shadow", + "shell", + "ship", + "shirt", + "shoe", + "shop", + "shower", + "shrimp", + "side", + "sign", + "silk", + "silver", + "singer", + "sink", + "sky", + "sled", + "sleet", + "sleigh", + "slice", + "slide", + "slipper", + "slope", + "smoke", + "snail", + "snake", + "snow", + "soap", + "sock", + "soda", + "sofa", + "soil", + "song", + "soup", + "spade", + "spark", + "sparrow", + "spice", + "spider", + "spoon", + "spot", + "spring", + "sprout", + "square", + "squirrel", + "stable", + "stage", + "stair", + "stamp", + "star", + "station", + "steam", + "steel", + "stem", + "stick", + "stone", + "stork", + "storm", + "story", + "stove", + "straw", + "stream", + "street", + "string", + "studio", + "sugar", + "summer", + "sun", + "sunset", + "swan", + "sweater", + "sweets", + "sword", + "table", + "tablet", + "tail", + "talent", + "tangerine", + "tank", + "tea", + "team", + "teapot", + "tear", + "temple", + "tennis", + "tent", + "theater", + "thistle", + "thought", + "thread", + "thunder", + "ticket", + "tide", + "tiger", + "tile", + "time", + "toast", + "toffee", + "tomato", + "tooth", + "top", + "torch", + "tower", + "town", + "toy", + "track", + "train", + "tree", + "triangle", + "trick", + "truck", + "trumpet", + "tulip", + "tunnel", + "turkey", + "turtle", + "twig", + "uncle", + "unicorn", + "universe", + "vacuum", + "valley", + "vanilla", + "vase", + "velvet", + "vessel", + "village", + "vine", + "violin", + "voice", + "volcano", + "voyage", + "wagon", + "walnut", + "waltz", + "water", + "wave", + "wax", + "weather", + "web", + "wedding", + "whale", + "wheat", + "wheel", + "whistle", + "whisper", + "willow", + "wind", + "window", + "wine", + "wing", + "winter", + "wire", + "wish", + "wizard", + "wood", + "wool", + "word", + "world", + "wreath", + "wrist", + "writer", + "xylophone", + "yacht", + "yard", + "yarn", + "year", + "yolk", + "zebra", + "zephyr", + "zinc", + "zipper", + "zone", + "zoo", +]; diff --git a/src/routes/admin.test.ts b/src/routes/admin.test.ts index 3befc9b..777723d 100644 --- a/src/routes/admin.test.ts +++ b/src/routes/admin.test.ts @@ -285,13 +285,16 @@ describe("Admin Routes", () => { )) as { feeds: Array<{ id: string; title: string }> } | null; const feedId = feedList?.feeds[0].id as string; - const deleteRes = await request(`/admin/feeds/${feedId}/delete?view=list`, { - method: "POST", - headers: { - Cookie: authCookie, - Accept: "application/json", + const deleteRes = await request( + `/admin/feeds/${feedId}/delete?view=list`, + { + method: "POST", + headers: { + Cookie: authCookie, + Accept: "application/json", + }, }, - }); + ); expect(deleteRes.status).toBe(200); const payload = await deleteRes.json(); @@ -334,8 +337,12 @@ describe("Admin Routes", () => { }); expect(bulkDeleteRes.status).toBe(302); - expect(bulkDeleteRes.headers.get("Location")).toContain("/admin?view=list"); - expect(bulkDeleteRes.headers.get("Location")).toContain("message=bulkDeleted"); + expect(bulkDeleteRes.headers.get("Location")).toContain( + "/admin?view=list", + ); + expect(bulkDeleteRes.headers.get("Location")).toContain( + "message=bulkDeleted", + ); const feedListAfter = (await mockEnv.EMAIL_STORAGE.get( "feeds:list", @@ -386,7 +393,9 @@ describe("Admin Routes", () => { const feedMetadata = (await mockEnv.EMAIL_STORAGE.get( feedMetadataKey, "json", - )) as { emails: Array<{ key: string; subject: string; receivedAt: number }> } | null; + )) as { + emails: Array<{ key: string; subject: string; receivedAt: number }>; + } | null; const updatedMetadata = { emails: [ ...(feedMetadata?.emails || []), @@ -398,13 +407,16 @@ describe("Admin Routes", () => { JSON.stringify(updatedMetadata), ); - const deleteRes = await request(`/admin/emails/${emailKey}/delete?feedId=${feedId}`, { - method: "POST", - headers: { - Cookie: authCookie, - Accept: "application/json", + const deleteRes = await request( + `/admin/emails/${emailKey}/delete?feedId=${feedId}`, + { + method: "POST", + headers: { + Cookie: authCookie, + Accept: "application/json", + }, }, - }); + ); expect(deleteRes.status).toBe(200); const payload = await deleteRes.json(); @@ -417,7 +429,9 @@ describe("Admin Routes", () => { const metadataAfter = (await mockEnv.EMAIL_STORAGE.get( feedMetadataKey, "json", - )) as { emails: Array<{ key: string; subject: string; receivedAt: number }> } | null; + )) as { + emails: Array<{ key: string; subject: string; receivedAt: number }>; + } | null; expect(metadataAfter?.emails.length).toBe(0); }); }); diff --git a/src/routes/admin.ts b/src/routes/admin.ts index 02bd7b1..b7f9428 100644 --- a/src/routes/admin.ts +++ b/src/routes/admin.ts @@ -285,7 +285,9 @@ app.get("/", async (c) => { layout( "Dashboard", html` -
No feeds were selected.