Archived
为什么:部署不经 node 构建(dockerignore 排除了源码),服务端 直接读 dist/index.html 与 /assets,因此构建产物必须入库; 文件名经 vite 固定(无内容 hash),golden 契约才能跨构建成立。 gzip 后 app.js 97KB / auth.js 12KB / app.css 11KB。
6 lines
41 KiB
JavaScript
6 lines
41 KiB
JavaScript
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{"&":"&","<":"<",">":">",'"':""","'":"'"}[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
|