2 lines
6.2 KiB
JavaScript
2 lines
6.2 KiB
JavaScript
import{x as i,p as a}from"./index-CuOHsLf7.js";import{u as d}from"./unified-ws-CBnrIqHW.js";class w{initialized=!1;listeners=new Set;subscriptionActive=!1;initialize(){this.initialized||(d.addEventListener(r=>{if(r.domain!=="plugin_progress")return;const e=r.data.progress;e&&this.listeners.forEach(t=>{try{t(e)}catch(n){console.error("插件进度监听器执行失败:",n)}})}),this.initialized=!0)}async subscribe(r){return this.initialize(),this.listeners.add(r),this.subscriptionActive||(await d.subscribe("plugin_progress","main"),this.subscriptionActive=!0),async()=>{this.listeners.delete(r),this.listeners.size===0&&this.subscriptionActive&&(this.subscriptionActive=!1,await d.unsubscribe("plugin_progress","main"))}}}const y=new w,v="Mai-with-u",b="plugin-repo",P="main",m="plugin_details.json";function S(s){const r=s.repository_url||s.urls?.repository,e=s.homepage_url||s.urls?.homepage;return{manifest_version:s.manifest_version||1,id:s.id,name:s.name,version:s.version,description:s.description||"",author:s.author||{name:"Unknown"},license:s.license||"Unknown",host_application:s.host_application||{min_version:"0.0.0"},homepage_url:e,repository_url:r,urls:s.urls,keywords:s.keywords||[],categories:s.categories||[],default_locale:s.default_locale||"zh-CN",locales_path:s.locales_path}}async function E(){const s=await i("/api/webui/plugins/fetch-raw",{method:"POST",body:JSON.stringify({owner:v,repo:b,branch:P,file_path:m})}),r=await a(s);if(!r.success)return r;const e=r.data;return!e.success||!e.data?{success:!1,error:e.error||"获取插件列表失败"}:{success:!0,data:JSON.parse(e.data).filter(o=>o?.manifest?o.manifest.id?!o.manifest.name||!o.manifest.version?(console.warn("跳过缺少必需字段的插件:",o.id),!1):!0:(console.warn("跳过缺少 ID 的插件:",o),!1):(console.warn("跳过无效插件数据:",o),!1)).map(o=>({id:o.manifest.id,manifest:S(o.manifest),downloads:0,rating:0,review_count:0,installed:!1,source:"market",published_at:new Date().toISOString(),updated_at:new Date().toISOString()}))}}async function T(){const s=await i("/api/webui/plugins/git-status"),r=await a(s);return r.success?r:{success:!0,data:{installed:!1,error:"无法检测 Git 安装状态"}}}async function k(){const s=await i("/api/webui/plugins/version"),r=await a(s);return r.success?r:{success:!0,data:{version:"0.0.0",version_major:0,version_minor:0,version_patch:0}}}function N(s,r,e){const t=s.split(".").map(u=>parseInt(u)||0),n=t[0]||0,o=t[1]||0,c=t[2]||0;if(e.version_major<n||e.version_major===n&&e.version_minor<o||e.version_major===n&&e.version_minor===o&&e.version_patch<c)return!1;if(r){const u=r.split(".").map(_=>parseInt(_)||0),p=u[0]||0,g=u[1]||0,h=u[2]||0;if(e.version_major>p||e.version_major===p&&e.version_minor>g||e.version_major===p&&e.version_minor===g&&e.version_patch>h)return!1}return!0}async function A(s,r){try{return await y.subscribe(s)}catch(e){const t=e instanceof Error?e:new Error("插件进度订阅失败");return r?.(t),async()=>{}}}async function U(s,r,e="main"){const t=await i("/api/webui/plugins/install",{method:"POST",body:JSON.stringify({plugin_id:s,repository_url:r,branch:e})});return await a(t)}async function C(s){const r=await i("/api/webui/plugins/uninstall",{method:"POST",body:JSON.stringify({plugin_id:s})});return await a(r)}async function D(s,r,e="main"){const t=await i("/api/webui/plugins/update",{method:"POST",body:JSON.stringify({plugin_id:s,repository_url:r,branch:e})});return await a(t)}const l="https://maibot-plugin-stats.maibot-webui.workers.dev";async function L(s){try{const r=await fetch(`${l}/stats/${s}`);return r.ok?await r.json():(console.error("Failed to fetch plugin stats:",r.statusText),null)}catch(r){return console.error("Error fetching plugin stats:",r),null}}async function R(s,r){try{const e=r||f(),t=await fetch(`${l}/stats/like`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({plugin_id:s,user_id:e})}),n=await t.json();return t.status===429?{success:!1,error:"操作过于频繁,请稍后再试"}:t.ok?{success:!0,...n}:{success:!1,error:n.error||"点赞失败"}}catch(e){return console.error("Error liking plugin:",e),{success:!1,error:"网络错误"}}}async function z(s,r){try{const e=r||f(),t=await fetch(`${l}/stats/dislike`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({plugin_id:s,user_id:e})}),n=await t.json();return t.status===429?{success:!1,error:"操作过于频繁,请稍后再试"}:t.ok?{success:!0,...n}:{success:!1,error:n.error||"点踩失败"}}catch(e){return console.error("Error disliking plugin:",e),{success:!1,error:"网络错误"}}}async function M(s,r,e,t){if(r<1||r>5)return{success:!1,error:"评分必须在 1-5 之间"};try{const n=t||f(),o=await fetch(`${l}/stats/rate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({plugin_id:s,rating:r,comment:e,user_id:n})}),c=await o.json();return o.status===429?{success:!1,error:"每天最多评分 3 次"}:o.ok?{success:!0,...c}:{success:!1,error:c.error||"评分失败"}}catch(n){return console.error("Error rating plugin:",n),{success:!1,error:"网络错误"}}}async function $(s){try{const r=await fetch(`${l}/stats/download`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({plugin_id:s})}),e=await r.json();return r.status===429?(console.warn("Download recording rate limited"),{success:!0}):r.ok?{success:!0,...e}:(console.error("Failed to record download:",e.error),{success:!1,error:e.error})}catch(r){return console.error("Error recording download:",r),{success:!1,error:"网络错误"}}}function O(){const s=navigator,r=[navigator.userAgent,navigator.language,navigator.languages?.join(",")||"",navigator.platform,navigator.hardwareConcurrency||0,screen.width,screen.height,screen.colorDepth,screen.pixelDepth,new Date().getTimezoneOffset(),Intl.DateTimeFormat().resolvedOptions().timeZone,navigator.maxTouchPoints||0,s.deviceMemory||0].join("|");let e=0;for(let t=0;t<r.length;t++){const n=r.charCodeAt(t);e=(e<<5)-e+n,e=e&e}return`fp_${Math.abs(e).toString(36)}`}function f(){const s="maibot_user_id";let r=localStorage.getItem(s);if(!r){const e=O(),t=Date.now().toString(36),n=Math.random().toString(36).substring(2,15);r=`${e}_${t}_${n}`,localStorage.setItem(s,r)}return r}export{T as a,D as b,A as c,U as d,L as e,E as f,k as g,z as h,N as i,M as j,R as l,$ as r,C as u};
|