mirror of
https://github.com/ZeroCatDev/Classworks.git
synced 2025-12-08 13:49:37 +00:00
2 lines
4.6 KiB
JavaScript
2 lines
4.6 KiB
JavaScript
import{o as S,a as g}from"./axios-B3_D0VIk.js";import{k as l,s as O}from"./index-BGO49u23.js";const h="ClassworksDB",E=2,N=async()=>S(h,E,{upgrade(e){e.objectStoreNames.contains("kv")||e.createObjectStore("kv"),e.objectStoreNames.contains("system")||e.createObjectStore("system")}}),k={async loadData(e){try{const s=await(await N()).get("kv",e);return s?f(JSON.parse(s)):c("数据不存在","NOT_FOUND")}catch(r){return c("读取本地数据失败:"+r)}},async saveData(e,r){try{return await(await N()).put("kv",JSON.stringify(r),e),f(!0)}catch(s){return c("保存本地数据失败:"+s)}},async loadKeys(e={}){try{const t=await(await N()).transaction(["kv"],"readonly").objectStore("kv").getAllKeys(),{sortDir:i="asc",limit:n=100,skip:d=0}=e,p=t.sort((o,u)=>i==="desc"?u.localeCompare(o):o.localeCompare(u)),m=p.length,v=p.slice(d,d+n),y={keys:v,total_rows:m,current_page:{limit:n,skip:d,count:v.length},load_more:null};return f(y)}catch(r){return c("获取本地键名列表失败:"+r.message)}}},D=()=>{const e={Accept:"application/json"},r=l("server.kvToken"),s=l("server.siteKey");return r?e["x-app-token"]=r:s&&(e["x-site-key"]=s),e},R={async loadNamespaceInfo(){var e,r;try{const s=l("server.domain"),a=await g.get(`${s}/kv/_info`,{headers:D()});return f(a.data)}catch(s){return console.error("获取命名空间信息失败:",s),c(((r=(e=s.response)==null?void 0:e.data)==null?void 0:r.message)||"获取命名空间信息失败","NAMESPACE_ERROR")}},async updateNamespaceInfo(e){var r,s;try{const a=l("server.domain");return await g.put(`${a}/kv/_info`,e,{headers:D()})}catch(a){return c(((s=(r=a.response)==null?void 0:r.data)==null?void 0:s.message)||"更新命名空间信息失败","NAMESPACE_ERROR")}},async loadData(e){var r,s,a;try{const t=l("server.domain"),i=await g.get(`${t}/kv/${e}`,{headers:D()});return f(i.data)}catch(t){return((r=t.response)==null?void 0:r.status)===404?c("数据不存在","NOT_FOUND"):(console.log(t),c(((a=(s=t.response)==null?void 0:s.data)==null?void 0:a.message)||"服务器连接失败","NETWORK_ERROR"))}},async saveData(e,r){var s,a;try{const t=l("server.domain");return await g.post(`${t}/kv/${e}`,r,{headers:D()}),f(!0)}catch(t){return console.log(t),c(((a=(s=t.response)==null?void 0:s.data)==null?void 0:a.message)||"保存失败","SAVE_ERROR")}},async loadKeys(e={}){var r,s,a,t,i;try{const n=l("server.domain"),{sortBy:d="key",sortDir:p="asc",limit:m=100,skip:v=0}=e,y=new URLSearchParams({sortBy:d,sortDir:p,limit:m.toString(),skip:v.toString()}),o=await g.get(`${n}/kv/_keys?${y}`,{headers:D()});return f(o.data)}catch(n){return((r=n.response)==null?void 0:r.status)===404?c("命名空间不存在","NOT_FOUND"):((s=n.response)==null?void 0:s.status)===403?c("无权限访问此命名空间","PERMISSION_DENIED"):((a=n.response)==null?void 0:a.status)===401?c("认证失败","UNAUTHORIZED"):(console.log(n),c(((i=(t=n.response)==null?void 0:t.data)==null?void 0:i.message)||"获取键名列表失败","NETWORK_ERROR"))}}},f=e=>e,c=(e,r="UNKNOWN_ERROR")=>({success:!1,error:{code:r,message:e}}),U={loadData:async e=>{const r=l("server.provider");return r==="kv-server"||r==="classworkscloud"?R.loadData(e):k.loadData(e)},saveData:async(e,r)=>{const s=l("server.provider");return s==="kv-server"||s==="classworkscloud"?R.saveData(e,r):k.saveData(e,r)},loadKeys:async(e={})=>{const r=l("server.provider");return r==="kv-server"||r==="classworkscloud"?R.loadKeys(e):k.loadKeys(e)},async getKeyCloudUrl(e,r={}){var t;const{migrateFromLocal:s=!0,autoConfigureCloud:a=!0}=r;try{let i=l("server.domain"),n=l("server.siteKey");const d=l("device.uuid");let p=!1;if(!i||!d)if(a){const o={"server.domain":"https://kv.wuyuan.dev","server.siteKey":""};i||(O("server.domain",o["server.domain"]),i=o["server.domain"],p=!0),n||(O("server.siteKey",o["server.siteKey"]),n=o["server.siteKey"]),O("server.provider","classworkscloud")}else return c("云端配置无效,请检查服务器域名和设备UUID","CONFIG_ERROR");let m=!1;if(s)try{const o=await k.loadData(e);if(o&&o.success!==!1){const u=await R.loadData(e);if(u&&u.success===!1&&((t=u.error)==null?void 0:t.code)==="NOT_FOUND"){const w=await R.saveData(e,o);w&&w.success!==!1&&(m=!0,console.log(`已成功将键 ${e} 的数据从本地迁移到云端`))}}}catch(o){console.warn(`迁移键 ${e} 的数据时出错:`,o)}let v=`${i}/${d}/${e}`;const y=await R.loadNamespaceInfo();if(y&&y.success!==!1){const{accessType:o}=y;if(o==="private"&&n){const u=new URL(v);u.searchParams.set("token",n),v=u.toString()}}return{success:!0,url:v,migrated:m,configured:p}}catch(i){return console.error("获取键云端地址时出错:",i),c(i.message||"获取键云端地址失败","CLOUD_URL_ERROR")}}};export{U as d,R as k};
|