@leeguoo/pwtk-network-debugger 1.2.16 → 1.2.17

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.
package/dist/index.cjs.js CHANGED
@@ -15,4 +15,4 @@ e.mode.CTRGladman=function(){var t=e.lib.BlockCipherMode.extend();function n(e){
15
15
 
16
16
  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
17
17
  */
18
- function(){var t=e,n=t.lib,r=n.WordArray,o=n.Hasher,i=t.algo,s=r.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),a=r.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),c=r.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),l=r.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),d=r.create([0,1518500249,1859775393,2400959708,2840853838]),h=r.create([1352829926,1548603684,1836072691,2053994217,0]),p=i.RIPEMD160=o.extend({_doReset:function(){this._hash=r.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(e,t){for(var n=0;n<16;n++){var r=t+n,o=e[r];e[r]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8)}var i,p,x,m,w,_,k,B,S,C,z,A=this._hash.words,R=d.words,E=h.words,q=s.words,H=a.words,D=c.words,T=l.words;for(_=i=A[0],k=p=A[1],B=x=A[2],S=m=A[3],C=w=A[4],n=0;n<80;n+=1)z=i+e[t+q[n]]|0,z+=n<16?u(p,x,m)+R[0]:n<32?f(p,x,m)+R[1]:n<48?g(p,x,m)+R[2]:n<64?y(p,x,m)+R[3]:v(p,x,m)+R[4],z=(z=b(z|=0,D[n]))+w|0,i=w,w=m,m=b(x,10),x=p,p=z,z=_+e[t+H[n]]|0,z+=n<16?v(k,B,S)+E[0]:n<32?y(k,B,S)+E[1]:n<48?g(k,B,S)+E[2]:n<64?f(k,B,S)+E[3]:u(k,B,S)+E[4],z=(z=b(z|=0,T[n]))+C|0,_=C,C=S,S=b(B,10),B=k,k=z;z=A[1]+x+S|0,A[1]=A[2]+m+C|0,A[2]=A[3]+w+_|0,A[3]=A[4]+i+k|0,A[4]=A[0]+p+B|0,A[0]=z},_doFinalize:function(){var e=this._data,t=e.words,n=8*this._nDataBytes,r=8*e.sigBytes;t[r>>>5]|=128<<24-r%32,t[14+(r+64>>>9<<4)]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8),e.sigBytes=4*(t.length+1),this._process();for(var o=this._hash,i=o.words,s=0;s<5;s++){var a=i[s];i[s]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8)}return o},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}});function u(e,t,n){return e^t^n}function f(e,t,n){return e&t|~e&n}function g(e,t,n){return(e|~t)^n}function y(e,t,n){return e&n|t&~n}function v(e,t,n){return e^(t|~n)}function b(e,t){return e<<t|e>>>32-t}t.RIPEMD160=o._createHelper(p),t.HmacRIPEMD160=o._createHmacHelper(p)}(),e.RIPEMD160));var e}(),N(),function(){return X?J.exports:(X=1,J.exports=(l=a(),q(),N(),t=(e=l).lib,n=t.Base,r=t.WordArray,o=e.algo,i=o.SHA256,s=o.HMAC,c=o.PBKDF2=n.extend({cfg:n.extend({keySize:4,hasher:i,iterations:25e4}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var n=this.cfg,o=s.create(n.hasher,e),i=r.create(),a=r.create([1]),c=i.words,l=a.words,d=n.keySize,h=n.iterations;c.length<d;){var p=o.update(t).finalize(a);o.reset();for(var u=p.words,f=u.length,g=p,y=1;y<h;y++){g=o.finalize(g),o.reset();for(var v=g.words,b=0;b<f;b++)u[b]^=v[b]}i.concat(p),l[0]++}return i.sigBytes=4*d,i}}),e.PBKDF2=function(e,t,n){return c.create(n).compute(e,t)},l.PBKDF2));var e,t,n,r,o,i,s,c,l}(),Z(),ee(),function(){return te?ne.exports:(te=1,ne.exports=(e=a(),ee(),e.mode.CFB=function(){var t=e.lib.BlockCipherMode.extend();function n(e,t,n,r){var o,i=this._iv;i?(o=i.slice(0),this._iv=void 0):o=this._prevBlock,r.encryptBlock(o,0);for(var s=0;s<n;s++)e[t+s]^=o[s]}return t.Encryptor=t.extend({processBlock:function(e,t){var r=this._cipher,o=r.blockSize;n.call(this,e,t,o,r),this._prevBlock=e.slice(t,t+o)}}),t.Decryptor=t.extend({processBlock:function(e,t){var r=this._cipher,o=r.blockSize,i=e.slice(t,t+o);n.call(this,e,t,o,r),this._prevBlock=i}}),t}(),e.mode.CFB));var e}(),function(){return re?oe.exports:(re=1,oe.exports=(n=a(),ee(),n.mode.CTR=(e=n.lib.BlockCipherMode.extend(),t=e.Encryptor=e.extend({processBlock:function(e,t){var n=this._cipher,r=n.blockSize,o=this._iv,i=this._counter;o&&(i=this._counter=o.slice(0),this._iv=void 0);var s=i.slice(0);n.encryptBlock(s,0),i[r-1]=i[r-1]+1|0;for(var a=0;a<r;a++)e[t+a]^=s[a]}}),e.Decryptor=t,e),n.mode.CTR));var e,t,n}(),ae(),function(){return ce?le.exports:(ce=1,le.exports=(n=a(),ee(),n.mode.OFB=(e=n.lib.BlockCipherMode.extend(),t=e.Encryptor=e.extend({processBlock:function(e,t){var n=this._cipher,r=n.blockSize,o=this._iv,i=this._keystream;o&&(i=this._keystream=o.slice(0),this._iv=void 0),n.encryptBlock(i,0);for(var s=0;s<r;s++)e[t+s]^=i[s]}}),e.Decryptor=t,e),n.mode.OFB));var e,t,n}(),function(){return de?he.exports:(de=1,he.exports=(t=a(),ee(),t.mode.ECB=((e=t.lib.BlockCipherMode.extend()).Encryptor=e.extend({processBlock:function(e,t){this._cipher.encryptBlock(e,t)}}),e.Decryptor=e.extend({processBlock:function(e,t){this._cipher.decryptBlock(e,t)}}),e),t.mode.ECB));var e,t}(),function(){return pe?ue.exports:(pe=1,ue.exports=(e=a(),ee(),e.pad.AnsiX923={pad:function(e,t){var n=e.sigBytes,r=4*t,o=r-n%r,i=n+o-1;e.clamp(),e.words[i>>>2]|=o<<24-i%4*8,e.sigBytes+=o},unpad:function(e){var t=255&e.words[e.sigBytes-1>>>2];e.sigBytes-=t}},e.pad.Ansix923));var e}(),function(){return fe?ge.exports:(fe=1,ge.exports=(e=a(),ee(),e.pad.Iso10126={pad:function(t,n){var r=4*n,o=r-t.sigBytes%r;t.concat(e.lib.WordArray.random(o-1)).concat(e.lib.WordArray.create([o<<24],1))},unpad:function(e){var t=255&e.words[e.sigBytes-1>>>2];e.sigBytes-=t}},e.pad.Iso10126));var e}(),function(){return ye?ve.exports:(ye=1,ve.exports=(e=a(),ee(),e.pad.Iso97971={pad:function(t,n){t.concat(e.lib.WordArray.create([2147483648],1)),e.pad.ZeroPadding.pad(t,n)},unpad:function(t){e.pad.ZeroPadding.unpad(t),t.sigBytes--}},e.pad.Iso97971));var e}(),function(){return be?xe.exports:(be=1,xe.exports=(e=a(),ee(),e.pad.ZeroPadding={pad:function(e,t){var n=4*t;e.clamp(),e.sigBytes+=n-(e.sigBytes%n||n)},unpad:function(e){var t=e.words,n=e.sigBytes-1;for(n=e.sigBytes-1;n>=0;n--)if(t[n>>>2]>>>24-n%4*8&255){e.sigBytes=n+1;break}}},e.pad.ZeroPadding));var e}(),function(){return me?we.exports:(me=1,we.exports=(e=a(),ee(),e.pad.NoPadding={pad:function(){},unpad:function(){}},e.pad.NoPadding));var e}(),function(){return _e?ke.exports:(_e=1,ke.exports=(r=a(),ee(),t=(e=r).lib.CipherParams,n=e.enc.Hex,e.format.Hex={stringify:function(e){return e.ciphertext.toString(n)},parse:function(e){var r=n.parse(e);return t.create({ciphertext:r})}},r.format.Hex));var e,t,n,r}(),function(){return Be?Se.exports:(Be=1,Se.exports=(e=a(),x(),S(),Z(),ee(),function(){var t=e,n=t.lib.BlockCipher,r=t.algo,o=[],i=[],s=[],a=[],c=[],l=[],d=[],h=[],p=[],u=[];!function(){for(var e=[],t=0;t<256;t++)e[t]=t<128?t<<1:t<<1^283;var n=0,r=0;for(t=0;t<256;t++){var f=r^r<<1^r<<2^r<<3^r<<4;f=f>>>8^255&f^99,o[n]=f,i[f]=n;var g=e[n],y=e[g],v=e[y],b=257*e[f]^16843008*f;s[n]=b<<24|b>>>8,a[n]=b<<16|b>>>16,c[n]=b<<8|b>>>24,l[n]=b,b=16843009*v^65537*y^257*g^16843008*n,d[f]=b<<24|b>>>8,h[f]=b<<16|b>>>16,p[f]=b<<8|b>>>24,u[f]=b,n?(n=g^e[e[e[v^g]]],r^=e[e[r]]):n=r=1}}();var f=[0,1,2,4,8,16,32,64,128,27,54],g=r.AES=n.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var e=this._keyPriorReset=this._key,t=e.words,n=e.sigBytes/4,r=4*((this._nRounds=n+6)+1),i=this._keySchedule=[],s=0;s<r;s++)s<n?i[s]=t[s]:(l=i[s-1],s%n?n>6&&s%n==4&&(l=o[l>>>24]<<24|o[l>>>16&255]<<16|o[l>>>8&255]<<8|o[255&l]):(l=o[(l=l<<8|l>>>24)>>>24]<<24|o[l>>>16&255]<<16|o[l>>>8&255]<<8|o[255&l],l^=f[s/n|0]<<24),i[s]=i[s-n]^l);for(var a=this._invKeySchedule=[],c=0;c<r;c++){if(s=r-c,c%4)var l=i[s];else l=i[s-4];a[c]=c<4||s<=4?l:d[o[l>>>24]]^h[o[l>>>16&255]]^p[o[l>>>8&255]]^u[o[255&l]]}}},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,s,a,c,l,o)},decryptBlock:function(e,t){var n=e[t+1];e[t+1]=e[t+3],e[t+3]=n,this._doCryptBlock(e,t,this._invKeySchedule,d,h,p,u,i),n=e[t+1],e[t+1]=e[t+3],e[t+3]=n},_doCryptBlock:function(e,t,n,r,o,i,s,a){for(var c=this._nRounds,l=e[t]^n[0],d=e[t+1]^n[1],h=e[t+2]^n[2],p=e[t+3]^n[3],u=4,f=1;f<c;f++){var g=r[l>>>24]^o[d>>>16&255]^i[h>>>8&255]^s[255&p]^n[u++],y=r[d>>>24]^o[h>>>16&255]^i[p>>>8&255]^s[255&l]^n[u++],v=r[h>>>24]^o[p>>>16&255]^i[l>>>8&255]^s[255&d]^n[u++],b=r[p>>>24]^o[l>>>16&255]^i[d>>>8&255]^s[255&h]^n[u++];l=g,d=y,h=v,p=b}g=(a[l>>>24]<<24|a[d>>>16&255]<<16|a[h>>>8&255]<<8|a[255&p])^n[u++],y=(a[d>>>24]<<24|a[h>>>16&255]<<16|a[p>>>8&255]<<8|a[255&l])^n[u++],v=(a[h>>>24]<<24|a[p>>>16&255]<<16|a[l>>>8&255]<<8|a[255&d])^n[u++],b=(a[p>>>24]<<24|a[l>>>16&255]<<16|a[d>>>8&255]<<8|a[255&h])^n[u++],e[t]=g,e[t+1]=y,e[t+2]=v,e[t+3]=b},keySize:8});t.AES=n._createHelper(g)}(),e.AES));var e}(),Ae(),function(){return Re?Ee.exports:(Re=1,Ee.exports=(e=a(),x(),S(),Z(),ee(),function(){var t=e,n=t.lib.StreamCipher,r=t.algo,o=r.RC4=n.extend({_doReset:function(){for(var e=this._key,t=e.words,n=e.sigBytes,r=this._S=[],o=0;o<256;o++)r[o]=o;o=0;for(var i=0;o<256;o++){var s=o%n,a=t[s>>>2]>>>24-s%4*8&255;i=(i+r[o]+a)%256;var c=r[o];r[o]=r[i],r[i]=c}this._i=this._j=0},_doProcessBlock:function(e,t){e[t]^=i.call(this)},keySize:8,ivSize:0});function i(){for(var e=this._S,t=this._i,n=this._j,r=0,o=0;o<4;o++){n=(n+e[t=(t+1)%256])%256;var i=e[t];e[t]=e[n],e[n]=i,r|=e[(e[t]+e[n])%256]<<24-8*o}return this._i=t,this._j=n,r}t.RC4=n._createHelper(o);var s=r.RC4Drop=o.extend({cfg:o.cfg.extend({drop:192}),_doReset:function(){o._doReset.call(this);for(var e=this.cfg.drop;e>0;e--)i.call(this)}});t.RC4Drop=n._createHelper(s)}(),e.RC4));var e}(),function(){return qe?He.exports:(qe=1,He.exports=(e=a(),x(),S(),Z(),ee(),function(){var t=e,n=t.lib.StreamCipher,r=t.algo,o=[],i=[],s=[],a=r.Rabbit=n.extend({_doReset:function(){for(var e=this._key.words,t=this.cfg.iv,n=0;n<4;n++)e[n]=16711935&(e[n]<<8|e[n]>>>24)|4278255360&(e[n]<<24|e[n]>>>8);var r=this._X=[e[0],e[3]<<16|e[2]>>>16,e[1],e[0]<<16|e[3]>>>16,e[2],e[1]<<16|e[0]>>>16,e[3],e[2]<<16|e[1]>>>16],o=this._C=[e[2]<<16|e[2]>>>16,4294901760&e[0]|65535&e[1],e[3]<<16|e[3]>>>16,4294901760&e[1]|65535&e[2],e[0]<<16|e[0]>>>16,4294901760&e[2]|65535&e[3],e[1]<<16|e[1]>>>16,4294901760&e[3]|65535&e[0]];for(this._b=0,n=0;n<4;n++)c.call(this);for(n=0;n<8;n++)o[n]^=r[n+4&7];if(t){var i=t.words,s=i[0],a=i[1],l=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),d=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),h=l>>>16|4294901760&d,p=d<<16|65535&l;for(o[0]^=l,o[1]^=h,o[2]^=d,o[3]^=p,o[4]^=l,o[5]^=h,o[6]^=d,o[7]^=p,n=0;n<4;n++)c.call(this)}},_doProcessBlock:function(e,t){var n=this._X;c.call(this),o[0]=n[0]^n[5]>>>16^n[3]<<16,o[1]=n[2]^n[7]>>>16^n[5]<<16,o[2]=n[4]^n[1]>>>16^n[7]<<16,o[3]=n[6]^n[3]>>>16^n[1]<<16;for(var r=0;r<4;r++)o[r]=16711935&(o[r]<<8|o[r]>>>24)|4278255360&(o[r]<<24|o[r]>>>8),e[t+r]^=o[r]},blockSize:4,ivSize:2});function c(){for(var e=this._X,t=this._C,n=0;n<8;n++)i[n]=t[n];for(t[0]=t[0]+1295307597+this._b|0,t[1]=t[1]+3545052371+(t[0]>>>0<i[0]>>>0?1:0)|0,t[2]=t[2]+886263092+(t[1]>>>0<i[1]>>>0?1:0)|0,t[3]=t[3]+1295307597+(t[2]>>>0<i[2]>>>0?1:0)|0,t[4]=t[4]+3545052371+(t[3]>>>0<i[3]>>>0?1:0)|0,t[5]=t[5]+886263092+(t[4]>>>0<i[4]>>>0?1:0)|0,t[6]=t[6]+1295307597+(t[5]>>>0<i[5]>>>0?1:0)|0,t[7]=t[7]+3545052371+(t[6]>>>0<i[6]>>>0?1:0)|0,this._b=t[7]>>>0<i[7]>>>0?1:0,n=0;n<8;n++){var r=e[n]+t[n],o=65535&r,a=r>>>16,c=((o*o>>>17)+o*a>>>15)+a*a,l=((4294901760&r)*r|0)+((65535&r)*r|0);s[n]=c^l}e[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,e[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,e[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,e[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,e[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,e[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,e[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,e[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}t.Rabbit=n._createHelper(a)}(),e.Rabbit));var e}(),function(){return De?Te.exports:(De=1,Te.exports=(e=a(),x(),S(),Z(),ee(),function(){var t=e,n=t.lib.StreamCipher,r=t.algo,o=[],i=[],s=[],a=r.RabbitLegacy=n.extend({_doReset:function(){var e=this._key.words,t=this.cfg.iv,n=this._X=[e[0],e[3]<<16|e[2]>>>16,e[1],e[0]<<16|e[3]>>>16,e[2],e[1]<<16|e[0]>>>16,e[3],e[2]<<16|e[1]>>>16],r=this._C=[e[2]<<16|e[2]>>>16,4294901760&e[0]|65535&e[1],e[3]<<16|e[3]>>>16,4294901760&e[1]|65535&e[2],e[0]<<16|e[0]>>>16,4294901760&e[2]|65535&e[3],e[1]<<16|e[1]>>>16,4294901760&e[3]|65535&e[0]];this._b=0;for(var o=0;o<4;o++)c.call(this);for(o=0;o<8;o++)r[o]^=n[o+4&7];if(t){var i=t.words,s=i[0],a=i[1],l=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),d=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),h=l>>>16|4294901760&d,p=d<<16|65535&l;for(r[0]^=l,r[1]^=h,r[2]^=d,r[3]^=p,r[4]^=l,r[5]^=h,r[6]^=d,r[7]^=p,o=0;o<4;o++)c.call(this)}},_doProcessBlock:function(e,t){var n=this._X;c.call(this),o[0]=n[0]^n[5]>>>16^n[3]<<16,o[1]=n[2]^n[7]>>>16^n[5]<<16,o[2]=n[4]^n[1]>>>16^n[7]<<16,o[3]=n[6]^n[3]>>>16^n[1]<<16;for(var r=0;r<4;r++)o[r]=16711935&(o[r]<<8|o[r]>>>24)|4278255360&(o[r]<<24|o[r]>>>8),e[t+r]^=o[r]},blockSize:4,ivSize:2});function c(){for(var e=this._X,t=this._C,n=0;n<8;n++)i[n]=t[n];for(t[0]=t[0]+1295307597+this._b|0,t[1]=t[1]+3545052371+(t[0]>>>0<i[0]>>>0?1:0)|0,t[2]=t[2]+886263092+(t[1]>>>0<i[1]>>>0?1:0)|0,t[3]=t[3]+1295307597+(t[2]>>>0<i[2]>>>0?1:0)|0,t[4]=t[4]+3545052371+(t[3]>>>0<i[3]>>>0?1:0)|0,t[5]=t[5]+886263092+(t[4]>>>0<i[4]>>>0?1:0)|0,t[6]=t[6]+1295307597+(t[5]>>>0<i[5]>>>0?1:0)|0,t[7]=t[7]+3545052371+(t[6]>>>0<i[6]>>>0?1:0)|0,this._b=t[7]>>>0<i[7]>>>0?1:0,n=0;n<8;n++){var r=e[n]+t[n],o=65535&r,a=r>>>16,c=((o*o>>>17)+o*a>>>15)+a*a,l=((4294901760&r)*r|0)+((65535&r)*r|0);s[n]=c^l}e[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,e[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,e[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,e[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,e[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,e[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,e[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,e[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}t.RabbitLegacy=n._createHelper(a)}(),e.RabbitLegacy));var e}(),Me())));class Ne{constructor(){this.requests=new Map,this.listeners=[],this.decryptConfig={enabled:!1},window.__originalFetch=window.fetch,this.interceptXHR(),this.interceptFetch()}enableDecryption(e){this.decryptConfig.enabled=!0,e?.keyExtractor&&(this.decryptConfig.keyExtractor=e.keyExtractor),e?.slkExtractor&&(this.decryptConfig.slkExtractor=e.slkExtractor),void 0!==e?.autoFetchKeys&&(this.decryptConfig.autoFetchKeys=e.autoFetchKeys),e?.keyApiUrl&&(this.decryptConfig.keyApiUrl=e.keyApiUrl)}addListener(e){this.listeners.push(e)}removeListener(e){const t=this.listeners.indexOf(e);t>-1&&this.listeners.splice(t,1)}getRequests(){return Array.from(this.requests.values()).sort((e,t)=>t.timestamp-e.timestamp)}clearRequests(){this.requests.clear()}generateRequestId(){return Math.random().toString(36).substr(2,9)}isInternalUrl(e){return e.includes("/api/dokv/storage")||e.includes("/api/share")}notifyListeners(e){this.listeners.forEach(t=>{try{t(e)}catch(n){}})}async tryDecrypt(e,t){if(!this.decryptConfig.enabled||!e)return null;try{let r="",o="";if(t.cid&&!1!==this.decryptConfig.autoFetchKeys)try{const e=this.decryptConfig.keyApiUrl||"https://gw-card-pay.buyacard.cc/ip/getSK",n={cid:t.cid,client:t.client||"S_WEB",device:t.device||"Web",language:t.language||"CN"},o=window.__originalFetch||window.fetch,i=await o(e,{headers:n}),s=await i.json();if(s.success&&s.data){const e=String(s.data);e.length>=9&&(r=e.charAt(2)+e.charAt(5)+e.charAt(8))}}catch(n){}!r&&this.decryptConfig.keyExtractor?r=this.decryptConfig.keyExtractor(t):r||(r=t.decryptKey||t.keys||t.cid||""),o=this.decryptConfig.slkExtractor?this.decryptConfig.slkExtractor(t):t.decryptSlk||t.slk||"";const i=r+o;if(i){let t=e,r=!1;if("object"==typeof e&&null!==e&&e.data&&"string"==typeof e.data)t=e.data,r=!0;else if("string"==typeof e)try{const n=JSON.parse(e);n.data&&"string"==typeof n.data&&(t=n.data,r=!0)}catch{}const o="string"==typeof t?t:JSON.stringify(t),s=function(e,t){if(!e||e.startsWith("{")||e.startsWith("["))try{return JSON.parse(e)}catch{return e}if(window.decrypt&&t)try{const n=window.decrypt(e,t);if(n&&n!==e&&!n.includes("�"))try{return JSON.parse(n)}catch{if(n.length>0)return n}}catch(n){}const r=[t,"thisisakey123456","VITE_CRYPTO_KEY"].filter(Boolean);for(const o of r)if(o)try{const t=Ke.enc.Utf8.parse(o.padEnd(16,"0").slice(0,16)),n=Ke.enc.Utf8.parse(o.padEnd(16,"0").slice(0,16)),r=Ke.AES.decrypt(e,t,{iv:n,mode:Ke.mode.CBC,padding:Ke.pad.Pkcs7}).toString(Ke.enc.Utf8);if(r)try{return JSON.parse(r)}catch{return r}}catch(n){}try{const t=atob(e);try{return JSON.parse(t)}catch{return t}}catch{}return e}(o,i);if(s&&s!==o)return s}}catch(r){}return null}interceptXHR(){const e=window.XMLHttpRequest,t=this;window.XMLHttpRequest=function(...n){const r=new e(...n),o=t.generateRequestId();let i="",s="",a={};const c=Date.now();let l=!1;const d=r.open;r.open=function(e,n,...r){return i=e.toUpperCase(),s=n,l=t.isInternalUrl(s),d.apply(this,[e,n,...r])};const h=r.setRequestHeader;r.setRequestHeader=function(e,t){return a[e]=t,h.call(this,e,t)};const p=r.send;return r.send=function(e){if(l)return p.call(this,e);const n={id:o,url:s,method:i,headers:{...a},requestBody:e,timestamp:c};return e&&t.tryDecrypt(e,a).then(e=>{null!==e&&(n.decryptedRequest=e,t.requests.set(o,n),t.notifyListeners(n))}).catch(e=>{}),t.requests.set(o,n),t.notifyListeners(n),p.call(this,e)},r.addEventListener("readystatechange",function(){if(4===r.readyState&&!l){const e=Date.now(),n=t.requests.get(o);if(n){n.status=r.status,n.statusText=r.statusText,n.duration=e-c;const i={},s=r.getAllResponseHeaders();s&&s.split("\r\n").forEach(e=>{const t=e.split(": ");2===t.length&&(i[t[0]]=t[1])}),n.responseHeaders=i;if(null!==r.responseText&&void 0!==r.responseText&&""!==r.responseText)try{n.responseBody=JSON.parse(r.responseText)}catch{n.responseBody=r.responseText}else n.responseBody=null;t.requests.set(o,n),t.notifyListeners(n),n.responseBody&&t.tryDecrypt(n.responseBody,{...a,...i}).then(e=>{null!==e&&(n.decryptedResponse=e,t.requests.set(o,n),t.notifyListeners(n))}).catch(e=>{})}}}),r},window.XMLHttpRequest.prototype=e.prototype}interceptFetch(){const e=window.__originalFetch||window.fetch,t=this;window.fetch=async function(n,r){const o=t.generateRequestId(),i=Date.now(),s="string"==typeof n?n:n instanceof URL?n.toString():n.url,a=(r?.method||"GET").toUpperCase();if(t.isInternalUrl(s))return e.call(this,n,r);const c={};r?.headers&&(r.headers instanceof Headers?r.headers.forEach((e,t)=>{c[t]=e}):Array.isArray(r.headers)?r.headers.forEach(([e,t])=>{c[e]=t}):Object.entries(r.headers).forEach(([e,t])=>{c[e]=t}));let l=null;if(r?.body)if("string"==typeof r.body)try{l=JSON.parse(r.body)}catch{l=r.body}else l=r.body;const d={id:o,url:s,method:a,headers:{...c},requestBody:l,timestamp:i};l&&t.tryDecrypt(l,c).then(e=>{null!==e&&(d.decryptedRequest=e,t.requests.set(o,d),t.notifyListeners(d))}).catch(e=>{}),t.requests.set(o,d),t.notifyListeners(d);try{const s=await e.call(this,n,r),a=Date.now(),l=s.clone(),d=t.requests.get(o);if(d){d.status=s.status,d.statusText=s.statusText,d.duration=a-i;const e={};s.headers.forEach((t,n)=>{e[n]=t}),d.responseHeaders=e;try{const n=await l.text();try{d.responseBody=JSON.parse(n)}catch{d.responseBody=n}t.requests.set(o,d),t.notifyListeners(d),d.responseBody&&t.tryDecrypt(d.responseBody,{...c,...e}).then(e=>{null!==e&&(d.decryptedResponse=e,t.requests.set(o,d),t.notifyListeners(d))}).catch(e=>{})}catch(h){d.error=`Failed to read response: ${h}`,t.requests.set(o,d),t.notifyListeners(d)}}return s}catch(h){const e=Date.now(),n=t.requests.get(o);throw n&&(n.error=h instanceof Error?h.message:String(h),n.duration=e-i,t.requests.set(o,n),t.notifyListeners(n)),h}}}}class Xe{constructor(){this.loaded=!1,this.loading=!1}async loadWasm(e,t){if("function"==typeof window.decrypt)return this.loaded=!0,!0;if(this.loaded)return!0;if(this.loading)return new Promise(e=>{const t=()=>{this.loaded||!this.loading?e(this.loaded):setTimeout(t,100)};t()});this.loading=!0;try{const i=[e,"/mimlib.wasm","/dist/mimlib.wasm","/assets/mimlib.wasm","https://gw-card-pay.buyacard.cc/mimlib.wasm"].filter(Boolean),s=[t,"/wasm_exec.js","/dist/wasm_exec.js","/assets/wasm_exec.js","https://gw-card-pay.buyacard.cc/wasm_exec.js"].filter(Boolean);let a=!1;for(const e of s)try{if(await this.loadScript(e),void 0!==window.Go){a=!0;break}}catch(n){continue}if(!a)throw new Error("Unable to load wasm_exec.js from any path");if(void 0===window.Go)throw new Error("Go WebAssembly runtime not available");const c=new window.Go;let l=null;for(const e of i)try{if(!WebAssembly.instantiateStreaming){const t=await fetch(e).then(e=>e.arrayBuffer());l=await WebAssembly.instantiate(t,c.importObject);break}try{l=await WebAssembly.instantiateStreaming(fetch(e),c.importObject);break}catch(r){const t=await fetch(e).then(e=>e.arrayBuffer());l=await WebAssembly.instantiate(t,c.importObject);break}}catch(o){continue}if(!l)throw new Error("Unable to load WebAssembly from any path");return c.run(l.instance),await new Promise(e=>setTimeout(e,100)),"function"==typeof window.decrypt&&(this.loaded=!0,!0)}catch(o){return!1}finally{this.loading=!1}}loadScript(e){return new Promise((t,n)=>{if(document.querySelector(`script[src="${e}"]`))return void t();const r=document.createElement("script");r.src=e,r.type="text/javascript",r.onload=()=>t(),r.onerror=t=>n(new Error(`Failed to load script: ${e}`)),document.head.appendChild(r)})}isLoaded(){return this.loaded}isLoading(){return this.loading}isDecryptAvailable(){return this.loaded&&"function"==typeof window.decrypt}isEncryptAvailable(){return this.loaded&&"function"==typeof window.encrypt}}function Je(e){return JSON.stringify(e,null,2)}async function Ge(e){try{const t=function(e){let t=`curl '${e.url}'`;"GET"!==e.method&&(t+=` -X ${e.method}`);e.headers&&Object.entries(e.headers).forEach(([e,n])=>{t+=` -H '${e}: ${n}'`});if(e.requestBody){const n="string"==typeof e.requestBody?e.requestBody:JSON.stringify(e.requestBody);t+=` --data '${n}'`}return t}(e),n={curl:t,response:e.responseBody||null,timestamp:Date.now(),slk:e.headers?.slk||"",debuggerData:{url:e.url,method:e.method,headers:e.headers,status:e.status,statusText:e.statusText,duration:e.duration,responseHeaders:e.responseHeaders,decryptedRequest:e.decryptedRequest,decryptedResponse:e.decryptedResponse,error:e.error,creator:"PWTK Network Debugger by Leo (@leeguoo)",version:"1.2.0"}},r=window.__originalFetch||window.fetch,o=await r("https://curl.bwg.leeguoo.com/api/share",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({data:n})}),i=await o.json();if(i.shareId){return`https://curl.bwg.leeguoo.com/share/${i.shareId}`}throw new Error(i.error||"创建分享失败")}catch(t){throw t}}class Ye{constructor(e,t={}){this.isDragging=!1,this.isResizing=!1,this.dragStart={x:0,y:0},this.currentTab="network",this.consoleHistory=[],this.requestsCache=[],this.interceptor=e,this.config={position:"bottom-right",theme:"dark",minimized:!1,showConsole:!0,...t},this.createPanel(),this.bindEvents(),this.startListening()}createPanel(){if(!document.getElementById("network-debugger-styles")){const e=document.createElement("style");e.id="network-debugger-styles",e.textContent="\n/* NetworkDebugger 样式 */\n#network-debugger-panel {\n position: fixed;\n z-index: 999999;\n background: #1a1a1a;\n color: #ffffff;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n font-size: 12px;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);\n border-radius: 8px;\n overflow: hidden;\n max-width: 90vw;\n max-height: 80vh;\n transition: all 0.3s ease;\n}\n\n#network-debugger-panel.minimized {\n height: 40px !important;\n overflow: hidden;\n width: auto !important;\n min-width: 200px;\n}\n\n#network-debugger-panel.minimized .debugger-content {\n display: none;\n}\n\n#network-debugger-panel.minimized .resize-handle {\n display: none;\n}\n\n#network-debugger-panel.bottom-right {\n bottom: 20px;\n right: 20px;\n width: 400px;\n height: 300px;\n}\n\n#network-debugger-panel.bottom-left {\n bottom: 20px;\n left: 20px;\n width: 400px;\n height: 300px;\n}\n\n#network-debugger-panel.top-right {\n top: 20px;\n right: 20px;\n width: 400px;\n height: 300px;\n}\n\n#network-debugger-panel.top-left {\n top: 20px;\n left: 20px;\n width: 400px;\n height: 300px;\n}\n\n#network-debugger-panel.fullscreen {\n top: 0;\n left: 0;\n width: 100vw !important;\n height: 100vh !important;\n border-radius: 0;\n}\n\n.debugger-header {\n background: #333;\n padding: 8px 12px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n cursor: move;\n user-select: none;\n border-bottom: 1px solid #444;\n}\n\n.debugger-title {\n font-weight: bold;\n color: #4CAF50;\n font-size: 14px;\n}\n\n.debugger-controls {\n display: flex;\n gap: 8px;\n}\n\n.debugger-btn {\n background: none;\n border: none;\n color: #fff;\n padding: 4px 8px;\n border-radius: 4px;\n cursor: pointer;\n font-size: 12px;\n transition: background-color 0.2s;\n}\n\n.debugger-btn:hover {\n background: #555;\n}\n\n.debugger-btn.active {\n background: #4CAF50;\n color: #000;\n}\n\n.debugger-content {\n height: calc(100% - 40px);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n.debugger-tabs {\n display: flex;\n background: #2a2a2a;\n border-bottom: 1px solid #444;\n}\n\n.debugger-tab {\n padding: 8px 16px;\n cursor: pointer;\n border: none;\n background: none;\n color: #ccc;\n font-size: 12px;\n transition: all 0.2s;\n border-bottom: 2px solid transparent;\n}\n\n.debugger-tab:hover {\n color: #fff;\n background: #3a3a3a;\n}\n\n.debugger-tab.active {\n color: #4CAF50;\n border-bottom-color: #4CAF50;\n background: #333;\n}\n\n.debugger-panel-content {\n flex: 1;\n overflow: auto;\n padding: 12px;\n}\n\n.request-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.request-item {\n background: #2a2a2a;\n border: 1px solid #444;\n border-radius: 6px;\n padding: 10px;\n cursor: pointer;\n transition: all 0.2s;\n position: relative;\n}\n\n.request-item:hover {\n background: #333;\n border-color: #666;\n}\n\n.request-item.expanded {\n background: #333;\n border-color: #4CAF50;\n}\n\n.request-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 4px;\n}\n\n.request-method {\n padding: 2px 8px;\n border-radius: 4px;\n font-weight: bold;\n font-size: 10px;\n text-transform: uppercase;\n min-width: 40px;\n text-align: center;\n}\n\n.method-get { background: #4CAF50; color: #000; }\n.method-post { background: #2196F3; color: #fff; }\n.method-put { background: #FF9800; color: #000; }\n.method-delete { background: #F44336; color: #fff; }\n.method-patch { background: #9C27B0; color: #fff; }\n\n.request-url {\n flex: 1;\n margin: 0 8px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: #fff;\n font-size: 11px;\n}\n\n.request-status {\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 10px;\n min-width: 35px;\n text-align: center;\n}\n\n.status-2xx { background: #4CAF50; color: #000; }\n.status-3xx { background: #FF9800; color: #000; }\n.status-4xx { background: #F44336; color: #fff; }\n.status-5xx { background: #9C27B0; color: #fff; }\n.status-error { background: #F44336; color: #fff; }\n\n.request-info {\n display: flex;\n justify-content: space-between;\n font-size: 10px;\n color: #999;\n}\n\n.request-details {\n margin-top: 12px;\n border-top: 1px solid #444;\n padding-top: 12px;\n display: none;\n}\n\n/* 默认折叠headers */\n.request-details .detail-section.collapsible {\n /* 默认折叠状态 */\n}\n\n.request-details .detail-section.collapsible:not(.expanded) .detail-content {\n display: none;\n}\n\n.request-details .detail-section.collapsible:not(.expanded) .collapse-icon {\n transform: rotate(-90deg);\n}\n\n.request-item.expanded .request-details {\n display: block;\n}\n\n.detail-section {\n margin-bottom: 16px;\n}\n\n.detail-title {\n font-weight: bold;\n color: #4CAF50;\n margin-bottom: 8px;\n font-size: 11px;\n text-transform: uppercase;\n border-bottom: 1px solid #444;\n padding-bottom: 4px;\n}\n\n.detail-title.highlight {\n color: #FFD700;\n font-size: 12px;\n background: rgba(255, 215, 0, 0.1);\n padding: 6px 8px;\n border-radius: 4px;\n border-bottom: 2px solid #FFD700;\n}\n\n.detail-title.clickable {\n cursor: pointer;\n user-select: none;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.detail-title.clickable:hover {\n background: rgba(76, 175, 80, 0.1);\n}\n\n.collapse-icon {\n display: inline-block;\n transition: transform 0.2s;\n font-size: 10px;\n}\n\n.detail-section.collapsible {\n position: relative;\n}\n\n.detail-section.collapsible.collapsed .detail-content {\n display: none;\n}\n\n.detail-section.collapsible.collapsed .collapse-icon {\n transform: rotate(-90deg);\n}\n\n.detail-content {\n background: #222;\n padding: 8px;\n border-radius: 4px;\n max-height: 200px;\n overflow: auto;\n}\n\n.json-content {\n white-space: pre-wrap;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n font-size: 11px;\n line-height: 1.4;\n}\n\n.headers-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 10px;\n}\n\n.headers-table th,\n.headers-table td {\n padding: 4px 8px;\n text-align: left;\n border-bottom: 1px solid #444;\n}\n\n.headers-table th {\n background: #333;\n color: #4CAF50;\n font-weight: bold;\n}\n\n.headers-table td {\n color: #ccc;\n}\n\n.decrypted-badge {\n background: #4CAF50;\n color: #000;\n padding: 2px 6px;\n border-radius: 3px;\n font-size: 9px;\n margin-left: 8px;\n font-weight: bold;\n}\n\n.error-badge {\n background: #F44336;\n color: #fff;\n padding: 2px 6px;\n border-radius: 3px;\n font-size: 9px;\n margin-left: 8px;\n font-weight: bold;\n}\n\n.share-btn {\n background: #2196F3;\n color: #fff;\n border: none;\n padding: 4px 8px;\n border-radius: 3px;\n font-size: 10px;\n margin-left: 8px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.share-btn:hover {\n background: #1976D2;\n transform: scale(1.1);\n}\n\n.share-btn:active {\n transform: scale(0.95);\n}\n\n.console-content {\n background: #000;\n color: #0f0;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n font-size: 11px;\n line-height: 1.4;\n height: 100%;\n overflow: auto;\n padding: 8px;\n}\n\n.console-input {\n display: flex;\n align-items: center;\n background: #333;\n padding: 8px;\n border-top: 1px solid #444;\n}\n\n.console-prompt {\n color: #4CAF50;\n margin-right: 8px;\n font-weight: bold;\n}\n\n.console-cmd {\n flex: 1;\n background: none;\n border: none;\n color: #fff;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n font-size: 12px;\n outline: none;\n}\n\n.tools-section {\n padding: 12px;\n background: #2a2a2a;\n border-bottom: 1px solid #444;\n}\n\n.tool-buttons {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.tool-btn {\n padding: 6px 12px;\n background: #4CAF50;\n color: #000;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 11px;\n font-weight: bold;\n transition: background-color 0.2s;\n}\n\n.tool-btn:hover {\n background: #45a049;\n}\n\n.tool-btn:disabled {\n background: #666;\n color: #999;\n cursor: not-allowed;\n}\n\n@media (max-width: 600px) {\n #network-debugger-panel.bottom-right,\n #network-debugger-panel.bottom-left,\n #network-debugger-panel.top-right,\n #network-debugger-panel.top-left {\n width: calc(100vw - 20px) !important;\n left: 10px !important;\n right: auto !important;\n }\n}\n\n::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n}\n\n::-webkit-scrollbar-track {\n background: #333;\n}\n\n::-webkit-scrollbar-thumb {\n background: #666;\n border-radius: 3px;\n}\n\n::-webkit-scrollbar-thumb:hover {\n background: #888;\n}\n\n.resize-handle {\n position: absolute;\n background: transparent;\n}\n\n.resize-handle.n {\n top: -3px;\n left: 0;\n right: 0;\n height: 6px;\n cursor: ns-resize;\n}\n\n.resize-handle.s {\n bottom: -3px;\n left: 0;\n right: 0;\n height: 6px;\n cursor: ns-resize;\n}\n\n.resize-handle.e {\n top: 0;\n right: -3px;\n bottom: 0;\n width: 6px;\n cursor: ew-resize;\n}\n\n.resize-handle.w {\n top: 0;\n left: -3px;\n bottom: 0;\n width: 6px;\n cursor: ew-resize;\n}\n\n.resize-handle.ne {\n top: -3px;\n right: -3px;\n width: 12px;\n height: 12px;\n cursor: ne-resize;\n}\n\n.resize-handle.nw {\n top: -3px;\n left: -3px;\n width: 12px;\n height: 12px;\n cursor: nw-resize;\n}\n\n.resize-handle.se {\n bottom: -3px;\n right: -3px;\n width: 12px;\n height: 12px;\n cursor: se-resize;\n}\n\n.resize-handle.sw {\n bottom: -3px;\n left: -3px;\n width: 12px;\n height: 12px;\n cursor: sw-resize;\n}\n",document.head.appendChild(e)}this.container=document.createElement("div"),this.container.id="network-debugger-panel",this.container.className=`${this.config.position} ${this.config.minimized?"minimized":""}`,this.container.innerHTML=`\n <div class="debugger-header">\n <div class="debugger-title">🔓 ${this.config.minimized?"PWTK":"PWTK 解密小工具"} <span style="font-size: 10px; opacity: 0.7;">by Leo</span></div>\n <div class="debugger-controls">\n ${this.config.minimized?"":'<button class="debugger-btn" data-action="clear" title="清空">🗑️</button>'}\n ${this.config.minimized?"":'<button class="debugger-btn" data-action="export" title="导出">💾</button>'}\n <button class="debugger-btn" data-action="minimize" title="${this.config.minimized?"展开":"最小化"}">${this.config.minimized?"📖":"📕"}</button>\n ${this.config.minimized?"":'<button class="debugger-btn" data-action="fullscreen" title="全屏">⛶</button>'}\n <button class="debugger-btn" data-action="close" title="关闭">✕</button>\n </div>\n </div>\n <div class="debugger-content">\n <div class="debugger-tabs">\n <button class="debugger-tab active" data-tab="network">网络</button>\n ${this.config.showConsole?'<button class="debugger-tab" data-tab="console">控制台</button>':""}\n <button class="debugger-tab" data-tab="tools">工具</button>\n <button class="debugger-tab" data-tab="about">关于</button>\n </div>\n <div class="debugger-panel-content">\n <div class="network-panel" data-panel="network">\n <div class="request-list"></div>\n </div>\n ${this.config.showConsole?'\n <div class="console-panel" data-panel="console" style="display: none;">\n <div class="console-content"></div>\n <div class="console-input">\n <span class="console-prompt">></span>\n <input class="console-cmd" placeholder="输入 JavaScript 代码..." />\n </div>\n </div>\n ':""}\n <div class="tools-panel" data-panel="tools" style="display: none;">\n <div class="tools-section">\n <div class="tool-buttons">\n <button class="tool-btn" data-tool="parse-curl">解析 cURL</button>\n <button class="tool-btn" data-tool="export-har">导出 HAR</button>\n <button class="tool-btn" data-tool="cors-test">CORS 测试</button>\n <button class="tool-btn" data-tool="decrypt-test">解密测试</button>\n </div>\n </div>\n <div class="tools-content">\n <textarea placeholder="在这里粘贴 cURL 命令或输入要测试的数据..." style="width: 100%; height: 200px; background: #222; color: #fff; border: 1px solid #444; padding: 8px; font-family: monospace;"></textarea>\n </div>\n </div>\n <div class="about-panel" data-panel="about" style="display: none;">\n <div style="padding: 20px; color: #fff; text-align: center;">\n <h2 style="margin: 0 0 20px 0;">🔓 PWTK 解密小工具</h2>\n <p style="margin: 10px 0;">Version: 1.2.14</p>\n <p style="margin: 10px 0;">👨‍💻 Created by <strong>Leo (@leeguoo)</strong></p>\n <p style="margin: 10px 0;">📧 技术支持:请联系 Leo</p>\n <p style="margin: 10px 0;">🌐 分享服务:curl.bwg.leeguoo.com</p>\n <div style="margin-top: 20px; padding: 15px; background: #333; border-radius: 8px;">\n <p style="margin: 5px 0; font-size: 12px;">本工具专为 PWTK 项目开发</p>\n <p style="margin: 5px 0; font-size: 12px;">提供网络请求拦截、解密、分享等功能</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n `,this.addResizeHandles(),document.body.appendChild(this.container),this.networkTab=this.container.querySelector('[data-panel="network"]'),this.consoleTab=this.container.querySelector('[data-panel="console"]'),this.consoleContent=this.container.querySelector(".console-content")}addResizeHandles(){["n","s","e","w","ne","nw","se","sw"].forEach(e=>{const t=document.createElement("div");t.className=`resize-handle ${e}`,t.dataset.direction=e,this.container.appendChild(t)})}bindEvents(){const e=this.container.querySelector(".debugger-header"),t=this.container.querySelector(".debugger-controls"),n=this.container.querySelectorAll(".debugger-tab"),r=this.container.querySelectorAll("[data-tool]"),o=this.container.querySelector(".console-cmd");e.addEventListener("mousedown",e=>{e.target===t||t.contains(e.target)||this.startDrag(e)}),t.addEventListener("click",e=>{switch(e.target.dataset.action){case"clear":this.clearRequests();break;case"export":this.exportData();break;case"minimize":this.toggleMinimize();break;case"fullscreen":this.toggleFullscreen();break;case"close":this.hide()}}),n.forEach(e=>{e.addEventListener("click",e=>{const t=e.target.dataset.tab;this.switchTab(t)})}),r.forEach(e=>{e.addEventListener("click",e=>{const t=e.target.dataset.tool;this.handleToolAction(t)})}),o&&o.addEventListener("keypress",e=>{"Enter"===e.key&&(this.executeConsoleCommand(o.value),o.value="")});this.container.querySelectorAll(".resize-handle").forEach(e=>{e.addEventListener("mousedown",t=>{t.stopPropagation(),this.startResize(t,e.dataset.direction||e.classList[1])})}),document.addEventListener("mousemove",this.handleMouseMove.bind(this)),document.addEventListener("mouseup",this.handleMouseUp.bind(this))}startListening(){this.interceptor.addListener(e=>{this.addRequestToUI(e)}),this.requestsCache=this.interceptor.getRequests(),this.renderRequests()}addRequestToUI(e){const t=this.requestsCache.findIndex(t=>t.id===e.id);t>=0?this.requestsCache[t]=e:this.requestsCache.unshift(e),this.requestsCache.length>100&&(this.requestsCache=this.requestsCache.slice(0,100)),this.renderRequests()}renderRequests(){const e=this.container.querySelector(".request-list");e&&(e.innerHTML="",this.requestsCache.forEach(t=>{const n=this.createRequestItem(t);e.appendChild(n)}))}createRequestItem(e){const t=document.createElement("div");t.className="request-item",t.dataset.requestId=e.id;const n=this.getStatusClass(e.status),r=`method-${e.method.toLowerCase()}`;e.decryptedRequest||e.decryptedResponse;const o=e.error;t.innerHTML=`\n <div class="request-header">\n <span class="request-method ${r}">${e.method}</span>\n <span class="request-url" title="${e.url}">${this.truncateUrl(e.url)}</span>\n <span class="request-status ${n}">${e.status?e.status:void 0!==e.duration?"ERR":"Pending"}</span>\n ${o?'<span class="error-badge">⚠️</span>':""}\n <button class="share-btn" title="分享此请求 (by Leo)" onclick="event.stopPropagation()">🔗</button>\n </div>\n <div class="request-info">\n <span>${new Date(e.timestamp).toLocaleTimeString()}</span>\n <span>${e.duration?`${e.duration}ms`:"Pending"}</span>\n </div>\n <div class="request-details">\n ${this.renderRequestDetails(e)}\n </div>\n `,t.addEventListener("click",()=>{t.classList.toggle("expanded")});const i=t.querySelector(".share-btn");return i&&i.addEventListener("click",async t=>{t.stopPropagation(),await this.shareRequest(e)}),t}renderRequestDetails(e){let t="";return e.id.replace(/[^a-zA-Z0-9]/g,""),e.decryptedRequest&&(t+=`\n <div class="detail-section">\n <div class="detail-title highlight">解密请求数据</div>\n <div class="detail-content">\n <div class="json-content">${this.formatData(e.decryptedRequest)}</div>\n </div>\n </div>\n `),e.decryptedResponse&&(t+=`\n <div class="detail-section">\n <div class="detail-title highlight">解密响应数据</div>\n <div class="detail-content">\n <div class="json-content">${this.formatData(e.decryptedResponse)}</div>\n </div>\n </div>\n `),Object.keys(e.headers).length>0&&(t+=`\n <div class="detail-section collapsible collapsed">\n <div class="detail-title clickable" onclick="this.parentElement.classList.toggle('collapsed')">\n <span class="collapse-icon">▼</span> 请求头 (${Object.keys(e.headers).length})\n </div>\n <div class="detail-content">\n <table class="headers-table">\n ${Object.entries(e.headers).map(([e,t])=>`<tr><td>${e}</td><td>${t}</td></tr>`).join("")}\n </table>\n </div>\n </div>\n `),e.responseHeaders&&Object.keys(e.responseHeaders).length>0&&(t+=`\n <div class="detail-section collapsible collapsed">\n <div class="detail-title clickable" onclick="this.parentElement.classList.toggle('collapsed')">\n <span class="collapse-icon">▼</span> 响应头 (${Object.keys(e.responseHeaders).length})\n </div>\n <div class="detail-content">\n <table class="headers-table">\n ${Object.entries(e.responseHeaders).map(([e,t])=>`<tr><td>${e}</td><td>${t}</td></tr>`).join("")}\n </table>\n </div>\n </div>\n `),e.requestBody&&(t+=`\n <div class="detail-section">\n <div class="detail-title">${e.decryptedRequest?"原始请求数据":"请求数据"}</div>\n <div class="detail-content">\n <div class="json-content">${this.formatData(e.requestBody)}</div>\n </div>\n </div>\n `),e.responseBody&&(t+=`\n <div class="detail-section">\n <div class="detail-title">${e.decryptedResponse?"原始响应数据":"响应数据"}</div>\n <div class="detail-content">\n <div class="json-content">${this.formatData(e.responseBody)}</div>\n </div>\n </div>\n `),e.error&&(t+=`\n <div class="detail-section">\n <div class="detail-title">错误信息</div>\n <div class="detail-content">\n <div class="json-content" style="color: #f44336;">${e.error}</div>\n </div>\n </div>\n `),t}formatData(e){if("string"==typeof e)try{return Je(JSON.parse(e))}catch{return e}return Je(e)}getStatusClass(e){return e?e>=200&&e<300?"status-2xx":e>=300&&e<400?"status-3xx":e>=400&&e<500?"status-4xx":e>=500?"status-5xx":"status-error":"status-error"}truncateUrl(e){return e}switchTab(e){this.container.querySelectorAll(".debugger-tab").forEach(t=>{t.classList.toggle("active",t.dataset.tab===e)}),this.container.querySelectorAll("[data-panel]").forEach(t=>{t.style.display=t.getAttribute("data-panel")===e?"block":"none"}),this.currentTab=e}clearRequests(){this.requestsCache=[],this.interceptor.clearRequests(),this.renderRequests(),this.logToConsole("✅ 已清空网络请求记录")}exportData(){const e={timestamp:(new Date).toISOString(),requests:this.requestsCache,userAgent:navigator.userAgent,url:window.location.href,creator:"PWTK Network Debugger by Leo (@leeguoo)"},t=new Blob([JSON.stringify(e,null,2)],{type:"application/json"}),n=URL.createObjectURL(t),r=document.createElement("a");r.href=n,r.download=`network-debug-${Date.now()}.json`,r.click(),URL.revokeObjectURL(n),this.logToConsole("💾 网络数据已导出 (by Leo)")}async shareRequest(e){try{this.logToConsole("📤 正在创建分享链接...");const t=await Ge(e);if(!t)throw new Error("无法创建分享链接");await async function(e){try{if(navigator.clipboard&&navigator.clipboard.writeText)return await navigator.clipboard.writeText(e),!0;{const t=document.createElement("textarea");t.value=e,t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select();const n=document.execCommand("copy");return document.body.removeChild(t),n}}catch(t){return!1}}(t)?(this.logToConsole(`✅ 分享链接已复制到剪贴板: ${t}`),alert(`分享链接已复制到剪贴板!\n${t}\n\nCreated by Leo (@leeguoo)`)):(this.logToConsole(`✅ 分享链接: ${t}`),prompt("分享链接已创建,请手动复制:\n\nCreated by Leo (@leeguoo)",t))}catch(t){this.logToConsole(`❌ 分享失败: ${t}`),alert("分享失败,请稍后重试")}}toggleMinimize(){this.config.minimized=!this.config.minimized,this.container.classList.toggle("minimized",this.config.minimized);const e=this.container.querySelector(".debugger-header");if(e){e.innerHTML=`\n <div class="debugger-title">🔓 ${this.config.minimized?"PWTK":"PWTK 解密小工具"} <span style="font-size: 10px; opacity: 0.7;">by Leo</span></div>\n <div class="debugger-controls">\n ${this.config.minimized?"":'<button class="debugger-btn" data-action="clear" title="清空">🗑️</button>'}\n ${this.config.minimized?"":'<button class="debugger-btn" data-action="export" title="导出">💾</button>'}\n <button class="debugger-btn" data-action="minimize" title="${this.config.minimized?"展开":"最小化"}">${this.config.minimized?"📖":"📕"}</button>\n ${this.config.minimized?"":'<button class="debugger-btn" data-action="fullscreen" title="全屏">⛶</button>'}\n <button class="debugger-btn" data-action="close" title="关闭">✕</button>\n </div>\n `;e.querySelector(".debugger-controls").addEventListener("click",e=>{switch(e.target.dataset.action){case"clear":this.clearRequests();break;case"export":this.exportData();break;case"minimize":this.toggleMinimize();break;case"fullscreen":this.toggleFullscreen();break;case"close":this.hide()}})}}toggleFullscreen(){this.container.classList.toggle("fullscreen")}handleToolAction(e){const t=this.container.querySelector(".tools-content textarea").value.trim();switch(e){case"parse-curl":this.handleParseCurl(t);break;case"export-har":this.exportHAR();break;case"cors-test":this.handleCorsTest(t);break;case"decrypt-test":this.handleDecryptTest(t)}}handleParseCurl(e){if(e)try{const t=function(e){const t=e.split("\\\n").map(e=>e.trim()).join(" "),n=t.match(/c?curl\s+['"]?([^'"\s]+)['"]?/),r=n?n[1]:"",o={},i=t.matchAll(/-H\s+['"]([^:]+):\s*([^'"]*)['"]/g);for(const l of i)o[l[1]]=l[2];let s;const a=t.match(/(?:--data-raw|--data|-d)\s+['"]({.+?})['"]/s);if(a){const e=a[1];try{s=JSON.parse(e)}catch{s=e}}const c=t.match(/-X\s+(['"]?)([A-Z]+)\1/);return{url:r,method:c?c[2]:s?"POST":"GET",headers:o,data:s}}(e);this.logToConsole("✅ cURL 解析成功:"),this.logToConsole(t)}catch(t){this.logToConsole(`❌ cURL 解析失败: ${t instanceof Error?t.message:String(t)}`,"error")}else this.logToConsole("❌ 请输入 cURL 命令")}exportHAR(){const e={log:{version:"1.2",creator:{name:"NetworkDebugger",version:"1.0.0",comment:"Created by Leo (@leeguoo)"},entries:this.requestsCache.map(e=>({startedDateTime:new Date(e.timestamp).toISOString(),time:e.duration||0,request:{method:e.method,url:e.url,headers:Object.entries(e.headers).map(([e,t])=>({name:e,value:t})),postData:e.requestBody?{mimeType:"application/json",text:"string"==typeof e.requestBody?e.requestBody:JSON.stringify(e.requestBody)}:void 0},response:{status:e.status||0,statusText:e.statusText||"",headers:e.responseHeaders?Object.entries(e.responseHeaders).map(([e,t])=>({name:e,value:t})):[],content:{size:0,mimeType:"application/json",text:e.responseBody?"string"==typeof e.responseBody?e.responseBody:JSON.stringify(e.responseBody):""}}}))}},t=new Blob([JSON.stringify(e,null,2)],{type:"application/json"}),n=URL.createObjectURL(t),r=document.createElement("a");r.href=n,r.download=`network-har-${Date.now()}.har`,r.click(),URL.revokeObjectURL(n),this.logToConsole("💾 HAR 文件已导出")}handleCorsTest(e){e?(this.logToConsole(`🔍 开始 CORS 测试: ${e}`),fetch(e,{mode:"cors"}).then(e=>{this.logToConsole(`✅ CORS 测试成功: ${e.status} ${e.statusText}`)}).catch(e=>{this.logToConsole(`❌ CORS 测试失败: ${e.message}`)})):this.logToConsole("❌ 请输入要测试的 URL")}handleDecryptTest(e){e?this.logToConsole("🔓 解密测试功能开发中..."):this.logToConsole("❌ 请输入要解密的数据")}executeConsoleCommand(e){if(e.trim()){this.consoleHistory.push(e),this.logToConsole(`> ${e}`);try{const t=new Function("return "+e)();this.logToConsole(t)}catch(t){try{const t=new Function(e)();this.logToConsole(void 0!==t?t:"undefined")}catch(n){this.logToConsole(`❌ ${t}`,"error")}}}}logToConsole(e,t="log"){if(!this.consoleContent)return;const n=(new Date).toLocaleTimeString(),r="object"==typeof e?JSON.stringify(e,null,2):e,o=document.createElement("div");o.innerHTML=`[${n}] ${r}`,"error"===t?o.style.color="#f44336":"warn"===t&&(o.style.color="#ff9800"),this.consoleContent.appendChild(o),this.consoleContent.scrollTop=this.consoleContent.scrollHeight}startDrag(e){this.isDragging=!0,this.dragStart={x:e.clientX,y:e.clientY},this.container.style.transition="none"}startResize(e,t){this.isResizing=!0,this.dragStart={x:e.clientX,y:e.clientY},this.container.style.transition="none"(this.container).dataset.resizeDirection=t}handleMouseMove(e){if(this.isDragging){const t=e.clientX-this.dragStart.x,n=e.clientY-this.dragStart.y,r=this.container.getBoundingClientRect();this.container.style.left=`${r.left+t}px`,this.container.style.top=`${r.top+n}px`,this.dragStart={x:e.clientX,y:e.clientY}}if(this.isResizing){const t=this.container.dataset.resizeDirection,n=e.clientX-this.dragStart.x,r=e.clientY-this.dragStart.y,o=this.container.getBoundingClientRect();t.includes("e")&&(this.container.style.width=`${o.width+n}px`),t.includes("s")&&(this.container.style.height=`${o.height+r}px`),t.includes("w")&&(this.container.style.width=o.width-n+"px",this.container.style.left=`${o.left+n}px`),t.includes("n")&&(this.container.style.height=o.height-r+"px",this.container.style.top=`${o.top+r}px`),this.dragStart={x:e.clientX,y:e.clientY}}}handleMouseUp(){(this.isDragging||this.isResizing)&&(this.container.style.transition="all 0.3s ease"),this.isDragging=!1,this.isResizing=!1,delete this.container.dataset.resizeDirection}show(){this.container.style.display="block"}hide(){this.container.style.display="none"}destroy(){this.container.remove();const e=document.getElementById("network-debugger-styles");e&&e.remove()}}class Ze{constructor(){this.interceptor=null,this.panel=null,this.wasmLoader=null,this.config={},this.initialized=!1}async init(e={}){if(!this.initialized){this.config={autoStart:!0,position:"bottom-right",theme:"dark",minimized:!1,showConsole:!0,wasm:{enabled:!0,...e.wasm},decrypt:{enabled:!0,autoFetchKeys:!0,keyApiUrl:"https://gw-card-pay.buyacard.cc/ip/getSK",...e.decrypt},...e};try{if(!1!==this.config.wasm?.enabled){this.wasmLoader=new Xe;await this.wasmLoader.loadWasm(this.config.wasm?.wasmUrl,this.config.wasm?.jsUrl)}this.interceptor=new Ne,this.config.decrypt?.enabled&&this.interceptor.enableDecryption({keyExtractor:this.config.decrypt.keyExtractor||this.defaultKeyExtractor,slkExtractor:this.config.decrypt.slkExtractor||this.defaultSlkExtractor,autoFetchKeys:this.config.decrypt.autoFetchKeys,keyApiUrl:this.config.decrypt.keyApiUrl}),!1!==this.config.autoStart&&this.createPanel(),this.initialized=!0}catch(t){throw t}}}show(){this.initialized&&(this.panel?this.panel.show():this.createPanel())}hide(){this.panel&&this.panel.hide()}destroy(){this.panel&&(this.panel.destroy(),this.panel=null),this.initialized=!1}getRequests(){return this.interceptor?.getRequests()||[]}clearRequests(){this.interceptor?.clearRequests()}exportData(){return{timestamp:(new Date).toISOString(),requests:this.getRequests(),config:this.config,userAgent:navigator.userAgent,url:window.location.href,author:"Leo (@leeguoo)",tool:"@leeguoo/network-debugger"}}isWasmLoaded(){return this.wasmLoader?.isLoaded()||!1}isInitialized(){return this.initialized}static create(e){const t=new Ze;return t.init(e).then(()=>t)}createPanel(){this.interceptor&&(this.panel=new Ye(this.interceptor,{position:this.config.position,theme:this.config.theme,minimized:this.config.minimized,showConsole:this.config.showConsole}))}defaultKeyExtractor(e){return e.keys||e.cid||e["x-api-key"]||""}defaultSlkExtractor(e){return e.slk||e["x-slk"]||""}}let Ve=null;const Qe={init:async e=>Ve||(Ve=await Ze.create(e),"undefined"!=typeof window&&(window.NetworkDebugger=Ve),Ve),show(){Ve?.show()},hide(){Ve?.hide()},destroy(){Ve?.destroy(),Ve=null,"undefined"!=typeof window&&delete window.NetworkDebugger},getInstance:()=>Ve};exports.DebugPanel=Ye,exports.NetworkDebugger=Ze,exports.NetworkInterceptor=Ne,exports.WasmLoader=Xe,exports.default=Qe;
18
+ function(){var t=e,n=t.lib,r=n.WordArray,o=n.Hasher,i=t.algo,s=r.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),a=r.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),c=r.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),l=r.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),d=r.create([0,1518500249,1859775393,2400959708,2840853838]),h=r.create([1352829926,1548603684,1836072691,2053994217,0]),p=i.RIPEMD160=o.extend({_doReset:function(){this._hash=r.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(e,t){for(var n=0;n<16;n++){var r=t+n,o=e[r];e[r]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8)}var i,p,x,m,w,_,k,B,S,C,z,A=this._hash.words,R=d.words,E=h.words,q=s.words,H=a.words,D=c.words,T=l.words;for(_=i=A[0],k=p=A[1],B=x=A[2],S=m=A[3],C=w=A[4],n=0;n<80;n+=1)z=i+e[t+q[n]]|0,z+=n<16?u(p,x,m)+R[0]:n<32?f(p,x,m)+R[1]:n<48?g(p,x,m)+R[2]:n<64?y(p,x,m)+R[3]:v(p,x,m)+R[4],z=(z=b(z|=0,D[n]))+w|0,i=w,w=m,m=b(x,10),x=p,p=z,z=_+e[t+H[n]]|0,z+=n<16?v(k,B,S)+E[0]:n<32?y(k,B,S)+E[1]:n<48?g(k,B,S)+E[2]:n<64?f(k,B,S)+E[3]:u(k,B,S)+E[4],z=(z=b(z|=0,T[n]))+C|0,_=C,C=S,S=b(B,10),B=k,k=z;z=A[1]+x+S|0,A[1]=A[2]+m+C|0,A[2]=A[3]+w+_|0,A[3]=A[4]+i+k|0,A[4]=A[0]+p+B|0,A[0]=z},_doFinalize:function(){var e=this._data,t=e.words,n=8*this._nDataBytes,r=8*e.sigBytes;t[r>>>5]|=128<<24-r%32,t[14+(r+64>>>9<<4)]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8),e.sigBytes=4*(t.length+1),this._process();for(var o=this._hash,i=o.words,s=0;s<5;s++){var a=i[s];i[s]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8)}return o},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}});function u(e,t,n){return e^t^n}function f(e,t,n){return e&t|~e&n}function g(e,t,n){return(e|~t)^n}function y(e,t,n){return e&n|t&~n}function v(e,t,n){return e^(t|~n)}function b(e,t){return e<<t|e>>>32-t}t.RIPEMD160=o._createHelper(p),t.HmacRIPEMD160=o._createHmacHelper(p)}(),e.RIPEMD160));var e}(),N(),function(){return X?J.exports:(X=1,J.exports=(l=a(),q(),N(),t=(e=l).lib,n=t.Base,r=t.WordArray,o=e.algo,i=o.SHA256,s=o.HMAC,c=o.PBKDF2=n.extend({cfg:n.extend({keySize:4,hasher:i,iterations:25e4}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var n=this.cfg,o=s.create(n.hasher,e),i=r.create(),a=r.create([1]),c=i.words,l=a.words,d=n.keySize,h=n.iterations;c.length<d;){var p=o.update(t).finalize(a);o.reset();for(var u=p.words,f=u.length,g=p,y=1;y<h;y++){g=o.finalize(g),o.reset();for(var v=g.words,b=0;b<f;b++)u[b]^=v[b]}i.concat(p),l[0]++}return i.sigBytes=4*d,i}}),e.PBKDF2=function(e,t,n){return c.create(n).compute(e,t)},l.PBKDF2));var e,t,n,r,o,i,s,c,l}(),Z(),ee(),function(){return te?ne.exports:(te=1,ne.exports=(e=a(),ee(),e.mode.CFB=function(){var t=e.lib.BlockCipherMode.extend();function n(e,t,n,r){var o,i=this._iv;i?(o=i.slice(0),this._iv=void 0):o=this._prevBlock,r.encryptBlock(o,0);for(var s=0;s<n;s++)e[t+s]^=o[s]}return t.Encryptor=t.extend({processBlock:function(e,t){var r=this._cipher,o=r.blockSize;n.call(this,e,t,o,r),this._prevBlock=e.slice(t,t+o)}}),t.Decryptor=t.extend({processBlock:function(e,t){var r=this._cipher,o=r.blockSize,i=e.slice(t,t+o);n.call(this,e,t,o,r),this._prevBlock=i}}),t}(),e.mode.CFB));var e}(),function(){return re?oe.exports:(re=1,oe.exports=(n=a(),ee(),n.mode.CTR=(e=n.lib.BlockCipherMode.extend(),t=e.Encryptor=e.extend({processBlock:function(e,t){var n=this._cipher,r=n.blockSize,o=this._iv,i=this._counter;o&&(i=this._counter=o.slice(0),this._iv=void 0);var s=i.slice(0);n.encryptBlock(s,0),i[r-1]=i[r-1]+1|0;for(var a=0;a<r;a++)e[t+a]^=s[a]}}),e.Decryptor=t,e),n.mode.CTR));var e,t,n}(),ae(),function(){return ce?le.exports:(ce=1,le.exports=(n=a(),ee(),n.mode.OFB=(e=n.lib.BlockCipherMode.extend(),t=e.Encryptor=e.extend({processBlock:function(e,t){var n=this._cipher,r=n.blockSize,o=this._iv,i=this._keystream;o&&(i=this._keystream=o.slice(0),this._iv=void 0),n.encryptBlock(i,0);for(var s=0;s<r;s++)e[t+s]^=i[s]}}),e.Decryptor=t,e),n.mode.OFB));var e,t,n}(),function(){return de?he.exports:(de=1,he.exports=(t=a(),ee(),t.mode.ECB=((e=t.lib.BlockCipherMode.extend()).Encryptor=e.extend({processBlock:function(e,t){this._cipher.encryptBlock(e,t)}}),e.Decryptor=e.extend({processBlock:function(e,t){this._cipher.decryptBlock(e,t)}}),e),t.mode.ECB));var e,t}(),function(){return pe?ue.exports:(pe=1,ue.exports=(e=a(),ee(),e.pad.AnsiX923={pad:function(e,t){var n=e.sigBytes,r=4*t,o=r-n%r,i=n+o-1;e.clamp(),e.words[i>>>2]|=o<<24-i%4*8,e.sigBytes+=o},unpad:function(e){var t=255&e.words[e.sigBytes-1>>>2];e.sigBytes-=t}},e.pad.Ansix923));var e}(),function(){return fe?ge.exports:(fe=1,ge.exports=(e=a(),ee(),e.pad.Iso10126={pad:function(t,n){var r=4*n,o=r-t.sigBytes%r;t.concat(e.lib.WordArray.random(o-1)).concat(e.lib.WordArray.create([o<<24],1))},unpad:function(e){var t=255&e.words[e.sigBytes-1>>>2];e.sigBytes-=t}},e.pad.Iso10126));var e}(),function(){return ye?ve.exports:(ye=1,ve.exports=(e=a(),ee(),e.pad.Iso97971={pad:function(t,n){t.concat(e.lib.WordArray.create([2147483648],1)),e.pad.ZeroPadding.pad(t,n)},unpad:function(t){e.pad.ZeroPadding.unpad(t),t.sigBytes--}},e.pad.Iso97971));var e}(),function(){return be?xe.exports:(be=1,xe.exports=(e=a(),ee(),e.pad.ZeroPadding={pad:function(e,t){var n=4*t;e.clamp(),e.sigBytes+=n-(e.sigBytes%n||n)},unpad:function(e){var t=e.words,n=e.sigBytes-1;for(n=e.sigBytes-1;n>=0;n--)if(t[n>>>2]>>>24-n%4*8&255){e.sigBytes=n+1;break}}},e.pad.ZeroPadding));var e}(),function(){return me?we.exports:(me=1,we.exports=(e=a(),ee(),e.pad.NoPadding={pad:function(){},unpad:function(){}},e.pad.NoPadding));var e}(),function(){return _e?ke.exports:(_e=1,ke.exports=(r=a(),ee(),t=(e=r).lib.CipherParams,n=e.enc.Hex,e.format.Hex={stringify:function(e){return e.ciphertext.toString(n)},parse:function(e){var r=n.parse(e);return t.create({ciphertext:r})}},r.format.Hex));var e,t,n,r}(),function(){return Be?Se.exports:(Be=1,Se.exports=(e=a(),x(),S(),Z(),ee(),function(){var t=e,n=t.lib.BlockCipher,r=t.algo,o=[],i=[],s=[],a=[],c=[],l=[],d=[],h=[],p=[],u=[];!function(){for(var e=[],t=0;t<256;t++)e[t]=t<128?t<<1:t<<1^283;var n=0,r=0;for(t=0;t<256;t++){var f=r^r<<1^r<<2^r<<3^r<<4;f=f>>>8^255&f^99,o[n]=f,i[f]=n;var g=e[n],y=e[g],v=e[y],b=257*e[f]^16843008*f;s[n]=b<<24|b>>>8,a[n]=b<<16|b>>>16,c[n]=b<<8|b>>>24,l[n]=b,b=16843009*v^65537*y^257*g^16843008*n,d[f]=b<<24|b>>>8,h[f]=b<<16|b>>>16,p[f]=b<<8|b>>>24,u[f]=b,n?(n=g^e[e[e[v^g]]],r^=e[e[r]]):n=r=1}}();var f=[0,1,2,4,8,16,32,64,128,27,54],g=r.AES=n.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var e=this._keyPriorReset=this._key,t=e.words,n=e.sigBytes/4,r=4*((this._nRounds=n+6)+1),i=this._keySchedule=[],s=0;s<r;s++)s<n?i[s]=t[s]:(l=i[s-1],s%n?n>6&&s%n==4&&(l=o[l>>>24]<<24|o[l>>>16&255]<<16|o[l>>>8&255]<<8|o[255&l]):(l=o[(l=l<<8|l>>>24)>>>24]<<24|o[l>>>16&255]<<16|o[l>>>8&255]<<8|o[255&l],l^=f[s/n|0]<<24),i[s]=i[s-n]^l);for(var a=this._invKeySchedule=[],c=0;c<r;c++){if(s=r-c,c%4)var l=i[s];else l=i[s-4];a[c]=c<4||s<=4?l:d[o[l>>>24]]^h[o[l>>>16&255]]^p[o[l>>>8&255]]^u[o[255&l]]}}},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,s,a,c,l,o)},decryptBlock:function(e,t){var n=e[t+1];e[t+1]=e[t+3],e[t+3]=n,this._doCryptBlock(e,t,this._invKeySchedule,d,h,p,u,i),n=e[t+1],e[t+1]=e[t+3],e[t+3]=n},_doCryptBlock:function(e,t,n,r,o,i,s,a){for(var c=this._nRounds,l=e[t]^n[0],d=e[t+1]^n[1],h=e[t+2]^n[2],p=e[t+3]^n[3],u=4,f=1;f<c;f++){var g=r[l>>>24]^o[d>>>16&255]^i[h>>>8&255]^s[255&p]^n[u++],y=r[d>>>24]^o[h>>>16&255]^i[p>>>8&255]^s[255&l]^n[u++],v=r[h>>>24]^o[p>>>16&255]^i[l>>>8&255]^s[255&d]^n[u++],b=r[p>>>24]^o[l>>>16&255]^i[d>>>8&255]^s[255&h]^n[u++];l=g,d=y,h=v,p=b}g=(a[l>>>24]<<24|a[d>>>16&255]<<16|a[h>>>8&255]<<8|a[255&p])^n[u++],y=(a[d>>>24]<<24|a[h>>>16&255]<<16|a[p>>>8&255]<<8|a[255&l])^n[u++],v=(a[h>>>24]<<24|a[p>>>16&255]<<16|a[l>>>8&255]<<8|a[255&d])^n[u++],b=(a[p>>>24]<<24|a[l>>>16&255]<<16|a[d>>>8&255]<<8|a[255&h])^n[u++],e[t]=g,e[t+1]=y,e[t+2]=v,e[t+3]=b},keySize:8});t.AES=n._createHelper(g)}(),e.AES));var e}(),Ae(),function(){return Re?Ee.exports:(Re=1,Ee.exports=(e=a(),x(),S(),Z(),ee(),function(){var t=e,n=t.lib.StreamCipher,r=t.algo,o=r.RC4=n.extend({_doReset:function(){for(var e=this._key,t=e.words,n=e.sigBytes,r=this._S=[],o=0;o<256;o++)r[o]=o;o=0;for(var i=0;o<256;o++){var s=o%n,a=t[s>>>2]>>>24-s%4*8&255;i=(i+r[o]+a)%256;var c=r[o];r[o]=r[i],r[i]=c}this._i=this._j=0},_doProcessBlock:function(e,t){e[t]^=i.call(this)},keySize:8,ivSize:0});function i(){for(var e=this._S,t=this._i,n=this._j,r=0,o=0;o<4;o++){n=(n+e[t=(t+1)%256])%256;var i=e[t];e[t]=e[n],e[n]=i,r|=e[(e[t]+e[n])%256]<<24-8*o}return this._i=t,this._j=n,r}t.RC4=n._createHelper(o);var s=r.RC4Drop=o.extend({cfg:o.cfg.extend({drop:192}),_doReset:function(){o._doReset.call(this);for(var e=this.cfg.drop;e>0;e--)i.call(this)}});t.RC4Drop=n._createHelper(s)}(),e.RC4));var e}(),function(){return qe?He.exports:(qe=1,He.exports=(e=a(),x(),S(),Z(),ee(),function(){var t=e,n=t.lib.StreamCipher,r=t.algo,o=[],i=[],s=[],a=r.Rabbit=n.extend({_doReset:function(){for(var e=this._key.words,t=this.cfg.iv,n=0;n<4;n++)e[n]=16711935&(e[n]<<8|e[n]>>>24)|4278255360&(e[n]<<24|e[n]>>>8);var r=this._X=[e[0],e[3]<<16|e[2]>>>16,e[1],e[0]<<16|e[3]>>>16,e[2],e[1]<<16|e[0]>>>16,e[3],e[2]<<16|e[1]>>>16],o=this._C=[e[2]<<16|e[2]>>>16,4294901760&e[0]|65535&e[1],e[3]<<16|e[3]>>>16,4294901760&e[1]|65535&e[2],e[0]<<16|e[0]>>>16,4294901760&e[2]|65535&e[3],e[1]<<16|e[1]>>>16,4294901760&e[3]|65535&e[0]];for(this._b=0,n=0;n<4;n++)c.call(this);for(n=0;n<8;n++)o[n]^=r[n+4&7];if(t){var i=t.words,s=i[0],a=i[1],l=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),d=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),h=l>>>16|4294901760&d,p=d<<16|65535&l;for(o[0]^=l,o[1]^=h,o[2]^=d,o[3]^=p,o[4]^=l,o[5]^=h,o[6]^=d,o[7]^=p,n=0;n<4;n++)c.call(this)}},_doProcessBlock:function(e,t){var n=this._X;c.call(this),o[0]=n[0]^n[5]>>>16^n[3]<<16,o[1]=n[2]^n[7]>>>16^n[5]<<16,o[2]=n[4]^n[1]>>>16^n[7]<<16,o[3]=n[6]^n[3]>>>16^n[1]<<16;for(var r=0;r<4;r++)o[r]=16711935&(o[r]<<8|o[r]>>>24)|4278255360&(o[r]<<24|o[r]>>>8),e[t+r]^=o[r]},blockSize:4,ivSize:2});function c(){for(var e=this._X,t=this._C,n=0;n<8;n++)i[n]=t[n];for(t[0]=t[0]+1295307597+this._b|0,t[1]=t[1]+3545052371+(t[0]>>>0<i[0]>>>0?1:0)|0,t[2]=t[2]+886263092+(t[1]>>>0<i[1]>>>0?1:0)|0,t[3]=t[3]+1295307597+(t[2]>>>0<i[2]>>>0?1:0)|0,t[4]=t[4]+3545052371+(t[3]>>>0<i[3]>>>0?1:0)|0,t[5]=t[5]+886263092+(t[4]>>>0<i[4]>>>0?1:0)|0,t[6]=t[6]+1295307597+(t[5]>>>0<i[5]>>>0?1:0)|0,t[7]=t[7]+3545052371+(t[6]>>>0<i[6]>>>0?1:0)|0,this._b=t[7]>>>0<i[7]>>>0?1:0,n=0;n<8;n++){var r=e[n]+t[n],o=65535&r,a=r>>>16,c=((o*o>>>17)+o*a>>>15)+a*a,l=((4294901760&r)*r|0)+((65535&r)*r|0);s[n]=c^l}e[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,e[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,e[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,e[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,e[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,e[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,e[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,e[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}t.Rabbit=n._createHelper(a)}(),e.Rabbit));var e}(),function(){return De?Te.exports:(De=1,Te.exports=(e=a(),x(),S(),Z(),ee(),function(){var t=e,n=t.lib.StreamCipher,r=t.algo,o=[],i=[],s=[],a=r.RabbitLegacy=n.extend({_doReset:function(){var e=this._key.words,t=this.cfg.iv,n=this._X=[e[0],e[3]<<16|e[2]>>>16,e[1],e[0]<<16|e[3]>>>16,e[2],e[1]<<16|e[0]>>>16,e[3],e[2]<<16|e[1]>>>16],r=this._C=[e[2]<<16|e[2]>>>16,4294901760&e[0]|65535&e[1],e[3]<<16|e[3]>>>16,4294901760&e[1]|65535&e[2],e[0]<<16|e[0]>>>16,4294901760&e[2]|65535&e[3],e[1]<<16|e[1]>>>16,4294901760&e[3]|65535&e[0]];this._b=0;for(var o=0;o<4;o++)c.call(this);for(o=0;o<8;o++)r[o]^=n[o+4&7];if(t){var i=t.words,s=i[0],a=i[1],l=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),d=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),h=l>>>16|4294901760&d,p=d<<16|65535&l;for(r[0]^=l,r[1]^=h,r[2]^=d,r[3]^=p,r[4]^=l,r[5]^=h,r[6]^=d,r[7]^=p,o=0;o<4;o++)c.call(this)}},_doProcessBlock:function(e,t){var n=this._X;c.call(this),o[0]=n[0]^n[5]>>>16^n[3]<<16,o[1]=n[2]^n[7]>>>16^n[5]<<16,o[2]=n[4]^n[1]>>>16^n[7]<<16,o[3]=n[6]^n[3]>>>16^n[1]<<16;for(var r=0;r<4;r++)o[r]=16711935&(o[r]<<8|o[r]>>>24)|4278255360&(o[r]<<24|o[r]>>>8),e[t+r]^=o[r]},blockSize:4,ivSize:2});function c(){for(var e=this._X,t=this._C,n=0;n<8;n++)i[n]=t[n];for(t[0]=t[0]+1295307597+this._b|0,t[1]=t[1]+3545052371+(t[0]>>>0<i[0]>>>0?1:0)|0,t[2]=t[2]+886263092+(t[1]>>>0<i[1]>>>0?1:0)|0,t[3]=t[3]+1295307597+(t[2]>>>0<i[2]>>>0?1:0)|0,t[4]=t[4]+3545052371+(t[3]>>>0<i[3]>>>0?1:0)|0,t[5]=t[5]+886263092+(t[4]>>>0<i[4]>>>0?1:0)|0,t[6]=t[6]+1295307597+(t[5]>>>0<i[5]>>>0?1:0)|0,t[7]=t[7]+3545052371+(t[6]>>>0<i[6]>>>0?1:0)|0,this._b=t[7]>>>0<i[7]>>>0?1:0,n=0;n<8;n++){var r=e[n]+t[n],o=65535&r,a=r>>>16,c=((o*o>>>17)+o*a>>>15)+a*a,l=((4294901760&r)*r|0)+((65535&r)*r|0);s[n]=c^l}e[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,e[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,e[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,e[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,e[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,e[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,e[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,e[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}t.RabbitLegacy=n._createHelper(a)}(),e.RabbitLegacy));var e}(),Me())));class Ne{constructor(){this.requests=new Map,this.listeners=[],this.decryptConfig={enabled:!1},window.__originalFetch=window.fetch,this.interceptXHR(),this.interceptFetch()}enableDecryption(e){this.decryptConfig.enabled=!0,e?.keyExtractor&&(this.decryptConfig.keyExtractor=e.keyExtractor),e?.slkExtractor&&(this.decryptConfig.slkExtractor=e.slkExtractor),void 0!==e?.autoFetchKeys&&(this.decryptConfig.autoFetchKeys=e.autoFetchKeys),e?.keyApiUrl&&(this.decryptConfig.keyApiUrl=e.keyApiUrl)}addListener(e){this.listeners.push(e)}removeListener(e){const t=this.listeners.indexOf(e);t>-1&&this.listeners.splice(t,1)}getRequests(){return Array.from(this.requests.values()).sort((e,t)=>t.timestamp-e.timestamp)}clearRequests(){this.requests.clear()}generateRequestId(){return Math.random().toString(36).substr(2,9)}isInternalUrl(e){return e.includes("/api/dokv/storage")||e.includes("/api/share")}notifyListeners(e){this.listeners.forEach(t=>{try{t(e)}catch(n){}})}async tryDecrypt(e,t){if(!this.decryptConfig.enabled||!e)return null;try{let r="",o="";if(t.cid&&!1!==this.decryptConfig.autoFetchKeys)try{const e=this.decryptConfig.keyApiUrl||"https://gw-card-pay.buyacard.cc/ip/getSK",n={cid:t.cid,client:t.client||"S_WEB",device:t.device||"Web",language:t.language||"CN"},o=window.__originalFetch||window.fetch,i=await o(e,{headers:n}),s=await i.json();if(s.success&&s.data){const e=String(s.data);e.length>=9&&(r=e.charAt(2)+e.charAt(5)+e.charAt(8))}}catch(n){}!r&&this.decryptConfig.keyExtractor?r=this.decryptConfig.keyExtractor(t):r||(r=t.decryptKey||t.keys||t.cid||""),o=this.decryptConfig.slkExtractor?this.decryptConfig.slkExtractor(t):t.decryptSlk||t.slk||"";const i=r+o;if(i){let t=e,r=!1;if("object"==typeof e&&null!==e&&e.data&&"string"==typeof e.data)t=e.data,r=!0;else if("string"==typeof e)try{const n=JSON.parse(e);n.data&&"string"==typeof n.data&&(t=n.data,r=!0)}catch{}const o="string"==typeof t?t:JSON.stringify(t),s=function(e,t){if(!e||e.startsWith("{")||e.startsWith("["))try{return JSON.parse(e)}catch{return e}if(window.decrypt&&t)try{const n=window.decrypt(e,t);if(n&&n!==e&&!n.includes("�"))try{return JSON.parse(n)}catch{if(n.length>0)return n}}catch(n){}const r=[t,"thisisakey123456","VITE_CRYPTO_KEY"].filter(Boolean);for(const o of r)if(o)try{const t=Ke.enc.Utf8.parse(o.padEnd(16,"0").slice(0,16)),n=Ke.enc.Utf8.parse(o.padEnd(16,"0").slice(0,16)),r=Ke.AES.decrypt(e,t,{iv:n,mode:Ke.mode.CBC,padding:Ke.pad.Pkcs7}).toString(Ke.enc.Utf8);if(r)try{return JSON.parse(r)}catch{return r}}catch(n){}try{const t=atob(e);try{return JSON.parse(t)}catch{return t}}catch{}return e}(o,i);if(s&&s!==o)return s}}catch(r){}return null}interceptXHR(){const e=window.XMLHttpRequest,t=this;window.XMLHttpRequest=function(...n){const r=new e(...n),o=t.generateRequestId();let i="",s="",a={};const c=Date.now();let l=!1;const d=r.open;r.open=function(e,n,...r){return i=e.toUpperCase(),s=n,l=t.isInternalUrl(s),d.apply(this,[e,n,...r])};const h=r.setRequestHeader;r.setRequestHeader=function(e,t){return a[e]=t,h.call(this,e,t)};const p=r.send;return r.send=function(e){if(l)return p.call(this,e);const n={id:o,url:s,method:i,headers:{...a},requestBody:e,timestamp:c};return e&&t.tryDecrypt(e,a).then(e=>{null!==e&&(n.decryptedRequest=e,t.requests.set(o,n),t.notifyListeners(n))}).catch(e=>{}),t.requests.set(o,n),t.notifyListeners(n),p.call(this,e)},r.addEventListener("readystatechange",function(){if(4===r.readyState&&!l){const e=Date.now(),n=t.requests.get(o);if(n){n.status=r.status,n.statusText=r.statusText,n.duration=e-c;const i={},s=r.getAllResponseHeaders();s&&s.split("\r\n").forEach(e=>{const t=e.split(": ");2===t.length&&(i[t[0]]=t[1])}),n.responseHeaders=i;if(null!==r.responseText&&void 0!==r.responseText&&""!==r.responseText)try{n.responseBody=JSON.parse(r.responseText)}catch{n.responseBody=r.responseText}else n.responseBody=null;t.requests.set(o,n),t.notifyListeners(n),n.responseBody&&t.tryDecrypt(n.responseBody,{...a,...i}).then(e=>{null!==e&&(n.decryptedResponse=e,t.requests.set(o,n),t.notifyListeners(n))}).catch(e=>{})}}}),r},window.XMLHttpRequest.prototype=e.prototype}interceptFetch(){const e=window.__originalFetch||window.fetch,t=this;window.fetch=async function(n,r){const o=t.generateRequestId(),i=Date.now(),s="string"==typeof n?n:n instanceof URL?n.toString():n.url,a=(r?.method||"GET").toUpperCase();if(t.isInternalUrl(s))return e.call(this,n,r);const c={};r?.headers&&(r.headers instanceof Headers?r.headers.forEach((e,t)=>{c[t]=e}):Array.isArray(r.headers)?r.headers.forEach(([e,t])=>{c[e]=t}):Object.entries(r.headers).forEach(([e,t])=>{c[e]=t}));let l=null;if(r?.body)if("string"==typeof r.body)try{l=JSON.parse(r.body)}catch{l=r.body}else l=r.body;const d={id:o,url:s,method:a,headers:{...c},requestBody:l,timestamp:i};l&&t.tryDecrypt(l,c).then(e=>{null!==e&&(d.decryptedRequest=e,t.requests.set(o,d),t.notifyListeners(d))}).catch(e=>{}),t.requests.set(o,d),t.notifyListeners(d);try{const s=await e.call(this,n,r),a=Date.now(),l=s.clone(),d=t.requests.get(o);if(d){d.status=s.status,d.statusText=s.statusText,d.duration=a-i;const e={};s.headers.forEach((t,n)=>{e[n]=t}),d.responseHeaders=e;try{const n=await l.text();try{d.responseBody=JSON.parse(n)}catch{d.responseBody=n}t.requests.set(o,d),t.notifyListeners(d),d.responseBody&&t.tryDecrypt(d.responseBody,{...c,...e}).then(e=>{null!==e&&(d.decryptedResponse=e,t.requests.set(o,d),t.notifyListeners(d))}).catch(e=>{})}catch(h){d.error=`Failed to read response: ${h}`,t.requests.set(o,d),t.notifyListeners(d)}}return s}catch(h){const e=Date.now(),n=t.requests.get(o);throw n&&(n.error=h instanceof Error?h.message:String(h),n.duration=e-i,t.requests.set(o,n),t.notifyListeners(n)),h}}}}class Xe{constructor(){this.loaded=!1,this.loading=!1}async loadWasm(e,t){if("function"==typeof window.decrypt)return this.loaded=!0,!0;if(this.loaded)return!0;if(this.loading)return new Promise(e=>{const t=()=>{this.loaded||!this.loading?e(this.loaded):setTimeout(t,100)};t()});this.loading=!0;try{const i=[e,"/mimlib.wasm","/dist/mimlib.wasm","/assets/mimlib.wasm","https://gw-card-pay.buyacard.cc/mimlib.wasm"].filter(Boolean),s=[t,"/wasm_exec.js","/dist/wasm_exec.js","/assets/wasm_exec.js","https://gw-card-pay.buyacard.cc/wasm_exec.js"].filter(Boolean);let a=!1;for(const e of s)try{if(await this.loadScript(e),void 0!==window.Go){a=!0;break}}catch(n){continue}if(!a)throw new Error("Unable to load wasm_exec.js from any path");if(void 0===window.Go)throw new Error("Go WebAssembly runtime not available");const c=new window.Go;let l=null;for(const e of i)try{if(!WebAssembly.instantiateStreaming){const t=await fetch(e).then(e=>e.arrayBuffer());l=await WebAssembly.instantiate(t,c.importObject);break}try{l=await WebAssembly.instantiateStreaming(fetch(e),c.importObject);break}catch(r){const t=await fetch(e).then(e=>e.arrayBuffer());l=await WebAssembly.instantiate(t,c.importObject);break}}catch(o){continue}if(!l)throw new Error("Unable to load WebAssembly from any path");return c.run(l.instance),await new Promise(e=>setTimeout(e,100)),"function"==typeof window.decrypt&&(this.loaded=!0,!0)}catch(o){return!1}finally{this.loading=!1}}loadScript(e){return new Promise((t,n)=>{if(document.querySelector(`script[src="${e}"]`))return void t();const r=document.createElement("script");r.src=e,r.type="text/javascript",r.onload=()=>t(),r.onerror=t=>n(new Error(`Failed to load script: ${e}`)),document.head.appendChild(r)})}isLoaded(){return this.loaded}isLoading(){return this.loading}isDecryptAvailable(){return this.loaded&&"function"==typeof window.decrypt}isEncryptAvailable(){return this.loaded&&"function"==typeof window.encrypt}}function Je(e){return JSON.stringify(e,null,2)}async function Ge(e){try{const t=function(e){let t=`curl '${e.url}'`;"GET"!==e.method&&(t+=` -X ${e.method}`);e.headers&&Object.entries(e.headers).forEach(([e,n])=>{t+=` -H '${e}: ${n}'`});if(e.requestBody){const n="string"==typeof e.requestBody?e.requestBody:JSON.stringify(e.requestBody);t+=` --data '${n}'`}return t}(e),n={curl:t,response:e.responseBody||null,timestamp:Date.now(),slk:e.headers?.slk||"",debuggerData:{url:e.url,method:e.method,headers:e.headers,status:e.status,statusText:e.statusText,duration:e.duration,responseHeaders:e.responseHeaders,decryptedRequest:e.decryptedRequest,decryptedResponse:e.decryptedResponse,error:e.error,creator:"PWTK Network Debugger by Leo (@leeguoo)",version:"1.2.0"}},r=window.__originalFetch||window.fetch,o=await r("https://curl.bwg.leeguoo.com/api/share",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({data:n})}),i=await o.json();if(i.shareId){return`https://curl.bwg.leeguoo.com/share/${i.shareId}`}throw new Error(i.error||"创建分享失败")}catch(t){throw t}}class Ye{constructor(e,t={}){this.isDragging=!1,this.isResizing=!1,this.dragStart={x:0,y:0},this.currentTab="network",this.consoleHistory=[],this.requestsCache=[],this.interceptor=e,this.config={position:"bottom-right",theme:"dark",minimized:!1,showConsole:!0,...t},this.createPanel(),this.bindEvents(),this.startListening()}createPanel(){if(!document.getElementById("network-debugger-styles")){const e=document.createElement("style");e.id="network-debugger-styles",e.textContent="\n/* NetworkDebugger 样式 */\n#network-debugger-panel {\n position: fixed;\n z-index: 999999;\n background: #1a1a1a;\n color: #ffffff;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n font-size: 12px;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);\n border-radius: 8px;\n overflow: hidden;\n max-width: 90vw;\n max-height: 80vh;\n transition: all 0.3s ease;\n}\n\n#network-debugger-panel.minimized {\n height: 40px !important;\n overflow: hidden;\n width: auto !important;\n min-width: 200px;\n}\n\n#network-debugger-panel.minimized .debugger-content {\n display: none;\n}\n\n#network-debugger-panel.minimized .resize-handle {\n display: none;\n}\n\n#network-debugger-panel.bottom-right {\n bottom: 20px;\n right: 20px;\n width: 400px;\n height: 300px;\n}\n\n#network-debugger-panel.bottom-left {\n bottom: 20px;\n left: 20px;\n width: 400px;\n height: 300px;\n}\n\n#network-debugger-panel.top-right {\n top: 20px;\n right: 20px;\n width: 400px;\n height: 300px;\n}\n\n#network-debugger-panel.top-left {\n top: 20px;\n left: 20px;\n width: 400px;\n height: 300px;\n}\n\n#network-debugger-panel.fullscreen {\n top: 0;\n left: 0;\n width: 100vw !important;\n height: 100vh !important;\n border-radius: 0;\n}\n\n.debugger-header {\n background: #333;\n padding: 8px 12px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n cursor: move;\n user-select: none;\n border-bottom: 1px solid #444;\n}\n\n.debugger-title {\n font-weight: bold;\n color: #4CAF50;\n font-size: 14px;\n}\n\n.debugger-controls {\n display: flex;\n gap: 8px;\n}\n\n.debugger-btn {\n background: none;\n border: none;\n color: #fff;\n padding: 4px 8px;\n border-radius: 4px;\n cursor: pointer;\n font-size: 12px;\n transition: background-color 0.2s;\n}\n\n.debugger-btn:hover {\n background: #555;\n}\n\n.debugger-btn.active {\n background: #4CAF50;\n color: #000;\n}\n\n.debugger-content {\n height: calc(100% - 40px);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n.debugger-tabs {\n display: flex;\n background: #2a2a2a;\n border-bottom: 1px solid #444;\n}\n\n.debugger-tab {\n padding: 8px 16px;\n cursor: pointer;\n border: none;\n background: none;\n color: #ccc;\n font-size: 12px;\n transition: all 0.2s;\n border-bottom: 2px solid transparent;\n}\n\n.debugger-tab:hover {\n color: #fff;\n background: #3a3a3a;\n}\n\n.debugger-tab.active {\n color: #4CAF50;\n border-bottom-color: #4CAF50;\n background: #333;\n}\n\n.debugger-panel-content {\n flex: 1;\n overflow: auto;\n padding: 12px;\n}\n\n.request-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.request-item {\n background: #2a2a2a;\n border: 1px solid #444;\n border-radius: 6px;\n padding: 10px;\n cursor: pointer;\n transition: all 0.2s;\n position: relative;\n}\n\n.request-item:hover {\n background: #333;\n border-color: #666;\n}\n\n.request-item.expanded {\n background: #333;\n border-color: #4CAF50;\n}\n\n.request-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 4px;\n}\n\n.request-method {\n padding: 2px 8px;\n border-radius: 4px;\n font-weight: bold;\n font-size: 10px;\n text-transform: uppercase;\n min-width: 40px;\n text-align: center;\n}\n\n.method-get { background: #4CAF50; color: #000; }\n.method-post { background: #2196F3; color: #fff; }\n.method-put { background: #FF9800; color: #000; }\n.method-delete { background: #F44336; color: #fff; }\n.method-patch { background: #9C27B0; color: #fff; }\n\n.request-url {\n flex: 1;\n margin: 0 8px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: #fff;\n font-size: 11px;\n}\n\n.request-status {\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 10px;\n min-width: 35px;\n text-align: center;\n}\n\n.status-2xx { background: #4CAF50; color: #000; }\n.status-3xx { background: #FF9800; color: #000; }\n.status-4xx { background: #F44336; color: #fff; }\n.status-5xx { background: #9C27B0; color: #fff; }\n.status-error { background: #F44336; color: #fff; }\n\n.request-info {\n display: flex;\n justify-content: space-between;\n font-size: 10px;\n color: #999;\n}\n\n.request-details {\n margin-top: 12px;\n border-top: 1px solid #444;\n padding-top: 12px;\n display: none;\n}\n\n/* 默认折叠headers */\n.request-details .detail-section.collapsible {\n /* 默认折叠状态 */\n}\n\n.request-details .detail-section.collapsible:not(.expanded) .detail-content {\n display: none;\n}\n\n.request-details .detail-section.collapsible:not(.expanded) .collapse-icon {\n transform: rotate(-90deg);\n}\n\n.request-item.expanded .request-details {\n display: block;\n}\n\n.detail-section {\n margin-bottom: 16px;\n}\n\n.detail-title {\n font-weight: bold;\n color: #4CAF50;\n margin-bottom: 8px;\n font-size: 11px;\n text-transform: uppercase;\n border-bottom: 1px solid #444;\n padding-bottom: 4px;\n}\n\n.detail-title.highlight {\n color: #FFD700;\n font-size: 12px;\n background: rgba(255, 215, 0, 0.1);\n padding: 6px 8px;\n border-radius: 4px;\n border-bottom: 2px solid #FFD700;\n}\n\n.detail-title.clickable {\n cursor: pointer;\n user-select: none;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.detail-title.clickable:hover {\n background: rgba(76, 175, 80, 0.1);\n}\n\n.collapse-icon {\n display: inline-block;\n transition: transform 0.2s;\n font-size: 10px;\n}\n\n.detail-section.collapsible {\n position: relative;\n}\n\n.detail-section.collapsible.collapsed .detail-content {\n display: none;\n}\n\n.detail-section.collapsible.collapsed .collapse-icon {\n transform: rotate(-90deg);\n}\n\n.detail-content {\n background: #222;\n padding: 8px;\n border-radius: 4px;\n max-height: 200px;\n overflow: auto;\n}\n\n.json-content {\n white-space: pre-wrap;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n font-size: 11px;\n line-height: 1.4;\n}\n\n.headers-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 10px;\n}\n\n.headers-table th,\n.headers-table td {\n padding: 4px 8px;\n text-align: left;\n border-bottom: 1px solid #444;\n}\n\n.headers-table th {\n background: #333;\n color: #4CAF50;\n font-weight: bold;\n}\n\n.headers-table td {\n color: #ccc;\n}\n\n.decrypted-badge {\n background: #4CAF50;\n color: #000;\n padding: 2px 6px;\n border-radius: 3px;\n font-size: 9px;\n margin-left: 8px;\n font-weight: bold;\n}\n\n.error-badge {\n background: #F44336;\n color: #fff;\n padding: 2px 6px;\n border-radius: 3px;\n font-size: 9px;\n margin-left: 8px;\n font-weight: bold;\n}\n\n.share-btn {\n background: #2196F3;\n color: #fff;\n border: none;\n padding: 4px 10px;\n border-radius: 3px;\n font-size: 11px;\n margin-left: 8px;\n cursor: pointer;\n transition: all 0.2s;\n white-space: nowrap;\n}\n\n.share-btn:hover {\n background: #1976D2;\n transform: scale(1.1);\n}\n\n.share-btn:active {\n transform: scale(0.95);\n}\n\n.console-content {\n background: #000;\n color: #0f0;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n font-size: 11px;\n line-height: 1.4;\n height: 100%;\n overflow: auto;\n padding: 8px;\n}\n\n.console-input {\n display: flex;\n align-items: center;\n background: #333;\n padding: 8px;\n border-top: 1px solid #444;\n}\n\n.console-prompt {\n color: #4CAF50;\n margin-right: 8px;\n font-weight: bold;\n}\n\n.console-cmd {\n flex: 1;\n background: none;\n border: none;\n color: #fff;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n font-size: 12px;\n outline: none;\n}\n\n.tools-section {\n padding: 12px;\n background: #2a2a2a;\n border-bottom: 1px solid #444;\n}\n\n.tool-buttons {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.tool-btn {\n padding: 6px 12px;\n background: #4CAF50;\n color: #000;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 11px;\n font-weight: bold;\n transition: background-color 0.2s;\n}\n\n.tool-btn:hover {\n background: #45a049;\n}\n\n.tool-btn:disabled {\n background: #666;\n color: #999;\n cursor: not-allowed;\n}\n\n@media (max-width: 600px) {\n #network-debugger-panel.bottom-right,\n #network-debugger-panel.bottom-left,\n #network-debugger-panel.top-right,\n #network-debugger-panel.top-left {\n width: calc(100vw - 20px) !important;\n left: 10px !important;\n right: auto !important;\n }\n}\n\n::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n}\n\n::-webkit-scrollbar-track {\n background: #333;\n}\n\n::-webkit-scrollbar-thumb {\n background: #666;\n border-radius: 3px;\n}\n\n::-webkit-scrollbar-thumb:hover {\n background: #888;\n}\n\n.resize-handle {\n position: absolute;\n background: transparent;\n}\n\n.resize-handle.n {\n top: -3px;\n left: 0;\n right: 0;\n height: 6px;\n cursor: ns-resize;\n}\n\n.resize-handle.s {\n bottom: -3px;\n left: 0;\n right: 0;\n height: 6px;\n cursor: ns-resize;\n}\n\n.resize-handle.e {\n top: 0;\n right: -3px;\n bottom: 0;\n width: 6px;\n cursor: ew-resize;\n}\n\n.resize-handle.w {\n top: 0;\n left: -3px;\n bottom: 0;\n width: 6px;\n cursor: ew-resize;\n}\n\n.resize-handle.ne {\n top: -3px;\n right: -3px;\n width: 12px;\n height: 12px;\n cursor: ne-resize;\n}\n\n.resize-handle.nw {\n top: -3px;\n left: -3px;\n width: 12px;\n height: 12px;\n cursor: nw-resize;\n}\n\n.resize-handle.se {\n bottom: -3px;\n right: -3px;\n width: 12px;\n height: 12px;\n cursor: se-resize;\n}\n\n.resize-handle.sw {\n bottom: -3px;\n left: -3px;\n width: 12px;\n height: 12px;\n cursor: sw-resize;\n}\n",document.head.appendChild(e)}this.container=document.createElement("div"),this.container.id="network-debugger-panel",this.container.className=`${this.config.position} ${this.config.minimized?"minimized":""}`,this.container.innerHTML=`\n <div class="debugger-header">\n <div class="debugger-title">🔓 ${this.config.minimized?"PWTK":"PWTK 解密小工具"} <span style="font-size: 10px; opacity: 0.7;">by Leo</span></div>\n <div class="debugger-controls">\n ${this.config.minimized?"":'<button class="debugger-btn" data-action="clear" title="清空">🗑️</button>'}\n ${this.config.minimized?"":'<button class="debugger-btn" data-action="export" title="导出">💾</button>'}\n <button class="debugger-btn" data-action="minimize" title="${this.config.minimized?"展开":"最小化"}">${this.config.minimized?"📖":"📕"}</button>\n ${this.config.minimized?"":'<button class="debugger-btn" data-action="fullscreen" title="全屏">⛶</button>'}\n <button class="debugger-btn" data-action="close" title="关闭">✕</button>\n </div>\n </div>\n <div class="debugger-content">\n <div class="debugger-tabs">\n <button class="debugger-tab active" data-tab="network">网络</button>\n ${this.config.showConsole?'<button class="debugger-tab" data-tab="console">控制台</button>':""}\n <button class="debugger-tab" data-tab="tools">工具</button>\n <button class="debugger-tab" data-tab="about">关于</button>\n </div>\n <div class="debugger-panel-content">\n <div class="network-panel" data-panel="network">\n <div class="request-list"></div>\n </div>\n ${this.config.showConsole?'\n <div class="console-panel" data-panel="console" style="display: none;">\n <div class="console-content"></div>\n <div class="console-input">\n <span class="console-prompt">></span>\n <input class="console-cmd" placeholder="输入 JavaScript 代码..." />\n </div>\n </div>\n ':""}\n <div class="tools-panel" data-panel="tools" style="display: none;">\n <div class="tools-section">\n <div class="tool-buttons">\n <button class="tool-btn" data-tool="parse-curl">解析 cURL</button>\n <button class="tool-btn" data-tool="export-har">导出 HAR</button>\n <button class="tool-btn" data-tool="cors-test">CORS 测试</button>\n <button class="tool-btn" data-tool="decrypt-test">解密测试</button>\n </div>\n </div>\n <div class="tools-content">\n <textarea placeholder="在这里粘贴 cURL 命令或输入要测试的数据..." style="width: 100%; height: 200px; background: #222; color: #fff; border: 1px solid #444; padding: 8px; font-family: monospace;"></textarea>\n </div>\n </div>\n <div class="about-panel" data-panel="about" style="display: none;">\n <div style="padding: 20px; color: #fff; text-align: center;">\n <h2 style="margin: 0 0 20px 0;">🔓 PWTK 解密小工具</h2>\n <p style="margin: 10px 0;">Version: 1.2.14</p>\n <p style="margin: 10px 0;">👨‍💻 Created by <strong>Leo (@leeguoo)</strong></p>\n <p style="margin: 10px 0;">📧 技术支持:请联系 Leo</p>\n <p style="margin: 10px 0;">🌐 分享服务:curl.bwg.leeguoo.com</p>\n <div style="margin-top: 20px; padding: 15px; background: #333; border-radius: 8px;">\n <p style="margin: 5px 0; font-size: 12px;">本工具专为 PWTK 项目开发</p>\n <p style="margin: 5px 0; font-size: 12px;">提供网络请求拦截、解密、分享等功能</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n `,this.addResizeHandles(),document.body.appendChild(this.container),this.networkTab=this.container.querySelector('[data-panel="network"]'),this.consoleTab=this.container.querySelector('[data-panel="console"]'),this.consoleContent=this.container.querySelector(".console-content")}addResizeHandles(){["n","s","e","w","ne","nw","se","sw"].forEach(e=>{const t=document.createElement("div");t.className=`resize-handle ${e}`,t.dataset.direction=e,this.container.appendChild(t)})}bindEvents(){const e=this.container.querySelector(".debugger-header"),t=this.container.querySelector(".debugger-controls"),n=this.container.querySelectorAll(".debugger-tab"),r=this.container.querySelectorAll("[data-tool]"),o=this.container.querySelector(".console-cmd");e.addEventListener("mousedown",e=>{e.target===t||t.contains(e.target)||this.startDrag(e)}),t.addEventListener("click",e=>{switch(e.target.dataset.action){case"clear":this.clearRequests();break;case"export":this.exportData();break;case"minimize":this.toggleMinimize();break;case"fullscreen":this.toggleFullscreen();break;case"close":this.hide()}}),n.forEach(e=>{e.addEventListener("click",e=>{const t=e.target.dataset.tab;this.switchTab(t)})}),r.forEach(e=>{e.addEventListener("click",e=>{const t=e.target.dataset.tool;this.handleToolAction(t)})}),o&&o.addEventListener("keypress",e=>{"Enter"===e.key&&(this.executeConsoleCommand(o.value),o.value="")});this.container.querySelectorAll(".resize-handle").forEach(e=>{e.addEventListener("mousedown",t=>{t.stopPropagation(),this.startResize(t,e.dataset.direction||e.classList[1])})}),document.addEventListener("mousemove",this.handleMouseMove.bind(this)),document.addEventListener("mouseup",this.handleMouseUp.bind(this))}startListening(){this.interceptor.addListener(e=>{this.addRequestToUI(e)}),this.requestsCache=this.interceptor.getRequests(),this.renderRequests()}addRequestToUI(e){const t=this.requestsCache.findIndex(t=>t.id===e.id);t>=0?this.requestsCache[t]=e:this.requestsCache.unshift(e),this.requestsCache.length>100&&(this.requestsCache=this.requestsCache.slice(0,100)),this.renderRequests()}renderRequests(){const e=this.container.querySelector(".request-list");e&&(e.innerHTML="",this.requestsCache.forEach(t=>{const n=this.createRequestItem(t);e.appendChild(n)}))}createRequestItem(e){const t=document.createElement("div");t.className="request-item",t.dataset.requestId=e.id;const n=this.getStatusClass(e.status),r=`method-${e.method.toLowerCase()}`;e.decryptedRequest||e.decryptedResponse;const o=e.error;t.innerHTML=`\n <div class="request-header">\n <span class="request-method ${r}">${e.method}</span>\n <span class="request-url" title="${e.url}">${this.truncateUrl(e.url)}</span>\n <span class="request-status ${n}">${e.status?e.status:void 0!==e.duration?"ERR":"Pending"}</span>\n ${o?'<span class="error-badge">⚠️</span>':""}\n <button class="share-btn" title="分享此请求 (by Leo)" onclick="event.stopPropagation()">分享链接</button>\n </div>\n <div class="request-info">\n <span>${new Date(e.timestamp).toLocaleTimeString()}</span>\n <span>${e.duration?`${e.duration}ms`:"Pending"}</span>\n </div>\n <div class="request-details">\n ${this.renderRequestDetails(e)}\n </div>\n `,t.addEventListener("click",()=>{t.classList.toggle("expanded")});const i=t.querySelector(".share-btn");return i&&i.addEventListener("click",async t=>{t.stopPropagation(),await this.shareRequest(e)}),t}renderRequestDetails(e){let t="";return e.id.replace(/[^a-zA-Z0-9]/g,""),e.decryptedRequest&&(t+=`\n <div class="detail-section">\n <div class="detail-title highlight">解密请求数据</div>\n <div class="detail-content">\n <div class="json-content">${this.formatData(e.decryptedRequest)}</div>\n </div>\n </div>\n `),e.decryptedResponse&&(t+=`\n <div class="detail-section">\n <div class="detail-title highlight">解密响应数据</div>\n <div class="detail-content">\n <div class="json-content">${this.formatData(e.decryptedResponse)}</div>\n </div>\n </div>\n `),Object.keys(e.headers).length>0&&(t+=`\n <div class="detail-section collapsible collapsed">\n <div class="detail-title clickable" onclick="this.parentElement.classList.toggle('collapsed')">\n <span class="collapse-icon">▼</span> 请求头 (${Object.keys(e.headers).length})\n </div>\n <div class="detail-content">\n <table class="headers-table">\n ${Object.entries(e.headers).map(([e,t])=>`<tr><td>${e}</td><td>${t}</td></tr>`).join("")}\n </table>\n </div>\n </div>\n `),e.responseHeaders&&Object.keys(e.responseHeaders).length>0&&(t+=`\n <div class="detail-section collapsible collapsed">\n <div class="detail-title clickable" onclick="this.parentElement.classList.toggle('collapsed')">\n <span class="collapse-icon">▼</span> 响应头 (${Object.keys(e.responseHeaders).length})\n </div>\n <div class="detail-content">\n <table class="headers-table">\n ${Object.entries(e.responseHeaders).map(([e,t])=>`<tr><td>${e}</td><td>${t}</td></tr>`).join("")}\n </table>\n </div>\n </div>\n `),e.requestBody&&(t+=`\n <div class="detail-section">\n <div class="detail-title">${e.decryptedRequest?"原始请求数据":"请求数据"}</div>\n <div class="detail-content">\n <div class="json-content">${this.formatData(e.requestBody)}</div>\n </div>\n </div>\n `),e.responseBody&&(t+=`\n <div class="detail-section">\n <div class="detail-title">${e.decryptedResponse?"原始响应数据":"响应数据"}</div>\n <div class="detail-content">\n <div class="json-content">${this.formatData(e.responseBody)}</div>\n </div>\n </div>\n `),e.error&&(t+=`\n <div class="detail-section">\n <div class="detail-title">错误信息</div>\n <div class="detail-content">\n <div class="json-content" style="color: #f44336;">${e.error}</div>\n </div>\n </div>\n `),t}formatData(e){if("string"==typeof e)try{return Je(JSON.parse(e))}catch{return e}return Je(e)}getStatusClass(e){return e?e>=200&&e<300?"status-2xx":e>=300&&e<400?"status-3xx":e>=400&&e<500?"status-4xx":e>=500?"status-5xx":"status-error":"status-error"}truncateUrl(e){return e}switchTab(e){this.container.querySelectorAll(".debugger-tab").forEach(t=>{t.classList.toggle("active",t.dataset.tab===e)}),this.container.querySelectorAll("[data-panel]").forEach(t=>{t.style.display=t.getAttribute("data-panel")===e?"block":"none"}),this.currentTab=e}clearRequests(){this.requestsCache=[],this.interceptor.clearRequests(),this.renderRequests(),this.logToConsole("✅ 已清空网络请求记录")}exportData(){const e={timestamp:(new Date).toISOString(),requests:this.requestsCache,userAgent:navigator.userAgent,url:window.location.href,creator:"PWTK Network Debugger by Leo (@leeguoo)"},t=new Blob([JSON.stringify(e,null,2)],{type:"application/json"}),n=URL.createObjectURL(t),r=document.createElement("a");r.href=n,r.download=`network-debug-${Date.now()}.json`,r.click(),URL.revokeObjectURL(n),this.logToConsole("💾 网络数据已导出 (by Leo)")}async shareRequest(e){try{this.logToConsole("📤 正在创建分享链接...");const t=await Ge(e);if(!t)throw new Error("无法创建分享链接");await async function(e){try{if(navigator.clipboard&&navigator.clipboard.writeText)return await navigator.clipboard.writeText(e),!0;{const t=document.createElement("textarea");t.value=e,t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select();const n=document.execCommand("copy");return document.body.removeChild(t),n}}catch(t){return!1}}(t)?(this.logToConsole(`✅ 分享链接已复制到剪贴板: ${t}`),alert(`分享链接已复制到剪贴板!\n${t}\n\nCreated by Leo (@leeguoo)`)):(this.logToConsole(`✅ 分享链接: ${t}`),prompt("分享链接已创建,请手动复制:\n\nCreated by Leo (@leeguoo)",t))}catch(t){this.logToConsole(`❌ 分享失败: ${t}`),alert("分享失败,请稍后重试")}}toggleMinimize(){this.config.minimized=!this.config.minimized,this.container.classList.toggle("minimized",this.config.minimized);const e=this.container.querySelector(".debugger-header");if(e){e.innerHTML=`\n <div class="debugger-title">🔓 ${this.config.minimized?"PWTK":"PWTK 解密小工具"} <span style="font-size: 10px; opacity: 0.7;">by Leo</span></div>\n <div class="debugger-controls">\n ${this.config.minimized?"":'<button class="debugger-btn" data-action="clear" title="清空">🗑️</button>'}\n ${this.config.minimized?"":'<button class="debugger-btn" data-action="export" title="导出">💾</button>'}\n <button class="debugger-btn" data-action="minimize" title="${this.config.minimized?"展开":"最小化"}">${this.config.minimized?"📖":"📕"}</button>\n ${this.config.minimized?"":'<button class="debugger-btn" data-action="fullscreen" title="全屏">⛶</button>'}\n <button class="debugger-btn" data-action="close" title="关闭">✕</button>\n </div>\n `;e.querySelector(".debugger-controls").addEventListener("click",e=>{switch(e.target.dataset.action){case"clear":this.clearRequests();break;case"export":this.exportData();break;case"minimize":this.toggleMinimize();break;case"fullscreen":this.toggleFullscreen();break;case"close":this.hide()}})}}toggleFullscreen(){this.container.classList.toggle("fullscreen")}handleToolAction(e){const t=this.container.querySelector(".tools-content textarea").value.trim();switch(e){case"parse-curl":this.handleParseCurl(t);break;case"export-har":this.exportHAR();break;case"cors-test":this.handleCorsTest(t);break;case"decrypt-test":this.handleDecryptTest(t)}}handleParseCurl(e){if(e)try{const t=function(e){const t=e.split("\\\n").map(e=>e.trim()).join(" "),n=t.match(/c?curl\s+['"]?([^'"\s]+)['"]?/),r=n?n[1]:"",o={},i=t.matchAll(/-H\s+['"]([^:]+):\s*([^'"]*)['"]/g);for(const l of i)o[l[1]]=l[2];let s;const a=t.match(/(?:--data-raw|--data|-d)\s+['"]({.+?})['"]/s);if(a){const e=a[1];try{s=JSON.parse(e)}catch{s=e}}const c=t.match(/-X\s+(['"]?)([A-Z]+)\1/);return{url:r,method:c?c[2]:s?"POST":"GET",headers:o,data:s}}(e);this.logToConsole("✅ cURL 解析成功:"),this.logToConsole(t)}catch(t){this.logToConsole(`❌ cURL 解析失败: ${t instanceof Error?t.message:String(t)}`,"error")}else this.logToConsole("❌ 请输入 cURL 命令")}exportHAR(){const e={log:{version:"1.2",creator:{name:"NetworkDebugger",version:"1.0.0",comment:"Created by Leo (@leeguoo)"},entries:this.requestsCache.map(e=>({startedDateTime:new Date(e.timestamp).toISOString(),time:e.duration||0,request:{method:e.method,url:e.url,headers:Object.entries(e.headers).map(([e,t])=>({name:e,value:t})),postData:e.requestBody?{mimeType:"application/json",text:"string"==typeof e.requestBody?e.requestBody:JSON.stringify(e.requestBody)}:void 0},response:{status:e.status||0,statusText:e.statusText||"",headers:e.responseHeaders?Object.entries(e.responseHeaders).map(([e,t])=>({name:e,value:t})):[],content:{size:0,mimeType:"application/json",text:e.responseBody?"string"==typeof e.responseBody?e.responseBody:JSON.stringify(e.responseBody):""}}}))}},t=new Blob([JSON.stringify(e,null,2)],{type:"application/json"}),n=URL.createObjectURL(t),r=document.createElement("a");r.href=n,r.download=`network-har-${Date.now()}.har`,r.click(),URL.revokeObjectURL(n),this.logToConsole("💾 HAR 文件已导出")}handleCorsTest(e){e?(this.logToConsole(`🔍 开始 CORS 测试: ${e}`),fetch(e,{mode:"cors"}).then(e=>{this.logToConsole(`✅ CORS 测试成功: ${e.status} ${e.statusText}`)}).catch(e=>{this.logToConsole(`❌ CORS 测试失败: ${e.message}`)})):this.logToConsole("❌ 请输入要测试的 URL")}handleDecryptTest(e){e?this.logToConsole("🔓 解密测试功能开发中..."):this.logToConsole("❌ 请输入要解密的数据")}executeConsoleCommand(e){if(e.trim()){this.consoleHistory.push(e),this.logToConsole(`> ${e}`);try{const t=new Function("return "+e)();this.logToConsole(t)}catch(t){try{const t=new Function(e)();this.logToConsole(void 0!==t?t:"undefined")}catch(n){this.logToConsole(`❌ ${t}`,"error")}}}}logToConsole(e,t="log"){if(!this.consoleContent)return;const n=(new Date).toLocaleTimeString(),r="object"==typeof e?JSON.stringify(e,null,2):e,o=document.createElement("div");o.innerHTML=`[${n}] ${r}`,"error"===t?o.style.color="#f44336":"warn"===t&&(o.style.color="#ff9800"),this.consoleContent.appendChild(o),this.consoleContent.scrollTop=this.consoleContent.scrollHeight}startDrag(e){this.isDragging=!0,this.dragStart={x:e.clientX,y:e.clientY},this.container.style.transition="none"}startResize(e,t){this.isResizing=!0,this.dragStart={x:e.clientX,y:e.clientY},this.container.style.transition="none"(this.container).dataset.resizeDirection=t}handleMouseMove(e){if(this.isDragging){const t=e.clientX-this.dragStart.x,n=e.clientY-this.dragStart.y,r=this.container.getBoundingClientRect();this.container.style.left=`${r.left+t}px`,this.container.style.top=`${r.top+n}px`,this.dragStart={x:e.clientX,y:e.clientY}}if(this.isResizing){const t=this.container.dataset.resizeDirection,n=e.clientX-this.dragStart.x,r=e.clientY-this.dragStart.y,o=this.container.getBoundingClientRect();t.includes("e")&&(this.container.style.width=`${o.width+n}px`),t.includes("s")&&(this.container.style.height=`${o.height+r}px`),t.includes("w")&&(this.container.style.width=o.width-n+"px",this.container.style.left=`${o.left+n}px`),t.includes("n")&&(this.container.style.height=o.height-r+"px",this.container.style.top=`${o.top+r}px`),this.dragStart={x:e.clientX,y:e.clientY}}}handleMouseUp(){(this.isDragging||this.isResizing)&&(this.container.style.transition="all 0.3s ease"),this.isDragging=!1,this.isResizing=!1,delete this.container.dataset.resizeDirection}show(){this.container.style.display="block"}hide(){this.container.style.display="none"}destroy(){this.container.remove();const e=document.getElementById("network-debugger-styles");e&&e.remove()}}class Ze{constructor(){this.interceptor=null,this.panel=null,this.wasmLoader=null,this.config={},this.initialized=!1}async init(e={}){if(!this.initialized){this.config={autoStart:!0,position:"bottom-right",theme:"dark",minimized:!1,showConsole:!0,wasm:{enabled:!0,...e.wasm},decrypt:{enabled:!0,autoFetchKeys:!0,keyApiUrl:"https://gw-card-pay.buyacard.cc/ip/getSK",...e.decrypt},...e};try{if(!1!==this.config.wasm?.enabled){this.wasmLoader=new Xe;await this.wasmLoader.loadWasm(this.config.wasm?.wasmUrl,this.config.wasm?.jsUrl)}this.interceptor=new Ne,this.config.decrypt?.enabled&&this.interceptor.enableDecryption({keyExtractor:this.config.decrypt.keyExtractor||this.defaultKeyExtractor,slkExtractor:this.config.decrypt.slkExtractor||this.defaultSlkExtractor,autoFetchKeys:this.config.decrypt.autoFetchKeys,keyApiUrl:this.config.decrypt.keyApiUrl}),!1!==this.config.autoStart&&this.createPanel(),this.initialized=!0}catch(t){throw t}}}show(){this.initialized&&(this.panel?this.panel.show():this.createPanel())}hide(){this.panel&&this.panel.hide()}destroy(){this.panel&&(this.panel.destroy(),this.panel=null),this.initialized=!1}getRequests(){return this.interceptor?.getRequests()||[]}clearRequests(){this.interceptor?.clearRequests()}exportData(){return{timestamp:(new Date).toISOString(),requests:this.getRequests(),config:this.config,userAgent:navigator.userAgent,url:window.location.href,author:"Leo (@leeguoo)",tool:"@leeguoo/network-debugger"}}isWasmLoaded(){return this.wasmLoader?.isLoaded()||!1}isInitialized(){return this.initialized}static create(e){const t=new Ze;return t.init(e).then(()=>t)}createPanel(){this.interceptor&&(this.panel=new Ye(this.interceptor,{position:this.config.position,theme:this.config.theme,minimized:this.config.minimized,showConsole:this.config.showConsole}))}defaultKeyExtractor(e){return e.keys||e.cid||e["x-api-key"]||""}defaultSlkExtractor(e){return e.slk||e["x-slk"]||""}}let Ve=null;const Qe={init:async e=>Ve||(Ve=await Ze.create(e),"undefined"!=typeof window&&(window.NetworkDebugger=Ve),Ve),show(){Ve?.show()},hide(){Ve?.hide()},destroy(){Ve?.destroy(),Ve=null,"undefined"!=typeof window&&delete window.NetworkDebugger},getInstance:()=>Ve};exports.DebugPanel=Ye,exports.NetworkDebugger=Ze,exports.NetworkInterceptor=Ne,exports.WasmLoader=Xe,exports.default=Qe;
package/dist/index.esm.js CHANGED
@@ -7674,12 +7674,13 @@ const styles = `
7674
7674
  background: #2196F3;
7675
7675
  color: #fff;
7676
7676
  border: none;
7677
- padding: 4px 8px;
7677
+ padding: 4px 10px;
7678
7678
  border-radius: 3px;
7679
- font-size: 10px;
7679
+ font-size: 11px;
7680
7680
  margin-left: 8px;
7681
7681
  cursor: pointer;
7682
7682
  transition: all 0.2s;
7683
+ white-space: nowrap;
7683
7684
  }
7684
7685
 
7685
7686
  .share-btn:hover {
@@ -8164,7 +8165,7 @@ class DebugPanel {
8164
8165
  <span class="request-url" title="${request.url}">${this.truncateUrl(request.url)}</span>
8165
8166
  <span class="request-status ${statusClass}">${request.status ? request.status : request.duration !== void 0 ? "ERR" : "Pending"}</span>
8166
8167
  ${hasError ? '<span class="error-badge">⚠️</span>' : ""}
8167
- <button class="share-btn" title="分享此请求 (by Leo)" onclick="event.stopPropagation()">🔗</button>
8168
+ <button class="share-btn" title="分享此请求 (by Leo)" onclick="event.stopPropagation()">分享链接</button>
8168
8169
  </div>
8169
8170
  <div class="request-info">
8170
8171
  <span>${new Date(request.timestamp).toLocaleTimeString()}</span>
@@ -8640,7 +8641,7 @@ class NetworkDebugger {
8640
8641
  this.initialized = true;
8641
8642
  console.log(`
8642
8643
  ╔════════════════════════════════════════╗
8643
- ║ 🔓 PWTK 解密小工具 v1.2.16
8644
+ ║ 🔓 PWTK 解密小工具 v1.2.17
8644
8645
  ║ Created by Leo (@leeguoo) ║
8645
8646
  ║ 技术支持: 请联系 Leo ║
8646
8647
  ║ 分享服务: curl.bwg.leeguoo.com ║
package/dist/index.js CHANGED
@@ -15,4 +15,4 @@ e.mode.CTRGladman=function(){var t=e.lib.BlockCipherMode.extend();function n(e){
15
15
 
16
16
  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
17
17
  */
18
- function(){var t=e,n=t.lib,r=n.WordArray,o=n.Hasher,i=t.algo,s=r.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),a=r.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),c=r.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),l=r.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),d=r.create([0,1518500249,1859775393,2400959708,2840853838]),h=r.create([1352829926,1548603684,1836072691,2053994217,0]),p=i.RIPEMD160=o.extend({_doReset:function(){this._hash=r.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(e,t){for(var n=0;n<16;n++){var r=t+n,o=e[r];e[r]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8)}var i,p,x,m,w,_,k,B,S,C,z,A=this._hash.words,R=d.words,E=h.words,q=s.words,H=a.words,D=c.words,T=l.words;for(_=i=A[0],k=p=A[1],B=x=A[2],S=m=A[3],C=w=A[4],n=0;n<80;n+=1)z=i+e[t+q[n]]|0,z+=n<16?u(p,x,m)+R[0]:n<32?f(p,x,m)+R[1]:n<48?g(p,x,m)+R[2]:n<64?y(p,x,m)+R[3]:v(p,x,m)+R[4],z=(z=b(z|=0,D[n]))+w|0,i=w,w=m,m=b(x,10),x=p,p=z,z=_+e[t+H[n]]|0,z+=n<16?v(k,B,S)+E[0]:n<32?y(k,B,S)+E[1]:n<48?g(k,B,S)+E[2]:n<64?f(k,B,S)+E[3]:u(k,B,S)+E[4],z=(z=b(z|=0,T[n]))+C|0,_=C,C=S,S=b(B,10),B=k,k=z;z=A[1]+x+S|0,A[1]=A[2]+m+C|0,A[2]=A[3]+w+_|0,A[3]=A[4]+i+k|0,A[4]=A[0]+p+B|0,A[0]=z},_doFinalize:function(){var e=this._data,t=e.words,n=8*this._nDataBytes,r=8*e.sigBytes;t[r>>>5]|=128<<24-r%32,t[14+(r+64>>>9<<4)]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8),e.sigBytes=4*(t.length+1),this._process();for(var o=this._hash,i=o.words,s=0;s<5;s++){var a=i[s];i[s]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8)}return o},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}});function u(e,t,n){return e^t^n}function f(e,t,n){return e&t|~e&n}function g(e,t,n){return(e|~t)^n}function y(e,t,n){return e&n|t&~n}function v(e,t,n){return e^(t|~n)}function b(e,t){return e<<t|e>>>32-t}t.RIPEMD160=o._createHelper(p),t.HmacRIPEMD160=o._createHmacHelper(p)}(),e.RIPEMD160)),I.exports;var e}(),X(),function(){return J||(J=1,G.exports=(l=c(),H(),X(),t=(e=l).lib,n=t.Base,r=t.WordArray,o=e.algo,i=o.SHA256,s=o.HMAC,a=o.PBKDF2=n.extend({cfg:n.extend({keySize:4,hasher:i,iterations:25e4}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var n=this.cfg,o=s.create(n.hasher,e),i=r.create(),a=r.create([1]),c=i.words,l=a.words,d=n.keySize,h=n.iterations;c.length<d;){var p=o.update(t).finalize(a);o.reset();for(var u=p.words,f=u.length,g=p,y=1;y<h;y++){g=o.finalize(g),o.reset();for(var v=g.words,b=0;b<f;b++)u[b]^=v[b]}i.concat(p),l[0]++}return i.sigBytes=4*d,i}}),e.PBKDF2=function(e,t,n){return a.create(n).compute(e,t)},l.PBKDF2)),G.exports;var e,t,n,r,o,i,s,a,l}(),V(),te(),function(){return ne||(ne=1,re.exports=(e=c(),te(),e.mode.CFB=function(){var t=e.lib.BlockCipherMode.extend();function n(e,t,n,r){var o,i=this._iv;i?(o=i.slice(0),this._iv=void 0):o=this._prevBlock,r.encryptBlock(o,0);for(var s=0;s<n;s++)e[t+s]^=o[s]}return t.Encryptor=t.extend({processBlock:function(e,t){var r=this._cipher,o=r.blockSize;n.call(this,e,t,o,r),this._prevBlock=e.slice(t,t+o)}}),t.Decryptor=t.extend({processBlock:function(e,t){var r=this._cipher,o=r.blockSize,i=e.slice(t,t+o);n.call(this,e,t,o,r),this._prevBlock=i}}),t}(),e.mode.CFB)),re.exports;var e}(),function(){return oe||(oe=1,ie.exports=(n=c(),te(),n.mode.CTR=(e=n.lib.BlockCipherMode.extend(),t=e.Encryptor=e.extend({processBlock:function(e,t){var n=this._cipher,r=n.blockSize,o=this._iv,i=this._counter;o&&(i=this._counter=o.slice(0),this._iv=void 0);var s=i.slice(0);n.encryptBlock(s,0),i[r-1]=i[r-1]+1|0;for(var a=0;a<r;a++)e[t+a]^=s[a]}}),e.Decryptor=t,e),n.mode.CTR)),ie.exports;var e,t,n}(),ce(),function(){return le||(le=1,de.exports=(n=c(),te(),n.mode.OFB=(e=n.lib.BlockCipherMode.extend(),t=e.Encryptor=e.extend({processBlock:function(e,t){var n=this._cipher,r=n.blockSize,o=this._iv,i=this._keystream;o&&(i=this._keystream=o.slice(0),this._iv=void 0),n.encryptBlock(i,0);for(var s=0;s<r;s++)e[t+s]^=i[s]}}),e.Decryptor=t,e),n.mode.OFB)),de.exports;var e,t,n}(),function(){return he||(he=1,pe.exports=(t=c(),te(),t.mode.ECB=((e=t.lib.BlockCipherMode.extend()).Encryptor=e.extend({processBlock:function(e,t){this._cipher.encryptBlock(e,t)}}),e.Decryptor=e.extend({processBlock:function(e,t){this._cipher.decryptBlock(e,t)}}),e),t.mode.ECB)),pe.exports;var e,t}(),function(){return ue||(ue=1,fe.exports=(e=c(),te(),e.pad.AnsiX923={pad:function(e,t){var n=e.sigBytes,r=4*t,o=r-n%r,i=n+o-1;e.clamp(),e.words[i>>>2]|=o<<24-i%4*8,e.sigBytes+=o},unpad:function(e){var t=255&e.words[e.sigBytes-1>>>2];e.sigBytes-=t}},e.pad.Ansix923)),fe.exports;var e}(),function(){return ge||(ge=1,ye.exports=(e=c(),te(),e.pad.Iso10126={pad:function(t,n){var r=4*n,o=r-t.sigBytes%r;t.concat(e.lib.WordArray.random(o-1)).concat(e.lib.WordArray.create([o<<24],1))},unpad:function(e){var t=255&e.words[e.sigBytes-1>>>2];e.sigBytes-=t}},e.pad.Iso10126)),ye.exports;var e}(),function(){return ve||(ve=1,be.exports=(e=c(),te(),e.pad.Iso97971={pad:function(t,n){t.concat(e.lib.WordArray.create([2147483648],1)),e.pad.ZeroPadding.pad(t,n)},unpad:function(t){e.pad.ZeroPadding.unpad(t),t.sigBytes--}},e.pad.Iso97971)),be.exports;var e}(),function(){return xe||(xe=1,me.exports=(e=c(),te(),e.pad.ZeroPadding={pad:function(e,t){var n=4*t;e.clamp(),e.sigBytes+=n-(e.sigBytes%n||n)},unpad:function(e){var t=e.words,n=e.sigBytes-1;for(n=e.sigBytes-1;n>=0;n--)if(t[n>>>2]>>>24-n%4*8&255){e.sigBytes=n+1;break}}},e.pad.ZeroPadding)),me.exports;var e}(),function(){return we||(we=1,_e.exports=(e=c(),te(),e.pad.NoPadding={pad:function(){},unpad:function(){}},e.pad.NoPadding)),_e.exports;var e}(),function(){return ke||(ke=1,Be.exports=(r=c(),te(),t=(e=r).lib.CipherParams,n=e.enc.Hex,e.format.Hex={stringify:function(e){return e.ciphertext.toString(n)},parse:function(e){var r=n.parse(e);return t.create({ciphertext:r})}},r.format.Hex)),Be.exports;var e,t,n,r}(),function(){return Se||(Se=1,Ce.exports=(e=c(),m(),C(),V(),te(),function(){var t=e,n=t.lib.BlockCipher,r=t.algo,o=[],i=[],s=[],a=[],c=[],l=[],d=[],h=[],p=[],u=[];!function(){for(var e=[],t=0;t<256;t++)e[t]=t<128?t<<1:t<<1^283;var n=0,r=0;for(t=0;t<256;t++){var f=r^r<<1^r<<2^r<<3^r<<4;f=f>>>8^255&f^99,o[n]=f,i[f]=n;var g=e[n],y=e[g],v=e[y],b=257*e[f]^16843008*f;s[n]=b<<24|b>>>8,a[n]=b<<16|b>>>16,c[n]=b<<8|b>>>24,l[n]=b,b=16843009*v^65537*y^257*g^16843008*n,d[f]=b<<24|b>>>8,h[f]=b<<16|b>>>16,p[f]=b<<8|b>>>24,u[f]=b,n?(n=g^e[e[e[v^g]]],r^=e[e[r]]):n=r=1}}();var f=[0,1,2,4,8,16,32,64,128,27,54],g=r.AES=n.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var e=this._keyPriorReset=this._key,t=e.words,n=e.sigBytes/4,r=4*((this._nRounds=n+6)+1),i=this._keySchedule=[],s=0;s<r;s++)s<n?i[s]=t[s]:(l=i[s-1],s%n?n>6&&s%n==4&&(l=o[l>>>24]<<24|o[l>>>16&255]<<16|o[l>>>8&255]<<8|o[255&l]):(l=o[(l=l<<8|l>>>24)>>>24]<<24|o[l>>>16&255]<<16|o[l>>>8&255]<<8|o[255&l],l^=f[s/n|0]<<24),i[s]=i[s-n]^l);for(var a=this._invKeySchedule=[],c=0;c<r;c++){if(s=r-c,c%4)var l=i[s];else l=i[s-4];a[c]=c<4||s<=4?l:d[o[l>>>24]]^h[o[l>>>16&255]]^p[o[l>>>8&255]]^u[o[255&l]]}}},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,s,a,c,l,o)},decryptBlock:function(e,t){var n=e[t+1];e[t+1]=e[t+3],e[t+3]=n,this._doCryptBlock(e,t,this._invKeySchedule,d,h,p,u,i),n=e[t+1],e[t+1]=e[t+3],e[t+3]=n},_doCryptBlock:function(e,t,n,r,o,i,s,a){for(var c=this._nRounds,l=e[t]^n[0],d=e[t+1]^n[1],h=e[t+2]^n[2],p=e[t+3]^n[3],u=4,f=1;f<c;f++){var g=r[l>>>24]^o[d>>>16&255]^i[h>>>8&255]^s[255&p]^n[u++],y=r[d>>>24]^o[h>>>16&255]^i[p>>>8&255]^s[255&l]^n[u++],v=r[h>>>24]^o[p>>>16&255]^i[l>>>8&255]^s[255&d]^n[u++],b=r[p>>>24]^o[l>>>16&255]^i[d>>>8&255]^s[255&h]^n[u++];l=g,d=y,h=v,p=b}g=(a[l>>>24]<<24|a[d>>>16&255]<<16|a[h>>>8&255]<<8|a[255&p])^n[u++],y=(a[d>>>24]<<24|a[h>>>16&255]<<16|a[p>>>8&255]<<8|a[255&l])^n[u++],v=(a[h>>>24]<<24|a[p>>>16&255]<<16|a[l>>>8&255]<<8|a[255&d])^n[u++],b=(a[p>>>24]<<24|a[l>>>16&255]<<16|a[d>>>8&255]<<8|a[255&h])^n[u++],e[t]=g,e[t+1]=y,e[t+2]=v,e[t+3]=b},keySize:8});t.AES=n._createHelper(g)}(),e.AES)),Ce.exports;var e}(),Re(),function(){return Ee||(Ee=1,qe.exports=(e=c(),m(),C(),V(),te(),function(){var t=e,n=t.lib.StreamCipher,r=t.algo,o=r.RC4=n.extend({_doReset:function(){for(var e=this._key,t=e.words,n=e.sigBytes,r=this._S=[],o=0;o<256;o++)r[o]=o;o=0;for(var i=0;o<256;o++){var s=o%n,a=t[s>>>2]>>>24-s%4*8&255;i=(i+r[o]+a)%256;var c=r[o];r[o]=r[i],r[i]=c}this._i=this._j=0},_doProcessBlock:function(e,t){e[t]^=i.call(this)},keySize:8,ivSize:0});function i(){for(var e=this._S,t=this._i,n=this._j,r=0,o=0;o<4;o++){n=(n+e[t=(t+1)%256])%256;var i=e[t];e[t]=e[n],e[n]=i,r|=e[(e[t]+e[n])%256]<<24-8*o}return this._i=t,this._j=n,r}t.RC4=n._createHelper(o);var s=r.RC4Drop=o.extend({cfg:o.cfg.extend({drop:192}),_doReset:function(){o._doReset.call(this);for(var e=this.cfg.drop;e>0;e--)i.call(this)}});t.RC4Drop=n._createHelper(s)}(),e.RC4)),qe.exports;var e}(),function(){return He||(He=1,De.exports=(e=c(),m(),C(),V(),te(),function(){var t=e,n=t.lib.StreamCipher,r=t.algo,o=[],i=[],s=[],a=r.Rabbit=n.extend({_doReset:function(){for(var e=this._key.words,t=this.cfg.iv,n=0;n<4;n++)e[n]=16711935&(e[n]<<8|e[n]>>>24)|4278255360&(e[n]<<24|e[n]>>>8);var r=this._X=[e[0],e[3]<<16|e[2]>>>16,e[1],e[0]<<16|e[3]>>>16,e[2],e[1]<<16|e[0]>>>16,e[3],e[2]<<16|e[1]>>>16],o=this._C=[e[2]<<16|e[2]>>>16,4294901760&e[0]|65535&e[1],e[3]<<16|e[3]>>>16,4294901760&e[1]|65535&e[2],e[0]<<16|e[0]>>>16,4294901760&e[2]|65535&e[3],e[1]<<16|e[1]>>>16,4294901760&e[3]|65535&e[0]];for(this._b=0,n=0;n<4;n++)c.call(this);for(n=0;n<8;n++)o[n]^=r[n+4&7];if(t){var i=t.words,s=i[0],a=i[1],l=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),d=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),h=l>>>16|4294901760&d,p=d<<16|65535&l;for(o[0]^=l,o[1]^=h,o[2]^=d,o[3]^=p,o[4]^=l,o[5]^=h,o[6]^=d,o[7]^=p,n=0;n<4;n++)c.call(this)}},_doProcessBlock:function(e,t){var n=this._X;c.call(this),o[0]=n[0]^n[5]>>>16^n[3]<<16,o[1]=n[2]^n[7]>>>16^n[5]<<16,o[2]=n[4]^n[1]>>>16^n[7]<<16,o[3]=n[6]^n[3]>>>16^n[1]<<16;for(var r=0;r<4;r++)o[r]=16711935&(o[r]<<8|o[r]>>>24)|4278255360&(o[r]<<24|o[r]>>>8),e[t+r]^=o[r]},blockSize:4,ivSize:2});function c(){for(var e=this._X,t=this._C,n=0;n<8;n++)i[n]=t[n];for(t[0]=t[0]+1295307597+this._b|0,t[1]=t[1]+3545052371+(t[0]>>>0<i[0]>>>0?1:0)|0,t[2]=t[2]+886263092+(t[1]>>>0<i[1]>>>0?1:0)|0,t[3]=t[3]+1295307597+(t[2]>>>0<i[2]>>>0?1:0)|0,t[4]=t[4]+3545052371+(t[3]>>>0<i[3]>>>0?1:0)|0,t[5]=t[5]+886263092+(t[4]>>>0<i[4]>>>0?1:0)|0,t[6]=t[6]+1295307597+(t[5]>>>0<i[5]>>>0?1:0)|0,t[7]=t[7]+3545052371+(t[6]>>>0<i[6]>>>0?1:0)|0,this._b=t[7]>>>0<i[7]>>>0?1:0,n=0;n<8;n++){var r=e[n]+t[n],o=65535&r,a=r>>>16,c=((o*o>>>17)+o*a>>>15)+a*a,l=((4294901760&r)*r|0)+((65535&r)*r|0);s[n]=c^l}e[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,e[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,e[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,e[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,e[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,e[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,e[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,e[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}t.Rabbit=n._createHelper(a)}(),e.Rabbit)),De.exports;var e}(),function(){return Te||(Te=1,Le.exports=(e=c(),m(),C(),V(),te(),function(){var t=e,n=t.lib.StreamCipher,r=t.algo,o=[],i=[],s=[],a=r.RabbitLegacy=n.extend({_doReset:function(){var e=this._key.words,t=this.cfg.iv,n=this._X=[e[0],e[3]<<16|e[2]>>>16,e[1],e[0]<<16|e[3]>>>16,e[2],e[1]<<16|e[0]>>>16,e[3],e[2]<<16|e[1]>>>16],r=this._C=[e[2]<<16|e[2]>>>16,4294901760&e[0]|65535&e[1],e[3]<<16|e[3]>>>16,4294901760&e[1]|65535&e[2],e[0]<<16|e[0]>>>16,4294901760&e[2]|65535&e[3],e[1]<<16|e[1]>>>16,4294901760&e[3]|65535&e[0]];this._b=0;for(var o=0;o<4;o++)c.call(this);for(o=0;o<8;o++)r[o]^=n[o+4&7];if(t){var i=t.words,s=i[0],a=i[1],l=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),d=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),h=l>>>16|4294901760&d,p=d<<16|65535&l;for(r[0]^=l,r[1]^=h,r[2]^=d,r[3]^=p,r[4]^=l,r[5]^=h,r[6]^=d,r[7]^=p,o=0;o<4;o++)c.call(this)}},_doProcessBlock:function(e,t){var n=this._X;c.call(this),o[0]=n[0]^n[5]>>>16^n[3]<<16,o[1]=n[2]^n[7]>>>16^n[5]<<16,o[2]=n[4]^n[1]>>>16^n[7]<<16,o[3]=n[6]^n[3]>>>16^n[1]<<16;for(var r=0;r<4;r++)o[r]=16711935&(o[r]<<8|o[r]>>>24)|4278255360&(o[r]<<24|o[r]>>>8),e[t+r]^=o[r]},blockSize:4,ivSize:2});function c(){for(var e=this._X,t=this._C,n=0;n<8;n++)i[n]=t[n];for(t[0]=t[0]+1295307597+this._b|0,t[1]=t[1]+3545052371+(t[0]>>>0<i[0]>>>0?1:0)|0,t[2]=t[2]+886263092+(t[1]>>>0<i[1]>>>0?1:0)|0,t[3]=t[3]+1295307597+(t[2]>>>0<i[2]>>>0?1:0)|0,t[4]=t[4]+3545052371+(t[3]>>>0<i[3]>>>0?1:0)|0,t[5]=t[5]+886263092+(t[4]>>>0<i[4]>>>0?1:0)|0,t[6]=t[6]+1295307597+(t[5]>>>0<i[5]>>>0?1:0)|0,t[7]=t[7]+3545052371+(t[6]>>>0<i[6]>>>0?1:0)|0,this._b=t[7]>>>0<i[7]>>>0?1:0,n=0;n<8;n++){var r=e[n]+t[n],o=65535&r,a=r>>>16,c=((o*o>>>17)+o*a>>>15)+a*a,l=((4294901760&r)*r|0)+((65535&r)*r|0);s[n]=c^l}e[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,e[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,e[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,e[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,e[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,e[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,e[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,e[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}t.RabbitLegacy=n._createHelper(a)}(),e.RabbitLegacy)),Le.exports;var e}(),Fe())),o.exports));class Xe{constructor(){this.requests=new Map,this.listeners=[],this.decryptConfig={enabled:!1},window.__originalFetch=window.fetch,this.interceptXHR(),this.interceptFetch()}enableDecryption(e){this.decryptConfig.enabled=!0,e?.keyExtractor&&(this.decryptConfig.keyExtractor=e.keyExtractor),e?.slkExtractor&&(this.decryptConfig.slkExtractor=e.slkExtractor),void 0!==e?.autoFetchKeys&&(this.decryptConfig.autoFetchKeys=e.autoFetchKeys),e?.keyApiUrl&&(this.decryptConfig.keyApiUrl=e.keyApiUrl)}addListener(e){this.listeners.push(e)}removeListener(e){const t=this.listeners.indexOf(e);t>-1&&this.listeners.splice(t,1)}getRequests(){return Array.from(this.requests.values()).sort((e,t)=>t.timestamp-e.timestamp)}clearRequests(){this.requests.clear()}generateRequestId(){return Math.random().toString(36).substr(2,9)}isInternalUrl(e){return e.includes("/api/dokv/storage")||e.includes("/api/share")}notifyListeners(e){this.listeners.forEach(t=>{try{t(e)}catch(n){}})}async tryDecrypt(e,t){if(!this.decryptConfig.enabled||!e)return null;try{let r="",o="";if(t.cid&&!1!==this.decryptConfig.autoFetchKeys)try{const e=this.decryptConfig.keyApiUrl||"https://gw-card-pay.buyacard.cc/ip/getSK",n={cid:t.cid,client:t.client||"S_WEB",device:t.device||"Web",language:t.language||"CN"},o=window.__originalFetch||window.fetch,i=await o(e,{headers:n}),s=await i.json();if(s.success&&s.data){const e=String(s.data);e.length>=9&&(r=e.charAt(2)+e.charAt(5)+e.charAt(8))}}catch(n){}!r&&this.decryptConfig.keyExtractor?r=this.decryptConfig.keyExtractor(t):r||(r=t.decryptKey||t.keys||t.cid||""),o=this.decryptConfig.slkExtractor?this.decryptConfig.slkExtractor(t):t.decryptSlk||t.slk||"";const i=r+o;if(i){let t=e,r=!1;if("object"==typeof e&&null!==e&&e.data&&"string"==typeof e.data)t=e.data,r=!0;else if("string"==typeof e)try{const n=JSON.parse(e);n.data&&"string"==typeof n.data&&(t=n.data,r=!0)}catch{}const o="string"==typeof t?t:JSON.stringify(t),s=function(e,t){if(!e||e.startsWith("{")||e.startsWith("["))try{return JSON.parse(e)}catch{return e}if(window.decrypt&&t)try{const n=window.decrypt(e,t);if(n&&n!==e&&!n.includes("�"))try{return JSON.parse(n)}catch{if(n.length>0)return n}}catch(n){}const r=[t,"thisisakey123456","VITE_CRYPTO_KEY"].filter(Boolean);for(const o of r)if(o)try{const t=Ke.enc.Utf8.parse(o.padEnd(16,"0").slice(0,16)),n=Ke.enc.Utf8.parse(o.padEnd(16,"0").slice(0,16)),r=Ke.AES.decrypt(e,t,{iv:n,mode:Ke.mode.CBC,padding:Ke.pad.Pkcs7}).toString(Ke.enc.Utf8);if(r)try{return JSON.parse(r)}catch{return r}}catch(n){}try{const t=atob(e);try{return JSON.parse(t)}catch{return t}}catch{}return e}(o,i);if(s&&s!==o)return s}}catch(r){}return null}interceptXHR(){const e=window.XMLHttpRequest,t=this;window.XMLHttpRequest=function(...n){const r=new e(...n),o=t.generateRequestId();let i="",s="",a={};const c=Date.now();let l=!1;const d=r.open;r.open=function(e,n,...r){return i=e.toUpperCase(),s=n,l=t.isInternalUrl(s),d.apply(this,[e,n,...r])};const h=r.setRequestHeader;r.setRequestHeader=function(e,t){return a[e]=t,h.call(this,e,t)};const p=r.send;return r.send=function(e){if(l)return p.call(this,e);const n={id:o,url:s,method:i,headers:{...a},requestBody:e,timestamp:c};return e&&t.tryDecrypt(e,a).then(e=>{null!==e&&(n.decryptedRequest=e,t.requests.set(o,n),t.notifyListeners(n))}).catch(e=>{}),t.requests.set(o,n),t.notifyListeners(n),p.call(this,e)},r.addEventListener("readystatechange",function(){if(4===r.readyState&&!l){const e=Date.now(),n=t.requests.get(o);if(n){n.status=r.status,n.statusText=r.statusText,n.duration=e-c;const i={},s=r.getAllResponseHeaders();s&&s.split("\r\n").forEach(e=>{const t=e.split(": ");2===t.length&&(i[t[0]]=t[1])}),n.responseHeaders=i;if(null!==r.responseText&&void 0!==r.responseText&&""!==r.responseText)try{n.responseBody=JSON.parse(r.responseText)}catch{n.responseBody=r.responseText}else n.responseBody=null;t.requests.set(o,n),t.notifyListeners(n),n.responseBody&&t.tryDecrypt(n.responseBody,{...a,...i}).then(e=>{null!==e&&(n.decryptedResponse=e,t.requests.set(o,n),t.notifyListeners(n))}).catch(e=>{})}}}),r},window.XMLHttpRequest.prototype=e.prototype}interceptFetch(){const e=window.__originalFetch||window.fetch,t=this;window.fetch=async function(n,r){const o=t.generateRequestId(),i=Date.now(),s="string"==typeof n?n:n instanceof URL?n.toString():n.url,a=(r?.method||"GET").toUpperCase();if(t.isInternalUrl(s))return e.call(this,n,r);const c={};r?.headers&&(r.headers instanceof Headers?r.headers.forEach((e,t)=>{c[t]=e}):Array.isArray(r.headers)?r.headers.forEach(([e,t])=>{c[e]=t}):Object.entries(r.headers).forEach(([e,t])=>{c[e]=t}));let l=null;if(r?.body)if("string"==typeof r.body)try{l=JSON.parse(r.body)}catch{l=r.body}else l=r.body;const d={id:o,url:s,method:a,headers:{...c},requestBody:l,timestamp:i};l&&t.tryDecrypt(l,c).then(e=>{null!==e&&(d.decryptedRequest=e,t.requests.set(o,d),t.notifyListeners(d))}).catch(e=>{}),t.requests.set(o,d),t.notifyListeners(d);try{const s=await e.call(this,n,r),a=Date.now(),l=s.clone(),d=t.requests.get(o);if(d){d.status=s.status,d.statusText=s.statusText,d.duration=a-i;const e={};s.headers.forEach((t,n)=>{e[n]=t}),d.responseHeaders=e;try{const n=await l.text();try{d.responseBody=JSON.parse(n)}catch{d.responseBody=n}t.requests.set(o,d),t.notifyListeners(d),d.responseBody&&t.tryDecrypt(d.responseBody,{...c,...e}).then(e=>{null!==e&&(d.decryptedResponse=e,t.requests.set(o,d),t.notifyListeners(d))}).catch(e=>{})}catch(h){d.error=`Failed to read response: ${h}`,t.requests.set(o,d),t.notifyListeners(d)}}return s}catch(h){const e=Date.now(),n=t.requests.get(o);throw n&&(n.error=h instanceof Error?h.message:String(h),n.duration=e-i,t.requests.set(o,n),t.notifyListeners(n)),h}}}}class Je{constructor(){this.loaded=!1,this.loading=!1}async loadWasm(e,t){if("function"==typeof window.decrypt)return this.loaded=!0,!0;if(this.loaded)return!0;if(this.loading)return new Promise(e=>{const t=()=>{this.loaded||!this.loading?e(this.loaded):setTimeout(t,100)};t()});this.loading=!0;try{const i=[e,"/mimlib.wasm","/dist/mimlib.wasm","/assets/mimlib.wasm","https://gw-card-pay.buyacard.cc/mimlib.wasm"].filter(Boolean),s=[t,"/wasm_exec.js","/dist/wasm_exec.js","/assets/wasm_exec.js","https://gw-card-pay.buyacard.cc/wasm_exec.js"].filter(Boolean);let a=!1;for(const e of s)try{if(await this.loadScript(e),void 0!==window.Go){a=!0;break}}catch(n){continue}if(!a)throw new Error("Unable to load wasm_exec.js from any path");if(void 0===window.Go)throw new Error("Go WebAssembly runtime not available");const c=new window.Go;let l=null;for(const e of i)try{if(!WebAssembly.instantiateStreaming){const t=await fetch(e).then(e=>e.arrayBuffer());l=await WebAssembly.instantiate(t,c.importObject);break}try{l=await WebAssembly.instantiateStreaming(fetch(e),c.importObject);break}catch(r){const t=await fetch(e).then(e=>e.arrayBuffer());l=await WebAssembly.instantiate(t,c.importObject);break}}catch(o){continue}if(!l)throw new Error("Unable to load WebAssembly from any path");return c.run(l.instance),await new Promise(e=>setTimeout(e,100)),"function"==typeof window.decrypt&&(this.loaded=!0,!0)}catch(o){return!1}finally{this.loading=!1}}loadScript(e){return new Promise((t,n)=>{if(document.querySelector(`script[src="${e}"]`))return void t();const r=document.createElement("script");r.src=e,r.type="text/javascript",r.onload=()=>t(),r.onerror=t=>n(new Error(`Failed to load script: ${e}`)),document.head.appendChild(r)})}isLoaded(){return this.loaded}isLoading(){return this.loading}isDecryptAvailable(){return this.loaded&&"function"==typeof window.decrypt}isEncryptAvailable(){return this.loaded&&"function"==typeof window.encrypt}}function Ge(e){return JSON.stringify(e,null,2)}async function Ye(e){try{const t=function(e){let t=`curl '${e.url}'`;"GET"!==e.method&&(t+=` -X ${e.method}`);e.headers&&Object.entries(e.headers).forEach(([e,n])=>{t+=` -H '${e}: ${n}'`});if(e.requestBody){const n="string"==typeof e.requestBody?e.requestBody:JSON.stringify(e.requestBody);t+=` --data '${n}'`}return t}(e),n={curl:t,response:e.responseBody||null,timestamp:Date.now(),slk:e.headers?.slk||"",debuggerData:{url:e.url,method:e.method,headers:e.headers,status:e.status,statusText:e.statusText,duration:e.duration,responseHeaders:e.responseHeaders,decryptedRequest:e.decryptedRequest,decryptedResponse:e.decryptedResponse,error:e.error,creator:"PWTK Network Debugger by Leo (@leeguoo)",version:"1.2.0"}},r=window.__originalFetch||window.fetch,o=await r("https://curl.bwg.leeguoo.com/api/share",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({data:n})}),i=await o.json();if(i.shareId){return`https://curl.bwg.leeguoo.com/share/${i.shareId}`}throw new Error(i.error||"创建分享失败")}catch(t){throw t}}class Ze{constructor(e,t={}){this.isDragging=!1,this.isResizing=!1,this.dragStart={x:0,y:0},this.currentTab="network",this.consoleHistory=[],this.requestsCache=[],this.interceptor=e,this.config={position:"bottom-right",theme:"dark",minimized:!1,showConsole:!0,...t},this.createPanel(),this.bindEvents(),this.startListening()}createPanel(){if(!document.getElementById("network-debugger-styles")){const e=document.createElement("style");e.id="network-debugger-styles",e.textContent="\n/* NetworkDebugger 样式 */\n#network-debugger-panel {\n position: fixed;\n z-index: 999999;\n background: #1a1a1a;\n color: #ffffff;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n font-size: 12px;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);\n border-radius: 8px;\n overflow: hidden;\n max-width: 90vw;\n max-height: 80vh;\n transition: all 0.3s ease;\n}\n\n#network-debugger-panel.minimized {\n height: 40px !important;\n overflow: hidden;\n width: auto !important;\n min-width: 200px;\n}\n\n#network-debugger-panel.minimized .debugger-content {\n display: none;\n}\n\n#network-debugger-panel.minimized .resize-handle {\n display: none;\n}\n\n#network-debugger-panel.bottom-right {\n bottom: 20px;\n right: 20px;\n width: 400px;\n height: 300px;\n}\n\n#network-debugger-panel.bottom-left {\n bottom: 20px;\n left: 20px;\n width: 400px;\n height: 300px;\n}\n\n#network-debugger-panel.top-right {\n top: 20px;\n right: 20px;\n width: 400px;\n height: 300px;\n}\n\n#network-debugger-panel.top-left {\n top: 20px;\n left: 20px;\n width: 400px;\n height: 300px;\n}\n\n#network-debugger-panel.fullscreen {\n top: 0;\n left: 0;\n width: 100vw !important;\n height: 100vh !important;\n border-radius: 0;\n}\n\n.debugger-header {\n background: #333;\n padding: 8px 12px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n cursor: move;\n user-select: none;\n border-bottom: 1px solid #444;\n}\n\n.debugger-title {\n font-weight: bold;\n color: #4CAF50;\n font-size: 14px;\n}\n\n.debugger-controls {\n display: flex;\n gap: 8px;\n}\n\n.debugger-btn {\n background: none;\n border: none;\n color: #fff;\n padding: 4px 8px;\n border-radius: 4px;\n cursor: pointer;\n font-size: 12px;\n transition: background-color 0.2s;\n}\n\n.debugger-btn:hover {\n background: #555;\n}\n\n.debugger-btn.active {\n background: #4CAF50;\n color: #000;\n}\n\n.debugger-content {\n height: calc(100% - 40px);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n.debugger-tabs {\n display: flex;\n background: #2a2a2a;\n border-bottom: 1px solid #444;\n}\n\n.debugger-tab {\n padding: 8px 16px;\n cursor: pointer;\n border: none;\n background: none;\n color: #ccc;\n font-size: 12px;\n transition: all 0.2s;\n border-bottom: 2px solid transparent;\n}\n\n.debugger-tab:hover {\n color: #fff;\n background: #3a3a3a;\n}\n\n.debugger-tab.active {\n color: #4CAF50;\n border-bottom-color: #4CAF50;\n background: #333;\n}\n\n.debugger-panel-content {\n flex: 1;\n overflow: auto;\n padding: 12px;\n}\n\n.request-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.request-item {\n background: #2a2a2a;\n border: 1px solid #444;\n border-radius: 6px;\n padding: 10px;\n cursor: pointer;\n transition: all 0.2s;\n position: relative;\n}\n\n.request-item:hover {\n background: #333;\n border-color: #666;\n}\n\n.request-item.expanded {\n background: #333;\n border-color: #4CAF50;\n}\n\n.request-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 4px;\n}\n\n.request-method {\n padding: 2px 8px;\n border-radius: 4px;\n font-weight: bold;\n font-size: 10px;\n text-transform: uppercase;\n min-width: 40px;\n text-align: center;\n}\n\n.method-get { background: #4CAF50; color: #000; }\n.method-post { background: #2196F3; color: #fff; }\n.method-put { background: #FF9800; color: #000; }\n.method-delete { background: #F44336; color: #fff; }\n.method-patch { background: #9C27B0; color: #fff; }\n\n.request-url {\n flex: 1;\n margin: 0 8px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: #fff;\n font-size: 11px;\n}\n\n.request-status {\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 10px;\n min-width: 35px;\n text-align: center;\n}\n\n.status-2xx { background: #4CAF50; color: #000; }\n.status-3xx { background: #FF9800; color: #000; }\n.status-4xx { background: #F44336; color: #fff; }\n.status-5xx { background: #9C27B0; color: #fff; }\n.status-error { background: #F44336; color: #fff; }\n\n.request-info {\n display: flex;\n justify-content: space-between;\n font-size: 10px;\n color: #999;\n}\n\n.request-details {\n margin-top: 12px;\n border-top: 1px solid #444;\n padding-top: 12px;\n display: none;\n}\n\n/* 默认折叠headers */\n.request-details .detail-section.collapsible {\n /* 默认折叠状态 */\n}\n\n.request-details .detail-section.collapsible:not(.expanded) .detail-content {\n display: none;\n}\n\n.request-details .detail-section.collapsible:not(.expanded) .collapse-icon {\n transform: rotate(-90deg);\n}\n\n.request-item.expanded .request-details {\n display: block;\n}\n\n.detail-section {\n margin-bottom: 16px;\n}\n\n.detail-title {\n font-weight: bold;\n color: #4CAF50;\n margin-bottom: 8px;\n font-size: 11px;\n text-transform: uppercase;\n border-bottom: 1px solid #444;\n padding-bottom: 4px;\n}\n\n.detail-title.highlight {\n color: #FFD700;\n font-size: 12px;\n background: rgba(255, 215, 0, 0.1);\n padding: 6px 8px;\n border-radius: 4px;\n border-bottom: 2px solid #FFD700;\n}\n\n.detail-title.clickable {\n cursor: pointer;\n user-select: none;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.detail-title.clickable:hover {\n background: rgba(76, 175, 80, 0.1);\n}\n\n.collapse-icon {\n display: inline-block;\n transition: transform 0.2s;\n font-size: 10px;\n}\n\n.detail-section.collapsible {\n position: relative;\n}\n\n.detail-section.collapsible.collapsed .detail-content {\n display: none;\n}\n\n.detail-section.collapsible.collapsed .collapse-icon {\n transform: rotate(-90deg);\n}\n\n.detail-content {\n background: #222;\n padding: 8px;\n border-radius: 4px;\n max-height: 200px;\n overflow: auto;\n}\n\n.json-content {\n white-space: pre-wrap;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n font-size: 11px;\n line-height: 1.4;\n}\n\n.headers-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 10px;\n}\n\n.headers-table th,\n.headers-table td {\n padding: 4px 8px;\n text-align: left;\n border-bottom: 1px solid #444;\n}\n\n.headers-table th {\n background: #333;\n color: #4CAF50;\n font-weight: bold;\n}\n\n.headers-table td {\n color: #ccc;\n}\n\n.decrypted-badge {\n background: #4CAF50;\n color: #000;\n padding: 2px 6px;\n border-radius: 3px;\n font-size: 9px;\n margin-left: 8px;\n font-weight: bold;\n}\n\n.error-badge {\n background: #F44336;\n color: #fff;\n padding: 2px 6px;\n border-radius: 3px;\n font-size: 9px;\n margin-left: 8px;\n font-weight: bold;\n}\n\n.share-btn {\n background: #2196F3;\n color: #fff;\n border: none;\n padding: 4px 8px;\n border-radius: 3px;\n font-size: 10px;\n margin-left: 8px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.share-btn:hover {\n background: #1976D2;\n transform: scale(1.1);\n}\n\n.share-btn:active {\n transform: scale(0.95);\n}\n\n.console-content {\n background: #000;\n color: #0f0;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n font-size: 11px;\n line-height: 1.4;\n height: 100%;\n overflow: auto;\n padding: 8px;\n}\n\n.console-input {\n display: flex;\n align-items: center;\n background: #333;\n padding: 8px;\n border-top: 1px solid #444;\n}\n\n.console-prompt {\n color: #4CAF50;\n margin-right: 8px;\n font-weight: bold;\n}\n\n.console-cmd {\n flex: 1;\n background: none;\n border: none;\n color: #fff;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n font-size: 12px;\n outline: none;\n}\n\n.tools-section {\n padding: 12px;\n background: #2a2a2a;\n border-bottom: 1px solid #444;\n}\n\n.tool-buttons {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.tool-btn {\n padding: 6px 12px;\n background: #4CAF50;\n color: #000;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 11px;\n font-weight: bold;\n transition: background-color 0.2s;\n}\n\n.tool-btn:hover {\n background: #45a049;\n}\n\n.tool-btn:disabled {\n background: #666;\n color: #999;\n cursor: not-allowed;\n}\n\n@media (max-width: 600px) {\n #network-debugger-panel.bottom-right,\n #network-debugger-panel.bottom-left,\n #network-debugger-panel.top-right,\n #network-debugger-panel.top-left {\n width: calc(100vw - 20px) !important;\n left: 10px !important;\n right: auto !important;\n }\n}\n\n::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n}\n\n::-webkit-scrollbar-track {\n background: #333;\n}\n\n::-webkit-scrollbar-thumb {\n background: #666;\n border-radius: 3px;\n}\n\n::-webkit-scrollbar-thumb:hover {\n background: #888;\n}\n\n.resize-handle {\n position: absolute;\n background: transparent;\n}\n\n.resize-handle.n {\n top: -3px;\n left: 0;\n right: 0;\n height: 6px;\n cursor: ns-resize;\n}\n\n.resize-handle.s {\n bottom: -3px;\n left: 0;\n right: 0;\n height: 6px;\n cursor: ns-resize;\n}\n\n.resize-handle.e {\n top: 0;\n right: -3px;\n bottom: 0;\n width: 6px;\n cursor: ew-resize;\n}\n\n.resize-handle.w {\n top: 0;\n left: -3px;\n bottom: 0;\n width: 6px;\n cursor: ew-resize;\n}\n\n.resize-handle.ne {\n top: -3px;\n right: -3px;\n width: 12px;\n height: 12px;\n cursor: ne-resize;\n}\n\n.resize-handle.nw {\n top: -3px;\n left: -3px;\n width: 12px;\n height: 12px;\n cursor: nw-resize;\n}\n\n.resize-handle.se {\n bottom: -3px;\n right: -3px;\n width: 12px;\n height: 12px;\n cursor: se-resize;\n}\n\n.resize-handle.sw {\n bottom: -3px;\n left: -3px;\n width: 12px;\n height: 12px;\n cursor: sw-resize;\n}\n",document.head.appendChild(e)}this.container=document.createElement("div"),this.container.id="network-debugger-panel",this.container.className=`${this.config.position} ${this.config.minimized?"minimized":""}`,this.container.innerHTML=`\n <div class="debugger-header">\n <div class="debugger-title">🔓 ${this.config.minimized?"PWTK":"PWTK 解密小工具"} <span style="font-size: 10px; opacity: 0.7;">by Leo</span></div>\n <div class="debugger-controls">\n ${this.config.minimized?"":'<button class="debugger-btn" data-action="clear" title="清空">🗑️</button>'}\n ${this.config.minimized?"":'<button class="debugger-btn" data-action="export" title="导出">💾</button>'}\n <button class="debugger-btn" data-action="minimize" title="${this.config.minimized?"展开":"最小化"}">${this.config.minimized?"📖":"📕"}</button>\n ${this.config.minimized?"":'<button class="debugger-btn" data-action="fullscreen" title="全屏">⛶</button>'}\n <button class="debugger-btn" data-action="close" title="关闭">✕</button>\n </div>\n </div>\n <div class="debugger-content">\n <div class="debugger-tabs">\n <button class="debugger-tab active" data-tab="network">网络</button>\n ${this.config.showConsole?'<button class="debugger-tab" data-tab="console">控制台</button>':""}\n <button class="debugger-tab" data-tab="tools">工具</button>\n <button class="debugger-tab" data-tab="about">关于</button>\n </div>\n <div class="debugger-panel-content">\n <div class="network-panel" data-panel="network">\n <div class="request-list"></div>\n </div>\n ${this.config.showConsole?'\n <div class="console-panel" data-panel="console" style="display: none;">\n <div class="console-content"></div>\n <div class="console-input">\n <span class="console-prompt">></span>\n <input class="console-cmd" placeholder="输入 JavaScript 代码..." />\n </div>\n </div>\n ':""}\n <div class="tools-panel" data-panel="tools" style="display: none;">\n <div class="tools-section">\n <div class="tool-buttons">\n <button class="tool-btn" data-tool="parse-curl">解析 cURL</button>\n <button class="tool-btn" data-tool="export-har">导出 HAR</button>\n <button class="tool-btn" data-tool="cors-test">CORS 测试</button>\n <button class="tool-btn" data-tool="decrypt-test">解密测试</button>\n </div>\n </div>\n <div class="tools-content">\n <textarea placeholder="在这里粘贴 cURL 命令或输入要测试的数据..." style="width: 100%; height: 200px; background: #222; color: #fff; border: 1px solid #444; padding: 8px; font-family: monospace;"></textarea>\n </div>\n </div>\n <div class="about-panel" data-panel="about" style="display: none;">\n <div style="padding: 20px; color: #fff; text-align: center;">\n <h2 style="margin: 0 0 20px 0;">🔓 PWTK 解密小工具</h2>\n <p style="margin: 10px 0;">Version: 1.2.14</p>\n <p style="margin: 10px 0;">👨‍💻 Created by <strong>Leo (@leeguoo)</strong></p>\n <p style="margin: 10px 0;">📧 技术支持:请联系 Leo</p>\n <p style="margin: 10px 0;">🌐 分享服务:curl.bwg.leeguoo.com</p>\n <div style="margin-top: 20px; padding: 15px; background: #333; border-radius: 8px;">\n <p style="margin: 5px 0; font-size: 12px;">本工具专为 PWTK 项目开发</p>\n <p style="margin: 5px 0; font-size: 12px;">提供网络请求拦截、解密、分享等功能</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n `,this.addResizeHandles(),document.body.appendChild(this.container),this.networkTab=this.container.querySelector('[data-panel="network"]'),this.consoleTab=this.container.querySelector('[data-panel="console"]'),this.consoleContent=this.container.querySelector(".console-content")}addResizeHandles(){["n","s","e","w","ne","nw","se","sw"].forEach(e=>{const t=document.createElement("div");t.className=`resize-handle ${e}`,t.dataset.direction=e,this.container.appendChild(t)})}bindEvents(){const e=this.container.querySelector(".debugger-header"),t=this.container.querySelector(".debugger-controls"),n=this.container.querySelectorAll(".debugger-tab"),r=this.container.querySelectorAll("[data-tool]"),o=this.container.querySelector(".console-cmd");e.addEventListener("mousedown",e=>{e.target===t||t.contains(e.target)||this.startDrag(e)}),t.addEventListener("click",e=>{switch(e.target.dataset.action){case"clear":this.clearRequests();break;case"export":this.exportData();break;case"minimize":this.toggleMinimize();break;case"fullscreen":this.toggleFullscreen();break;case"close":this.hide()}}),n.forEach(e=>{e.addEventListener("click",e=>{const t=e.target.dataset.tab;this.switchTab(t)})}),r.forEach(e=>{e.addEventListener("click",e=>{const t=e.target.dataset.tool;this.handleToolAction(t)})}),o&&o.addEventListener("keypress",e=>{"Enter"===e.key&&(this.executeConsoleCommand(o.value),o.value="")});this.container.querySelectorAll(".resize-handle").forEach(e=>{e.addEventListener("mousedown",t=>{t.stopPropagation(),this.startResize(t,e.dataset.direction||e.classList[1])})}),document.addEventListener("mousemove",this.handleMouseMove.bind(this)),document.addEventListener("mouseup",this.handleMouseUp.bind(this))}startListening(){this.interceptor.addListener(e=>{this.addRequestToUI(e)}),this.requestsCache=this.interceptor.getRequests(),this.renderRequests()}addRequestToUI(e){const t=this.requestsCache.findIndex(t=>t.id===e.id);t>=0?this.requestsCache[t]=e:this.requestsCache.unshift(e),this.requestsCache.length>100&&(this.requestsCache=this.requestsCache.slice(0,100)),this.renderRequests()}renderRequests(){const e=this.container.querySelector(".request-list");e&&(e.innerHTML="",this.requestsCache.forEach(t=>{const n=this.createRequestItem(t);e.appendChild(n)}))}createRequestItem(e){const t=document.createElement("div");t.className="request-item",t.dataset.requestId=e.id;const n=this.getStatusClass(e.status),r=`method-${e.method.toLowerCase()}`;e.decryptedRequest||e.decryptedResponse;const o=e.error;t.innerHTML=`\n <div class="request-header">\n <span class="request-method ${r}">${e.method}</span>\n <span class="request-url" title="${e.url}">${this.truncateUrl(e.url)}</span>\n <span class="request-status ${n}">${e.status?e.status:void 0!==e.duration?"ERR":"Pending"}</span>\n ${o?'<span class="error-badge">⚠️</span>':""}\n <button class="share-btn" title="分享此请求 (by Leo)" onclick="event.stopPropagation()">🔗</button>\n </div>\n <div class="request-info">\n <span>${new Date(e.timestamp).toLocaleTimeString()}</span>\n <span>${e.duration?`${e.duration}ms`:"Pending"}</span>\n </div>\n <div class="request-details">\n ${this.renderRequestDetails(e)}\n </div>\n `,t.addEventListener("click",()=>{t.classList.toggle("expanded")});const i=t.querySelector(".share-btn");return i&&i.addEventListener("click",async t=>{t.stopPropagation(),await this.shareRequest(e)}),t}renderRequestDetails(e){let t="";return e.id.replace(/[^a-zA-Z0-9]/g,""),e.decryptedRequest&&(t+=`\n <div class="detail-section">\n <div class="detail-title highlight">解密请求数据</div>\n <div class="detail-content">\n <div class="json-content">${this.formatData(e.decryptedRequest)}</div>\n </div>\n </div>\n `),e.decryptedResponse&&(t+=`\n <div class="detail-section">\n <div class="detail-title highlight">解密响应数据</div>\n <div class="detail-content">\n <div class="json-content">${this.formatData(e.decryptedResponse)}</div>\n </div>\n </div>\n `),Object.keys(e.headers).length>0&&(t+=`\n <div class="detail-section collapsible collapsed">\n <div class="detail-title clickable" onclick="this.parentElement.classList.toggle('collapsed')">\n <span class="collapse-icon">▼</span> 请求头 (${Object.keys(e.headers).length})\n </div>\n <div class="detail-content">\n <table class="headers-table">\n ${Object.entries(e.headers).map(([e,t])=>`<tr><td>${e}</td><td>${t}</td></tr>`).join("")}\n </table>\n </div>\n </div>\n `),e.responseHeaders&&Object.keys(e.responseHeaders).length>0&&(t+=`\n <div class="detail-section collapsible collapsed">\n <div class="detail-title clickable" onclick="this.parentElement.classList.toggle('collapsed')">\n <span class="collapse-icon">▼</span> 响应头 (${Object.keys(e.responseHeaders).length})\n </div>\n <div class="detail-content">\n <table class="headers-table">\n ${Object.entries(e.responseHeaders).map(([e,t])=>`<tr><td>${e}</td><td>${t}</td></tr>`).join("")}\n </table>\n </div>\n </div>\n `),e.requestBody&&(t+=`\n <div class="detail-section">\n <div class="detail-title">${e.decryptedRequest?"原始请求数据":"请求数据"}</div>\n <div class="detail-content">\n <div class="json-content">${this.formatData(e.requestBody)}</div>\n </div>\n </div>\n `),e.responseBody&&(t+=`\n <div class="detail-section">\n <div class="detail-title">${e.decryptedResponse?"原始响应数据":"响应数据"}</div>\n <div class="detail-content">\n <div class="json-content">${this.formatData(e.responseBody)}</div>\n </div>\n </div>\n `),e.error&&(t+=`\n <div class="detail-section">\n <div class="detail-title">错误信息</div>\n <div class="detail-content">\n <div class="json-content" style="color: #f44336;">${e.error}</div>\n </div>\n </div>\n `),t}formatData(e){if("string"==typeof e)try{return Ge(JSON.parse(e))}catch{return e}return Ge(e)}getStatusClass(e){return e?e>=200&&e<300?"status-2xx":e>=300&&e<400?"status-3xx":e>=400&&e<500?"status-4xx":e>=500?"status-5xx":"status-error":"status-error"}truncateUrl(e){return e}switchTab(e){this.container.querySelectorAll(".debugger-tab").forEach(t=>{t.classList.toggle("active",t.dataset.tab===e)}),this.container.querySelectorAll("[data-panel]").forEach(t=>{t.style.display=t.getAttribute("data-panel")===e?"block":"none"}),this.currentTab=e}clearRequests(){this.requestsCache=[],this.interceptor.clearRequests(),this.renderRequests(),this.logToConsole("✅ 已清空网络请求记录")}exportData(){const e={timestamp:(new Date).toISOString(),requests:this.requestsCache,userAgent:navigator.userAgent,url:window.location.href,creator:"PWTK Network Debugger by Leo (@leeguoo)"},t=new Blob([JSON.stringify(e,null,2)],{type:"application/json"}),n=URL.createObjectURL(t),r=document.createElement("a");r.href=n,r.download=`network-debug-${Date.now()}.json`,r.click(),URL.revokeObjectURL(n),this.logToConsole("💾 网络数据已导出 (by Leo)")}async shareRequest(e){try{this.logToConsole("📤 正在创建分享链接...");const t=await Ye(e);if(!t)throw new Error("无法创建分享链接");await async function(e){try{if(navigator.clipboard&&navigator.clipboard.writeText)return await navigator.clipboard.writeText(e),!0;{const t=document.createElement("textarea");t.value=e,t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select();const n=document.execCommand("copy");return document.body.removeChild(t),n}}catch(t){return!1}}(t)?(this.logToConsole(`✅ 分享链接已复制到剪贴板: ${t}`),alert(`分享链接已复制到剪贴板!\n${t}\n\nCreated by Leo (@leeguoo)`)):(this.logToConsole(`✅ 分享链接: ${t}`),prompt("分享链接已创建,请手动复制:\n\nCreated by Leo (@leeguoo)",t))}catch(t){this.logToConsole(`❌ 分享失败: ${t}`),alert("分享失败,请稍后重试")}}toggleMinimize(){this.config.minimized=!this.config.minimized,this.container.classList.toggle("minimized",this.config.minimized);const e=this.container.querySelector(".debugger-header");if(e){e.innerHTML=`\n <div class="debugger-title">🔓 ${this.config.minimized?"PWTK":"PWTK 解密小工具"} <span style="font-size: 10px; opacity: 0.7;">by Leo</span></div>\n <div class="debugger-controls">\n ${this.config.minimized?"":'<button class="debugger-btn" data-action="clear" title="清空">🗑️</button>'}\n ${this.config.minimized?"":'<button class="debugger-btn" data-action="export" title="导出">💾</button>'}\n <button class="debugger-btn" data-action="minimize" title="${this.config.minimized?"展开":"最小化"}">${this.config.minimized?"📖":"📕"}</button>\n ${this.config.minimized?"":'<button class="debugger-btn" data-action="fullscreen" title="全屏">⛶</button>'}\n <button class="debugger-btn" data-action="close" title="关闭">✕</button>\n </div>\n `;e.querySelector(".debugger-controls").addEventListener("click",e=>{switch(e.target.dataset.action){case"clear":this.clearRequests();break;case"export":this.exportData();break;case"minimize":this.toggleMinimize();break;case"fullscreen":this.toggleFullscreen();break;case"close":this.hide()}})}}toggleFullscreen(){this.container.classList.toggle("fullscreen")}handleToolAction(e){const t=this.container.querySelector(".tools-content textarea").value.trim();switch(e){case"parse-curl":this.handleParseCurl(t);break;case"export-har":this.exportHAR();break;case"cors-test":this.handleCorsTest(t);break;case"decrypt-test":this.handleDecryptTest(t)}}handleParseCurl(e){if(e)try{const t=function(e){const t=e.split("\\\n").map(e=>e.trim()).join(" "),n=t.match(/c?curl\s+['"]?([^'"\s]+)['"]?/),r=n?n[1]:"",o={},i=t.matchAll(/-H\s+['"]([^:]+):\s*([^'"]*)['"]/g);for(const l of i)o[l[1]]=l[2];let s;const a=t.match(/(?:--data-raw|--data|-d)\s+['"]({.+?})['"]/s);if(a){const e=a[1];try{s=JSON.parse(e)}catch{s=e}}const c=t.match(/-X\s+(['"]?)([A-Z]+)\1/);return{url:r,method:c?c[2]:s?"POST":"GET",headers:o,data:s}}(e);this.logToConsole("✅ cURL 解析成功:"),this.logToConsole(t)}catch(t){this.logToConsole(`❌ cURL 解析失败: ${t instanceof Error?t.message:String(t)}`,"error")}else this.logToConsole("❌ 请输入 cURL 命令")}exportHAR(){const e={log:{version:"1.2",creator:{name:"NetworkDebugger",version:"1.0.0",comment:"Created by Leo (@leeguoo)"},entries:this.requestsCache.map(e=>({startedDateTime:new Date(e.timestamp).toISOString(),time:e.duration||0,request:{method:e.method,url:e.url,headers:Object.entries(e.headers).map(([e,t])=>({name:e,value:t})),postData:e.requestBody?{mimeType:"application/json",text:"string"==typeof e.requestBody?e.requestBody:JSON.stringify(e.requestBody)}:void 0},response:{status:e.status||0,statusText:e.statusText||"",headers:e.responseHeaders?Object.entries(e.responseHeaders).map(([e,t])=>({name:e,value:t})):[],content:{size:0,mimeType:"application/json",text:e.responseBody?"string"==typeof e.responseBody?e.responseBody:JSON.stringify(e.responseBody):""}}}))}},t=new Blob([JSON.stringify(e,null,2)],{type:"application/json"}),n=URL.createObjectURL(t),r=document.createElement("a");r.href=n,r.download=`network-har-${Date.now()}.har`,r.click(),URL.revokeObjectURL(n),this.logToConsole("💾 HAR 文件已导出")}handleCorsTest(e){e?(this.logToConsole(`🔍 开始 CORS 测试: ${e}`),fetch(e,{mode:"cors"}).then(e=>{this.logToConsole(`✅ CORS 测试成功: ${e.status} ${e.statusText}`)}).catch(e=>{this.logToConsole(`❌ CORS 测试失败: ${e.message}`)})):this.logToConsole("❌ 请输入要测试的 URL")}handleDecryptTest(e){e?this.logToConsole("🔓 解密测试功能开发中..."):this.logToConsole("❌ 请输入要解密的数据")}executeConsoleCommand(e){if(e.trim()){this.consoleHistory.push(e),this.logToConsole(`> ${e}`);try{const t=new Function("return "+e)();this.logToConsole(t)}catch(t){try{const t=new Function(e)();this.logToConsole(void 0!==t?t:"undefined")}catch(n){this.logToConsole(`❌ ${t}`,"error")}}}}logToConsole(e,t="log"){if(!this.consoleContent)return;const n=(new Date).toLocaleTimeString(),r="object"==typeof e?JSON.stringify(e,null,2):e,o=document.createElement("div");o.innerHTML=`[${n}] ${r}`,"error"===t?o.style.color="#f44336":"warn"===t&&(o.style.color="#ff9800"),this.consoleContent.appendChild(o),this.consoleContent.scrollTop=this.consoleContent.scrollHeight}startDrag(e){this.isDragging=!0,this.dragStart={x:e.clientX,y:e.clientY},this.container.style.transition="none"}startResize(e,t){this.isResizing=!0,this.dragStart={x:e.clientX,y:e.clientY},this.container.style.transition="none"(this.container).dataset.resizeDirection=t}handleMouseMove(e){if(this.isDragging){const t=e.clientX-this.dragStart.x,n=e.clientY-this.dragStart.y,r=this.container.getBoundingClientRect();this.container.style.left=`${r.left+t}px`,this.container.style.top=`${r.top+n}px`,this.dragStart={x:e.clientX,y:e.clientY}}if(this.isResizing){const t=this.container.dataset.resizeDirection,n=e.clientX-this.dragStart.x,r=e.clientY-this.dragStart.y,o=this.container.getBoundingClientRect();t.includes("e")&&(this.container.style.width=`${o.width+n}px`),t.includes("s")&&(this.container.style.height=`${o.height+r}px`),t.includes("w")&&(this.container.style.width=o.width-n+"px",this.container.style.left=`${o.left+n}px`),t.includes("n")&&(this.container.style.height=o.height-r+"px",this.container.style.top=`${o.top+r}px`),this.dragStart={x:e.clientX,y:e.clientY}}}handleMouseUp(){(this.isDragging||this.isResizing)&&(this.container.style.transition="all 0.3s ease"),this.isDragging=!1,this.isResizing=!1,delete this.container.dataset.resizeDirection}show(){this.container.style.display="block"}hide(){this.container.style.display="none"}destroy(){this.container.remove();const e=document.getElementById("network-debugger-styles");e&&e.remove()}}class Ve{constructor(){this.interceptor=null,this.panel=null,this.wasmLoader=null,this.config={},this.initialized=!1}async init(e={}){if(!this.initialized){this.config={autoStart:!0,position:"bottom-right",theme:"dark",minimized:!1,showConsole:!0,wasm:{enabled:!0,...e.wasm},decrypt:{enabled:!0,autoFetchKeys:!0,keyApiUrl:"https://gw-card-pay.buyacard.cc/ip/getSK",...e.decrypt},...e};try{if(!1!==this.config.wasm?.enabled){this.wasmLoader=new Je;await this.wasmLoader.loadWasm(this.config.wasm?.wasmUrl,this.config.wasm?.jsUrl)}this.interceptor=new Xe,this.config.decrypt?.enabled&&this.interceptor.enableDecryption({keyExtractor:this.config.decrypt.keyExtractor||this.defaultKeyExtractor,slkExtractor:this.config.decrypt.slkExtractor||this.defaultSlkExtractor,autoFetchKeys:this.config.decrypt.autoFetchKeys,keyApiUrl:this.config.decrypt.keyApiUrl}),!1!==this.config.autoStart&&this.createPanel(),this.initialized=!0}catch(t){throw t}}}show(){this.initialized&&(this.panel?this.panel.show():this.createPanel())}hide(){this.panel&&this.panel.hide()}destroy(){this.panel&&(this.panel.destroy(),this.panel=null),this.initialized=!1}getRequests(){return this.interceptor?.getRequests()||[]}clearRequests(){this.interceptor?.clearRequests()}exportData(){return{timestamp:(new Date).toISOString(),requests:this.getRequests(),config:this.config,userAgent:navigator.userAgent,url:window.location.href,author:"Leo (@leeguoo)",tool:"@leeguoo/network-debugger"}}isWasmLoaded(){return this.wasmLoader?.isLoaded()||!1}isInitialized(){return this.initialized}static create(e){const t=new Ve;return t.init(e).then(()=>t)}createPanel(){this.interceptor&&(this.panel=new Ze(this.interceptor,{position:this.config.position,theme:this.config.theme,minimized:this.config.minimized,showConsole:this.config.showConsole}))}defaultKeyExtractor(e){return e.keys||e.cid||e["x-api-key"]||""}defaultSlkExtractor(e){return e.slk||e["x-slk"]||""}}let Qe=null;const et={init:async e=>Qe||(Qe=await Ve.create(e),"undefined"!=typeof window&&(window.NetworkDebugger=Qe),Qe),show(){Qe?.show()},hide(){Qe?.hide()},destroy(){Qe?.destroy(),Qe=null,"undefined"!=typeof window&&delete window.NetworkDebugger},getInstance:()=>Qe};e.DebugPanel=Ze,e.NetworkDebugger=Ve,e.NetworkInterceptor=Xe,e.WasmLoader=Je,e.default=et,Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
18
+ function(){var t=e,n=t.lib,r=n.WordArray,o=n.Hasher,i=t.algo,s=r.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),a=r.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),c=r.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),l=r.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),d=r.create([0,1518500249,1859775393,2400959708,2840853838]),h=r.create([1352829926,1548603684,1836072691,2053994217,0]),p=i.RIPEMD160=o.extend({_doReset:function(){this._hash=r.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(e,t){for(var n=0;n<16;n++){var r=t+n,o=e[r];e[r]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8)}var i,p,x,m,w,_,k,B,S,C,z,A=this._hash.words,R=d.words,E=h.words,q=s.words,H=a.words,D=c.words,T=l.words;for(_=i=A[0],k=p=A[1],B=x=A[2],S=m=A[3],C=w=A[4],n=0;n<80;n+=1)z=i+e[t+q[n]]|0,z+=n<16?u(p,x,m)+R[0]:n<32?f(p,x,m)+R[1]:n<48?g(p,x,m)+R[2]:n<64?y(p,x,m)+R[3]:v(p,x,m)+R[4],z=(z=b(z|=0,D[n]))+w|0,i=w,w=m,m=b(x,10),x=p,p=z,z=_+e[t+H[n]]|0,z+=n<16?v(k,B,S)+E[0]:n<32?y(k,B,S)+E[1]:n<48?g(k,B,S)+E[2]:n<64?f(k,B,S)+E[3]:u(k,B,S)+E[4],z=(z=b(z|=0,T[n]))+C|0,_=C,C=S,S=b(B,10),B=k,k=z;z=A[1]+x+S|0,A[1]=A[2]+m+C|0,A[2]=A[3]+w+_|0,A[3]=A[4]+i+k|0,A[4]=A[0]+p+B|0,A[0]=z},_doFinalize:function(){var e=this._data,t=e.words,n=8*this._nDataBytes,r=8*e.sigBytes;t[r>>>5]|=128<<24-r%32,t[14+(r+64>>>9<<4)]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8),e.sigBytes=4*(t.length+1),this._process();for(var o=this._hash,i=o.words,s=0;s<5;s++){var a=i[s];i[s]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8)}return o},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}});function u(e,t,n){return e^t^n}function f(e,t,n){return e&t|~e&n}function g(e,t,n){return(e|~t)^n}function y(e,t,n){return e&n|t&~n}function v(e,t,n){return e^(t|~n)}function b(e,t){return e<<t|e>>>32-t}t.RIPEMD160=o._createHelper(p),t.HmacRIPEMD160=o._createHmacHelper(p)}(),e.RIPEMD160)),I.exports;var e}(),X(),function(){return J||(J=1,G.exports=(l=c(),H(),X(),t=(e=l).lib,n=t.Base,r=t.WordArray,o=e.algo,i=o.SHA256,s=o.HMAC,a=o.PBKDF2=n.extend({cfg:n.extend({keySize:4,hasher:i,iterations:25e4}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var n=this.cfg,o=s.create(n.hasher,e),i=r.create(),a=r.create([1]),c=i.words,l=a.words,d=n.keySize,h=n.iterations;c.length<d;){var p=o.update(t).finalize(a);o.reset();for(var u=p.words,f=u.length,g=p,y=1;y<h;y++){g=o.finalize(g),o.reset();for(var v=g.words,b=0;b<f;b++)u[b]^=v[b]}i.concat(p),l[0]++}return i.sigBytes=4*d,i}}),e.PBKDF2=function(e,t,n){return a.create(n).compute(e,t)},l.PBKDF2)),G.exports;var e,t,n,r,o,i,s,a,l}(),V(),te(),function(){return ne||(ne=1,re.exports=(e=c(),te(),e.mode.CFB=function(){var t=e.lib.BlockCipherMode.extend();function n(e,t,n,r){var o,i=this._iv;i?(o=i.slice(0),this._iv=void 0):o=this._prevBlock,r.encryptBlock(o,0);for(var s=0;s<n;s++)e[t+s]^=o[s]}return t.Encryptor=t.extend({processBlock:function(e,t){var r=this._cipher,o=r.blockSize;n.call(this,e,t,o,r),this._prevBlock=e.slice(t,t+o)}}),t.Decryptor=t.extend({processBlock:function(e,t){var r=this._cipher,o=r.blockSize,i=e.slice(t,t+o);n.call(this,e,t,o,r),this._prevBlock=i}}),t}(),e.mode.CFB)),re.exports;var e}(),function(){return oe||(oe=1,ie.exports=(n=c(),te(),n.mode.CTR=(e=n.lib.BlockCipherMode.extend(),t=e.Encryptor=e.extend({processBlock:function(e,t){var n=this._cipher,r=n.blockSize,o=this._iv,i=this._counter;o&&(i=this._counter=o.slice(0),this._iv=void 0);var s=i.slice(0);n.encryptBlock(s,0),i[r-1]=i[r-1]+1|0;for(var a=0;a<r;a++)e[t+a]^=s[a]}}),e.Decryptor=t,e),n.mode.CTR)),ie.exports;var e,t,n}(),ce(),function(){return le||(le=1,de.exports=(n=c(),te(),n.mode.OFB=(e=n.lib.BlockCipherMode.extend(),t=e.Encryptor=e.extend({processBlock:function(e,t){var n=this._cipher,r=n.blockSize,o=this._iv,i=this._keystream;o&&(i=this._keystream=o.slice(0),this._iv=void 0),n.encryptBlock(i,0);for(var s=0;s<r;s++)e[t+s]^=i[s]}}),e.Decryptor=t,e),n.mode.OFB)),de.exports;var e,t,n}(),function(){return he||(he=1,pe.exports=(t=c(),te(),t.mode.ECB=((e=t.lib.BlockCipherMode.extend()).Encryptor=e.extend({processBlock:function(e,t){this._cipher.encryptBlock(e,t)}}),e.Decryptor=e.extend({processBlock:function(e,t){this._cipher.decryptBlock(e,t)}}),e),t.mode.ECB)),pe.exports;var e,t}(),function(){return ue||(ue=1,fe.exports=(e=c(),te(),e.pad.AnsiX923={pad:function(e,t){var n=e.sigBytes,r=4*t,o=r-n%r,i=n+o-1;e.clamp(),e.words[i>>>2]|=o<<24-i%4*8,e.sigBytes+=o},unpad:function(e){var t=255&e.words[e.sigBytes-1>>>2];e.sigBytes-=t}},e.pad.Ansix923)),fe.exports;var e}(),function(){return ge||(ge=1,ye.exports=(e=c(),te(),e.pad.Iso10126={pad:function(t,n){var r=4*n,o=r-t.sigBytes%r;t.concat(e.lib.WordArray.random(o-1)).concat(e.lib.WordArray.create([o<<24],1))},unpad:function(e){var t=255&e.words[e.sigBytes-1>>>2];e.sigBytes-=t}},e.pad.Iso10126)),ye.exports;var e}(),function(){return ve||(ve=1,be.exports=(e=c(),te(),e.pad.Iso97971={pad:function(t,n){t.concat(e.lib.WordArray.create([2147483648],1)),e.pad.ZeroPadding.pad(t,n)},unpad:function(t){e.pad.ZeroPadding.unpad(t),t.sigBytes--}},e.pad.Iso97971)),be.exports;var e}(),function(){return xe||(xe=1,me.exports=(e=c(),te(),e.pad.ZeroPadding={pad:function(e,t){var n=4*t;e.clamp(),e.sigBytes+=n-(e.sigBytes%n||n)},unpad:function(e){var t=e.words,n=e.sigBytes-1;for(n=e.sigBytes-1;n>=0;n--)if(t[n>>>2]>>>24-n%4*8&255){e.sigBytes=n+1;break}}},e.pad.ZeroPadding)),me.exports;var e}(),function(){return we||(we=1,_e.exports=(e=c(),te(),e.pad.NoPadding={pad:function(){},unpad:function(){}},e.pad.NoPadding)),_e.exports;var e}(),function(){return ke||(ke=1,Be.exports=(r=c(),te(),t=(e=r).lib.CipherParams,n=e.enc.Hex,e.format.Hex={stringify:function(e){return e.ciphertext.toString(n)},parse:function(e){var r=n.parse(e);return t.create({ciphertext:r})}},r.format.Hex)),Be.exports;var e,t,n,r}(),function(){return Se||(Se=1,Ce.exports=(e=c(),m(),C(),V(),te(),function(){var t=e,n=t.lib.BlockCipher,r=t.algo,o=[],i=[],s=[],a=[],c=[],l=[],d=[],h=[],p=[],u=[];!function(){for(var e=[],t=0;t<256;t++)e[t]=t<128?t<<1:t<<1^283;var n=0,r=0;for(t=0;t<256;t++){var f=r^r<<1^r<<2^r<<3^r<<4;f=f>>>8^255&f^99,o[n]=f,i[f]=n;var g=e[n],y=e[g],v=e[y],b=257*e[f]^16843008*f;s[n]=b<<24|b>>>8,a[n]=b<<16|b>>>16,c[n]=b<<8|b>>>24,l[n]=b,b=16843009*v^65537*y^257*g^16843008*n,d[f]=b<<24|b>>>8,h[f]=b<<16|b>>>16,p[f]=b<<8|b>>>24,u[f]=b,n?(n=g^e[e[e[v^g]]],r^=e[e[r]]):n=r=1}}();var f=[0,1,2,4,8,16,32,64,128,27,54],g=r.AES=n.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var e=this._keyPriorReset=this._key,t=e.words,n=e.sigBytes/4,r=4*((this._nRounds=n+6)+1),i=this._keySchedule=[],s=0;s<r;s++)s<n?i[s]=t[s]:(l=i[s-1],s%n?n>6&&s%n==4&&(l=o[l>>>24]<<24|o[l>>>16&255]<<16|o[l>>>8&255]<<8|o[255&l]):(l=o[(l=l<<8|l>>>24)>>>24]<<24|o[l>>>16&255]<<16|o[l>>>8&255]<<8|o[255&l],l^=f[s/n|0]<<24),i[s]=i[s-n]^l);for(var a=this._invKeySchedule=[],c=0;c<r;c++){if(s=r-c,c%4)var l=i[s];else l=i[s-4];a[c]=c<4||s<=4?l:d[o[l>>>24]]^h[o[l>>>16&255]]^p[o[l>>>8&255]]^u[o[255&l]]}}},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,s,a,c,l,o)},decryptBlock:function(e,t){var n=e[t+1];e[t+1]=e[t+3],e[t+3]=n,this._doCryptBlock(e,t,this._invKeySchedule,d,h,p,u,i),n=e[t+1],e[t+1]=e[t+3],e[t+3]=n},_doCryptBlock:function(e,t,n,r,o,i,s,a){for(var c=this._nRounds,l=e[t]^n[0],d=e[t+1]^n[1],h=e[t+2]^n[2],p=e[t+3]^n[3],u=4,f=1;f<c;f++){var g=r[l>>>24]^o[d>>>16&255]^i[h>>>8&255]^s[255&p]^n[u++],y=r[d>>>24]^o[h>>>16&255]^i[p>>>8&255]^s[255&l]^n[u++],v=r[h>>>24]^o[p>>>16&255]^i[l>>>8&255]^s[255&d]^n[u++],b=r[p>>>24]^o[l>>>16&255]^i[d>>>8&255]^s[255&h]^n[u++];l=g,d=y,h=v,p=b}g=(a[l>>>24]<<24|a[d>>>16&255]<<16|a[h>>>8&255]<<8|a[255&p])^n[u++],y=(a[d>>>24]<<24|a[h>>>16&255]<<16|a[p>>>8&255]<<8|a[255&l])^n[u++],v=(a[h>>>24]<<24|a[p>>>16&255]<<16|a[l>>>8&255]<<8|a[255&d])^n[u++],b=(a[p>>>24]<<24|a[l>>>16&255]<<16|a[d>>>8&255]<<8|a[255&h])^n[u++],e[t]=g,e[t+1]=y,e[t+2]=v,e[t+3]=b},keySize:8});t.AES=n._createHelper(g)}(),e.AES)),Ce.exports;var e}(),Re(),function(){return Ee||(Ee=1,qe.exports=(e=c(),m(),C(),V(),te(),function(){var t=e,n=t.lib.StreamCipher,r=t.algo,o=r.RC4=n.extend({_doReset:function(){for(var e=this._key,t=e.words,n=e.sigBytes,r=this._S=[],o=0;o<256;o++)r[o]=o;o=0;for(var i=0;o<256;o++){var s=o%n,a=t[s>>>2]>>>24-s%4*8&255;i=(i+r[o]+a)%256;var c=r[o];r[o]=r[i],r[i]=c}this._i=this._j=0},_doProcessBlock:function(e,t){e[t]^=i.call(this)},keySize:8,ivSize:0});function i(){for(var e=this._S,t=this._i,n=this._j,r=0,o=0;o<4;o++){n=(n+e[t=(t+1)%256])%256;var i=e[t];e[t]=e[n],e[n]=i,r|=e[(e[t]+e[n])%256]<<24-8*o}return this._i=t,this._j=n,r}t.RC4=n._createHelper(o);var s=r.RC4Drop=o.extend({cfg:o.cfg.extend({drop:192}),_doReset:function(){o._doReset.call(this);for(var e=this.cfg.drop;e>0;e--)i.call(this)}});t.RC4Drop=n._createHelper(s)}(),e.RC4)),qe.exports;var e}(),function(){return He||(He=1,De.exports=(e=c(),m(),C(),V(),te(),function(){var t=e,n=t.lib.StreamCipher,r=t.algo,o=[],i=[],s=[],a=r.Rabbit=n.extend({_doReset:function(){for(var e=this._key.words,t=this.cfg.iv,n=0;n<4;n++)e[n]=16711935&(e[n]<<8|e[n]>>>24)|4278255360&(e[n]<<24|e[n]>>>8);var r=this._X=[e[0],e[3]<<16|e[2]>>>16,e[1],e[0]<<16|e[3]>>>16,e[2],e[1]<<16|e[0]>>>16,e[3],e[2]<<16|e[1]>>>16],o=this._C=[e[2]<<16|e[2]>>>16,4294901760&e[0]|65535&e[1],e[3]<<16|e[3]>>>16,4294901760&e[1]|65535&e[2],e[0]<<16|e[0]>>>16,4294901760&e[2]|65535&e[3],e[1]<<16|e[1]>>>16,4294901760&e[3]|65535&e[0]];for(this._b=0,n=0;n<4;n++)c.call(this);for(n=0;n<8;n++)o[n]^=r[n+4&7];if(t){var i=t.words,s=i[0],a=i[1],l=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),d=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),h=l>>>16|4294901760&d,p=d<<16|65535&l;for(o[0]^=l,o[1]^=h,o[2]^=d,o[3]^=p,o[4]^=l,o[5]^=h,o[6]^=d,o[7]^=p,n=0;n<4;n++)c.call(this)}},_doProcessBlock:function(e,t){var n=this._X;c.call(this),o[0]=n[0]^n[5]>>>16^n[3]<<16,o[1]=n[2]^n[7]>>>16^n[5]<<16,o[2]=n[4]^n[1]>>>16^n[7]<<16,o[3]=n[6]^n[3]>>>16^n[1]<<16;for(var r=0;r<4;r++)o[r]=16711935&(o[r]<<8|o[r]>>>24)|4278255360&(o[r]<<24|o[r]>>>8),e[t+r]^=o[r]},blockSize:4,ivSize:2});function c(){for(var e=this._X,t=this._C,n=0;n<8;n++)i[n]=t[n];for(t[0]=t[0]+1295307597+this._b|0,t[1]=t[1]+3545052371+(t[0]>>>0<i[0]>>>0?1:0)|0,t[2]=t[2]+886263092+(t[1]>>>0<i[1]>>>0?1:0)|0,t[3]=t[3]+1295307597+(t[2]>>>0<i[2]>>>0?1:0)|0,t[4]=t[4]+3545052371+(t[3]>>>0<i[3]>>>0?1:0)|0,t[5]=t[5]+886263092+(t[4]>>>0<i[4]>>>0?1:0)|0,t[6]=t[6]+1295307597+(t[5]>>>0<i[5]>>>0?1:0)|0,t[7]=t[7]+3545052371+(t[6]>>>0<i[6]>>>0?1:0)|0,this._b=t[7]>>>0<i[7]>>>0?1:0,n=0;n<8;n++){var r=e[n]+t[n],o=65535&r,a=r>>>16,c=((o*o>>>17)+o*a>>>15)+a*a,l=((4294901760&r)*r|0)+((65535&r)*r|0);s[n]=c^l}e[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,e[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,e[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,e[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,e[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,e[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,e[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,e[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}t.Rabbit=n._createHelper(a)}(),e.Rabbit)),De.exports;var e}(),function(){return Te||(Te=1,Le.exports=(e=c(),m(),C(),V(),te(),function(){var t=e,n=t.lib.StreamCipher,r=t.algo,o=[],i=[],s=[],a=r.RabbitLegacy=n.extend({_doReset:function(){var e=this._key.words,t=this.cfg.iv,n=this._X=[e[0],e[3]<<16|e[2]>>>16,e[1],e[0]<<16|e[3]>>>16,e[2],e[1]<<16|e[0]>>>16,e[3],e[2]<<16|e[1]>>>16],r=this._C=[e[2]<<16|e[2]>>>16,4294901760&e[0]|65535&e[1],e[3]<<16|e[3]>>>16,4294901760&e[1]|65535&e[2],e[0]<<16|e[0]>>>16,4294901760&e[2]|65535&e[3],e[1]<<16|e[1]>>>16,4294901760&e[3]|65535&e[0]];this._b=0;for(var o=0;o<4;o++)c.call(this);for(o=0;o<8;o++)r[o]^=n[o+4&7];if(t){var i=t.words,s=i[0],a=i[1],l=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),d=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),h=l>>>16|4294901760&d,p=d<<16|65535&l;for(r[0]^=l,r[1]^=h,r[2]^=d,r[3]^=p,r[4]^=l,r[5]^=h,r[6]^=d,r[7]^=p,o=0;o<4;o++)c.call(this)}},_doProcessBlock:function(e,t){var n=this._X;c.call(this),o[0]=n[0]^n[5]>>>16^n[3]<<16,o[1]=n[2]^n[7]>>>16^n[5]<<16,o[2]=n[4]^n[1]>>>16^n[7]<<16,o[3]=n[6]^n[3]>>>16^n[1]<<16;for(var r=0;r<4;r++)o[r]=16711935&(o[r]<<8|o[r]>>>24)|4278255360&(o[r]<<24|o[r]>>>8),e[t+r]^=o[r]},blockSize:4,ivSize:2});function c(){for(var e=this._X,t=this._C,n=0;n<8;n++)i[n]=t[n];for(t[0]=t[0]+1295307597+this._b|0,t[1]=t[1]+3545052371+(t[0]>>>0<i[0]>>>0?1:0)|0,t[2]=t[2]+886263092+(t[1]>>>0<i[1]>>>0?1:0)|0,t[3]=t[3]+1295307597+(t[2]>>>0<i[2]>>>0?1:0)|0,t[4]=t[4]+3545052371+(t[3]>>>0<i[3]>>>0?1:0)|0,t[5]=t[5]+886263092+(t[4]>>>0<i[4]>>>0?1:0)|0,t[6]=t[6]+1295307597+(t[5]>>>0<i[5]>>>0?1:0)|0,t[7]=t[7]+3545052371+(t[6]>>>0<i[6]>>>0?1:0)|0,this._b=t[7]>>>0<i[7]>>>0?1:0,n=0;n<8;n++){var r=e[n]+t[n],o=65535&r,a=r>>>16,c=((o*o>>>17)+o*a>>>15)+a*a,l=((4294901760&r)*r|0)+((65535&r)*r|0);s[n]=c^l}e[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,e[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,e[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,e[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,e[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,e[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,e[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,e[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}t.RabbitLegacy=n._createHelper(a)}(),e.RabbitLegacy)),Le.exports;var e}(),Fe())),o.exports));class Xe{constructor(){this.requests=new Map,this.listeners=[],this.decryptConfig={enabled:!1},window.__originalFetch=window.fetch,this.interceptXHR(),this.interceptFetch()}enableDecryption(e){this.decryptConfig.enabled=!0,e?.keyExtractor&&(this.decryptConfig.keyExtractor=e.keyExtractor),e?.slkExtractor&&(this.decryptConfig.slkExtractor=e.slkExtractor),void 0!==e?.autoFetchKeys&&(this.decryptConfig.autoFetchKeys=e.autoFetchKeys),e?.keyApiUrl&&(this.decryptConfig.keyApiUrl=e.keyApiUrl)}addListener(e){this.listeners.push(e)}removeListener(e){const t=this.listeners.indexOf(e);t>-1&&this.listeners.splice(t,1)}getRequests(){return Array.from(this.requests.values()).sort((e,t)=>t.timestamp-e.timestamp)}clearRequests(){this.requests.clear()}generateRequestId(){return Math.random().toString(36).substr(2,9)}isInternalUrl(e){return e.includes("/api/dokv/storage")||e.includes("/api/share")}notifyListeners(e){this.listeners.forEach(t=>{try{t(e)}catch(n){}})}async tryDecrypt(e,t){if(!this.decryptConfig.enabled||!e)return null;try{let r="",o="";if(t.cid&&!1!==this.decryptConfig.autoFetchKeys)try{const e=this.decryptConfig.keyApiUrl||"https://gw-card-pay.buyacard.cc/ip/getSK",n={cid:t.cid,client:t.client||"S_WEB",device:t.device||"Web",language:t.language||"CN"},o=window.__originalFetch||window.fetch,i=await o(e,{headers:n}),s=await i.json();if(s.success&&s.data){const e=String(s.data);e.length>=9&&(r=e.charAt(2)+e.charAt(5)+e.charAt(8))}}catch(n){}!r&&this.decryptConfig.keyExtractor?r=this.decryptConfig.keyExtractor(t):r||(r=t.decryptKey||t.keys||t.cid||""),o=this.decryptConfig.slkExtractor?this.decryptConfig.slkExtractor(t):t.decryptSlk||t.slk||"";const i=r+o;if(i){let t=e,r=!1;if("object"==typeof e&&null!==e&&e.data&&"string"==typeof e.data)t=e.data,r=!0;else if("string"==typeof e)try{const n=JSON.parse(e);n.data&&"string"==typeof n.data&&(t=n.data,r=!0)}catch{}const o="string"==typeof t?t:JSON.stringify(t),s=function(e,t){if(!e||e.startsWith("{")||e.startsWith("["))try{return JSON.parse(e)}catch{return e}if(window.decrypt&&t)try{const n=window.decrypt(e,t);if(n&&n!==e&&!n.includes("�"))try{return JSON.parse(n)}catch{if(n.length>0)return n}}catch(n){}const r=[t,"thisisakey123456","VITE_CRYPTO_KEY"].filter(Boolean);for(const o of r)if(o)try{const t=Ke.enc.Utf8.parse(o.padEnd(16,"0").slice(0,16)),n=Ke.enc.Utf8.parse(o.padEnd(16,"0").slice(0,16)),r=Ke.AES.decrypt(e,t,{iv:n,mode:Ke.mode.CBC,padding:Ke.pad.Pkcs7}).toString(Ke.enc.Utf8);if(r)try{return JSON.parse(r)}catch{return r}}catch(n){}try{const t=atob(e);try{return JSON.parse(t)}catch{return t}}catch{}return e}(o,i);if(s&&s!==o)return s}}catch(r){}return null}interceptXHR(){const e=window.XMLHttpRequest,t=this;window.XMLHttpRequest=function(...n){const r=new e(...n),o=t.generateRequestId();let i="",s="",a={};const c=Date.now();let l=!1;const d=r.open;r.open=function(e,n,...r){return i=e.toUpperCase(),s=n,l=t.isInternalUrl(s),d.apply(this,[e,n,...r])};const h=r.setRequestHeader;r.setRequestHeader=function(e,t){return a[e]=t,h.call(this,e,t)};const p=r.send;return r.send=function(e){if(l)return p.call(this,e);const n={id:o,url:s,method:i,headers:{...a},requestBody:e,timestamp:c};return e&&t.tryDecrypt(e,a).then(e=>{null!==e&&(n.decryptedRequest=e,t.requests.set(o,n),t.notifyListeners(n))}).catch(e=>{}),t.requests.set(o,n),t.notifyListeners(n),p.call(this,e)},r.addEventListener("readystatechange",function(){if(4===r.readyState&&!l){const e=Date.now(),n=t.requests.get(o);if(n){n.status=r.status,n.statusText=r.statusText,n.duration=e-c;const i={},s=r.getAllResponseHeaders();s&&s.split("\r\n").forEach(e=>{const t=e.split(": ");2===t.length&&(i[t[0]]=t[1])}),n.responseHeaders=i;if(null!==r.responseText&&void 0!==r.responseText&&""!==r.responseText)try{n.responseBody=JSON.parse(r.responseText)}catch{n.responseBody=r.responseText}else n.responseBody=null;t.requests.set(o,n),t.notifyListeners(n),n.responseBody&&t.tryDecrypt(n.responseBody,{...a,...i}).then(e=>{null!==e&&(n.decryptedResponse=e,t.requests.set(o,n),t.notifyListeners(n))}).catch(e=>{})}}}),r},window.XMLHttpRequest.prototype=e.prototype}interceptFetch(){const e=window.__originalFetch||window.fetch,t=this;window.fetch=async function(n,r){const o=t.generateRequestId(),i=Date.now(),s="string"==typeof n?n:n instanceof URL?n.toString():n.url,a=(r?.method||"GET").toUpperCase();if(t.isInternalUrl(s))return e.call(this,n,r);const c={};r?.headers&&(r.headers instanceof Headers?r.headers.forEach((e,t)=>{c[t]=e}):Array.isArray(r.headers)?r.headers.forEach(([e,t])=>{c[e]=t}):Object.entries(r.headers).forEach(([e,t])=>{c[e]=t}));let l=null;if(r?.body)if("string"==typeof r.body)try{l=JSON.parse(r.body)}catch{l=r.body}else l=r.body;const d={id:o,url:s,method:a,headers:{...c},requestBody:l,timestamp:i};l&&t.tryDecrypt(l,c).then(e=>{null!==e&&(d.decryptedRequest=e,t.requests.set(o,d),t.notifyListeners(d))}).catch(e=>{}),t.requests.set(o,d),t.notifyListeners(d);try{const s=await e.call(this,n,r),a=Date.now(),l=s.clone(),d=t.requests.get(o);if(d){d.status=s.status,d.statusText=s.statusText,d.duration=a-i;const e={};s.headers.forEach((t,n)=>{e[n]=t}),d.responseHeaders=e;try{const n=await l.text();try{d.responseBody=JSON.parse(n)}catch{d.responseBody=n}t.requests.set(o,d),t.notifyListeners(d),d.responseBody&&t.tryDecrypt(d.responseBody,{...c,...e}).then(e=>{null!==e&&(d.decryptedResponse=e,t.requests.set(o,d),t.notifyListeners(d))}).catch(e=>{})}catch(h){d.error=`Failed to read response: ${h}`,t.requests.set(o,d),t.notifyListeners(d)}}return s}catch(h){const e=Date.now(),n=t.requests.get(o);throw n&&(n.error=h instanceof Error?h.message:String(h),n.duration=e-i,t.requests.set(o,n),t.notifyListeners(n)),h}}}}class Je{constructor(){this.loaded=!1,this.loading=!1}async loadWasm(e,t){if("function"==typeof window.decrypt)return this.loaded=!0,!0;if(this.loaded)return!0;if(this.loading)return new Promise(e=>{const t=()=>{this.loaded||!this.loading?e(this.loaded):setTimeout(t,100)};t()});this.loading=!0;try{const i=[e,"/mimlib.wasm","/dist/mimlib.wasm","/assets/mimlib.wasm","https://gw-card-pay.buyacard.cc/mimlib.wasm"].filter(Boolean),s=[t,"/wasm_exec.js","/dist/wasm_exec.js","/assets/wasm_exec.js","https://gw-card-pay.buyacard.cc/wasm_exec.js"].filter(Boolean);let a=!1;for(const e of s)try{if(await this.loadScript(e),void 0!==window.Go){a=!0;break}}catch(n){continue}if(!a)throw new Error("Unable to load wasm_exec.js from any path");if(void 0===window.Go)throw new Error("Go WebAssembly runtime not available");const c=new window.Go;let l=null;for(const e of i)try{if(!WebAssembly.instantiateStreaming){const t=await fetch(e).then(e=>e.arrayBuffer());l=await WebAssembly.instantiate(t,c.importObject);break}try{l=await WebAssembly.instantiateStreaming(fetch(e),c.importObject);break}catch(r){const t=await fetch(e).then(e=>e.arrayBuffer());l=await WebAssembly.instantiate(t,c.importObject);break}}catch(o){continue}if(!l)throw new Error("Unable to load WebAssembly from any path");return c.run(l.instance),await new Promise(e=>setTimeout(e,100)),"function"==typeof window.decrypt&&(this.loaded=!0,!0)}catch(o){return!1}finally{this.loading=!1}}loadScript(e){return new Promise((t,n)=>{if(document.querySelector(`script[src="${e}"]`))return void t();const r=document.createElement("script");r.src=e,r.type="text/javascript",r.onload=()=>t(),r.onerror=t=>n(new Error(`Failed to load script: ${e}`)),document.head.appendChild(r)})}isLoaded(){return this.loaded}isLoading(){return this.loading}isDecryptAvailable(){return this.loaded&&"function"==typeof window.decrypt}isEncryptAvailable(){return this.loaded&&"function"==typeof window.encrypt}}function Ge(e){return JSON.stringify(e,null,2)}async function Ye(e){try{const t=function(e){let t=`curl '${e.url}'`;"GET"!==e.method&&(t+=` -X ${e.method}`);e.headers&&Object.entries(e.headers).forEach(([e,n])=>{t+=` -H '${e}: ${n}'`});if(e.requestBody){const n="string"==typeof e.requestBody?e.requestBody:JSON.stringify(e.requestBody);t+=` --data '${n}'`}return t}(e),n={curl:t,response:e.responseBody||null,timestamp:Date.now(),slk:e.headers?.slk||"",debuggerData:{url:e.url,method:e.method,headers:e.headers,status:e.status,statusText:e.statusText,duration:e.duration,responseHeaders:e.responseHeaders,decryptedRequest:e.decryptedRequest,decryptedResponse:e.decryptedResponse,error:e.error,creator:"PWTK Network Debugger by Leo (@leeguoo)",version:"1.2.0"}},r=window.__originalFetch||window.fetch,o=await r("https://curl.bwg.leeguoo.com/api/share",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({data:n})}),i=await o.json();if(i.shareId){return`https://curl.bwg.leeguoo.com/share/${i.shareId}`}throw new Error(i.error||"创建分享失败")}catch(t){throw t}}class Ze{constructor(e,t={}){this.isDragging=!1,this.isResizing=!1,this.dragStart={x:0,y:0},this.currentTab="network",this.consoleHistory=[],this.requestsCache=[],this.interceptor=e,this.config={position:"bottom-right",theme:"dark",minimized:!1,showConsole:!0,...t},this.createPanel(),this.bindEvents(),this.startListening()}createPanel(){if(!document.getElementById("network-debugger-styles")){const e=document.createElement("style");e.id="network-debugger-styles",e.textContent="\n/* NetworkDebugger 样式 */\n#network-debugger-panel {\n position: fixed;\n z-index: 999999;\n background: #1a1a1a;\n color: #ffffff;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n font-size: 12px;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);\n border-radius: 8px;\n overflow: hidden;\n max-width: 90vw;\n max-height: 80vh;\n transition: all 0.3s ease;\n}\n\n#network-debugger-panel.minimized {\n height: 40px !important;\n overflow: hidden;\n width: auto !important;\n min-width: 200px;\n}\n\n#network-debugger-panel.minimized .debugger-content {\n display: none;\n}\n\n#network-debugger-panel.minimized .resize-handle {\n display: none;\n}\n\n#network-debugger-panel.bottom-right {\n bottom: 20px;\n right: 20px;\n width: 400px;\n height: 300px;\n}\n\n#network-debugger-panel.bottom-left {\n bottom: 20px;\n left: 20px;\n width: 400px;\n height: 300px;\n}\n\n#network-debugger-panel.top-right {\n top: 20px;\n right: 20px;\n width: 400px;\n height: 300px;\n}\n\n#network-debugger-panel.top-left {\n top: 20px;\n left: 20px;\n width: 400px;\n height: 300px;\n}\n\n#network-debugger-panel.fullscreen {\n top: 0;\n left: 0;\n width: 100vw !important;\n height: 100vh !important;\n border-radius: 0;\n}\n\n.debugger-header {\n background: #333;\n padding: 8px 12px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n cursor: move;\n user-select: none;\n border-bottom: 1px solid #444;\n}\n\n.debugger-title {\n font-weight: bold;\n color: #4CAF50;\n font-size: 14px;\n}\n\n.debugger-controls {\n display: flex;\n gap: 8px;\n}\n\n.debugger-btn {\n background: none;\n border: none;\n color: #fff;\n padding: 4px 8px;\n border-radius: 4px;\n cursor: pointer;\n font-size: 12px;\n transition: background-color 0.2s;\n}\n\n.debugger-btn:hover {\n background: #555;\n}\n\n.debugger-btn.active {\n background: #4CAF50;\n color: #000;\n}\n\n.debugger-content {\n height: calc(100% - 40px);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n.debugger-tabs {\n display: flex;\n background: #2a2a2a;\n border-bottom: 1px solid #444;\n}\n\n.debugger-tab {\n padding: 8px 16px;\n cursor: pointer;\n border: none;\n background: none;\n color: #ccc;\n font-size: 12px;\n transition: all 0.2s;\n border-bottom: 2px solid transparent;\n}\n\n.debugger-tab:hover {\n color: #fff;\n background: #3a3a3a;\n}\n\n.debugger-tab.active {\n color: #4CAF50;\n border-bottom-color: #4CAF50;\n background: #333;\n}\n\n.debugger-panel-content {\n flex: 1;\n overflow: auto;\n padding: 12px;\n}\n\n.request-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.request-item {\n background: #2a2a2a;\n border: 1px solid #444;\n border-radius: 6px;\n padding: 10px;\n cursor: pointer;\n transition: all 0.2s;\n position: relative;\n}\n\n.request-item:hover {\n background: #333;\n border-color: #666;\n}\n\n.request-item.expanded {\n background: #333;\n border-color: #4CAF50;\n}\n\n.request-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 4px;\n}\n\n.request-method {\n padding: 2px 8px;\n border-radius: 4px;\n font-weight: bold;\n font-size: 10px;\n text-transform: uppercase;\n min-width: 40px;\n text-align: center;\n}\n\n.method-get { background: #4CAF50; color: #000; }\n.method-post { background: #2196F3; color: #fff; }\n.method-put { background: #FF9800; color: #000; }\n.method-delete { background: #F44336; color: #fff; }\n.method-patch { background: #9C27B0; color: #fff; }\n\n.request-url {\n flex: 1;\n margin: 0 8px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: #fff;\n font-size: 11px;\n}\n\n.request-status {\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 10px;\n min-width: 35px;\n text-align: center;\n}\n\n.status-2xx { background: #4CAF50; color: #000; }\n.status-3xx { background: #FF9800; color: #000; }\n.status-4xx { background: #F44336; color: #fff; }\n.status-5xx { background: #9C27B0; color: #fff; }\n.status-error { background: #F44336; color: #fff; }\n\n.request-info {\n display: flex;\n justify-content: space-between;\n font-size: 10px;\n color: #999;\n}\n\n.request-details {\n margin-top: 12px;\n border-top: 1px solid #444;\n padding-top: 12px;\n display: none;\n}\n\n/* 默认折叠headers */\n.request-details .detail-section.collapsible {\n /* 默认折叠状态 */\n}\n\n.request-details .detail-section.collapsible:not(.expanded) .detail-content {\n display: none;\n}\n\n.request-details .detail-section.collapsible:not(.expanded) .collapse-icon {\n transform: rotate(-90deg);\n}\n\n.request-item.expanded .request-details {\n display: block;\n}\n\n.detail-section {\n margin-bottom: 16px;\n}\n\n.detail-title {\n font-weight: bold;\n color: #4CAF50;\n margin-bottom: 8px;\n font-size: 11px;\n text-transform: uppercase;\n border-bottom: 1px solid #444;\n padding-bottom: 4px;\n}\n\n.detail-title.highlight {\n color: #FFD700;\n font-size: 12px;\n background: rgba(255, 215, 0, 0.1);\n padding: 6px 8px;\n border-radius: 4px;\n border-bottom: 2px solid #FFD700;\n}\n\n.detail-title.clickable {\n cursor: pointer;\n user-select: none;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.detail-title.clickable:hover {\n background: rgba(76, 175, 80, 0.1);\n}\n\n.collapse-icon {\n display: inline-block;\n transition: transform 0.2s;\n font-size: 10px;\n}\n\n.detail-section.collapsible {\n position: relative;\n}\n\n.detail-section.collapsible.collapsed .detail-content {\n display: none;\n}\n\n.detail-section.collapsible.collapsed .collapse-icon {\n transform: rotate(-90deg);\n}\n\n.detail-content {\n background: #222;\n padding: 8px;\n border-radius: 4px;\n max-height: 200px;\n overflow: auto;\n}\n\n.json-content {\n white-space: pre-wrap;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n font-size: 11px;\n line-height: 1.4;\n}\n\n.headers-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 10px;\n}\n\n.headers-table th,\n.headers-table td {\n padding: 4px 8px;\n text-align: left;\n border-bottom: 1px solid #444;\n}\n\n.headers-table th {\n background: #333;\n color: #4CAF50;\n font-weight: bold;\n}\n\n.headers-table td {\n color: #ccc;\n}\n\n.decrypted-badge {\n background: #4CAF50;\n color: #000;\n padding: 2px 6px;\n border-radius: 3px;\n font-size: 9px;\n margin-left: 8px;\n font-weight: bold;\n}\n\n.error-badge {\n background: #F44336;\n color: #fff;\n padding: 2px 6px;\n border-radius: 3px;\n font-size: 9px;\n margin-left: 8px;\n font-weight: bold;\n}\n\n.share-btn {\n background: #2196F3;\n color: #fff;\n border: none;\n padding: 4px 10px;\n border-radius: 3px;\n font-size: 11px;\n margin-left: 8px;\n cursor: pointer;\n transition: all 0.2s;\n white-space: nowrap;\n}\n\n.share-btn:hover {\n background: #1976D2;\n transform: scale(1.1);\n}\n\n.share-btn:active {\n transform: scale(0.95);\n}\n\n.console-content {\n background: #000;\n color: #0f0;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n font-size: 11px;\n line-height: 1.4;\n height: 100%;\n overflow: auto;\n padding: 8px;\n}\n\n.console-input {\n display: flex;\n align-items: center;\n background: #333;\n padding: 8px;\n border-top: 1px solid #444;\n}\n\n.console-prompt {\n color: #4CAF50;\n margin-right: 8px;\n font-weight: bold;\n}\n\n.console-cmd {\n flex: 1;\n background: none;\n border: none;\n color: #fff;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n font-size: 12px;\n outline: none;\n}\n\n.tools-section {\n padding: 12px;\n background: #2a2a2a;\n border-bottom: 1px solid #444;\n}\n\n.tool-buttons {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.tool-btn {\n padding: 6px 12px;\n background: #4CAF50;\n color: #000;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 11px;\n font-weight: bold;\n transition: background-color 0.2s;\n}\n\n.tool-btn:hover {\n background: #45a049;\n}\n\n.tool-btn:disabled {\n background: #666;\n color: #999;\n cursor: not-allowed;\n}\n\n@media (max-width: 600px) {\n #network-debugger-panel.bottom-right,\n #network-debugger-panel.bottom-left,\n #network-debugger-panel.top-right,\n #network-debugger-panel.top-left {\n width: calc(100vw - 20px) !important;\n left: 10px !important;\n right: auto !important;\n }\n}\n\n::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n}\n\n::-webkit-scrollbar-track {\n background: #333;\n}\n\n::-webkit-scrollbar-thumb {\n background: #666;\n border-radius: 3px;\n}\n\n::-webkit-scrollbar-thumb:hover {\n background: #888;\n}\n\n.resize-handle {\n position: absolute;\n background: transparent;\n}\n\n.resize-handle.n {\n top: -3px;\n left: 0;\n right: 0;\n height: 6px;\n cursor: ns-resize;\n}\n\n.resize-handle.s {\n bottom: -3px;\n left: 0;\n right: 0;\n height: 6px;\n cursor: ns-resize;\n}\n\n.resize-handle.e {\n top: 0;\n right: -3px;\n bottom: 0;\n width: 6px;\n cursor: ew-resize;\n}\n\n.resize-handle.w {\n top: 0;\n left: -3px;\n bottom: 0;\n width: 6px;\n cursor: ew-resize;\n}\n\n.resize-handle.ne {\n top: -3px;\n right: -3px;\n width: 12px;\n height: 12px;\n cursor: ne-resize;\n}\n\n.resize-handle.nw {\n top: -3px;\n left: -3px;\n width: 12px;\n height: 12px;\n cursor: nw-resize;\n}\n\n.resize-handle.se {\n bottom: -3px;\n right: -3px;\n width: 12px;\n height: 12px;\n cursor: se-resize;\n}\n\n.resize-handle.sw {\n bottom: -3px;\n left: -3px;\n width: 12px;\n height: 12px;\n cursor: sw-resize;\n}\n",document.head.appendChild(e)}this.container=document.createElement("div"),this.container.id="network-debugger-panel",this.container.className=`${this.config.position} ${this.config.minimized?"minimized":""}`,this.container.innerHTML=`\n <div class="debugger-header">\n <div class="debugger-title">🔓 ${this.config.minimized?"PWTK":"PWTK 解密小工具"} <span style="font-size: 10px; opacity: 0.7;">by Leo</span></div>\n <div class="debugger-controls">\n ${this.config.minimized?"":'<button class="debugger-btn" data-action="clear" title="清空">🗑️</button>'}\n ${this.config.minimized?"":'<button class="debugger-btn" data-action="export" title="导出">💾</button>'}\n <button class="debugger-btn" data-action="minimize" title="${this.config.minimized?"展开":"最小化"}">${this.config.minimized?"📖":"📕"}</button>\n ${this.config.minimized?"":'<button class="debugger-btn" data-action="fullscreen" title="全屏">⛶</button>'}\n <button class="debugger-btn" data-action="close" title="关闭">✕</button>\n </div>\n </div>\n <div class="debugger-content">\n <div class="debugger-tabs">\n <button class="debugger-tab active" data-tab="network">网络</button>\n ${this.config.showConsole?'<button class="debugger-tab" data-tab="console">控制台</button>':""}\n <button class="debugger-tab" data-tab="tools">工具</button>\n <button class="debugger-tab" data-tab="about">关于</button>\n </div>\n <div class="debugger-panel-content">\n <div class="network-panel" data-panel="network">\n <div class="request-list"></div>\n </div>\n ${this.config.showConsole?'\n <div class="console-panel" data-panel="console" style="display: none;">\n <div class="console-content"></div>\n <div class="console-input">\n <span class="console-prompt">></span>\n <input class="console-cmd" placeholder="输入 JavaScript 代码..." />\n </div>\n </div>\n ':""}\n <div class="tools-panel" data-panel="tools" style="display: none;">\n <div class="tools-section">\n <div class="tool-buttons">\n <button class="tool-btn" data-tool="parse-curl">解析 cURL</button>\n <button class="tool-btn" data-tool="export-har">导出 HAR</button>\n <button class="tool-btn" data-tool="cors-test">CORS 测试</button>\n <button class="tool-btn" data-tool="decrypt-test">解密测试</button>\n </div>\n </div>\n <div class="tools-content">\n <textarea placeholder="在这里粘贴 cURL 命令或输入要测试的数据..." style="width: 100%; height: 200px; background: #222; color: #fff; border: 1px solid #444; padding: 8px; font-family: monospace;"></textarea>\n </div>\n </div>\n <div class="about-panel" data-panel="about" style="display: none;">\n <div style="padding: 20px; color: #fff; text-align: center;">\n <h2 style="margin: 0 0 20px 0;">🔓 PWTK 解密小工具</h2>\n <p style="margin: 10px 0;">Version: 1.2.14</p>\n <p style="margin: 10px 0;">👨‍💻 Created by <strong>Leo (@leeguoo)</strong></p>\n <p style="margin: 10px 0;">📧 技术支持:请联系 Leo</p>\n <p style="margin: 10px 0;">🌐 分享服务:curl.bwg.leeguoo.com</p>\n <div style="margin-top: 20px; padding: 15px; background: #333; border-radius: 8px;">\n <p style="margin: 5px 0; font-size: 12px;">本工具专为 PWTK 项目开发</p>\n <p style="margin: 5px 0; font-size: 12px;">提供网络请求拦截、解密、分享等功能</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n `,this.addResizeHandles(),document.body.appendChild(this.container),this.networkTab=this.container.querySelector('[data-panel="network"]'),this.consoleTab=this.container.querySelector('[data-panel="console"]'),this.consoleContent=this.container.querySelector(".console-content")}addResizeHandles(){["n","s","e","w","ne","nw","se","sw"].forEach(e=>{const t=document.createElement("div");t.className=`resize-handle ${e}`,t.dataset.direction=e,this.container.appendChild(t)})}bindEvents(){const e=this.container.querySelector(".debugger-header"),t=this.container.querySelector(".debugger-controls"),n=this.container.querySelectorAll(".debugger-tab"),r=this.container.querySelectorAll("[data-tool]"),o=this.container.querySelector(".console-cmd");e.addEventListener("mousedown",e=>{e.target===t||t.contains(e.target)||this.startDrag(e)}),t.addEventListener("click",e=>{switch(e.target.dataset.action){case"clear":this.clearRequests();break;case"export":this.exportData();break;case"minimize":this.toggleMinimize();break;case"fullscreen":this.toggleFullscreen();break;case"close":this.hide()}}),n.forEach(e=>{e.addEventListener("click",e=>{const t=e.target.dataset.tab;this.switchTab(t)})}),r.forEach(e=>{e.addEventListener("click",e=>{const t=e.target.dataset.tool;this.handleToolAction(t)})}),o&&o.addEventListener("keypress",e=>{"Enter"===e.key&&(this.executeConsoleCommand(o.value),o.value="")});this.container.querySelectorAll(".resize-handle").forEach(e=>{e.addEventListener("mousedown",t=>{t.stopPropagation(),this.startResize(t,e.dataset.direction||e.classList[1])})}),document.addEventListener("mousemove",this.handleMouseMove.bind(this)),document.addEventListener("mouseup",this.handleMouseUp.bind(this))}startListening(){this.interceptor.addListener(e=>{this.addRequestToUI(e)}),this.requestsCache=this.interceptor.getRequests(),this.renderRequests()}addRequestToUI(e){const t=this.requestsCache.findIndex(t=>t.id===e.id);t>=0?this.requestsCache[t]=e:this.requestsCache.unshift(e),this.requestsCache.length>100&&(this.requestsCache=this.requestsCache.slice(0,100)),this.renderRequests()}renderRequests(){const e=this.container.querySelector(".request-list");e&&(e.innerHTML="",this.requestsCache.forEach(t=>{const n=this.createRequestItem(t);e.appendChild(n)}))}createRequestItem(e){const t=document.createElement("div");t.className="request-item",t.dataset.requestId=e.id;const n=this.getStatusClass(e.status),r=`method-${e.method.toLowerCase()}`;e.decryptedRequest||e.decryptedResponse;const o=e.error;t.innerHTML=`\n <div class="request-header">\n <span class="request-method ${r}">${e.method}</span>\n <span class="request-url" title="${e.url}">${this.truncateUrl(e.url)}</span>\n <span class="request-status ${n}">${e.status?e.status:void 0!==e.duration?"ERR":"Pending"}</span>\n ${o?'<span class="error-badge">⚠️</span>':""}\n <button class="share-btn" title="分享此请求 (by Leo)" onclick="event.stopPropagation()">分享链接</button>\n </div>\n <div class="request-info">\n <span>${new Date(e.timestamp).toLocaleTimeString()}</span>\n <span>${e.duration?`${e.duration}ms`:"Pending"}</span>\n </div>\n <div class="request-details">\n ${this.renderRequestDetails(e)}\n </div>\n `,t.addEventListener("click",()=>{t.classList.toggle("expanded")});const i=t.querySelector(".share-btn");return i&&i.addEventListener("click",async t=>{t.stopPropagation(),await this.shareRequest(e)}),t}renderRequestDetails(e){let t="";return e.id.replace(/[^a-zA-Z0-9]/g,""),e.decryptedRequest&&(t+=`\n <div class="detail-section">\n <div class="detail-title highlight">解密请求数据</div>\n <div class="detail-content">\n <div class="json-content">${this.formatData(e.decryptedRequest)}</div>\n </div>\n </div>\n `),e.decryptedResponse&&(t+=`\n <div class="detail-section">\n <div class="detail-title highlight">解密响应数据</div>\n <div class="detail-content">\n <div class="json-content">${this.formatData(e.decryptedResponse)}</div>\n </div>\n </div>\n `),Object.keys(e.headers).length>0&&(t+=`\n <div class="detail-section collapsible collapsed">\n <div class="detail-title clickable" onclick="this.parentElement.classList.toggle('collapsed')">\n <span class="collapse-icon">▼</span> 请求头 (${Object.keys(e.headers).length})\n </div>\n <div class="detail-content">\n <table class="headers-table">\n ${Object.entries(e.headers).map(([e,t])=>`<tr><td>${e}</td><td>${t}</td></tr>`).join("")}\n </table>\n </div>\n </div>\n `),e.responseHeaders&&Object.keys(e.responseHeaders).length>0&&(t+=`\n <div class="detail-section collapsible collapsed">\n <div class="detail-title clickable" onclick="this.parentElement.classList.toggle('collapsed')">\n <span class="collapse-icon">▼</span> 响应头 (${Object.keys(e.responseHeaders).length})\n </div>\n <div class="detail-content">\n <table class="headers-table">\n ${Object.entries(e.responseHeaders).map(([e,t])=>`<tr><td>${e}</td><td>${t}</td></tr>`).join("")}\n </table>\n </div>\n </div>\n `),e.requestBody&&(t+=`\n <div class="detail-section">\n <div class="detail-title">${e.decryptedRequest?"原始请求数据":"请求数据"}</div>\n <div class="detail-content">\n <div class="json-content">${this.formatData(e.requestBody)}</div>\n </div>\n </div>\n `),e.responseBody&&(t+=`\n <div class="detail-section">\n <div class="detail-title">${e.decryptedResponse?"原始响应数据":"响应数据"}</div>\n <div class="detail-content">\n <div class="json-content">${this.formatData(e.responseBody)}</div>\n </div>\n </div>\n `),e.error&&(t+=`\n <div class="detail-section">\n <div class="detail-title">错误信息</div>\n <div class="detail-content">\n <div class="json-content" style="color: #f44336;">${e.error}</div>\n </div>\n </div>\n `),t}formatData(e){if("string"==typeof e)try{return Ge(JSON.parse(e))}catch{return e}return Ge(e)}getStatusClass(e){return e?e>=200&&e<300?"status-2xx":e>=300&&e<400?"status-3xx":e>=400&&e<500?"status-4xx":e>=500?"status-5xx":"status-error":"status-error"}truncateUrl(e){return e}switchTab(e){this.container.querySelectorAll(".debugger-tab").forEach(t=>{t.classList.toggle("active",t.dataset.tab===e)}),this.container.querySelectorAll("[data-panel]").forEach(t=>{t.style.display=t.getAttribute("data-panel")===e?"block":"none"}),this.currentTab=e}clearRequests(){this.requestsCache=[],this.interceptor.clearRequests(),this.renderRequests(),this.logToConsole("✅ 已清空网络请求记录")}exportData(){const e={timestamp:(new Date).toISOString(),requests:this.requestsCache,userAgent:navigator.userAgent,url:window.location.href,creator:"PWTK Network Debugger by Leo (@leeguoo)"},t=new Blob([JSON.stringify(e,null,2)],{type:"application/json"}),n=URL.createObjectURL(t),r=document.createElement("a");r.href=n,r.download=`network-debug-${Date.now()}.json`,r.click(),URL.revokeObjectURL(n),this.logToConsole("💾 网络数据已导出 (by Leo)")}async shareRequest(e){try{this.logToConsole("📤 正在创建分享链接...");const t=await Ye(e);if(!t)throw new Error("无法创建分享链接");await async function(e){try{if(navigator.clipboard&&navigator.clipboard.writeText)return await navigator.clipboard.writeText(e),!0;{const t=document.createElement("textarea");t.value=e,t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select();const n=document.execCommand("copy");return document.body.removeChild(t),n}}catch(t){return!1}}(t)?(this.logToConsole(`✅ 分享链接已复制到剪贴板: ${t}`),alert(`分享链接已复制到剪贴板!\n${t}\n\nCreated by Leo (@leeguoo)`)):(this.logToConsole(`✅ 分享链接: ${t}`),prompt("分享链接已创建,请手动复制:\n\nCreated by Leo (@leeguoo)",t))}catch(t){this.logToConsole(`❌ 分享失败: ${t}`),alert("分享失败,请稍后重试")}}toggleMinimize(){this.config.minimized=!this.config.minimized,this.container.classList.toggle("minimized",this.config.minimized);const e=this.container.querySelector(".debugger-header");if(e){e.innerHTML=`\n <div class="debugger-title">🔓 ${this.config.minimized?"PWTK":"PWTK 解密小工具"} <span style="font-size: 10px; opacity: 0.7;">by Leo</span></div>\n <div class="debugger-controls">\n ${this.config.minimized?"":'<button class="debugger-btn" data-action="clear" title="清空">🗑️</button>'}\n ${this.config.minimized?"":'<button class="debugger-btn" data-action="export" title="导出">💾</button>'}\n <button class="debugger-btn" data-action="minimize" title="${this.config.minimized?"展开":"最小化"}">${this.config.minimized?"📖":"📕"}</button>\n ${this.config.minimized?"":'<button class="debugger-btn" data-action="fullscreen" title="全屏">⛶</button>'}\n <button class="debugger-btn" data-action="close" title="关闭">✕</button>\n </div>\n `;e.querySelector(".debugger-controls").addEventListener("click",e=>{switch(e.target.dataset.action){case"clear":this.clearRequests();break;case"export":this.exportData();break;case"minimize":this.toggleMinimize();break;case"fullscreen":this.toggleFullscreen();break;case"close":this.hide()}})}}toggleFullscreen(){this.container.classList.toggle("fullscreen")}handleToolAction(e){const t=this.container.querySelector(".tools-content textarea").value.trim();switch(e){case"parse-curl":this.handleParseCurl(t);break;case"export-har":this.exportHAR();break;case"cors-test":this.handleCorsTest(t);break;case"decrypt-test":this.handleDecryptTest(t)}}handleParseCurl(e){if(e)try{const t=function(e){const t=e.split("\\\n").map(e=>e.trim()).join(" "),n=t.match(/c?curl\s+['"]?([^'"\s]+)['"]?/),r=n?n[1]:"",o={},i=t.matchAll(/-H\s+['"]([^:]+):\s*([^'"]*)['"]/g);for(const l of i)o[l[1]]=l[2];let s;const a=t.match(/(?:--data-raw|--data|-d)\s+['"]({.+?})['"]/s);if(a){const e=a[1];try{s=JSON.parse(e)}catch{s=e}}const c=t.match(/-X\s+(['"]?)([A-Z]+)\1/);return{url:r,method:c?c[2]:s?"POST":"GET",headers:o,data:s}}(e);this.logToConsole("✅ cURL 解析成功:"),this.logToConsole(t)}catch(t){this.logToConsole(`❌ cURL 解析失败: ${t instanceof Error?t.message:String(t)}`,"error")}else this.logToConsole("❌ 请输入 cURL 命令")}exportHAR(){const e={log:{version:"1.2",creator:{name:"NetworkDebugger",version:"1.0.0",comment:"Created by Leo (@leeguoo)"},entries:this.requestsCache.map(e=>({startedDateTime:new Date(e.timestamp).toISOString(),time:e.duration||0,request:{method:e.method,url:e.url,headers:Object.entries(e.headers).map(([e,t])=>({name:e,value:t})),postData:e.requestBody?{mimeType:"application/json",text:"string"==typeof e.requestBody?e.requestBody:JSON.stringify(e.requestBody)}:void 0},response:{status:e.status||0,statusText:e.statusText||"",headers:e.responseHeaders?Object.entries(e.responseHeaders).map(([e,t])=>({name:e,value:t})):[],content:{size:0,mimeType:"application/json",text:e.responseBody?"string"==typeof e.responseBody?e.responseBody:JSON.stringify(e.responseBody):""}}}))}},t=new Blob([JSON.stringify(e,null,2)],{type:"application/json"}),n=URL.createObjectURL(t),r=document.createElement("a");r.href=n,r.download=`network-har-${Date.now()}.har`,r.click(),URL.revokeObjectURL(n),this.logToConsole("💾 HAR 文件已导出")}handleCorsTest(e){e?(this.logToConsole(`🔍 开始 CORS 测试: ${e}`),fetch(e,{mode:"cors"}).then(e=>{this.logToConsole(`✅ CORS 测试成功: ${e.status} ${e.statusText}`)}).catch(e=>{this.logToConsole(`❌ CORS 测试失败: ${e.message}`)})):this.logToConsole("❌ 请输入要测试的 URL")}handleDecryptTest(e){e?this.logToConsole("🔓 解密测试功能开发中..."):this.logToConsole("❌ 请输入要解密的数据")}executeConsoleCommand(e){if(e.trim()){this.consoleHistory.push(e),this.logToConsole(`> ${e}`);try{const t=new Function("return "+e)();this.logToConsole(t)}catch(t){try{const t=new Function(e)();this.logToConsole(void 0!==t?t:"undefined")}catch(n){this.logToConsole(`❌ ${t}`,"error")}}}}logToConsole(e,t="log"){if(!this.consoleContent)return;const n=(new Date).toLocaleTimeString(),r="object"==typeof e?JSON.stringify(e,null,2):e,o=document.createElement("div");o.innerHTML=`[${n}] ${r}`,"error"===t?o.style.color="#f44336":"warn"===t&&(o.style.color="#ff9800"),this.consoleContent.appendChild(o),this.consoleContent.scrollTop=this.consoleContent.scrollHeight}startDrag(e){this.isDragging=!0,this.dragStart={x:e.clientX,y:e.clientY},this.container.style.transition="none"}startResize(e,t){this.isResizing=!0,this.dragStart={x:e.clientX,y:e.clientY},this.container.style.transition="none"(this.container).dataset.resizeDirection=t}handleMouseMove(e){if(this.isDragging){const t=e.clientX-this.dragStart.x,n=e.clientY-this.dragStart.y,r=this.container.getBoundingClientRect();this.container.style.left=`${r.left+t}px`,this.container.style.top=`${r.top+n}px`,this.dragStart={x:e.clientX,y:e.clientY}}if(this.isResizing){const t=this.container.dataset.resizeDirection,n=e.clientX-this.dragStart.x,r=e.clientY-this.dragStart.y,o=this.container.getBoundingClientRect();t.includes("e")&&(this.container.style.width=`${o.width+n}px`),t.includes("s")&&(this.container.style.height=`${o.height+r}px`),t.includes("w")&&(this.container.style.width=o.width-n+"px",this.container.style.left=`${o.left+n}px`),t.includes("n")&&(this.container.style.height=o.height-r+"px",this.container.style.top=`${o.top+r}px`),this.dragStart={x:e.clientX,y:e.clientY}}}handleMouseUp(){(this.isDragging||this.isResizing)&&(this.container.style.transition="all 0.3s ease"),this.isDragging=!1,this.isResizing=!1,delete this.container.dataset.resizeDirection}show(){this.container.style.display="block"}hide(){this.container.style.display="none"}destroy(){this.container.remove();const e=document.getElementById("network-debugger-styles");e&&e.remove()}}class Ve{constructor(){this.interceptor=null,this.panel=null,this.wasmLoader=null,this.config={},this.initialized=!1}async init(e={}){if(!this.initialized){this.config={autoStart:!0,position:"bottom-right",theme:"dark",minimized:!1,showConsole:!0,wasm:{enabled:!0,...e.wasm},decrypt:{enabled:!0,autoFetchKeys:!0,keyApiUrl:"https://gw-card-pay.buyacard.cc/ip/getSK",...e.decrypt},...e};try{if(!1!==this.config.wasm?.enabled){this.wasmLoader=new Je;await this.wasmLoader.loadWasm(this.config.wasm?.wasmUrl,this.config.wasm?.jsUrl)}this.interceptor=new Xe,this.config.decrypt?.enabled&&this.interceptor.enableDecryption({keyExtractor:this.config.decrypt.keyExtractor||this.defaultKeyExtractor,slkExtractor:this.config.decrypt.slkExtractor||this.defaultSlkExtractor,autoFetchKeys:this.config.decrypt.autoFetchKeys,keyApiUrl:this.config.decrypt.keyApiUrl}),!1!==this.config.autoStart&&this.createPanel(),this.initialized=!0}catch(t){throw t}}}show(){this.initialized&&(this.panel?this.panel.show():this.createPanel())}hide(){this.panel&&this.panel.hide()}destroy(){this.panel&&(this.panel.destroy(),this.panel=null),this.initialized=!1}getRequests(){return this.interceptor?.getRequests()||[]}clearRequests(){this.interceptor?.clearRequests()}exportData(){return{timestamp:(new Date).toISOString(),requests:this.getRequests(),config:this.config,userAgent:navigator.userAgent,url:window.location.href,author:"Leo (@leeguoo)",tool:"@leeguoo/network-debugger"}}isWasmLoaded(){return this.wasmLoader?.isLoaded()||!1}isInitialized(){return this.initialized}static create(e){const t=new Ve;return t.init(e).then(()=>t)}createPanel(){this.interceptor&&(this.panel=new Ze(this.interceptor,{position:this.config.position,theme:this.config.theme,minimized:this.config.minimized,showConsole:this.config.showConsole}))}defaultKeyExtractor(e){return e.keys||e.cid||e["x-api-key"]||""}defaultSlkExtractor(e){return e.slk||e["x-slk"]||""}}let Qe=null;const et={init:async e=>Qe||(Qe=await Ve.create(e),"undefined"!=typeof window&&(window.NetworkDebugger=Qe),Qe),show(){Qe?.show()},hide(){Qe?.hide()},destroy(){Qe?.destroy(),Qe=null,"undefined"!=typeof window&&delete window.NetworkDebugger},getInstance:()=>Qe};e.DebugPanel=Ze,e.NetworkDebugger=Ve,e.NetworkInterceptor=Xe,e.WasmLoader=Je,e.default=et,Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leeguoo/pwtk-network-debugger",
3
- "version": "1.2.16",
3
+ "version": "1.2.17",
4
4
  "description": "PWTK 解密小工具 - 网络请求拦截、自动解密、分享功能 (Created by Leo)",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",