UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

1 lines • 2.95 kB
import{n as e}from"./rolldown-runtime-8BhlS34s.js";import{Oa as t,ka as n}from"./control-ui-foundation-ZY_Flbbd.js";function r(e,t){t===void 0?console.debug(`[chat-snapshot-cache] ${e}`):console.debug(`[chat-snapshot-cache] ${e}`,t)}function i(){try{return globalThis.indexedDB??null}catch(e){return r(`IndexedDB is unavailable`,e),null}}function a(e){return new Promise((t,r)=>{let i=e.open(d,m);i.addEventListener(`upgradeneeded`,e=>{let t=i.result;if(e.oldVersion<2){for(let e of Array.from(t.objectStoreNames))t.deleteObjectStore(e);t.createObjectStore(f,{keyPath:`sessionKey`}),t.createObjectStore(p,{keyPath:`sessionKey`});return}for(let e of Array.from(t.objectStoreNames)){let t=i.transaction.objectStore(e),r=t.openKeyCursor();r.addEventListener(`success`,()=>{let e=r.result;e&&(typeof e.primaryKey==`string`&&n(e.primaryKey)&&t.delete(e.primaryKey),e.continue())})}}),i.addEventListener(`success`,()=>t(i.result)),i.addEventListener(`error`,()=>r(i.error??Error(`IndexedDB open failed`))),i.addEventListener(`blocked`,()=>r(Error(`IndexedDB open was blocked`)))})}function o(e){return new Promise(t=>{try{let n=e.deleteDatabase(d);n.addEventListener(`success`,()=>t(!0)),n.addEventListener(`error`,()=>t(!1)),n.addEventListener(`blocked`,()=>t(!1))}catch{t(!1)}})}async function s(){let e=i();if(!e)return null;let t;try{t=await a(e)}catch(n){if(r(`resetting cache after IndexedDB open failure`,n),!await o(e))return null;try{t=await a(e)}catch(e){return r(`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(),r(`resetting cache after IndexedDB schema mismatch`),!await o(e))return null;try{let t=await a(e);return t.addEventListener(`versionchange`,()=>t.close()),t}catch(e){return r(`IndexedDB cache reset failed`,e),null}}async function c(e){let t=await s();if(t)try{return n(e)?void 0:await new Promise((n,r)=>{let i=t.transaction(f,`readonly`),a=i.objectStore(f).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`)))})}catch(e){r(`resetting cache after IndexedDB read failure`,e),await l(t);return}finally{t.close()}}async function l(e){e?.close();let t=i();t&&!await o(t)&&r(`IndexedDB cache reset was blocked`)}async function u(e){let t=await s();if(t)try{await new Promise(n=>{let r=t.transaction([f,p],`readwrite`);r.addEventListener(`complete`,()=>n()),r.addEventListener(`error`,()=>n()),r.addEventListener(`abort`,()=>n()),r.objectStore(f).delete(e),r.objectStore(p).delete(e)})}catch{}finally{t.close()}}var d,f,p,m;function h(){return(h=e((()=>{t(),d=`openclaw-chat-snapshots`,f=`snapshots`,p=`snapshotMetadata`,m=3})))()}export{h as a,l as c,u as i,p as n,s as o,f as r,c as s,d as t};