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;tt&&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;r0?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--:lp?f--:f++,c.__u|=4))):e.__k[n]=null;if(r)for(n=0;n(m?1:0)){for(l=a-1,n=a+1;l>=0||n=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.t0?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=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"));