breeze-plugin-nhentai 0.0.2 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{"use strict";var e={};e.d=(t,r,n)=>{var a=(r,n)=>{for(var a in r)e.o(r,a)&&!e.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,[n]:r[a]})};a(r,"get"),a(n,"value")},e.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var t={};e.r(t),e.d(t,{default:()=>eH});var r={},n=function(e,t,n,a,i){var o=new Worker(r[t]||(r[t]=URL.createObjectURL(new Blob([e+';addEventListener("error",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})'],{type:"text/javascript"}))));return o.onmessage=function(e){var t=e.data,r=t.$e$;if(r){var n=Error(r[0]);n.code=r[1],n.stack=r[2],i(n,null)}else i(null,t)},o.postMessage(n,a),o},a=Uint8Array,i=Uint16Array,o=Int32Array,l=new a([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),u=new a([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),s=new a([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),c=function(e,t){for(var r=new i(31),n=0;n<31;++n)r[n]=t+=1<<e[n-1];for(var a=new o(r[30]),n=1;n<30;++n)for(var l=r[n];l<r[n+1];++l)a[l]=l-r[n]<<5|n;return{b:r,r:a}},f=c(l,2),p=f.b,d=f.r;p[28]=258,d[258]=28;var h=c(u,0),g=h.b;h.r;for(var m=new i(32768),v=0;v<32768;++v){var y=(43690&v)>>1|(21845&v)<<1;y=(61680&(y=(52428&y)>>2|(13107&y)<<2))>>4|(3855&y)<<4,m[v]=((65280&y)>>8|(255&y)<<8)>>1}for(var w=function(e,t,r){for(var n,a=e.length,o=0,l=new i(t);o<a;++o)e[o]&&++l[e[o]-1];var u=new i(t);for(o=1;o<t;++o)u[o]=u[o-1]+l[o-1]<<1;if(r){n=new i(1<<t);var s=15-t;for(o=0;o<a;++o)if(e[o])for(var c=o<<4|e[o],f=t-e[o],p=u[e[o]-1]++<<f,d=p|(1<<f)-1;p<=d;++p)n[m[p]>>s]=c}else for(n=new i(a),o=0;o<a;++o)e[o]&&(n[o]=m[u[e[o]-1]++]>>15-e[o]);return n},b=new a(288),v=0;v<144;++v)b[v]=8;for(var v=144;v<256;++v)b[v]=9;for(var v=256;v<280;++v)b[v]=7;for(var v=280;v<288;++v)b[v]=8;for(var x=new a(32),v=0;v<32;++v)x[v]=5;var $=w(b,9,1),S=w(x,5,1),k=function(e){for(var t=e[0],r=1;r<e.length;++r)e[r]>t&&(t=e[r]);return t},P=function(e,t,r){var n=t/8|0;return(e[n]|e[n+1]<<8)>>(7&t)&r},B=function(e,t){var r=t/8|0;return(e[r]|e[r+1]<<8|e[r+2]<<16)>>(7&t)},C=function(e){return(e+7)/8|0},A=function(e,t,r){return(null==t||t<0)&&(t=0),(null==r||r>e.length)&&(r=e.length),new a(e.subarray(t,r))},I=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],_=function(e,t,r){var n=Error(t||I[e]);if(n.code=e,Error.captureStackTrace&&Error.captureStackTrace(n,_),!r)throw n;return n},R=function(e,t,r,n){var i=e.length,o=n?n.length:0;if(!i||t.f&&!t.l)return r||new a(0);var c=!r,f=c||2!=t.i,d=t.i;c&&(r=new a(3*i));var h=function(e){var t=r.length;if(e>t){var n=new a(Math.max(2*t,e));n.set(r),r=n}},m=t.f||0,v=t.p||0,y=t.b||0,b=t.l,x=t.d,I=t.m,R=t.n,j=8*i;do{if(!b){m=P(e,v,1);var U=P(e,v+1,3);if(v+=3,U)if(1==U)b=$,x=S,I=9,R=5;else if(2==U){var M=P(e,v,31)+257,L=P(e,v+10,15)+4,E=M+P(e,v+5,31)+1;v+=14;for(var D=new a(E),T=new a(19),z=0;z<L;++z)T[s[z]]=P(e,v+3*z,7);v+=3*L;for(var O=k(T),F=(1<<O)-1,q=w(T,O,1),z=0;z<E;){var K=q[P(e,v,F)];v+=15&K;var N=K>>4;if(N<16)D[z++]=N;else{var W=0,H=0;for(16==N?(H=3+P(e,v,3),v+=2,W=D[z-1]):17==N?(H=3+P(e,v,7),v+=3):18==N&&(H=11+P(e,v,127),v+=7);H--;)D[z++]=W}}var J=D.subarray(0,M),G=D.subarray(M);I=k(J),R=k(G),b=w(J,I,1),x=w(G,R,1)}else _(1);else{var N=C(v)+4,V=e[N-4]|e[N-3]<<8,Q=N+V;if(Q>i){d&&_(0);break}f&&h(y+V),r.set(e.subarray(N,Q),y),t.b=y+=V,t.p=v=8*Q,t.f=m;continue}if(v>j){d&&_(0);break}}f&&h(y+131072);for(var X=(1<<I)-1,Y=(1<<R)-1,Z=v;;Z=v){var W=b[B(e,v)&X],ee=W>>4;if((v+=15&W)>j){d&&_(0);break}if(W||_(2),ee<256)r[y++]=ee;else if(256==ee){Z=v,b=null;break}else{var et=ee-254;if(ee>264){var z=ee-257,er=l[z];et=P(e,v,(1<<er)-1)+p[z],v+=er}var en=x[B(e,v)&Y],ea=en>>4;en||_(3),v+=15&en;var G=g[ea];if(ea>3){var er=u[ea];G+=B(e,v)&(1<<er)-1,v+=er}if(v>j){d&&_(0);break}f&&h(y+131072);var ei=y+et;if(y<G){var eo=o-G,el=Math.min(G,ei);for(eo+y<0&&_(3);y<el;++y)r[y]=n[eo+y]}for(;y<ei;++y)r[y]=r[y-G]}}t.l=b,t.p=Z,t.b=y,t.f=m,b&&(m=1,t.m=I,t.d=x,t.n=R)}while(!m);return y!=r.length&&c?A(r,0,y):r.subarray(0,y)},j=new a(0),U=function(e,t){var r={};for(var n in e)r[n]=e[n];for(var n in t)r[n]=t[n];return r},M=function(e,t,r){for(var n=e(),a=e.toString(),i=a.slice(a.indexOf("[")+1,a.lastIndexOf("]")).replace(/\s+/g,"").split(","),o=0;o<n.length;++o){var l=n[o],u=i[o];if("function"==typeof l){t+=";"+u+"=";var s=l.toString();if(l.prototype)if(-1!=s.indexOf("[native code]")){var c=s.indexOf(" ",8)+1;t+=s.slice(c,s.indexOf("(",c))}else for(var f in t+=s,l.prototype)t+=";"+u+".prototype."+f+"="+l.prototype[f].toString();else t+=s}else r[u]=l}return t},L=[],E=function(e){var t=[];for(var r in e)e[r].buffer&&t.push((e[r]=new e[r].constructor(e[r])).buffer);return t},D=function(e,t,r,a){if(!L[r]){for(var i="",o={},l=e.length-1,u=0;u<l;++u)i=M(e[u],i,o);L[r]={c:M(e[l],i,o),e:o}}var s=U({},L[r].e);return n(L[r].c+";onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage="+t.toString()+"}",r,s,E(s),a)},T=function(){return[a,i,o,l,u,s,p,g,$,S,m,I,w,k,P,B,C,A,_,R,W,z,O]},z=function(e){return postMessage(e,[e.buffer])},O=function(e){return e&&{out:e.size&&new a(e.size),dictionary:e.dictionary}},F=function(e,t,r,n,a,i){var o=D(r,n,a,function(e,t){o.terminate(),i(e,t)});return o.postMessage([e,t],t.consume?[e.buffer]:[]),function(){o.terminate()}},q=function(e,t){return e[t]|e[t+1]<<8},K=function(e,t){return(e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24)>>>0},N=function(e,t){return K(e,t)+0x100000000*K(e,t+4)};function W(e,t){return R(e,{i:2},t&&t.out,t&&t.dictionary)}var H="u">typeof TextDecoder&&new TextDecoder;try{H.decode(j,{stream:!0})}catch(e){}var J=function(e){for(var t="",r=0;;){var n=e[r++],a=(n>127)+(n>223)+(n>239);if(r+a>e.length)return{s:t,r:A(e,r-1)};a?3==a?t+=String.fromCharCode(55296|(n=((15&n)<<18|(63&e[r++])<<12|(63&e[r++])<<6|63&e[r++])-65536)>>10,56320|1023&n):1&a?t+=String.fromCharCode((31&n)<<6|63&e[r++]):t+=String.fromCharCode((15&n)<<12|(63&e[r++])<<6|63&e[r++]):t+=String.fromCharCode(n)}},G=function(e,t,r){var n=q(e,t+28),a=q(e,t+30),i=function(e,t){if(t){for(var r="",n=0;n<e.length;n+=16384)r+=String.fromCharCode.apply(null,e.subarray(n,n+16384));return r}if(H)return H.decode(e);var a=J(e),i=a.s,r=a.r;return r.length&&_(8),i}(e.subarray(t+46,t+46+n),!(2048&q(e,t+8))),o=t+46+n,l=V(e,o,a,r,K(e,t+20),K(e,t+24),K(e,t+42)),u=l[0],s=l[1],c=l[2];return[q(e,t+10),u,s,i,o+a+q(e,t+32),c]},V=function(e,t,r,n,a,i,o){var l=0xffffffff==a,u=0xffffffff==i,s=0xffffffff==o,c=t+r;if(n&&l+u+s){for(;t+4<c;t+=4+q(e,t+2))if(1==q(e,t))return[l?N(e,t+4+8*u):a,u?N(e,t+4):i,s?N(e,t+4+8*(u+l)):o,1];n<2&&_(13)}return[a,i,o,0]},Q="function"==typeof queueMicrotask?queueMicrotask:"function"==typeof setTimeout?setTimeout:function(e){e()};let X="416598d0-84d0-4de9-8ec5-e74816e768f2";function Y(e){return!e||"object"!=typeof e||Array.isArray(e)?{}:e}function Z(e,t={},r={}){return{name:String(null!=e?e:""),onTap:t,extern:r}}function ee(e={}){var t,r,n,a,i;return{id:String(null!=(t=e.id)?t:""),url:String(null!=(r=e.url)?r:"").trim()||"",name:String(null!=(n=e.name)?n:""),path:String(null!=(a=e.path)?a:"").trim()||"placeholder/image-404.png",extern:null!=(i=e.extern)?i:{}}}let et=(e,t)=>bridge.call("cache.set",e,t),er=e=>bridge.call("native.put",e),en="https://nhentai.net",ea="https://nhentai.net/api/v2",ei="main",eo="apiKey",el="cdnBases",eu={image:"https://i3.nhentai.net",thumb:"https://t3.nhentai.net"},es=[],ec=!1;function ef(e){return e&&"object"==typeof e&&!Array.isArray(e)?e:{}}function ep(e){return Array.isArray(e)?e:[]}function ed(e,t=0){let r=Number(e);return Number.isFinite(r)?r:t}function eh(e){return String(null!=e?e:"").trim()}function eg(e,t){let r=eh(t);return r?/^https?:\/\//i.test(r)?r:`${e}/${r.replace(/^\/+/,"")}`:""}function em(e){let t=ed(e);if(!t)return"";let r=new Date(1e3*t);return Number.isNaN(r.getTime())?"":r.toISOString().slice(0,10)}function ev(e){if("string"==typeof e)return e.trim();let t=ef(e),r=ef(t.title||e);return eh(t.pretty_title)||eh(t.japanese_title)||eh(t.english_title)||eh(r.pretty)||eh(r.english)||eh(r.japanese)||"Untitled"}function ey(e){let t=ef(e),r=ef(t.title||e);return eh(t.japanese_title)||eh(t.english_title)||eh(r.japanese)||eh(r.english)||""}function ew(e,t){return e.filter(e=>e.type===t).map(e=>eh(e.name)).filter(Boolean)}function eb(e,t){let r=eh(Y(e)[t]).trim();return r?r.toLowerCase().startsWith(`${t}:`)?r:`${t}:${r}`:""}async function ex(e,t=3e4,r){let n={},a=3e4;"number"==typeof t?a=t:(n=t,a="number"==typeof r?r:3e4);let i=await eA(n),o={Accept:"application/json",Referer:`${en}/`,"User-Agent":"Breeze-plugin-nhentai/0.1.0"};i&&(o.Authorization=`Key ${i}`);let l=await fetch(e,{headers:o,signal:AbortSignal.timeout(a)});if(!l.ok)throw Error(`nhentai 请求失败: HTTP ${l.status}`);return await l.json()}async function e$(e){let t=eh(e);if(!t)throw Error("comicId 不能为空");return ex(`${ea}/galleries/${encodeURIComponent(t)}?include=related,favorite`)}async function eS(e){let t=eh(e);if(!t)return 0;try{let e=await ex(`${ea}/galleries/${encodeURIComponent(t)}/comments/count`);return ed(e,0)}catch{return 0}}async function ek(){let e=eh((await ex(`${ea}/galleries/random`)).id);if(!e)throw Error("nhentai 未返回随机漫画 ID");return e}async function eP(){return ep(await ex(`${ea}/galleries/popular`))}async function eB(){if(!ec){if(ec=!0,!await eA({})){es=[];return}try{let e=await ex(`${ea}/blacklist`,{},1e4);es=ep(e.tags)}catch{es=[]}}}async function eC(){ec||await eB()}async function eA(e){let t=eh(Y(e).apiKey);if(t)return t;let r=await ((e,t="")=>bridge.call("load_plugin_config",e,t))(eo,"");if(!r)return"";try{let e=JSON.parse(r),t=eh(e.value);if(t)return t}catch{}return""}async function eI(){let e=await ((e,t="")=>bridge.call("load_plugin_config",e,t))(el,"");if(!e)return null;try{let t=JSON.parse(e),r=ef(t.value),n=eh(r.image),a=eh(r.thumb);if(n&&a)return{image:n,thumb:a}}catch{}return null}async function e_(e,t){let r,n;await (r=el,n=JSON.stringify({image:e,thumb:t}),bridge.call("save_plugin_config",r,n))}async function eR(e,t=5e3){let r=Date.now();try{if((await fetch(`${e}/favicon.ico`,{method:"HEAD",signal:AbortSignal.timeout(t)})).status>=500)return null;return Date.now()-r}catch{return null}}async function ej(e,t=5e3){let r=(await Promise.all(e.map(async e=>{let r=await eR(e,t);return{url:e,latency:r}}))).filter(e=>null!=e.latency);return 0===r.length?null:(r.sort((e,t)=>e.latency-t.latency),r[0].url)}async function eU(){let e=await eI();e&&(eu.image=e.image,eu.thumb=e.thumb);let t=await ex(`${ea}/cdn`,1e4),r=ep(t.image_servers),n=ep(t.thumb_servers),[a,i]=await Promise.all([r.length>0?ej(r):Promise.resolve(null),n.length>0?ej(n):Promise.resolve(null)]);a&&(eu.image=a),i&&(eu.thumb=i),await e_(eu.image,eu.thumb)}async function eM(e,t){let r=await fetch(`${ea}/galleries/${encodeURIComponent(e)}/download?format=zip`,{method:"POST",headers:{Accept:"application/json",Authorization:`Key ${t}`,Referer:`${en}/`,"User-Agent":"Breeze-plugin-nhentai/0.1.0"},signal:AbortSignal.timeout(6e4)});if(!r.ok)throw Error(`nhentai 下载请求失败: HTTP ${r.status}`);let n=eh((await r.json()).url);if(!n)throw Error("nhentai 未返回下载链接");return n}async function eL(e,t=12e4){let r=eh(e);if(!r)throw Error("下载链接不能为空");let n=await fetch(r,{headers:{Referer:`${en}/`,"User-Agent":"Breeze-plugin-nhentai/0.1.0","x-rquickjs-host-offload-binary-v1":"1"},signal:AbortSignal.timeout(t)});if(!n.ok)throw Error(`压缩包下载失败: HTTP ${n.status}`);return new Uint8Array(await n.arrayBuffer())}async function eE(e,t){let r=Object.entries(await new Promise((e,r)=>{!function(e,t,r){r||(r=t,t={}),"function"!=typeof r&&_(7);var n=[],i=function(){for(var e=0;e<n.length;++e)n[e]()},o={},l=function(e,t){Q(function(){r(e,t)})};Q(function(){l=r});for(var u=e.length-22;0x6054b50!=K(e,u);--u)if(!u||e.length-u>65558)return l(_(13,0,1),null),i;var s=q(e,u+8);if(s){var c=s,f=K(e,u+16),p=0x7064b50==K(e,u-20);if(p){var d=K(e,u-12);(p=0x6064b50==K(e,d))&&(c=s=K(e,d+32),f=K(e,d+48))}for(var h=t&&t.filter,g=0;g<c;++g)!function(){var t=G(e,f,p),r=t[0],u=t[1],c=t[2],d=t[3],g=t[4],m=t[5],v=m+30+q(e,m+26)+q(e,m+28);f=g;var y=function(e,t){e?(i(),l(e,null)):(t&&(o[d]=t),--s||l(null,o))};if(!h||h({name:d,size:u,originalSize:c,compression:r}))if(r)if(8==r){var w,b,x=e.subarray(v,v+u);if(c<524288||u>.8*c)try{y(null,W(x,{out:new a(c)}))}catch(e){y(e,null)}else n.push((w={size:c},(b=y)||(b=w,w={}),"function"!=typeof b&&_(7),F(x,w,[T],function(e){return z(W(e.data[0],O(e.data[1])))},1,b)))}else y(_(14,"unknown compression type "+r,1),null);else y(null,A(e,v,v+u));else y(null,null)}()}else l(null,{})}(t,(t,n)=>{t?r(t):e(n)})})).filter(([e,t])=>{let r;return!(r=e.toLowerCase()).endsWith("/")&&!r.endsWith(".json")&&(r.endsWith(".jpg")||r.endsWith(".jpeg")||r.endsWith(".png")||r.endsWith(".webp")||r.endsWith(".gif")||r.endsWith(".avif")||r.endsWith(".bmp"))&&t.length>0}).sort(([e],[t])=>e.localeCompare(t,void 0,{numeric:!0,sensitivity:"base"}));if(0===r.length)throw Error("压缩包中没有找到图片文件");let n=[];for(let t=0;t<r.length;t++){let[a,i]=r[t],o=t+1,l=`${X}:${e}:${a}`,u=await er(i);await et(l,u),n.push({id:String(o),name:a,path:a,url:"",extern:{comicId:e,imageName:a,imageKey:l}})}return n}function eD(e){return eh(e.id)}function eT(e){var t;return ep(e.pages).length||ed(null!=(t=e.num_pages)?t:e.page_count)}function ez(e){let t=eD(e),r=ef(e.cover),n=eh(r.thumbnail)||eh(r.path)||eh(e.thumbnail)||eh(e.cover_url);return ee({id:t,url:eg(eu.thumb,n),name:`${t||"cover"}.jpg`,path:n||`gallery/${t}/cover.jpg`,extern:{path:n}})}function eO(e){let t=ep(e.tags),r=[],n=(e,t,n)=>{var a;let i=(a=t=>Z(t,{type:"openSearch",payload:{source:X,keyword:`${e}:"${t.replace(/"/g,'\\"')}"`}}),{type:e,name:t,value:(Array.isArray(n)?n:null==n?[]:[n]).map(e=>String(null!=e?e:"").trim()).filter(e=>e.length>0).map(e=>a?a(e):Z(e))});i.value.length>0&&r.push(i)};return n("language","语言",ew(t,"language")),n("artist","作者",ew(t,"artist")),n("group","社团",ew(t,"group")),n("parody","原作",ew(t,"parody")),n("character","角色",ew(t,"character")),n("category","分类",ew(t,"category")),n("tag","标签",ew(t,"tag")),r}function eF(e){var t;let r=eD(e),n=ev(e),a=eT(e),i=em(e.upload_date);return{source:X,id:r,title:n,subtitle:[a?`${a} pages`:"",i].filter(Boolean).join(" / "),finished:!0,likesCount:ed(null!=(t=e.num_favorites)?t:e.favorites),viewsCount:0,updatedAt:i,cover:ez(e),metadata:eO(e),raw:e,extern:{webUrl:`${en}/g/${r}/`}}}function eq(e){let t=eF(e),r=t.metadata.flatMap(e=>e.value).slice(0,6);return{...t,metadata:r}}function eK(e){return{id:ei,requestId:ei,logicalKey:ei,storageChapterId:eD(e)||ei,name:"本篇",order:1,extern:{}}}async function eN(e={}){var t,r,n;let a,i,o;await eC();let l=Math.max(1,ed(e.page,1)),u=eh(e.keyword);if(/^\d+$/.test(u)&&1===l)try{let t=await e$(u),n=eF(t),a={page:1,pages:1,total:1,hasReachedMax:!0};return{source:X,extern:null!=(r=e.extern)?r:null,scheme:{version:"1.0.0",type:"searchResult",source:X,list:"comicGrid"},data:{paging:a,items:[n]},paging:a,items:[n]}}catch{}let s=[u||"all",...[...(o=[eh(Y(n=e.extern).languages)].filter(Boolean).slice(0,1)).includes("all")||0===o.length?[]:o.map(e=>`language:${e}`),...es.map(e=>{let t=eh(e.type),r=eh(e.name);if(!t||!r)return"";let n=r.replace(/"/g,'\\"');return`-${t}:"${n}"`}).filter(Boolean),eb(n,"pages"),eb(n,"favorites"),eb(n,"uploaded")].filter(Boolean)].join(" ").trim(),c=(a=eh(Y(e.extern).sortBy),new Set(["date","popular","popular-today","popular-week","popular-month"]).has(a)?a:"date"),f=await ex(((i=new URLSearchParams).set("query",s),i.set("page",String(l)),i.set("sort",c),`${ea}/search?${i.toString()}`)),p=Math.max(1,ed(f.num_pages,1)),d=ed(f.total,ep(f.result).length),h=ep(f.result).map(eF),g={page:l,pages:p,total:d,hasReachedMax:l>=p};return{source:X,extern:null!=(t=e.extern)?t:null,scheme:{version:"1.0.0",type:"searchResult",source:X,list:"comicGrid"},data:{paging:g,items:h},paging:g,items:h}}async function eW(e={}){var t;let r=await eN(e);return{source:X,extern:null!=(t=e.extern)?t:null,scheme:{version:"1.0.0",type:"comicPagedList",source:X},data:{items:r.items,hasReachedMax:r.paging.hasReachedMax}}}let eH={init:async function(){try{await eU()}catch(e){console.error("D:/Project/web/Breeze-plugin-nhentai/src/index.ts:814:5","[nhentai] CDN 初始化失败:",e)}try{await eB()}catch(e){console.error("D:/Project/web/Breeze-plugin-nhentai/src/index.ts:820:5","[nhentai] 黑名单加载失败:",e)}},getInfo:async function(){return{name:"nhentai",uuid:X,iconUrl:"https://raw.githubusercontent.com/deretame/Breeze-plugin-nhentai/main/assets/Nhentai_idAD-FU-t__1.svg",creator:{name:"Breeze plugin",describe:"nhentai source adapter"},describe:"nhentai 漫画源插件",version:"0.0.2",updateUrl:"https://api.github.com/repos/deretame/Breeze-plugin-nhentai/releases/latest",home:"https://github.com/deretame/Breeze-plugin-nhentai",npmName:"breeze-plugin-nhentai",function:[{id:"latest",title:"最新",action:{type:"openComicList",payload:{scene:{title:"nhentai",source:X,body:{type:"pluginPagedComicList",request:{fnPath:"getRankingData",core:{},extern:{sortBy:"date"}}},filter:{fnPath:"getRankingFilterBundle",extern:{}}}}}},{id:"favorites",title:"收藏",action:{type:"openComicList",payload:{scene:{title:"我的收藏",source:X,body:{type:"pluginPagedComicList",request:{fnPath:"getFavoritesData",core:{},extern:{}}}}}}},{id:"popular",title:"热门",action:{type:"openComicList",payload:{scene:{title:"今日热门",source:X,body:{type:"pluginPagedComicList",request:{fnPath:"getPopularData",core:{},extern:{}}}}}}},{id:"random",title:"手气不错",action:{type:"openComicList",payload:{scene:{title:"手气不错",source:X,body:{type:"pluginPagedComicList",request:{fnPath:"getRandomData",core:{},extern:{}}}}}}}]}},searchComic:eN,getComicDetail:async function(e={}){var t,r,n;let a,i,o,l,u,s,c=eh(e.comicId),[f,p,d]=await Promise.all([eA(null!=(t=e.extern)?t:{}),e$(c),eS(c)]);return{source:X,comicId:c,extern:null!=(r=e.extern)?r:null,scheme:{version:"1.0.0",type:"comicDetail",source:X},data:{normal:(a=eD(p),i=ev(p),o=eh(p.japanese_title)||ey(p),ew(ep(p.tags),"artist"),l=eT(p),u=em(p.upload_date),s=[o&&o!==i?Z(`Japanese: ${o}`):null,a?Z(`ID: ${a}`):null,null!=p.media_id?Z(`Media ID: ${eh(p.media_id)}`):null,l?Z(`${l} pages`):null,u?Z(u):null].filter(Boolean),{comicInfo:{id:a,title:i,titleMeta:s,creator:{id:"",name:"",avatar:ee({id:"",url:"",name:"",path:"",extern:{}}),onTap:{},extern:{}},description:ey(p),cover:ez(p),metadata:eO(p),extern:{webUrl:`${en}/g/${a}/`}},eps:[eK(p)],recommend:ep(p.related).map(eq),totalViews:0,totalLikes:ed(null!=(n=p.num_favorites)?n:p.favorites),totalComments:d,isFavourite:!!p.is_favorited,isLiked:!1,allowComments:!0,allowLike:!1,allowCollected:!!f,allowDownload:!!f,extern:{}}),raw:p}}},getReadSnapshot:async function(e={}){var t,r;let n=eh(e.comicId),a=await e$(n),i={...eK(r=a),pages:ep(r.pages).map((e,t)=>{var r,n;let a=eh(e.path),i=ed(e.number,t+1),o=a.split("/").pop()||`${i}.jpg`;return{id:String(i),name:o,path:a,url:eg(eu.image,a),extern:{thumbnail:eg(eu.thumb,e.thumbnail),width:null!=(r=e.width)?r:null,height:null!=(n=e.height)?n:null}}})},o=eK(a);return{source:X,extern:null!=(t=e.extern)?t:null,data:{comic:{id:eD(a),source:X,title:ev(a),extern:{webUrl:`${en}/g/${eD(a)}/`}},chapter:i,chapters:[{id:o.id,name:o.name,order:o.order,extern:o.extern}]}}},getChapter:async function(e={}){var t;let r,n=eh(e.comicId);if(!n)throw Error("comicId 不能为空");let a=await eA(e.extern);if(!a)throw Error("请设置api key");let i=await eM(n,a),o=await eL(i),l=await eE(n,o),u=await e$(n),s=eK(u),c=(r=ep(u.pages),l.map((e,t)=>{var n,a;let i=r[t];if(!i)return e;let o=eh(i.path);return{...e,url:eg(eu.image,o),extern:{...e.extern,thumbnail:eg(eu.thumb,i.thumbnail),width:null!=(n=i.width)?n:null,height:null!=(a=i.height)?a:null}}})),f={...s,pages:c};return{source:X,comicId:n,chapterId:ei,extern:null!=(t=e.extern)?t:null,scheme:{version:"1.0.0",type:"chapterContent",source:X},data:{comic:{id:eD(u),source:X,title:ev(u),extern:{webUrl:`${en}/g/${eD(u)}/`}},chapter:f,chapters:[s]}}},fetchImageBytes:async function(e={}){let t=eh(e.url),r=eh(Y(e.extern).imageKey);if(r)try{let e=await ((e,t=null)=>bridge.call("cache.get",e,t))(r,null);if(null!=e){let t;return await (t=e,bridge.call("native.take",t))}}catch{}if(!t)throw Error("url 不能为空");let n=await fetch(t,{headers:{Referer:`${en}/`,"User-Agent":"Breeze-plugin-nhentai/0.1.0","x-rquickjs-host-offload-binary-v1":"1"},signal:AbortSignal.timeout(e.timeoutMs||3e4)});if(!n.ok)throw Error(`图片请求失败: HTTP ${n.status}`);return new Uint8Array(await n.arrayBuffer())},getAdvancedSearchScheme:async function(){return{source:X,scheme:{version:"1.0.0",type:"advancedSearch",title:"高级搜索",fields:[{key:"sortBy",kind:"choice",label:"排序",options:[{label:"最新",value:"date"},{label:"最热",value:"popular"},{label:"今日热门",value:"popular-today"},{label:"本周热门",value:"popular-week"},{label:"本月热门",value:"popular-month"}]},{key:"languages",kind:"choice",label:"语言",options:[{label:"所有",value:"all"},{label:"仅中文",value:"chinese"},{label:"仅日文",value:"japanese"},{label:"仅英文",value:"english"}]},{key:"pages",kind:"text",label:"页数(例:>20、<=50)"},{key:"favorites",kind:"text",label:"收藏数(例:>=100、<50)"},{key:"uploaded",kind:"text",label:"上传时间(例:<7d、>1m、<1y)"}]},data:{values:{sortBy:"date",languages:"all"}}}},getComicListSceneBundle:async function(){return{source:X,scheme:{version:"1.0.0",type:"comicListSceneBundle"},data:{scene:{title:"nhentai",source:X,body:{type:"pluginPagedComicList",request:{fnPath:"getRankingData",core:{},extern:{sortBy:"date"}}},filter:{fnPath:"getRankingFilterBundle",extern:{}}}}}},getRankingData:eW,getFavoritesData:async function(e={}){var t,r;if(!await eA(null!=(t=e.extern)?t:{}))throw Error("请设置 nhentai API Key");let n=Math.max(1,ed(e.page,1)),a=eh(e.keyword),i=new URLSearchParams;i.set("page",String(n)),a&&i.set("q",a);let o=await ex(`${ea}/favorites?${i.toString()}`,e.extern),l=Math.max(1,ed(o.num_pages,1)),u=ep(o.result).map(eF);return{source:X,extern:null!=(r=e.extern)?r:null,scheme:{version:"1.0.0",type:"comicPagedList",source:X},data:{items:u,hasReachedMax:n>=l}}},getPopularData:async function(e={}){var t;let r=(await eP()).map(eF);return{source:X,extern:null!=(t=e.extern)?t:null,scheme:{version:"1.0.0",type:"comicPagedList",source:X},data:{items:r,hasReachedMax:!0}}},getRandomData:async function(e={}){var t,r;if(Math.max(1,ed(e.page,1))>1)return{source:X,extern:null!=(r=e.extern)?r:null,scheme:{version:"1.0.0",type:"comicPagedList",source:X},data:{items:[],hasReachedMax:!0}};let n=await ek(),a=await e$(n);return{source:X,extern:null!=(t=e.extern)?t:null,scheme:{version:"1.0.0",type:"comicPagedList",source:X},data:{items:[eF(a)],hasReachedMax:!0}}},getRankingFilterBundle:async function(){return{source:X,scheme:{version:"1.0.0",title:"排序",fields:[{key:"sortBy",kind:"choice",label:"排序",options:[{label:"最新",value:"date",result:{extern:{sortBy:"date"}}},{label:"最热",value:"popular",result:{extern:{sortBy:"popular"}}},{label:"今日热门",value:"popular-today",result:{extern:{sortBy:"popular-today"}}},{label:"本周热门",value:"popular-week",result:{extern:{sortBy:"popular-week"}}},{label:"本月热门",value:"popular-month",result:{extern:{sortBy:"popular-month"}}}]}]},data:{values:{sortBy:"date"}}}},getCommentFeed:async function(e={}){var t;let r=eh(e.comicId);if(!r)throw Error("comicId 不能为空");let n=Math.max(1,ed(e.page,1)),a=new URLSearchParams;a.set("page",String(n)),a.set("per_page","50");let i=await ex(`${ea}/galleries/${encodeURIComponent(r)}/comments?${a.toString()}`,e.extern),o=Math.max(1,ed(i.num_pages,1)),l=ep(i.result).map((e,t)=>{let r=ef(e.poster),n=eh(r.avatar_url),a=n?eg(eu.image,n):"";return{id:eh(e.id)||`comment-${t+1}`,author:{name:eh(r.username)||"anonymous",avatar:{url:a||"",path:n}},content:eh(e.body),createdAt:em(e.post_date),replyCount:0,replies:[],extern:{}}});return{source:X,extern:null!=(t=e.extern)?t:null,scheme:{version:"1.0.0",type:"commentFeed"},data:{topItems:[],items:l,paging:{hasReachedMax:n>=o},replyMode:"embedded",canComment:{comic:!1,reply:!1}}}},getSettingsBundle:async function(){return{source:X,scheme:{version:"1.0.0",type:"settings",sections:[{id:"account",title:"账户",fields:[{key:eo,kind:"text",label:"nhentai API Key",persist:!0}]}]},data:{canShowUserInfo:!0,values:{[eo]:await eA({})}}}},getUserInfoBundle:async function(){if(!await eA({}))return{source:X,scheme:{version:"1.0.0",type:"userInfo"},data:{title:"未登录",avatar:ee({id:"",url:"",name:"avatar",path:"",extern:{}}),lines:["请设置 nhentai API Key"]}};try{var e;let t=await ex(`${ea}/user`,{},1e4),r=eh(t.username)||"User",n=eh(t.avatar_url),a=n?eg(eu.image,n):"",i=[`ID: ${eh(t.id)||""}`,`Slug: ${eh(t.slug)||""}`],o=eh(t.about);o&&i.push(`简介: ${o}`);let l=eh(t.favorite_tags);return l&&i.push(`偏好标签: ${l}`),{source:X,scheme:{version:"1.0.0",type:"userInfo"},data:{title:r,avatar:ee({id:String(null!=(e=t.id)?e:""),url:a,name:"avatar",path:n,extern:{}}),lines:i}}}catch{return{source:X,scheme:{version:"1.0.0",type:"userInfo"},data:{title:"获取失败",avatar:ee({id:"",url:"",name:"avatar",path:"",extern:{}}),lines:["请检查 API Key 是否有效"]}}}},toggleFavorite:async function(e={}){var t;let r=await eA(null!=(t=e.extern)?t:{});if(!r)throw Error("请设置 nhentai API Key");let n=eh(e.comicId);if(!n)throw Error("comicId 不能为空");let a=!!e.currentFavorite,i=await fetch(`${ea}/galleries/${encodeURIComponent(n)}/favorite`,{method:a?"DELETE":"POST",headers:{Accept:"application/json",Authorization:`Key ${r}`,Referer:`${en}/`,"User-Agent":"Breeze-plugin-nhentai/0.1.0"},signal:AbortSignal.timeout(15e3)});if(!i.ok)throw Error(`nhentai 收藏操作失败: HTTP ${i.status}`);return{favorited:!!(await i.json()).favorited,nextStep:"none"}},listFavoriteFolders:async function(){return{items:[{id:"default",name:"默认收藏夹"}]}},moveFavoriteToFolder:async function(e={}){return{ok:!0}}};module.exports=t})();
|
|
1
|
+
(()=>{"use strict";var e={};e.d=(t,a,r)=>{var n=(a,r)=>{for(var n in a)e.o(a,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,[r]:a[n]})};n(a,"get"),n(r,"value")},e.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var t={};e.r(t),e.d(t,{default:()=>eX,getCapabilitiesBundle:()=>eQ});var a={},r=function(e,t,r,n,i){var l=new Worker(a[t]||(a[t]=URL.createObjectURL(new Blob([e+';addEventListener("error",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})'],{type:"text/javascript"}))));return l.onmessage=function(e){var t=e.data,a=t.$e$;if(a){var r=Error(a[0]);r.code=a[1],r.stack=a[2],i(r,null)}else i(null,t)},l.postMessage(r,n),l},n=Uint8Array,i=Uint16Array,l=Int32Array,o=new n([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),u=new n([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),s=new n([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),c=function(e,t){for(var a=new i(31),r=0;r<31;++r)a[r]=t+=1<<e[r-1];for(var n=new l(a[30]),r=1;r<30;++r)for(var o=a[r];o<a[r+1];++o)n[o]=o-a[r]<<5|r;return{b:a,r:n}},f=c(o,2),p=f.b,d=f.r;p[28]=258,d[258]=28;var h=c(u,0),g=h.b;h.r;for(var m=new i(32768),y=0;y<32768;++y){var v=(43690&y)>>1|(21845&y)<<1;v=(61680&(v=(52428&v)>>2|(13107&v)<<2))>>4|(3855&v)<<4,m[y]=((65280&v)>>8|(255&v)<<8)>>1}for(var w=function(e,t,a){for(var r,n=e.length,l=0,o=new i(t);l<n;++l)e[l]&&++o[e[l]-1];var u=new i(t);for(l=1;l<t;++l)u[l]=u[l-1]+o[l-1]<<1;if(a){r=new i(1<<t);var s=15-t;for(l=0;l<n;++l)if(e[l])for(var c=l<<4|e[l],f=t-e[l],p=u[e[l]-1]++<<f,d=p|(1<<f)-1;p<=d;++p)r[m[p]>>s]=c}else for(r=new i(n),l=0;l<n;++l)e[l]&&(r[l]=m[u[e[l]-1]++]>>15-e[l]);return r},b=new n(288),y=0;y<144;++y)b[y]=8;for(var y=144;y<256;++y)b[y]=9;for(var y=256;y<280;++y)b[y]=7;for(var y=280;y<288;++y)b[y]=8;for(var x=new n(32),y=0;y<32;++y)x[y]=5;var $=w(b,9,1),k=w(x,5,1),S=function(e){for(var t=e[0],a=1;a<e.length;++a)e[a]>t&&(t=e[a]);return t},P=function(e,t,a){var r=t/8|0;return(e[r]|e[r+1]<<8)>>(7&t)&a},A=function(e,t){var a=t/8|0;return(e[a]|e[a+1]<<8|e[a+2]<<16)>>(7&t)},I=function(e){return(e+7)/8|0},B=function(e,t,a){return(null==t||t<0)&&(t=0),(null==a||a>e.length)&&(a=e.length),new n(e.subarray(t,a))},C=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],_=function(e,t,a){var r=Error(t||C[e]);if(r.code=e,Error.captureStackTrace&&Error.captureStackTrace(r,_),!a)throw r;return r},j=function(e,t,a,r){var i=e.length,l=r?r.length:0;if(!i||t.f&&!t.l)return a||new n(0);var c=!a,f=c||2!=t.i,d=t.i;c&&(a=new n(3*i));var h=function(e){var t=a.length;if(e>t){var r=new n(Math.max(2*t,e));r.set(a),a=r}},m=t.f||0,y=t.p||0,v=t.b||0,b=t.l,x=t.d,C=t.m,j=t.n,R=8*i;do{if(!b){m=P(e,y,1);var U=P(e,y+1,3);if(y+=3,U)if(1==U)b=$,x=k,C=9,j=5;else if(2==U){var M=P(e,y,31)+257,D=P(e,y+10,15)+4,E=M+P(e,y+5,31)+1;y+=14;for(var L=new n(E),T=new n(19),z=0;z<D;++z)T[s[z]]=P(e,y+3*z,7);y+=3*D;for(var K=S(T),O=(1<<K)-1,F=w(T,K,1),z=0;z<E;){var N=F[P(e,y,O)];y+=15&N;var q=N>>4;if(q<16)L[z++]=q;else{var W=0,H=0;for(16==q?(H=3+P(e,y,3),y+=2,W=L[z-1]):17==q?(H=3+P(e,y,7),y+=3):18==q&&(H=11+P(e,y,127),y+=7);H--;)L[z++]=W}}var J=L.subarray(0,M),G=L.subarray(M);C=S(J),j=S(G),b=w(J,C,1),x=w(G,j,1)}else _(1);else{var q=I(y)+4,V=e[q-4]|e[q-3]<<8,Q=q+V;if(Q>i){d&&_(0);break}f&&h(v+V),a.set(e.subarray(q,Q),v),t.b=v+=V,t.p=y=8*Q,t.f=m;continue}if(y>R){d&&_(0);break}}f&&h(v+131072);for(var X=(1<<C)-1,Y=(1<<j)-1,Z=y;;Z=y){var W=b[A(e,y)&X],ee=W>>4;if((y+=15&W)>R){d&&_(0);break}if(W||_(2),ee<256)a[v++]=ee;else if(256==ee){Z=y,b=null;break}else{var et=ee-254;if(ee>264){var z=ee-257,ea=o[z];et=P(e,y,(1<<ea)-1)+p[z],y+=ea}var er=x[A(e,y)&Y],en=er>>4;er||_(3),y+=15&er;var G=g[en];if(en>3){var ea=u[en];G+=A(e,y)&(1<<ea)-1,y+=ea}if(y>R){d&&_(0);break}f&&h(v+131072);var ei=v+et;if(v<G){var el=l-G,eo=Math.min(G,ei);for(el+v<0&&_(3);v<eo;++v)a[v]=r[el+v]}for(;v<ei;++v)a[v]=a[v-G]}}t.l=b,t.p=Z,t.b=v,t.f=m,b&&(m=1,t.m=C,t.d=x,t.n=j)}while(!m);return v!=a.length&&c?B(a,0,v):a.subarray(0,v)},R=new n(0),U=function(e,t){var a={};for(var r in e)a[r]=e[r];for(var r in t)a[r]=t[r];return a},M=function(e,t,a){for(var r=e(),n=e.toString(),i=n.slice(n.indexOf("[")+1,n.lastIndexOf("]")).replace(/\s+/g,"").split(","),l=0;l<r.length;++l){var o=r[l],u=i[l];if("function"==typeof o){t+=";"+u+"=";var s=o.toString();if(o.prototype)if(-1!=s.indexOf("[native code]")){var c=s.indexOf(" ",8)+1;t+=s.slice(c,s.indexOf("(",c))}else for(var f in t+=s,o.prototype)t+=";"+u+".prototype."+f+"="+o.prototype[f].toString();else t+=s}else a[u]=o}return t},D=[],E=function(e){var t=[];for(var a in e)e[a].buffer&&t.push((e[a]=new e[a].constructor(e[a])).buffer);return t},L=function(e,t,a,n){if(!D[a]){for(var i="",l={},o=e.length-1,u=0;u<o;++u)i=M(e[u],i,l);D[a]={c:M(e[o],i,l),e:l}}var s=U({},D[a].e);return r(D[a].c+";onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage="+t.toString()+"}",a,s,E(s),n)},T=function(){return[n,i,l,o,u,s,p,g,$,k,m,C,w,S,P,A,I,B,_,j,W,z,K]},z=function(e){return postMessage(e,[e.buffer])},K=function(e){return e&&{out:e.size&&new n(e.size),dictionary:e.dictionary}},O=function(e,t,a,r,n,i){var l=L(a,r,n,function(e,t){l.terminate(),i(e,t)});return l.postMessage([e,t],t.consume?[e.buffer]:[]),function(){l.terminate()}},F=function(e,t){return e[t]|e[t+1]<<8},N=function(e,t){return(e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24)>>>0},q=function(e,t){return N(e,t)+0x100000000*N(e,t+4)};function W(e,t){return j(e,{i:2},t&&t.out,t&&t.dictionary)}var H="u">typeof TextDecoder&&new TextDecoder;try{H.decode(R,{stream:!0})}catch(e){}var J=function(e){for(var t="",a=0;;){var r=e[a++],n=(r>127)+(r>223)+(r>239);if(a+n>e.length)return{s:t,r:B(e,a-1)};n?3==n?t+=String.fromCharCode(55296|(r=((15&r)<<18|(63&e[a++])<<12|(63&e[a++])<<6|63&e[a++])-65536)>>10,56320|1023&r):1&n?t+=String.fromCharCode((31&r)<<6|63&e[a++]):t+=String.fromCharCode((15&r)<<12|(63&e[a++])<<6|63&e[a++]):t+=String.fromCharCode(r)}},G=function(e,t,a){var r=F(e,t+28),n=F(e,t+30),i=function(e,t){if(t){for(var a="",r=0;r<e.length;r+=16384)a+=String.fromCharCode.apply(null,e.subarray(r,r+16384));return a}if(H)return H.decode(e);var n=J(e),i=n.s,a=n.r;return a.length&&_(8),i}(e.subarray(t+46,t+46+r),!(2048&F(e,t+8))),l=t+46+r,o=V(e,l,n,a,N(e,t+20),N(e,t+24),N(e,t+42)),u=o[0],s=o[1],c=o[2];return[F(e,t+10),u,s,i,l+n+F(e,t+32),c]},V=function(e,t,a,r,n,i,l){var o=0xffffffff==n,u=0xffffffff==i,s=0xffffffff==l,c=t+a;if(r&&o+u+s){for(;t+4<c;t+=4+F(e,t+2))if(1==F(e,t))return[o?q(e,t+4+8*u):n,u?q(e,t+4):i,s?q(e,t+4+8*(u+o)):l,1];r<2&&_(13)}return[n,i,l,0]},Q="function"==typeof queueMicrotask?queueMicrotask:"function"==typeof setTimeout?setTimeout:function(e){e()};let X="416598d0-84d0-4de9-8ec5-e74816e768f2";function Y(e){return!e||"object"!=typeof e||Array.isArray(e)?{}:e}function Z(e,t={},a={}){return{name:String(null!=e?e:""),onTap:t,extern:a}}function ee(e={}){var t,a,r,n,i;return{id:String(null!=(t=e.id)?t:""),url:String(null!=(a=e.url)?a:"").trim()||"",name:String(null!=(r=e.name)?r:""),path:String(null!=(n=e.path)?n:"").trim()||"placeholder/image-404.png",extern:null!=(i=e.extern)?i:{}}}let et=(e,t)=>bridge.call("cache.set",e,t),ea=e=>bridge.call("native.put",e),er="https://nhentai.net",en="https://nhentai.net/api/v2",ei="main",el="apiKey",eo="cdnBases",eu={image:"https://i3.nhentai.net",thumb:"https://t3.nhentai.net"},es=[],ec=!1;function ef(e){return e&&"object"==typeof e&&!Array.isArray(e)?e:{}}function ep(e){return Array.isArray(e)?e:[]}function ed(e,t=0){let a=Number(e);return Number.isFinite(a)?a:t}function eh(e){return String(null!=e?e:"").trim()}function eg(e,t){let a=eh(t);return a?/^https?:\/\//i.test(a)?a:`${e}/${a.replace(/^\/+/,"")}`:""}function em(e){let t=ed(e);if(!t)return"";let a=new Date(1e3*t);return Number.isNaN(a.getTime())?"":a.toISOString().slice(0,10)}function ey(e){if("string"==typeof e)return e.trim();let t=ef(e),a=ef(t.title||e);return eh(t.pretty_title)||eh(t.japanese_title)||eh(t.english_title)||eh(a.pretty)||eh(a.english)||eh(a.japanese)||"Untitled"}function ev(e){let t=ef(e),a=ef(t.title||e);return eh(t.japanese_title)||eh(t.english_title)||eh(a.japanese)||eh(a.english)||""}function ew(e,t){return e.filter(e=>e.type===t).map(e=>eh(e.name)).filter(Boolean)}function eb(e,t){let a=eh(Y(e)[t]).trim();return a?a.toLowerCase().startsWith(`${t}:`)?a:`${t}:${a}`:""}async function ex(e,t=3e4,a){let r={},n=3e4;"number"==typeof t?n=t:(r=t,n="number"==typeof a?a:3e4);let i=await eB(r),l={Accept:"application/json",Referer:`${er}/`,"User-Agent":"Breeze-plugin-nhentai/0.1.0"};i&&(l.Authorization=`Key ${i}`);let o=await fetch(e,{headers:l,signal:AbortSignal.timeout(n)});if(!o.ok)throw Error(`nhentai 请求失败: HTTP ${o.status}`);return await o.json()}async function e$(e){let t=eh(e);if(!t)throw Error("comicId 不能为空");return ex(`${en}/galleries/${encodeURIComponent(t)}?include=related,favorite`)}async function ek(e){let t=eh(e);if(!t)return 0;try{let e=await ex(`${en}/galleries/${encodeURIComponent(t)}/comments/count`);return ed(e,0)}catch{return 0}}async function eS(){let e=eh((await ex(`${en}/galleries/random`)).id);if(!e)throw Error("nhentai 未返回随机漫画 ID");return e}async function eP(){return ep(await ex(`${en}/galleries/popular`))}async function eA(){if(!ec){if(ec=!0,!await eB({})){es=[];return}try{let e=await ex(`${en}/blacklist`,{},1e4);es=ep(e.tags)}catch{es=[]}}}async function eI(){ec||await eA()}async function eB(e){let t=eh(Y(e).apiKey);if(t)return t;let a=await ((e,t="")=>bridge.call("load_plugin_config",e,t))(el,"");if(!a)return"";try{let e=JSON.parse(a),t=eh(e.value);if(t)return t}catch{}return""}async function eC(e){try{let t=await fetch(`${en}/user`,{method:"GET",headers:{Accept:"application/json",Authorization:`Key ${e}`,Referer:`${er}/`,"User-Agent":"Breeze-plugin-nhentai/0.1.0"},signal:AbortSignal.timeout(1e4)});if(401===t.status||403===t.status)return!1;return!0}catch{return!0}}async function e_(){let e;await (e=el,bridge.call("save_plugin_config",e,""))}async function ej(){try{let e;await (e={title:"API Key 无效",message:"nhentai API Key 已失效,已被自动清空,请重新设置。",level:"warning",seconds:5},bridge.call("flutter.showToast",JSON.stringify(e)))}catch{}}async function eR(){let e=await eB({});e&&(await eC(e)||(await e_(),await ej()))}async function eU(){let e=await ((e,t="")=>bridge.call("load_plugin_config",e,t))(eo,"");if(!e)return null;try{let t=JSON.parse(e),a=ef(t.value),r=eh(a.image),n=eh(a.thumb);if(r&&n)return{image:r,thumb:n}}catch{}return null}async function eM(e,t){let a,r;await (a=eo,r=JSON.stringify({image:e,thumb:t}),bridge.call("save_plugin_config",a,r))}async function eD(e,t=5e3){let a=Date.now();try{if((await fetch(`${e}/favicon.ico`,{method:"HEAD",signal:AbortSignal.timeout(t)})).status>=500)return null;return Date.now()-a}catch{return null}}async function eE(e,t=5e3){let a=(await Promise.all(e.map(async e=>{let a=await eD(e,t);return{url:e,latency:a}}))).filter(e=>null!=e.latency);return 0===a.length?null:(a.sort((e,t)=>e.latency-t.latency),a[0].url)}async function eL(){let e=await eU();e&&(eu.image=e.image,eu.thumb=e.thumb);let t=await ex(`${en}/cdn`,1e4),a=ep(t.image_servers),r=ep(t.thumb_servers),[n,i]=await Promise.all([a.length>0?eE(a):Promise.resolve(null),r.length>0?eE(r):Promise.resolve(null)]);n&&(eu.image=n),i&&(eu.thumb=i),await eM(eu.image,eu.thumb)}async function eT(e,t){let a=await fetch(`${en}/galleries/${encodeURIComponent(e)}/download?format=zip`,{method:"POST",headers:{Accept:"application/json",Authorization:`Key ${t}`,Referer:`${er}/`,"User-Agent":"Breeze-plugin-nhentai/0.1.0"},signal:AbortSignal.timeout(6e4)});if(!a.ok)throw Error(`nhentai 下载请求失败: HTTP ${a.status}`);let r=eh((await a.json()).url);if(!r)throw Error("nhentai 未返回下载链接");return r}async function ez(e,t=12e4){let a=eh(e);if(!a)throw Error("下载链接不能为空");let r=await fetch(a,{headers:{Referer:`${er}/`,"User-Agent":"Breeze-plugin-nhentai/0.1.0","x-rquickjs-host-offload-binary-v1":"1"},signal:AbortSignal.timeout(t)});if(!r.ok)throw Error(`压缩包下载失败: HTTP ${r.status}`);return new Uint8Array(await r.arrayBuffer())}async function eK(e,t){let a=Object.entries(await new Promise((e,a)=>{!function(e,t,a){a||(a=t,t={}),"function"!=typeof a&&_(7);var r=[],i=function(){for(var e=0;e<r.length;++e)r[e]()},l={},o=function(e,t){Q(function(){a(e,t)})};Q(function(){o=a});for(var u=e.length-22;0x6054b50!=N(e,u);--u)if(!u||e.length-u>65558)return o(_(13,0,1),null),i;var s=F(e,u+8);if(s){var c=s,f=N(e,u+16),p=0x7064b50==N(e,u-20);if(p){var d=N(e,u-12);(p=0x6064b50==N(e,d))&&(c=s=N(e,d+32),f=N(e,d+48))}for(var h=t&&t.filter,g=0;g<c;++g)!function(){var t=G(e,f,p),a=t[0],u=t[1],c=t[2],d=t[3],g=t[4],m=t[5],y=m+30+F(e,m+26)+F(e,m+28);f=g;var v=function(e,t){e?(i(),o(e,null)):(t&&(l[d]=t),--s||o(null,l))};if(!h||h({name:d,size:u,originalSize:c,compression:a}))if(a)if(8==a){var w,b,x=e.subarray(y,y+u);if(c<524288||u>.8*c)try{v(null,W(x,{out:new n(c)}))}catch(e){v(e,null)}else r.push((w={size:c},(b=v)||(b=w,w={}),"function"!=typeof b&&_(7),O(x,w,[T],function(e){return z(W(e.data[0],K(e.data[1])))},1,b)))}else v(_(14,"unknown compression type "+a,1),null);else v(null,B(e,y,y+u));else v(null,null)}()}else o(null,{})}(t,(t,r)=>{t?a(t):e(r)})})).filter(([e,t])=>{let a;return!(a=e.toLowerCase()).endsWith("/")&&!a.endsWith(".json")&&(a.endsWith(".jpg")||a.endsWith(".jpeg")||a.endsWith(".png")||a.endsWith(".webp")||a.endsWith(".gif")||a.endsWith(".avif")||a.endsWith(".bmp"))&&t.length>0}).sort(([e],[t])=>e.localeCompare(t,void 0,{numeric:!0,sensitivity:"base"}));if(0===a.length)throw Error("压缩包中没有找到图片文件");let r=[];for(let t=0;t<a.length;t++){let[n,i]=a[t],l=t+1,o=`${X}:${e}:${n}`,u=await ea(i);await et(o,u),r.push({id:String(l),name:n,path:n,url:"",extern:{comicId:e,imageName:n,imageKey:o}})}return r}function eO(e){return eh(e.id)}function eF(e){var t;return ep(e.pages).length||ed(null!=(t=e.num_pages)?t:e.page_count)}function eN(e){let t=eO(e),a=ef(e.cover),r=eh(a.thumbnail)||eh(a.path)||eh(e.thumbnail)||eh(e.cover_url);return ee({id:t,url:eg(eu.thumb,r),name:`${t||"cover"}.jpg`,path:r||`gallery/${t}/cover.jpg`,extern:{path:r}})}function eq(e){let t=ep(e.tags),a=[],r=(e,t,r)=>{var n;let i=(n=t=>Z(t,{type:"openSearch",payload:{source:X,keyword:`${e}:"${t.replace(/"/g,'\\"')}"`}}),{type:e,name:t,value:(Array.isArray(r)?r:null==r?[]:[r]).map(e=>String(null!=e?e:"").trim()).filter(e=>e.length>0).map(e=>n?n(e):Z(e))});i.value.length>0&&a.push(i)};return r("language","语言",ew(t,"language")),r("artist","作者",ew(t,"artist")),r("group","社团",ew(t,"group")),r("parody","原作",ew(t,"parody")),r("character","角色",ew(t,"character")),r("category","分类",ew(t,"category")),r("tag","标签",ew(t,"tag")),a}function eW(e){var t;let a=eO(e),r=ey(e),n=eF(e),i=em(e.upload_date);return{source:X,id:a,title:r,subtitle:[n?`${n} pages`:"",i].filter(Boolean).join(" / "),finished:!0,likesCount:ed(null!=(t=e.num_favorites)?t:e.favorites),viewsCount:0,updatedAt:i,cover:eN(e),metadata:eq(e),raw:e,extern:{webUrl:`${er}/g/${a}/`}}}function eH(e){let t=eW(e),a=t.metadata.flatMap(e=>e.value).slice(0,6);return{...t,metadata:a}}function eJ(e){return{id:ei,requestId:ei,logicalKey:ei,storageChapterId:eO(e)||ei,name:"本篇",order:1,extern:{}}}async function eG(e={}){var t,a,r;let n,i,l;await eI();let o=Math.max(1,ed(e.page,1)),u=eh(e.keyword);if(/^\d+$/.test(u)&&1===o)try{let t=await e$(u),r=eW(t),n={page:1,pages:1,total:1,hasReachedMax:!0};return{source:X,extern:null!=(a=e.extern)?a:null,scheme:{version:"1.0.0",type:"searchResult",source:X,list:"comicGrid"},data:{paging:n,items:[r]},paging:n,items:[r]}}catch{}let s=[u||"all",...[...(l=[eh(Y(r=e.extern).languages)].filter(Boolean).slice(0,1)).includes("all")||0===l.length?[]:l.map(e=>`language:${e}`),...es.map(e=>{let t=eh(e.type),a=eh(e.name);if(!t||!a)return"";let r=a.replace(/"/g,'\\"');return`-${t}:"${r}"`}).filter(Boolean),eb(r,"pages"),eb(r,"favorites"),eb(r,"uploaded")].filter(Boolean)].join(" ").trim(),c=(n=eh(Y(e.extern).sortBy),new Set(["date","popular","popular-today","popular-week","popular-month"]).has(n)?n:"date"),f=await ex(((i=new URLSearchParams).set("query",s),i.set("page",String(o)),i.set("sort",c),`${en}/search?${i.toString()}`)),p=Math.max(1,ed(f.num_pages,1)),d=ed(f.total,ep(f.result).length),h=ep(f.result).map(eW),g={page:o,pages:p,total:d,hasReachedMax:o>=p};return{source:X,extern:null!=(t=e.extern)?t:null,scheme:{version:"1.0.0",type:"searchResult",source:X,list:"comicGrid"},data:{paging:g,items:h},paging:g,items:h}}async function eV(e={}){var t;let a=await eG(e);return{source:X,extern:null!=(t=e.extern)?t:null,scheme:{version:"1.0.0",type:"comicPagedList",source:X},data:{items:a.items,hasReachedMax:a.paging.hasReachedMax}}}async function eQ(){return{source:X,scheme:{version:"1.0.0",type:"capabilities",actions:[]},data:{}}}let eX={init:async function(){try{await eL()}catch(e){console.error("D:/Project/web/Breeze-plugin-nhentai/src/index.ts:865:5","[nhentai] CDN 初始化失败:",e)}try{await eA()}catch(e){console.error("D:/Project/web/Breeze-plugin-nhentai/src/index.ts:871:5","[nhentai] 黑名单加载失败:",e)}try{await eR()}catch(e){console.error("D:/Project/web/Breeze-plugin-nhentai/src/index.ts:876:5","[nhentai] API Key 校验失败:",e)}},getInfo:async function(){return{name:"nhentai",uuid:X,iconUrl:"https://raw.githubusercontent.com/deretame/Breeze-plugin-nhentai/main/assets/Nhentai_idAD-FU-t__1.svg",creator:{name:"Breeze plugin",describe:"nhentai source adapter"},describe:"nhentai 漫画源插件",version:"0.0.4",updateUrl:"https://api.github.com/repos/deretame/Breeze-plugin-nhentai/releases/latest",home:"https://github.com/deretame/Breeze-plugin-nhentai",npmName:"breeze-plugin-nhentai",function:[{id:"latest",title:"最新",action:{type:"openComicList",payload:{scene:{title:"nhentai",source:X,body:{type:"pluginPagedComicList",request:{fnPath:"getRankingData",core:{},extern:{sortBy:"date"}}},filter:{fnPath:"getRankingFilterBundle",extern:{}}}}}},{id:"favorites",title:"收藏",action:{type:"openComicList",payload:{scene:{title:"我的收藏",source:X,body:{type:"pluginPagedComicList",request:{fnPath:"getFavoritesData",core:{},extern:{}}}}}}},{id:"popular",title:"热门",action:{type:"openComicList",payload:{scene:{title:"今日热门",source:X,body:{type:"pluginPagedComicList",request:{fnPath:"getPopularData",core:{},extern:{}}}}}}},{id:"random",title:"手气不错",action:{type:"openComicList",payload:{scene:{title:"手气不错",source:X,body:{type:"pluginPagedComicList",request:{fnPath:"getRandomData",core:{},extern:{}}}}}}}]}},searchComic:eG,getComicDetail:async function(e={}){var t,a,r;let n,i,l,o,u,s,c=eh(e.comicId),[f,p,d]=await Promise.all([eB(null!=(t=e.extern)?t:{}),e$(c),ek(c)]);return{source:X,comicId:c,extern:null!=(a=e.extern)?a:null,scheme:{version:"1.0.0",type:"comicDetail",source:X},data:{normal:(n=eO(p),i=ey(p),l=eh(p.japanese_title)||ev(p),ew(ep(p.tags),"artist"),o=eF(p),u=em(p.upload_date),s=[l&&l!==i?Z(`Japanese: ${l}`):null,n?Z(`ID: ${n}`):null,null!=p.media_id?Z(`Media ID: ${eh(p.media_id)}`):null,o?Z(`${o} pages`):null,u?Z(u):null].filter(Boolean),{comicInfo:{id:n,title:i,titleMeta:s,creator:{id:"",name:"",avatar:ee({id:"",url:"",name:"",path:"",extern:{}}),onTap:{},extern:{}},description:ev(p),cover:eN(p),metadata:eq(p),extern:{webUrl:`${er}/g/${n}/`}},eps:[eJ(p)],recommend:ep(p.related).map(eH),totalViews:0,totalLikes:ed(null!=(r=p.num_favorites)?r:p.favorites),totalComments:d,isFavourite:!!p.is_favorited,isLiked:!1,allowComments:!0,allowLike:!1,allowCollected:!!f,allowDownload:!!f,extern:{}}),raw:p}}},getReadSnapshot:async function(e={}){var t,a;let r=eh(e.comicId),n=await e$(r),i={...eJ(a=n),pages:ep(a.pages).map((e,t)=>{var a,r;let n=eh(e.path),i=ed(e.number,t+1),l=n.split("/").pop()||`${i}.jpg`;return{id:String(i),name:l,path:n,url:eg(eu.image,n),extern:{thumbnail:eg(eu.thumb,e.thumbnail),width:null!=(a=e.width)?a:null,height:null!=(r=e.height)?r:null}}})},l=eJ(n);return{source:X,extern:null!=(t=e.extern)?t:null,data:{comic:{id:eO(n),source:X,title:ey(n),extern:{webUrl:`${er}/g/${eO(n)}/`}},chapter:i,chapters:[{id:l.id,name:l.name,order:l.order,extern:l.extern}]}}},getChapter:async function(e={}){var t;let a,r=eh(e.comicId);if(!r)throw Error("comicId 不能为空");let n=await eB(e.extern);if(!n)throw Error("请设置api key");let i=await eT(r,n),l=await ez(i),o=await eK(r,l),u=await e$(r),s=eJ(u),c=(a=ep(u.pages),o.map((e,t)=>{var r,n;let i=a[t];if(!i)return e;let l=eh(i.path);return{...e,url:eg(eu.image,l),extern:{...e.extern,thumbnail:eg(eu.thumb,i.thumbnail),width:null!=(r=i.width)?r:null,height:null!=(n=i.height)?n:null}}})),f={...s,pages:c};return{source:X,comicId:r,chapterId:ei,extern:null!=(t=e.extern)?t:null,scheme:{version:"1.0.0",type:"chapterContent",source:X},data:{comic:{id:eO(u),source:X,title:ey(u),extern:{webUrl:`${er}/g/${eO(u)}/`}},chapter:f,chapters:[s]}}},fetchImageBytes:async function(e={}){let t=eh(e.url),a=eh(Y(e.extern).imageKey);if(a)try{let e=await ((e,t=null)=>bridge.call("cache.get",e,t))(a,null);if(null!=e){let t;return await (t=e,bridge.call("native.take",t))}}catch{}if(!t)throw Error("url 不能为空");let r=await fetch(t,{headers:{Referer:`${er}/`,"User-Agent":"Breeze-plugin-nhentai/0.1.0","x-rquickjs-host-offload-binary-v1":"1"},signal:AbortSignal.timeout(e.timeoutMs||3e4)});if(!r.ok)throw Error(`图片请求失败: HTTP ${r.status}`);return new Uint8Array(await r.arrayBuffer())},getAdvancedSearchScheme:async function(){return{source:X,scheme:{version:"1.0.0",type:"advancedSearch",title:"高级搜索",fields:[{key:"sortBy",kind:"choice",label:"排序",options:[{label:"最新",value:"date"},{label:"最热",value:"popular"},{label:"今日热门",value:"popular-today"},{label:"本周热门",value:"popular-week"},{label:"本月热门",value:"popular-month"}]},{key:"languages",kind:"choice",label:"语言",options:[{label:"所有",value:"all"},{label:"仅中文",value:"chinese"},{label:"仅日文",value:"japanese"},{label:"仅英文",value:"english"}]},{key:"pages",kind:"text",label:"页数(例:>20、<=50)"},{key:"favorites",kind:"text",label:"收藏数(例:>=100、<50)"},{key:"uploaded",kind:"text",label:"上传时间(例:<7d、>1m、<1y)"}]},data:{values:{sortBy:"date",languages:"all"}}}},getComicListSceneBundle:async function(){return{source:X,scheme:{version:"1.0.0",type:"comicListSceneBundle"},data:{scene:{title:"nhentai",source:X,body:{type:"pluginPagedComicList",request:{fnPath:"getRankingData",core:{},extern:{sortBy:"date"}}},filter:{fnPath:"getRankingFilterBundle",extern:{}}}}}},getRankingData:eV,getFavoritesData:async function(e={}){var t,a;if(!await eB(null!=(t=e.extern)?t:{}))throw Error("请设置 nhentai API Key");let r=Math.max(1,ed(e.page,1)),n=eh(e.keyword),i=new URLSearchParams;i.set("page",String(r)),n&&i.set("q",n);let l=await ex(`${en}/favorites?${i.toString()}`,e.extern),o=Math.max(1,ed(l.num_pages,1)),u=ep(l.result).map(eW);return{source:X,extern:null!=(a=e.extern)?a:null,scheme:{version:"1.0.0",type:"comicPagedList",source:X},data:{items:u,hasReachedMax:r>=o}}},getPopularData:async function(e={}){var t;let a=(await eP()).map(eW);return{source:X,extern:null!=(t=e.extern)?t:null,scheme:{version:"1.0.0",type:"comicPagedList",source:X},data:{items:a,hasReachedMax:!0}}},getRandomData:async function(e={}){var t,a;if(Math.max(1,ed(e.page,1))>1)return{source:X,extern:null!=(a=e.extern)?a:null,scheme:{version:"1.0.0",type:"comicPagedList",source:X},data:{items:[],hasReachedMax:!0}};let r=await eS(),n=await e$(r);return{source:X,extern:null!=(t=e.extern)?t:null,scheme:{version:"1.0.0",type:"comicPagedList",source:X},data:{items:[eW(n)],hasReachedMax:!0}}},getRankingFilterBundle:async function(){return{source:X,scheme:{version:"1.0.0",title:"筛选",fields:[{key:"sortBy",kind:"choice",label:"排序",options:[{label:"最新",value:"date",result:{extern:{sortBy:"date"}}},{label:"最热",value:"popular",result:{extern:{sortBy:"popular"}}},{label:"今日热门",value:"popular-today",result:{extern:{sortBy:"popular-today"}}},{label:"本周热门",value:"popular-week",result:{extern:{sortBy:"popular-week"}}},{label:"本月热门",value:"popular-month",result:{extern:{sortBy:"popular-month"}}}]},{key:"languages",kind:"choice",label:"语言",options:[{label:"所有",value:"all",result:{extern:{languages:"all"}}},{label:"仅中文",value:"chinese",result:{extern:{languages:"chinese"}}},{label:"仅日文",value:"japanese",result:{extern:{languages:"japanese"}}},{label:"仅英文",value:"english",result:{extern:{languages:"english"}}}]}]},data:{values:{sortBy:"date",languages:"all"}}}},getCommentFeed:async function(e={}){var t;let a=eh(e.comicId);if(!a)throw Error("comicId 不能为空");let r=Math.max(1,ed(e.page,1)),n=new URLSearchParams;n.set("page",String(r)),n.set("per_page","50");let i=await ex(`${en}/galleries/${encodeURIComponent(a)}/comments?${n.toString()}`,e.extern),l=Math.max(1,ed(i.num_pages,1)),o=ep(i.result).map((e,t)=>{let a=ef(e.poster),r=eh(a.avatar_url),n=r?eg(eu.image,r):"";return{id:eh(e.id)||`comment-${t+1}`,author:{name:eh(a.username)||"anonymous",avatar:{url:n||"",path:r}},content:eh(e.body),createdAt:em(e.post_date),replyCount:0,replies:[],extern:{}}});return{source:X,extern:null!=(t=e.extern)?t:null,scheme:{version:"1.0.0",type:"commentFeed"},data:{topItems:[],items:o,paging:{hasReachedMax:r>=l},replyMode:"embedded",canComment:{comic:!1,reply:!1}}}},getSettingsBundle:async function(){return{source:X,scheme:{version:"1.0.0",type:"settings",sections:[{id:"account",title:"账户",fields:[{key:el,kind:"text",label:"nhentai API Key",persist:!0,fnPath:"onApiKeyChanged"}]}]},data:{canShowUserInfo:!0,values:{[el]:await eB({})}}}},getCapabilitiesBundle:eQ,onApiKeyChanged:async function(e={}){let t=eh(e.value);return(console.log("D:/Project/web/Breeze-plugin-nhentai/src/index.ts:1438:3","API Key changed:",t),t)?await eC(t)?{ok:!0,message:"API Key 已保存",raw:t}:(await e_(),await ej(),{ok:!1,message:"API Key 已失效,请重新设置 nhentai API Key",raw:""}):{ok:!1,message:"API Key 不能为空",raw:""}},getUserInfoBundle:async function(){let e=await eB({});if(!e)return{source:X,scheme:{version:"1.0.0",type:"userInfo"},data:{title:"未登录",avatar:ee({id:"",url:"",name:"avatar",path:"",extern:{}}),lines:["请设置 nhentai API Key"]}};if(!await eC(e))return await e_(),await ej(),{source:X,scheme:{version:"1.0.0",type:"userInfo"},data:{title:"未登录",avatar:ee({id:"",url:"",name:"avatar",path:"",extern:{}}),lines:["API Key 已失效,请重新设置 nhentai API Key"]}};try{var t;let e=await ex(`${en}/user`,{},1e4),a=eh(e.username)||"User",r=eh(e.avatar_url),n=r?eg(eu.image,r):"",i=[`ID: ${eh(e.id)||""}`,`Slug: ${eh(e.slug)||""}`],l=eh(e.about);l&&i.push(`简介: ${l}`);let o=eh(e.favorite_tags);return o&&i.push(`偏好标签: ${o}`),{source:X,scheme:{version:"1.0.0",type:"userInfo"},data:{title:a,avatar:ee({id:String(null!=(t=e.id)?t:""),url:n,name:"avatar",path:r,extern:{}}),lines:i}}}catch{return{source:X,scheme:{version:"1.0.0",type:"userInfo"},data:{title:"获取失败",avatar:ee({id:"",url:"",name:"avatar",path:"",extern:{}}),lines:["请检查 API Key 是否有效"]}}}},toggleFavorite:async function(e={}){var t;let a=await eB(null!=(t=e.extern)?t:{});if(!a)throw Error("请设置 nhentai API Key");let r=eh(e.comicId);if(!r)throw Error("comicId 不能为空");let n=!!e.currentFavorite,i=await fetch(`${en}/galleries/${encodeURIComponent(r)}/favorite`,{method:n?"DELETE":"POST",headers:{Accept:"application/json",Authorization:`Key ${a}`,Referer:`${er}/`,"User-Agent":"Breeze-plugin-nhentai/0.1.0"},signal:AbortSignal.timeout(15e3)});if(!i.ok)throw Error(`nhentai 收藏操作失败: HTTP ${i.status}`);return{favorited:!!(await i.json()).favorited,nextStep:"none"}},listFavoriteFolders:async function(){return{items:[{id:"default",name:"默认收藏夹"}]}},moveFavoriteToFolder:async function(e={}){return{ok:!0}}};module.exports=t})();
|
|
Binary file
|