74 lines
1.9 KiB
TypeScript
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()
|
|
}
|