A rewrite of Poly+, my quality-of-life browser extension for Polytoria. Built entirely fresh using the WXT extension framework, Typescript, and with added better overall code quality.
extension
1import { WxtStorageItem } from "wxt/storage"; 2 3export const defaultPreferences = { 4 favoritedPlaces: { enabled: true }, 5 bestFriends: { enabled: true }, 6 forumMentions: { enabled: true }, 7 improvedFriendLists: { enabled: true }, 8 irlBrickPrice: { enabled: true }, 9 hideNotificationBadges: { enabled: false }, 10 storeOwnedTags: { enabled: true }, 11 membershipThemes: { enabled: false, themeId: "plus" }, 12 tryItems: { enabled: true }, 13 outfitCost: { enabled: true }, 14 placeRevenue: { enabled: true }, 15 accurateOwners: { enabled: true }, 16 placeManagement: { 17 enabled: true, 18 activityToggle: true, 19 download: true, 20 multipleWhitelist: true, 21 clearWhitelist: true 22 } 23} 24 25export type preferencesSchema = typeof defaultPreferences & { 26 [key: string]: any; 27}; 28 29// Sync 30interface PreferencesStorageItem extends WxtStorageItem<typeof defaultPreferences, {}> { 31 /** 32 * Wrapper for the standard `.getValue()` method that merges the user's saved preferences with the default preferences to make sure there are no unexpected errors. 33 */ 34 getPreferences: () => Promise<typeof defaultPreferences>; 35} 36 37export const preferences: PreferencesStorageItem = storage.defineItem('sync:preferences', { fallback: defaultPreferences, version: 1 }) as PreferencesStorageItem; 38export const _favoritedPlaces = storage.defineItem('sync:favoritedPlaces', { fallback: ["9656"], version: 1 }); 39export const _bestFriends = storage.defineItem('sync:bestFriends', { fallback: ["2782"], version: 1 }); 40 41preferences.getPreferences = async function() { 42 const userPreferences = await this.getValue(); 43 return { ...defaultPreferences, ...userPreferences }; 44}; 45 46// Cache 47export const cache = storage.defineItem('local:cache', { 48 fallback: { 49 favoritedPlaces: [], 50 bestFriends: [], 51 inventory: [], 52 userIDs: {}, 53 avatars: {}, 54 items: {}, 55 placeRevenue: {}, 56 ownerCount: {} 57 }, 58 version: 1 59});