This repository has been archived on 2026-10-02. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
NeteaseUrl/frontend/dist/assets/auth.js
T
snowy-yang 58853abd3c chore: 提交 React 前端构建产物(app.js 330KB / auth.js 38KB / app.css 56KB)
为什么:部署不经 node 构建(dockerignore 排除了源码),服务端
直接读 dist/index.html 与 /assets,因此构建产物必须入库;
文件名经 vite 固定(无内容 hash),golden 契约才能跨构建成立。
gzip 后 app.js 97KB / auth.js 12KB / app.css 11KB。
2026-09-27 18:35:06 +08:00

6 lines
41 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import{c as Et,o as kt}from"./app.js";function _t(){Promise.prototype.finally||(Promise.prototype.finally=function(e){var t=this.constructor||Promise;return this.then(function(a){return t.resolve(e()).then(function(){return a})},function(a){return t.resolve(e()).then(function(){throw a})})});var je="2.4.0",ze=[{v:"2.4.0",date:"2026-09-21",items:["修复:老内核浏览器(Chrome 57-62)操作按钮卡加载的问题","安全:登录失败次数过多临时锁定;公网错误信息不再暴露内部细节","优化:用户列表不再携带明文网易云 Cookie(按需单独查看)"]},{v:"2.1.0",date:"2026-08-28",items:["计费改为按次计费:一首歌 1 次,歌单打包按歌曲数量扣减","免费试用改为 3 次(3 首歌),注册页领取,每设备限一次","卡密系统升级为次数卡,后台可管理用户次数"]},{v:"2.0.0",date:"2026-08-28",items:["新增站点账号系统:强制登录、邮箱验证码注册","新增管理后台:用户管理、全局Cookie、SMTP、日志、卡密、公告、数据库备份","新增个人中心:剩余次数、卡密充值、公告查看"]},{v:"1.2.0",date:"2026-03-29",items:["修复部分歌曲解析失败的问题","优化界面交互体验"]}];function n(e,t){return document.querySelector(e)}function b(e,t){return Array.prototype.slice.call((t||document).querySelectorAll(e))}var q=null;function d(e,t){q||(q=document.createElement("div"),q.style.cssText="position:fixed;top:18px;left:50%;transform:translateX(-50%);z-index:99999;display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none;",document.body.appendChild(q));var a=document.createElement("div");a.textContent=e,a.style.cssText="padding:10px 18px;border-radius:10px;font-size:13px;color:#fff;background:"+(t==="error"?"linear-gradient(135deg,#ff5f57,#e0483f)":t==="success"?"linear-gradient(135deg,#34c759,#2aa64c)":"rgba(30,30,30,.92)")+";box-shadow:0 6px 24px rgba(0,0,0,.25);opacity:0;transform:translateY(-8px);transition:all .25s;max-width:80vw;",q.appendChild(a),requestAnimationFrame(function(){a.style.opacity="1",a.style.transform="translateY(0)"}),setTimeout(function(){a.style.opacity="0",a.style.transform="translateY(-8px)",setTimeout(function(){a.remove()},300)},2600)}function l(e,t){var a=Object.keys(t||{}).map(function(o){return encodeURIComponent(o)+"="+encodeURIComponent(t[o]==null?"":t[o])}).join("&"),i=typeof AbortController<"u"?new AbortController:null,r=null;return i&&(r=setTimeout(function(){try{i.abort()}catch{}},3e4)),fetch(e,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded;charset=UTF-8"},body:a,credentials:"same-origin",signal:i?i.signal:void 0}).then(function(o){return o.json().then(function(s){return r&&clearTimeout(r),s},function(s){throw r&&clearTimeout(r),s})}).catch(function(){return r&&clearTimeout(r),{status:0,success:!1,message:"网络异常,请检查连接后重试"}})}function Ne(e){var t=typeof AbortController<"u"?new AbortController:null,a=null;return t&&(a=setTimeout(function(){try{t.abort()}catch{}},15e3)),fetch(e,{credentials:"same-origin",signal:t?t.signal:void 0}).then(function(i){return i.json().then(function(r){return a&&clearTimeout(a),r},function(r){throw a&&clearTimeout(a),r})})}function Fe(){if(window.__siteDeviceIdCache)return window.__siteDeviceIdCache;var e="netease_device_id",t="";try{t=localStorage.getItem(e)||""}catch{}if(!t){t="dev-"+Date.now().toString(36)+"-"+Math.random().toString(36).slice(2,10);try{localStorage.setItem(e,t)}catch{}}return window.__siteDeviceIdCache=t,t}var c=null,_="",h=null,re=!1,ie=3,oe=["changelog-modal","stats-modal","api-modal","cookie-modal","login-modal","register-modal","announce-modal"];function B(e){if(oe.indexOf(e)!==-1){kt(e);return}var t=n("#"+e);t&&t.classList.add("show")}function p(e){if(oe.indexOf(e)!==-1){Et(e);return}var t=n("#"+e);t&&t.classList.remove("show")}function D(){window.SITE_LOGGED_IN=!!c;var e=!c&&re,t=n("#btn-open-register");t&&(t.hidden=!e),["goto-register","goto-register2"].forEach(function(g){var k=n("#"+g);k&&(k.hidden=!e)}),b(".auth-trial-box").forEach(function(g){g.hidden=!e}),b(".reg-gift-num").forEach(function(g){g.textContent=ie});var a=n("#auth-guest-area"),i=n("#auth-user-area");if(a&&i)if(c){a.hidden=!0,i.hidden=!1;var r=n("#auth-duration-pill");r&&(r.textContent="⏳ "+(_||"0 次"));var o=n("#user-avatar");o&&(o.textContent=(c.username||"U").charAt(0).toUpperCase(),o.title=c.username+(c.role==="admin"?"(管理员)":""))}else a.hidden=!1,i.hidden=!0;var s=n("#tab-usercenter"),u=n("#tab-useradmin");s&&(s.hidden=!c),u&&(u.hidden=!(c&&c.role==="admin"));var f=n("#tab-global");f&&(f.hidden=!(c&&c.role==="admin"))}function X(){return Ne("/auth/me").then(function(e){var t=e.data||{};if(c=t.user||null,_=t.duration_text||"",h=t.announcement||null,re=!!t.smtp_configured,typeof t.register_credits=="number"&&(ie=t.register_credits),D(),S(),ge(),c&&typeof window.SITE_TASKS_BOOTSTRAP=="function")try{window.SITE_TASKS_BOOTSTRAP()}catch{}return c}).catch(function(){return null})}var se=0;function ue(e,t){var a=Date.now();a-se<5e3||(se=a,d(e,"error"))}window.handleAuthExpired=function(e,t){if(t){ue(e||"下载次数已用尽,请充值卡密"),Ke();return}c=null,_="",D(),S(),ue(e||"登录已失效,请重新登录");var a=document.getElementById("login-modal"),i=document.getElementById("forgot-view"),r=document.getElementById("admin2fa-view"),o=a&&a.classList.contains("show")&&(i&&!i.hidden||r&&!r.hidden);o||(M(),T());var s=document.getElementById("register-modal");s&&s.classList.contains("show")&&p("register-modal"),!(a&&a.classList.contains("show"))&&B("login-modal")},window.refreshSITECredits=X,window.renderSITEUserCenter=S,window.getSITECredits=function(){if(!c)return-1;var e=typeof c.duration_seconds=="number"?c.duration_seconds:0;return e<0?999999:e};function Ke(){var e=n("#site-expired-modal");e&&e.remove();var t=document.createElement("div");t.className="modal-mask show",t.id="site-expired-modal",t.setAttribute("data-dynamic","1"),t.innerHTML='<div class="modal" style="width:380px;"> <div class="modal-header"><div class="modal-title">⏳ 下载次数已用尽</div></div> <div class="modal-body" style="font-size:13px;line-height:1.9;"> 您的下载次数已用完。解析与在线试听免费,<b>下载需要消耗次数</b>(一首歌 = 1 次,歌单打包按歌曲数量扣减)。<br> <span style="opacity:.7;">请在个人中心充值卡密后继续下载。</span> </div> <div style="display:flex;gap:10px;padding:0 22px 20px;"> <button class="btn btn-primary" id="site-expired-go" type="button" style="flex:1;">去充值</button> <button class="btn" id="site-expired-close" type="button" style="flex:1;">关闭</button> </div></div>',document.body.appendChild(t),t.addEventListener("click",function(r){r.target===t&&t.remove()});var a=n("#site-expired-go"),i=n("#site-expired-close");a&&a.addEventListener("click",function(){t.remove();var r=n("#tab-usercenter");r&&r.click()}),i&&i.addEventListener("click",function(){t.remove()})}function J(e){var t=e.data||{};if(c=t.user||null,_=t.duration_text||"",D(),S(),c&&typeof window.SITE_TASKS_BOOTSTRAP=="function")try{window.SITE_TASKS_BOOTSTRAP()}catch{}}function ee(){p("login-modal");var e=window.SITE_COOKIE_GATE;if(typeof e!="function"){d("页面协议组件未就绪,请刷新页面后重试","error");return}e("register")&&B("register-modal")}function $e(){var e=n("#btn-open-login"),t=n("#btn-open-register");e&&e.addEventListener("click",function(){p("register-modal"),M(),T(),B("login-modal")}),t&&t.addEventListener("click",function(){p("login-modal"),ee()}),["login-close","register-close","announce-close"].forEach(function(f){var g=n("#"+f);g&&g.addEventListener("click",function(){f.indexOf("login")===0&&window.resetAuthViews&&window.resetAuthViews(),p(f.indexOf("login")===0?"login-modal":f.indexOf("register")===0?"register-modal":"announce-modal")})}),[["login-modal","login-close"],["register-modal","register-close"]].forEach(function(f){var g=n("#"+f[0]);g&&g.addEventListener("click",function(k){k.target===g&&(f[0]==="login-modal"&&window.resetAuthViews&&window.resetAuthViews(),p(f[0]))})});var a=n("#goto-register"),i=n("#goto-register2");a&&a.addEventListener("click",function(){p("login-modal"),ee()}),i&&i.addEventListener("click",function(){p("login-modal"),ee()});var r=n("#goto-login");r&&r.addEventListener("click",function(){p("register-modal"),M(),T(),B("login-modal")});var o=n("#goto-forgot");o&&o.addEventListener("click",Ze);var s=n("#forgot-back-login");s&&s.addEventListener("click",M);var u=n("#a2fa-back");u&&u.addEventListener("click",T)}function te(){var e=n("#login-submit"),t=(n("#login-username")||{}).value||"",a=(n("#login-password")||{}).value||"";if(!t||!a){d("请输入用户名/邮箱和密码","error");return}e.disabled=!0,e.textContent="登录中...",l("/auth/login",{username:t,password:a}).then(function(i){if(i.status!==200)throw new Error(i.message||"登录失败");if(i.data&&i.data.admin_2fa){Xe(i.data.ticket,i.data.email_masked),d("密码验证通过,请完成邮箱验证","success");return}if(J(i),p("login-modal"),d("登录成功,欢迎回来,"+(c?c.username:""),"success"),i.data&&i.data.redirect==="admin"){var r=n("#tab-useradmin");r&&r.click()}else{var o=n("#tab-usercenter");o&&o.click()}}).catch(function(i){d(i.message||"登录失败","error")}).finally(function(){e.disabled=!1,e.textContent="登 录"})}var j=/^[\w.%+-]+@[\w.-]+\.[A-Za-z]{2,}$/,Ye=/^[A-Za-z0-9_\u4e00-\u9fa5]{3,20}$/;function U(e){d(e,"error");var t=n("#reg-error-line");t&&(t.textContent=e,t.hidden=!1)}function ne(){var e=n("#reg-error-line");e&&(e.textContent="",e.hidden=!0)}function Qe(){var e=n("#reg-send-code"),t=(n("#reg-email")||{}).value||"";if(!j.test(t.trim())){d("邮箱格式不正确","error");return}ne(),e.disabled=!0,e.textContent="发送中...",l("/auth/send_code",{email:t,purpose:"register"}).then(function(a){if(a.status!==200)throw new Error(a.message||"发送失败");d("验证码已发送,请查收邮箱","success");var i=60;window.__regCodeTimer=setInterval(function(){i--,e.textContent=i+"s",i<=0&&(clearInterval(window.__regCodeTimer),e.textContent="发送验证码",e.disabled=!1)},1e3)}).catch(function(a){d(a.message||"发送失败","error"),e.disabled=!1,e.textContent="发送验证码"})}function O(e){d(e,"error");var t=n("#forgot-error-line");t&&(t.textContent=e,t.hidden=!1)}function z(){var e=n("#forgot-error-line");e&&(e.textContent="",e.hidden=!0)}function de(){clearInterval(window.__forgotCodeTimer||0);var e=n("#forgot-send-code");e&&e.disabled&&(e.disabled=!1,e.textContent="发送验证码")}function Ze(){var e=document.querySelector("#login-modal .auth-form"),t=n("#forgot-view");if(!(!e||!t)){e.classList.add("forgot-mode"),t.hidden=!1,z();var a=n("#forgot-email");if(a)try{a.focus()}catch{}}}function M(){var e=document.querySelector("#login-modal .auth-form"),t=n("#forgot-view");e&&e.classList.remove("forgot-mode"),t&&!t.hidden&&(t.hidden=!0),z(),de()}function We(){var e=n("#forgot-send-code"),t=(n("#forgot-email")||{}).value||"";if(!j.test(t.trim())){O("邮箱格式不正确");return}z(),e.disabled=!0,e.textContent="发送中...",l("/auth/send_code",{email:t,purpose:"reset"}).then(function(a){if(a.status!==200)throw new Error(a.message||"发送失败");d("验证码已发送,请查收邮箱","success");var i=60;window.__forgotCodeTimer=setInterval(function(){i--,e.textContent=i+"s",i<=0&&(clearInterval(window.__forgotCodeTimer),e.textContent="发送验证码",e.disabled=!1)},1e3)}).catch(function(a){O(a.message||"发送失败"),e.disabled=!1,e.textContent="发送验证码"})}function ce(){var e=n("#forgot-submit"),t=(n("#forgot-email")||{}).value||"",a=(n("#forgot-code")||{}).value||"",i=(n("#forgot-password")||{}).value||"";if(z(),!t||!a||!i){O("请填写完整找回信息");return}if(!j.test(t.trim())){O("邮箱格式不正确");return}if(i.length<8||i.length>128){O("新密码长度需在 8-128 位之间");return}e.disabled=!0,e.textContent="重置中...",l("/auth/forgot_password",{email:t,code:a,password:i}).then(function(r){if(r.status!==200)throw new Error(r.message||"重置失败");var o=n("#forgot-email"),s=n("#forgot-code"),u=n("#forgot-password");o&&(o.value=""),s&&(s.value=""),u&&(u.value=""),de(),M(),d("密码已重置,请用新密码登录","success")}).catch(function(r){O(r.message||"重置失败")}).finally(function(){e.disabled=!1,e.textContent="重置密码"})}var N="";function L(e){d(e,"error");var t=n("#a2fa-error-line");t&&(t.textContent=e,t.hidden=!1)}function H(){var e=n("#a2fa-error-line");e&&(e.textContent="",e.hidden=!0)}function le(){clearInterval(window.__a2faTimer||0);var e=n("#a2fa-send");e&&e.disabled&&(e.disabled=!1,e.textContent="发送验证码")}function Xe(e,t){var a=document.querySelector("#login-modal .auth-form"),i=n("#admin2fa-view");if(!(!a||!i)){N=e||"";var r=n("#a2fa-email-mask");r&&(r.textContent=t||"-");var o=n("#a2fa-email"),s=n("#a2fa-code");o&&(o.value=""),s&&(s.value=""),a.classList.add("admin2fa-mode"),i.hidden=!1,H(),le();var u=n("#a2fa-email");if(u)try{u.focus()}catch{}}}function T(){var e=document.querySelector("#login-modal .auth-form"),t=n("#admin2fa-view");e&&e.classList.remove("admin2fa-mode"),t&&!t.hidden&&(t.hidden=!0),N="",H(),le()}window.resetAuthViews=function(){M(),T()};function Je(){var e=n("#a2fa-send"),t=(n("#a2fa-email")||{}).value||"";if(!t.trim()){L("请输入管理员绑定邮箱");return}H(),e.disabled=!0,e.textContent="发送中...",l("/auth/admin_login/email",{ticket:N,email:t}).then(function(a){if(a.status===401){T(),L(a.message||"请重新登录");return}if(a.status!==200)throw new Error(a.message||"发送失败");d("验证码已发送至管理员邮箱,请查收","success");var i=n("#a2fa-code");if(i)try{i.focus()}catch{}var r=60;window.__a2faTimer=setInterval(function(){r--,e.textContent=r+"s",r<=0&&(clearInterval(window.__a2faTimer),e.textContent="发送验证码",e.disabled=!1)},1e3)}).catch(function(a){L(a.message||"发送失败"),e.disabled=!1,e.textContent="发送验证码"})}function fe(){var e=n("#a2fa-submit"),t=(n("#a2fa-email")||{}).value||"",a=(n("#a2fa-code")||{}).value||"";if(H(),!t.trim()){L("请输入管理员绑定邮箱");return}if(!a.trim()){L("请先获取并输入邮箱验证码");return}e.disabled=!0,e.textContent="验证中...",l("/auth/admin_login/verify",{ticket:N,code:a}).then(function(i){if(i.status===401){T(),L(i.message||"请重新登录");return}if(i.status!==200)throw new Error(i.message||"验证失败");H(),J(i),p("login-modal"),d("登录成功,欢迎回来,"+(c?c.username:""),"success");var r=n("#tab-useradmin");r&&r.click()}).catch(function(i){L(i.message||"验证失败")}).finally(function(){e.disabled=!1,e.textContent="验证并登录"})}function me(){var e=n("#reg-submit"),t=(n("#reg-username")||{}).value||"",a=(n("#reg-password")||{}).value||"",i=(n("#reg-email")||{}).value||"",r=(n("#reg-code")||{}).value||"";if(ne(),typeof window.SITE_COOKIE_GATE!="function"){d("页面协议组件未就绪,请刷新页面后重试","error");return}if(window.SITE_COOKIE_GATE("register")){if(!t||!a||!i||!r){U("请填写完整注册信息");return}if(!Ye.test(t)){U("用户名需 3-20 位,仅支持中文、字母、数字、下划线,且不能纯下划线");return}if(!j.test(i.trim())){U("邮箱格式不正确");return}if(a.length<8||a.length>128){U("密码长度需在 8-128 位之间");return}e.disabled=!0,e.textContent="注册中...",l("/auth/register",{username:t,password:a,email:i,code:r,device_id:Fe(),agree:1}).then(function(o){if(o.status!==200)throw new Error(o.message||"注册失败");ne(),J(o),p("register-modal"),d("注册成功,已自动登录,赠送的下载次数可在个人中心查看","success");var s=n("#tab-usercenter");s&&s.click()}).catch(function(o){U(o.message||"注册失败")}).finally(function(){e.disabled=!1,e.textContent="注 册"})}}function ve(){l("/auth/logout",{}).then(function(){if(c=null,_="",D(),S(),window.resetAuthViews&&window.resetAuthViews(),p("register-modal"),p("login-modal"),typeof window.SITE_ON_LOGOUT=="function")try{window.SITE_ON_LOGOUT()}catch{}var e=n("#site-expired-modal");e&&e.remove();var t=document.querySelector('.tab[data-tab="search"]')||n("#tab-search");t&&t.click(),d("已退出登录","success")})}function et(e){if(!e)return"-";var t=new Date(e*1e3);return t.getFullYear()+"-"+String(t.getMonth()+1).padStart(2,"0")+"-"+String(t.getDate()).padStart(2,"0")}function S(){var e,t=n("#uc-gate"),a=n("#uc-content");if(t&&a&&(t.hidden=!!c,a.hidden=!c),!!c){(e=n("#uc-avatar"))&&(e.textContent=(c.username||"U").charAt(0).toUpperCase()),(e=n("#uc-username"))&&(e.textContent=c?c.username:"-"),(e=n("#uc-role"))&&(e.textContent=c?c.role==="admin"?"管理员 · 不限次数":typeof c.duration_seconds=="number"&&c.duration_seconds<0?"VIP · 不限次数":"普通用户":"-"),(e=n("#uc-duration"))&&(e.textContent=c?_||"0 次":"-"),(e=n("#uc-email"))&&(e.textContent=c&&c.email||"未绑定"),(e=n("#uc-created"))&&(e.textContent=c?et(c.created_at):"-");var i=n("#uc-changelog");i&&(i.innerHTML=ze.map(function(r){return'<div style="margin-bottom:10px;"><b>v'+r.v+'</b> <span style="opacity:.6;font-size:12px;">'+r.date+'</span><div style="font-size:12px;opacity:.85;line-height:1.7;">'+r.items.map(function(o){return"· "+o}).join("<br>")+"</div></div>"}).join("")+'<div style="opacity:.6;font-size:12px;">当前版本 v'+je+"</div>")}}function tt(){var e=n("#uc-card-input"),t=(e&&e.value||"").trim();if(!t){d("请输入卡密","error");return}var a=n("#uc-card-redeem");a.disabled=!0,l("/auth/redeem",{code:t}).then(function(i){if(i.status!==200)throw new Error(i.message||"兑换失败");return _=i.data&&i.data.duration_text||_,c&&i.data&&typeof i.data.duration_seconds=="number"?(c.duration_seconds=i.data.duration_seconds,null):X()}).then(function(){D(),S(),e&&(e.value=""),d("充值成功","success")}).catch(function(i){d(i.message||"兑换失败","error")}).finally(function(){a.disabled=!1})}function ge(e){if(!(!e&&(!h||!h.content||h.popup_mode==="off"))){if(!e&&h&&h.popup_mode==="once"){if(c&&c.ann_seen&&String(c.ann_seen)===String(h.updated_at))return;if(!c){var t="";try{t=localStorage.getItem("netease_ann_once_seen")||""}catch{}if(t===String(h.updated_at))return}}if(!h||!h.content){d("当前没有公告内容","info");return}var a=n("#announce-title"),i=n("#announce-content");a&&(a.textContent=h.title||"系统公告"),i&&(i.innerHTML=String(h.content).split(`
`).map(function(o){return v(o)}).join("<br>"));var r=document.getElementById("cookie-modal");if(!(r&&r.classList.contains("show")))if(B("announce-modal"),c)l("/auth/ann_seen",{});else try{localStorage.setItem("netease_ann_once_seen",String(h.updated_at))}catch{}}}function v(e){return String(e??"").replace(/[&<>"']/g,function(t){return{"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}[t]})}var pe=!1,G="success";function nt(){var e=n("#ua-gate"),t=n("#ua-content");if(!(!e||!t)){var a=!!(c&&c.role==="admin");e.hidden=a,t.hidden=!a,a&&!pe&&(pe=!0,C(),$(),dt(),A(),V(),gt(),Q())}}function at(){b("#admin-side .admin-side-item[data-view]").forEach(function(u){u.setAttribute("tabindex","0"),u.setAttribute("role","button"),u.addEventListener("click",function(){b("#admin-side .admin-side-item").forEach(function(f){f.classList.remove("active")}),u.classList.add("active"),b(".admin-view").forEach(function(f){f.classList.toggle("active",f.getAttribute("data-aview")===u.getAttribute("data-view"))})}),u.addEventListener("keydown",function(f){(f.key==="Enter"||f.key===" ")&&(f.preventDefault(),u.click())})});var e=n("#ua-back");e&&e.addEventListener("click",function(){var u=n("#tab-useradmin");u&&u.classList.remove("active");var f=document.querySelector('.tab[data-tab="search"]');f&&f.click()});var t=n("#ua-logout");t&&t.addEventListener("click",ve),[e,t].forEach(function(u){u&&(u.setAttribute("tabindex","0"),u.setAttribute("role","button"),u.addEventListener("keydown",function(f){(f.key==="Enter"||f.key===" ")&&(f.preventDefault(),u.click())}))});var a=n("#ua-playkey-show"),i=n("#ua-playkey-value");function r(u){navigator.clipboard&&navigator.clipboard.writeText?navigator.clipboard.writeText(u).then(function(){d("密钥已复制","success")},function(){d("复制失败,请手动选择文本复制","error")}):d("复制失败,请点击「显示密钥」后手动复制","error")}a&&a.addEventListener("click",function(){if(a.dataset.state==="shown"){i.value="",i.placeholder="点击「显示密钥」查看",a.textContent="显示密钥",a.dataset.state="";return}l("/admin/site/play_key/get",{}).then(function(u){if(u.status!==200){d(u.message||"获取失败","error");return}i.value=u.data.key,a.textContent="隐藏",a.dataset.state="shown"})});var o=n("#ua-playkey-copy");o&&o.addEventListener("click",function(){l("/admin/site/play_key/get",{}).then(function(u){if(u.status!==200){d(u.message||"获取失败","error");return}r(u.data.key)})});var s=n("#ua-playkey-rotate");s&&s.addEventListener("click",function(){confirm("刷新后旧密钥立即全部失效(外部旧地址将打不开),确定继续?")&&l("/admin/site/play_key/rotate",{}).then(function(u){if(u.status!==200){d(u.message||"刷新失败","error");return}i.value=u.data.key,a.textContent="隐藏",a.dataset.state="shown",d("密钥已刷新,旧密钥已全部失效","success")})})}function rt(){var e=n("#ua-users-refresh");if(!(!e||n("#ua-user-create"))){var t=document.createElement("button");t.className="btn btn-sm btn-primary",t.id="ua-user-create",t.type="button",t.textContent="➕ 添加用户",t.addEventListener("click",it),e.parentNode.insertBefore(t,e)}}function it(){var e=n("#site-create-user-modal");e&&e.remove();var t=document.createElement("div");t.className="modal-mask show",t.id="site-create-user-modal",t.setAttribute("data-dynamic","1"),t.innerHTML='<div class="modal" style="width:400px;"> <div class="modal-header"><div class="modal-title">➕ 添加用户</div></div> <div class="modal-body"> <input class="input" id="cnu-username" placeholder="用户名(3-20位)" style="width:100%;margin-bottom:10px;"/> <input class="input" id="cnu-password" placeholder="初始密码(至少8位)" style="width:100%;margin-bottom:10px;"/> <input class="input" id="cnu-email" placeholder="邮箱(可选)" style="width:100%;margin-bottom:10px;"/> <input class="input" id="cnu-count" type="number" min="0" value="10" placeholder="下载次数" style="width:100%;"/> </div> <div style="display:flex;gap:10px;padding:0 22px 20px;"> <button class="btn btn-primary" id="cnu-submit" type="button" style="flex:1;">创 建</button> <button class="btn" id="cnu-cancel" type="button" style="flex:1;">取消</button> </div></div>',document.body.appendChild(t),t.addEventListener("click",function(r){r.target===t&&t.remove()});var a=n("#cnu-cancel");a&&a.addEventListener("click",function(){t.remove()});var i=n("#cnu-submit");i&&i.addEventListener("click",function(){var r={username:(n("#cnu-username")||{}).value||"",password:(n("#cnu-password")||{}).value||"",email:(n("#cnu-email")||{}).value||"",count:(n("#cnu-count")||{}).value||0};if(!r.username||r.password.length<8){d("请填写用户名和至少 8 位密码","error");return}i.disabled=!0,l("/admin/site/user/create",r).then(function(o){d(o.message||(o.status===200?"创建成功":"创建失败"),o.status===200?"success":"error"),o.status===200&&(t.remove(),C())}).finally(function(){i.disabled=!1})})}function C(){rt(),l("/admin/site/users",{}).then(function(e){var t=n("#ua-users-body");if(t){if(e.status!==200){t.innerHTML='<tr><td colspan="8">'+v(e.message||"加载失败")+"</td></tr>";return}var a=e.data&&e.data.users||[],i=n("#ua-users-count");if(i&&(i.textContent=a.length),!a.length){t.innerHTML='<tr><td colspan="8">暂无用户</td></tr>';return}t.innerHTML=a.map(function(r){var o=r.role==="admin",s=r.status===0,u=r.status===2,f=v(String(r.id)),g=v(String(r.duration_seconds)),k=r.duration_seconds<0?"不限":g+" 次",P=[r.register_ip,r.trial_device].filter(Boolean).join(" · ")||"-";return r.last_province&&(P+=" · "+r.last_province),"<tr"+(s||u?' style="opacity:.55;"':"")+"><td>"+f+"</td><td>"+v(r.username)+(u?' <span class="tag-pill" style="background:#8a1f1f;color:#fff;font-size:11px;">已封禁</span>':"")+(s?' <span class="tag-pill" style="background:var(--color-error,#e0483f);color:#fff;font-size:11px;">已禁用</span>':"")+"</td><td>"+v(r.email||"-")+"</td><td>"+(o?"管理员":"用户")+"</td><td>"+k+'</td><td style="max-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;" title="'+v(P)+'">'+v(P)+'</td><td><button class="btn btn-sm" data-ucookie="'+v(r.username)+'">'+(r.has_netease_cookie?"查看":"无")+'</button></td><td><button class="btn btn-sm" data-uedit="'+f+'" data-cur="'+g+'">改次数</button> '+(o?'<button class="btn btn-sm" data-uself="'+f+'">改自己密码</button>':'<button class="btn btn-sm" data-upwd="'+f+'" data-name="'+v(r.username)+'">重置密码</button> <button class="btn btn-sm" data-utoggle="'+f+'">'+(s?"启用":"禁用")+'</button> <button class="btn btn-sm" data-uban="'+f+'" data-name="'+v(r.username)+'">'+(u?"解封":"封禁")+'</button> <button class="btn btn-sm" data-udel="'+f+'" data-name="'+v(r.username)+'" style="color:var(--color-error);">删除</button>')+"</td></tr>"}).join(""),b("[data-uedit]",t).forEach(function(r){r.addEventListener("click",function(){var o=prompt("设置该用户的剩余次数(-1 表示不限):",r.getAttribute("data-cur"));o!==null&&l("/admin/site/user/duration",{id:r.getAttribute("data-uedit"),count:o}).then(function(s){d(s.message||(s.status===200?"已修改":"修改失败"),s.status===200?"success":"error"),s.status===200&&C()})})}),b("[data-uself]",t).forEach(function(r){r.addEventListener("click",function(){var o=prompt("请输入当前密码:","");if(o!==null){var s=prompt("请输入新密码(至少 8 位):","");s!==null&&l("/admin/site/user/reset_password",{id:r.getAttribute("data-uself"),password:s,old_password:o}).then(function(u){d(u.message||(u.status===200?"密码已修改":"修改失败"),u.status===200?"success":"error")})}})}),b("[data-upwd]",t).forEach(function(r){r.addEventListener("click",function(){var o=prompt("为用户「"+r.getAttribute("data-name")+"」设置新密码(至少 8 位):","");o!==null&&l("/admin/site/user/reset_password",{id:r.getAttribute("data-upwd"),password:o}).then(function(s){d(s.message||(s.status===200?"已重置":"重置失败"),s.status===200?"success":"error")})})}),b("[data-utoggle]",t).forEach(function(r){r.addEventListener("click",function(){l("/admin/site/user/toggle",{id:r.getAttribute("data-utoggle")}).then(function(o){d(o.message||"操作成功",o.status===200?"success":"error"),o.status===200&&C()})})}),b("[data-uban]",t).forEach(function(r){r.addEventListener("click",function(){var o=r.getAttribute("data-name");if(r.textContent==="封禁"){var s=prompt("封禁用户「"+o+`」
请输入封禁原因(将展示给用户):`,"违规使用,封禁处理");if(s===null)return;l("/admin/site/user/ban",{id:r.getAttribute("data-uban"),action:"ban",reason:s}).then(function(u){d(u.message||(u.status===200?"已封禁":"操作失败"),u.status===200?"success":"error"),u.status===200&&C()})}else{if(!window.confirm("解封用户「"+o+"」?解封后可正常登录使用。"))return;l("/admin/site/user/ban",{id:r.getAttribute("data-uban"),action:"unban"}).then(function(u){d(u.message||(u.status===200?"已解封":"操作失败"),u.status===200?"success":"error"),u.status===200&&C()})}})}),b("[data-udel]",t).forEach(function(r){r.addEventListener("click",function(){window.confirm("确定删除用户「"+r.getAttribute("data-name")+"」?")&&l("/admin/site/user/delete",{id:r.getAttribute("data-udel")}).then(function(o){d(o.message||"已删除",o.status===200?"success":"error"),C()})})}),b("[data-ucookie]",t).forEach(function(r){r.addEventListener("click",function(){l("/admin/site/user/cookie",{username:r.getAttribute("data-ucookie")}).then(function(o){if(o.status!==200){d(o.message||"获取失败","error");return}var s=o.data&&o.data.cookie||"";if(!s){d("该用户未登录过网易云账号","info");return}prompt("用户网易云 Cookie(Ctrl+C 复制):",s)})})})}})}var w=null,F="",K=0;function $(){l("/admin/cookie/status",{}).then(function(e){var t=n("#ua-cookie-status");if(t){if(e.status!==200){t.textContent=e.message||"获取失败";return}var a=e.data||{};t.textContent=(a.is_valid?"✅ 有效":"❌ 未登录")+(a.cookie_count!=null?" · Cookie "+a.cookie_count+" 个":"")}})}function ot(){l("/admin/qr/create",{}).then(function(e){if(e.status!==200){d(e.message||"生成二维码失败","error");return}var t=e.data||{};F=t.unikey||"";var a=n("#ua-qr-box"),i=n("#ua-qr-tip");if(t.qr_svg){var r="data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent(t.qr_svg)));a.innerHTML='<img src="'+r+'" style="width:180px;height:180px;" alt="二维码"/>'}i&&(i.textContent="请使用网易云音乐手机 APP 扫码"),w&&clearInterval(w),K++,w=setInterval(st,3e3)})}function st(){if(!F){w&&clearInterval(w);return}var e=K;l("/admin/qr/check",{unikey:F}).then(function(t){if(e===K){var a=n("#ua-qr-tip");if(t.status!==200){w&&clearInterval(w),a&&(a.textContent=t.message||"检查失败");return}var i=t.data&&t.data.status;i==="waiting"?a&&(a.textContent="等待扫码..."):i==="scanned"?a&&(a.textContent="✅ 已扫码,请在手机上确认"):i==="success"?(w&&clearInterval(w),a&&(a.textContent="🎉 登录成功,Cookie 已保存"),d("全局账号登录成功","success"),$()):(w&&clearInterval(w),a&&(a.textContent="二维码已过期,请重新生成"))}})}function ut(){window.confirm("确定删除全局 Cookie?删除后需重新扫码登录。")&&l("/admin/cookie/delete",{}).then(function(e){w&&clearInterval(w),F="",K++,d(e.message||"已删除",e.status===200?"success":"error");var t=n("#ua-qr-box"),a=n("#ua-qr-tip");t&&(t.innerHTML=""),a&&(a.textContent="点击下方按钮生成二维码"),$()})}function dt(){l("/admin/site/smtp/get",{}).then(function(e){if(e.status===200){var t=e.data||{};n("#ua-smtp-host")&&(n("#ua-smtp-host").value=t.host||""),n("#ua-smtp-port")&&(n("#ua-smtp-port").value=t.port||587),n("#ua-smtp-sender")&&(n("#ua-smtp-sender").value=t.sender||"")}})}function ct(){l("/admin/site/smtp/save",{host:(n("#ua-smtp-host")||{}).value||"",port:(n("#ua-smtp-port")||{}).value||587,sender:(n("#ua-smtp-sender")||{}).value||"",password:(n("#ua-smtp-pass")||{}).value||""}).then(function(e){d(e.message||"已保存",e.status===200?"success":"error");var t=n("#ua-smtp-pass");t&&(t.value="")})}function lt(){var e=(n("#ua-smtp-test-to")||{}).value||"";if(!e){d("请填写测试收件邮箱","error");return}var t=n("#ua-smtp-test");t.disabled=!0,l("/admin/site/smtp/test",{to:e}).then(function(a){d(a.message||"已发送",a.status===200?"success":"error")}).finally(function(){t.disabled=!1})}var E=1;function A(){l("/admin/site/logs",{type:G,page:E}).then(function(e){var t=n("#ua-log-list");if(t){if(e.status!==200){t.textContent=e.message||"加载失败";return}var a=e.data&&e.data.logs||[],i=e.data&&e.data.total||0,r=e.data&&e.data.pages||1;E=e.data&&e.data.page||1,window._uaLogPages=r;var o;if((o=n("#ua-log-page"))&&(o.textContent=E),(o=n("#ua-log-pages"))&&(o.textContent=r),(o=n("#ua-log-total"))&&(o.textContent=i),!a.length){t.textContent="暂无日志";return}t.innerHTML=a.map(function(s){return"<div>["+v(s.time)+"] "+v(s.username||"-")+" · "+v(s.action)+" · IP "+v(s.ip)+(s.detail?" · "+v(s.detail):"")+"</div>"}).join("")}})}function ft(){var e=G==="fail"?"失败":"成功";window.confirm("确定清除全部「"+e+"」日志?该操作不可恢复。")&&l("/admin/site/logs/clear",{type:G}).then(function(t){d(t.message||(t.status===200?"已清除":"清除失败"),t.status===200?"success":"error"),E=1,A()})}function mt(){var e=(n("#ua-card-minutes")||{}).value||"10";if(e==="custom"&&(e=(n("#ua-card-custom")||{}).value||"0",!(parseInt(e,10)>0))){d("请填写自定义次数(正整数)","error");return}l("/admin/site/cards/generate",{count:(n("#ua-card-count")||{}).value||1,credits:e,prefix:(n("#ua-card-prefix")||{}).value||"VIP",note:(n("#ua-card-note")||{}).value||"",valid_days:(n("#ua-card-days")||{}).value||0}).then(function(t){if(t.status!==200){d(t.message||"生成失败","error");return}var a=n("#ua-card-codes");a&&(a.hidden=!1,a.textContent=(t.data.codes||[]).join(`
`)),d("已生成 "+(t.data.count||0)+" 张卡密("+(t.data.credits||0)+" 次/张),已复制到文本框,请及时保存","success"),V(0)})}var I=0,Y=0,ae=100;function vt(e,t){if(t&&!(e==="delete"&&!window.confirm("确定删除卡密 "+t.slice(0,4)+"**** 吗?删除后不可恢复。"))){var a=e==="delete"?"/admin/site/cards/delete":"/admin/site/cards/disable",i={code:t,disabled:e==="enable"?"0":"1"};l(a,i).then(function(r){d(r.message||(r.status===200?"操作成功":"操作失败"),r.status===200?"success":"error"),r.status===200&&V()})}}function be(){var e=n("#ua-cards-pager");if(e){if(Y<=0){e.hidden=!0;return}var t=Math.max(1,Math.ceil(Y/ae));e.hidden=!1,e.textContent="";var a=document.createElement("button");a.className="btn btn-sm",a.type="button",a.textContent="上一页",a.disabled=I<=0,a.addEventListener("click",function(){V(I-1)});var i=document.createElement("button");i.className="btn btn-sm",i.type="button",i.textContent="下一页",i.disabled=I>=t-1,i.addEventListener("click",function(){V(I+1)});var r=document.createElement("span");r.className="hint",r.textContent="第 "+(I+1)+" / "+t+" 页 · 共 "+Y+" 张",e.appendChild(a),e.appendChild(r),e.appendChild(i)}}function V(e){typeof e=="number"&&(I=Math.max(0,e)),l("/admin/site/cards/list",{limit:ae,offset:I*ae}).then(function(t){var a=n("#ua-cards-body");if(a){if(t.status!==200){a.innerHTML='<tr><td colspan="8">加载失败</td></tr>';return}var i=t.data&&t.data.cards||[];if(Y=t.data&&t.data.total||0,!i.length){a.innerHTML='<tr><td colspan="8">暂无卡密</td></tr>',be();return}a.innerHTML=i.map(function(r){var o,s;return r.used_by?(o="已使用",s='<span class="hint">—</span>'):r.disabled?(o="已禁用",s='<button class="btn btn-sm" data-card-act="enable" data-card-code="'+v(r.code)+'" type="button">启用</button> <button class="btn btn-danger btn-sm" data-card-act="delete" data-card-code="'+v(r.code)+'" type="button">删除</button>'):(o=r.expired?"已过期":"未使用",s='<button class="btn btn-sm" data-card-act="disable" data-card-code="'+v(r.code)+'" type="button">禁用</button> <button class="btn btn-danger btn-sm" data-card-act="delete" data-card-code="'+v(r.code)+'" type="button">删除</button>'),"<tr><td>"+v(r.code)+"</td><td>"+v(String(r.minutes))+" 次</td><td>"+o+"</td><td>"+v(r.used_by||"-")+"</td><td>"+v(r.note||"-")+"</td><td>"+(r.expire_at?new Date(r.expire_at*1e3).toLocaleDateString():"永久")+"</td><td>"+v(r.created_at?new Date(r.created_at*1e3).toLocaleDateString():"-")+"</td><td>"+s+"</td></tr>"}).join(""),be(),Array.prototype.forEach.call(a.querySelectorAll("button[data-card-act]"),function(r){r.addEventListener("click",function(){vt(r.getAttribute("data-card-act"),r.getAttribute("data-card-code"))})})}})}function gt(){l("/admin/site/ann/get",{}).then(function(e){if(e.status===200){var t=e.data||{};n("#ua-ann-title")&&(n("#ua-ann-title").value=t.title||""),n("#ua-ann-content")&&(n("#ua-ann-content").value=t.content||""),n("#ua-ann-mode")&&(n("#ua-ann-mode").value=t.popup_mode||"off")}})}function pt(){l("/admin/site/ann/save",{title:(n("#ua-ann-title")||{}).value||"",content:(n("#ua-ann-content")||{}).value||"",popup_mode:(n("#ua-ann-mode")||{}).value||"off"}).then(function(e){d(e.message||"已保存",e.status===200?"success":"error")})}function he(e){return!e&&e!==0?"-":e>1048576?(e/1048576).toFixed(2)+" MB":e>1024?(e/1024).toFixed(1)+" KB":e+" B"}function Q(){l("/admin/site/backup/list",{}).then(function(e){var t=n("#ua-db-body");if(t){if(e.status!==200){t.innerHTML='<tr><td colspan="4">加载失败</td></tr>';return}var a=e.data||{},i=n("#ua-db-size");i&&(i.textContent=he(a.db_size||0));var r=n("#ua-db-hours");r&&a.interval_hours!=null&&(r.value=a.interval_hours);var o=a.backups||[];if(!o.length){t.innerHTML='<tr><td colspan="4">暂无备份</td></tr>';return}t.innerHTML=o.map(function(s){return"<tr><td>"+v(s.name)+"</td><td>"+he(s.size)+"</td><td>"+v(s.time)+'</td><td><a class="btn btn-sm" href="/admin/site/backup/download?name='+encodeURIComponent(s.name)+'">下载</a> <button class="btn btn-sm" data-restore="'+v(s.name)+'">恢复</button> <button class="btn btn-sm" data-bdel="'+v(s.name)+'" style="color:var(--color-error);">删除</button></td></tr>'}).join(""),b("[data-restore]",t).forEach(function(s){s.addEventListener("click",function(){window.confirm("确定用该备份覆盖当前数据库?")&&l("/admin/site/backup/restore",{name:s.getAttribute("data-restore")}).then(function(u){d(u.message||"已恢复",u.status===200?"success":"error"),u.status===200&&setTimeout(function(){location.reload()},1200)})})}),b("[data-bdel]",t).forEach(function(s){s.addEventListener("click",function(){window.confirm("确定删除该备份?")&&l("/admin/site/backup/delete",{name:s.getAttribute("data-bdel")}).then(function(u){d(u.message||"已删除",u.status===200?"success":"error"),Q()})})})}})}function bt(){l("/admin/site/backup/create",{}).then(function(e){d(e.message||"备份完成",e.status===200?"success":"error"),Q()})}function ht(){l("/admin/site/backup/auto",{hours:(n("#ua-db-hours")||{}).value||0}).then(function(e){d(e.message||"已保存",e.status===200?"success":"error")})}function wt(e){var t=new FormData;t.append("file",e),fetch("/admin/site/backup/upload",{method:"POST",body:t,credentials:"same-origin"}).then(function(a){if(!a.ok)throw new Error("上传失败(HTTP "+a.status+")");return a.json()}).then(function(a){d(a.message||"上传完成",a.status===200?"success":"error"),Q()}).catch(function(a){d(a&&a.message||"备份上传失败,请检查网络后重试","error")})}function yt(){$e();var e=n("#login-submit");e&&e.addEventListener("click",te);var t=n("#login-password");t&&t.addEventListener("keydown",function(m){m.key==="Enter"&&te()});var a=n("#login-username");a&&a.addEventListener("keydown",function(m){m.key==="Enter"&&te()});var i=n("#reg-submit");i&&i.addEventListener("click",me);var r=n("#reg-send-code");r&&r.addEventListener("click",Qe),["#reg-username","#reg-password","#reg-email","#reg-code"].forEach(function(m){var y=n(m);y&&y.addEventListener("keydown",function(x){x.key==="Enter"&&me()})}),[["#login-pwd-eye","#login-password"],["#reg-pwd-eye","#reg-password"],["#forgot-pwd-eye","#forgot-password"]].forEach(function(m){var y=n(m[0]),x=n(m[1]);!y||!x||y.addEventListener("click",function(){var Ve=x.type==="password";x.type=Ve?"text":"password",y.textContent=Ve?"隐藏":"显示"})});var o=n("#reg-email");o&&o.addEventListener("input",function(){var m=n("#reg-send-code");m&&m.disabled&&/^\d+s$/.test(m.textContent)&&(clearInterval(window.__regCodeTimer||0),m.disabled=!1,m.textContent="发送验证码",d("邮箱已修改,请重新发送验证码","info"))});var s=n("#forgot-send-code");s&&s.addEventListener("click",We);var u=n("#forgot-submit");u&&u.addEventListener("click",ce),["#forgot-email","#forgot-code","#forgot-password"].forEach(function(m){var y=n(m);y&&y.addEventListener("keydown",function(x){x.key==="Enter"&&ce()})});var f=n("#forgot-email");f&&f.addEventListener("input",function(){var m=n("#forgot-send-code");m&&m.disabled&&/^\d+s$/.test(m.textContent)&&(clearInterval(window.__forgotCodeTimer||0),m.disabled=!1,m.textContent="发送验证码",d("邮箱已修改,请重新发送验证码","info"))});var g=n("#a2fa-send");g&&g.addEventListener("click",Je);var k=n("#a2fa-submit");k&&k.addEventListener("click",fe),["#a2fa-email","#a2fa-code"].forEach(function(m){var y=n(m);y&&y.addEventListener("keydown",function(x){x.key==="Enter"&&fe()})});var P=n("#announce-ok");P&&P.addEventListener("click",function(){p("announce-modal")});var ye=n("#tab-usercenter");ye&&ye.addEventListener("click",S);var Z=n("#tab-useradmin");Z&&Z.addEventListener("click",nt);var Ee=n("#user-avatar");Ee&&Ee.addEventListener("click",function(){if(c&&c.role==="admin")Z&&Z.click();else{var m=n("#tab-usercenter");m&&m.click()}});var ke=n("#uc-card-redeem");ke&&ke.addEventListener("click",tt);var xe=n("#uc-ann-view");xe&&xe.addEventListener("click",function(){ge(!0)});var _e=n("#uc-logout");_e&&_e.addEventListener("click",ve),at();var Ce=n("#ua-users-refresh");Ce&&Ce.addEventListener("click",C);var Le=n("#ua-cookie-refresh");Le&&Le.addEventListener("click",$);var Te=n("#ua-qr-create");Te&&Te.addEventListener("click",ot);var Se=n("#ua-cookie-delete");Se&&Se.addEventListener("click",ut);var Ae=n("#ua-smtp-save");Ae&&Ae.addEventListener("click",ct);var Ie=n("#ua-smtp-test");Ie&&Ie.addEventListener("click",lt);var Oe=n("#ua-log-refresh");Oe&&Oe.addEventListener("click",function(){A()});var Me=n("#ua-log-tab-ok");Me&&Me.addEventListener("click",function(){G="success",E=1,A()});var Pe=n("#ua-log-tab-fail");Pe&&Pe.addEventListener("click",function(){G="fail",E=1,A()});var Re=n("#ua-log-prev");Re&&Re.addEventListener("click",function(){E>1&&(E--,A())});var qe=n("#ua-log-next");qe&&qe.addEventListener("click",function(){var m=window._uaLogPages||999;E<m&&(E++,A())});var Be=n("#ua-log-clear");Be&&Be.addEventListener("click",ft);var De=n("#ua-card-gen");De&&De.addEventListener("click",mt);var W=n("#ua-card-minutes");W&&W.addEventListener("change",function(){var m=n("#ua-card-custom");m&&(m.hidden=W.value!=="custom"),W.value==="custom"&&m&&m.focus()});var Ue=n("#ua-ann-save");Ue&&Ue.addEventListener("click",pt);var He=n("#ua-db-backup");He&&He.addEventListener("click",bt);var Ge=n("#ua-db-auto");Ge&&Ge.addEventListener("click",ht);var R=n("#ua-db-upload");R&&R.addEventListener("change",function(){R.files&&R.files[0]&&wt(R.files[0]),R.value=""})}function we(){yt(),X()}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",we):we()}export{_t as __authBoot};
//# sourceMappingURL=auth.js.map