1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3352],{14799:(e,t,n)=>{n.d(t,{AH:()=>o,Ae:()=>i,DN:()=>l,Qz:()=>a});var r=n(59805);let i="/auth/account-restricted";function o(e){return"account_restricted"===e}function l(e){return(null==e?void 0:e.account_status)==="restricted"}function a(e){return e.includes("/auth/account-restricted")||(0,r.Jj)(e)}},42046:(e,t,n)=>{n.d(t,{cn:()=>o,l:()=>l});var r=n(87028),i=n(87169);function o(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return(0,i.QP)((0,r.$)(t))}function l(){return"undefined"!=typeof crypto&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})}},43352:(e,t,n)=>{n.d(t,{A4:()=>_,OJ:()=>y,As:()=>k});var r=n(79490),i=n(77066),o=n(46202),l=n(88313),a=n(34600);let u=["id","email","full_name","email_confirmed_at","phone","phone_confirmed_at","confirmed_at","role","user_metadata","app_metadata"];function s(e){return void 0===e?"undefined":JSON.stringify(function e(t){return Array.isArray(t)?t.map(e):t&&"object"==typeof t?Object.keys(t).sort().reduce((n,r)=>(n[r]=e(t[r]),n),{}):t}(e))}var c=n(66835),d=n(68301),f=n(59805),g=n(14799),p=n(87929),h=n(84093),m=n(70112);let v="xpeak_forced_logout_reason",_="xpeak_account_protection_pending",w=(0,i.createContext)(void 0);function y(e){let{children:t,onSignOut:n}=e,y=(0,o.rd)(),k=(0,o.a8)(),[x,b]=(0,i.useState)(null),[S,C]=(0,i.useState)(null),[I,A]=(0,i.useState)(!0),[E,D]=(0,i.useState)(null),T=(0,i.useRef)(null),U=(0,i.useRef)(null),R=(0,i.useRef)(null),W=(0,i.useRef)(function(){let e=new Map;function t(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Date.now();for(let[n,r]of e)null!=r.expiresAt&&t>r.expiresAt&&e.delete(n)}return{begin(n){t(),e.set(n.sid,{...n,expiresAt:null})},shouldSuppress(n){t();let r=e.get(n.sid);return!!r&&r.userId===n.userId&&r.sid===n.sid&&r.reason===n.reason},complete(n){t();let r=e.get(n);r&&e.set(n,{...r,expiresAt:Date.now()+3e4})},abort(n){t(),e.delete(n)}}}()),L=(0,i.useRef)(()=>{}),P=(0,i.useCallback)((e,t)=>{var r;let i=null==(r=U.current)?void 0:r.id;i&&t&&W.current.shouldSuppress({userId:i,sid:t,reason:e})||((0,c.Jg)(),localStorage.setItem(v,e),a.K_.disconnect(),(0,a.gf)({reason:"expired"}),U.current=null,R.current=null,b(null),C(null),D(e),null==n||n())},[n]);L.current=P;let J=(0,i.useMemo)(()=>(0,h.p)({getStatus:()=>a.K_.getStatus(),getAccessToken:a.iD,onRevoked:(e,t)=>L.current(e,t)}),[]),q=(0,i.useCallback)(()=>{localStorage.removeItem(v),D(null)},[]),j=(0,i.useCallback)(()=>{q(),sessionStorage.setItem(_,"1"),y.push("/auth/login?mode=protect-account")},[q,y]),K=(null==x?void 0:x.email_confirmed_at)!=null||!0===(0,l.g3)(null==x?void 0:x.email),M=(0,a.l2)(),N=()=>{U.current=null,R.current=null,b(null),C(null)},O=e=>{let t=function(e){let{previousUser:t,previousSession:n,nextUser:r,nextSession:i}=e,o=t&&t.id===r.id&&u.every(e=>s(t[e])===s(r[e]))?t:r;return n&&n.access_token===i.access_token&&n.refresh_token===i.refresh_token&&n.user===o?{user:o,session:n}:{user:o,session:{...i,user:o}}}({previousUser:U.current,previousSession:R.current,nextUser:e.user,nextSession:e.session});if(U.current=t.user,R.current=t.session,b(t.user),C(t.session),"1"===sessionStorage.getItem(_))return void y.replace("/auth/account-protection")},Z=async()=>{try{localStorage.removeItem("supabase.auth.token"),localStorage.removeItem("sb-access-token"),localStorage.removeItem("sb-refresh-token"),(0,a.gf)(),(0,c.Jg)(),T.current&&(clearInterval(T.current),T.current=null),N(),A(!1),console.log("Stale authentication data cleared")}catch(e){console.error("Error clearing stale auth:",e)}},F=async(e,t)=>{for(let o=1;o<=4;o++)try{console.log("[AuthContext] Calling getCurrentUser API...");let n=await a.authClient.getCurrentUser({accessToken:e,bustCache:null==t?void 0:t.bustCache});if(console.log("[AuthContext] getCurrentUser response:",n),null==n?void 0:n.user){let t=n.user,r={id:t.id,email:t.email,email_confirmed_at:t.email_confirmed_at,user_metadata:t.user_metadata||{},app_metadata:t.app_metadata||{},aud:t.aud||"authenticated",created_at:t.created_at,updated_at:t.updated_at,phone:t.phone,phone_confirmed_at:t.phone_confirmed_at,confirmed_at:t.confirmed_at,last_sign_in_at:t.last_sign_in_at,role:t.role},i=(0,a.ve)(),o={access_token:e,refresh_token:i||"",expires_in:3600,expires_at:Math.floor(Date.now()/1e3)+3600,token_type:"bearer",user:r};return console.log("[AuthContext] Token verified successfully"),{user:r,session:o}}console.warn("[AuthContext] getCurrentUser returned no user data");break}catch(t){var n,r,i;let e=503===(null==(n=t.response)?void 0:n.status);if(e&&o<4){let e=400*o;console.warn("[AuthContext] getCurrentUser returned 503 (gateway may be waiting for core-service); retry ".concat(o,"/").concat(4," in ").concat(e,"ms")),await new Promise(t=>setTimeout(t,e));continue}console.error("[AuthContext] Failed to verify token via API:",t.message,null==(r=t.response)?void 0:r.status,null==(i=t.response)?void 0:i.data),e&&console.warn("[AuthContext] Still 503 after retries. Ensure core-service is running (TCP 3001), JWT/Supabase env matches server, and restart api-gateway after backend is up.");break}return null},V=async e=>{try{let t=(0,a.iD)();if(!t){N(),A(!1);return}console.log("[AuthContext] Verifying token...");let n=await F(t,{bustCache:null==e?void 0:e.bustCache});if(n){console.log("[AuthContext] Token verified successfully, user:",n.user.email),O(n),A(!1),T.current&&clearInterval(T.current),T.current=setInterval(async()=>{let e=(0,a.ve)();if(e)try{let t=await a.authClient.refreshToken({refresh_token:e});if(null==t?void 0:t.access_token){let e=await F(t.access_token,{bustCache:!0});e&&O(e)}}catch(e){var t;(null==(t=e.response)?void 0:t.status)!==401&&"Session expired. Please log in again."!==e.message&&console.error("Token refresh failed:",e),await Z()}},3e6);return}console.warn("[AuthContext] Token verification failed, but keeping token for retry"),N(),A(!1)}catch(e){var t,n;console.error("[AuthContext] Error refreshing auth state:",e.message,e),(null==e||null==(t=e.response)?void 0:t.status)===401||(null==e||null==(n=e.response)?void 0:n.status)===403?(console.log("[AuthContext] Authentication error, clearing tokens"),(0,a.gf)()):console.warn("[AuthContext] Non-auth error, keeping token:",e.message),N(),A(!1)}},$=async e=>{var t;let{email:n,newPassword:r}=e,i=null==(t=U.current)?void 0:t.id,o=(0,h.q)((0,a.iD)()),l=W.current,u=i&&o?{userId:i,sid:o,reason:"password_changed"}:null;return(0,p.V)({beginExpectedRevocation:()=>{u&&l.begin(u)},completeExpectedRevocation:()=>{o&&l.complete(o)},abortExpectedRevocation:()=>{o&&l.abort(o)},changePassword:async()=>{await a.apiClient.put("/api/v1/auth/change-password",{new_password:r})},loginAndInstallSession:async()=>{var e,t;let i=await a.apiClient.post("/api/v1/auth/login",{email:n,password:r});if(!(null==(e=i.data)?void 0:e.access_token)||!(null==(t=i.data)?void 0:t.refresh_token))throw Error("Login did not return a complete session");(0,a.ki)(i.data.access_token),(0,a.fE)(i.data.refresh_token),q(),window.dispatchEvent(new Event("tokenUpdated")),await V({bustCache:!0})}})};(0,i.useEffect)(()=>{let e=localStorage.getItem(v);e&&D(e)},[]),(0,i.useEffect)(()=>{V();let e=e=>{("xpeak_access_token"===e.key||"xpeak_refresh_token"===e.key)&&
1(console.log("[AuthContext] Token storage changed, refreshing auth state"),V())},t=()=>{console.log("[AuthContext] Token update event received, refreshing auth state"),V({bustCache:!0})};return window.addEventListener("storage",e),window.addEventListener("tokenUpdated",t),()=>{window.removeEventListener("storage",e),window.removeEventListener("tokenUpdated",t),T.current&&(clearInterval(T.current),T.current=null)}},[]),(0,i.useEffect)(()=>{if(!x||!S)return void a.K_.disconnect();let e=(0,h.q)((0,a.iD)());e&&J.onLogin(e);let t=a.K_.onRevoked(e=>{let t=(0,h.q)((0,a.iD)());t&&e.target_sid===t&&L.current(e.reason,e.target_sid)}),n=a.K_.onConnected(()=>{J.check({force:!0})}),r=a.K_.onReconnected(()=>{J.check({force:!0})}),i=a.K_.onDisconnected(()=>{J.markSocketDisconnected()});J.check({force:!0});let o=()=>{let e="hidden"===document.visibilityState?"hidden":"visible";J.onVisibilityChange(e,Date.now())};return document.addEventListener("visibilitychange",o),()=>{t(),n(),r(),i(),document.removeEventListener("visibilitychange",o)}},[x,S,J]),(0,i.useEffect)(()=>{if(I||!x)return;if("1"===sessionStorage.getItem(_)){k.includes("/auth/account-protection")||y.replace("/auth/account-protection");return}if((0,g.Qz)(k)||k.includes("/auth/login")||k.includes("/auth/signup"))return;let e=!1;return(async()=>{try{let t=await a.authClient.getAccountStatus();if(e)return;
1if("pending_deletion"===t.account_status)return void y.replace(f.J3);"restricted"===t.account_status&&y.replace(g.Ae)}catch(e){}})(),()=>{e=!0}},[x,I,y,k]);let G=async()=>{A(!0);try{T.current&&(clearInterval(T.current),T.current=null);try{await Promise.race([a.authClient.logout().then(()=>void 0),new Promise(e=>{setTimeout(e,m.ZU)})])}catch(e){console.warn("API logout failed (proceeding with local cleanup):",e.message)}}catch(e){console.warn("Error during sign out (proceeding with local cleanup):",e.message)}finally{(0,d.YE)(),(0,a.oG)(),(0,a.gf)(),(0,c.Jg)(),N(),n?n():(0,m.FP)()}},z=async()=>{(0,a.oG)(),window.dispatchEvent(new Event("tokenUpdated"))};return(0,r.jsx)(w.Provider,{value:{user:x,session:S,loading:I,isEmailVerified:K,isImpersonating:M,forcedLogoutReason:E,acknowledgeForcedLogout:q,forceSessionLogout:P,protectAccount:j,signOut:G,endImpersonation:z,clearStaleAuth:Z,refreshAuthState:V,rotatePasswordSession:$},children:t})}function k(){let e=(0,i.useContext)(w);if(void 0===e)throw Error("useAuth must be used within an AuthProvider");return e}},59805:(e,t,n)=>{n.d(t,{J3:()=>i,Jj:()=>s,R$:()=>u,T9:()=>a,hh:()=>m,i$:()=>o,jX:()=>p,kq:()=>g,tU:()=>f,tb:()=>h,tn:()=>d,v9:()=>c,x9:()=>v,xp:()=>l});var r=n(34600);let i="/auth/account-deletion-pending";function o(e){return"pending"!==e.status?{pending:!1}
1:{pending:!0,pendingDeletionUntil:e.pending_deletion_until,remainingSeconds:e.remaining_seconds,canCancelDeletion:e.can_cancel}}function l(e){return null==e||e<=0?null:Math.max(1,Math.ceil(e/86400))}async function a(){try{let e=await r.authClient.getAccountDeletionStatus();return o(e)}catch(e){return{pending:!1}}}async function u(e,t){var n;let r=(n=null==t?void 0:t.authResponse)&&(null==n?void 0:n.account_status)==="pending_deletion"?{pending:!0,pendingDeletionUntil:n.pending_deletion_until,remainingSeconds:n.remaining_seconds,canCancelDeletion:n.can_cancel_deletion}:{pending:!1};return!!(r.pending?r:await a()).pending&&(((null==t?void 0:t.replace)?e.replace.bind(e):e.push.bind(e))(i),!0)}function s(e){return e.includes("/auth/account-deletion-pending")||e.includes("/auth/account-deletion-submitted")}let c=7;function d(e){var t,n,r;let i=function(e){let t=(null!=e?e:"").replace(/\D/g,"");return t.startsWith("86")&&t.length>11?t.slice(2):t.length>=11?t.slice(-11):t}(null!=(r=null!=(n=null==e||null==(t=e.user_metadata)?void 0:t.phone)?n:null==e?void 0:e.phone)?r:void 0);return i.length>=11?i:null}function f(e,t){if(!t)return!1;let n=e.replace(/\D/g,"");return n.length>=11&&n===t}function g(e){var t,n;if(!e||!(n=e.email)||n.endsWith("@phone.xpeak.ai")||n.endsWith("@wechat.xpeak.ai"))return null;let r=(null!=(t=e.email)?t:"").trim();return r.length>0?r:null}function p(e,t){return!!t&&e.trim().toLowerCase()===t.trim().toLowerCase()}function h(e,t){try{return new Intl.DateTimeFormat(t,{dateStyle:"long",timeStyle:"short"}).format(new Date(e))}catch(t){return e}}function m(){return["notice1","notice2","notice3","notice4"]}function v(e,t){return e.includes(t)}},66835:(e,t,n)=>{n.d(t,{Jg:()=>p,L8:()=>g,bK:()=>d,hT:()=>c,po:()=>f});var r=n(88313);let i="xpeak_bind_email_signup_intent",o="xpeak_bind_email_prompt_pending";function l(){return"undefined"!=typeof sessionStorage}function a(e){if(!l())return null;try{var t;let n=sessionStorage.getItem(e);if(!n)return null;let r=JSON.parse(n);if(r&&"object"==typeof r&&"string"==typeof r.userId&&r.userId&&(t=r.source,"wechat"===t||"sms"===t))return{userId:r.userId,source:r.source};return null}catch(e){return null}}function u(e,t){if(l())try{sessionStorage.setItem(e,JSON.stringify(t))}catch(e){}}function s(e){if(l())try{sessionStorage.removeItem(e)}catch(e){}}function c(e,t){u(i,{userId:e,source:t})}function d(e){if(!e.id||e.email&&!(0,r.g3)(e.email))return!1;var t=e.id;let n=a(i);return!!n&&n.userId===t&&(s(i),u(o,{userId:n.userId,source:n.source}),!0)}function f(e){if(!e.userId||!(0,r.g3)(e.email))return!1;let t=a(o);return(null==t?void 0:t.userId)===e.userId}function g(e){if(e){let t=a(o);if(!t||t.userId!==e)return}s(o)}function p(){s(i),s(o)}},68301:(e,t,n)=>{n.d(t,{B0:()=>u,Ky:()=>_,YE:()=>h,kj:()=>v,yC:()=>s,yy:()=>m});var r=n(74088),i=n(42046),o=n(88313);let l="xpeak-salesmartly-guest-id",a=["student","tutor"];function u(e){let t=new Set(e.map(e=>e.toLowerCase()));return a.filter(e=>t.has(e))}async function s(){let{billingClient:e}=await Promise.resolve().then(n.bind(n,34600)),[t,r]=await Promise.all([e.getSubscription(),e.getCredits()]);return function(e){var t,n,r;let i=(null==(t=e.subscription)?void 0:t.status)==="active",o=null!=(r=null==(n=e.credits)?void 0:n.some(e=>{var t;return"trial"===e.credit_type||"trial-lesson"===e.source||(null==(t=e.metadata)?void 0:t.source)==="trial-lesson"}))&&r;return{subscription:e.subscription,hasTrialCredits:o,trialEligible:!i&&!o}}({subscription:t.subscription,credits:r.credits})}function c(e,t,n){var i,l,a;let s=null!=(l=e.user_metadata)?l:{},c="string"==typeof s.display_name&&s.display_name.trim()||"string"==typeof s.full_name&&s.full_name.trim()||(0,o.vd)(e)||e.phone||(e.email&&!(0,o.g3)(e.email)?null==(i=e.email.split("@")[0])?void 0:i.trim():"")||"User",d=e.email&&!(0,o.g3)(e.email)?e.email:void 0,f=(0,o.vd)(e)||e.phone||("string"==typeof s.phone&&s.phone.trim()?s.phone:void 0),g=null!=(a=n?function(e){let t=u(e.roles);if(0===t.length)return;let n=["Role: ".concat(t.join(", "))];if(t.includes("student")&&e.billing){var r;n.push(function(e){if(!e)return"Subscription: none";let t=e.plan_name?" (".concat(e.plan_name,")"):"";return"Subscription: ".concat(e.status).concat(t)}(e.billing.subscription)),n.push((r=e.billing).hasTrialCredits?"Trial: purchased":r.trialEligible?"Trial: eligible":"Trial: not eligible")}return n.join("\n")}(n):void 0)?a:"Auth: logged in";return{user_id:e.id,user_name:c,language:(0,r.Tl)(t),label_names:["WEB"],description:g,...f?{phone:f}:{},...d?{email:d}:{}}}function d(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];if(window.ssq)return void window.ssq.push(e,...n);f.push([e,...n]),function e(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;if(function(){if(!window.ssq)return!1;for(let e of f.splice(0))window.ssq.push(...e);return!0}()){g=null;return}if(t>=120){g=null,console.warn("[SaleSmartly] ssq unavailable;
1 dropped pending commands"),f.length=0;return}null==g&&(g=setTimeout(()=>{g=null,e(t+1)},50))}()}let f=[],g=null;function p(e){d("setLoginInfo",e)}function h(){d("clearUser")}function m(e,t,n){if(e)return void p(c(e,t,n));p({user_id:function(){let e=localStorage.getItem(l);if(e)return e;let t="guest_".concat((0,i.l)());return localStorage.setItem(l,t),t}(),user_name:"Guest",language:(0,r.Tl)(t),label_names:["WEB"],description:"Auth: not logged in"})}function v(e,t){p(c(e,t))}function _(e,t,n){p(c(e,t,n))}},70112:(e,t,n)=>{function r(e){return e.map(e=>e.toLowerCase()).includes("tutor")?"/tutor":"/student/dashboard"}function i(e){var t;let n=((null!=(t=e.split(/[?#]/)[0])?t:e).replace(/^\/[a-z]{2}(?:-[A-Z]{2})?(?=\/|$)/,"")||"/").replace(/\/$/,"")||"/";return"/"===n||"/student/dashboard"===n}function o(e){return e?"loading":"form"}n.d(t,{C3:()=>i,EN:()=>r,FP:()=>g,Gv:()=>d,ZR:()=>s,ZU:()=>f,bZ:()=>o,on:()=>c,qO:()=>u});let l="xpeak_post_login_return_url";function a(e){if(!(null==e?void 0:e.startsWith("/"))||e.startsWith("//"))return null;try{let t=new URL(e,window.location.origin);return t.origin===window.location.origin?"".concat(t.pathname).concat(t.search).concat(t.hash):null}catch(e){return null}}function u(e){let t=a(e);t&&sessionStorage.setItem(l,t)}function s(){var e;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"/",n=sessionStorage.getItem(l);return sessionStorage.removeItem(l),null!=(e=a(n))?e:t}function c(e){window.location.assign(null!=e?e:s("/"))}function d(e,t){c(function(e,t,n){let o=r(e);return t&&!i(t)?t:"/tutor"===o?"/tutor":(null==n?void 0:n.isFirstTime)?"/student/onboarding":"/student/dashboard"}(e,s("/"),t))}let f=1500;function g(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"/auth/login";window.location.assign(e)}},84093:(e,t,n)=>{function r(e){if(!e)return null;try{var t;let n=null==(t=e.split(".")[1])?void 0:t.replace(/-/g,"+").replace(/_/g,"/");if(!n)return null;let r=n.padEnd(n.length+(4-n.length%4)%4,"="),i=JSON.parse(atob(r));return"string"==typeof i.sid?i.sid:null}catch(e){return null}}function i(e){let t=new Map,n=null,i=null,o=null,l="visible",a=!1;function u(o){var l;if(n)return n;let a=null!=(l=r(e.getAccessToken()))?l:i;if(!a)return Promise.resolve();if(!o.force){let e=t.get(a);if(null!=e&&Date.now()-e<3e5)return Promise.resolve()}return n=(async()=>{try{let n=await e.getStatus();if(t.set(a,Date.now()),"revoked"===n.status){var r;e.onRevoked(null!=(r=n.revoked_reason)?r:"unknown",a)}}catch(e){}finally{n=null}})()}return{check:u,onVisibilityChange:function(e,t){if(l=e,"hidden"===e){o=t;return}let n=(null!=o?t-o:0)>3e5||a;if(a=!1,o=null,n)return u({force:!0})},markSocketDisconnected:function(){"hidden"===l&&(a=!0)},onLogin:function(e){i=e},getLastSessionCheckAt:function(e){return t.get(e)}}}n.d(t,{p:()=>i,q:()=>r})},87929:(e,t,n)=>{function r(e){var t;let n=null==e||null==(t=e.response)?void 0:t.status;return"number"==typeof n&&n>=400&&n<500}async function i(e){e.beginExpectedRevocation();try{await e.changePassword()}catch(t){if(r(t))throw e.abortExpectedRevocation(),t;try{return await e.loginAndInstallSession(),e.completeExpectedRevocation(),{ok:!0}}catch(t){return e.abortExpectedRevocation(),{ok:!1,requiresManualLogin:!0}}}try{return await e.loginAndInstallSession(),e.completeExpectedRevocation(),{ok:!0}}catch(t){return e.abortExpectedRevocation(),{ok:!1,requiresManualLogin:!0}}}n.d(t,{J:()=>r,V:()=>i})},88313:(e,t,n)=>{function r(e){return!!((null==e?void 0:e.startsWith("sms_"))&&(null==e?void 0:e.endsWith("@xpeak.sms"))||(null==e?void 0:e.startsWith("wechat_"))&&(null==e?void 0:e.endsWith("@xpeak.wechat")))}function i(e){var t,n,r,i,o,l;let a=(null==(n=e.user_metadata)||null==(t=n.phone)?void 0:t.trim())||(null==(r=e.phone)?void 0:r.trim())||"";if(a)return a;let u=null!=(l=null==(o=e.email)||null==(i=o.split("@")[0])?void 0:i.replace(/^sms_/,""))?l:"";return u?"+".concat(u):""}function o(e){var t;return(null==e||null==(t=e.email)?void 0:t.startsWith("sms_"))&&e.email.endsWith("@xpeak.sms")?i(e):""}function l(e){var t,n;if(!e)return"";if((null==(t=e.email)?void 0:t.startsWith("sms_"))&&e.email.endsWith("@xpeak.sms")){let t=i(e);return(t?function(e){let t=e.trim();if(!t)return null;let n=t.replace(/\D/g,"");if(n.length<7)return t;if(t.startsWith("+")&&n.startsWith("86")){let e=n.slice(2);if(e.length>=7)return"+86".concat(e.slice(0,3),"***").concat(e.slice(-4))}if(11===n.length&&n.startsWith("1"))return"".concat(n.slice(0,3),"***").concat(n.slice(-4));if(t.startsWith("+")){let e=n.length>10?n.slice(-10):n;if(e.length>=7){var r,i;let n=null!=(i=null==(r=t.match(/^\+\d{1,3}/))?void 0:r[0])?i:"+";return"".concat(n).concat(e.slice(0,3),"***").concat(e.slice(-4))}}return"".concat(n.slice(0,3),"***").concat(n.slice(-4))}(t):null)||e.email||""}return r(e.email)?"":null!=(n=e.email)?n:""}function a(e){var t,n,i;let o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"User";if(!e)return o;let a=null!=(n=e.user_metadata)?n:{},u="string"==typeof a.display_name?a.display_name.trim():"",s="string"==typeof a.full_name?a.full_name.trim():"";if(u)return u;if(s)return s;if((null==(t=e.email)?void 0:t.startsWith("sms_"))&&e.email.endsWith("@xpeak.sms"))return l(e)||o;if(e.email&&!r(e.email)){let t=null==(i=e.email.split("@")[0])?void 0:i.trim();if(t)return t}return o}n.d(t,{ZE:()=>a,g3:()=>r,g8:()=>l,vd:()=>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.