1/*! LICENSE: 2692.2b4e459eac.js.LICENSE.txt */ 2"use strict";(self.rspackChunknewapi_web=self.rspackChunknewapi_web||[]).push([[2692],{34833(e,t,a){a.d(t,{nc:()=>l,lW:()=>u,$e:()=>c,Rk:()=>d,pF:()=>s,D4:()=>m});var r=a(63228);async function s(){return(await r.FH.get("/api/user/passkey")).data}async function n(){return(await r.FH.post("/api/user/passkey/register/begin")).data}async function i(e){return(await r.FH.post("/api/user/passkey/register/finish",e)).data}async function o(){return(await r.FH.delete("/api/user/passkey")).data}async function l(){return(await r.FH.post("/api/user/passkey/login/begin")).data}async function c(e){return(await r.FH.post("/api/user/passkey/login/finish",e)).data}async function u(){return(await r.FH.post("/api/user/passkey/verify/begin")).data}async function d(e){return(await r.FH.post("/api/user/passkey/verify/finish",e)).data}var f=a(54958),h=a(65311),y=a(26028),p=a(96208);function m(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{onStatusChange:t}=e,[a,r]=(0,h.useState)(null),[l,c]=(0,h.useState)(!0),[u,d]=(0,h.useState)(!1),[m,g]=(0,h.useState)(!1),[w,x]=(0,h.useState)(!1),b=(0,h.useCallback)(async()=>{try{c(!0);let e=await s();e.success?(r(e.data??null),t?.(e.data??null)):(r(null),y.oR.error(e.message||f.Ay.t("Failed to load Passkey status")))}catch(e){console.error("[Passkey] Failed to fetch status",e),y.oR.error(f.Ay.t("Failed to load Passkey status")),r(null)}finally{c(!1)}},[t]);(0,h.useEffect)(()=>{b()},[b]),(0,h.useEffect)(()=>{(0,p.TA)().then(x).catch(()=>x(!1))},[]);let k=(0,h.useCallback)(async()=>{if(!w)return y.oR.error(f.Ay.t("This device does not support Passkey")),!1;if(!navigator?.credentials)return y.oR.error(f.Ay.t("Passkey is not supported in this environment")),!1;d(!0);try{let e=await n();if(!e.success)return y.oR.error(e.message||f.Ay.t("Failed to start Passkey registration")),!1;let t=(0,p.az)(e.data?.options??e.data),a=await (0,p.GO)(t);if(!a)return y.oR.error(f.Ay.t("Passkey registration was cancelled")),!1;let r=(0,p.$i)(a);if(!r)return y.oR.error(f.Ay.t("Invalid Passkey registration response")),!1;let s=await i(r);if(!s.success)return y.oR.error(s.message||f.Ay.t("Failed to register Passkey")),!1;return y.oR.success(f.Ay.t("Passkey registered successfully")),await b(),!0}catch(e){if(e instanceof DOMException&&"NotAllowedError"===e.name)return y.oR.info(f.Ay.t("Passkey registration was cancelled")),!1;return console.error("[Passkey] Registration error",e),y.oR.error(e instanceof Error?e.message:f.Ay.t("Failed to register Passkey")),!1}finally{d(!1)}},[w,b]),v=(0,h.useCallback)(async()=>{g(!0);try{let e=await o();if(!e.success)return y.oR.error(e.message||f.Ay.t("Failed to remove Passkey")),!1;return y.oR.success(f.Ay.t("Passkey removed successfully")),await b(),!0}catch(e){return console.error("[Passkey] Removal error",e),y.oR.error(f.Ay.t("Failed to remove Passkey")),!1}finally{g(!1)}},[b]),j=(0,h.useMemo)(()=>!!a?.enabled,[a]),A=(0,h.useMemo)(()=>a?.last_used_at??null,[a]);return{status:a,loading:l,registering:u,removing:m,supported:w,enabled:j,lastUsed:A,fetchStatus:b,register:k,remove:v}}},96208(e,t,a){function r(e){if(!e)return new ArrayBuffer(0);let t="=".repeat((4-e.length%4)%4),a=(e+t).replace(/-/g,"+").replace(/_/g,"/"),r=globalThis,s=("function"==typeof r.atob?r.atob.bind(r):e=>{if(void 0!==r.Buffer)return r.Buffer.from(e,"base64").toString("binary");throw Error("Base64 decoding is not supported in this environment")})(a),n=new ArrayBuffer(s.length),i=new Uint8Array(n);for(let e=0;e<s.length;e+=1)i[e]=s.charCodeAt(e);return n}function s(e){if(!e)return"";let t=globalThis,a=new Uint8Array(e),r="";for(let e=0;e<a.byteLength;e+=1)r+=String.fromCharCode(a[e]);return("function"==typeof t.btoa?t.btoa.bind(t):e=>{if(void 0!==t.Buffer)return t.Buffer.from(e,"binary").toString("base64");throw Error("Base64 encoding is not supported in this environment")})(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function n(e){let t=e?.publicKey??e?.PublicKey??e?.response??e?.Response;if(!t)throw Error("Unable to parse Passkey registration options from response");let a={...t,challenge:r(t.challenge),user:{...t.user,id:r(t.user?.id)}};return Array.isArray(t.excludeCredentials)&&(a.excludeCredentials=t.excludeCredentials.map(e=>({...e,id:r(e.id)}))),Array.isArray(t.attestationFormats)&&0===t.attestationFormats.length&&delete a.attestationFormats,a}function i(e){let t=e?.publicKey??e?.PublicKey??e?.response??e?.Response;
2if(!t)throw Error("Unable to parse Passkey login options from response");let a={...t,challenge:r(t.challenge)};return Array.isArray(t.allowCredentials)&&(a.allowCredentials=t.allowCredentials.map(e=>({...e,id:r(e.id)}))),a}function o(e){if(!e)return null;let t=e.response,a="function"==typeof t.getTransports?t.getTransports():void 0;return{id:e.id,rawId:s(e.rawId),type:e.type,authenticatorAttachment:e.authenticatorAttachment,response:{attestationObject:s(t.attestationObject),clientDataJSON:s(t.clientDataJSON),transports:a},clientExtensionResults:e.getClientExtensionResults?.()??{}}}function l(e){if(!e)return null;let t=e.response;return{id:e.id,rawId:s(e.rawId),type:e.type,authenticatorAttachment:e.authenticatorAttachment,response:{authenticatorData:s(t.authenticatorData),clientDataJSON:s(t.clientDataJSON),signature:s(t.signature),userHandle:t.userHandle?s(t.userHandle):null},clientExtensionResults:e.getClientExtensionResults?.()??{}}}async function c(){if("u"<typeof window)return!1;let{PublicKeyCredential:e}=window;if(!e)return!1;if("function"==typeof e.isConditionalMediationAvailable)try{if(await e.isConditionalMediationAvailable())return!0}catch{}if("function"==typeof e.isUserVerifyingPlatformAuthenticatorAvailable)try{return await e.isUserVerifyingPlatformAuthenticatorAvailable()}catch{return!1}return!0}async function u(e){return navigator.credentials.create({publicKey:e})}a.d(t,{$i:()=>o,GO:()=>u,Il:()=>l,TA:()=>c,az:()=>n,ig:()=>i})},53903(e,t,a){a.r(t),a.d(t,{component:()=>M});var r=a(79015),s=a(62698),n=a(30661),i=a(89077),o=a(43303),l=a(226),c=a(44459),u=a(99435),d=a(70326),f=a(68758),h=a(24014),y=a(65311),p=a(27606),m=a(26028),g=a(31155),w=a(58419),x=a(37875),b=a(73178),k=a(1996),v=a(62724),j=a(62978),A=a(52685),_=a(41916),R=a(30780),C=a(31600),P=a(52921),N=a(95204),S=a(34833),F=a(96208),E=a(47801);function H(e){let{className:t,redirectTo:a,...s}=e,{t:l}=(0,i.Bd)(),[c,H]=(0,y.useState)(!1),[M,B]=(0,y.useState)(""),[D,I]=(0,y.useState)(!1),[O,T]=(0,y.useState)(!1),[U,W]=(0,y.useState)(!1),[$,q]=(0,y.useState)(!1),[J,V]=(0,y.useState)(!1),z=l("Please agree to the legal terms first"),K=l("Login failed"),{status:L}=(0,o.s)(),Q=!!(L?.passkey_login??L?.data?.passkey_login),G=(L?.password_login_enabled??L?.data?.password_login_enabled??!0)!==!1,{isTurnstileEnabled:X,turnstileSiteKey:Y,turnstileToken:Z,setTurnstileToken:ee,validateTurnstile:et}=(0,N.A)(),{handleLoginSuccess:ea,redirectTo2FA:er}=(0,P.u)(),es=!!L?.user_agreement_enabled,en=!!L?.privacy_policy_enabled,ei=es||en,eo=U||!O||ei&&!D,el=!!L?.wechat_login,ec=!!(L?.github_oauth||L?.discord_oauth||L?.oidc_enabled||L?.linuxdo_oauth||L?.telegram_oauth||(L?.custom_oauth_providers?.length??0)>0),eu=Q||el||ec;(0,y.useEffect)(()=>{ei?I(!1):I(!0)},[ei]),(0,y.useEffect)(()=>{(0,F.TA)().then(T).catch(()=>T(!1))},[]);let ed=(0,p.mN)({resolver:(0,u.u)(C.ni),defaultValues:{username:"",password:""}}),ef=(0,y.useMemo)(()=>L?.wechat_qrcode||L?.wechat_qr_code||L?.wechat_qrcode_image_url||L?.wechat_qr_code_image_url||L?.wechat_account_qrcode_image_url||L?.WeChatAccountQRCodeImageURL||L?.data?.wechat_qrcode||L?.data?.WeChatAccountQRCodeImageURL||"",[L]);async function eh(e){if(ei&&!D)return void m.oR.error(z);if(et()){H(!0);try{let t=await (0,A.iD)({username:e.username,password:e.password,turnstile:Z});if(t.success){if(t.data?.require_2fa)return void er();await ea(t.data,a),m.oR.success(l("Welcome back!"))}}catch(e){}finally{H(!1)}}}let ey=e=>{q(e),e||(B(""),V(!1))};async function ep(){if(!M.trim())return void m.oR.error(l("Please enter the verification code"));V(!0);try{let e=await (0,A.Cw)(M);e?.success?(await ea(e.data,a),m.oR.success(l("Signed in via WeChat")),ey(!1)):m.oR.error(e?.message||K)}catch(e){m.oR.error(K)}finally{V(!1)}}async function em(){if(ei&&!D)return void m.oR.error(z);if(!O)return void m.oR.error(l("Passkey is not supported on this device"));if(!navigator?.credentials)return void m.oR.error(l("Passkey is not available in this browser"));W(!0);try{let e=await (0,S.nc)();if(!e.success)throw Error(e.message||l("Failed to start Passkey login"));let t=(0,F.ig)(e.data?.options??e.data),r=await navigator.credentials.get({publicKey:t});if(!r)return void m.oR.info(l("Passkey login was cancelled"));let s=(0,F.Il)(r);if(!s)throw Error(l("Invalid Passkey response"));let n=await (0,S.$e)(s);if(!n.success)throw Error(n.message||l("Failed to complete Passkey login"));if(!n.data)throw Error(l("Missing user data from Passkey login response"));await ea(n.data,a),m.oR.success(l("Signed in with Passkey"))}catch(e){e instanceof DOMException&&"NotAllowedError"===e.name?m.oR.info(l("Passkey login was cancelled or timed out")):e instanceof Error?m.oR.error(e.message):m.oR.error(l("Passkey login failed"))}finally{W(!1)}}let eg=(0,r.jsxs)(r.Fragment,{children:[Q&&(0,r.jsxs)("div",{className:"mt-2 space-y-1",children:[(0,r.jsxs)(b.$,{type:"button",variant:"outline",disabled:eo,onClick:em,className:"h-11 w-full justify-center gap-2 rounded-lg",children:[U?(0,r.jsx)(d.A,{className:"h-4 w-4 animate-spin"}):(0,r.jsx)(f.A,{className:"h-4 w-4"}),l("Sign in with Passkey")]}),!O&&(0,r.jsx)("p",{className:"text-muted-foreground text-xs",children:l("Passkey is not supported on this device.")})]}),(0,r.jsx)(R.m,{status:L,disabled:c||ei&&!D,onWeChatLogin:el?()=>{ei&&!D?m.oR.error(z):q(!0)}:void 0,isWeChatLoading:J})]});return(0,r.jsxs)(k.lV,{...ed,children:[(0,r.jsxs)("form",{onSubmit:ed.handleSubmit(eh),className:(0,E.cn)("grid gap-4",t),...s,children:[eu&&eg,G&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(k.zB,{control:ed.control,name:"username",render:e=>{let{field:t}=e;return(0,r.jsxs)(k.eI,{children:[(0,r.jsx)(k.lR,{children:l("Username or Email")}),(0,r.jsx)(k.MJ,{children:(0,r.jsx)(v.p,{placeholder:l("Enter your username or email"),...t})}),(0,r.jsx)(k.C5,{})]})}}),(0,r.jsx)(k.zB,{control:ed.control,name:"password",render:e=>{let{field:t}=e;return(0,r.jsxs)(k.eI,{className:"relative",children:[(0,r.jsx)(k.lR,{children:l("Password")}),(0,r.jsx)(k.MJ,{children:(0,r.jsx)(w.y,{placeholder:l("Enter password"),...t})}),(0,r.jsx)(k.C5,{}),(0,r.jsx)(n.N_,{to:"/forgot-password",className:"text-muted-foreground absolute end-0 -top-0.5 z-10 text-sm font-medium hover:opacity-75",children:l("Forgot password?")})]})}}),(0,r.jsxs)(b.$,{type:"submit",className:"mt-2 w-full justify-center gap-2",disabled:c||ei&&!D,children:[c?(0,r.jsx)(d.A,{className:"animate-spin"}):(0,r.jsx)(h.A,{}),l("Sign in")]}),X&&(0,r.jsx)("div",{className:"mt-2",children:(0,r.jsx)(x.X,{siteKey:Y,onVerify:ee})})]}),(0,r.jsx)(_.G,{status:L,checked:D,onCheckedChange:I,className:"mt-1"}),!eu&&eg]}
2),el&&(0,r.jsxs)(g.l,{open:$,onOpenChange:ey,title:l("WeChat sign in"),description:l("Scan the QR code to follow the official account and reply with âéªè¯ç â to receive your verification code."),contentClassName:"max-w-sm",headerClassName:"text-left",contentHeight:"auto",bodyClassName:"space-y-4",footer:(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(b.$,{type:"button",variant:"outline",onClick:()=>ey(!1),disabled:J,children:l("Cancel")}),(0,r.jsxs)(b.$,{type:"button",onClick:ep,disabled:J||!M.trim()||ei&&!D,className:"gap-2",children:[J?(0,r.jsx)(d.A,{className:"h-4 w-4 animate-spin"}):null,l("Confirm")]})]}),children:[ef?(0,r.jsx)("div",{className:"flex justify-center",children:(0,r.jsx)("img",{src:ef,alt:l("WeChat login QR code"),className:"h-40 w-40 rounded-md border object-contain"})}):(0,r.jsx)("p",{className:"text-muted-foreground text-sm",children:l("QR code is not configured. Please contact support.")}),(0,r.jsxs)("div",{className:"grid gap-2",children:[(0,r.jsx)(j.J,{htmlFor:"wechat-code",children:l("Verification code")}),(0,r.jsx)(v.p,{id:"wechat-code",placeholder:l("Enter the verification code"),value:M,onChange:e=>B(e.target.value),autoComplete:"one-time-code"})]})]})]})}let M=function(){let{t:e}=(0,i.Bd)(),{redirect:t}=(0,s.S)({from:"/(auth)/sign-in"}),{status:a}=(0,o.s)();return(0,r.jsx)(l.D,{children:(0,r.jsxs)("div",{className:"w-full space-y-8",children:[(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsx)("h2",{className:"text-center text-2xl font-semibold tracking-tight sm:text-left",children:e("Sign in")}),!a?.self_use_mode_enabled&&a?.register_enabled!==!1&&(0,r.jsxs)("p",{className:"text-muted-foreground text-left text-sm sm:text-base",children:[e("Don't have an account?")," ",(0,r.jsx)(n.N_,{to:"/sign-up",className:"hover:text-primary font-medium underline underline-offset-4",children:e("Sign up")}),"."]})]}),(0,r.jsx)(H,{redirectTo:t}),(0,r.jsx)(c.N,{variant:"sign-in",status:a,className:"text-center"})]})})}},68758(e,t,a){let r=(0,a(40946).A)("key-round",[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]]);a.d(t,{},{A:r})},24014(e,t,a){let r=(0,a(40946).A)("log-in",[["path",{d:"m10 17 5-5-5-5",key:"1bsop3"}],["path",{d:"M15 12H3",key:"6jk70r"}],["path",{d:"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4",key:"u53s6r"}]]);a.d(t,{},{A:r})}}]);
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.