PageSourceSearch

https://chazown.app/assets/AuthContext-DAJXG1jI.js

js chazown.app collected 2026-10-02 00:42:17 UTC 11,344 bytes, 1 lines download raw bytes

1import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{o as t,s as n}from"./vendor-query-CZ9kNdGv.js";var r=e(n(),1);function i(e,t){if(!t)throw Error(`Missing required auth env var: ${e}`);return t}function a(e){return e.endsWith(`/`)?e.slice(0,-1):e}var o={get apiBaseUrl(){return a(`https://chazown.app`)},get googleClientId(){return i(`VITE_GOOGLE_CLIENT_ID`,`702477726493-6scgjkejn3qsrl60ma7osk4e0a64cht4.apps.googleusercontent.com`)},get appleClientId(){return i(`VITE_APPLE_CLIENT_ID`,`app.chazown.web`)},get appleRedirectUri(){return i(`VITE_APPLE_REDIRECT_URI`,`https://chazown.app/api/v1/platform/auth/apple/web-callback`)}},s=null,c=!1;function l(e){s=e}async function u(e){if(!(e!==401||!s||c)){c=!0;try{await s()}finally{c=!1}}}var d=`chazown.auth.tokens.v2`;function f(e){try{let t=JSON.parse(e);return typeof t.accessToken!=`string`||typeof t.accessTokenExpiresAt!=`string`||typeof t.refreshToken!=`string`||typeof t.refreshTokenExpiresAt!=`string`?null:{accessToken:t.accessToken,accessTokenExpiresAt:t.accessTokenExpiresAt,refreshToken:t.refreshToken,refreshTokenExpiresAt:t.refreshTokenExpiresAt}}catch{return null}}function p(){if(typeof window>`u`)return null;let e=window.localStorage.getItem(d);return e?f(e):null}function m(e){typeof window>`u`||window.localStorage.setItem(d,JSON.stringify(e))}function h(){typeof window>`u`||window.localStorage.removeItem(d)}function g(e,t=30){let n=Date.parse(e);return Number.isNaN(n)?!0:Date.now()+t*1e3>=n}var _=null,v=class extends Error{constructor(e,t,n){super(n),this.status=e,this.body=t}};function y(e,t){let n=t.trim();if(!n)return e>=500?`The service is temporarily unavailable. Please try again in a few minutes.`:`Request failed (${e}).`;if(n.startsWith(`<!DOCTYPE`)||n.startsWith(`<html`)||n.includes(`<body`)&&n.includes(`</`)||n.length>800)return e>=500?`The service is temporarily unavailable. Please try again in a few minutes.`:`Request failed (${e}). Please try again.`;try{let e=JSON.parse(n).detail;if(typeof e==`string`&&e.trim())return e.trim()}catch{}return n.length>600?`${n.slice(0,600)}…`:n}function b(e){return{accessToken:e.access_token,accessTokenExpiresAt:e.access_token_expires_at,refreshToken:e.refresh_token,refreshTokenExpiresAt:e.refresh_token_expires_at}}async function x(){if(typeof window>`u`)return null;let e=p();return e?g(e.accessTokenExpiresAt,0)?g(e.refreshTokenExpiresAt,0)?(h(),null):(_||=(async()=>{try{let t=await fetch(`${o.apiBaseUrl}/api/v1/platform/auth/refresh`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({refresh_token:e.refreshToken})});if(!t.ok)return(t.status===401||t.status===403)&&h(),null;let n=b(await t.json());return m(n),n}catch{return null}finally{_=null}})(),_):e:null}async function S(e,t={}){let n=t.method??`GET`,r={...t.headers??{}};t.body!==void 0&&(r[`Content-Type`]=`application/json`);let i=e=>{let t={...r};return e&&(t.Authorization=`Bearer ${e}`),t},a=t.body===void 0?void 0:JSON.stringify(t.body),o=async e=>{if(e.status===204||e.status===205)return;let t=await e.text();if(t.trim())return JSON.parse(t)},s=await fetch(e,{method:n,headers:i(t.accessToken),...a?{body:a}:{}});if(s.status===401&&t.handleAuthFailure!==!1&&typeof t.accessToken==`string`&&t.accessToken.length>0){let r=await x();if(r?.accessToken&&r.accessToken!==t.accessToken){let t=await fetch(e,{method:n,headers:i(r.accessToken),...a?{body:a}:{}});if(t.ok)return o(t)}}if(!s.ok){let e=await s.text();t.handleAuthFailure!==!1&&await u(s.status);let n=y(s.status,e);throw new v(s.status,e,n)}return o(s)}async function C(e,t){return S(`${o.apiBaseUrl}/api/v1/platform/auth/${e}`,{handleAuthFailure:!1,method:`POST`,body:t})}async function w(e){return S(`${o.apiBaseUrl}/api/v1/platform/auth/refresh`,{handleAuthFailure:!1,method:`POST`,body:{refresh_token:e}})}async function T(e,t){await fetch(`${o.apiBaseUrl}/api/v1/platform/auth/sign-out`,{method:`POST`,headers:{"Content-Type":`application/json`,...t?{Authorization:`Bearer ${t}`}:{}},body:JSON.stringify(e?{refresh_token:e}:{})})}var E=`https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js`,D=null,O=15e3,k=`chazown.apple.signin.state`,A=`chazown.apple.signin.nonce`,j=`chazown.apple.signin.returnTo`;function M(e=32){let t=new Uint8Array(e);return crypto.getRandomValues(t),Array.from(t,e=>`0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz`[e%62]).join(``)}async function N(e){let t=new TextEncoder().encode(e),n=await crypto.subtle.digest(`SHA-256`,t);return Array.from(new Uint8Array(n)).map(e=>e.toString(16).padStart(2,`0`)).join(``)}function P(e){return typeof e!=`string`||!e.startsWith(`/`)||e.startsWith(`//`)?`/app`:e}function F(){return typeof window>`u`?Promise.reject(Error(`Apple sign-in is only available in the browser.`)):window.AppleID?.auth?Promise.resolve():D||(D=new Promise((e,t)=>
1{let n=document.querySelector(`script[src="${E}"]`);if(n){n.addEventListener(`load`,()=>e(),{once:!0}),n.addEventListener(`error`,()=>t(Error(`Failed to load Apple Sign-In.`)),{once:!0});return}let r=document.createElement(`script`);r.src=E,r.async=!0,r.defer=!0,r.onload=()=>e(),r.onerror=()=>t(Error(`Failed to load Apple Sign-In.`)),document.head.appendChild(r)}),D)}function I(){window.sessionStorage.removeItem(k),window.sessionStorage.removeItem(A),window.sessionStorage.removeItem(j)}async function L(e){if(typeof window>`u`)throw Error(`Apple sign-in is only available in the browser.`);await F();let t=window.AppleID?.auth;if(!t)throw Error(`Apple Sign-In SDK is unavailable.`);let n=M(32),r=await N(n),i=M(24);window.sessionStorage.setItem(k,i),window.sessionStorage.setItem(A,n),window.sessionStorage.setItem(j,P(e)),t.init({clientId:o.appleClientId,scope:`name email`,redirectURI:o.appleRedirectUri,state:i,nonce:r,usePopup:!1}),t.signIn(),await new Promise((e,t)=>{window.setTimeout(()=>{I(),t(Error(`Apple sign-in did not redirect. Please try again.`))},O)})}function R(){if(typeof window>`u`)throw Error(`Apple sign-in callback can only run in the browser.`);let e=window.location.hash.startsWith(`#`)?window.location.hash.slice(1):window.location.hash,t=new URLSearchParams(e),n=t.get(`error`);if(n)throw I(),Error(`Apple sign-in failed: ${n}`);let r=t.get(`id_token`),i=t.get(`state`),a=window.sessionStorage.getItem(k),o=window.sessionStorage.getItem(A),s=P(window.sessionStorage.getItem(j));if(!r?.trim())throw I(),Error(`Apple sign-in did not return an identity token.`);if(!i||!a||i!==a)throw I(),Error(`Apple sign-in state did not match. Please try again.`);if(!o)throw I(),Error(`Apple sign-in nonce was missing. Please try again.`);return I(),{idToken:r.trim(),nonce:o,returnTo:s}}var z=`https://accounts.google.com/o/oauth2/v2/auth`,B=`/auth/google/callback`,V=`chazown.google.signin.state`,H=`chazown.google.signin.returnTo`;function U(e=32){let t=new Uint8Array(e);return crypto.getRandomValues(t),Array.from(t,e=>`0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz`[e%62]).join(``)}function W(e){return typeof e!=`string`||!e.startsWith(`/`)?`/app`:e}function G({clientId:e,redirectUri:t,state:n,nonce:r}){return`${z}?${new URLSearchParams({client_id:e,redirect_uri:t,response_type:`id_token`,scope:`openid email profile`,nonce:r,state:n,prompt:`select_account`}).toString()}`}function K(e){if(typeof window>`u`)throw Error(`Google sign-in is only available in the browser.`);let t=U(24),n=U(32);window.sessionStorage.setItem(V,t),window.sessionStorage.setItem(H,W(e));let r=`${window.location.origin}${B}`,i=G({clientId:o.googleClientId,redirectUri:r,state:t,nonce:n});window.location.assign(i)}function q(){if(typeof window>`u`)throw Error(`Google sign-in callback can only run in the browser.`);let e=window.location.hash.startsWith(`#`)?window.location.hash.slice(1):window.location.hash,t=new URLSearchParams(e),n=t.get(`error`);if(n)throw J(),Error(`Google sign-in failed: ${n}`);let r=t.get(`id_token`),i=t.get(`state`),a=window.sessionStorage.getItem(V),o=W(window.sessionStorage.getItem(H));if(!r)throw J(),Error(`Google sign-in did not return an identity token.`);if(!i||!a||i!==a)throw J(),Error(`Google sign-in state did not match. Please try again.`);return J(),{idToken:r,returnTo:o}}function J(){window.sessionStorage.removeItem(V),window.sessionStorage.removeItem(H)}var Y=t(),X=(0,r.createContext)(null);function Z(e){try{let[,t]=e.split(`.`);if(!t)throw Error(`Missing JWT payload`);let n=t.replace(/-/g,`+`).replace(/_/g,`/`),r=n+`=`.repeat((4-n.length%4)%4),i=JSON.parse(window.atob(r));return{sub:typeof i.sub==`string`?i.sub:``,email:typeof i.email==`string`?i.email:void 0,name:typeof i.name==`string`?i.name:void 0,preferred_username:typeof i.preferred_username==`string`?i.preferred_username:void 0,is_admin:i.is_admin===!0}}catch{return{sub:``}}}function Q(e){return{access_token:e.accessToken,expired:g(e.accessTokenExpiresAt,0),profile:Z(e.accessToken)}}function $(e){return{accessToken:e.access_token,accessTokenExpiresAt:e.access_token_expires_at,refreshToken:e.refresh_token,refreshTokenExpiresAt:e.refresh_token_expires_at}}function ee({children:e}){let[t,n]=(0,r.useState)(!0),[i,a]=(0,r.useState)(null),[o,s]=(0,r.useState)(null),[c,l]=(0,r.useState)(null),u=(0,r.useRef)(null),d=(0,r.useCallback)(async()=>
1{if(typeof window>`u`){a(null),s(null),n(!1);return}try{let e=p();if(!e){a(null),s(null);return}if(!g(e.accessTokenExpiresAt)){s(e),a(Q(e));return}if(g(e.refreshTokenExpiresAt,0))h(),s(null),a(null);else{let t=$(await w(e.refreshToken));m(t),s(t),a(Q(t)),l(null)}}catch(e){h(),s(null),a(null),l(e instanceof Error?e.message:`Auth initialization failed.`)}finally{n(!1)}},[]);(0,r.useEffect)(()=>{d()},[d]);let f=(0,r.useCallback)(async()=>{if(typeof window>`u`)return;if(u.current){await u.current;return}let e=p();if(e&&g(e.accessTokenExpiresAt,45)){if(g(e.refreshTokenExpiresAt,0)){h(),s(null),a(null);return}u.current=(async()=>{try{let t=$(await w(e.refreshToken));m(t),s(t),a(Q(t)),l(null)}catch{}finally{u.current=null}})(),await u.current}},[]);(0,r.useEffect)(()=>{if(typeof window>`u`||!o)return;let e=Date.parse(o.accessTokenExpiresAt);if(Number.isNaN(e))return;let t=Math.max(0,e-Date.now()-6e4),n=window.setTimeout(()=>{f()},t);return()=>{window.clearTimeout(n)}},[f,o?.accessTokenExpiresAt]);let _=(0,r.useCallback)(e=>{let t=$(e);m(t),s(t),a(Q(t)),l(null)},[]),v=(0,r.useCallback)(e=>{typeof window>`u`||(l(null),K(e))},[]),y=(0,r.useCallback)(async()=>{let{idToken:e,returnTo:t}=q();return _(await C(`google`,{id_token:e})),t},[_]),b=(0,r.useCallback)(e=>typeof window>`u`?Promise.resolve():(l(null),L(e)),[]),x=(0,r.useCallback)(async()=>{let{idToken:e,nonce:t,returnTo:n}=R();return _(await C(`apple`,{id_token:e,nonce:t})),n},[_]),S=(0,r.useCallback)(e=>{v(e)},[v]),E=(0,r.useCallback)(async()=>{try{await T(o?.refreshToken??null,o?.accessToken??null)}finally{h(),s(null),a(null),l(null)}},[o?.accessToken,o?.refreshToken]),D=(0,r.useMemo)(()=>({error:c,isAuthenticated:!!(i&&!i.expired),isLoading:t,user:i,signIn:S,signInWithGoogle:v,signInWithApple:b,completeGoogleSignInFromCallback:y,completeAppleSignInFromCallback:x,signOut:E}),[x,y,c,t,S,b,v,E,i]);return(0,Y.jsx)(X.Provider,{value:D,children:e})}function te(){let e=(0,r.useContext)(X);if(!e)throw Error(`useAuth must be used within an AuthProvider.`);return e}export{h as a,l as c,S as i,o as l,te as n,g as o,v as r,p as s,ee as t};

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.