3 lines
44 KiB
JavaScript
3 lines
44 KiB
JavaScript
var Qe=Object.defineProperty;var et=(e,t,a)=>t in e?Qe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a;var we=(e,t,a)=>et(e,typeof t!="symbol"?t+"":t,a);(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))o(l);new MutationObserver(l=>{for(const n of l)if(n.type==="childList")for(const c of n.addedNodes)c.tagName==="LINK"&&c.rel==="modulepreload"&&o(c)}).observe(document,{childList:!0,subtree:!0});function a(l){const n={};return l.integrity&&(n.integrity=l.integrity),l.referrerPolicy&&(n.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?n.credentials="include":l.crossOrigin==="anonymous"?n.credentials="omit":n.credentials="same-origin",n}function o(l){if(l.ep)return;l.ep=!0;const n=a(l);fetch(l.href,n)}})();var oe,w,De,F,Se,je,ze,Be,me,_e,ce,te={},ae=[],tt=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,re=Array.isArray;function H(e,t){for(var a in t)e[a]=t[a];return e}function fe(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function at(e,t,a){var o,l,n,c={};for(n in t)n=="key"?o=t[n]:n=="ref"?l=t[n]:c[n]=t[n];if(arguments.length>2&&(c.children=arguments.length>3?oe.call(arguments,2):a),typeof e=="function"&&e.defaultProps!=null)for(n in e.defaultProps)c[n]===void 0&&(c[n]=e.defaultProps[n]);return Z(e,c,o,l,null)}function Z(e,t,a,o,l){var n={type:e,props:t,key:a,ref:o,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:l??++De,__i:-1,__u:0};return l==null&&w.vnode!=null&&w.vnode(n),n}function K(e){return e.children}function Q(e,t){this.props=e,this.context=t}function W(e,t){if(t==null)return e.__?W(e.__,e.__i+1):null;for(var a;t<e.__k.length;t++)if((a=e.__k[t])!=null&&a.__e!=null)return a.__e;return typeof e.type=="function"?W(e):null}function nt(e){if(e.__P&&e.__d){var t=e.__v,a=t.__e,o=[],l=[],n=H({},t);n.__v=t.__v+1,w.vnode&&w.vnode(n),ye(e.__P,n,t,e.__n,e.__P.namespaceURI,32&t.__u?[a]:null,o,a??W(t),!!(32&t.__u),l),n.__v=t.__v,n.__.__k[n.__i]=n,Ve(o,n,l),t.__e=t.__=null,n.__e!=a&&Ue(n)}}function Ue(e){if((e=e.__)!=null&&e.__c!=null)return e.__e=e.__c.base=null,e.__k.some(function(t){if(t!=null&&t.__e!=null)return e.__e=e.__c.base=t.__e}),Ue(e)}function xe(e){(!e.__d&&(e.__d=!0)&&F.push(e)&&!ne.__r++||Se!=w.debounceRendering)&&((Se=w.debounceRendering)||je)(ne)}function ne(){try{for(var e,t=1;F.length;)F.length>t&&F.sort(ze),e=F.shift(),t=F.length,nt(e)}finally{F.length=ne.__r=0}}function We(e,t,a,o,l,n,c,_,p,i,m){var r,f,d,g,S,T,k,y=o&&o.__k||ae,M=t.length;for(p=lt(a,t,y,p,M),r=0;r<M;r++)(d=a.__k[r])!=null&&(f=d.__i!=-1&&y[d.__i]||te,d.__i=r,T=ye(e,d,f,l,n,c,_,p,i,m),g=d.__e,d.ref&&f.ref!=d.ref&&(f.ref&&he(f.ref,null,d),m.push(d.ref,d.__c||g,d)),S==null&&g!=null&&(S=g),(k=!!(4&d.__u))||f.__k===d.__k?p=qe(d,p,e,k):typeof d.type=="function"&&T!==void 0?p=T:g&&(p=g.nextSibling),d.__u&=-7);return a.__e=S,p}function lt(e,t,a,o,l){var n,c,_,p,i,m=a.length,r=m,f=0;for(e.__k=new Array(l),n=0;n<l;n++)(c=t[n])!=null&&typeof c!="boolean"&&typeof c!="function"?(typeof c=="string"||typeof c=="number"||typeof c=="bigint"||c.constructor==String?c=e.__k[n]=Z(null,c,null,null,null):re(c)?c=e.__k[n]=Z(K,{children:c},null,null,null):c.constructor===void 0&&c.__b>0?c=e.__k[n]=Z(c.type,c.props,c.key,c.ref?c.ref:null,c.__v):e.__k[n]=c,p=n+f,c.__=e,c.__b=e.__b+1,_=null,(i=c.__i=ot(c,a,p,r))!=-1&&(r--,(_=a[i])&&(_.__u|=2)),_==null||_.__v==null?(i==-1&&(l>m?f--:l<m&&f++),typeof c.type!="function"&&(c.__u|=4)):i!=p&&(i==p-1?f--:i==p+1?f++:(i>p?f--:f++,c.__u|=4))):e.__k[n]=null;if(r)for(n=0;n<m;n++)(_=a[n])!=null&&(2&_.__u)==0&&(_.__e==o&&(o=W(_)),Ke(_,_));return o}function qe(e,t,a,o){var l,n;if(typeof e.type=="function"){for(l=e.__k,n=0;l&&n<l.length;n++)l[n]&&(l[n].__=e,t=qe(l[n],t,a,o));return t}e.__e!=t&&(o&&(t&&e.type&&!t.parentNode&&(t=W(e)),a.insertBefore(e.__e,t||null)),t=e.__e);do t=t&&t.nextSibling;while(t!=null&&t.nodeType==8);return t}function ot(e,t,a,o){var l,n,c,_=e.key,p=e.type,i=t[a],m=i!=null&&(2&i.__u)==0;if(i===null&&_==null||m&&_==i.key&&p==i.type)return a;if(o>(m?1:0)){for(l=a-1,n=a+1;l>=0||n<t.length;)if((i=t[c=l>=0?l--:n++])!=null&&(2&i.__u)==0&&_==i.key&&p==i.type)return c}return-1}function Ce(e,t,a){t[0]=="-"?e.setProperty(t,a??""):e[t]=a==null?"":typeof a!="number"||tt.test(t)?a:a+"px"}function Y(e,t,a,o,l){var n,c;e:if(t=="style")if(typeof a=="string")e.style.cssText=a;else{if(typeof o=="string"&&(e.style.cssText=o=""),o)for(t in o)a&&t in a||Ce(e.style,t,"");if(a)for(t in a)o&&a[t]==o[t]||Ce(e.style,t,a[t])}else if(t[0]=="o"&&t[1]=="n")n=t!=(t=t.replace(Be,"$1")),c=t.toLowerCase(),t=c in e||t=="onFocusOut"||t=="onFocusIn"?c.slice(2):t.slice(2),e.l||(e.l={}),e.l[t+n]=a,a?o?a.u=o.u:(a.u=me,e.addEventListener(t,n?ce:_e,n)):e.removeEventListener(t,n?ce:_e,n);else{if(l=="http://www.w3.org/2000/svg")t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(t!="width"&&t!="height"&&t!="href"&&t!="list"&&t!="form"&&t!="tabIndex"&&t!="download"&&t!="rowSpan"&&t!="colSpan"&&t!="role"&&t!="popover"&&t in e)try{e[t]=a??"";break e}catch{}typeof a=="function"||(a==null||a===!1&&t[4]!="-"?e.removeAttribute(t):e.setAttribute(t,t=="popover"&&a==1?"":a))}}function Te(e){return function(t){if(this.l){var a=this.l[t.type+e];if(t.t==null)t.t=me++;else if(t.t<a.u)return;return a(w.event?w.event(t):t)}}}function ye(e,t,a,o,l,n,c,_,p,i){var m,r,f,d,g,S,T,k,y,M,R,E,q,h,C,A=t.type;if(t.constructor!==void 0)return null;128&a.__u&&(p=!!(32&a.__u),n=[_=t.__e=a.__e]),(m=w.__b)&&m(t);e:if(typeof A=="function")try{if(k=t.props,y=A.prototype&&A.prototype.render,M=(m=A.contextType)&&o[m.__c],R=m?M?M.props.value:m.__:o,a.__c?T=(r=t.__c=a.__c).__=r.__E:(y?t.__c=r=new A(k,R):(t.__c=r=new Q(k,R),r.constructor=A,r.render=st),M&&M.sub(r),r.state||(r.state={}),r.__n=o,f=r.__d=!0,r.__h=[],r._sb=[]),y&&r.__s==null&&(r.__s=r.state),y&&A.getDerivedStateFromProps!=null&&(r.__s==r.state&&(r.__s=H({},r.__s)),H(r.__s,A.getDerivedStateFromProps(k,r.__s))),d=r.props,g=r.state,r.__v=t,f)y&&A.getDerivedStateFromProps==null&&r.componentWillMount!=null&&r.componentWillMount(),y&&r.componentDidMount!=null&&r.__h.push(r.componentDidMount);else{if(y&&A.getDerivedStateFromProps==null&&k!==d&&r.componentWillReceiveProps!=null&&r.componentWillReceiveProps(k,R),t.__v==a.__v||!r.__e&&r.shouldComponentUpdate!=null&&r.shouldComponentUpdate(k,r.__s,R)===!1){t.__v!=a.__v&&(r.props=k,r.state=r.__s,r.__d=!1),t.__e=a.__e,t.__k=a.__k,t.__k.some(function(N){N&&(N.__=t)}),ae.push.apply(r.__h,r._sb),r._sb=[],r.__h.length&&c.push(r);break e}r.componentWillUpdate!=null&&r.componentWillUpdate(k,r.__s,R),y&&r.componentDidUpdate!=null&&r.__h.push(function(){r.componentDidUpdate(d,g,S)})}if(r.context=R,r.props=k,r.__P=e,r.__e=!1,E=w.__r,q=0,y)r.state=r.__s,r.__d=!1,E&&E(t),m=r.render(r.props,r.state,r.context),ae.push.apply(r.__h,r._sb),r._sb=[];else do r.__d=!1,E&&E(t),m=r.render(r.props,r.state,r.context),r.state=r.__s;while(r.__d&&++q<25);r.state=r.__s,r.getChildContext!=null&&(o=H(H({},o),r.getChildContext())),y&&!f&&r.getSnapshotBeforeUpdate!=null&&(S=r.getSnapshotBeforeUpdate(d,g)),h=m!=null&&m.type===K&&m.key==null?Ge(m.props.children):m,_=We(e,re(h)?h:[h],t,a,o,l,n,c,_,p,i),r.base=t.__e,t.__u&=-161,r.__h.length&&c.push(r),T&&(r.__E=r.__=null)}catch(N){if(t.__v=null,p||n!=null)if(N.then){for(t.__u|=p?160:128;_&&_.nodeType==8&&_.nextSibling;)_=_.nextSibling;n[n.indexOf(_)]=null,t.__e=_}else{for(C=n.length;C--;)fe(n[C]);ue(t)}else t.__e=a.__e,t.__k=a.__k,N.then||ue(t);w.__e(N,t,a)}else n==null&&t.__v==a.__v?(t.__k=a.__k,t.__e=a.__e):_=t.__e=rt(a.__e,t,a,o,l,n,c,p,i);return(m=w.diffed)&&m(t),128&t.__u?void 0:_}function ue(e){e&&(e.__c&&(e.__c.__e=!0),e.__k&&e.__k.some(ue))}function Ve(e,t,a){for(var o=0;o<a.length;o++)he(a[o],a[++o],a[++o]);w.__c&&w.__c(t,e),e.some(function(l){try{e=l.__h,l.__h=[],e.some(function(n){n.call(l)})}catch(n){w.__e(n,l.__v)}})}function Ge(e){return typeof e!="object"||e==null||e.__b>0?e:re(e)?e.map(Ge):H({},e)}function rt(e,t,a,o,l,n,c,_,p){var i,m,r,f,d,g,S,T=a.props||te,k=t.props,y=t.type;if(y=="svg"?l="http://www.w3.org/2000/svg":y=="math"?l="http://www.w3.org/1998/Math/MathML":l||(l="http://www.w3.org/1999/xhtml"),n!=null){for(i=0;i<n.length;i++)if((d=n[i])&&"setAttribute"in d==!!y&&(y?d.localName==y:d.nodeType==3)){e=d,n[i]=null;break}}if(e==null){if(y==null)return document.createTextNode(k);e=document.createElementNS(l,y,k.is&&k),_&&(w.__m&&w.__m(t,n),_=!1),n=null}if(y==null)T===k||_&&e.data==k||(e.data=k);else{if(n=n&&oe.call(e.childNodes),!_&&n!=null)for(T={},i=0;i<e.attributes.length;i++)T[(d=e.attributes[i]).name]=d.value;for(i in T)d=T[i],i=="dangerouslySetInnerHTML"?r=d:i=="children"||i in k||i=="value"&&"defaultValue"in k||i=="checked"&&"defaultChecked"in k||Y(e,i,null,d,l);for(i in k)d=k[i],i=="children"?f=d:i=="dangerouslySetInnerHTML"?m=d:i=="value"?g=d:i=="checked"?S=d:_&&typeof d!="function"||T[i]===d||Y(e,i,d,T[i],l);if(m)_||r&&(m.__html==r.__html||m.__html==e.innerHTML)||(e.innerHTML=m.__html),t.__k=[];else if(r&&(e.innerHTML=""),We(t.type=="template"?e.content:e,re(f)?f:[f],t,a,o,y=="foreignObject"?"http://www.w3.org/1999/xhtml":l,n,c,n?n[0]:a.__k&&W(a,0),_,p),n!=null)for(i=n.length;i--;)fe(n[i]);_||(i="value",y=="progress"&&g==null?e.removeAttribute("value"):g!=null&&(g!==e[i]||y=="progress"&&!g||y=="option"&&g!=T[i])&&Y(e,i,g,T[i],l),i="checked",S!=null&&S!=e[i]&&Y(e,i,S,T[i],l))}return e}function he(e,t,a){try{if(typeof e=="function"){var o=typeof e.__u=="function";o&&e.__u(),o&&t==null||(e.__u=e(t))}else e.current=t}catch(l){w.__e(l,a)}}function Ke(e,t,a){var o,l;if(w.unmount&&w.unmount(e),(o=e.ref)&&(o.current&&o.current!=e.__e||he(o,null,t)),(o=e.__c)!=null){if(o.componentWillUnmount)try{o.componentWillUnmount()}catch(n){w.__e(n,t)}o.base=o.__P=null}if(o=e.__k)for(l=0;l<o.length;l++)o[l]&&Ke(o[l],t,a||typeof e.type!="function");a||fe(e.__e),e.__c=e.__=e.__e=void 0}function st(e,t,a){return this.constructor(e,a)}function it(e,t,a){var o,l,n,c;t==document&&(t=document.documentElement),w.__&&w.__(e,t),l=(o=!1)?null:t.__k,n=[],c=[],ye(t,e=t.__k=at(K,null,[e]),l||te,te,t.namespaceURI,l?null:t.firstChild?oe.call(t.childNodes):null,n,l?l.__e:t.firstChild,o,c),Ve(n,e,c)}oe=ae.slice,w={__e:function(e,t,a,o){for(var l,n,c;t=t.__;)if((l=t.__c)&&!l.__)try{if((n=l.constructor)&&n.getDerivedStateFromError!=null&&(l.setState(n.getDerivedStateFromError(e)),c=l.__d),l.componentDidCatch!=null&&(l.componentDidCatch(e,o||{}),c=l.__d),c)return l.__E=l}catch(_){e=_}throw e}},De=0,Q.prototype.setState=function(e,t){var a;a=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=H({},this.state),typeof e=="function"&&(e=e(H({},a),this.props)),e&&H(a,e),e!=null&&this.__v&&(t&&this._sb.push(t),xe(this))},Q.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),xe(this))},Q.prototype.render=K,F=[],je=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,ze=function(e,t){return e.__v.__b-t.__v.__b},ne.__r=0,Be=/(PointerCapture)$|Capture$/i,me=0,_e=Te(!1),ce=Te(!0);var _t=0;function s(e,t,a,o,l,n){t||(t={});var c,_,p=t;if("ref"in p)for(_ in p={},t)_=="ref"?c=t[_]:p[_]=t[_];var i={type:e,props:p,key:a,ref:c,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--_t,__i:-1,__u:0,__source:l,__self:n};if(typeof e=="function"&&(c=e.defaultProps))for(_ in c)p[_]===void 0&&(p[_]=c[_]);return w.vnode&&w.vnode(i),i}var V,P,se,Ae,le=0,Ye=[],$=w,Pe=$.__b,$e=$.__r,Me=$.diffed,Ne=$.__c,Re=$.unmount,Le=$.__;function ve(e,t){$.__h&&$.__h(P,e,le||t),le=0;var a=P.__H||(P.__H={__:[],__h:[]});return e>=a.__.length&&a.__.push({}),a.__[e]}function L(e){return le=1,ct(Je,e)}function ct(e,t,a){var o=ve(V++,2);if(o.t=e,!o.__c&&(o.__=[Je(void 0,t),function(_){var p=o.__N?o.__N[0]:o.__[0],i=o.t(p,_);p!==i&&(o.__N=[i,o.__[1]],o.__c.setState({}))}],o.__c=P,!P.__f)){var l=function(_,p,i){if(!o.__c.__H)return!0;var m=o.__c.__H.__.filter(function(f){return f.__c});if(m.every(function(f){return!f.__N}))return!n||n.call(this,_,p,i);var r=o.__c.props!==_;return m.some(function(f){if(f.__N){var d=f.__[0];f.__=f.__N,f.__N=void 0,d!==f.__[0]&&(r=!0)}}),n&&n.call(this,_,p,i)||r};P.__f=!0;var n=P.shouldComponentUpdate,c=P.componentWillUpdate;P.componentWillUpdate=function(_,p,i){if(this.__e){var m=n;n=void 0,l(_,p,i),n=m}c&&c.call(this,_,p,i)},P.shouldComponentUpdate=l}return o.__N||o.__}function G(e,t){var a=ve(V++,3);!$.__s&&Xe(a.__H,t)&&(a.__=e,a.u=t,P.__H.__h.push(a))}function Oe(e){return le=5,ut(function(){return{current:e}},[])}function ut(e,t){var a=ve(V++,7);return Xe(a.__H,t)&&(a.__=e(),a.__H=t,a.__h=e),a.__}function dt(){for(var e;e=Ye.shift();){var t=e.__H;if(e.__P&&t)try{t.__h.some(ee),t.__h.some(de),t.__h=[]}catch(a){t.__h=[],$.__e(a,e.__v)}}}$.__b=function(e){P=null,Pe&&Pe(e)},$.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),Le&&Le(e,t)},$.__r=function(e){$e&&$e(e),V=0;var t=(P=e.__c).__H;t&&(se===P?(t.__h=[],P.__h=[],t.__.some(function(a){a.__N&&(a.__=a.__N),a.u=a.__N=void 0})):(t.__h.some(ee),t.__h.some(de),t.__h=[],V=0)),se=P},$.diffed=function(e){Me&&Me(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(Ye.push(t)!==1&&Ae===$.requestAnimationFrame||((Ae=$.requestAnimationFrame)||pt)(dt)),t.__H.__.some(function(a){a.u&&(a.__H=a.u),a.u=void 0})),se=P=null},$.__c=function(e,t){t.some(function(a){try{a.__h.some(ee),a.__h=a.__h.filter(function(o){return!o.__||de(o)})}catch(o){t.some(function(l){l.__h&&(l.__h=[])}),t=[],$.__e(o,a.__v)}}),Ne&&Ne(e,t)},$.unmount=function(e){Re&&Re(e);var t,a=e.__c;a&&a.__H&&(a.__H.__.some(function(o){try{ee(o)}catch(l){t=l}}),a.__H=void 0,t&&$.__e(t,a.__v))};var He=typeof requestAnimationFrame=="function";function pt(e){var t,a=function(){clearTimeout(o),He&&cancelAnimationFrame(t),setTimeout(e)},o=setTimeout(a,35);He&&(t=requestAnimationFrame(a))}function ee(e){var t=P,a=e.__c;typeof a=="function"&&(e.__c=void 0,a()),P=t}function de(e){var t=P;e.__c=e.__(),P=t}function Xe(e,t){return!e||e.length!==t.length||t.some(function(a,o){return a!==e[o]})}function Je(e,t){return typeof t=="function"?t(e):t}function mt(e){const{sectionKey:t,field:a,onValueChange:o}=e;return a.type==="select"?s("select",{value:String(a.value),onInput:l=>o(t,a.key,l.currentTarget.value),children:(a.options??[]).map(l=>s("option",{value:l.value,children:l.label},l.value))}):a.type==="checkbox"?s("label",{class:"check-row",children:[s("input",{type:"checkbox",checked:!!a.value,onInput:l=>o(t,a.key,l.currentTarget.checked)}),s("span",{children:[a.label," ",s("span",{class:"field-key",children:a.key})]})]}):a.type==="textarea"?s("textarea",{value:String(a.value),onInput:l=>o(t,a.key,l.currentTarget.value)}):s("input",{type:a.type,value:String(a.value),placeholder:a.sensitive&&String(a.value)==="__MASKED__"?"已保存,留空或保持不变将沿用原值":"",onInput:l=>{const n=l.currentTarget,c=a.type==="number"?Number(n.value):n.value;o(t,a.key,c)}})}function ft(e){var h,C,A,N,j,B;const{sections:t,onValueChange:a,onSave:o,onStart:l,onStartLoop:n,onStop:c,onLogout:_,busy:p=!1,running:i=!1,loopRunning:m=!1,hasStoredToken:r=!1}=e,[f,d]=L("common"),[g,S]=L({priority:!0,clean:!1,mail:!0,cfmail:!1,self_hosted_mail_api:!1,duckmail:!1,tempmail_lol:!1,yyds_mail:!1,run:!1,registration:!1,flow:!1,oauth:!1,output:!1}),T={priority:"common",clean:"common",mail:"mail",cfmail:"mail",self_hosted_mail_api:"mail",duckmail:"mail",tempmail_lol:"mail",yyds_mail:"mail",run:"advanced",registration:"advanced",flow:"advanced",oauth:"advanced",output:"advanced"},k={common:"常用",mail:"邮箱",advanced:"高级"},y=((C=(h=t.find(v=>v.key==="mail"))==null?void 0:h.fields.find(v=>v.key==="provider"))==null?void 0:C.value)??"self_hosted_mail_api",M={cfmail:"CF Mail",self_hosted_mail_api:"自建 Mail API",duckmail:"DuckMail",tempmail_lol:"TempMail.lol",yyds_mail:"YYDS Mail"},R=t.filter(v=>T[v.key]!==f?!1:v.key==="self_hosted_mail_api"?y==="self_hosted_mail_api":v.key==="cfmail"?y==="cfmail":v.key==="duckmail"?y==="duckmail":v.key==="tempmail_lol"?y==="tempmail_lol":v.key==="yyds_mail"?y==="yyds_mail":!0),E=[{label:"当前邮箱",value:M[String(y)]??String(y)},{label:"维护目标",value:String(((N=(A=t.find(v=>v.key==="priority"))==null?void 0:A.fields.find(v=>v.key==="min_candidates"))==null?void 0:N.value)??"")},{label:"补号并发",value:String(((B=(j=t.find(v=>v.key==="run"))==null?void 0:j.fields.find(v=>v.key==="workers"))==null?void 0:B.value)??"")}],q=v=>{S(U=>({...U,[v]:!(U[v]??!1)}))};return G(()=>{(y==="cfmail"||y==="self_hosted_mail_api"||y==="duckmail"||y==="tempmail_lol"||y==="yyds_mail")&&S(v=>({...v,[String(y)]:!0}))},[y]),G(()=>{f!=="mail"&&(y==="cfmail"||y==="self_hosted_mail_api"||y==="duckmail"||y==="tempmail_lol"||y==="yyds_mail")&&S(v=>({...v,[String(y)]:!0}))},[f,y]),s("aside",{class:"card settings-card",children:[s("div",{class:"card-head",children:[s("div",{class:"card-title",children:[s("span",{class:"title-icon",children:"📝"}),s("span",{children:"维护配置"})]}),r?s("button",{class:"link-button",type:"button",onClick:_,children:"退出登录"}):null]}),s("div",{class:"settings-body",children:[s("div",{class:"settings-summary",children:E.map(v=>s("div",{class:"summary-chip",children:[s("span",{class:"summary-label",children:v.label}),s("span",{class:"summary-value",children:v.value})]},v.label))}),s("div",{class:"settings-tabs",children:Object.keys(k).map(v=>s("button",{type:"button",class:`settings-tab${f===v?" active":""}`,onClick:()=>d(v),children:k[v]},v))}),R.map(v=>{const U=g[v.key]??!1;return s("section",{class:`config-group${U?" expanded":""}`,children:[s("button",{class:"group-toggle",type:"button",onClick:()=>q(v.key),children:[s("span",{class:"group-title",children:[v.label,s("span",{class:"group-key",children:v.key})]}),s("span",{class:`group-caret${U?" open":""}`,children:"⌄"})]}),U?s("div",{class:"group-content field-row single-col",children:v.fields.map(I=>s("label",{class:`field${I.type==="checkbox"?" checkbox-group compact":""}`,children:[I.type!=="checkbox"?s("span",{class:"field-label",children:[I.label,s("span",{class:"field-key",children:I.key})]}):null,s(mt,{sectionKey:v.key,field:I,onValueChange:a}),I.hint?s("span",{class:"field-hint",children:I.hint}):null]},I.key))}):null]},v.key)}),s("div",{class:"settings-actions",children:[s("button",{class:"button primary",type:"button",onClick:l,disabled:p||i,children:"开始维护"}),s("button",{class:"button primary",type:"button",onClick:n,disabled:p||i,children:m?"循环补号运行中":"循环补号"}),s("button",{class:"button warning",type:"button",onClick:c,disabled:p||!i,children:"停止维护"}),s("button",{class:"button secondary",type:"button",onClick:o,disabled:p,children:"保存配置"})]})]})]})}function yt(e){const{busy:t=!1,error:a="",onSubmit:o}=e,[l,n]=L("");return s("div",{class:"login-shell",children:s("form",{class:"login-card",onSubmit:async _=>{_.preventDefault(),await o(l.trim())},children:[s("div",{class:"login-title",children:"管理登录"}),s("div",{class:"login-subtitle",children:"请输入管理令牌以访问控制台"}),s("label",{class:"field",children:[s("span",{class:"field-label",children:"Admin Token"}),s("input",{type:"password",value:l,onInput:_=>n(_.currentTarget.value),placeholder:"请输入 X-Admin-Token"})]}),a?s("div",{class:"login-error",children:a}):null,s("button",{class:"button primary login-button",type:"submit",disabled:t||!l.trim(),children:t?"验证中...":"进入控制台"})]})})}function ht(e){const{lines:t}=e,a=Oe(null),o=Oe(!0),l=()=>{const n=a.current;if(!n)return;const c=n.scrollHeight-n.scrollTop-n.clientHeight;o.current=c<32};return G(()=>{a.current&&o.current&&(a.current.scrollTop=a.current.scrollHeight)},[t]),s("div",{class:"terminal",ref:a,onScroll:l,children:t.map(n=>s("div",{class:"log-row",children:[s("span",{class:"log-dim",children:n.prefix})," ",s("span",{class:`log-${n.tone}`,children:n.timestamp})," ",s("span",{children:n.message})]},n.id))})}function vt(e){var f,d,g;const{monitor:t,onClearLogs:a}=e,o=((f=t.stats.find(S=>S.tone==="success"))==null?void 0:f.value)??0,l=((d=t.stats.find(S=>S.tone==="danger"))==null?void 0:d.value)??0,n=((g=t.stats.find(S=>S.tone==="pending"))==null?void 0:g.value)??0,c=Math.max(0,Math.max(n,t.total-o)),_=t.singleAccountTiming,p=S=>typeof S=="number"?`${S.toFixed(1)}s`:"--",i=t.loopNextCheckInSeconds,m=t.loopRunning?"循环补号":t.running?"单次维护":"未运行",r=typeof i=="number"?`${Math.max(0,i)}s`:"--";return s("section",{class:"card monitor-card",children:[s("div",{class:"card-head",children:[s("div",{class:"card-title",children:[s("span",{class:"title-icon",children:"💻"}),s("span",{children:"监控台"})]}),s("button",{class:"link-button",type:"button",onClick:a,children:"清空"})]}),s("div",{class:"monitor-body",children:[s("div",{class:`runtime-banner ${t.running?"active":""}`,children:[s("span",{class:"runtime-dot"}),s("span",{children:t.message})]}),s("div",{class:"runtime-mode-banner",children:[s("span",{class:"runtime-mode-label",children:"运行模式"}),s("span",{class:"runtime-mode-value",children:m}),t.loopRunning?s("span",{class:"runtime-mode-next",children:["下次检查: ",r]}):null]}),s("div",{class:"inventory-banner",children:[s("span",{class:"inventory-label",children:"CPA 可用账号"}),s("span",{class:"inventory-value",children:t.availableCandidates===null?"--":t.availableCandidates})]}),s("div",{class:"progress-head",children:[s("div",{class:"progress-title",children:"补号进度"}),s("div",{class:"progress-meta",children:[s("span",{children:["已补 ",o," / 目标 ",t.total]}),s("span",{children:[t.percent,"%"]})]})]}),s("div",{class:"progress-track",children:s("div",{class:"progress-value",style:{width:`${t.percent}%`}})}),s("div",{class:"stat-strip",children:[s("div",{class:"mini-stat success",children:[s("span",{class:"mini-stat-label",children:"补号成功"}),s("span",{class:"mini-stat-value",children:o})]}),s("div",{class:"mini-stat danger",children:[s("span",{class:"mini-stat-label",children:"补号失败"}),s("span",{class:"mini-stat-value",children:l})]}),s("div",{class:"mini-stat pending",children:[s("span",{class:"mini-stat-label",children:"待补数量"}),s("span",{class:"mini-stat-value",children:c})]})]}),s("div",{class:"timing-strip",children:[s("div",{class:"timing-item",children:[s("span",{class:"timing-label",children:"最近单号总耗时"}),s("span",{class:"timing-value",children:p(_.latestTotalSeconds)})]}),s("div",{class:"timing-item",children:[s("span",{class:"timing-label",children:"最近单号注册/OAuth"}),s("span",{class:"timing-value",children:[p(_.latestRegSeconds)," / ",p(_.latestOauthSeconds)]})]}),s("div",{class:"timing-item",children:[s("span",{class:"timing-label",children:["近",_.windowSize,"条均值(总)"]}),s("span",{class:"timing-value",children:p(_.recentAvgTotalSeconds)})]}),s("div",{class:"timing-item",children:[s("span",{class:"timing-label",children:"慢号(≥100s)"}),s("span",{class:"timing-value",children:[_.recentSlowCount," / ",_.sampleSize]})]})]}),s(ht,{lines:t.logs})]})]})}const u={cfmail:{api_base:"https://mail.example.com",api_key:"",domain:"",domains:[]},clean:{base_url:"CPA地址",token:"CPA登录密码",target_type:"codex",workers:20,sample_size:0,delete_workers:20,timeout:10,retries:1,user_agent:"codex_cli_rs/0.76.0 (Debian 13.0.0; x86_64) WindowsTerminal",used_percent_threshold:95},mail:{provider:"tempmail_lol",api_base:"https://your-worker.workers.dev",api_key:"your-mail-api-key",domain:"mail.example.com",domains:[],otp_timeout_seconds:120,poll_interval_seconds:3},duckmail:{api_base:"https://api.duckmail.sbs",bearer:"",domain:"duckmail.sbs",domains:[]},tempmail_lol:{api_base:"https://api.tempmail.lol/v2"},yyds_mail:{api_base:"https://maliapi.215.im/v1",api_key:"",domain:"",domains:[]},maintainer:{min_candidates:50,loop_interval_seconds:60},run:{workers:8,proxy:"",failure_threshold_for_cooldown:5,failure_cooldown_seconds:45,loop_jitter_min_seconds:2,loop_jitter_max_seconds:6},flow:{step_retry_attempts:2,step_retry_delay_base:.2,step_retry_delay_cap:.8,outer_retry_attempts:3,oauth_local_retry_attempts:3,transient_markers:"sentinel_,oauth_authorization_code_not_found,headers_failed,timeout,timed out,server disconnected,unexpected_eof_while_reading,transport,remoteprotocolerror,connection reset,temporarily unavailable,network,eof occurred,http_429,http_500,http_502,http_503,http_504",register_otp_validate_order:"normal,sentinel",oauth_otp_validate_order:"normal,sentinel",oauth_password_phone_action:"warn_and_continue",oauth_otp_phone_action:"warn_and_continue"},registration:{entry_mode:"chatgpt_web",entry_mode_fallback:!0,chatgpt_base:"https://chatgpt.com",register_create_account_phone_action:"warn_and_continue",phone_verification_markers:"add_phone,/add-phone,phone_verification,phone-verification,phone/verify"},oauth:{issuer:"https://auth.openai.com",client_id:"app_EMoamEEZ73f0CkXaXp7hrann",redirect_uri:"http://localhost:1455/auth/callback",retry_attempts:3,retry_backoff_base:2,retry_backoff_max:15,otp_timeout_seconds:120,otp_poll_interval_seconds:2},output:{accounts_file:"accounts.txt",csv_file:"registered_accounts.csv",ak_file:"ak.txt",rk_file:"rk.txt",save_local:!1}};function x(e,t){if(typeof e=="number"&&Number.isFinite(e))return e;const a=Number(e);return Number.isFinite(a)?a:t}function b(e,t){return typeof e=="string"?e:t}function Ee(e,t){return typeof e=="boolean"?e:t}function X(e,t=[]){if(!Array.isArray(e))return t;const a=e.map(o=>typeof o=="string"?o.trim():"").filter(Boolean);return a.length?a:t}function bt(e){return String(e??"").split(/\r?\n/).map(t=>t.trim()).filter(Boolean)}function J(e){return e.join(`
|
||
`)}function be(e){const t=e??{},a=t.cfmail??{},o=t.clean??{},l=t.mail??{},n=t.duckmail??{},c=t.tempmail_lol??{},_=t.yyds_mail??{},p=t.maintainer??{},i=t.run??{},m=t.flow??{},r=t.registration??{},f=t.oauth??{},d=t.output??{};return{cfmail:{api_base:b(a.api_base,u.cfmail.api_base),api_key:b(a.api_key,u.cfmail.api_key),domain:b(a.domain,u.cfmail.domain),domains:X(a.domains,u.cfmail.domains)},clean:{base_url:b(o.base_url,u.clean.base_url),token:b(o.token,u.clean.token),target_type:b(o.target_type,u.clean.target_type),workers:x(o.workers,u.clean.workers),sample_size:x(o.sample_size,u.clean.sample_size),delete_workers:x(o.delete_workers,u.clean.delete_workers),timeout:x(o.timeout,u.clean.timeout),retries:x(o.retries,u.clean.retries),user_agent:b(o.user_agent,u.clean.user_agent??""),used_percent_threshold:x(o.used_percent_threshold,u.clean.used_percent_threshold)},mail:{provider:b(l.provider,u.mail.provider),api_base:b(l.api_base,u.mail.api_base),api_key:b(l.api_key,u.mail.api_key),domain:b(l.domain,u.mail.domain),domains:X(l.domains,u.mail.domains),otp_timeout_seconds:x(l.otp_timeout_seconds,u.mail.otp_timeout_seconds),poll_interval_seconds:x(l.poll_interval_seconds,u.mail.poll_interval_seconds)},duckmail:{api_base:b(n.api_base,u.duckmail.api_base),bearer:b(n.bearer,u.duckmail.bearer),domain:b(n.domain,u.duckmail.domain),domains:X(n.domains,u.duckmail.domains)},tempmail_lol:{api_base:b(c.api_base,u.tempmail_lol.api_base)},yyds_mail:{api_base:b(_.api_base,u.yyds_mail.api_base),api_key:b(_.api_key,u.yyds_mail.api_key),domain:b(_.domain,u.yyds_mail.domain),domains:X(_.domains,u.yyds_mail.domains)},maintainer:{min_candidates:x(p.min_candidates,u.maintainer.min_candidates),loop_interval_seconds:x(p.loop_interval_seconds,u.maintainer.loop_interval_seconds)},run:{workers:x(i.workers,u.run.workers),proxy:b(i.proxy,u.run.proxy),failure_threshold_for_cooldown:x(i.failure_threshold_for_cooldown,u.run.failure_threshold_for_cooldown),failure_cooldown_seconds:x(i.failure_cooldown_seconds,u.run.failure_cooldown_seconds),loop_jitter_min_seconds:x(i.loop_jitter_min_seconds,u.run.loop_jitter_min_seconds),loop_jitter_max_seconds:x(i.loop_jitter_max_seconds,u.run.loop_jitter_max_seconds)},flow:{step_retry_attempts:x(m.step_retry_attempts,u.flow.step_retry_attempts),step_retry_delay_base:x(m.step_retry_delay_base,u.flow.step_retry_delay_base),step_retry_delay_cap:x(m.step_retry_delay_cap,u.flow.step_retry_delay_cap),outer_retry_attempts:x(m.outer_retry_attempts,u.flow.outer_retry_attempts),oauth_local_retry_attempts:x(m.oauth_local_retry_attempts,u.flow.oauth_local_retry_attempts),transient_markers:b(m.transient_markers,u.flow.transient_markers),register_otp_validate_order:b(m.register_otp_validate_order,u.flow.register_otp_validate_order),oauth_otp_validate_order:b(m.oauth_otp_validate_order,u.flow.oauth_otp_validate_order),oauth_password_phone_action:b(m.oauth_password_phone_action,u.flow.oauth_password_phone_action),oauth_otp_phone_action:b(m.oauth_otp_phone_action,u.flow.oauth_otp_phone_action)},registration:{entry_mode:b(r.entry_mode,u.registration.entry_mode),entry_mode_fallback:Ee(r.entry_mode_fallback,u.registration.entry_mode_fallback),chatgpt_base:b(r.chatgpt_base,u.registration.chatgpt_base),register_create_account_phone_action:b(r.register_create_account_phone_action,u.registration.register_create_account_phone_action),phone_verification_markers:b(r.phone_verification_markers,u.registration.phone_verification_markers)},oauth:{issuer:b(f.issuer,u.oauth.issuer),client_id:b(f.client_id,u.oauth.client_id),redirect_uri:b(f.redirect_uri,u.oauth.redirect_uri),retry_attempts:x(f.retry_attempts,u.oauth.retry_attempts),retry_backoff_base:x(f.retry_backoff_base,u.oauth.retry_backoff_base),retry_backoff_max:x(f.retry_backoff_max,u.oauth.retry_backoff_max),otp_timeout_seconds:x(f.otp_timeout_seconds,u.oauth.otp_timeout_seconds),otp_poll_interval_seconds:x(f.otp_poll_interval_seconds,u.oauth.otp_poll_interval_seconds)},output:{accounts_file:b(d.accounts_file,u.output.accounts_file),csv_file:b(d.csv_file,u.output.csv_file),ak_file:b(d.ak_file,u.output.ak_file),rk_file:b(d.rk_file,u.output.rk_file),save_local:Ee(d.save_local,u.output.save_local)}}}function ke(e){return[{key:"priority",label:"核心配置",fields:[{key:"base_url",label:"CPA 接口地址",type:"text",value:e.clean.base_url},{key:"token",label:"CPA 访问令牌",type:"password",value:e.clean.token,sensitive:!0},{key:"min_candidates",label:"最小候选账号数",type:"number",value:e.maintainer.min_candidates,hint:"表示账号池希望长期保有的最低可用账号数。清理完成后若当前候选账号低于该值,系统会自动补号。"},{key:"loop_interval_seconds",label:"循环补号间隔(秒)",type:"number",value:e.maintainer.loop_interval_seconds,hint:"点击“循环补号”按钮后,每轮检查完会休眠该秒数再重新检测。"},{key:"proxy",label:"代理地址",type:"text",value:e.run.proxy,hint:"示例: http://127.0.0.1:7890 或 socks5://127.0.0.1:1080"}]},{key:"clean",label:"清理配置",columns:2,fields:[{key:"target_type",label:"目标账号类型",type:"text",value:e.clean.target_type},{key:"timeout",label:"请求超时",type:"number",value:e.clean.timeout},{key:"workers",label:"探测并发",type:"number",value:e.clean.workers},{key:"sample_size",label:"抽样数量",type:"number",value:e.clean.sample_size,hint:"0 表示全量探测;大于 0 时,每轮仅随机抽取这部分账号做可用性探测。"},{key:"delete_workers",label:"删除并发",type:"number",value:e.clean.delete_workers},{key:"retries",label:"重试次数",type:"number",value:e.clean.retries},{key:"used_percent_threshold",label:"用量阈值",type:"number",value:e.clean.used_percent_threshold,hint:"用于识别高消耗账号。若账号的 used_percent 大于等于该值,会在清理阶段优先禁用(不直接删除)。"}]},{key:"mail",label:"邮箱配置",columns:2,fields:[{key:"provider",label:"邮箱提供方",type:"select",value:e.mail.provider,options:[{label:"cfmail",value:"cfmail"},{label:"self_hosted_mail_api",value:"self_hosted_mail_api"},{label:"duckmail",value:"duckmail"},{label:"tempmail_lol",value:"tempmail_lol"},{label:"yyds_mail",value:"yyds_mail"}]},{key:"otp_timeout_seconds",label:"验证码超时",type:"number",value:e.mail.otp_timeout_seconds},{key:"poll_interval_seconds",label:"轮询间隔",type:"number",value:e.mail.poll_interval_seconds}]},{key:"cfmail",label:"CF Mail 配置",columns:2,fields:[{key:"api_base",label:"接口地址",type:"text",value:e.cfmail.api_base},{key:"api_key",label:"接口密钥",type:"password",value:e.cfmail.api_key,sensitive:!0},{key:"domain",label:"邮箱域名",type:"text",value:e.cfmail.domain},{key:"domains",label:"邮箱域名列表",type:"textarea",value:J(e.cfmail.domains),hint:"每行一个域名;填写后优先于单个 domain。"}]},{key:"self_hosted_mail_api",label:"自建 Mail API 配置",columns:2,fields:[{key:"api_base",label:"邮件 API 地址",type:"text",value:e.mail.api_base},{key:"domain",label:"邮箱域名",type:"text",value:e.mail.domain},{key:"domains",label:"邮箱域名列表",type:"textarea",value:J(e.mail.domains),hint:"每行一个域名;填写后优先于单个 domain。"},{key:"api_key",label:"邮件 API 密钥",type:"password",value:e.mail.api_key,sensitive:!0}]},{key:"duckmail",label:"DuckMail 配置",columns:2,fields:[{key:"api_base",label:"接口地址",type:"text",value:e.duckmail.api_base},{key:"domain",label:"邮箱域名",type:"text",value:e.duckmail.domain},{key:"domains",label:"邮箱域名列表",type:"textarea",value:J(e.duckmail.domains),hint:"每行一个域名;填写后优先于单个 domain。"},{key:"bearer",label:"访问凭证",type:"password",value:e.duckmail.bearer,sensitive:!0}]},{key:"tempmail_lol",label:"TempMail.lol 配置",fields:[{key:"api_base",label:"接口地址",type:"text",value:e.tempmail_lol.api_base}]},{key:"yyds_mail",label:"YYDS Mail 配置",columns:2,fields:[{key:"api_base",label:"接口地址",type:"text",value:e.yyds_mail.api_base},{key:"domain",label:"邮箱域名",type:"text",value:e.yyds_mail.domain},{key:"domains",label:"邮箱域名列表",type:"textarea",value:J(e.yyds_mail.domains),hint:"每行一个域名;填写后优先于单个 domain。"},{key:"api_key",label:"访问密钥",type:"password",value:e.yyds_mail.api_key,sensitive:!0}]},{key:"run",label:"运行参数",columns:2,fields:[{key:"workers",label:"补号并发数",type:"number",value:e.run.workers},{key:"failure_threshold_for_cooldown",label:"连续失败阈值",type:"number",value:e.run.failure_threshold_for_cooldown},{key:"failure_cooldown_seconds",label:"冷却时长",type:"number",value:e.run.failure_cooldown_seconds},{key:"loop_jitter_min_seconds",label:"最小抖动秒数",type:"number",value:e.run.loop_jitter_min_seconds},{key:"loop_jitter_max_seconds",label:"最大抖动秒数",type:"number",value:e.run.loop_jitter_max_seconds}]},{key:"registration",label:"注册流程策略",columns:2,fields:[{key:"entry_mode",label:"注册入口模式",type:"select",value:e.registration.entry_mode,options:[{label:"chatgpt_web",value:"chatgpt_web"},{label:"direct_auth",value:"direct_auth"}]},{key:"entry_mode_fallback",label:"入口失败自动回退",type:"checkbox",value:e.registration.entry_mode_fallback},{key:"chatgpt_base",label:"ChatGPT 入口域名",type:"text",value:e.registration.chatgpt_base},{key:"register_create_account_phone_action",label:"注册命中手机验证",type:"select",value:e.registration.register_create_account_phone_action,options:[{label:"warn_and_continue",value:"warn_and_continue"},{label:"fail_fast",value:"fail_fast"}]},{key:"phone_verification_markers",label:"手机验证识别关键词",type:"text",value:e.registration.phone_verification_markers}]},{key:"flow",label:"流程重试策略",columns:2,fields:[{key:"step_retry_attempts",label:"注册步骤局部重试",type:"number",value:e.flow.step_retry_attempts},{key:"step_retry_delay_base",label:"步骤重试基数",type:"number",value:e.flow.step_retry_delay_base},{key:"step_retry_delay_cap",label:"步骤重试上限",type:"number",value:e.flow.step_retry_delay_cap},{key:"outer_retry_attempts",label:"OAuth 外层重试",type:"number",value:e.flow.outer_retry_attempts},{key:"oauth_local_retry_attempts",label:"OAuth 局部重试",type:"number",value:e.flow.oauth_local_retry_attempts},{key:"register_otp_validate_order",label:"注册 OTP 校验顺序",type:"text",value:e.flow.register_otp_validate_order},{key:"oauth_otp_validate_order",label:"OAuth OTP 校验顺序",type:"text",value:e.flow.oauth_otp_validate_order},{key:"oauth_password_phone_action",label:"OAuth 密码阶段手机验证",type:"select",value:e.flow.oauth_password_phone_action,options:[{label:"warn_and_continue",value:"warn_and_continue"},{label:"fail_fast",value:"fail_fast"}]},{key:"oauth_otp_phone_action",label:"OAuth OTP阶段手机验证",type:"select",value:e.flow.oauth_otp_phone_action,options:[{label:"warn_and_continue",value:"warn_and_continue"},{label:"fail_fast",value:"fail_fast"}]},{key:"transient_markers",label:"瞬时错误关键词",type:"text",value:e.flow.transient_markers}]},{key:"oauth",label:"OAuth 配置",columns:2,fields:[{key:"issuer",label:"认证服务地址",type:"text",value:e.oauth.issuer},{key:"client_id",label:"客户端 ID",type:"text",value:e.oauth.client_id},{key:"redirect_uri",label:"回调地址",type:"text",value:e.oauth.redirect_uri},{key:"retry_attempts",label:"重试次数",type:"number",value:e.oauth.retry_attempts},{key:"retry_backoff_base",label:"退避基数",type:"number",value:e.oauth.retry_backoff_base},{key:"retry_backoff_max",label:"最大退避",type:"number",value:e.oauth.retry_backoff_max},{key:"otp_timeout_seconds",label:"登录验证码超时",type:"number",value:e.oauth.otp_timeout_seconds},{key:"otp_poll_interval_seconds",label:"登录轮询间隔",type:"number",value:e.oauth.otp_poll_interval_seconds}]},{key:"output",label:"输出配置",columns:2,fields:[{key:"accounts_file",label:"账号文件",type:"text",value:e.output.accounts_file},{key:"csv_file",label:"CSV 文件",type:"text",value:e.output.csv_file},{key:"ak_file",label:"Access Token 文件",type:"text",value:e.output.ak_file},{key:"rk_file",label:"Refresh Token 文件",type:"text",value:e.output.rk_file},{key:"save_local",label:"本地保存",type:"checkbox",value:e.output.save_local}]}]}function kt(e){const t=structuredClone(u);for(const a of e){const o=a.key==="self_hosted_mail_api"?"mail":a.key;if(a.key==="priority"){for(const n of a.fields)n.key==="base_url"||n.key==="token"?t.clean[n.key]=n.value:n.key==="min_candidates"?t.maintainer.min_candidates=Number(n.value):n.key==="loop_interval_seconds"?t.maintainer.loop_interval_seconds=Number(n.value):n.key==="proxy"&&(t.run.proxy=String(n.value));continue}const l=t[o];if(l)for(const n of a.fields){if(n.key==="domains"){l[n.key]=bt(n.value);continue}l[n.key]=n.value}}return be(t)}const gt=ke(u),wt={running:!1,runMode:"",loopRunning:!1,loopNextCheckInSeconds:null,phase:"idle",message:"等待任务启动",availableCandidates:null,availableCandidatesError:"",completed:2,total:20,percent:10,stats:[{label:"成功",value:2,icon:"☑",tone:"success"},{label:"失败",value:0,icon:"✕",tone:"danger"},{label:"剩余",value:18,icon:"⏳",tone:"pending"}],singleAccountTiming:{latestRegSeconds:15.4,latestOauthSeconds:56.8,latestTotalSeconds:72.2,recentAvgRegSeconds:16.1,recentAvgOauthSeconds:54.3,recentAvgTotalSeconds:70.4,recentSlowCount:1,sampleSize:20,windowSize:20},logs:[{id:"1",prefix:"[00:28:38] [任务3]",timestamp:"[00:28:38]",message:"提交密码状态: 200",tone:"info"},{id:"2",prefix:"[00:28:38] [任务3]",timestamp:"[00:28:38]",message:"9. 发送验证码...",tone:"info"},{id:"3",prefix:"[00:28:39] [任务3]",timestamp:"[00:28:39]",message:"验证码发送状态: 200",tone:"info"},{id:"4",prefix:"[00:28:39] [任务3]",timestamp:"[00:28:39]",message:"10. 等待验证码...",tone:"info"},{id:"5",prefix:"[00:28:39] [任务3]",timestamp:"[00:28:39]",message:"正在等待邮箱 dictman3eb8a4@whf.hush2u.com 的验证码...",tone:"info"},{id:"6",prefix:"[00:28:39] [任务3]",timestamp:"[00:28:39]",message:"成功获取验证码: 963817",tone:"success"},{id:"7",prefix:"[00:28:40] [任务3]",timestamp:"[00:28:40]",message:"生成用户信息: Charlotte,生日: 1996-01-27",tone:"info"},{id:"8",prefix:"[00:28:41] [任务3]",timestamp:"[00:28:41]",message:"Sentinel token 获取成功",tone:"success"},{id:"9",prefix:"[00:28:44] [任务3]",timestamp:"[00:28:44]",message:"OAuth 登录链路进入 consent 阶段",tone:"success"}]},ge="apm_admin_token";function pe(){return{token:window.sessionStorage.getItem(ge)??""}}function St(e){window.sessionStorage.setItem(ge,e)}function O(){window.sessionStorage.removeItem(ge)}class Ze extends Error{constructor(a,o){super(a);we(this,"status");this.name="ApiRequestError",this.status=o}}function z(e){return e instanceof Ze&&(e.status===401||e.status===403)}async function D(e,t,a){const o=a??pe().token,l=await fetch(e,{...t,headers:{"Content-Type":"application/json",...o?{"X-Admin-Token":o}:{},...(t==null?void 0:t.headers)??{}}});if(!l.ok)throw new Ze(`${(t==null?void 0:t.method)??"GET"} ${e} failed: ${l.status}`,l.status);return await l.json()}async function xt(e){await D("/api/health",void 0,e),await D("/api/config",void 0,e)}async function Ie(){const e=await D("/api/config");return ke(be(e))}async function ie(e){const t=await D("/api/config",{method:"POST",body:JSON.stringify(kt(e))});return ke(be(t))}async function Fe(){const e=await D("/api/runtime/status"),t=e.single_account_timing;return{running:e.running,runMode:e.run_mode??"",loopRunning:e.loop_running??!1,loopNextCheckInSeconds:e.loop_next_check_in_seconds??null,phase:e.phase,message:e.message,availableCandidates:e.available_candidates,availableCandidatesError:e.available_candidates_error,completed:e.completed,total:e.total,percent:e.percent,stats:e.stats,singleAccountTiming:{latestRegSeconds:(t==null?void 0:t.latest_reg_seconds)??null,latestOauthSeconds:(t==null?void 0:t.latest_oauth_seconds)??null,latestTotalSeconds:(t==null?void 0:t.latest_total_seconds)??null,recentAvgRegSeconds:(t==null?void 0:t.recent_avg_reg_seconds)??null,recentAvgOauthSeconds:(t==null?void 0:t.recent_avg_oauth_seconds)??null,recentAvgTotalSeconds:(t==null?void 0:t.recent_avg_total_seconds)??null,recentSlowCount:(t==null?void 0:t.recent_slow_count)??0,sampleSize:(t==null?void 0:t.sample_size)??0,windowSize:(t==null?void 0:t.window_size)??20},logs:e.logs}}async function Ct(){return D("/api/runtime/start",{method:"POST",body:"{}"})}async function Tt(){return D("/api/runtime/start-loop",{method:"POST",body:"{}"})}async function At(){return D("/api/runtime/stop",{method:"POST",body:"{}"})}function Pt(){const[e,t]=L(gt),[a,o]=L(wt),[l,n]=L(!1),[c,_]=L(""),[p,i]=L(!!pe().token),[m,r]=L(""),[f,d]=L(!!pe().token),g=async()=>{const h=await Fe();o(h)};G(()=>{let h=!0;return Ie().then(C=>{h&&(t(C),i(!0))}).catch(C=>{h&&(z(C)&&(O(),d(!1),r("登录已失效,请重新输入管理令牌")),i(!1))}),g().then(()=>{h&&_("")}).catch(C=>{h&&z(C)&&(O(),d(!1),i(!1),r("登录已失效,请重新输入管理令牌"))}),()=>{h=!1}},[]),G(()=>{if(!p)return;let h=!0;const C=window.setInterval(()=>{g().then(()=>{h&&_(A=>A)}).catch(A=>{h&&z(A)&&(O(),d(!1),i(!1),r("登录已失效,请重新输入管理令牌"))})},5e3);return()=>{h=!1,window.clearInterval(C)}},[p]);const S=async h=>{n(!0),r("");try{await xt(h),St(h),i(!0),d(!0),_("登录成功");const[C,A]=await Promise.all([Ie(),Fe()]);t(C),o(A)}catch(C){console.error("登录失败",C),O(),i(!1),d(!1),r("管理令牌无效或服务暂不可用")}finally{n(!1)}},T=()=>{O(),i(!1),d(!1),_("已退出登录"),r("")},k=(h,C,A)=>{t(N=>N.map(j=>j.key!==h?j:{...j,fields:j.fields.map(B=>B.key===C?{...B,value:A}:B)}))},y=()=>{o(h=>({...h,logs:[{id:"cleared",prefix:"[系统] [00:00:00]",timestamp:"[00:00:00]",message:"日志已清空,等待任务输出...",tone:"muted"}]}))};return s("div",{class:"page-shell",children:[p?null:s(yt,{busy:l,error:m,onSubmit:S}),p?s(K,{children:[c?s("div",{class:"page-notice",children:c}):null,s("div",{class:"page-grid",children:[s(ft,{sections:e,onValueChange:k,onSave:async()=>{n(!0);try{const h=await ie(e);t(h),_("配置已保存")}catch(h){console.error("保存配置失败",h),z(h)?(O(),d(!1),i(!1),r("登录已失效,请重新输入管理令牌")):_("保存配置失败")}finally{n(!1)}},onStart:async()=>{n(!0);try{const h=await ie(e);t(h);const C=await Ct();_(`配置已保存,${C.message}`),await g()}catch(h){console.error("保存配置或启动维护任务失败",h),z(h)?(O(),d(!1),i(!1),r("登录已失效,请重新输入管理令牌")):_("保存配置或启动维护任务失败")}finally{n(!1)}},onStartLoop:async()=>{n(!0);try{const h=await ie(e);t(h);const C=await Tt();_(`配置已保存,${C.message}`),await g()}catch(h){console.error("保存配置或启动循环补号任务失败",h),z(h)?(O(),d(!1),i(!1),r("登录已失效,请重新输入管理令牌")):_("保存配置或启动循环补号任务失败")}finally{n(!1)}},onStop:async()=>{n(!0);try{const h=await At();_(h.message),await g()}catch(h){console.error("停止维护任务失败",h),z(h)?(O(),d(!1),i(!1),r("登录已失效,请重新输入管理令牌")):_("停止维护任务失败")}finally{n(!1)}},onLogout:T,busy:l,running:a.running,loopRunning:!!a.loopRunning,hasStoredToken:f}),s("div",{class:"main-stack",children:s(vt,{monitor:a,onClearLogs:y})})]})]}):null]})}it(s(Pt,{}),document.getElementById("app"));
|