-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbackground.js
More file actions
1 lines (1 loc) · 8.74 KB
/
Copy pathbackground.js
File metadata and controls
1 lines (1 loc) · 8.74 KB
1
async function syncUserProfile(){const e=await chrome.storage.sync.get(["userId","isPremium"]);if(!e.userId)return;const t="sync_profile_last_run";try{const s=(await chrome.storage.local.get(t))[t]||0;if(Date.now()-s<864e5)return;const a=chrome.runtime.getManifest();(await fetch("https://easyview.in/api/sync-profile",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({userId:e.userId,version:a.version,browserInfo:navigator.userAgent})})).ok&&await chrome.storage.local.set({[t]:Date.now()})}catch(e){}}async function logFeatureUsage(e,t,s){const a=await chrome.storage.sync.get("userId");if(!a.userId)return;if(!s||"unknown"===s||s.includes("newtab"))return;const r=`log_cache_${e}_${s||"global"}`;try{const i=(await chrome.storage.local.get(r))[r]||0,n=Date.now();if(n-i<864e5)return;await chrome.storage.local.set({[r]:n}),await fetch("https://easyview.in/api/log-usage",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({userId:a.userId,featureName:e,action:t,urlDomain:s})})}catch(e){}}"undefined"!=typeof importScripts&&(importScripts("js/constants/tier-schema.js"),importScripts("gemini-service.js")),chrome.runtime.onInstalled.addListener(syncUserProfile),chrome.runtime.onStartup.addListener(syncUserProfile),chrome.tabs.onUpdated.addListener((e,t,s)=>{"complete"===t.status&&(chrome.storage.sync.set({jargonEnabled:!1}),chrome.storage.sync.get(["lastVisualSettings","enableVisuals"],t=>{t&&!0===t.enableVisuals&&t.lastVisualSettings&&chrome.tabs.sendMessage(e,{type:"APPLY_VISUALS",settings:t.lastVisualSettings})}),checkLocalPremiumExpiry())}),chrome.runtime.onMessage.addListener((e,t,s)=>{if("APPLY_VISUALS"===e.type&&void 0!==e.settings)return chrome.storage.sync.set({lastVisualSettings:e.settings}),s&&s({success:!0}),!0;if("GET_VISUALS"===e.type)return chrome.storage.sync.get(["lastVisualSettings","enableVisuals"],e=>{s&&s({settings:e.lastVisualSettings||{},enableVisuals:"boolean"==typeof e.enableVisuals&&e.enableVisuals})}),!0;if("LOG_USAGE"===e.type){const a=e.domain||(t.tab?new URL(t.tab.url).hostname:"unknown");return logFeatureUsage(e.feature,e.action,a),s&&s({success:!0}),!0}if("SET_PREMIUM"===e.type){const t=e.expiresAt||new Date(Date.now()+31536e6).toISOString();return chrome.storage.sync.set({isPremium:e.isPremium,premiumExpiresAt:t,userEmail:e.email||e.userEmail||null},()=>{broadcastPremiumUpdate(e.isPremium,t),s&&s({success:!0})}),!0}if("SET_USER_PROFILE"===e.type){const t={userId:e.userId,userEmail:e.email};return void 0!==e.isPremium&&(t.isPremium=e.isPremium),chrome.storage.sync.set(t,()=>{!1===e.isPremium&&scrubPremiumSettings(),checkCloudPremiumStatus(e.userId),s&&s({success:!0})}),!0}return!!["testApiKey","detectJargon","simplifyText"].includes(e.action)&&(handleMessage(e,t).then(s),!0)});let lastCloudCheck=0;const CLOUD_CHECK_COOLDOWN=3e5;let expiryTimer=null;async function checkCloudPremiumStatus(e){const t=Date.now(),s=await chrome.storage.sync.get(["userId"]),a=!e||e===s.userId;if(t-lastCloudCheck<CLOUD_CHECK_COOLDOWN&&a)return;const r=e||s.userId;if(r)try{const e=await fetch(`https://easyview.in/api/user-status?userId=${r}`);if(!e.ok)throw new Error("Network response was not ok");const t=await e.json();if(void 0!==t.isPremium){const{isPremium:e}=await chrome.storage.sync.get("isPremium");if(await chrome.storage.sync.set({isPremium:t.isPremium,premiumExpiresAt:t.expiresAt,licenseToken:t.licenseToken}),t.quota&&await chrome.storage.local.set({jargonQuota:t.quota}),t.isPremium&&t.expiresAt){const e=new Date(t.expiresAt).getTime();e>Date.now()?chrome.alarms.create("premium_killswitch",{when:e}):handleDowngrade()}t.trialActivated&&chrome.notifications.create("easyview-trial-activated",{type:"basic",iconUrl:"icons/icon128.png",title:"EasyView Pro Trial!",message:"Welcome! You have been granted 1 day of Pro features for free. Enjoy unlimited clarity!",priority:2}),e!==t.isPremium&&(broadcastPremiumUpdate(t.isPremium,t.expiresAt),t.isPremium||handleDowngrade())}}catch(e){}finally{lastCloudCheck=Date.now()}}async function handleDowngrade(){await chrome.storage.sync.set({isPremium:!1,licenseToken:null}),scrubPremiumSettings(),broadcastPremiumUpdate(!1,null),chrome.notifications.create("easyview-expired",{type:"basic",iconUrl:"icons/icon128.png",title:"EasyView Subscription",message:"Your Premium subscription has expired. Pro features have been reverted to default.",priority:2})}function broadcastPremiumUpdate(e,t){const s={type:"PREMIUM_UPDATED",isPremium:e,premiumExpiresAt:t};chrome.tabs.query({},e=>e.forEach(e=>chrome.tabs.sendMessage(e.id,s).catch(()=>{}))),chrome.runtime.sendMessage(s).catch(()=>{})}async function checkLocalPremiumExpiry(){const e=await chrome.storage.sync.get(["isPremium","premiumExpiresAt"]);e.isPremium&&e.premiumExpiresAt&&new Date(e.premiumExpiresAt).getTime()<Date.now()&&handleDowngrade()}async function scrubPremiumSettings(){const e=(globalThis.EASYVIEW_TIERS||{PREMIUM:{fonts:[],beamShapes:[],sensoryModes:[]}}).PREMIUM;chrome.storage.sync.get(["visualAdjustments","sensoryMode","lastVisualSettings","dyslexiaFont","exportSettings"],t=>{let s={};if(t.visualAdjustments){let a=!1,r={...t.visualAdjustments};e.fonts&&e.fonts.includes(r.font)&&(r.font="default",a=!0),e.beamShapes&&e.beamShapes.includes(r.beamShape)&&(r.beamShape="circle",a=!0),a&&(s.visualAdjustments=r)}if(t.lastVisualSettings){let a=!1,r={...t.lastVisualSettings};e.fonts&&e.fonts.includes(r.font)&&(r.font="default",a=!0),e.beamShapes&&e.beamShapes.includes(r.beamShape)&&(r.beamShape="circle",a=!0),a&&(s.lastVisualSettings=r)}if(e.fonts&&e.fonts.includes(t.dyslexiaFont)&&(s.dyslexiaFont="opendyslexic"),e.sensoryModes&&e.sensoryModes.includes(t.sensoryMode)&&(s.sensoryMode="freeze"),t.exportSettings){let a=!1,r={...t.exportSettings};e.fonts&&e.fonts.includes(r.font)&&(r.font="inherit",a=!0),a&&(s.exportSettings=r)}Object.keys(s).length>0&&chrome.storage.sync.set(s)}),chrome.storage.local.get(["privacy_config","wa_styler_enabled"],t=>{let s={};if(t.privacy_config){let a=!1,r={...t.privacy_config};e.beamShapes&&e.beamShapes.includes(r.beamShape)&&(r.beamShape="circle",a=!0),a&&(s.privacy_config=r)}Object.keys(s).length>0&&(chrome.storage.local.set(s),chrome.tabs.query({},e=>{e.forEach(e=>{e.id&&chrome.tabs.sendMessage(e.id,{type:"TOGGLE_STYLE",enabled:!!t.wa_styler_enabled,config:s.privacy_config}).catch(()=>{})})}))})}async function handleMessage(e,t){switch(e.action){case"testApiKey":return await testApiKeyHandler(e.apiKey,e.provider);case"detectJargon":return await detectJargonHandler(e.pageText,e.apiKey,e.abortSignal);case"simplifyText":return await simplifyTextHandler(e.text,e.apiKey,e.abortSignal,t);default:return{success:!1,error:"Unknown action"}}}async function testApiKeyHandler(e,t){try{return await testApiKey(e,t)}catch(e){return{success:!1,error:e.message}}}async function detectJargonHandler(e,t,s){try{if(s)return{success:!1,error:"Request aborted",aborted:!0};const a=await detectJargon(e,t);return a&&a.quota&&(chrome.storage.local.set({jargonQuota:a.quota}),chrome.runtime.sendMessage({type:"QUOTA_UPDATED",quota:a.quota}).catch(()=>{})),{success:!0,data:a.data||a}}catch(e){return"AbortError"===e.name?{success:!1,error:"Request aborted",aborted:!0}:{success:!1,error:e.message}}}async function simplifyTextHandler(e,t,s,a){try{if(logFeatureUsage("simplify_text","requested",a&&a.tab?new URL(a.tab.url).hostname:"unknown"),s)return{success:!1,error:"Request aborted",aborted:!0};const r=await simplifyText(e,t);return r&&r.quota&&(chrome.storage.local.set({jargonQuota:r.quota}),chrome.runtime.sendMessage({type:"QUOTA_UPDATED",quota:r.quota}).catch(()=>{})),{success:!0,data:r.data||r}}catch(e){return"AbortError"===e.name?{success:!1,error:"Request aborted",aborted:!0}:{success:!1,error:e.message}}}chrome.alarms.create("checkPremium",{periodInMinutes:60}),chrome.alarms.onAlarm.addListener(e=>{"checkPremium"===e.name&&(checkLocalPremiumExpiry(),checkCloudPremiumStatus()),"premium_killswitch"===e.name&&handleDowngrade()}),checkLocalPremiumExpiry(),checkCloudPremiumStatus(),chrome.runtime.onInstalled.addListener(e=>{"install"===e.reason&&(chrome.storage.sync.set({jargonEnabled:!1,sensoryEnabled:!1,dyslexiaEnabled:!1,dyslexiaFont:"opendyslexic",letterSpacing:0,lineHeight:1.5,wordSpacing:0,overlayColor:"none",bionicReading:!1,ttsEnabled:!1,ttsSpeed:1,ttsPauseOnPunctuation:!0,ttsWordHighlight:!0,apiProvider:"gemini",enableVisuals:!1,lastVisualSettings:{}}),chrome.tabs.create({url:"https://easyview.in/#installation"})),"update"===e.reason&&chrome.storage.local.get(["apiKey","geminiKey"],e=>{chrome.storage.sync.get(["apiProvider"],t=>{const s=!!e.apiKey;e.geminiKey;s||chrome.storage.sync.set({apiProvider:"gemini"})})})}),chrome.storage.onChanged.addListener((e,t)=>{"sync"===t&&e.isPremium&&!0===e.isPremium.oldValue&&!1===e.isPremium.newValue&&handleDowngrade(),"local"===t&&e.savedVocabulary&&logFeatureUsage("notebook_usage","activity","global")});