// browser.storage.local wrapper with defaults var Store = (() => { const DEFAULT_SETTINGS = { kimaiUrl: '', authMode: 'bearer', // bearer (Kimai >= 2.x API token) | legacy (X-AUTH-USER / X-AUTH-TOKEN) kimaiUser: '', kimaiToken: '', defaultProject: null, defaultActivity: null, defaultProjectLabel: '', defaultActivityLabel: '', defaultDescription: '', tags: 'abacus-sync', dayStart: '08:00', skipIfRulePresent: true, parse: { rowSelector: 'tr, [role="row"]', timeMode: 'auto', durationIndex: 0, sameDateRows: 'sum', year: '', }, }; async function get() { const s = await browser.storage.local.get(['settings', 'rules', 'daysText', 'extractInfo', 'catalog']); return { settings: { ...DEFAULT_SETTINGS, ...(s.settings || {}), parse: { ...DEFAULT_SETTINGS.parse, ...(s.settings?.parse || {}) } }, rules: s.rules || [], daysText: s.daysText || '', extractInfo: s.extractInfo || null, catalog: s.catalog || { projects: [], activities: [], fetchedAt: null }, }; } const set = (obj) => browser.storage.local.set(obj); return { get, set, DEFAULT_SETTINGS }; })();