story-research-zapwall/lib/onboardingPreferences.ts
2026-01-15 12:12:05 +01:00

74 lines
1.9 KiB
TypeScript

import { createIndexedDBHelper, type IndexedDBHelper } from './helpers/indexedDBHelper'
const DB_NAME = 'nostr_paywall_settings'
const DB_VERSION = 3
const STORE_NAME = 'onboarding_preferences'
export interface OnboardingPreferencesItem {
key: 'completed'
value: boolean
timestamp: number
}
const COMPLETED_KEY = 'completed'
class OnboardingPreferencesService {
private readonly dbHelper: IndexedDBHelper
constructor() {
this.dbHelper = createIndexedDBHelper({
dbName: DB_NAME,
version: DB_VERSION,
storeName: STORE_NAME,
keyPath: 'key',
indexes: [{ name: 'timestamp', keyPath: 'timestamp', unique: false }],
})
}
async isCompleted(): Promise<boolean> {
try {
const result = await this.dbHelper.get<OnboardingPreferencesItem>(COMPLETED_KEY)
return result?.value ?? false
} catch (error) {
console.error('Error loading onboarding preferences:', error)
return false
}
}
async markCompleted(): Promise<void> {
try {
await this.dbHelper.put({
key: COMPLETED_KEY,
value: true,
timestamp: Date.now(),
})
} catch (error) {
console.error('Error saving onboarding preferences:', error)
throw error
}
}
async clear(): Promise<void> {
try {
await this.dbHelper.delete(COMPLETED_KEY)
} catch (error) {
console.error('Error clearing onboarding preferences:', error)
throw error
}
}
}
const onboardingPreferencesService = new OnboardingPreferencesService()
export async function isOnboardingCompleted(): Promise<boolean> {
return onboardingPreferencesService.isCompleted()
}
export async function markOnboardingCompleted(): Promise<void> {
return onboardingPreferencesService.markCompleted()
}
export async function clearOnboardingPreferences(): Promise<void> {
return onboardingPreferencesService.clear()
}