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});