import { StandardResponse } from '@jolibox/types'; import { getGlobalStorage, setGlobalStorage } from '../api/storage'; import { filterTodayTimestamps } from './utils'; const parseFrequency = (data: string) => { let fequeycies; try { fequeycies = JSON.parse(data); } catch (e) { fequeycies = []; } return fequeycies; }; // common get frequency function createFrequencyChecker(storageKey: string) { return async (config: { dailyMaxPopUps?: number; minInterval?: number }) => { const { dailyMaxPopUps, minInterval } = config; const res = (await getGlobalStorage(storageKey)) as StandardResponse; if (!res.data) { return { canShow: true, isFirst: true }; } const frequencies = parseFrequency(res.data); const todayFrequencies = filterTodayTimestamps(frequencies); if (dailyMaxPopUps && todayFrequencies.length >= dailyMaxPopUps) { return { canShow: false, isFirst: false }; } const now = Date.now(); console.log('todayFrequencies', todayFrequencies, minInterval, now - todayFrequencies[0]); if (minInterval && now - (todayFrequencies?.[0] ?? 0) < minInterval) { return { canShow: false, isFirst: false }; } return { canShow: true, isFirst: false }; }; } export const checkUseModalFrequency = createFrequencyChecker('joli_coin_use_modal_frequency'); export const checkPaymentFrequency = createFrequencyChecker('joli_coin_payment_frequency'); export const checkUnloginModalFrequency = createFrequencyChecker('joli_coin_unlogin_modal_frequency'); // gem frequency export const checkUseModalFrequencyGem = createFrequencyChecker('joli_gem_use_modal_frequency'); export const checkPaymentFrequencyGem = createFrequencyChecker('joli_gem_payment_frequency'); export const checkUnloginModalFrequencyGem = createFrequencyChecker('joli_gem_unlogin_modal_frequency'); // subscription frequency export const checkSubscriptionFrequency = createFrequencyChecker('subscription_frequency'); // common update frequency function createFrequencyUpdater(storageKey: string) { return async () => { const now = Date.now(); const res = (await getGlobalStorage(storageKey)) as StandardResponse; const frequencies: number[] = parseFrequency(res.data ?? '[]'); frequencies.push(now); frequencies.sort((a, b) => b - a).splice(8); await setGlobalStorage(storageKey, JSON.stringify(frequencies)); }; } export const updateUseModalFrequency = createFrequencyUpdater('joli_coin_use_modal_frequency'); export const updatePaymentFrequency = createFrequencyUpdater('joli_coin_payment_frequency'); export const updateUnloginModalFrequency = createFrequencyUpdater('joli_coin_unlogin_modal_frequency'); // gem frequency export const updateUseModalFrequencyGem = createFrequencyUpdater('joli_gem_use_modal_frequency'); export const updatePaymentFrequencyGem = createFrequencyUpdater('joli_gem_payment_frequency'); export const updateUnloginModalFrequencyGem = createFrequencyUpdater('joli_gem_unlogin_modal_frequency'); // subscription frequency export const updateSubscriptionFrequency = createFrequencyUpdater('subscription_frequency');