experiments in a post-browser web
10
fork

Configure Feed

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

fix(peeks,scripts): use per-key settings storage matching schema

The peeks and scripts feature backgrounds called api.settings.get/set('data')
to load a single combined object, but the actual datastore writes — and the
features' settings-schema.json files — use separate top-level keys per field
('prefs'+'items' for peeks, 'scripts' for scripts).

Result: loadSettings() always missed the user's saved data and fell back to
defaults. For peeks specifically this meant only the default Option+0 shortcut
was registered, ignoring the user's configured shortcuts in the prod profile.

Refactor loadSettings/saveSettings in both features to read/write the per-key
shape that matches the schema.

+31 -18
+23 -11
features/peeks/background.js
··· 25 25 26 26 /** 27 27 * Load settings from datastore 28 + * 29 + * Storage uses two separate keys per the settings-schema.json: 30 + * - 'prefs' → { shortcutKeyPrefix } 31 + * - 'items' → array of peek configs 32 + * 28 33 * @returns {Promise<{prefs: object, items: array}>} 29 34 */ 30 35 const loadSettings = async () => { 31 - const result = await api.settings.get('data'); 32 - if (result.success && result.data) { 33 - return { 34 - prefs: result.data.prefs || defaults.prefs, 35 - items: result.data.items || defaults.items 36 - }; 37 - } 38 - return { prefs: defaults.prefs, items: defaults.items }; 36 + const prefsResult = await api.settings.get('prefs'); 37 + const itemsResult = await api.settings.get('items'); 38 + 39 + const prefs = (prefsResult.success && prefsResult.data) 40 + ? prefsResult.data 41 + : defaults.prefs; 42 + const items = (itemsResult.success && itemsResult.data) 43 + ? itemsResult.data 44 + : defaults.items; 45 + 46 + return { prefs, items }; 39 47 }; 40 48 41 49 /** ··· 43 51 * @param {object} settings - Settings object with prefs and items 44 52 */ 45 53 const saveSettings = async (settings) => { 46 - const result = await api.settings.set('data', settings); 47 - if (!result.success) { 48 - console.error('[ext:peeks] Failed to save settings:', result.error); 54 + const prefsResult = await api.settings.set('prefs', settings.prefs); 55 + if (!prefsResult.success) { 56 + console.error('[ext:peeks] Failed to save prefs:', prefsResult.error); 57 + } 58 + const itemsResult = await api.settings.set('items', settings.items); 59 + if (!itemsResult.success) { 60 + console.error('[ext:peeks] Failed to save items:', itemsResult.error); 49 61 } 50 62 }; 51 63
+8 -7
features/scripts/background.js
··· 61 61 62 62 /** 63 63 * Load scripts from datastore 64 + * 65 + * Storage uses the top-level 'scripts' key per settings-schema.json, 66 + * holding the scripts array directly. 64 67 */ 65 68 const loadSettings = async () => { 66 - const result = await api.settings.get('data'); 67 - if (result.success && result.data) { 68 - return { 69 - scripts: result.data.scripts || defaults.scripts 70 - }; 69 + const result = await api.settings.get('scripts'); 70 + if (result.success && Array.isArray(result.data)) { 71 + return { scripts: result.data }; 71 72 } 72 - return defaults; 73 + return { scripts: defaults.scripts }; 73 74 }; 74 75 75 76 /** 76 77 * Save scripts to datastore 77 78 */ 78 79 const saveSettings = async (settings) => { 79 - const result = await api.settings.set('data', settings); 80 + const result = await api.settings.set('scripts', settings.scripts); 80 81 if (!result.success) { 81 82 console.error('[ext:scripts] Failed to save settings:', result.error); 82 83 }