PageSourceSearch

https://zoodata.ai/_next/static/chunks/app/%5Blocale%5D/layout-ba8019948b055efe.js

js zoodata.ai collected 2026-10-04 22:28:17 UTC 9,790 bytes, 1 lines download raw bytes

1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7639,8450],{3642:(e,t,r)=>{Promise.resolve().then(r.bind(r,41145)),Promise.resolve().then(r.bind(r,66393)),Promise.resolve().then(r.bind(r,67263)),Promise.resolve().then(r.bind(r,14757)),Promise.resolve().then(r.bind(r,7479)),Promise.resolve().then(r.bind(r,27435))},7479:(e,t,r)=>{"use strict";r.d(t,{AuthProvider:()=>m});var n=r(54568),a=r(7620),o=r(79748),i=r(54183),s=r(7639),l=r(91918),c=r(48842),u=r(3238),d=r(7709),f=r(59821),h=r(83811);let g=["/terms-gate","/goodbye"];function m({children:e}){let t=(0,h.nc)(e=>e.user?.uid??null),r=(0,a.useRef)(void 0),p=(0,c.rd)(),w=(0,o.usePathname)(),y=(0,a.useRef)(w);(0,a.useEffect)(()=>{y.current=w},[w]);let{setFirebaseUser:v,setUserInfo:x,setLoading:k,setIdToken:b,setInternalToken:_,setError:j,reset:F}=(0,h.nc)(),T=(0,a.useCallback)(async()=>{var e;if(!(0,d.qq)()||(e=y.current)&&(e.startsWith("/api/")||g.some(t=>e===t||e.includes(`${t}/`)||e.endsWith(t))))return!1;let t=h.nc.getState().user?.uid??null;try{if(!(await l.q.fetchQuery({queryKey:(0,f.rJ)(t),queryFn:async()=>(await u.FH.get("users/me/terms/status").json()).data,staleTime:f.Yz})).hasAcceptedCurrent){let e=(0,d.t6)(y.current);return p.replace(e),!0}}catch(e){console.error("Failed to fetch terms status in auth-provider:",e)}return!1},[p]);(0,a.useEffect)(()=>{if(void 0===r.current){r.current=t;return}r.current!==t&&(null!==r.current&&l.q.clear(),r.current=t)},[t]);let N=(0,a.useCallback)(async()=>{let{user:e,internalToken:t,internalTokenExpiresAt:r}=h.nc.getState();if(!t)return e&&(F(),await (0,s.JQ)()),!1;if(null!==r&&r<=Date.now())return F(),await (0,s.JQ)(),k(!1),!0;let n=await (0,s.me)(t,r);return n?(x(n),await T()):(F(),await (0,s.JQ)()),k(!1),!0},[T,F,k,x]),P=(0,a.useCallback)(async(e,t)=>{try{let r=await (0,s.exchangeFirebaseToken)(e),n=r.token;if(n){let e=await (0,s.me)(n);e&&!e.avatar&&t?.photoURL&&(e.avatar=t.photoURL),x(e)}return{token:n,expiresIn:r.expiresIn}}catch(e){return e instanceof s.vQ?(console.error("Token exchange failed:",e.message),j(`Authentication failed: ${e.message}`)):(console.error("Unexpected error during token exchange:",e),j("Authentication failed: unexpected error")),await (0,s.JQ)(),null}},[j,x]);return(0,a.useEffect)(()=>{if(!(0,i.Gg)())return void N().then(e=>{e||k(!1)});(0,i.$P)().catch(e=>{console.error("Google redirect sign-in failed:",e),j(e.message||"Google sign-in failed"),k(!1)});let e=!1,t=(0,i.Bh)(async t=>{if(!e)if(v(t),t)try{let r=await t.getIdToken();if(e)return;if(b(r),r){let n=await P(r,t);if(e||(_(n?.token??null,n?.expiresIn),n?.token&&(await T(),e)))return}}catch(e){console.error("Failed to get ID token:",e),j("Failed to authenticate")}finally{e||k(!1)}else await N()||k(!1)});return()=>{e=!0,t()}},[v,x,k,b,_,j,P,N,T]),(0,a.useEffect)(()=>{if(!(0,i.Gg)())return;let e=setInterval(async()=>{try{let e=await (0,i.p9)(!0);if(b(e),e){let t=await P(e);
1_(t?.token??null,t?.expiresIn)}}catch(e){console.error("Failed to refresh tokens:",e)}},3e6);return()=>clearInterval(e)},[b,_,P]),(0,n.jsx)(n.Fragment,{children:e})}},7639:(e,t,r)=>{"use strict";r.d(t,{JQ:()=>c,ZY:()=>s,exchangeFirebaseToken:()=>o,me:()=>l,vQ:()=>a,wG:()=>i});let n={"Invalid verification code":"invalid_code","Failed to send verification code":"send_failed","Verification service error":"verify_service_error"};class a extends Error{constructor(e,t,r){super(e),this.statusCode=t,this.name="TokenExchangeError",this.code=r??n[e]}}async function o(e){try{let t=await fetch("/api/auth/exchange",{method:"POST",headers:{"Content-Type":"application/json","fb-token":`Bearer ${e}`}});if(!t.ok){let e=await t.text().catch(()=>"Unknown error");throw new a(`Token exchange failed: ${e}`,t.status)}let r=await t.json(),n=r.access_token||r.token;if(!n)throw new a("Invalid response: missing token");return{token:n,expiresIn:r.expires_in,isNewUser:r.is_new_user}}catch(e){if(e instanceof a)throw e;throw new a(`Token exchange failed: ${e instanceof Error?e.message:"Unknown error"}`)}}async function i(e){let t;try{t=await fetch("/api/auth/email-otp/send",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:e})})}catch(e){throw new a(`Failed to send code: ${e instanceof Error?e.message:"Unknown error"}`)}let r=await t.json().catch(()=>({}));if(!t.ok)throw new a(("string"==typeof r?.detail?r.detail:"string"==typeof r?.error?r.error:null)||"Failed to send code",t.status);let n=r?.message_id;if(!n||"string"!=typeof n)throw new a("Invalid response: missing message_id");return{messageId:n}}async function s(e,t,r){let n;try{n=await fetch("/api/auth/email-otp/verify",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({message_id:e,verify_code:t,email:r})})}catch(e){throw new a(`Failed to verify code: ${e instanceof Error?e.message:"Unknown error"}`)}let o=await n.json().catch(()=>({}));if(!n.ok)throw new a(("string"==typeof o?.detail?o.detail:"string"==typeof o?.error?o.error:null)||"Verification failed",n.status);let i=o.access_token||o.token;if(!i)throw new a("Invalid response: missing token");return{token:i,expiresIn:o.expires_in,isNewUser:o.is_new_user}}async function l(e,t){try{let r={Authorization:`Bearer ${e}`};t&&t>Date.now()&&(r["x-token-expires-at-ms"]=String(t));let n=await fetch("/api/user/me",{method:"GET",headers:r});if(!n.ok)return console.error("Failed to fetch user info:",n.status),null;let a=await n.json();return{uid:a.uid,email:a.email||null,name:a.name||null,avatar:a.avatar||null,phoneNumber:a.phone_number||null}}catch(e){return console.error("Failed to fetch user info:",e),null}}async function c(){await fetch("/api/auth/logout",{method:"POST"})}},7709:(e,t,r)=>{"use strict";function n(){return!0}function a(e,t){return e&&!0===t}r.d(t,{qq:()=>n,r0:()=>a,t6:()=>s});let o=["/terms-gate","/goodbye","/login","/register"],i=["/en","/zh"];function s(e){if(!e)return"/terms-gate";let t=function(e){for(let t of i){if(e===t)return"/";if(e.startsWith(`${t}/`))return e.slice(t.length)}return e}(e);if(!t.startsWith("/")||t.startsWith("//"))return"/terms-gate";let r=t.split(/[?#]/)[0];return o.some(e=>r===e||r.startsWith(`${e}/`))?"/terms-gate":`/terms-gate?redirect=${encodeURIComponent(t)}`}},14757:(e,t,r)=>{"use strict";r.d(t,{TooltipProvider:()=>i,ZI:()=>c,k$:()=>l,m_:()=>s});var n=r(54568);r(7620);var a=r(78920),o=r(17483);function i({delayDuration:e=0,...t}){return(0,n.jsx)(a.Provider,{"data-slot":"tooltip-provider",delayDuration:e,...t})}function s({...e}){return(0,n.jsx)(a.Root,{"data-slot":"tooltip",...e})}function l({...e}){return(0,n.jsx)(a.Trigger,{"data-slot":"tooltip-trigger",...e})}function c({className:e,sideOffset:t=4,variant:r="default",children:i,...s}){return(0,n.jsx)(a.Portal,{children:(0,n.jsxs)(a.Content,{"data-slot":"tooltip-content",sideOffset:t,className:(0,o.cn)("animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:sli
1de-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md text-xs","default"===r&&"bg-foreground text-background px-3 py-1.5 text-balance","light"===r&&"bg-accent text-foreground border shadow-lg px-3 py-2","orange"===r&&"bg-orange-100 text-orange-900 border border-orange-200 px-3 py-2 shadow-lg","transparent"===r&&"bg-transparent",e),...s,children:[i,"default"===r&&(0,n.jsx)(a.Arrow,{className:"bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]"})]})})}},27435:(e,t,r)=>{"use strict";r.d(t,{QueryProvider:()=>i});var n=r(54568),a=r(68728),o=r(91918);function i({children:e}){return(0,n.jsx)(a.Ht,{client:o.q,children:e})}},48842:(e,t,r)=>{"use strict";r.d(t,{N_:()=>o,Hm:()=>c,a8:()=>s,rd:()=>l});var n=r(25773);let a=(0,r(15289).A)({locales:["en","zh"],defaultLocale:"en",localePrefix:"always"}),{Link:o,redirect:i,usePathname:s,useRouter:l,getPathname:c}=(0,n.A)(a)},59821:(e,t,r)=>{"use strict";r.d(t,{BZ:()=>f,Yz:()=>u,jp:()=>d,rJ:()=>c});var n=r(17031),a=r(68728),o=r(19053),i=r(3238),s=r(7709),l=r(83811);function c(e){return["terms-status",e??"anonymous"]}let u=18e5;function d(){let e=(0,l.nc)(l.BQ),t=(0,l.nc)(e=>e.user?.uid??null),r=(0,s.qq)()&&!!e&&!!t;return(0,n.I)({queryKey:c(t),queryFn:async()=>(await i.FH.get("users/me/terms/status").json()).data,enabled:r,staleTime:u})}function f(){let e=(0,a.jE)(),t=(0,l.nc)(e=>e.user?.uid??null);return(0,o.n)({mutationFn:async e=>{await i.FH.post("users/me/terms/accept",{json:e})},onSuccess:()=>{e.invalidateQueries({queryKey:c(t)})}})}},66393:(e,t,r)=>{"use strict";r.d(t,{Analytics:()=>i});
1var n=r(48842),a=r(79748),o=r(7620);function i(){let e=(0,n.a8)(),t=(0,a.useSearchParams)(),r=(0,o.useRef)(!1);return(0,o.useEffect)(()=>{if(!r.current){r.current=!0;return}if(!window.gtag)return;let n=e+(t?.toString()?`?${t.toString()}`:"");window.gtag("config","G-8NBDHNFJYS",{page_path:n})},[e,t]),null}},67263:(e,t,r)=>{"use strict";r.d(t,{Toaster:()=>d});var n=r(54568),a=r(63322),o=r(92007),i=r(63264),s=r(21847),l=r(58299),c=r(79227),u=r(66888);let d=({...e})=>{let{theme:t="system"}=(0,c.D)();return(0,n.jsx)(u.l$,{theme:t,className:"toaster group",richColors:!0,icons:{success:(0,n.jsx)(a.A,{className:"size-4"}),info:(0,n.jsx)(o.A,{className:"size-4"}),warning:(0,n.jsx)(i.A,{className:"size-4"}),error:(0,n.jsx)(s.A,{className:"size-4"}),loading:(0,n.jsx)(l.A,{className:"size-4 animate-spin"})},style:{"--normal-bg":"var(--popover)","--normal-text":"var(--popover-foreground)","--normal-border":"var(--border)","--border-radius":"var(--radius)"},...e})}}},e=>{e.O(0,[3811,5587,3357,6754,37,6355,7031,222,6130,8920,6615,84,587,1968,7358],()=>e(e.s=3642)),_N_E=e.O()}]);

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.