openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
1 lines • 3.24 kB
JavaScript
import{n as e,r as t}from"./rolldown-runtime-8BhlS34s.js";import{Qa as n,Za as r}from"./ui-DuRgK6kL.js";var i=t({readStoredChatSnapshotRecord:()=>d});function a(e){return e.startsWith(`scope:[`)&&!n(e.slice(e.indexOf(`\0`)+1))}function o(e,t){t===void 0?console.debug(`[chat-snapshot-cache] ${e}`):console.debug(`[chat-snapshot-cache] ${e}`,t)}function s(){try{return globalThis.indexedDB??null}catch(e){return o(`IndexedDB is unavailable`,e),null}}function c(e){return new Promise((t,n)=>{let r=e.open(h,v);r.addEventListener(`upgradeneeded`,e=>{let t=r.result;if(e.oldVersion<4){for(let e of Array.from(t.objectStoreNames))t.deleteObjectStore(e);t.createObjectStore(g,{keyPath:`sessionKey`}),t.createObjectStore(_,{keyPath:`sessionKey`})}}),r.addEventListener(`success`,()=>t(r.result)),r.addEventListener(`error`,()=>n(r.error??Error(`IndexedDB open failed`))),r.addEventListener(`blocked`,()=>n(Error(`IndexedDB open was blocked`)))})}function l(e){return new Promise(t=>{try{let n=e.deleteDatabase(h);n.addEventListener(`success`,()=>t(!0)),n.addEventListener(`error`,()=>t(!1)),n.addEventListener(`blocked`,()=>t(!1))}catch{t(!1)}})}async function u(){let e=s();if(!e)return null;let t;try{t=await c(e)}catch(n){if(o(`resetting cache after IndexedDB open failure`,n),!await l(e))return null;try{t=await c(e)}catch(e){return o(`IndexedDB cache remains unavailable`,e),null}}if(t.addEventListener(`versionchange`,()=>t.close()),t.objectStoreNames.length===2&&t.objectStoreNames.contains(`snapshots`)&&t.objectStoreNames.contains(`snapshotMetadata`))return t;if(t.close(),o(`resetting cache after IndexedDB schema mismatch`),!await l(e))return null;try{let t=await c(e);return t.addEventListener(`versionchange`,()=>t.close()),t}catch(e){return o(`IndexedDB cache reset failed`,e),null}}async function d(e){let t=await u();if(t)try{return a(e)?await new Promise((n,r)=>{let i=t.transaction(g,`readonly`),a=i.objectStore(g).get(e);i.addEventListener(`complete`,()=>n(a.result)),i.addEventListener(`error`,()=>r(i.error??Error(`IndexedDB read failed`))),i.addEventListener(`abort`,()=>r(i.error??Error(`IndexedDB read aborted`)))}):void 0}catch(e){o(`resetting cache after IndexedDB read failure`,e),await f(t);return}finally{t.close()}}async function f(e){e?.close();let t=s();t&&!await l(t)&&o(`IndexedDB cache reset was blocked`)}async function p(e){let t=await u();if(t)try{await new Promise(n=>{let r=t.transaction([g,_],`readwrite`);r.addEventListener(`complete`,()=>n()),r.addEventListener(`error`,()=>n()),r.addEventListener(`abort`,()=>n()),r.objectStore(g).delete(e),r.objectStore(_).delete(e)})}catch{}finally{t.close()}}async function m(e){let t=await u();if(t)try{await new Promise(n=>{let r=t.transaction([g,_],`readwrite`);for(let e of[`complete`,`error`,`abort`])r.addEventListener(e,()=>n(),{once:!0});for(let t of[g,_]){let n=r.objectStore(t),i=n.openKeyCursor();i.onsuccess=()=>{let t=i.result;t&&(typeof t.primaryKey==`string`&&t.primaryKey.startsWith(e)&&n.delete(t.primaryKey),t.continue())}}})}finally{t.close()}}var h,g,_,v;function y(){return(y=e((()=>{r(),h=`openclaw-chat-snapshots`,g=`snapshots`,_=`snapshotMetadata`,v=4})))()}export{m as a,u as c,i as d,p as i,d as l,g as n,y as o,o as r,a as s,_ as t,f as u};