PageSourceSearch

https://xpeak.ai/_next/static/chunks/1221-69849371107856bb.js

js xpeak.ai collected 2026-10-05 13:22:03 UTC 126,065 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1221],{22768:(e,t,a)=>{let n;a.d(t,{PG:()=>R,uE:()=>x,oG:()=>w,clearTokens:()=>_,iD:()=>b,ve:()=>E,l2:()=>h,AK:()=>c,ki:()=>S,ne:()=>f,fE:()=>k,NN:()=>C});var r=a(18001),i=a(35373),o=a(60536),s=a(37811);let l="xpeak_device_installation_id";async function u(e){if(!(e&&(e.includes("/auth/register")||e.includes("/auth/login")||e.includes("/auth/email/login-or-register")||e.includes("/auth/oauth/google/callback")||e.includes("/auth/apple")||e.includes("/auth/sms/login")||e.includes("/auth/wechat/app-login"))||e&&/\/lessons\/[^/?#]+\/join(?:\?|#|$)/.test(e))||"undefined"==typeof navigator)return;let t=navigator.userAgent||"",r=t.includes("Mac OS")||t.includes("macOS")?"macOS":t.includes("Windows")?"Windows":t.includes("Android")?"Android":t.includes("iPhone")||t.includes("iPad")?"iOS":void 0,i=t.includes("Chrome")?"Chrome":t.includes("Safari")?"Safari":t.includes("Firefox")?"Firefox":void 0,o=JSON.stringify({platform:"web",clientApp:"xpeak-web",appVersion:s.env.NEXT_PUBLIC_APP_VERSION,timezone:Intl.DateTimeFormat().resolvedOptions().timeZone,locale:navigator.language,browserName:i,osName:r,deviceLabel:[i,r].filter(Boolean).join(" \xb7 ")||void 0,deviceFingerprint:await (null!=n?n:n=(async()=>{try{let e=await a.e(1309).then(a.bind(a,91309)),t=await e.load();return(await t.get()).visitorId}catch(e){return function(){var e,t,a;let n=window.localStorage.getItem(l);if(n)return n;let r=null!=(a=null==(t=window.crypto)||null==(e=t.randomUUID)?void 0:e.call(t))?a:"".concat(Date.now(),"-").concat(Math.random());return window.localStorage.setItem(l,r),r}()}})())});if(!(o.length>2048))return btoa(unescape(encodeURIComponent(o))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function c(){try{var e;if(window.ReactNativeWebView)return window.location.origin;let t=null==(e=window.localStorage.getItem("xpeak_api_base_url"))?void 0:e.trim();if(t)return t.replace(/\/+$/,"")}catch(e){}return"https://xpeak.ai"}let d="xpeak_access_token",p="xpeak_refresh_token";function g(e){let t=window.ReactNativeWebView;null==t||t.postMessage(JSON.stringify(e))}function v(){g({type:"AUTH_TOKENS",accessToken:b(),refreshToken:E()})}let m="xpeak_impersonation_access_token",y="xpeak_impersonation_refresh_token",f=(e,t)=>{sessionStorage.setItem(m,e),sessionStorage.setItem(y,t),T()},h=()=>!!sessionStorage.getItem(m),w=()=>{sessionStorage.removeItem(m),sessionStorage.removeItem(y),T()},b=()=>sessionStorage.getItem(m)||localStorage.getItem(d),E=()=>sessionStorage.getItem(y)||localStorage.getItem(p),S=e=>{h()?sessionStorage.setItem(m,e):localStorage.setItem(d,e),T(),v()},k=e=>{h()?sessionStorage.setItem(y,e):localStorage.setItem(p,e),v()},_=e=>{if(localStorage.removeItem(d),localStorage.removeItem(p),sessionStorage.removeItem(m),sessionStorage.removeItem(y),T(),(null==e?void 0:e.notifyNative)!==!1){var t;g({type:"expired"===(null!=(t=null==e?void 0:e.reason)?t:"logout")?"AUTH_EXPIRED":"AUTH_CLEAR"})}},I=null,A=0,P=new Set;function C(e){return P.add(e),()=>{P.delete(e)}}function T(){A+=1,(0,i.ss)(),(0,o.Ck)(),P.forEach(e=>e())}let x=(()=>{let e=r.A.create({timeout:3e4,headers:{"Content-Type":"application/json"}});return e.interceptors.request.use(async e=>{if(e.baseURL=c(),e.data instanceof FormData&&e.headers){let t=e.headers;"function"==typeof t.delete?t.delete("Content-Type"):delete t["Content-Type"]}if(e.headers){let t=e.headers,a="function"==typeof t.get?t.get("Authorization"):t.Authorization,n=a?null:b();n&&(e.headers.Authorization="Bearer ".concat(n)),(a||n)&&function(e){var t;if((null==(t=e.method)?void 0:t.toLowerCase())!=="get")return;let a=A;if(e.params instanceof URLSearchParams)return e.params.set("_sg",String(a));if(e.params&&"object"==typeof e.params){e.params={...e.params,_sg:a};return}e.params={_sg:a}}(e)}let t=await u(e.url);return t&&e.headers&&(e.headers["X-Xpeak-Device-Context"]=t),e},e=>Promise.reject(e)),e.interceptors.response.use(e=>e,async t=>{var a,n,i,o,s,l;let u=t.config,d=(null==(a=u.url)?void 0:a.includes("/auth/login"))||(null==(n=u.url)?void 0:n.includes("/auth/register"))||(null==(i=u.url)?void 0:i.includes("/auth/refresh"))||(null==(o=u.url)?void 0:o.includes("/auth/sms/send-code"))||(null==(s=u.url)?void 0:s.includes("/auth/sms/login"));if((null==(l=t.response)?void 0:l.status)===401&&!u._retry&&!d){u._retry=!0;let a=E();if(!a)return _({reason:"expired"}),Promise.reject(t);try{if(I){let t=await I;return u.headers&&(u.headers.Authorization="Bearer ".concat(t)),e(u)}I=(async()=>{try{let{access_token:e,refresh_token:t}=(await r.A.post("".concat(c(),"/api/v1/auth/refresh"),{refresh_token:a})).data;return S(e),t&&k(t),e}finally{I=null}})();let t=await I;return u.headers&&(u.headers.Authorization="Bearer ".concat(t)),e(u)}catch(e){return I=null,_({reason:"expired"}),window.ReactNativeWebView||(window.location.href="/auth/login"),Promise.reject(e)}}return Promise.reject(t)}),e})();function R(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:h();return"".concat(t?"imp":"loc",":").concat(e.length,":").concat(e.slice(-16))}(0,i.x2)(function(){let e=h(),t=b();return t?"".concat(R(t,e),":sg").concat(A):"".concat(e?"imp:none":"none",":sg").concat(A)})},34600:(e,t,a)=>{a.d(t,{Ce:()=>e4,ko:()=>e3,u6:()=>ea,Xf:()=>et,Zd:()=>$,Ts:()=>tP,JA:()=>eD,Gi:()=>eV,jg:()=>eF,_w:()=>eq,u8:()=>eB,vs:()=>ej,XO:()=>eO,t7:()=>eW,qJ:()=>ee,kS:()=>tD,apiClient:()=>n.uE,vq:()=>B,Nq:()=>e2,Hm:()=>K,authClient:()=>_,billingClient:()=>M,EE:()=>tI,o5:()=>ta,G4:()=>ew,oG:()=>n.oG,gf:()=>n.clearTokens,PS:()=>e8,tn:()=>er,Ax:()=>eZ,iD:()=>n.iD,hm:()=>y,$e:()=>S,EN:()=>eK,ve:()=>n.ve,Co:()=>tf,eM:()=>ty,hS:()=>f,HY:()=>E,ig:()=>eh,l2:()=>n.l2,TX:()=>w,c8:()=>b,qN:()=>eN,lessonClient:()=>eb,X6:()=>tO,C3:()=>tN,hl:()=>tz,__:()=>tx,aY:()=>tc,jo:()=>e6,rO:()=>eg,$i:()=>ef,mI:()=>ey,av:()=>e$,x1:()=>tC,Oh:()=>G,Qp:()=>eY,lT:()=>tV,d_:()=>eJ,recordingClient:()=>tS,nW:()=>tk,yp:()=>e7,Hd:()=>tY,XY:()=>W,AK:()=>n.AK,p1:()=>eX,$I:()=>X,GC:()=>eQ,CL:()=>e0,oH:()=>tR,K_:()=>U,ki:()=>n.ki,ne:()=>n.ne,fE:()=>n.fE,Yc:()=>tQ,Q1:()=>tX,lq:()=>tW,studentClient:()=>tp,Lw:()=>tg,cM:()=>t_,fJ:()=>tL,oO:()=>j,Aq:()=>tT,UY:()=>tA,So:()=>ti,zj:()=>tl,IU:()=>eH,XH:()=>ts,LB:()=>to,RL:()=>tu,PT:()=>v,HJ:()=>tm,PU:()=>tF,bF:()=>tq});var n=a(22768),r=a(17588);function i(e,t){let a=0,n=0;return(r,i)=>{if(!t)return;let o=e>0?e:null!=i?i:0;if(o<=0)return;let s=Math.min(Math.max(r,a),o);a=s,n=Math.max(n,Math.min(100,s/o*100)),t({bytesUploaded:s,bytesTotal:o,percentage:n})}}function o(e){return e>6291456}async function s(e){return(await n.uE.post("/api/v1/upload-sessions",e)).data}async function l(e){return(await n.uE.post("/api/v1/upload-sessions/complete",e)).data}async function u(e,t){let a=await s({purpose:e.purpose,fileName:e.fileName,fileSize:e.fileSize,contentType:e.contentType,context:e.context});if("tus-resumable"!==a.strategy||!a.completionToken)throw Error("Upload session did not return resumable upload instructions");return await function(e,t,a){if(!t.upload)return Promise.reject(Error("TUS upload instructions are missing"));let n=t.upload,o=i(e.size,a);return new Promise((t,a)=>{let i=new r._O(e,{endpoint:n.endpoint,retryDelays:[0,3e3,5e3,1e4,2e4],headers:n.headers,uploadDataDuringCreation:!0,removeFingerprintOnSuccess:!0,metadata:n.metadata,chunkSize:n.chunkSize,onError:a,onProgress:(e,t)=>{o(e,t)},onSuccess:()=>t()});i.findPreviousUploads().then(e=>{e.length>0&&i.resumeFromPreviousUpload(e[0]),i.start()})})}(e.file,a,t),l({objectPath:a.objectPath,fileSize:e.fileSize,completionToken:a.completionToken})}var c=a(92015),d=a(77066);
1class p extends Error{constructor(e,t,a){super(e),this.status=t,this.data=a,this.name="ApiError"}}function g(e){if(e&&"object"==typeof e&&"message"in e){let t=e.message;return"string"==typeof t?t:void 0}}function v(){let[e,t]=(0,d.useState)(null),[a,n]=(0,d.useState)(!1),[r,i]=(0,d.useState)(null);return{data:e,loading:a,error:r,execute:(0,d.useCallback)(async e=>{n(!0),i(null);try{let a=await e(),n=a&&"object"==typeof a&&"data"in a&&!("invoices"in a)?a.data:a;return t(n),n}catch(t){let e;try{var a,r,o,s,l,u;if(t instanceof c.pe){let n=(null==(a=t.response)?void 0:a.status)||0,i=g(null==(r=t.response)?void 0:r.data)||t.message||"An error occurred";e=new p(i,n,null==(o=t.response)?void 0:o.data)}else if(null!=t&&"object"==typeof t&&"isAxiosError"in t&&!0===t.isAxiosError){let a=(null==(s=t.response)?void 0:s.status)||0,n=g(null==(l=t.response)?void 0:l.data)||t.message||"An error occurred";e=new p(n,a,null==(u=t.response)?void 0:u.data)}else if(t instanceof Error)e=new p(t.message||"An error occurred",0);else if(null!=t&&"object"==typeof t){let a=("string"==typeof t.message?t.message:null)||("string"==typeof t.error?t.error:null)||String(t)||"An error occurred",n=("number"==typeof t.status?t.status:null)||("number"==typeof t.statusCode?t.statusCode:null)||0;e=new p(a,n,t)}else{let a="string"==typeof t?t:"An unknown error occurred";e=new p(a,0)}}catch(t){console.error("Error in error handling:",t),e=new p("An unexpected error occurred",0)}throw i(e),e}finally{n(!1)}},[]),reset:(0,d.useCallback)(()=>{t(null),i(null),n(!1)},[])}}function m(e){if("string"==typeof e&&e.trim())return e.trim();if(Array.isArray(e)){let t=e.filter(e=>"string"==typeof e&&e.trim().length>0);if(t.length>0)return t.join(", ")}return null}function y(e){var t,a;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"An error occurred";if(e instanceof p)return null!=(t=m(e.message))?t:n;if(e instanceof c.pe){let t=null==(a=e.response)?void 0:a.data;if(t&&"object"==typeof t&&"message"in t){let e=m(t.message);if(e)return e}if(e.message&&!/^Request failed with status code \d+$/i.test(e.message))return e.message}return e instanceof Error&&e.message?e.message:n}function f(e){if(e instanceof p)return h(e.status,e.message);if(e instanceof c.pe){var t;return h((null==(t=e.response)?void 0:t.status)||0,y(e,e.message||"An error occurred"))}return e instanceof Error&&e.message||"An unexpected error occurred"}function h(e,t){switch(e){case 400:return t||"Invalid request. Please check your input.";case 401:return"Please sign in again.";case 403:return"You do not have permission to access this.";case 404:return"This resource was not found.";case 409:return"This change conflicts with existing data.";case 422:return t||"Validation failed. Please check your input.";case 429:return"Too many requests. Please try again later.";case 500:return"Something went wrong. Please try again later.";case 502:return"Gateway error. Please try again later.";case 503:return"Service is temporarily unavailable. Please try again later.";case 504:return"The request timed out. Please try again later.";default:return t||"An unexpected error occurred"}}function w(e){return e instanceof c.pe&&!e.response}function b(e){return e instanceof c.pe&&("ECONNABORTED"===e.code||e.message.includes("timeout"))}function E(e){if(e instanceof p||e instanceof c.pe){var t;let a=e instanceof p?e.status:null==(t=e.response)?void 0:t.status;return 401===a||403===a}return!1}function S(e){if(e instanceof p)return{message:e.message,status:e.status,data:e.data};if(e instanceof c.pe){var t,a;return{message:e.message,status:null==(t=e.response)?void 0:t.status,code:e.code,data:null==(a=e.response)?void 0:a.data}}return e instanceof Error?{message:e.message}:{message:"Unknown error"}}var k=a(35373);let _={async register(e){try{let t=await n.uE.post("/api/v1/auth/register",e);return t.data.access_token&&((0,n.ki)(t.data.access_token),(0,n.fE)(t.data.refresh_token)),t.data}catch(e){var t,a;if("ECONNREFUSED"===e.code||(null==(t=e.message)?void 0:t.includes("Connection closed"))||(null==(a=e.message)?void 0:a.includes("Network Error")))throw Error("Cannot connect to API server at ".concat("https://xpeak.ai",". Please ensure the API Gateway is running on port 3000."));throw e}},async login(e){try{if(!e.email||!e.password)throw Error("Email and password are required");let t={email:e.email.trim(),password:e.password},a=await n.uE.post("/api/v1/auth/login",t);if(!(null==a?void 0:a.data))throw(0,n.clearTokens)(),Error("Invalid response from server");if(!a.data.access_token)throw(0,n.clearTokens)(),Error("Login failed: No access token received");return(0,n.ki)(a.data.access_token),a.data.refresh_token&&(0,n.fE)(a.data.refresh_token),a.data}catch(e){var t,a,r,i,o,s,l,u,c,d,p;if((0,n.clearTokens)(),(null==(t=e.response)?void 0:t.status)===401)throw Error((null==(o=e.response)||null==(i=o.data)?void 0:i.message)||e.message||"Invalid email or password");if((null==(a=e.response)?void 0:a.status)===400){let t=(null==(l=e.response)||null==(s=l.data)?void 0:s.message)||(null==(c=e.response)||null==(u=c.data)?void 0:u.error)||e.message||"Invalid request",a=t.toLowerCase();if(a.includes("not initialized")||a.includes("configuration")||a.includes("next_public_supabase_anon_key")||a.includes("supabase"))throw Error("Authentication service configuration error: ".concat(t,". Please contact support."));if(a.includes("invalid")&&(a.includes("password")||a.includes("email")||a.includes("credential")))throw Error("Invalid email or password");if((null==(p=e.response)||null==(d=p.data)?void 0:d.message)&&Array.isArray(e.response.data.message))throw Error(e.response.data.message.join(", ")||"Please check your input");throw Error(t)}if((null==(r=e.response)?void 0:r.status)===408)throw Error("Login request timed out. The authentication service is taking longer than usual to respond. Please try again in a moment.");else if(b(e))throw Error("Request timed out. The server is taking too long to respond. Please try again or check if the backend services are running properly.");else if(w(e))throw Error("Unable to connect to the server at ".concat("https://xpeak.ai",". Please check your internet connection and ensure the backend services are running."));else if(e.message)throw e;else throw Error("Login failed. Please try again.")}},async logout(){try{let e=await n.uE.post("/api/v1/auth/logout");return(0,n.clearTokens)(),e.data}catch(t){let{clearTokens:e}=await Promise.resolve().then(a.bind(a,22768));throw e(),t}},async refreshToken(e){try{let t=await n.uE.post("/api/v1/auth/refresh",e);return t.data.access_token&&((0,n.ki)(t.data.access_token),t.data.refresh_token&&(0,n.fE)(t.data.refresh_token)),t.data}catch(e){var t;if((null==(t=e.response)?void 0:t.status)===401)throw(0,n.clearTokens)(),Error("Session expired. Please log in again.");throw e}},async forgotPassword(e){try{return(await n.uE.post("/api/v1/auth/forgot-password",e)).data}catch(n){var t,a,r,i,o,s,l;let e=Error((null==(a=n.response)||null==(t=a.data)?void 0:t.message)||(null==(i=n.response)||null==(r=i.data)?void 0:r.error)||n.message||"Failed to send password reset email");throw e.status=null==(o=n.response)?void 0:o.status,e.code=null==(l=n.response)||null==(s=l.data)?void 0:s.code,e}},resetPassword:async e=>(await n.uE.post("/api/v1/auth/reset-password",e)).data,exchangeResetPasswordCode:
1async e=>(await n.uE.post("/api/v1/auth/reset-password/exchange-code",e)).data,verifyEmail:async e=>(await n.uE.post("/api/v1/auth/verify-email",e)).data,resendVerificationEmail:async e=>(await n.uE.post("/api/v1/auth/resend-verification",e)).data,sendSmsCode:async e=>(await n.uE.post("/api/v1/auth/sms/send-code",e)).data,async smsLogin(e){var t;let{referralCode:a,...r}=e,i=await n.uE.post("/api/v1/auth/sms/login",{...r,...(null==a?void 0:a.trim())?{referral_code:a.trim()}:{}});return(null==(t=i.data)?void 0:t.access_token)&&((0,n.ki)(i.data.access_token),i.data.refresh_token&&(0,n.fE)(i.data.refresh_token)),i.data},sendSmsCodeForBinding:async e=>(await n.uE.post("/api/v1/auth/sms/send-code-for-binding",e)).data,bindPhone:async e=>(await n.uE.post("/api/v1/auth/bind-phone",e)).data,getAccountDeletionOptions:async()=>(await n.uE.get("/api/v1/auth/account-deletion/options")).data,sendAccountDeletionCode:async e=>(await n.uE.post("/api/v1/auth/account-deletion/send-code",e)).data,async confirmAccountDeletion(e){let t=await n.uE.post("/api/v1/auth/account-deletion/confirm",e);return(0,n.clearTokens)(),t.data},getAccountStatus:async()=>(await n.uE.get("/api/v1/auth/account-status")).data,getAccountDeletionStatus:async()=>(await n.uE.get("/api/v1/auth/account-deletion/status")).data,cancelAccountDeletion:async()=>(await n.uE.post("/api/v1/auth/account-deletion/cancel")).data,getAccountRestrictionStatus:async()=>(await n.uE.get("/api/v1/account-restriction/status")).data,startAccountProtection:()=>n.uE.post("/api/v1/auth/account-protection/start",{refresh_token:(0,n.ve)()}).then(e=>e.data),completeAccountProtection:e=>n.uE.post("/api/v1/auth/account-protection/complete",{...e?{new_password:e}:{}}).then(e=>e.data),async googleOAuth(e,t,a,r){try{let i=new URLSearchParams;e&&i.append("redirect_to",e),(null==t?void 0:t.trim())&&i.append("referral_code",t.trim()),(null==a?void 0:a.trim())&&i.append("referral_kind",a.trim()),(null==r?void 0:r.trim())&&i.append("role",r.trim());let o=i.toString();return(await n.uE.get("/api/v1/auth/oauth/google".concat(o?"?".concat(o):""))).data}catch(n){var i,o;let e=null==(i=n.response)?void 0:i.status,t=null==(o=n.response)?void 0:o.data,a=(null==t?void 0:t.message)||n.message;if(500===e){let e=(a||"").toLowerCase();if(e.includes("oauth")||e.includes("google")||e.includes("not configured")||e.includes("not initialized")||e.includes("supabase"))throw Error("Google OAuth is not properly configured. Please contact support.");throw Error("Server error during Google sign-in: ".concat(a||"Please try again later."))}if(400===e)throw Error(a||"Invalid OAuth request");if(n.message)throw n;else throw Error("Failed to initiate Google sign-in. Please try again.")}},async googleOAuthCallback(e,t,a,r,i,o){let s=new URLSearchParams;s.append("code",e),t&&s.append("state",t),a&&s.append("pkce_state",a),(null==r?void 0:r.trim())&&s.append("ref",r.trim()),(null==i?void 0:i.trim())&&s.append("kind",i.trim()),(null==o?void 0:o.trim())&&s.append("role",o.trim());let l=await n.uE.get("/api/v1/auth/oauth/google/callback?".concat(s.toString()));return l.data.access_token&&((0,n.ki)(l.data.access_token),l.data.refresh_token&&(0,n.fE)(l.data.refresh_token)),l.data},async uploadAvatar(e){let t=new FormData;return t.append("file",e),(await n.uE.post("/api/v1/user/profile/avatar",t,{headers:{"Content-Type":"multipart/form-data"}})).data},async getCurrentUser(e){var t;let a=(null==e?void 0:e.bustCache)===!0,r=(null==e||null==(t=e.accessToken)?void 0:t.trim())||null,i=null!=r?r:(0,n.iD)();if(!i)throw Error("Missing access token for getCurrentUser");let o="".concat((0,n.PG)(i)).concat(a?":bust":"");return(0,k.cD)((0,k.cM)("GET","/api/v1/auth/me",void 0,o),async()=>{var e;let t=null!=(e=(0,n.iD)())?e:r;if(!t)throw Error("Missing access token for getCurrentUser");let i={Authorization:"Bearer ".concat(t)};return a&&(i["Cache-Control"]="no-cache",i.Pragma="no-cache"),(await n.uE.get("/api/v1/auth/me",{headers:i,...a?{params:{_:Date.now()}}:{}})).data})},async wechatH5OAuth(e){let t=new URLSearchParams;(null==e?void 0:e.trim())&&t.append("referral_code",e.trim());let a=t.toString();return(await n.uE.get("/api/v1/auth/wechat/h5-init".concat(a?"?".concat(a):""))).data},async wechatH5Callback(e,t){let a=new URLSearchParams({code:e,state:t}),r=await n.uE.get("/api/v1/auth/wechat/h5-callback?".concat(a.toString()));return r.data.access_token&&((0,n.ki)(r.data.access_token),r.data.refresh_token&&(0,n.fE)(r.data.refresh_token)),r.data},async wechatH5SilentOAuth(e){let t=new URLSearchParams;(null==e?void 0:e.trim())&&t.append("return_url",e.trim());let a=t.toString();return(await n.uE.get("/api/v1/auth/wechat/h5-silent-init".concat(a?"?".concat(a):""))).data},async wechatH5SilentCallback(e,t){let a=new URLSearchParams({code:e,state:t}),r=await n.uE.get("/api/v1/auth/wechat/h5-silent-callback?".concat(a.toString()));return r.data.access_token&&((0,n.ki)(r.data.access_token),r.data.refresh_token&&(0,n.fE)(r.data.refresh_token)),r.data},async wechatQROAuth(e){let t=new URLSearchParams;(null==e?void 0:e.trim())&&t.append("referral_code",e.trim());let a=t.toString();return(await n.uE.get("/api/v1/auth/wechat/qr-init".concat(a?"?".concat(a):""))).data},async wechatCallback(e,t){let a=new URLSearchParams({code:e,state:t}),r=await n.uE.get("/api/v1/auth/wechat/callback?".concat(a.toString()));return r.data.access_token&&((0,n.ki)(r.data.access_token),r.data.refresh_token&&(0,n.fE)(r.data.refresh_token)),r.data},wechatBind:async(e,t)=>(await n.uE.post("/api/v1/auth/wechat/bind",{code:e,state:t})).data,wechatAppBind:async(e,t)=>(await n.uE.post("/api/v1/auth/wechat/app-bind",{code:e,state:t})).data,wechatH5Bind:async(e,t)=>(await n.uE.post("/api/v1/auth/wechat/h5-bind",{code:e,state:t})).data,wechatUnbind:async()=>(await n.uE.delete("/api/v1/auth/wechat/unbind")).data,wechatBindStatus:async()=>(await n.uE.get("/api/v1/auth/wechat/bind-status")).data,wechatMpOAuth:async()=>(await n.uE.get("/api/v1/auth/wechat-mp/init")).data,wechatMpBind:async(e,t)=>(await n.uE.post("/api/v1/auth/wechat-mp/bind",{code:e,state:t})).data,wechatMpUnbind:async()=>(await n.uE.delete("/api/v1/auth/wechat-mp/unbind")).data,wechatMpBindStatus:async()=>(await n.uE.get("/api/v1/auth/wechat-mp/bind-status")).data,wechatMpAppInit:async()=>(await n.uE.post("/api/v1/auth/wechat-mp/app-init")).data,completeWe
1chatMpAppOAuth:async(e,t)=>(await n.uE.post("/api/v1/auth/wechat-mp/app-oauth-complete",{code:e,state:t})).data,getWechatMpAppTransaction:async()=>(await n.uE.get("/api/v1/auth/wechat-mp/app-transaction")).data,confirmWechatMpAppTransaction:async e=>(await n.uE.post("/api/v1/auth/wechat-mp/app-transaction/confirm",{transactionId:e})).data,cancelWechatMpAppTransaction:async e=>(await n.uE.post("/api/v1/auth/wechat-mp/app-transaction/cancel",{transactionId:e})).data};var I=a(17149);let A=null,P=new Set,C=new Set,T=new Set,x=new Set;function R(){let e=(0,n.iD)();if(A)A.auth={token:e},A.connected||A.connect();else{var t=A=(0,I.io)("".concat((0,n.AK)(),"/session"),{auth:{token:e},transports:["websocket","polling"],autoConnect:!0});for(let e of P)t.on("session.revoked",e);for(let e of C)t.on("connect",e);for(let e of T)t.io.on("reconnect",e);for(let e of x)t.on("disconnect",e)}return A}let U={getStatus:async()=>(await n.uE.get("/api/v1/auth/session-status")).data,onRevoked(e){P.add(e);let t=!!A,a=R();return t&&a.on("session.revoked",e),()=>{P.delete(e),null==A||A.off("session.revoked",e)}},onConnected(e){C.add(e);let t=!!A,a=R();return t&&a.on("connect",e),()=>{C.delete(e),null==A||A.off("connect",e)}},onReconnected(e){T.add(e);let t=!!A,a=R();return t&&a.io.on("reconnect",e),()=>{T.delete(e),null==A||A.io.off("reconnect",e)}},onDisconnected(e){x.add(e);let t=!!A,a=R();return t&&a.on("disconnect",e),()=>{x.delete(e),null==A||A.off("disconnect",e)}},disconnect(){null==A||A.disconnect(),A=null}};(0,n.NN)(()=>{!function(){let e=(0,n.iD)();if(!e){null==A||A.disconnect(),A=null;return}if(!A)return R();A.auth={token:e},A.connected&&A.disconnect(),A.connect()}()});let M={getSubscription:async()=>(await n.uE.get("/api/v1/billing/subscription")).data,changeSubscription:async e=>(await n.uE.post("/api/v1/billing/subscription/change",e)).data,cancelSubscription:async e=>(await n.uE.post("/api/v1/billing/subscription/cancel",e||{})).data,pauseSubscription:async e=>(await n.uE.post("/api/v1/billing/subscription/pause",e)).data,resumeSubscription:async()=>(await n.uE.post("/api/v1/billing/subscription/resume")).data,reactivateSubscription:async()=>(await n.uE.post("/api/v1/billing/reactivate-subscription")).data,async getInvoices(e){let t=new URLSearchParams;(null==e?void 0:e.limit)&&t.append("limit",e.limit.toString()),(null==e?void 0:e.starting_after)&&t.append("starting_after",e.starting_after);let a="/api/v1/billing/invoices".concat(t.toString()?"?".concat(t.toString()):"");return(await n.uE.get(a)).data},getInvoiceById:async e=>(await n.uE.get("/api/v1/billing/invoices/".concat(e))).data,getInvoiceDetail:async e=>(await n.uE.get("/api/v1/billing/invoices/".concat(e,"/detail"))).data,checkNewUser:async()=>(await n.uE.get("/api/v1/billing/invoices/check-new-user")).data,async getEnhancedInvoices(e){let t=new URLSearchParams;(null==e?void 0:e.limit)&&t.append("limit",e.limit.toString()),(null==e?void 0:e.page)&&t.append("page",e.page.toString()),(null==e?void 0:e.starting_after)&&t.append("starting_after",e.starting_after),(null==e?void 0:e.status)&&t.append("status",e.status),(null==e?void 0:e.search)&&t.append("search",e.search),(null==e?void 0:e.created_after)&&t.append("created_after",e.created_after),(null==e?void 0:e.created_before)&&t.append("created_before",e.created_before),(null==e?void 0:e.startDate)&&t.append("startDate",e.startDate),(null==e?void 0:e.endDate)&&t.append("endDate",e.endDate);let a="/api/v1/billing/enhanced-invoices".concat(t.toString()?"?".concat(t.toString()):"");try{return(await n.uE.get(a)).data}catch(e){return t.append("enhanced","true"),a="/api/v1/billing/invoices".concat(t.toString()?"?".concat(t.toString()):""),(await n.uE.get(a)).data}},updateBillingInfo:async e=>(await n.uE.post("/api/v1/billing/update-billing-info",e)).data,updatePaymentMethod:async e=>(await n.uE.post("/api/v1/billing/update-payment-method",null!=e?e:{})).data,async getTransactions(e){let t=new URLSearchParams;(null==e?void 0:e.limit)&&t.append("limit",e.limit.toString()),(null==e?void 0:e.starting_after)&&t.append("starting_after",e.starting_after),(null==e?void 0:e.status)&&t.append("status",e.status),(null==e?void 0:e.created_after)&&t.append("created_after",e.created_after),(null==e?void 0:e.created_before)&&t.append("created_before",e.created_before);let a="/api/v1/billing/transactions".concat(t.toString()?"?".concat(t.toString()):"");return(await n.uE.get(a)).data},getAnalytics:async()=>(await n.uE.get("/api/v1/billing/analytics")).data,getCredits:async()=>(await n.uE.get("/api/v1/billing/credits")).data,addCredits:async e=>(await n.uE.post("/api/v1/billing/credits",{amount:e})).data,async getUsage(e){let t=new URLSearchParams;(null==e?void 0:e.start_date)&&t.append("start_date",e.start_date),(null==e?void 0:e.end_date)&&t.append("end_date",e.end_date),(null==e?void 0:e.range)&&t.append("range",e.range);let a="/api/v1/billing/usage".concat(t.toString()?"?".concat(t.toString()):"");return(await n.uE.get(a)).data},createCheckoutSession:async e=>(await n.uE.post("/api/v1/billing/checkout",e)).data,createUpgradeCheckoutSession:async e=>(await n.uE.post("/api/v1/billing/checkout/upgrade",e)).data,verifyCheckoutSession:async e=>(await n.uE.get("/api/v1/billing/checkout/session/".concat(e,"/verify"))).data,createNativeCheckoutQuote:async e=>(await n.uE.post("/api/v1/billing/checkout/native-quote",e)).data,createNativeUpgradeQuote:async e=>(await n.uE.post("/api/v1/billing/checkout/native-upgrade-quote",e)).data,createNativeCheckout:async e=>(await n.uE.post("/api/v1/billing/checkout/native-create",e)).data,verifyNativeCheckout:async e=>(await n.uE.get("/api/v1/billing/checkout/native/".concat(encodeURIComponent(e),"/verify"))).data,async getCharges(e){let t=new URLSearchParams;(null==e?void 0:e.limit)&&t.append("limit",e.limit.toString()),(null==e?void 0:e.starting_after)&&t.append("starting_after",e.starting_after);let a="/api/v1/billing/charges".concat(t.toString()?"?".concat(t.toString()):"");return(await n.uE.get(a)).data},getPauseHistory:async()=>(await n.uE.get("/api/v1/billing/pause-history")).data,getScheduledPauseRequests:async()=>(await n.uE.get("/api/v1/billing/subscriptions/pause/scheduled")).data,cancelScheduledPauseRequest:async e=>(await n.uE.delete("/api/v1/billing/subscriptions/pause/scheduled/".concat(e))).data,calculateRefund:async e=>(await n.uE.post("/api/v1/billing/refunds/calculate",e)).data,requestRefund:async e=>(await n.uE.post("/api/v1/billing/refunds/request",e)).data,getRefunds:async()=>(await n.uE.get("/api/v1/billing/refunds")).data,getRefundRequests:async()=>(await n.uE.get("/api/v1/billing/refunds/requests")).data,async getProducts(e){let t=new URLSearchParams;(null==e?void 0:e.activeOnly)&&t.append("activeOnly","true"),(null==e?void 0:e.metadata)&&Object.entries(e.metadata).forEac
1h(e=>{let[a,n]=e;t.append("metadata.".concat(a),String(n))});let a="/api/v1/billing/products".concat(t.toString()?"?".concat(t.toString()):"");return(await n.uE.get(a)).data},getProduct:async e=>(await n.uE.get("/api/v1/billing/products/".concat(e))).data,async getProductWithPrices(e){let t=await n.uE.get("/api/v1/billing/products/".concat(e,"/with-prices"));return t.data.product||t.data},async getAllProductsWithPrices(e){let t=new URLSearchParams;(null==e?void 0:e.activeOnly)&&t.append("activeOnly","true");let a="/api/v1/billing/products/with-prices".concat(t.toString()?"?".concat(t.toString()):"");return(await n.uE.get(a,{timeout:6e4})).data},async getAllProductsWithPricesForMe(e){let t=new URLSearchParams;(null==e?void 0:e.activeOnly)&&t.append("activeOnly","true");let a="/api/v1/billing/products/with-prices-for-me".concat(t.toString()?"?".concat(t.toString()):"");return(await n.uE.get(a,{timeout:6e4})).data},createProduct:async e=>(await n.uE.post("/api/v1/billing/products",e)).data,updateProduct:async(e,t)=>(await n.uE.patch("/api/v1/billing/products/".concat(e),t)).data,async deleteProduct(e){await n.uE.delete("/api/v1/billing/products/".concat(e))},createPrice:async(e,t)=>(await n.uE.post("/api/v1/billing/products/".concat(e,"/prices"),t)).data,updatePrice:async(e,t)=>(await n.uE.patch("/api/v1/billing/products/prices/".concat(e),t)).data,async deletePrice(e){await n.uE.delete("/api/v1/billing/products/prices/".concat(e))},async getAdminRefundRequests(e){let t=new URLSearchParams;(null==e?void 0:e.status)&&t.append("status",e.status),(null==e?void 0:e.limit)&&t.append("limit",String(e.limit));let a="/api/v1/billing/admin/refunds".concat(t.toString()?"?".concat(t.toString()):"");return(await n.uE.get(a)).data},approveRefund:async e=>(await n.uE.post("/api/v1/billing/admin/refunds/".concat(e,"/approve"))).data,rejectRefund:async(e,t)=>(await n.uE.post("/api/v1/billing/admin/refunds/".concat(e,"/reject"),{reason:t})).data,getBasePrices:async()=>(await n.uE.get("/api/v1/billing/pricing/base-prices")).data,getBasePricesByProduct:async e=>(await n.uE.get("/api/v1/billing/pricing/base-prices/product/".concat(e))).data,createBasePrice:async e=>(await n.uE.post("/api/v1/billing/pricing/base-prices",e)).data,updateBasePrice:async(e,t)=>(await n.uE.patch("/api/v1/billing/pricing/base-prices/".concat(e),t)).data,async deleteBasePrice(e){await n.uE.delete("/api/v1/billing/pricing/base-prices/".concat(e))},getPriceSheets:async e=>(await n.uE.get(e?"/api/v1/billing/pricing/sheets?status=".concat(e):"/api/v1/billing/pricing/sheets")).data,getPriceSheet:async e=>(await n.uE.get("/api/v1/billing/pricing/sheets/".concat(e))).data,createPriceSheet:async e=>(await n.uE.post("/api/v1/billing/pricing/sheets",e)).data,updatePriceSheet:async(e,t)=>(await n.uE.patch("/api/v1/billing/pricing/sheets/".concat(e),t)).data,async deletePriceSheet(e){await n.uE.delete("/api/v1/billing/pricing/sheets/".concat(e))},archivePriceSheet:async e=>(await n.uE.post("/api/v1/billing/pricing/sheets/".concat(e,"/archive"))).data,getPriceItems:async e=>(await n.uE.get("/api/v1/billing/pricing/sheets/".concat(e,"/items"))).data,createPriceItem:async e=>(await n.uE.post("/api/v1/billing/pricing/items",e)).data,updatePriceItem:async(e,t)=>(await n.uE.patch("/api/v1/billing/pricing/items/".concat(e),t)).data,async deletePriceItem(e){await n.uE.delete("/api/v1/billing/pricing/items/".concat(e))},bulkUpsertPriceItems:async e=>(await n.uE.post("/api/v1/billing/pricing/items/bulk",e)).data,getMarkets:async e=>(await n.uE.get(e?"/api/v1/billing/pricing/markets?activeOnly=true":"/api/v1/billing/pricing/markets")).data,getMarket:async e=>(await n.uE.get("/api/v1/billing/pricing/markets/".concat(e))).data,createMarket:async e=>(await n.uE.post("/api/v1/billing/pricing/markets",e)).data,updateMarket:async(e,t)=>(await n.uE.patch("/api/v1/billing/pricing/markets/".concat(e),t)).data,async deleteMarket(e){await n.uE.delete("/api/v1/billing/pricing/markets/".concat(e))},resolvePrice:async e=>(await n.uE.post("/api/v1/billing/pricing/resolve",e)).data,getPricePreview:async()=>(await n.uE.get("/api/v1/billing/pricing/preview")).data,getMarketPrices:async e=>(await n.uE.get("/api/v1/billing/pricing/market-prices?marketCode=".concat(encodeURIComponent(e)))).data},L=["cover","difficulty","objectives","hook","vocabulary","article","scaffolding","discussion","practice","tutor_live_support"];function z(e){return Math.min(1,Math.max(0,e))}function N(e,t){return e<=0?0:null!=t?Math.min(Math.max(0,t),e):.25*e}function O(e){return null==e||"object"!=typeof e?null:"string"==typeof e.key&&e.key.trim()&&"number"==typeof e.ratio&&Number.isFinite(e.ratio)?{key:e.key.trim(),ratio:z(e.ratio)}:null}function j(e){let t=e.split(":")[0]||e;
1return t.startsWith("discussion_")?"discussion":t.startsWith("vocabulary")?"vocabulary":t.startsWith("task")?"practice":t}function D(e){return L.filter(t=>{var a,n;return(null!=(n=null==(a=e[t])?void 0:a.height)?n:0)>0}).map(t=>({key:t,y:e[t].y,height:e[t].height}))}function F(e,t){let a=e[t],n=e[t+1];return n?n.y:a.y+Math.max(1,a.height)}function q(e,t){let a=j(e);return Object.entries(t).filter(e=>{var t;let[n,r]=e;return!((null!=(t=r.height)?t:0)<=0)&&n!==a&&j(n)===a}).map(e=>{let[t,a]=e;return{key:t,y:a.y,height:a.height}}).sort((e,t)=>e.y-t.y||e.key.localeCompare(t.key))}function V(e){let t=e.getBoundingClientRect(),a=e.scrollTop,n={};return e.querySelectorAll("[data-mirror-block]").forEach(e=>{let r=e.getAttribute("data-mirror-block");if(!r)return;let i=e.getBoundingClientRect();n[r]={y:i.top-t.top+a,height:i.height}}),n}function W(e,t){var a;let n="number"==typeof t?{probeOffsetPx:t,previousKey:null,useExplicitOffset:!0}:{probeOffsetPx:null==t?void 0:t.probeOffsetPx,previousKey:null!=(a=null==t?void 0:t.previousKey)?a:null,useExplicitOffset:(null==t?void 0:t.probeOffsetPx)!=null},r=n.useExplicitOffset?N(e.clientHeight,n.probeOffsetPx):function(e){return arguments.length>1&&void 0!==arguments[1]&&arguments[1],N(e)}(e.clientHeight);return function(e,t,a){let n=D(t);if(0===n.length)return{key:"cover",ratio:0};let r=function(e,t,a){let n=0;for(let a=0;a<t.length;a+=1)if(e>=t[a].y)n=a;else break;if(!a)return n;let r=j(a),i=t.findIndex(e=>e.key===r);if(i<0)return n;if(n>i){let a=t[i+1];if(a&&e<a.y+12)return i}if(n<i){let a=t[i];if(a&&e>a.y-12)return i}return n}(e,n,a),i=n[r],o=function(e,t,a){var n;let r=q(t,a).filter(t=>e>=t.y&&e<t.y+t.height);return 0===r.length?null:(r.sort((e,t)=>e.height-t.height||e.y-t.y),null!=(n=r[0])?n:null)}(e,i.key,t);if(o)return{key:o.key,ratio:z((e-o.y)/Math.max(1,o.height))};let s=Math.max(1,F(n,r)-i.y);return{key:i.key,ratio:z((e-i.y)/s)}}(e.scrollTop+r,V(e),n.previousKey)}function B(e,t,a){let n=V(e);e.scrollTop=function(e,t,a,n){var r,i;let o=D(t);if(0===o.length)return 0;let s=function(e,t){var a,n,r,i,o;let s=z(e.ratio);if((null!=(r=null==(a=t[e.key])?void 0:a.height)?r:0)>0)return{key:e.key,ratio:s};let l=j(e.key);return(null!=(i=null==(n=t[l])?void 0:n.height)?i:0)>0?j(o=e.key)!==o?{key:l,ratio:function(e,t){let a=q(j(e.key),t);if(0===a.length)return z(e.ratio);let n=a.findIndex(t=>t.key===e.key);return z(((n>=0?n:(()=>{var t;let n=/:(\d+)$/.exec(e.key);if(!n)return 0;let r=Number.parseInt(null!=(t=n[1])?t:"0",10);return Number.isFinite(r)?Math.min(Math.max(0,r),a.length-1):0})())+z(e.ratio))/a.length)}(e,t)}:{key:l,ratio:s}:null}(e,t),l=N(a,n),u=z(null!=(r=null==s?void 0:s.ratio)?r:e.ratio);if(s&&j(i=s.key)!==i){let e=t[s.key];if(e&&e.height>0)return Math.max(0,e.y+e.height*u-l)}if(s){let e=o.findIndex(e=>e.key===s.key);if(e>=0){let t=o[e],a=Math.max(1,F(o,e)-t.y);return Math.max(0,t.y+a*u-l)}}let c=j(e.key),d=L.indexOf(c);if(d<0)return 0;let p=0;for(let e=0;e<o.length;e+=1)L.indexOf(o[e].key)<d&&(p=e);return Math.max(0,F(o,p)-l)}(t,n,e.clientHeight,a)}let H="story:";function G(e){if(!e.startsWith(H))return null;let t=Number.parseInt(e.slice(H.length),10);return!Number.isFinite(t)||t<0?null:t}function J(e){return Object.entries(e).map(e=>{var t;let[a,n]=e,r=G(a);return null==r||(null!=(t=n.height)?t:0)<=0?null:{key:a,index:r,y:n.y,height:n.height}}).filter(e=>null!=e).sort((e,t)=>e.index-t.index||e.y-t.y)}function X(e){return function(e,t){let a=J(t);if(0===a.length)return{key:"".concat(H).concat(Math.max(0,Math.floor(0))),ratio:0};let n=0;for(let t=0;t<a.length;t+=1)if(e>=a[t].y)n=t;else break;let r=a[n],i=a[n+1],o=Math.max(1,(i?i.y:r.y+Math.max(1,r.height))-r.y);return{key:r.key,ratio:z((e-r.y)/o)}}(e.scrollTop+N(e.clientHeight),V(e))}function K(e,t){let a=V(e);e.scrollTop=function(e,t,a){let n=J(t);if(0===n.length)return 0;let r=N(a),i=z(e.ratio),o=G(e.key),s=null==o?0:n.findIndex(e=>e.index===o);if(s<0){s=0;for(let e=0;e<n.length;e+=1)null!=o&&n[e].index<=o&&(s=e)}let l=n[s],u=n[s+1],c=Math.max(1,(u?u.y:l.y+Math.max(1,l.height))-l.y);return Math.max(0,l.y+c*i-r)}(t,a,e.clientHeight)}let $=2,Q=["chat","translate","materials","virtual-bg","whiteboard"],Y=["story","vocabulary","grammar_practice","game_zone"];function Z(e){if(!Array.isArray(e))return[];let t=[];for(let a of e)"string"==typeof a&&Q.includes(a)&&!t.includes(a)&&t.pu
1sh(a);return t}let ee="xpeak-whiteboard-server",et="classroom.materials.state",ea="classroom.materials.cursor",en=/^ord:\d+$/;function er(){return new Set}function ei(e,t){for(e.add(t);e.size>1e3;){let t=e.values().next().value;if(void 0===t)break;e.delete(t)}}function eo(e){return!e||"object"!=typeof e||Array.isArray(e)?null:e}function es(e){return"number"==typeof e&&Number.isFinite(e)}function el(e){return"string"==typeof e&&e.length>0}function eu(e){return/^https?:\/\//i.test(e)||e.includes("://")}function ec(e){return e.some(e=>en.test(e.key))}function ed(e){if(!Array.isArray(e))return null;let t=[];for(let a of e){let e=eo(a);if(!e||!el(e.axis)||!el(e.key))return null;t.push({axis:e.axis,key:e.key})}return t}function ep(e){let t=eo(e);if(!t)return null;let a=ed(t.path);return!a||!es(t.ratio)||t.ratio<0||t.ratio>1?null:{path:a,ratio:t.ratio}}function eg(e){var t;let a,n,r=eo(e);if(!r||3!==r.schemaVersion||!el(r.lessonId)||!el(r.presenterSessionId)||!es(r.stateRevision)||!es(r.updatedAt))return null;let i=function(e){let t=eo(e);if(!t)return null;let a=t.kind,n=null,r=null;if(("pdf"===a||"ppt"===a)&&(n=a,r="tutor",a="library"),"none"!==a&&"ai_topic"!==a&&"picture_book"!==a&&"library"!==a)return null;let i={kind:a};if("none"===a){if(void 0!==t.resourceId&&null!==t.resourceId){if(!el(t.resourceId))return null;i.resourceId=t.resourceId}}else{if(!el(t.resourceId)||eu(t.resourceId))return null;i.resourceId=t.resourceId}if("library"===a){var o,s,l,u;let e=null!=n?n:"pdf"===(l=t.format)||"ppt"===l||"image"===l?l:null;if(!e)return null;if(i.format=e,i.scope=null!=(s=null!=(o="tutor"===(u=t.scope)||"platform"===u?u:null)?o:r)?s:"tutor",void 0!==t.publicUrl&&null!==t.publicUrl){if("image"!==e||!el(t.publicUrl)||!eu(t.publicUrl))return null;i.publicUrl=t.publicUrl}}else if(void 0!==t.publicUrl&&null!==t.publicUrl)return null;else if(void 0!==t.scope&&null!==t.scope)return null;if(void 0!==t.resourceVersion&&null!==t.resourceVersion){if(!el(t.resourceVersion))return null;i.resourceVersion=t.resourceVersion}return i}(r.material);if(!i)return null;let o=eo(r.navigation);if(!o)return null;let s=ed(o.path);if(!s)return null;let l="follow"===(t=r.browseMode)||"free"===t?t:null;if(!l)return null;let u=function(e){if(void 0===e)return[];if(!Array.isArray(e))return null;for(let t of e)if("string"!=typeof t||!Q.includes(t))return null;return Z(e)}(r.tools);if(!u)return null;if(void 0!==r.cursorCheckpoint&&null!==r.cursorCheckpoint){let e=function(e){let t=eo(e);if(!t||!el(t.presenterSessionId)||!es(t.cursorSeq)||!es(t.updatedAt))return null;let a=ep(t.cursor);return a?{presenterSessionId:t.presenterSessionId,cursorSeq:t.cursorSeq,cursor:a,updatedAt:t.updatedAt}:null}(r.cursorCheckpoint);if(!e)return null;a=e}if(ec([...s,...a?a.cursor.path:[]])&&!i.resourceVersion)return null;if(r.pptManifests&&"object"==typeof r.pptManifests&&!Array.isArray(r.pptManifests)){let e={};for(let[t,a]of Object.entries(r.pptManifests)){if(!t||!Array.isArray(a))continue;let n=a.filter(e=>"string"==typeof e&&e.length>0);n.length>0&&(e[t]=n)}Object.keys(e).length>0&&(n=e)}return{schemaVersion:3,lessonId:r.lessonId,presenterSessionId:r.presenterSessionId,material:i,navigation:{path:s},browseMode:l,...a?{cursorCheckpoint:a}:{},tools:u,stateRevision:r.stateRevision,updatedAt:r.updatedAt,...n?{pptManifests:n}:{}}}function ev(e,t){let a=eo(e);if(!a||1!==a.schemaVersion||!el(a.eventId)||a.eventType!==t||!el(a.lessonId)||!el(a.channelAlias)||!es(a.sentAt))return null;let n=eo(a.payload);return n?{schemaVersion:1,eventId:a.eventId,eventType:a.eventType,lessonId:a.lessonId,channelAlias:a.channelAlias,sentAt:a.sentAt,payload:n}:null}function em(e,t,a){return e.channelName===a.channelName&&t.channelAlias===a.channelName&&t.lessonId===a.lessonId}function ey(e,t){let a=ev(e.event,et);if(!a||!em(e,a,t))return null;let n=e.transportPublisherUserId;if(n!==t.serverPublisherUserId&&n!==t.tutorUserId||t.seenMaterialsStateEventIds.has(a.eventId))return null;let r=eg(a.payload);return r&&r.lessonId===a.lessonId?(ei(t.seenMaterialsStateEventIds,a.eventId),{...a,eventType:et,payload:r}):null}function ef(e,t){let a=ev(e.event,ea);if(!a||!em(e,a,t)||e.transportPublisherUserId!==t.tutorUserId||t.seenMaterialsCursorEventIds.has(a.eventId))return null;let n=a.payload;if(!el(n.presenterSessionId)||n.presenterSessionId!==t.presenterSessionId||!es(n.stateRevision)||!es(n.cursorSeq))return null;let r=ep(n.cursor);return!r||ec(r.path)&&!el(t.resourceVersion)?null:(ei(t.seenMaterialsCursorEventIds,a.eventId),{...a,eventType:ea,payload:{presenterSessionId:n.presenterSessionId,stateRevision:n.stateRevision,cursorSeq:n.cursorSeq,cursor:r}})}function eh(e,t){var a,n;return e.presenterSessionId===t.presenterSessionId&&e.stateRevision===t.stateRevision&&t.cursorSeq>(null!=(n=null==(a=e.cursorCheckpoint)?void 0:a.cursorSeq)?n:-1)}function ew(e,t){return t>e?"refetch-snapshot":t<e?"drop-stale":"apply"}let eb={async getUserLessons(e){let t=new URLSearchParams;(null==e?void 0:e.page)&&t.append("page",e.page.toString()),(null==e?void 0:e.limit)&&t.append("limit",e.limit.toString()),(null==e?void 0:e.status)&&t.append("status",e.status),(null==e?void 0:e.upcoming)!==void 0&&t.append("upcoming",e.upcoming.toString());let a="/api/v1/lessons/user".concat(t.toString()?"?".concat(t.toString()):"");return(await n.uE.get(a)).data},getStudentGraceContext:async()=>(await n.uE.get("/api/v1/lessons/student/grace-context")).data,async getStudentGraceContextDetail(e){let t=new URLSearchParams({type:e.type});return(await n.uE.get("/api/v1/lessons/student/grace-context/detail?".concat(t.toString()))).data},getStudentCatalogUpcoming:async e=>(await n.uE.post("/api/v1/lessons/student/catalog/upcoming",null!=e?e:{})).data,getStudentCatalogHistory:async e=>(await n.uE.post("/api/v1/lessons/student/catalog/history",null!=e?e:{})).data,getTutorCatalogUpcoming:async e=>(await n.uE.post("/api/v1/lessons/tutor/catalog/upcoming",null!=e?e:{})).data,getTutorCatalogHistory:async e=>(await n.uE.post("/api/v1/lessons/tutor/catalog/history",null!=e?e:{})).data,getStudentMonthlyLessons:async e=>(await n.uE.post("/api/v1/lessons/student/monthly/list",e)).data,getLessonById:async e=>(await n.uE.get("/api/v1/lessons/".concat(e))).data,getLessonDetail:async e=>(await n.uE.post("/api/v1/lessons/detail",{lessonId:e})).data,getClassroomMirrorTopic:async(e,t)=>(await n.uE.get("/api/v1/lessons/".concat(e,"/classroom-mirror/topics/").concat(t))).data,async getClassroomMirror(e){let t=function(e){var t,a,n;if(null==e||"object"!=typeof e)return null;let r=Z(e.tools);if(2===e.schemaVersion&&"none"===e.kind&&"string"==typeof e.lessonId&&"number"==typeof e.updatedAt)return{schemaVersion:$,kind:"none",lessonId:e.lessonId,updatedAt:e.updatedAt,tools:r};if(2===e.schemaVersion&&"ppt"===e.kind&&"string"==typeof e.lessonId&&"string"==typeof e.presentationId&&"string"==typeof e.fileName&&Array.isArray(e.slideUrls)&&"number"==typeof e.activeSlideIndex&&"number"==typeof e.updatedAt){let t="string"==typeof e.resourceVersion&&e.resourceVersion.trim()?e.resourceVersion.trim():void 0,a="tutor"===e.materialScope||"platform"===e.materialScope?e.materialScope:void 0;return{schemaVersion:$,kind:"ppt",lessonId:e.lessonId,presentationId:e.presentationId,fileName:e.fileName,slideUrls:e.slideUrls,activeSlideIndex:e.activeSlideIndex,...t?{resourceVersion:t}:{},...a?{materialScope:a}:{},updatedAt:e.updatedAt,tools:r}}if(2===e.schemaVersion&&"ai_topic"===e.kind&&"string"==typeof e.lessonId&&"string"==typeof e.topicId&&"number"==typeof e.updatedAt){let t=O(e.scrollAnchor);if(!t)return null;let a="my"===e.topicSource||"catalog"===e.topicSource?e.topicSource:void 0,n="A1"===e.targetCefr||"A2"===e.targetCefr||"B1"===e.targetCefr||"B2"===e.targetCefr||"C1"===e.targetCefr||"C2"===e.targetCefr?e.targetCefr:void 0,i="string"==typeof e.ver
1sionId&&e.versionId.trim()?e.versionId.trim():void 0,o="number"==typeof e.sourceVersion&&Number.isFinite(e.sourceVersion)?e.sourceVersion:void 0;return{schemaVersion:$,kind:"ai_topic",lessonId:e.lessonId,topicId:e.topicId,difficulty:"beginner"===e.difficulty||"intermediate"===e.difficulty||"advanced"===e.difficulty?e.difficulty:void 0,...n?{targetCefr:n}:{},...i?{versionId:i}:{},...void 0!==o?{sourceVersion:o}:{},scrollAnchor:t,...a?{topicSource:a}:{},updatedAt:e.updatedAt,tools:r}}if(2===e.schemaVersion&&"pdf"===e.kind&&"string"==typeof e.lessonId&&"string"==typeof e.documentUrl&&"number"==typeof e.updatedAt){let t="number"==typeof e.scrollRatio&&Number.isFinite(e.scrollRatio)?e.scrollRatio:0,a="number"==typeof e.pageIndex&&Number.isFinite(e.pageIndex)?Math.max(0,Math.floor(e.pageIndex)):0,n="string"==typeof e.resourceVersion&&e.resourceVersion.trim()?e.resourceVersion.trim():void 0,i="tutor"===e.materialScope||"platform"===e.materialScope?e.materialScope:void 0;return{schemaVersion:$,kind:"pdf",lessonId:e.lessonId,documentUrl:e.documentUrl,pageIndex:a,scrollRatio:Math.min(1,Math.max(0,t)),...n?{resourceVersion:n}:{},...i?{materialScope:i}:{},updatedAt:e.updatedAt,tools:r}}if(2===e.schemaVersion&&"image"===e.kind&&"string"==typeof e.lessonId&&"string"==typeof e.materialId&&"string"==typeof e.publicUrl&&"number"==typeof e.updatedAt){let t="tutor"===e.materialScope||"platform"===e.materialScope?e.materialScope:void 0;return{schemaVersion:$,kind:"image",lessonId:e.lessonId,materialId:e.materialId,publicUrl:e.publicUrl,...t?{materialScope:t}:{},updatedAt:e.updatedAt,tools:r}}if(2===e.schemaVersion&&"picture_book"===e.kind&&"string"==typeof e.lessonId&&"string"==typeof e.coursewareId&&"number"==typeof e.updatedAt){let a="number"==typeof e.scrollRatio&&Number.isFinite(e.scrollRatio)?e.scrollRatio:0,n=function(e){if("string"==typeof e)return Y.includes(e)?e:void 0}(e.activeModule),i="string"==typeof e.pictureBookLessonId&&e.pictureBookLessonId.trim()?e.pictureBookLessonId:void 0,o=null!=(t=O(e.scrollAnchor))?t:void 0;return{schemaVersion:$,kind:"picture_book",lessonId:e.lessonId,coursewareId:e.coursewareId,pictureBookLessonId:i,activeModule:n,scrollRatio:Math.min(1,Math.max(0,a)),...o?{scrollAnchor:o}:{},updatedAt:e.updatedAt,tools:r}}return"string"==typeof e.lessonId&&Array.isArray(e.slideUrls)&&e.slideUrls.length>0?{schemaVersion:$,kind:"ppt",lessonId:e.lessonId,presentationId:String(null!=(a=e.presentationId)?a:""),fileName:String(null!=(n=e.fileName)?n:""),slideUrls:e.slideUrls,activeSlideIndex:Math.max(0,Number(e.activeSlideIndex)||0),updatedAt:Number(e.updatedAt)||Date.now(),tools:r}:null}((await n.uE.get("/api/v1/lessons/".concat(e,"/classroom-mirror"))).data);if(!t)throw Error("Invalid classroom mirror state");return t},async getClassroomMaterialState(e,t,a){var r,i;let o=await n.uE.get("/api/v1/lessons/".concat(e,"/classroom-mirror?schemaVersion=3"),{headers:t?{"If-None-Match":t}:void 0,validateStatus:e=>200===e||304===e,...a?{signal:a}:{}}),s=(null==(r=o.headers)?void 0:r.etag)||(null==(i=o.headers)?void 0:i.ETag)||t||"";if(304===o.status)return{changed:!1,etag:s};let l=eg(o.data);if(!l)throw Error("Invalid classroom material state");return{changed:!0,etag:s,state:l}},async checkpointClassroomMaterialCursor(e,t){let a=eg((await n.uE.post("/api/v1/lessons/".concat(e,"/classroom-mirror/cursor"),t)).data);if(!a)throw Error("Invalid classroom material state");return a},async persistClassroomMaterialState(e,t){let a=eg((await n.uE.post("/api/v1/lessons/".concat(e,"/classroom-mirror"),t)).data);if(!a)throw Error("Invalid classroom material state");return a},async getLessonClassroomChatMessages(e,t){let a=new URLSearchParams;(null==t?void 0:t.limit)!=null&&a.append("limit",String(t.limit)),(null==t?void 0:t.before)&&a.append("before",t.before);let r=a.toString()?"?".concat(a.toString()):"";return(await n.uE.get("/api/v1/lessons/".concat(e,"/classroom-chat/messages").concat(r))).data},async listLessonClassroomChatMessagesPage(e){if(!(null==e?void 0:e.lesson_id))throw Error("lesson_id is required");return(await n.uE.post("/api/v1/lessons/classroom-chat/messages",{lesson_id:e.lesson_id,page:e.page,limit:e.limit})).data},sendLessonClassroomChatMessage:async(e,t)=>(await n.uE.post("/api/v1/lessons/".concat(e,"/classroom-chat/messages"),t)).data,async uploadLessonClassroomChatFile(e,t){let a=new FormData;return a.append("file",t),(await n.uE.post("/api/v1/lessons/".concat(e,"/classroom-chat/upload"),a)).data},bookLesson:async e=>(await n.uE.post("/api/v2/lessons/book",e)).data,bookLessonV2:async e=>
1eb.bookLesson(e),updateLesson:async(e,t)=>(await n.uE.put("/api/v1/lessons/".concat(e,"/edit"),t)).data,confirmLesson:async e=>(await n.uE.post("/api/v1/lessons/".concat(e,"/confirm"))).data,rejectLesson:async e=>(await n.uE.post("/api/v1/lessons/".concat(e,"/reject"))).data,async previewEmailAction(e){let t=new URLSearchParams({lessonId:e.lessonId,action:e.action,token:e.token});return(await n.uE.get("/api/v1/lessons/email-action/preview?".concat(t.toString()))).data},submitEmailAction:async e=>(await n.uE.post("/api/v1/lessons/email-action/submit",e)).data,cancelLesson:async e=>(await n.uE.post("/api/v1/lessons/".concat(e,"/cancel"))).data,updateLessonStatus:async(e,t)=>(await n.uE.put("/api/v1/lessons/".concat(e,"/status"),{status:t})).data,submitFeedback:async(e,t)=>(await n.uE.post("/api/v1/lessons/".concat(e,"/feedback"),t)).data,getFeedback:async e=>(await n.uE.get("/api/v1/lessons/".concat(e,"/feedback"))).data,checkFeedbackEligibility:async e=>(await n.uE.get("/api/v1/lessons/".concat(e,"/feedback/eligibility"))).data,dismissFeedback:async e=>(await n.uE.post("/api/v1/lessons/".concat(e,"/feedback/dismiss"),{})).data,async getFeedbackHistory(e){let t=new URLSearchParams;(null==e?void 0:e.page)&&t.append("page",e.page.toString()),(null==e?void 0:e.limit)&&t.append("limit",e.limit.toString());let a="/api/v1/lessons/feedback/history".concat(t.toString()?"?".concat(t.toString()):"");return(await n.uE.get(a)).data},requestReschedule:async(e,t)=>(await n.uE.post("/api/v1/lessons/".concat(e,"/reschedule"),t)).data,requestTutorOpenReschedule:async e=>(await n.uE.post("/api/v1/lessons/reschedule/open",e)).data,fulfillTutorOpenReschedule:async e=>(await n.uE.post("/api/v1/reschedule-requests/fulfill",e)).data,cancelTutorLesson:async e=>(await n.uE.post("/api/v1/lessons/cancel",e)).data,getRescheduleRequest:async e=>(await n.uE.get("/api/v1/lessons/".concat(e,"/reschedule-request"))).data,getRescheduleHistory:async e=>(await n.uE.get("/api/v1/lessons/".concat(e,"/reschedule-history"))).data,joinLesson:async e=>(await n.uE.post("/api/v1/lessons/".concat(e,"/join"),{})).data,getNextBackToBackLesson:async e=>(await n.uE.post("/api/v1/lessons/next-back-to-back",{lessonId:e})).data,leaveLesson:async e=>(await n.uE.post("/api/v1/lessons/".concat(e,"/leave"),{})).data,presenceHeartbeat:async e=>(await n.uE.post("/api/v1/lessons/".concat(e,"/presence-heartbeat"))).data,async uploadLessonPresentation(e,t){let a=new FormData;return a.append("file",t),(await n.uE.post("/api/v1/lessons/".concat(e,"/presentation"),a)).data},importLessonPresentationFromMaterial:async(e,t)=>(await n.uE.post("/api/v1/lessons/".concat(e,"/presentation/import-material"),{materialId:t})).data,syncPresentationMaterials:async(e,t)=>(await n.uE.post("/api/v1/lessons/".concat(e,"/presentation/sync"),t)).data,syncClassroomMirror:async(e,t)=>(await n.uE.post("/api/v1/lessons/".concat(e,"/classroom-mirror"),t)).data,async loadWhiteboard(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(await n.uE.post("/api/v1/lessons/".concat(e,"/whiteboard/load"),t)).data},saveWhiteboard:async(e,t)=>(await n.uE.post("/api/v1/lessons/".concat(e,"/whiteboard/save"),t)).data,loadClassroomAnnotation:async(e,t)=>(await n.uE.post("/api/v1/lessons/".concat(e,"/annotations/load"),t)).data,saveClassroomAnnotation:async(e,t)=>(await n.uE.post("/api/v1/lessons/".concat(e,"/annotations/save"),t)).data,loadClassroomScreenShareState:async e=>(await n.uE.post("/api/v1/lessons/".concat(e,"/screen-share/state/load"),{})).data,saveClassroomScreenShareState:async(e,t)=>(await n.uE.post("/api/v1/lessons/".concat(e,"/screen-share/state/save"),t)).data,createWhiteboardAssetUpload:async(e,t)=>(await n.uE.post("/api/v1/lessons/".concat(e,"/whiteboard/assets/upload-session"),t)).data,completeWhiteboardAssetUpload:async(e,t)=>(await n.uE.post("/api/v1/lessons/".concat(e,"/whiteboard/assets/complete"),t)).data,syncClassroomToolState:async(e,t)=>(await n.uE.post("/api/v1/lessons/".concat(e,"/classroom-tool-state"),t)).data,getPendingRescheduleRequests:async()=>(await n.uE.get("/api/v1/reschedule-requests/pending")).data,approveRescheduleRequest:async e=>(await n.uE.post("/api/v1/reschedule-requests/approve",{requestId:e})).data,rejectRescheduleRequest:async(e,t)=>(await n.uE.post("/api/v1/reschedule-requests/reject",{requestId:e,rejectionReason:t})).data},eE=new Set(["confidence_gap","class_vocab","challenge_gap"]);function eS(e){var t,a,n,r,i,o,s,l;if(!e||"object"!=typeof e)return null;let u=String(null!=(a=null!=(t=e.topicId)?t:e.topic_id)?a:"").trim();if(!u)return null;
1let c=String(null!=(r=null!=(n=e.recommendationReasonType)?n:e.recommendation_reason_type)?r:"").trim(),d=eE.has(c)?c:void 0,p=String(null!=(o=null!=(i=e.recommendationReason)?i:e.recommendation_reason)?o:"").trim();return{topicId:u,title:null==e.title?null:String(e.title),coverImageUrl:(()=>{var t;let a=null!=(t=e.coverImageUrl)?t:e.cover_image_url;if(null==a||""===a)return null;let n=String(a).trim();return n.length>0?n:null})(),tags:Array.isArray(e.tags)?e.tags.map(String):[],industry_categories:Array.isArray(e.industry_categories)?e.industry_categories.map(String):[],interest_categories:Array.isArray(e.interest_categories)?e.interest_categories.map(String):[],matchedLessonTopicId:null==e.matchedLessonTopicId&&null==e.matched_lesson_topic_id?null:String(null!=(l=null!=(s=e.matchedLessonTopicId)?s:e.matched_lesson_topic_id)?l:""),recommendationReasonType:d,recommendationReason:p.length>0?p:void 0}}function ek(e){let t=Number(e);return Number.isFinite(t)?t:0}function e_(e){if(null==e||""===e)return null;let t=Number(e);return Number.isFinite(t)?t:null}function eI(e){if(Array.isArray(e))return e.map(e=>String(null!=e?e:"").trim()).filter(Boolean);let t=String(null!=e?e:"").trim();return t?[t]:[]}function eA(e){var t;return null!=(t=eI(e)[0])?t:null}function eP(e){var t;if(!e||"object"!=typeof e)return null;let a=String(null!=(t=e.word)?t:"").trim(),n=e_(e.start),r=e_(e.end);if(!a||null==n||null==r||r<=n)return null;let i="string"==typeof e.definition?e.definition.trim():"";return{start:n,end:r,word:a,definition:i.length>0?i:void 0}}function eC(e){var t;if(!e||"object"!=typeof e)return null;let a=String(null!=(t=e.connector)?t:"").trim();if(!a)return null;let n="string"==typeof e.example?e.example.trim():"",r="string"==typeof e.tip?e.tip.trim():"";return{connector:a,example:n.length>0?n:void 0,tip:r.length>0?r:void 0}}let eT=new Map;function ex(e,t){let a=eT.get(e);if(a)return a;let n=t().finally(()=>{eT.delete(e)});return eT.set(e,n),n}function eR(e){if(null==e||""===e)return null;let t=Number(e);return Number.isFinite(t)?t:null}let eU=new Set(["liaison","stress","reduction"]);function eM(e){var t;if(!e||"object"!=typeof e)return null;let a=String(null!=(t=e.kind)?t:"").trim();if(!eU.has(a))return null;let n=eR(e.start),r=eR(e.end);if(null==n||null==r||r<=n)return null;let i="string"==typeof e.note?e.note.trim():"";return{start:n,end:r,kind:a,note:i.length>0?i:void 0}}function eL(e){var t,a,n,r,i,o,s,l,u,c,d;if(!e||"object"!=typeof e)return null;let p=String(null!=(a=null!=(t=e.originalText)?t:e.original_text)?a:"").trim(),g=String(null!=(r=null!=(n=e.optimizedText)?n:e.optimized_text)?r:"").trim();if(!p&&!g)return null;let v=e=>{let t=null!=e&&""!==e?String(e).trim():"";return t.length>0?t:null},m=null!=(i=e.pronunciationGuide)?i:e.pronunciation_guide;return{originalText:p||g,startMs:null!=(s=eR(null!=(o=e.startMs)?o:e.start_ms))?s:void 0,endMs:null!=(u=eR(null!=(l=e.endMs)?l:e.end_ms))?u:void 0,studentAudioPath:v(null!=(c=e.studentAudioPath)?c:e.student_audio_path),optimizedText:g||p,pronunciationGuide:Array.isArray(m)?m.map(eM).filter(e=>!!e):[],optimizedAudioPath:v(null!=(d=e.optimizedAudioPath)?d:e.optimized_audio_path)}}function ez(e){var t,a,n,r,i,o;if(!e||"object"!=typeof e)return null;let s=String(null!=(t=e.word)?t:"").trim();if(!s)return null;let l=null!=(n=null!=(a=e.score)?a:e.accuracyScore)?n:e.accuracy_score,u=null==l||""===l?void 0:Number(l),c=null!=(r=e.chunkIndex)?r:e.chunk_index,d=null==c||""===c?void 0:Number(c);return{word:s,score:null!=u&&Number.isFinite(u)?u:void 0,chunkIndex:null!=d&&Number.isFinite(d)?d:void 0,studentAudioPath:(()=>{var t;let a=null!=(t=e.studentAudioPath)?t:e.student_audio_path,n=null!=a&&""!==a?String(a).trim():"";return n.length>0?n:null})(),studentAudioOffsetMs:eR(null!=(i=e.studentAudioOffsetMs)?i:e.student_audio_offset_ms),studentAudioDurationMs:eR(null!=(o=e.studentAudioDurationMs)?o:e.student_audio_duration_ms),studentAudioChunkIndex:(()=>{var t,a;let n=null!=(a=null!=(t=e.studentAudioChunkIndex)?t:e.student_audio_chunk_index)?a:c;if(null==n||""===n)return null!=d?d:null;let r=Number(n);return Number.isFinite(r)?r:null!=d?d:null})()}}let eN={overview:async e=>ex("overview:".concat(e),async()=>(function(e){var t,a,n,r,i,o,s,l,u,c,d,p,g,v,m,y;let f=function(e){var t,a,n,r;if(null==e||"object"!=typeof e)return null;let i=ek(null!=(t=e.studentDurationMs)?t:e.student_duration_ms),o=ek(null!=(a=e.tutorDurationMs)?a:e.tutor_duration_ms),s=ek(null!=(n=e.totalDurationMs)?n:e.total_duration_ms),l=null!=(r=e.studentRatio)?r:e.student_ratio,u=null==l?NaN:Number(l);return s<=0||!Number.isFinite(u)?null:{studentDurationMs:i,tutorDurationMs:o,totalDurationMs:s,studentRatio:u}}(null!=(t=e.talkTime)?t:e.talk_time),h=null!=(a=e.keyStats)?a:e.key_stats,w=function(e){var t,a,n,r,i,o,s,l,u,c,d;let p=e&&"object"==typeof e?e:{},g=ek(null!=(n=null!=(a=null!=(t=p.keyWordsCount)?t:p.key_words_count)?a:p.newWordsCount)?n:p.new_words_count),v=null!=(r=p.grammarScore)?r:p.grammar_score,m=null==v||""===v?null:Number(v),y=null!=(s=null!=(o=null!=(i=p.newWordsDltPrev)?i:p.new_words_dlt_prev)?o:p.newWordsCountDeltaFromPreviousLesson)?s:p.new_words_count_delta_from_previous_lesson,f=null==y||""===y?null:Number(y),h=null!=(c=null!=(u=null!=(l=p.grammarDltPrev)?l:p.grammar_dlt_prev)?u:p.grammarScoreDeltaFromPreviousLesson)?c:p.grammar_score_delta_from_previous_lesson,w=null==h||""===h?null:Number(h),b=eR(null!=(d=p.paceWpm)?d:
1p.pace_wpm);return{keyWordsCount:g,grammarScore:null!=m&&Number.isFinite(m)?m:null,newWordsDltPrev:null!=f&&Number.isFinite(f)?f:null,grammarDltPrev:null!=w&&Number.isFinite(w)?w:null,paceWpm:b,prevSumLessonId:(()=>{var e,t,a;let n=null!=(a=null!=(t=null!=(e=p.prevSumLessonId)?e:p.prev_sum_lesson_id)?t:p.previousLessonId)?a:p.previous_lesson_id,r=null!=n&&""!==n?String(n).trim():"";return r.length>0?r:null})(),prevSumLessonAt:(()=>{var e,t,a;let n=null!=(a=null!=(t=null!=(e=p.prevSumLessonAt)?e:p.prev_sum_lesson_at)?t:p.previousLessonDate)?a:p.previous_lesson_date,r=null!=n&&""!==n?String(n).trim():"";return r.length>0?r:null})()}}(null!=h?h:{});return{summaryId:null!=(n=e.summaryId)?n:e.summary_id,lessonId:String(null!=(i=null!=(r=e.lessonId)?r:e.lesson_id)?i:""),status:String(null!=(o=e.status)?o:""),vocabularyStatus:String(null!=(l=null!=(s=e.vocabularyStatus)?s:e.vocabulary_status)?l:"pending"),grammarStatus:String(null!=(c=null!=(u=e.grammarStatus)?u:e.grammar_status)?c:"pending"),conversationStatus:String(null!=(p=null!=(d=e.conversationStatus)?d:e.conversation_status)?p:"pending"),speechStatus:String(null!=(v=null!=(g=e.speechStatus)?g:e.speech_status)?v:"pending"),talkTime:f,keyStats:w,todayTopics:function(e){if(!Array.isArray(e))return[];let t=[];for(let i of e){var a,n,r;if(!i||"object"!=typeof i)continue;let e=String(null!=(n=null!=(a=i.topicLabel)?a:i.topic_label)?n:"").trim(),o=i.category,s=null==o||""===String(o).trim()?null:String(o).trim(),l=Number(null!=(r=i.discussionScore)?r:i.discussion_score);(e||s)&&t.push({topicLabel:e,category:s,discussionScore:Number.isFinite(l)?l:0})}return t}(null!=(m=e.todayTopics)?m:e.today_topics),speakingPace:function(e){if(null==e||"object"!=typeof e)return null;let t=eR(e.wpm);return null==t?null:{wpm:t}}(null!=(y=e.speakingPace)?y:e.speaking_pace)}})((await n.uE.post("/api/v2/lessons/ai-summary/overview",{lessonId:e})).data)),shellStatus:async e=>ex("shellStatus:".concat(e),async()=>{var t,a,r;let i=(await n.uE.post("/api/v1/lessons/ai-summary/shell-status",{lessonId:e})).data;return{lessonId:String(null!=(a=null!=(t=i.lessonId)?t:i.lesson_id)?a:e),status:String(null!=(r=i.status)?r:"pending")}}),vocabularyAggregate:async e=>ex("vocabularyAgg:".concat(e),async()=>(function(e){var t,a,n,r,i,o,s,l,u,c,d,p,g;let v=null!=(t=e.registerStats)?t:e.register_stats,m=v&&"object"==typeof v?v:{},y=ek(m.casual),f=ek(m.formal),h=ek(null!=(a=m.totalClassified)?a:m.total_classified)||y+f;return{summaryId:null!=(n=e.summaryId)?n:e.summary_id,lessonId:String(null!=(i=null!=(r=e.lessonId)?r:e.lesson_id)?i:""),status:String(null!=(o=e.status)?o:""),wordCount:e_(null!=(l=null!=(s=e.wordCount)?s:e.vocabulariesCount)?l:e.vocabularies_count),varietyScore:e_(null!=(c=null!=(u=e.varietyScore)?u:e.vocabularyVarietyScore)?c:e.vocabulary_variety_score),registerStats:{casual:y,formal:f,totalClassified:h},topPicks:function(e){var t;let a=null!=(t=e.topPicks)?t:e.top_picks;
1if(!Array.isArray(a))return[];let n=[];for(let e of a){let t=function(e){var t,a,n,r,i,o;if(!e||"object"!=typeof e)return null;let s=String(null!=(a=null!=(t=e.findingId)?t:e.finding_id)?a:"").trim(),l=String(null!=(r=null!=(n=e.wordText)?n:e.word_text)?r:"").trim(),u=String(null!=(o=null!=(i=e.sourceText)?i:e.source_text)?o:"").trim();return s&&l?{findingId:s,wordText:l,sourceText:u}:null}(e);if(t&&n.push(t),n.length>=3)break}return n}(e),collocationSuggestions:function(e){var t;let a=null!=(t=e.collocationSuggestions)?t:e.collocation_suggestions;if(!Array.isArray(a))return[];let n=[];for(let e of a){let t=function(e){var t,a,n,r,i,o;if(!e||"object"!=typeof e)return null;let s=String(null!=(a=null!=(t=e.suggestionId)?t:e.suggestion_id)?a:"").trim(),l=String(null!=(r=null!=(n=e.studentPhrase)?n:e.student_phrase)?r:"").trim(),u=String(null!=(o=null!=(i=e.suggestedPhrase)?i:e.suggested_phrase)?o:"").trim();return s&&l&&u?{suggestionId:s,studentPhrase:l,suggestedPhrase:u}:null}(e);if(t&&n.push(t),n.length>=3)break}return n}(e),sizeGrowth:function(e){if(!Array.isArray(e)||0===e.length)return;let t=[];for(let o of e){var a,n,r,i;if(!o||"object"!=typeof o)continue;let e=String(null!=(n=null!=(a=o.weekStart)?a:o.week_start)?n:"").trim();if(!e)continue;let s=null!=(i=null!=(r=o.wordCount)?r:o.cumulativeVocabularySize)?i:o.cumulative_vocabulary_size;t.push({weekStart:e,wordCount:ek(s)})}return t.length>0?t:void 0}(null!=(p=null!=(d=e.sizeGrowth)?d:e.vocabularySizeGrowth)?p:e.vocabulary_size_growth),topicHotspots:function(e){if(!Array.isArray(e))return;let t=[];for(let a of e){let e=function(e){var t,a,n,r,i,o,s;if(!e||"object"!=typeof e)return null;let l=String(null!=(a=null!=(t=e.lessonId)?t:e.lesson_id)?a:"").trim(),u=String(null!=(n=e.category)?n:"").trim();if(!l||!u)return null;let c=null!=(r=e.scheduledStart)?r:e.scheduled_start,d=null==c||""===c?null:String(c),p=e_(null!=(i=e.confidenceScore)?i:e.confidence_score),g=e_(null!=(o=e.challengeScore)?o:e.challenge_score),v=null!=(s=e.evidenceSnippets)?s:e.evidence_snippets;return{lessonId:l,scheduledStart:d,category:u,confidenceScore:p,challengeScore:g,...Array.isArray(v)?{evidenceSnippets:v}:{}}}(a);e&&t.push(e)}return t.length>0?t:void 0}(null!=(g=e.topicHotspots)?g:e.topic_hotspots)}})((await n.uE.post("/api/v1/lessons/ai-summary/vocabulary",{lessonId:e})).data)),async vocabularyTracker(e,t){var a,r,i;let o=null!=(a=null==t?void 0:t.page)?a:1,s=null!=(r=null==t?void 0:t.limit)?r:100,l=null!=(i=null==t?void 0:t.tag)?i:"";return ex("vocabTracker:".concat(e,":").concat(o,":").concat(s,":").concat(l),async()=>(function(e){var t;let a=e&&"object"==typeof e?e:{},n=a.pagination&&"object"==typeof a.pagination?a.pagination:{},r=a.data,i=[];if(Array.isArray(r))for(let e of r){let t=function(e){var t,a,n,r,i,o,s,l,u,c,d,p,g,v,m,y;if(!e||"object"!=typeof e)return null;let f=String(null!=(a=null!=(t=e.findingId)?t:e.finding_id)?a:"").trim(),h=String(null!=(r=null!=(n=e.wordText)?n:e.word_text)?r:"").trim();if(!f||!h)return null;let w=null!=(i=e.inWordMaze)?i:e.in_word_maze,b=e.synonyms,E=[];if(Array.isArray(b))for(let e of b){if("string"==typeof e&&e.trim()){E.push({lemma:e.trim(),partOfSpeech:null});continue}if(e&&"object"==typeof e){let t=String(null!=(s=null!=(o=e.lemma)?o:e.word)?s:"").trim();if(!t)continue;let a=null!=(l=e.partOfSpeech)?l:e.part_of_speech;E.push({lemma:t,partOfSpeech:eA(a)})}}let S=null!=(u=e.ipa)?u:e.phonetic,k=null!=(c=e.partOfSpeech)?c:e.part_of_speech,_=e.tag;return{findingId:f,wordText:h,..."string"==typeof _&&_.trim()?{tag:_.trim()}:{},sourceText:null!=(p=null!=(d=e.sourceText)?d:e.source_text)?p:null,morphologicalTree:null!=(v=null!=(g=e.morphologicalTree)?g:e.morphological_tree)?v:null,inWordMaze:!0===w||"t"===w||"true"===w,ipa:"string"==typeof S&&S.trim()?S.trim():null,partOfSpeech:eI(k),meaning:null!=(m=e.meaning)?m:null,definition:null!=(y=e.definition)?y:null,senses:function(e){if(!Array.isArray(e))return[];let t=[];for(let i of e){var a,n,r;i&&"object"==typeof i&&t.push({partOfSpeech:eA(null!=(a=i.partOfSpeech)?a:i.part_of_speech),meaning:null!=(n=i.meaning)?n:null,definition:null!=(r=i.definition)?r:null})}return t}(e.senses),phrases:function(e,t){if(!Array.isArray(e))return[];let a=[],n=new Set,r=(()=>{let e=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");try{return RegExp("\\b".concat(e,"\\b"),"i")}catch(e){return null}})();for(let t of e){let e="",u="";if("string"==typeof t)e=t.trim();else if(t&&"object"==typeof t){var i,o,s,l;e=String(null!=(o=null!=(i=t.phrase)?i:t.text)?o:"").trim(),u=String(null!=(l=null!=(s=t.gloss)?s:t.definition)?l:"").trim()}if(!(e=e.replace(/\s+/g," ").trim()))continue;
1let c=e.split(/\s+/).filter(Boolean);if(c.length<2||c.length>8||e.length>72||/[.!?]/.test(e)||r&&!r.test(e))continue;let d=e.toLowerCase();if(!n.has(d)&&(n.add(d),a.push({phrase:e,gloss:u}),a.length>=3))break}return a}(e.phrases,h),synonyms:E}}(e);t&&i.push(t)}let o=ek(n.page)||1,s=ek(n.limit)||20;return{data:i,pagination:{page:o,limit:s,total:ek(n.total),totalPages:ek(null!=(t=n.totalPages)?t:n.total_pages)}}})((await n.uE.post("/api/v2/lessons/ai-summary/vocabulary/tracker",{lessonId:e,page:o,limit:s,...(null==t?void 0:t.tag)?{tag:t.tag}:{}})).data))},async vocabularyCollocations(e,t){var a,r;let i=null!=(a=null==t?void 0:t.page)?a:1,o=null!=(r=null==t?void 0:t.limit)?r:20;return ex("vocabColloc:".concat(e,":").concat(i,":").concat(o),async()=>(function(e){var t,a,n;let r=e&&"object"==typeof e?e:{},i=r.pagination&&"object"==typeof r.pagination?r.pagination:{},o=[];if(Array.isArray(r.data))for(let e of r.data){let t=function(e){var t,a,n,r,i,o,s,l,u,c,d,p,g;if(!e||"object"!=typeof e)return null;let v=String(null!=(a=null!=(t=e.suggestionId)?t:e.suggestion_id)?a:"").trim(),m=String(null!=(r=null!=(n=e.studentPhrase)?n:e.student_phrase)?r:"").trim(),y=String(null!=(o=null!=(i=e.suggestedPhrase)?i:e.suggested_phrase)?o:"").trim();return v&&m&&y?{suggestionId:v,studentPhrase:m,suggestedPhrase:y,explanation:null==e.explanation?null:String(e.explanation),sourceText:String(null!=(l=null!=(s=e.sourceText)?s:e.source_text)?l:""),sourceSegmentIndex:e_(null!=(u=e.sourceSegmentIndex)?u:e.source_segment_index),sourceTimestampMs:e_(null!=(c=e.sourceTimestampMs)?c:e.source_timestamp_ms),sourceDurationMs:e_(null!=(d=e.sourceDurationMs)?d:e.source_duration_ms),phraseStartChar:e_(null!=(p=e.phraseStartChar)?p:e.phrase_start_char),phraseEndChar:e_(null!=(g=e.phraseEndChar)?g:e.phrase_end_char)}:null}(e);t&&o.push(t)}let s=ek(i.page)||1,l=ek(i.limit)||20,u=ek(i.total),c=ek(null!=(t=i.totalPages)?t:i.total_pages);return{summaryId:null!=(n=null!=(a=r.summaryId)?a:r.summary_id)?n:null,data:o,pagination:{page:s,limit:l,total:u,totalPages:c}}})((await n.uE.post("/api/v1/lessons/ai-summary/vocabulary/collocations",{lessonId:e,page:i,limit:o})).data))},async discardVocabularyFinding(e,t){var a;return{ok:(null==(a=(await n.uE.post("/api/v2/lessons/ai-summary/vocabulary/tracker/discard",{lessonId:e,findingId:t})).data)?void 0:a.ok)===!0||!0}},expressionUpgrades:async e=>ex("exprUpgrades:".concat(e),async()=>(function(e){var t,a;let n=e&&"object"==typeof e?e:{},r=[];if(Array.isArray(n.data))for(let e of n.data){let t=function(e){var t,a,n,r,i,o,s;if(!e||"object"!=typeof e)return null;let l=String(null!=(a=null!=(t=e.exampleText)?t:e.example_text)?a:""),u=String(null!=(r=null!=(n=e.topicLabel)?n:e.topic_label)?r:"").trim(),c=String(null!=(o=null!=(i=e.stanceOrAngle)?i:e.stance_or_angle)?o:"").trim();if(!l.trim()&&!u&&!c)return null;let d=e.highlights;return{displayOrder:ek(null!=(s=e.displayOrder)?s:e.display_order),topicLabel:u,stanceOrAngle:c,exampleText:l,highlights:Array.isArray(d)?d.map(eP).filter(e=>!!e):[]}}(e);t&&r.push(t)}return r.sort((e,t)=>e.displayOrder-t.displayOrder),{summaryId:null!=(a=null!=(t=n.summaryId)?t:n.summary_id)?a:null,data:r}})((await n.uE.post("/api/v2/lessons/ai-summary/vocabulary/expression-upgrades",{lessonId:e})).data)),grammarAggregate:async e=>ex("grammarAgg:".concat(e),async()=>(function(e){var t,a,n,r,i,o;let s=e&&"object"==typeof e?e:{},l=s.sentenceVariety&&"object"==typeof s.sentenceVariety?s.sentenceVariety:s.sentence_variety&&"object"==typeof s.sentence_variety?s.sentence_variety:{},u=s.logicalCohesion&&"object"==typeof s.logicalCohesion?s.logicalCohesion:s.logical_cohesion&&"object"==typeof s.logical_cohesion?s.logical_cohesion:{},c=u.connectors,d=null!=(t=u.recommendedConnectors)?t:u.recommended_connectors,p=null!=(a=l.complexEvidence)?a:l.complex_evidence;return{summaryId:null!=(r=null!=(n=s.summaryId)?n:s.summary_id)?r:null,grammarScore:e_(null!=(i=s.grammarScore)?i:s.grammar_score),analyzedSentenceCount:ek(null!=(o=s.analyzedSentenceCount)?o:s.analyzed_sentence_count),sentenceVariety:{simple:ek(l.simple),compound:ek(l.compound),complex:ek(l.complex),complexEvidence:Array.isArray(p)?p.map(String):[]},logicalCohesion:{score:e_(u.score),connectors:Array.isArray(c)?c.map(e=>{var t,a;if(!e||"object"!=typeof e)return null;let n=String(null!=(t=e.connector)?t:"").trim();return n?{connector:n,evidence:String(null!=(a=e.evidence)?a:"")}:null}).filter(e=>!!e):[],recommendedConnectors:Array.isArray(d)?d.map(eC).filter(e=>!!e):[]}}})((await n.uE.post("/api/v2/lessons/ai-summary/grammar",{lessonId:e})).data)),grammarPersistentErrors:async e=>ex("grammarPers:".concat(e),async()=>(await n.uE.post("/api/v1/lessons/ai-summary/grammar/persistent-errors",{lessonId:e})).data),async grammarCorrections(e,t){var a,r,i,o,s,l;let u=null!=(i=null==t?void 0:t.page)?i:1,c=null!=(o=null==t?void 0:t.limit)?o:10,d=null==(s=null==t?void 0:t.featuredOnly)||s,p=null!=(l=null==t||null==(a=t.errorTypes)?void 0:a.map(e=>
1e.trim()).filter(Boolean))?l:(null==t||null==(r=t.errorType)?void 0:r.trim())?[t.errorType.trim()]:void 0,g=(null==p?void 0:p.length)?p.join(","):"all";return ex("grammarCorr:".concat(e,":").concat(u,":").concat(c,":").concat(d,":").concat(g),async()=>(await n.uE.post("/api/v1/lessons/ai-summary/grammar/corrections",{lessonId:e,page:u,limit:c,featuredOnly:d,...(null==p?void 0:p.length)?{errorTypes:p}:{}})).data)},async grammarExplainTranslate(e,t,a){let r=String(null!=t?t:"").trim(),i="".concat(r.length,":").concat(r.slice(0,160)),o=(null!=a?a:"").trim();return ex("grammarExplainTr:".concat(e,":").concat(o,":").concat(i),async()=>(await n.uE.post("/api/v1/lessons/ai-summary/grammar/explain-translate",{lessonId:e,text:r,...o?{targetLanguage:o}:{}})).data)},speechFluency:async e=>ex("speechFluency:".concat(e),async()=>{var t,a,r,i,o,s,l,u,c,d,p,g;let v=(await n.uE.post("/api/v2/lessons/ai-summary/speech-fluency",{lessonId:e})).data;return{lessonId:String(null!=(a=null!=(t=v.lessonId)?t:v.lesson_id)?a:e),status:String(null!=(r=v.status)?r:"pending"),fluencyExcerpts:Array.isArray(null!=(i=v.fluencyExcerpts)?i:v.fluency_excerpts)?null!=(o=v.fluencyExcerpts)?o:v.fluency_excerpts:void 0,pauseAnalysis:null!=(s=v.pauseAnalysis)?s:v.pause_analysis,topPronunciationChallenges:Array.isArray(null!=(l=v.topPronunciationChallenges)?l:v.top_pronunciation_challenges)?(null!=(u=v.topPronunciationChallenges)?u:v.top_pronunciation_challenges).map(ez).filter(e=>!!e):void 0,pronunciationSentences:Array.isArray(null!=(c=v.pronunciationSentences)?c:v.pronunciation_sentences)?(null!=(d=v.pronunciationSentences)?d:v.pronunciation_sentences).map(eL).filter(e=>!!e):void 0,intonationComparison:null!=(g=null!=(p=v.intonationComparison)?p:v.intonation_comparison)?g:null}}),topicRecommendations:async e=>ex("topicRec:".concat(e),async()=>{var t;let a=await n.uE.post("/api/v1/lessons/ai-summary/topic-recommendations",{lessonId:e});return{data:(Array.isArray(null==(t=a.data)?void 0:t.data)?a.data.data:[]).map(eS).filter(e=>!!e)}}),engagement:async e=>{var t;return{ok:(null==(t=(await n.uE.post("/api/v1/lessons/ai-summary/engagement",e)).data)?void 0:t.ok)===!0||!0}}},eO=["beginner","elementary","intermediate","upper_intermediate","advanced","other"],ej=["needs_improvement","fair","good","very_good","excellent","other"],eD=["very_low","low","medium","high","very_high","other"],eF=["speaking","vocabulary","pronunciation","grammar","listening","reading","writing","fluency","discussion","exam_practice","other"],eq=["general_english","ielts","toefl","toeic","conversation","study_abroad","interview","business_english","professional_english","other"],eV=["speakingLevel","pronunciation","confidence","focus","learningGoal","tutorNote","nextLessonPlan"],eW=500,eB=20,eH={create:async e=>(await n.uE.post("/api/v1/tutor-notes/create",e)).data,update:async e=>(await n.uE.post("/api/v1/tutor-notes/update",e)).data,byLesson:async e=>(await n.uE.post("/api/v1/tutor-notes/by-lesson",{lessonId:e})).data,history:async e=>(await n.uE.post("/api/v1/tutor-notes/history",e)).data,delete:async e=>(await n.uE.post("/api/v1/tutor-notes/delete",e)).data,setPinned:async e=>(await n.uE.post("/api/v1/tutor-notes/set-pinned",e)).data},eG="/api/v1/preclass-requirements",eJ={async listTags(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"en";return(await n.uE.get("".concat(eG,"/tags?locale=").concat(encodeURIComponent(e)))).data},upsert:async e=>(await n.uE.post("".concat(eG,"/upsert"),e)).data,studentDetail:async e=>(await n.uE.post("".concat(eG,"/student-detail"),e)).data,tutorDetail:async e=>(await n.uE.post("".concat(eG,"/tutor-detail"),e)).data,lastByTutor:async e=>(await n.uE.post("".concat(eG,"/last-by-tutor"),e)).data,markRead:async e=>(await n.uE.post("".concat(eG,"/mark-read"),e)).data,translate:async e=>(await n.uE.post("".concat(eG,"/translate"),e)).data};function eX(e,t){return function(e,t,a){let n=e.split("{pageIndex}").join(String(t));if(/^https?:\/\//i.test(n))return n;let r=(null!=a?a:"").replace(/\/$/,""),i=n.startsWith("/")?n:"/".concat(n);return r?"".concat(r).concat(i):i}(e,t,(0,n.AK)())}async function eK(e){return(await n.uE.post("/api/v1/material-artifacts/manifest",{materialScope:e.materialScope,materialId:e.materialId,resourceVersion:e.resourceVersion,lessonId:e.lessonId})).data}function e$(e){return e&&"object"==typeof e?"string"!=typeof e.activeTool&&null!==e.activeTool||"string"!=typeof e.lessonId||"number"!=typeof e.ver
1sion||"number"!=typeof e.updatedAt||void 0!==e.eventId&&"string"!=typeof e.eventId?null:e:null}function eQ(e,t){return"whiteboard"===e.activeTool}function eY(e,t){if(!e||"object"!=typeof e||Array.isArray(e))return null;let a=new Set(["fileId","bucket","objectPath","publicUrl","mimeType","byteSize","createdAt"]);return Object.keys(e).some(e=>!a.has(e))||"string"!=typeof e.fileId||"lesson-materials"!==e.bucket||"string"!=typeof e.objectPath||"string"!=typeof e.publicUrl||!["image/jpeg","image/png","image/webp"].includes(String(e.mimeType))||"number"!=typeof e.byteSize||e.byteSize<=0||e.byteSize>0xa00000||"number"!=typeof e.createdAt||t&&!e.objectPath.startsWith("lessons/".concat(t,"/whiteboard/"))?null:e}function eZ(){return{schemaVersion:1,clearEpoch:0,strokes:[]}}function e0(e,t){return e.kind===t.kind&&("material-page"===e.kind&&"material-page"===t.kind?e.scope===t.scope&&e.resourceId===t.resourceId&&e.resourceVersion===t.resourceVersion&&e.pageIndex===t.pageIndex:"content-block"===e.kind&&"content-block"===t.kind?e.contentType===t.contentType&&e.contentId===t.contentId&&e.contentVersion===t.contentVersion&&e.surfaceKey===t.surfaceKey:"screen-share"===e.kind&&"screen-share"===t.kind&&e.shareSessionId===t.shareSessionId&&e.viewportEpoch===t.viewportEpoch)}function e1(e){return"freehand"===e.tool||"highlighter"===e.tool?e.points.length:1}function e2(e,t){if("layer.clear"===t.type)return t.clearEpoch<=e.clearEpoch?e:{schemaVersion:1,clearEpoch:t.clearEpoch,strokes:[]};if(t.clearEpoch!==e.clearEpoch)return e;if("stroke.delete"===t.type)return{...e,strokes:e.strokes.filter(e=>e.id!==t.strokeId)};if("stroke.begin"===t.type){let a=e.strokes.findIndex(e=>e.id===t.stroke.id);if(a<0)return{...e,strokes:[...e.strokes,t.stroke]};let n=[...e.strokes];return n[a]=t.stroke,{...e,strokes:n}}if("stroke.commit"===t.type){let a=e.strokes.findIndex(e=>e.id===t.stroke.id);if(a<0)return{...e,strokes:[...e.strokes,t.stroke]};if(e1(e.strokes[a])>e1(t.stroke))return e;let n=[...e.strokes];return n[a]=t.stroke,{...e,strokes:n}}let a=e.strokes.findIndex(e=>e.id===t.strokeId);if(a<0)return e;let n=e.strokes[a];if("freehand"!==n.tool&&"highlighter"!==n.tool)return e;let r=[...e.strokes];return r[a]={...n,points:[...n.points,...t.points]},{...e,strokes:r}}let e4="classroom.client-profile",e3="classroom.client-profile.request";function e5(e,t){return"number"==typeof e&&Number.isFinite(e)&&e>=1&&e<=t}function e6(e){if(!e||"object"!=typeof e||Array.isArray(e)||1!==e.schemaVersion||e.eventType!==e4||"string"!=typeof e.eventId||e.eventId.length<1||e.eventId.length>128||"string"!=typeof e.lessonId||e.lessonId.length<1||e.lessonId.length>128||"string"!=typeof e.channelAlias||e.channelAlias.length<1||e.channelAlias.length>256||"number"!=typeof e.sentAt||!Number.isFinite(e.sentAt)||!e.payload||"object"!=typeof e.payload||Array.isArray(e.payload))return null;let t=e.payload;return"student"===t.role&&("xpeak-web"===t.clientApp||"xpeak-app"===t.clientApp)&&("web"===t.platform||"ios"===t.platform||"android"===t.platform)&&1===t.layoutVersion&&e5(t.contentWidth,2e3)&&e5(t.viewportWidth,4e3)&&e5(t.viewportHeight,4e3)&&("xpeak-web"!==t.clientApp||"web"===t.platform)&&("xpeak-app"!==t.clientApp||"web"!==t.platform)?e:null}function e8(e){var t;return{schemaVersion:1,eventId:e.eventId,eventType:e3,lessonId:e.lessonId,channelAlias:e.channelAlias,sentAt:null!=(t=e.sentAt)?t:Date.now(),payload:{role:"tutor"}}}let e9="".concat("https://xpeak.ai","/api/v1/observability/socket-event");function e7(e){if("undefined"==typeof navigator)return;let t=navigator,a=JSON.stringify({...e,url:window.location.href,online:navigator.onLine,network:function(e){if(!e)return;let t=[e.effectiveType||e.type,"number"==typeof e.downlink?"".concat(e.downlink,"Mbps"):void 0,"number"==typeof e.rtt?"".concat(e.rtt,"ms"):void 0].filter(Boolean);return t.length>0?t.join("/"):void 0}(t.connection),timestamp:new Date().toISOString()});try{if("function"==typeof navigator.sendBeacon){let e=new Blob([a],{type:"application/json"});if(navigator.sendBeacon(e9,e))return}fetch(e9,{method:"POST",headers:{"Content-Type":"application/json"},body:a,keepalive:!0,credentials:"omit"}).catch(()=>void 0)}catch(e){}}function te(e){return"whiteboard:".concat(e.lessonId,":").concat(e.role)}class tt{connect(){var e,t;let a=(0,n.iD)();if(!a)throw Error("No access token available. Please login first.");
1if((null==(e=this.socket)?void 0:e.connected)&&this.tokenUsedForConnection===a)return this.socket;null==(t=this.socket)||t.disconnect();let r=(0,I.io)("".concat("https://xpeak.ai","/collab"),{transports:["websocket"],auth:{token:a},forceNew:!0,reconnection:!0,reconnectionDelay:1e3,reconnectionAttempts:8});return this.socket=r,this.tokenUsedForConnection=a,null!=this.offAuthSessionChange||(this.offAuthSessionChange=(0,n.NN)(()=>this.reconnectWithLatestToken())),r.on("connect",()=>{e7({namespace:"collab",event:"connect",socketId:r.id,context:"api-client"}),this.replayWhiteboardSubscriptions()}),r.on("connect_error",e=>{e7({namespace:"collab",event:"connect_error",message:null==e?void 0:e.message,context:"api-client"})}),r.on("whiteboard:preview",e=>{this.previewHandlers.forEach(t=>t(e))}),r.on("whiteboard:saved",e=>{this.savedHandlers.forEach(t=>t(e))}),r}joinWhiteboard(e){var t;this.whiteboardSubscriptions.set(te(e),e),this.connect(),null==(t=this.socket)||t.emit("whiteboard:join",e,e=>{(null==e?void 0:e.preview)&&this.previewHandlers.forEach(t=>t(e.preview))})}leaveWhiteboard(e){var t;this.whiteboardSubscriptions.delete(te(e)),null==(t=this.socket)||t.emit("whiteboard:leave",{lessonId:e.lessonId}),0===this.whiteboardSubscriptions.size&&this.disconnect({clearSubscriptions:!1})}emitWhiteboardPreview(e){var t;null==(t=this.socket)||t.volatile.emit("whiteboard:preview",e)}onWhiteboardPreview(e){return this.previewHandlers.add(e),()=>this.previewHandlers.delete(e)}onWhiteboardSaved(e){return this.savedHandlers.add(e),()=>this.savedHandlers.delete(e)}disconnect(){var e,t;let a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};null==(e=this.socket)||e.disconnect(),this.socket=null,this.tokenUsedForConnection=null,null==(t=this.offAuthSessionChange)||t.call(this),this.offAuthSessionChange=null,a.clearSubscriptions&&this.whiteboardSubscriptions.clear()}replayWhiteboardSubscriptions(){this.whiteboardSubscriptions.forEach(e=>{var t;null==(t=this.socket)||t.emit("whiteboard:join",e,e=>{(null==e?void 0:e.preview)&&this.previewHandlers.forEach(t=>t(e.preview))})})}reconnectWithLatestToken(){if(!this.socket)return;let e=this.whiteboardSubscriptions.size>0;this.disconnect({clearSubscriptions:!1}),e&&this.connect()}constructor(){this.socket=null,this.tokenUsedForConnection=null,this.whiteboardSubscriptions=new Map,this.offAuthSessionChange=null,this.previewHandlers=new Set,this.savedHandlers=new Set}}new tt;let ta={getConversations:async()=>(await n.uE.get("/api/v1/conversations")).data,getConversationById:async e=>(await n.uE.get("/api/v1/conversations/".concat(e))).data,createConversation:async e=>(await n.uE.post("/api/v1/conversations",e)).data,createDirectConversation:async e=>(await n.uE.post("/api/v1/conversations/direct",e)).data,async getMessages(e,t){let a;if(!e||"undefined"===e)throw Error("conversationId is required");let r=new URLSearchParams;(null==t?void 0:t.limit)&&r.append("limit",t.limit.toString()),(null==t?void 0:t.before)&&r.append("before",t.before),(null==t?void 0:t.after)&&r.append("after",t.after);let i="/api/v1/conversations/".concat(e,"/messages").concat(r.toString()?"?".concat(r.toString()):"");for(let e=0;e<3;e++)try{return(await n.uE.get(i)).data}catch(n){var o;a=n;let t=(0,c.F0)(n)?null==(o=n.response)?void 0:o.status:void 0;if((502===t||503===t||504===t)&&e<2){await new Promise(t=>setTimeout(t,400*(e+1)));continue}throw n}throw a},async listMessages(e){if(!(null==e?void 0:e.conversation_id)||"undefined"===e.conversation_id)throw Error("conversation_id is required");return(await n.uE.post("/api/v1/conversations/messages",e)).data},sendMessage:async(e,t)=>(await n.uE.post("/api/v1/conversations/".concat(e,"/messages"),t)).data,markAsRead:async(e,t)=>(await n.uE.post("/api/v1/conversations/".concat(e,"/read"),{role:t})).data,async markAsReadTutor(e){return this.markAsRead(e,"tutor")},async uploadFile(e,t){if(o(e.size)){let a=await u({purpose:"chat-file-generic",file:e,fileName:e.name,fileSize:e.size,contentType:e.type||"application/octet-stream"},t);return{file_url:a.publicUrl,file_name:e.name,file_size:e.size,file_type:e.type||a.contentType,success:!0}}let a=new FormData;return a.append("file",e),(await n.uE.post("/api/v1/chat/file-upload",a,{headers:{"Content-Type":"multipart/form-data"},timeout:6e5})).data},async uploadFileToConversation(e,t,a){if(o(t.size)){let n=await u({purpose:"chat-file-conversation",file:t,fileName:t.name,fileSize:t.size,contentType:t.type||"application/octet-stream",context:{conversationId:e}},a);return{file_url:n.publicUrl,file_name:t.name,file_size:t.size,file_type:t.type||n.contentType}}let r=new FormData;return r.append("file",t),(await n.uE.post("/api/v1/chat/conversations/".concat(e,"/files"),r,{headers:{"Content-Type":"multipart/form-data"},timeout:6e5})).data},async getStudentConversationsUnreadCount(){let e="/api/v1/student/conversations/unread-count";
1return(0,k.cD)((0,k.cM)("GET",e),async()=>(await n.uE.get(e)).data)},async getStudentConversations(e){let t=new URLSearchParams;(null==e?void 0:e.page)!=null&&t.set("page",String(e.page)),(null==e?void 0:e.limit)!=null&&t.set("limit",String(e.limit));let a=t.toString(),r="/api/v1/student/conversations".concat(a?"?".concat(a):"");return(0,k.cD)((0,k.cM)("GET",r),async()=>(await n.uE.get(r)).data)},listStudentConversationsPage:async e=>(await n.uE.post("/api/v1/student/conversations/page",null!=e?e:{})).data,async getTutorConversationsUnreadCount(){let e="/api/v1/tutor/conversations/unread-count";return(0,k.cD)((0,k.cM)("GET",e),async()=>(await n.uE.get(e)).data)},getTutorConversations:async()=>(await n.uE.get("/api/v1/tutor/conversations")).data},tn={profile_photo:"tutor-application-profile-photo",certificate:"tutor-application-certificate",demo_video:"tutor-application-demo-video",screenshot:"tutor-application-screenshot",support_document:"tutor-application-support-document"},tr=new Set(["PDF","JPG","JPEG","PNG","GIF","MP4","MOV","AVI","MP3","WAV","TXT"]),ti={async getMaterials(e){var t;let a=null==e||null==(t=e.search)?void 0:t.trim();return(await n.uE.post("/api/v1/tutor/materials/page-self",{..."number"==typeof(null==e?void 0:e.limit)?{limit:e.limit}:{},...a?{search:a}:{}})).data},async getPlatformMaterials(e){var t;let a=null==e||null==(t=e.search)?void 0:t.trim();return(await n.uE.post("/api/v1/tutor/materials/page-platform",{..."number"==typeof(null==e?void 0:e.limit)?{limit:e.limit}:{},...a?{search:a}:{}})).data},previewMaterial:async e=>(await n.uE.post("/api/v1/tutor/materials/".concat(e,"/preview"))).data,createMaterial:async e=>(await n.uE.post("/api/v1/tutor/materials/create",e)).data,getDashboard:async e=>((null==e?void 0:e.fresh)&&(0,k.ss)(),(0,k.cD)((0,k.cM)("GET","/api/v1/tutor/dashboard"),async()=>(await n.uE.get("/api/v1/tutor/dashboard")).data)),getProfile:async()=>(await n.uE.get("/api/v1/tutor/profile")).data,updateProfile:async e=>(await n.uE.put("/api/v1/tutor/profile",e)).data,setProfilePublished:async e=>(await n.uE.put("/api/v1/tutor/profile/published",{published:e})).data,getLessons:async e=>(await n.uE.post("/api/v1/tutor/lesson/page",{page:null==e?void 0:e.page,limit:null==e?void 0:e.limit,statuses:null==e?void 0:e.statuses,upcoming:null==e?void 0:e.upcoming,include_summary:null==e?void 0:e.include_summary})).data,getCatalogUpcoming:async e=>(await n.uE.post("/api/v1/lessons/tutor/catalog/upcoming",{page:null==e?void 0:e.page,limit:null==e?void 0:e.limit,statuses:null==e?void 0:e.statuses})).data,getCatalogHistory:async e=>(await n.uE.post("/api/v1/lessons/tutor/catalog/history",{page:null==e?void 0:e.page,limit:null==e?void 0:e.limit,statuses:null==e?void 0:e.statuses})).data,async pageStudents(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(await n.uE.post("/api/v1/tutor/students/page",e)).data},getStudentProfile:async e=>(await n.uE.post("/api/v1/tutor/students/profile",e)).data,listStudentTags:async()=>(await n.uE.get("/api/v1/tutor-student-tags")).data,updateStudentTags:async e=>(await n.uE.post("/api/v1/tutor-student-tags/update",e)).data,getEarningsSummary:async()=>(await n.uE.get("/api/v1/tutor/earnings")).data,listEarningsTransactions:async e=>(await n.uE.post("/api/v1/tutor/earnings/transactions",{page:null==e?void 0:e.page,limit:null==e?void 0:e.limit})).data,listPayoutRequests:async()=>(await n.uE.get("/api/v1/tutor/payouts")).data,createPayoutRequest:async e=>(await n.uE.post("/api/v1/tutor/payouts",void 0!==e?{amount:e}:{})).data,async getPerformance(e){let t=new URLSearchParams;(null==e?void 0:e.range)&&t.append("range",e.range),(null==e?void 0:e.quarterId)&&t.append("quarterId",e.quarterId);let a="/api/v1/tutor/performance".concat(t.toString()?"?".concat(t.toString()):"");return(await n.uE.get(a)).data},getAvailableQuarters:async()=>(await n.uE.get("/api/v1/tutor/performance/quarters")).data,evaluateTier:async e=>(await n.uE.post("/api/v1/tutor/tier-evaluation",e||{})).data,getConversations:async()=>(await n.uE.get("/api/v1/tutor/conversations")).data,getApplication:async()=>
1(0,k.cD)((0,k.cM)("GET","/api/v1/tutor/application"),async()=>(await n.uE.get("/api/v1/tutor/application")).data),async submitApplication(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return(await n.uE.post("/api/v1/tutor/application",{...e,isDraft:t})).data},async uploadTeachingMaterialFile(e,t){var a;let r=null==(a=e.name.split(".").pop())?void 0:a.toUpperCase();if(!r||!tr.has(r))throw Error("Unsupported file type. Word and PowerPoint uploads are not supported; use PDF, images, video, audio, or text.");let s=function(e){let t=e.name.toLowerCase(),a=(e.type||"").toLowerCase();return(!t.endsWith(".ppt")||!!t.endsWith(".pptx"))&&(a.includes("pdf")||a.includes("presentationml")||t.endsWith(".pdf")||t.endsWith(".pptx"))}(e),l=s?crypto.randomUUID():void 0,c=s?crypto.randomUUID():void 0;if(o(e.size)){let a=await u({purpose:"tutor-teaching-material-file",file:e,fileName:e.name,fileSize:e.size,contentType:e.type||"application/octet-stream",context:l&&c?{materialId:l,resourceVersion:c}:void 0},t);return{file_url:a.publicUrl,file_name:e.name,file_size:e.size,file_type:e.type||a.contentType,success:!0,materialId:l,resourceVersion:c}}let d=new FormData;d.append("file",e);let p=i(e.size,t);return{...(await n.uE.post("/api/v1/chat/file-upload",d,{headers:{"Content-Type":"multipart/form-data"},timeout:6e5,onUploadProgress:t?e=>{var t,a;p(null!=(t=e.loaded)?t:0,null!=(a=e.total)?a:void 0)}:void 0})).data,materialId:l,resourceVersion:c}},async uploadApplicationFile(e,t,a){if(o(e.size))return{success:!0,file_url:(await u({purpose:tn[t],file:e,fileName:e.name,fileSize:e.size,contentType:e.type||"application/octet-stream"},a)).publicUrl,file_type:t,file_name:e.name,file_size:e.size};let r=new FormData;r.append("file",e),r.append("fileType",t);let s=i(e.size,a);return(await n.uE.post("/api/v1/tutor/application/upload",r,{headers:{"Content-Type":"multipart/form-data"},timeout:"demo_video"===t?6e5:12e4,onUploadProgress:a?e=>{var t,a;s(null!=(t=e.loaded)?t:0,null!=(a=e.total)?a:void 0)}:void 0})).data},getProfileCompletionStatus:async()=>(await n.uE.get("/api/v1/tutor/profile/completion-status")).data,getOnboardingStatus:async()=>(await n.uE.get("/api/v1/tutor/onboarding-status")).data,getRecentLowRatings:async()=>(await n.uE.get("/api/v1/tutor/feedback/recent-low-ratings")).data,getPayoutAccounts:async()=>(await n.uE.get("/api/v1/tutor/payment/accounts")).data,async getPaymentSetupStatus(){return this.getPayoutAccounts()},updatePayPalAccount:async e=>(await n.uE.put("/api/v1/tutor/payment/paypal",{paypalEmail:e})).data,verifyPayPalEmail:async e=>(await n.uE.post("/api/v1/tutor/payment/paypal/verify",{token:e})).data,resendPayPalVerification:async()=>(await n.uE.post("/api/v1/tutor/payment/paypal/resend-verification")).data,updateWiseAccount:async e=>(await n.uE.put("/api/v1/tutor/payment/wise",{wiseEmail:e})).data,verifyWiseEmail:async e=>(await n.uE.post("/api/v1/tutor/payment/wise/verify",{token:e})).data,resendWiseVerification:async()=>(await n.uE.post("/api/v1/tutor/payment/wise/resend-verification")).data,async requestPayout(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"paypal";return(await n.uE.post("/api/v1/tutor/payout/request",{amount:e,provider:t})).data},getPayoutHistory:async()=>(await n.uE.get("/api/v1/tutor/payout/history")).data.payouts||[]},to={studentBookableSlotsQuery:async e=>(await n.uE.post("/api/v2/tutors/bookable-slots/query",e)).data},ts={scheduleQuery:async e=>(await n.uE.post("/api/v1/tutor/me/schedule/query",e)).data,daySummaryQuery:async e=>(await n.uE.post("/api/v1/tutor/me/schedule/day-summary/query",e)).data,weeklySummaryQuery:async e=>(await n.uE.post("/api/v1/tutor/me/schedule/weekly-summary/query",e)).data,rulesEdit:async e=>(await n.uE.post("/api/v1/tutor/me/schedule/rules/edit",e)).data,additionsEdit:async e=>(await n.uE.post("/api/v1/tutor/me/schedule/additions",e)).data,timeOffEdit:async e=>(await n.uE.post("/api/v1/tutor/me/time-off/edit",e)).data,availableDelete:async e=>(await n.uE.post("/api/v1/tutor/me/schedule/available/delete",e)).data,oneTimeDelete:async e=>(await n.uE.post("/api/v1/tutor/me/schedule/one-time/delete",e)).data,scheduleClear:async()=>(await n.uE.post("/api/v1/tutor/me/schedule/clear")).data,async rulesClear(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(await n.uE.post("/api/v1/tutor/me/schedule/rules/clear",e)).data},async additionsClear(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(await n.uE.post("/api/v1/tutor/me/schedule/additions/clear",e)).data},async timeOffClear(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(await n.uE.post("/api/v1/tutor/me/time-off/clear",e)).data},timezoneUpdate:async e=>(await n.uE.post("/api/v1/tutor/me/timezone",{timezone:e})).data},tl={status:async()=>(await n.uE.get("/api/v1/tutor/me/google-calendar/status")).data,connect:async()=>(await n.uE.post("/api/v1/tutor/me/google-calendar/connect")).data,disconnect:async()=>(await n.uE.post("/api/v1/tutor/me/google-calendar/disconnect")).data,sync:async()=>(await n.uE.post("/api/v1/tutor/me/google-calendar/sync")).data},tu={async getTutors(e){var t,a,r,i,o,s,l,u;return(await n.uE.post("/api/v1/tutors",{page:null!=(l=null==e?void 0:e.page)?l:1,limit:null!=(u=null==e?void 0:e.limit)?u:10,...(null==e||null==(t=e.search)?void 0:t.trim())?{search:e.search.trim()}:{},...(null==e||null==(a=e.locale)?void 0:a.trim())?{locale:e.locale.trim()}:{},...(null==e||null==(r=e.accents)?void 0:r.length)?{accents:e.accents}:{},...(null==e||null==(i=e.teachingLanguage)?void 0:i.trim())?{teachingLanguage:e.teachingLanguage.trim()}:{},...(null==e||null==(o=e.studentTimezone)?void 0:o.trim())?{studentTimezone:e.studentTimezone.trim()}:{},...(null==e||null==(s=e.availWindows)?void 0:s.length)?{availWindows:e.availWindows}:{},...(null==e?void 0:e.sort)&&"default"!==e.sort?{sort:e.sort}:{}},{signal:null==e?void 0:e.signal})).data},getTutorById:async e=>(await n.uE.get("/api/v1/tutors/".concat(e))).data,async getTutorProfile(e,t){let a=(null==t?void 0:t.trim())?"?locale=".concat(encodeURIComponent(t.trim())):"";return(await n.uE.get("/api/v1/tutors/".concat(e,"/profile").concat(a))).data},getTutorPublicReviews:async e=>(await n.uE.post("/api/v1/tutors/public-reviews",{tutor_id:e})).data,async getRecommendations(e){var t;let a=new URLSearchParams;(null==e?void 0:e.refinement)&&a.append("refinement",JSON.stringify(e.refinement)),(null==e?void 0:e.limit)&&a.append("limit",e.limit.toString()),(null==e?void 0:e.locale)&&a.append("locale",e.locale),(null==e||null==(t=e.excludeTutorIds)?void 0:t.length)&&a.append("excludeTutorIds",JSON.stringify(e.excludeTutorIds));let r="/api/v1/tutor-recommendations".concat(a.toString()?"?".concat(a.toString()):"");return(await n.uE.get(r)).data}},tc={async listFavorites(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:6,{data:a}=await n.uE.post("/api/v1/student/tutor-favorites/list",{page:e,limit:t});return a},async listLessonHistory(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:6,{data:a}=await n.uE.post("/api/v1/student/tutors/lesson-history",{page:e,limit:t});return a},async addFavorite(e){let{data:t}=await n.uE.post("/api/v1/student/tutor-favorites/add",{tutorProfileId:e});return t},async removeFavorite(e){let{data:t}=await n.uE.post("/api/v1/student/tutor-favorites/remove",{tutorProfileId:e});return t},async getFavoriteStatuses(e){if(0===e.length)return{statuses:{}};let{data:t}=await n.uE.post("/api/v1/student/tutor-favorites/status",{tutorProfileIds:[...new Set(e)].slice(0,100)});return t}};function td(e){if(e&&"object"==typeof e&&"success"in e&&"data"in e){if(!1===e.success)throw Error(e.error||"Request failed");return e.data}return e}let tp={getOnboardingStatus:async()=>td((await n.uE.get("/api/v1/student/onboarding/status")).data),saveOnboarding:async e=>td((await n.uE.post("/api/v1/student/onboarding/save",e)).data),completeOnboarding:async e=>td((await n.uE.post("/api/v1/student/onboarding/complete",e)).data),getOnboardingStatusV2:async()=>td((await n.uE.get("/api/v2/student/onboarding/status")).data),saveOnboardingV2:async e=>td((await n.uE.post("/api/v2/student/onboarding/save",e)).data),completeOnboardingV2:async e=>td((await n.uE.post("/api/v2/student/onboarding/complete",e)).data),getConversations:async()=>(await n.uE.get("/api/v1/student/conversations")).data,createReport:async e=>(await n.uE.post("/api/v1/student/report",e)).data},tg={getStats:async()=>(await n.uE.get("/api/v1/student/dashboard/stats")).data,getLessonSummaryPreviews:async()=>(await n.uE.get("/api/v1/student/dashboard/lesson-summary-previews")).data,getWordMaze:async()=>(await n.uE.get("/api/v1/student/dashboard/word-maze")).data};var tv=a(60536);let tm={async getRoles(){let e=(0,tv.ZS)((0,n.iD)());return e||(0,k.cD)((0,k.cM)("GET","/api/v1/user/roles"),async()=>{let e=(0,tv.ZS)((0,n.iD)());if(e)return e;let t=function(e){if(e&&"object"==typeof e){if("data"in e&&Array.isArray(e.data))return e.data;if("success"in e&&!1===e.success)throw Error(e.error||"Failed to get roles");if(Array.isArray(e))return e}return[]}((await n.uE.get("/api/v1/user/roles")).data);return(0,tv.Mq)((0,n.iD)(),t),t})},getPreferences:async()=>(await n.uE.get("/api/v1/user/preferences")).data,updatePreferences:async e=>(await n.uE.put("/api/v1/user/preferences",e)).data,getPreferencesV2:async()=>td((await n.uE.get("/api/v2/user/preferences")).data),updatePreferencesV2:async e=>td((await n.uE.put("/api/v2/user/preferences",e)).data),updateDisplayLanguageIfPresent:async e=>td((await n.uE.patch("/api/v2/user/preferences/display-language",{display_language:e})).data),updateTimezoneV2:async e=>td((await n.uE.patch("/api/v2/user/preferences/timezone",{timezone:e})).data),getTimezones:async()=>
1(0,k.cD)((0,k.cM)("GET","/api/v1/user/timezones"),async()=>(await n.uE.get("/api/v1/user/timezones")).data),getLanguages:async()=>(await n.uE.get("/api/v1/user/languages")).data};function ty(e){return"".concat("local:assistant:").concat(e)}let tf={openConversation:e=>n.uE.post("/api/v2/grace/conversations/open",e,{timeout:9e4}).then(e=>e.data),listMessages:e=>n.uE.post("/api/v2/grace/conversations/messages",e,{timeout:9e4}).then(e=>e.data),listConversations:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return n.uE.post("/api/v2/grace/conversations/list",e,{timeout:9e4}).then(e=>e.data)},searchConversations:e=>n.uE.post("/api/v2/grace/conversations/search",e,{timeout:9e4}).then(e=>e.data),deleteConversation:e=>n.uE.post("/api/v2/grace/conversations/delete",e,{timeout:9e4}).then(()=>void 0),pinConversations:e=>n.uE.post("/api/v2/grace/conversations/pin",e,{timeout:9e4}).then(e=>e.data),renameConversation:e=>n.uE.post("/api/v2/grace/conversations/rename",e,{timeout:9e4}).then(e=>e.data),readConversationTitle:e=>n.uE.post("/api/v2/grace/conversations/title",e,{timeout:9e4}).then(e=>e.data),sendMessage:e=>n.uE.post("/api/v2/grace/chat",e,{timeout:13e4}).then(e=>e.data),sendMessageStream:async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a={"Content-Type":"application/json",Accept:"text/event-stream"},r=(0,n.iD)();r&&(a.Authorization="Bearer ".concat(r));let i=await fetch("".concat((0,n.AK)(),"/api/v2/grace/chat"),{method:"POST",headers:a,body:JSON.stringify(e),signal:AbortSignal.timeout(13e4)});if(!i.ok)throw await tb(i);if(!i.body)throw Error("Empty Grace stream");let o=null;for await(let e of th(i.body)){var s,l;if(null==(s=t.onEvent)||s.call(t,e),"done"===e.type&&(o=e.payload),"error"===e.type)throw Object.assign(Error(e.payload.message),{response:{status:500,data:{type:"about:blank",title:e.payload.message,status:500,code:null!=(l=e.payload.code)?l:"stream_error",requestId:"00000000-0000-4000-8000-000000000000"}}})}if(!o)throw Error("Grace stream ended without a done event");return o},submitWorkflowAction:e=>n.uE.post("/api/v2/grace/workflow-actions",e,{timeout:9e4}).then(e=>e.data),refreshWorkflowStatus:e=>n.uE.post("/api/v2/grace/workflow-status/refresh",e,{timeout:9e4}).then(e=>e.data),findResumableTasks:()=>n.uE.get("/api/v2/grace/tasks/resumable").then(e=>e.data)};async function*th(e){let t=e.getReader(),a=new TextDecoder,n="";try{for(;;){let{done:e,value:r}=await t.read();if(e)break;let i=(n+=a.decode(r,{stream:!0})).indexOf("\n\n");for(;i>=0;){let e=n.slice(0,i);n=n.slice(i+2);let t=tw(e);t&&(yield t),i=n.indexOf("\n\n")}}if(n.trim()){let e=tw(n);e&&(yield e)}}finally{t.releaseLock()}}function tw(e){let t="message",a="";for(let n of e.split("\n"))n.startsWith("event:")?t=n.slice(6).trim():n.startsWith("data:")&&(a+=n.slice(5).trim());if(!a)return null;try{return{type:t,payload:JSON.parse(a)}}catch(e){return null}}async function tb(e){let t="Grace is temporarily unavailable. Please try again.",a=await e.text(),n={type:"about:blank",title:tE(a)?t:a||"HTTP ".concat(e.status),status:e.status,code:409===e.status?"run_in_progress":"unknown",requestId:"00000000-0000-4000-8000-000000000000"};if(a)try{var r,i,o,s;let l=JSON.parse(a),u="string"==typeof l.title?l.title.trim():"string"==typeof l.message?l.message.trim():"";n={type:null!=(r=l.type)?r:n.type,title:u&&!tE(u)?u:t,status:null!=(i=l.status)?i:e.status,code:null!=(o=l.code)?o:n.code,detail:l.detail,requestId:null!=(s=l.requestId)?s:n.requestId,latestTask:l.latestTask}}catch(e){}return Object.assign(Error(n.title),{response:{status:e.status,data:n}})}function tE(e){let t=e.trim();return!!t&&(t.startsWith("{")||t.startsWith("[")||t.includes('"statusCode"')||t.includes("Http Exception"))}let tS={async uploadChunk(e,t,a){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"video/webm",i=new FileReader,o=await new Promise((e,t)=>{i.onload=()=>{e(i.result.split(",")[1])},i.onerror=t,i.readAsDataURL(a)});return(await n.uE.post("/api/v1/agora/recording/chunk",{lessonId:e,chunkIndex:t,data:o,mimeType:r})).data},saveRecording:async(e,t,a,r,i,o)=>(await n.uE.post("/api/v1/agora/recording/save",{lessonId:e,recordingUrls:t,duration:a,startTime:r,endTime:i,metadata:o})).data,getRecording:async e=>(await n.uE.get("/api/v1/agora/recording/".concat(e))).data,getRecordingById:async e=>(await n.uE.get("/api/v1/agora/recording/by-id/".concat(e))).data,async getUserRecordings(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:10;return(await n.uE.get("/api/v1/agora/recordings",{params:{page:e,limit:t}})).data},createUploadHandler(e){let t=[];return async(a,n)=>{let r=await this.uploadChunk(e,n,a);return t.push(r.url),r.url}},getDeviceTestCredentials:async()=>(await n.uE.post("/api/v1/agora/device-test-credentials")).data,acquireResource:async(e,t,a)=>
1(await n.uE.post("/api/v1/agora/cloud-recording/acquire",{lessonId:e,channelName:t,uid:a})).data,startCloudRecording:async(e,t,a,r,i)=>(await n.uE.post("/api/v1/agora/cloud-recording/start",{lessonId:e,channelName:t,uid:a,resourceId:r,token:i})).data,stopCloudRecording:async e=>(await n.uE.post("/api/v1/agora/cloud-recording/stop",{lessonId:e})).data,queryCloudRecording:async e=>(await n.uE.get("/api/v1/agora/cloud-recording/status/".concat(e),{timeout:12e3})).data,getLessonTranscript:async e=>(await n.uE.get("/api/v1/agora/lessons/".concat(e,"/transcript"))).data,async startRecordingSession(e,t,a){let{resourceId:n}=await this.acquireResource(e,t,a);return this.startCloudRecording(e,t,a,n)},async getSignedUploadUrl(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"recording.webm",a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"video/webm";return(await n.uE.post("/api/v1/agora/recording/signed-url",{lessonId:e,fileName:t,contentType:a})).data},async uploadToOSS(e,t,a){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"video/webm",r=arguments.length>4?arguments[4]:void 0;return new Promise((i,o)=>{let s=new XMLHttpRequest;r&&s.upload.addEventListener("progress",e=>{e.lengthComputable&&r(Math.round(e.loaded/e.total*100))}),s.addEventListener("load",()=>{s.status>=200&&s.status<300?i():o(Error("Upload failed with status ".concat(s.status,": ").concat(s.responseText)))}),s.addEventListener("error",()=>{o(Error("Upload failed due to network error"))}),s.addEventListener("timeout",()=>{o(Error("Upload timed out"))}),s.timeout=6e5,s.open("PUT",e,!0),s.setRequestHeader("Content-Type",n),s.setRequestHeader("Authorization","Bearer ".concat(t)),s.send(a)})},async confirmDirectUpload(e,t,a,r,i){let o=arguments.length>5&&void 0!==arguments[5]&&arguments[5],s=arguments.length>6?arguments[6]:void 0;return(await n.uE.post("/api/v1/agora/recording/confirm-upload",{lessonId:e,publicUrl:t,duration:a,startTime:r,endTime:i,convertToMp4:o,metadata:s})).data},async directUpload(e,t,a,n,r,i){let o=t.type||"video/webm",s="recording_".concat(Date.now(),".webm"),{signedUrl:l,token:u,publicUrl:c}
1=await this.getSignedUploadUrl(e,s,o);return await this.uploadToOSS(l,u,t,o,r),await this.confirmDirectUpload(e,c,a,n.toISOString(),new Date().toISOString(),!1,i),c},finalizeChunkedUpload:async(e,t,a,r,i,o,s)=>(await n.uE.post("/api/v1/agora/recording/finalize-chunks",{lessonId:e,sessionId:t,chunkUrls:a,duration:r,startTime:i,endTime:o,metadata:s},{timeout:3e5})).data,convertToMp4:async e=>(await n.uE.post("/api/v1/agora/recording/convert/".concat(e))).data,requestRecordingDownload:async e=>(await n.uE.get("/api/v1/agora/recording/download/".concat(e))).data,async downloadRecordingStream(e,t,a){let r,i=(0,n.iD)();if(!i)throw Error("Not authenticated");let o=n.uE.defaults.baseURL||"",s=e.startsWith("/")?e:"/".concat(e),l="".concat(o).concat(s),u=window;if("function"==typeof u.showSaveFilePicker)try{r=await u.showSaveFilePicker({suggestedName:t,types:[{description:"MP4 video",accept:{"video/mp4":[".mp4"]}}]})}catch(e){if("AbortError"===(e instanceof Error?e.name:""))return"cancelled";throw e instanceof Error?e:Error(String(e))}let c=await fetch(l,{headers:{Authorization:"Bearer ".concat(i)}});if(!c.ok){let e=await c.text(),t="HTTP ".concat(c.status);try{let a=JSON.parse(e);(null==a?void 0:a.message)&&(t=a.message)}catch(a){e&&(t=e.slice(0,300))}throw Error(t)}if(r&&c.body)try{let e=await r.createWritable();return await c.body.pipeTo(e),"saved"}catch(e){throw console.warn("[recordingClient] pipeTo failed while saving recording stream",e),e instanceof Error?e:Error(String(e))}if((null==a?void 0:a.allowBlobFallback)===!1){if("function"!=typeof u.showSaveFilePicker)throw Error("Your browser does not support direct file saving. Please use Chrome or Edge and try again.");throw Error("Failed to save the video stream. Please try again.")}let d=await c.blob(),p=URL.createObjectURL(d);try{let e=document.createElement("a");e.href=p,e.download=t,e.rel="noopener noreferrer",document.body.appendChild(e),e.click(),e.remove()}finally{URL.revokeObjectURL(p)}return"saved"},checkFFmpegStatus:async()=>(await n.uE.get("/api/v1/agora/recording/ffmpeg-status")).data},tk={getMyReferralCode:async()=>(await n.uE.get("/api/v1/referrals/my-code")).data,getMyStats:async()=>(await n.uE.get("/api/v1/referrals/my-stats")).data,async getMyReferrals(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(await n.uE.get("/api/v1/referrals/my-referrals",{params:e.applicationSubmitted?{applicationSubmitted:!0}:void 0})).data},async validateCode(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"student";return(await n.uE.post("/api/v1/referrals/validate-code",{code:e,kind:t})).data},attributeTutorReferral:async e=>(await n.uE.post("/api/v1/tutor-referrals/attribute",e)).data,attributeReferral:async e=>(await n.uE.post("/api/v1/referrals/attribute",e)).data,async getAllReferrals(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=new URLSearchParams;void 0!==e.page&&t.append("page",e.page.toString()),void 0!==e.limit&&t.append("limit",e.limit.toString()),e.status&&t.append("status",e.status),e.riskLevel&&t.append("riskLevel",e.riskLevel),e.search&&t.append("search",e.search);let a="/api/v1/referrals/admin/list".concat(t.toString()?"?".concat(t.toString()):"");return(await n.uE.get(a)).data},getReferralDetails:async e=>(await n.uE.get("/api/v1/referrals/admin/".concat(e))).data,approveReward:async e=>(await n.uE.post("/api/v1/referrals/admin/reward/approve",{rewardId:e})).data,holdReward:async(e,t)=>(await n.uE.post("/api/v1/referrals/admin/reward/hold",{rewardId:e,reason:t})).data,voidReward:async(e,t)=>(await n.uE.post("/api/v1/referrals/admin/reward/void",{rewardId:e,reason:t})).data,resolveFraudFlag:async(e,t)=>(await n.uE.post("/api/v1/referrals/admin/flag/".concat(e,"/resolve"),{notes:t})).data},t_={getMyCode:async()=>(await n.uE.get("/api/v1/student-referrals/my-code")).data,getMySummary:async()=>(await n.uE.post("/api/v1/student-referrals/my-summary",{})).data,async getMyReferrals(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(await n.uE.post("/api/v1/student-referrals/my-referrals",e)).data},attribute:async e=>(await n.uE.post("/api/v1/student-referrals/attribute",e)).data,getMyBindStatus:async e=>(await n.uE.get("/api/v1/student-referrals/my-bind-status",{params:e?{browserTimezone:e}:void 0})).data,bindMyReferral:async e=>(await n.uE.post("/api/v1/student-referrals/bind-referral",e)).data},tI={submit:async e=>(await n.uE.post("/api/v1/business/contact",e)).data},tA={translate:async e=>(await n.uE.post("/api/v1/translate",e)).data,deepSeekTeaching:async e=>(await n.uE.post("/api/v1/translate/deepseek",e)).data}
1,tP=20;function tC(e){var t;let{data:a}=S(e);if(null==a||"object"!=typeof a)return null;let n=null==(t=a.message)||"object"!=typeof t?null:"string"==typeof t.code&&"string"==typeof t.message?{code:t.code,message:t.message,details:t.details||void 0}:null;if(n)return n;if("string"==typeof a.code&&"string"==typeof a.message)return{code:a.code,message:a.message,details:a.details||void 0};if("string"==typeof a.message)try{let e=JSON.parse(a.message);if(e&&"string"==typeof e.code)return{code:String(e.code),message:String(e.message||""),details:e.details||void 0}}catch(e){}return null}let tT={async listTopics(e){var t,a,r;let i=new URLSearchParams;(null==e?void 0:e.page)&&i.append("page",String(e.page)),(null==e?void 0:e.limit)&&i.append("limit",String(e.limit));let o=null==e||null==(t=e.keyword)?void 0:t.trim();o&&i.append("keyword",o);let s=null==e||null==(a=e.interest)?void 0:a.trim().toLowerCase();s&&i.append("interest",s);let l=null==e||null==(r=e.industry)?void 0:r.trim().toLowerCase();l&&i.append("industry",l);let u="/api/v1/topics".concat(i.toString()?"?".concat(i.toString()):"");return(await n.uE.get(u)).data},getTopic:async e=>(await n.uE.get("/api/v1/topics/".concat(e))).data,getTopicDetail:async e=>(await n.uE.post("/api/v1/topics/detail",{topicId:e.topicId,...void 0!==e.share?{share:e.share}:{}})).data,getMyFeedback:async(e,t)=>(await n.uE.get("/api/v1/topics/".concat(e,"/feedback/me?difficulty=").concat(t))).data,upsertFeedback:async(e,t)=>(await n.uE.post("/api/v1/topics/".concat(e,"/feedback"),t)).data,getFeatureFlags:async()=>(await n.uE.get("/api/v1/topics/feature-flags")).data,async resolveVersion(e,t){let a=new URLSearchParams;(null==t?void 0:t.target_cefr)&&a.append("target_cefr",t.target_cefr),(null==t?void 0:t.display_band)&&a.append("display_band",t.display_band),(null==t?void 0:t.language_level)&&a.append("language_level",t.language_level);let r=a.toString();return(await n.uE.get("/api/v1/topics/".concat(e,"/resolve").concat(r?"?".concat(r):""))).data},createAdaptation:async(e,t)=>(await n.uE.post("/api/v1/topics/".concat(e,"/adaptations"),t)).data},tx={getTopicHealth:async()=>(await n.uE.get("/api/v1/my/topics/health")).data,getQuota:async()=>(await n.uE.get("/api/v1/my/topics/quota")).data,async listTopics(e){var t,a,r;let i=new URLSearchParams;(null==e?void 0:e.page)&&i.append("page",String(e.page)),(null==e?void 0:e.limit)&&i.append("limit",String(e.limit)),(null==e?void 0:e.status)&&i.append("status",e.status);let o=null==e||null==(t=e.keyword)?void 0:t.trim();o&&i.append("keyword",o),(null==e?void 0:e.user_tag)&&i.append("user_tag",e.user_tag);let s=null==e||null==(a=e.interest)?void 0:a.trim().toLowerCase();s&&i.append("interest",s);let l=null==e||null==(r=e.industry)?void 0:r.trim().toLowerCase();l&&i.append("industry",l);let u="/api/v1/my/topics".concat(i.toString()?"?".concat(i.toString()):"");return(await n.uE.get(u)).data},listUserTagFacets:async()=>(await n.uE.get("/api/v1/my/topic-user-tags")).data,setTopicUserTags:async(e,t)=>(await n.uE.patch("/api/v1/my/topics/".concat(encodeURIComponent(e),"/user-tags"),{user_tags:t})).data,batchUpdateTopicUserTags:async e=>(await n.uE.patch("/api/v1/my/topics/user-tags/batch",e)).data,async renameUserTag(e,t){await n.uE.patch("/api/v1/my/topic-user-tags",{from:e,to:t})},async deleteUserTag(e){await n.uE.delete("/api/v1/my/topic-user-tags",{params:{tag:e}})},createTopic:async e=>(await n.uE.post("/api/v1/my/topics",e)).data,getTopic:async e=>(await n.uE.get("/api/v1/my/topics/".concat(e))).data,getTopicJob:async e=>(await n.uE.get("/api/v1/my/topics/jobs/".concat(e))).data,updateTopicContent:async(e,t)=>(await n.uE.patch("/api/v1/my/topics/".concat(e,"/content"),t)).data,updateTopicArticleAnnotations:async e=>(await n.uE.patch("/api/v1/my/topics/article-annotations",e)).data,patchTopicField:async e=>(await n.uE.post("/api/v1/my/topics/patch-field",e)).data,generateTopicImage:async e=>(await n.uE.post("/api/v1/my/topics/".concat(e,"/generate-image"))).data,async deleteTopic(e){await n.uE.delete("/api/v1/my/topics/".concat(e))},async updateTopicStatus(e,t){await n.uE.put("/api/v1/my/topics/".concat(e,"/status"),{status:t})},retryGeneration:async(e,t)=>(await n.uE.post("/api/v1/my/topics/".concat(encodeURIComponent(e),"/retry-generation"),null!=t?t:{})).data,getFeatureFlags:async()=>(await n.uE.get("/api/v1/my/topics/feature-flags")).data,async resolveVersion(e,t){let a=new URLSearchParams;(null==t?void 0:t.target_cefr)&&a.append("target_cefr",t.target_cefr),(null==t?void 0:t.display_band)&&a.append("display_band",t.display_band),(null==t?void 0:t.language_level)&&a.append("language_level",t.language_level);let r=a.toString();return(await n.uE.get("/api/v1/my/topics/".concat(e,"/resolve").concat(r?"?".concat(r):""))).data},createAdaptation:async(e,t)=>(await n.uE.post("/api/v1/my/topics/".concat(e,"/adaptations"),t)).data},tR={async analyze(e,t){let a={sentence:e};return(null==t?void 0:t.locale)&&(a.locale=t.locale),(await n.uE.post("/api/v1/sentence-explorer/analyze",a,{timeout:9e4})).data},async analyzeStream(e,t){let a={sentence:e};t.locale&&(a.locale=t.locale);let r={"Content-Type":"application/json",Accept:"text/event-stream"},i=(0,n.iD)();i&&(r.Authorization="Bearer ".concat(i));let o=await fetch("".concat("https://xpeak.ai","/api/v1/sentence-explorer/analyze-stream"),{method:"POST",headers:r,body:JSON.stringify(a)});if(!o.ok){let e=await o.text(),t=e||"HTTP ".concat(o.status);try{let a=JSON.parse(e);a.message&&(t=a.message)}catch(e){}throw Error(t)}if(!o.body)throw Error("Empty response stream");let s=null;for await(let e of tU(o.body))if(t.onEvent(e),"complete"===e.type&&(s=e.payload),"error"===e.type)throw Error(e.payload.message);return s}};async function*tU(e){let t=e.getReader(),a=new TextDecoder,n="";try{for(;;){let{done:e,value:r}=await t.read();if(e)break;let i=(n+=a.decode(r,{stream:!0})).indexOf("\n\n");for(;i>=0;){let e=n.slice(0,i);n=n.slice(i+2);let t=tM(e);t&&(yield t),i=n.indexOf("\n\n")}}if(n.trim()){let e=tM(n);e&&(yield e)}}finally{t.releaseLock()}}function tM(e){let t="message",a="";for(let n of e.split("\n"))n.startsWith("event:")?t=n.slice(6).trim():n.startsWith("data:")&&(a+=n.slice(5).trim());if(!a)return null;try{let e=JSON.parse(a);return{type:t,payload:e}}catch(e){return null}}let tL={practice:async e=>(await n.uE.post("/api/v1/tenses-explorer/practice",e,{timeout:9e4})).data};function tz(e,t){var a,n;let r={...null!=(a=e.practice_metrics)?a:{},...t.practice_metrics};return"reaction_sparks"in t?{...e,reaction_sparks:t.reaction_sparks,practice_metrics:r}:"puzzle_sparks"in t?{...e,puzzle_sparks:t.puzzle_sparks,practice_metrics:r}:{...e,creation_sparks:Math.max(null!=(n=e.creation_sparks)?n:0,t.creation_sparks),practice_metrics:r}}function tN(e,t,a){return tz(e,{reaction_sparks:t,practice_metrics:{reaction:{sparks:t,...a}}})}function tO(e,t,a){return tz(e,{puzzle_sparks:t,practice_metrics:{puzzle:{sparks:t,...a}}})}function tj(e){return e.replace(/(\s*[(\uFF08][^)\uFF09]*[)\uFF09])+\s*$/u,"").trim()}function tD(e){return tj(e).trim().toLowerCase().replace(/\s+/g," ")}function tF(e){let t=tj(e).trim();return t&&/\s/.test(t)?"phrase":"word"}let tq={resolveLexical:async e=>
1(0,k.cD)((0,k.cM)("POST","/api/v1/word-maze/entries/lexical/resolve",e),async()=>(await n.uE.post("/api/v1/word-maze/entries/lexical/resolve",e)).data),remove:async e=>(await n.uE.post("/api/v1/word-maze/entries/remove",e)).data,add:async e=>(await n.uE.post("/api/v1/word-maze/entries/add",e)).data,presence:async e=>(await n.uE.post("/api/v1/word-maze/entries/presence",e)).data,refresh:async e=>(await n.uE.post("/api/v1/word-maze/entries/refresh",e)).data,query:async e=>(0,k.cD)((0,k.cM)("POST","/api/v1/word-maze/entries/query",e),async()=>(await n.uE.post("/api/v1/word-maze/entries/query",e)).data),detail:async e=>(0,k.cD)((0,k.cM)("POST","/api/v1/word-maze/entries/detail/query",e),async()=>(await n.uE.post("/api/v1/word-maze/entries/detail/query",e)).data),reactionPracticeStart:async e=>(await n.uE.post("/api/v1/word-maze/practice/reaction/start",e)).data,practiceResult:async e=>(await n.uE.post("/api/v1/word-maze/practice/result",e)).data,creationResult:async e=>(await n.uE.post("/api/v1/word-maze/practice/creation/result",e)).data},tV={search:async e=>(await n.uE.post("/api/v1/picture-book-coursewares/search",e||{})).data,detail:async e=>(await n.uE.post("/api/v1/picture-book-coursewares/detail",{courseware_id:e})).data,lessonModule:async e=>(await n.uE.post("/api/v1/picture-book-coursewares/lesson/module",e)).data,vocabularyWordEntries:async e=>(await n.uE.post("/api/v1/picture-book-coursewares/vocabulary/word-entries",e)).data,speakingFeedback:async e=>(await n.uE.post("/api/v1/picture-book-coursewares/speaking/feedback",e)).data},tW={transcribe:async e=>(await n.uE.post("/api/v1/speaking/transcribe",e)).data};function tB(e){return!e||"object"!=typeof e||Array.isArray(e)?null:e}function tH(e){return"string"==typeof e&&e.length>0}function tG(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1/0;return"string"==typeof e&&e.length>0&&e.length<=t&&/^[\x20-\x7E]+$/.test(e)}function tJ(e,t){return tG(e,64)&&e.startsWith(t)&&e.length>t.length}let tX={generateToken:async()=>(await n.uE.post("/api/v1/agora/signaling/token")).data,async generateLessonSession(e){let t=function(e){if(!e||"object"!=typeof e)return null;let t=e.participantUserIds;return t&&"object"==typeof t&&tH(t.tutor)&&tH(t.student)&&tH(e.appId)&&tH(e.userId)&&tH(e.token)&&tH(e.expiresAt)&&"number"==typeof e.ttlSeconds&&tH(e.lessonId)&&tH(e.channelName)&&("student"===e.role||"tutor"===e.role)&&tH(e.tutorPublisherUserId)&&("socket"===e.transportMode||"dual_socket_primary"===e.transportMode||"dual_agora_primary"===e.transportMode||"agora"===e.transportMode)?{appId:e.appId,userId:e.userId,token:e.token,expiresAt:e.expiresAt,ttlSeconds:e.ttlSeconds,lessonId:e.lessonId,channelName:e.channelName,role:e.role,tutorPublisherUserId:e.tutorPublisherUserId,participantUserIds:{tutor:t.tutor,student:t.student},transportMode:e.transportMode,...tH(e.presenterSessionId)?{presenterSessionId:e.presenterSessionId}:{}}:null}((await n.uE.post("/api/v1/agora/signaling/lessons/session",{lessonId:e})).data);if(!t)throw Error("Invalid lesson signaling session response");return t},async generateGeneralChatSession(e,t){let a=function(e){let t=tB(e);return t&&tG(t.appId)&&tG(t.userId,64)&&tH(t.token)&&function(e){if("string"!=typeof e||0===e.length)return!1;let t=Date.parse(e);return Number.isFinite(t)&&t>Date.now()}(t.expiresAt)&&"number"==typeof t.ttlSeconds&&tJ(t.inboxChannelName,"xpeak_chat_inbox_")&&"xpeak-chat-server"===t.chatPublisherUserId?t:null}((await n.uE.post("/api/v1/agora/signaling/chat/session",{clientInstanceId:e,role:t})).data);if(!a)throw Error("Invalid General Chat signaling session");return a},async getConversationRealtimeAccess(e,t){let a=function(e,t){let a=tB(e);return a&&a.conversationId===t.conversationId&&tJ(a.conversationChannelName,"xpeak_conversation_")&&a.currentUserRole===t.role?a:null}((await n.uE.post("/api/v1/agora/signaling/chat/conversations/".concat(encodeURIComponent(e),"/access"),{role:t})).data,{conversationId:e,role:t});if(!a)throw Error("Invalid Conversation signaling access");return a}},tK="".concat("https://xpeak.ai","/api/v1/observability/web"),t$={};function tQ(e){t$={...e}}function tY(e){if("undefined"==typeof navigator)return;let t=navigator,a=JSON.stringify({...t$,...e,url:window.location.href,online:navigator.onLine,network:function(e){if(!e)return;let t=[e.effectiveType||e.type,"number"==typeof e.downlink?"".concat(e.downlink,"Mbps"):void 0,"number"==typeof e.rtt?"".concat(e.rtt,"ms"):void 0].filter(
1Boolean);return t.length>0?t.join("/"):void 0}(t.connection),timestamp:new Date().toISOString()});try{if("function"==typeof navigator.sendBeacon){let e=new Blob([a],{type:"application/json"});if(navigator.sendBeacon(tK,e))return}fetch(tK,{method:"POST",headers:{"Content-Type":"application/json"},body:a,keepalive:!0,credentials:"omit"}).catch(()=>void 0)}catch(e){}}},35373:(e,t,a)=>{a.d(t,{cD:()=>s,cM:()=>l,ss:()=>o,x2:()=>i});let n=new Map,r=()=>"none";function i(e){r=e}function o(){n.clear()}function s(e,t){let a=n.get(e);if(a)return a;let r=t().finally(()=>{n.delete(e)});return n.set(e,r),r}function l(e,t,a,n){let i=void 0===a?"".concat(e,":").concat(t):"".concat(e,":").concat(t,":").concat(JSON.stringify(a)),o=null!=n?n:r();return"".concat(i,"|auth:").concat(o)}},46202:(e,t,a)=>{a.d(t,{N_:()=>s,a8:()=>u,rd:()=>c});var n=a(90350),r=a(46558),i=a(74088);let o=(0,r.A)({locales:i.dI,defaultLocale:i.Xn,localePrefix:"always"}),{Link:s,redirect:l,usePathname:u,useRouter:c}=(0,n.A)(o)},60536:(e,t,a)=>{a.d(t,{Ck:()=>o,Mq:()=>i,ZS:()=>r});let n="xpeak_user_roles_cache_v1";function r(e){if(!e)return null;try{let t=sessionStorage.getItem(n);if(!t)return null;let a=JSON.parse(t);if(a.tokenFp!==e.slice(-16)||Date.now()>a.exp)return sessionStorage.removeItem(n),null;if(!Array.isArray(a.roles))return null;return a.roles.map(e=>String(e))}catch(e){return sessionStorage.removeItem(n),null}}function i(e,t){if(!e)return;let a={tokenFp:e.slice(-16),roles:t,exp:Date.now()+6e4};sessionStorage.setItem(n,JSON.stringify(a))}function o(){sessionStorage.removeItem(n)}},74088:(e,t,a)=>{a.d(t,{Tl:()=>p,Xn:()=>i,Z$:()=>o,dI:()=>r,gB:()=>u,hh:()=>l,kf:()=>s,zl:()=>c});var n=a(37811);let r=["en","zh","zh-Hant","es","pt-BR","ja","ko","tr","ar","vi","fr","de"],i="en",o=void 0!==n&&n.env.NEXT_PUBLIC_APP_TIME_ZONE||"UTC",s={en:"English",zh:"简体中文","zh-Hant":"繁體中文",es:"Espa\xf1ol","pt-BR":"Portugu\xeas (Brasil)",ja:"日本語",ko:"한국어",tr:"T\xfcrk\xe7e",ar:"العربية",vi:"Tiếng Việt",fr:"Fran\xe7ais",de:"Deutsch"},l={en:"\uD83C\uDDFA\uD83C\uDDF8",zh:"\uD83C\uDDE8\uD83C\uDDF3","zh-Hant":"\uD83C\uDDE8\uD83C\uDDF3",es:"\uD83C\uDDEA\uD83C\uDDF8","pt-BR":"\uD83C\uDDE7\uD83C\uDDF7",ja:"\uD83C\uDDEF\uD83C\uDDF5",ko:"\uD83C\uDDF0\uD83C\uDDF7",tr:"\uD83C\uDDF9\uD83C\uDDF7",ar:"\uD83C\uDDF8\uD83C\uDDE6",vi:"\uD83C\uDDFB\uD83C\uDDF3",fr:"\uD83C\uDDEB\uD83C\uDDF7",de:"\uD83C\uDDE9\uD83C\uDDEA"},u="NEXT_LOCALE",c="xpeak-locale",d={en:"en-US",zh:"zh-CN","zh-Hant":"zh-TW",es:"es","pt-BR":"pt-BR",ja:"ja-JP",ko:"ko-KR",tr:"tr-TR",ar:"ar",vi:"vi-VN",fr:"fr-FR",de:"de-DE"};function p(e){return r.includes(e)?d[e]:"en-US"}}}]);

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.