PageSourceSearch

https://wanlai.ai/assets/SoftwareOAuthAuthorizeView-Bm32EBE4.js

js wanlai.ai collected 2026-10-05 13:18:59 UTC 13,724 bytes, 1 lines download raw bytes

1import{d as ee,r as y,c as d,Y as te,o as re,_ as ae,H as oe,J as se,u as N,G as g,E as r,C as v,L as B,M as i,D as L,F as ie,W as ne,P as le}from"./vendor-vue-CWSfeEk8.js";/* empty css                                                                  */import{a as q,u as de,k as ue,e as ce,G as me,H as _e,I as pe,J as ge}from"./index-OTUsZB1q.js";import"./vendor-misc-Bibiwms9.js";/* empty css                                                                       */import{_ as fe}from"./AuthLayout.vue_vue_type_style_index_0_lang-CL2BWrYz.js";import{b as ve}from"./purchaseService-DtBZJIvX.js";import{d as he}from"./embedded-url-BjDuSg0y.js";import{u as be}from"./vendor-i18n-Dw7iJRoV.js";import"./siteFiling-DsOZthY-.js";async function ke(k){const{data:s}=await q.post("/software/oauth/sessions",k);return s}async function xe(k){const{data:s}=await q.get(`/software/oauth/sessions/${encodeURIComponent(k)}`);return s}async function ye(k){const{data:s}=await q.post(`/software/oauth/sessions/${encodeURIComponent(k)}/approve`);return s}const we={class:"space-y-5"},Se={class:"mx-auto max-w-2xl text-center"},Pe={class:"text-2xl font-bold tracking-tight text-gray-900 dark:text-white sm:text-3xl"},Ae={class:"mt-2 text-sm leading-6 text-gray-500 dark:text-dark-400"},Ce={key:0,class:"rounded-2xl border border-red-200 bg-red-50 p-4 text-sm text-red-700 dark:border-red-800/40 dark:bg-red-900/20 dark:text-red-300"},Re={class:"rounded-[28px] border border-gray-200/80 bg-white/80 p-5 shadow-[0_30px_80px_-48px_rgba(17,24,39,0.45)] backdrop-blur-sm dark:border-dark-700 dark:bg-dark-900/65 sm:p-6"},Be={class:"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between"},Ie={class:"min-w-0"},Le={class:"mt-2 flex flex-wrap items-center gap-2"},qe={class:"text-lg font-semibold leading-7 text-gray-900 break-all [overflow-wrap:anywhere] dark:text-white"},Ee={key:0,class:"inline-flex shrink-0 items-center rounded-full border border-primary-500/20 bg-white/80 px-3 py-0.5 text-xs font-medium text-primary-700 dark:border-primary-400/20 dark:bg-dark-800/80 dark:text-primary-300"},Ue=["disabled"],De={class:"flex flex-wrap items-end justify-between gap-4"},Oe={class:"min-w-0"},Me={class:"mt-2 text-2xl font-bold text-gray-900 dark:text-white"},$e={class:"text-right"},je={class:"mt-2 text-sm font-semibold leading-6 text-gray-900 dark:text-white"},ze={class:"rounded-[28px] border border-gray-200/80 bg-white/80 p-5 shadow-[0_30px_80px_-48px_rgba(17,24,39,0.45)] backdrop-blur-sm dark:border-dark-700 dark:bg-dark-900/65 sm:p-6"},Te={class:"flex flex-wrap items-center justify-between gap-3"},Ve={class:"text-xs text-gray-400 dark:text-dark-400"},We={key:0,class:"mt-4 grid gap-3 sm:grid-cols-3"},Ne={class:"flex items-start justify-between gap-3"},Qe={class:"text-sm font-semibold"},Fe={class:"text-right text-xs leading-5 opacity-80"},He={class:"font-medium"},Ge={class:"mt-4 h-2 overflow-hidden rounded-full bg-white/70 dark:bg-dark-700"},Je={class:"mt-3 text-xs leading-5 opacity-80"},Ye={key:1,class:"mt-4 rounded-xl border border-dashed border-gray-200 bg-white/60 px-4 py-5 text-sm leading-6 text-gray-500 dark:border-dark-700 dark:bg-dark-900/40 dark:text-dark-400"},Ke={class:"flex flex-col gap-3 sm:flex-row"},Xe=["disabled"],Ze=["disabled"],et=["href"],ct=ee({__name:"SoftwareOAuthAuthorizeView",setup(k){const s=te(),w=ae(),E=de(),u=ue(),{locale:Q}=be(),n=y(null),h=y(!1),S=y(!1),C=y(!1),m=y(""),c=y("");function P(e){return String(s.query[e]||"")}function U(){const e=new URLSearchParams;Object.entries(s.query).forEach(([o,a])=>{o==="prompt"||a==null||(Array.isArray(a)?a.forEach(l=>{l!=null&&e.append(o,String(l))}):e.append(o,String(a)))});const t=e.toString();return t?`${s.path}?${t}`:s.path}const D=d(()=>String(s.query.session_id||s.query.sessionId||""));function F(e){try{const t=new URL(e,window.location.origin);return Object.fromEntries(t.searchParams.entries())}catch{return{}}}const H=d(()=>c.value?F(c.value):{});function _(e){return P(e)||H.value[e]||""}const I=d(()=>D.value||_("session_id")||_("sessionId")),p=d(()=>({client_id:_("client_id"),redirect_uri:_("redirect_uri"),response_type:_("response_type")||"code",state:_("state"),code_challenge:_("code_challenge"),code_challenge_method:_("code_challenge_method")||"S256",scope:_("scope")}));function O(e,t){const o=String(t||"").trim().toLowerCase();if(o)return o;const a=String(e||"").trim().toLowerCase();return a==="wanlaicode-cli"?"wanlaicode":a==="codex-cli"?"codex":a==="cursor-cli"?"cursor":a==="wanlai-cli"?"cli":""}const M=d(()=>{const e=p.value.client_id;return e==="wanlaicode-cli"?"WanlaiCode":e==="codex-cli"?"Codex CLI":e==="cursor-cli"?"Cursor CLI":e==="wanlai-cli"?"Wanlai CLI":e||"客户端"});function $(e){return e.group_id?e.expires_at?new Date(e.expires_at).getTime()>Date.now():!0:!1}const b=d(()=>{var e;return((e=n.value)==null?void 0:e.entitlement)??null}),A=d(()=>{var e;return(e=n.value)!=null&&e.has_entitlement?!0:b.value?$(b.value):!1}),R=d(()=>{var t;const e=(t=b.value)==null?void 0:t.usage;return e?[e.total?{key:"total",label:"试用总量",used:e.total.used_tokens,limit:e.total.limit_tokens,remaining:e.total.remaining_tokens,percent:Math.min(e.total.used_tokens/e.total.limit_tokens*100,100),theme:"border-violet-200 bg-vi
1olet-50/70 text-violet-700 dark:border-violet-500/20 dark:bg-violet-900/10 dark:text-violet-300",bar:"bg-violet-500"}:null,e.five_hour?{key:"5h",label:"5 小时",used:e.five_hour.used_tokens,limit:e.five_hour.limit_tokens,remaining:e.five_hour.remaining_tokens,percent:Math.min(e.five_hour.used_tokens/e.five_hour.limit_tokens*100,100),theme:"border-emerald-200 bg-emerald-50/70 text-emerald-700 dark:border-emerald-500/20 dark:bg-emerald-900/10 dark:text-emerald-300",bar:"bg-emerald-500"}:null,e.seven_day?{key:"7d",label:"1 星期",used:e.seven_day.used_tokens,limit:e.seven_day.limit_tokens,remaining:e.seven_day.remaining_tokens,percent:Math.min(e.seven_day.used_tokens/e.seven_day.limit_tokens*100,100),theme:"border-sky-200 bg-sky-50/70 text-sky-700 dark:border-sky-500/20 dark:bg-sky-900/10 dark:text-sky-300",bar:"bg-sky-500"}:null,e.thirty_day?{key:"30d",label:"1 个月",used:e.thirty_day.used_tokens,limit:e.thirty_day.limit_tokens,remaining:e.thirty_day.remaining_tokens,percent:Math.min(e.thirty_day.used_tokens/e.thirty_day.limit_tokens*100,100),theme:"border-amber-200 bg-amber-50/70 text-amber-700 dark:border-amber-500/20 dark:bg-amber-900/10 dark:text-amber-300",bar:"bg-amber-500"}:null,e.deepseek_daily?{key:"deepseek_daily",label:"DeepSeek 每日",used:e.deepseek_daily.used_tokens,limit:e.deepseek_daily.limit_tokens,remaining:e.deepseek_daily.remaining_tokens,percent:Math.min(e.deepseek_daily.used_tokens/e.deepseek_daily.limit_tokens*100,100),theme:"border-indigo-200 bg-indigo-50/70 text-indigo-700 dark:border-indigo-500/20 dark:bg-indigo-900/10 dark:text-indigo-300",bar:"bg-indigo-500"}:null].filter(Boolean):[]}),G=d(()=>{var e,t;return O(((e=n.value)==null?void 0:e.client_id)||p.value.client_id,(t=n.value)==null?void 0:t.product_code)}),j=d(()=>{var t,o,a;const e=((t=n.value)==null?void 0:t.purchase_url)||((o=E.cachedPublicSettings)==null?void 0:o.purchase_subscription_url)||ce("/pay");return ve(e,(a=u.user)==null?void 0:a.id,u.token,he(),Q.value,{tab:"software",software_product:G.value||void 0})}),J=d(()=>{var e;return((e=u.user)==null?void 0:e.email)||"未登录"}),z=d(()=>{var e;return((e=u.user)==null?void 0:e.id)??null});function Y(e){return new Date(e).toLocaleString("zh-CN")}function K(e){return e.status!=="active"||!e.group_id?!1:e.expires_at?new Date(e.expires_at).getTime()>Date.now():!0}async function T(e){const t=await pe(),o=O(e.client_id,e.product_code),a=t.find(l=>l.product_code===o&&K(l));if(!a){const l=e.entitlement??null;return{...e,product_code:o||e.product_code,has_entitlement:!!e.has_entitlement||!!(l&&$(l))}}return{...e,product_code:o||a.product_code||e.product_code,has_entitlement:!0,entitlement:{product_code:a.product_code,product_name:a.product_name,entitlement_kind:a.entitlement_kind,group_id:a.group_id??null,group_name:a.group_name,group_platform:a.group_platform,group_subscription_type:a.group_subscription_type,plan_name:a.plan_name,expires_at:a.expires_at,total_token_limit:a.total_token_limit,usage:a.usage}}}async function V(){if(m.value="",n.value=null,u.isAuthenticated)try{await u.refreshUser()}catch(t){console.error("failed to refresh current user before software oauth session load",t),await w.replace({path:"/login",query:{redirect:c.value||s.fullPath}});return}if(I.value){h.value=!0;try{const t=await xe(I.value);n.value=await T(t)}catch(t){const o=t;m.value=(o==null?void 0:o.message)||"加载授权会话失败"}finally{h.value=!1}return}const e=[p.value.client_id?"":"client_id",p.value.redirect_uri?"":"redirect_uri",p.value.code_challenge?"":"code_challenge"].filter(Boolean);if(e.length>0){m.value=`授权参数不完整,缺少:${e.join("、")}`;return}h.value=!0;try{const t=await ke(p.value);n.value=await T(t)}catch(t){const o=t;m.value=(o==null?void 0:o.message)||"创建授权会话失败"}finally{h.value=!1}}async function X(){if(n.value){m.value="",S.value=!0;try{const e=await ye(n.value.id);ge(),window.location.href=e.redirect_uri}catch(e){const t=e;m.value=(t==null?void 0:t.message)||"批准授权失败"}finally{S.value=!1}}}async function Z(){const e=c.value||s.fullPath;C.value=!0,m.value="",u.logout().catch(o=>{console.error("logout failed before switching account",o)});try{await w.replace({path:"/login",query:{redirect:e}})}finally{C.value=!1}}return re(()=>{E.fetchPublicSettings();const e=P("prompt")==="login",t=!!D.value||!!P("client_id")||!!P("redirect_uri")||!!P("code_challenge");if(t){const a=e?U():s.fullPath;c.value=me(a)}else c.value=_e();if(e){const a=c.value||U();u.logout().catch(x=>{console.error("force logout before software oauth authorize failed",x)}),w.replace({path:"/login",query:{redirect:a}}).catch(x=>{console.error("redirect to login before software oauth authorize failed",x)});return}const o=!!I.value||!!p.value.client_id||!!p.value.redirect_uri||!!p.value.code_challenge;if(!t&&c.value&&o){w.replace(c.value);return}if(!u.isAuthenticated){w.replace({path:"/login",query:{redirect:c.value||s.fullPath}});return}V()}),(e,t)=>(g(),oe(N(fe),{"content-width-class":"max-w-3xl","content-padding-class":"p-5 sm:p-6",compact:""},{default:se(()=>{var o,a,l,x,W;return[r("div",we,[r("div",Se,[t[0]||(t[0]=r("p",{class:"mb-2 inline-flex items-center rounded-full border border-primary-500/20 bg-primary-500/10 px-4 py-1 text-xs font-semibold tracking-[0.18em] text-primary-600 dark:text-primary-300"}," Software OAuth ",-1)),r("h2",Pe," 授权登录 "+i(((o=n.value)==null?void 0:o.client_name)||M.value),1),r("p",Ae," 确认下方账号与套餐额度后,点击「批准授权」即可回到 "+i(((a=n.value)==null?void 0:a.client_name)||M.value)+" 客户端。 ",1)]),m.value?(g(),v("div",Ce,i(m.value),1)):B("",!0),r("div",Re,[r("div",Be,[r("div",Ie,[t[1]||(t[1]=r("div",{class:"text-xs uppercase tracking-[0.18em] text-gray-400 dark:text-dark-400"},"当前登录账号",-1)),r("div",Le,[r("span",qe,i(J.value),1),z.value?(g(),v("span",Ee," ID "+i(z.value),1)):B("",!0)])]),N(u).isAuthenticated?(g(),v("button",{key:0,t
1ype:"button",class:"btn btn-secondary shrink-0",disabled:C.value,onClick:Z},i(C.value?"切换中...":"切换账号"),9,Ue)):B("",!0)]),t[4]||(t[4]=r("div",{class:"my-5 border-t border-gray-100 dark:border-dark-700"},null,-1)),r("div",De,[r("div",Oe,[t[2]||(t[2]=r("div",{class:"text-xs uppercase tracking-[0.18em] text-gray-400 dark:text-dark-400"},"当前套餐",-1)),r("div",Me,i(((l=b.value)==null?void 0:l.plan_name)||((x=b.value)==null?void 0:x.product_name)||(A.value?"已开通套餐":"仅登录授权")),1)]),r("div",$e,[t[3]||(t[3]=r("div",{class:"text-xs uppercase tracking-[0.18em] text-gray-400 dark:text-dark-400"},"到期时间",-1)),r("div",je,i((W=b.value)!=null&&W.expires_at?Y(b.value.expires_at):A.value?"长期有效":"未开通"),1)]),r("span",{class:L(["inline-flex items-center rounded-full px-3 py-1 text-xs font-medium",A.value?"bg-emerald-500/10 text-emerald-700 dark:text-emerald-300":"bg-amber-500/10 text-amber-700 dark:text-amber-300"])},i(A.value?"套餐可用":"仅登录授权"),3)])]),r("div",ze,[r("div",Te,[t[5]||(t[5]=r("div",{class:"text-sm font-semibold text-gray-800 dark:text-dark-100"},"套餐额度",-1)),r("div",Ve,i(R.value.length?`${R.value.length} 个统计窗口`:"暂无窗口数据"),1)]),R.value.length?(g(),v("div",We,[(g(!0),v(ie,null,ne(R.value,f=>(g(),v("div",{key:f.key,class:L(["rounded-2xl border p-4",f.theme])},[r("div",Ne,[r("div",null,[r("div",Qe,i(f.label),1),t[6]||(t[6]=r("div",{class:"mt-1 text-xs opacity-80"},"已用 / 总量",-1))]),r("div",Fe,[r("div",He,i(f.used.toLocaleString()),1),r("div",null,i(f.limit.toLocaleString())+" tokens",1)])]),r("div",Ge,[r("div",{class:L(["h-full rounded-full transition-all duration-300",f.bar]),style:le({width:`${f.percent}%`})},null,6)]),r("div",Je,"剩余 "+i(f.remaining.toLocaleString())+" tokens",1)],2))),128))])):(g(),v("div",Ye," 当前授权还没有可展示的额度信息。 "))]),r("div",Ke,[r("button",{type:"button",class:"btn btn-primary flex-1",disabled:!n.value||S.value||h.value,onClick:X},i(S.value?"正在批准...":"批准授权"),9,Xe),r("button",{type:"button",class:"btn btn-secondary flex-1",disabled:h.value||S.value,onClick:V},i(h.value?"刷新中...":"刷新状态"),9,Ze)]),!A.value&&j.value?(g(),v("a",{key:1,href:j.value,target:"_blank",rel:"noreferrer",class:"btn w-full border border-primary-500/30 bg-primary-500/10 text-primary-700 hover:bg-primary-500/15 dark:text-primary-300"}," 开通软件服务套餐 ",8,et)):B("",!0)])]}),_:1}))}});export{ct as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.