PageSourceSearch

https://www.foxprep.ai/_next/static/chunks/11775-e346202a7df34879.js

js foxprep.ai collected 2026-09-24 14:30:26 UTC 86,226 bytes, 1 lines download raw bytes

1!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},t=(new e.Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="799deda4-5a54-402c-bfdd-a8b44caedcee",e._sentryDebugIdIdentifier="sentry-dbid-799deda4-5a54-402c-bfdd-a8b44caedcee")}catch(e){}}();"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[11775,37988],{4737:(e,t,a)=>{a.r(t),a.d(t,{getByMissionId:()=>i,getBySubject:()=>r,getParentSubjectId:()=>s,getRequiredBySubject:()=>o,hasRequirements:()=>l});var n=a(41924);async function r(e,t){let a=(0,n.AG)(t);console.log("[DAL:subjectCalibrationRequirements] getBySubject called with subjectId=".concat(e));let{data:r,error:s}=await a.from("subject_calibration_requirements").select("*").eq("subject_id",e).order("display_order",{ascending:!0});if(console.log("[DAL:subjectCalibrationRequirements] Query result: error=".concat(null==s?void 0:s.message,", rows=").concat(null==r?void 0:r.length)),s)throw new n.ug(s.message,"subject_calibration_requirements","getBySubject",s);return(r||[]).map(c)}async function s(e,t){var a;let r=(0,n.AG)(t),{data:s,error:i}=await r.from("subject_calibration_requirements").select("subject_id").eq("source_subject_id",e).limit(1).maybeSingle();if(i)throw new n.ug(i.message,"subject_calibration_requirements","getParentSubjectId",i);return null!=(a=null==s?void 0:s.subject_id)?a:null}async function i(e,t,a){let r=(0,n.AG)(a),{data:s,error:i}=await r.from("subject_calibration_requirements").select("*").eq("subject_id",e).eq("mission_id",t).maybeSingle();if(i)throw new n.ug(i.message,"subject_calibration_requirements","getByMissionId",i);return s?c(s):null}async function o(e,t){let a=(0,n.AG)(t),{data:r,error:s}=await a.from("subject_calibration_requirements").select("*").eq("subject_id",e).eq("is_required",!0).order("display_order",{ascending:!0});if(s)throw new n.ug(s.message,"subject_calibration_requirements","getRequiredBySubject",s);return(r||[]).map(c)}async function l(e,t){let a=(0,n.AG)(t),{count:r,error:s}=await a.from("subject_calibration_requirements").select("id",{count:"exact",head:!0}).eq("subject_id",e);if(s)throw new n.ug(s.message,"subject_calibration_requirements","hasRequirements",s);return(null!=r?r:0)>0}function c(e){var t,a;return{id:e.id,subject_id:e.subject_id,mission_id:e.mission_id,title_key:e.title_key,description_key:e.description_key,display_order:e.display_order,requirement_type:e.requirement_type,question_types:null!=(t=e.question_types)?t:null,required_count:e.required_count,is_required:e.is_required,unlock_after:e.unlock_after,source_subject_id:null!=(a=e.source_subject_id)?a:null,created_at:e.created_at}}},11750:(e,t,a)=>{a.d(t,{I$:()=>o,R0:()=>l,UT:()=>d,WG:()=>u,getLearningSessionById:()=>i,getLearningSessions:()=>s,qu:()=>_});var n=a(41924),r=a(50027);async function s(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=arguments.length>2?arguments[2]:void 0,r=(0,n.AG)(a),{page:s=1,limit:i=20}=t,o=r.from("learning_sessions").select("*");
1e.userId&&(o=o.eq("user_id",e.userId)),e.userSessionId&&(o=o.eq("user_session_id",e.userSessionId)),e.type&&(o=o.eq("type",e.type)),e.completionStatus&&(o=Array.isArray(e.completionStatus)?o.in("completion_status",e.completionStatus):o.eq("completion_status",e.completionStatus)),void 0!==e.minScore&&(o=o.gte("score",e.minScore)),void 0!==e.maxScore&&(o=o.lte("score",e.maxScore)),void 0!==e.minQuestionsCount&&(o=o.gte("questions_count",e.minQuestionsCount)),void 0!==e.maxQuestionsCount&&(o=o.lte("questions_count",e.maxQuestionsCount)),e.startDate&&(o=o.gte("started_at",e.startDate)),e.endDate&&(o=o.lte("started_at",e.endDate)),e.subjectId&&(o=o.eq("subject_id",e.subjectId));let l=(s-1)*i;o=(o=o.range(l,l+i-1)).order("started_at",{ascending:!1});let{data:c,error:u}=await o;if(u)throw new n.ug(u.message,"learning_sessions","getLearningSessions",u);return c||[]}async function i(e,t){let a=(0,n.AG)(t),{data:r,error:s}=await a.from("learning_sessions").select("*").eq("id",e).single();if(s)throw new n.ug(s.message,"learning_sessions","getLearningSessionById",s);return r}async function o(e,t){let a=(0,n.AG)(t),{data:r,error:s}=await a.from("learning_sessions").select("questions_count").eq("settings->>mission_assignment_id",e).eq("completion_status","completed");if(s)throw new n.ug(s.message,"learning_sessions","getMissionItemsServed",s);return(r||[]).reduce((e,t)=>{var a;return e+(null!=(a=t.questions_count)?a:0)},0)}async function l(e,t){let a=(0,n.AG)(t),{data:r,error:s}=await a.from("learning_sessions").select("*").eq("user_id",e).eq("completion_status","in_progress").order("started_at",{ascending:!1}).limit(1).maybeSingle();if(s)throw new n.ug(s.message,"learning_sessions","getActiveLearningSession",s);return r}async function c(e,t,a){let r=(0,n.AG)(a),{data:s,error:i}=await r.from("learning_sessions").update({...t,updated_at:new Date().toISOString()}).eq("id",e).select().single();if(i)throw new n.ug(i.message,"learning_sessions","updateLearningSession",i);return s}async function u(e,t,n){var s,i;let o,l=new Date().toISOString(),u=await c(e,{ended_at:l,completion_status:"completed",score:t,updated_at:l},n),_=null==(s=u.settings)?void 0:s.mission_assignment_id;if(_)try{let{finishMissionSession:t}=await Promise.resolve().then(a.bind(a,14750));await t({id:e,settings:u.settings},n)}catch(e){console.error("[Mission] Error completing mission assignment:",e)}if(u.subject_id){try{let t=await (0,r.me)(e,u.user_id,u.subject_id);console.log("[Forecast] Session ".concat(e," stats updated. Snapshot: ").concat(t.snapshotCreated?"created":"skipped",", Pending grading: ").concat(t.pendingGrading))}catch(e){console.error("[Forecast] Error updating stats on session completion:",e)}if(_)try{let{checkCalibrationStatus:e}=await Promise.resolve().then(a.bind(a,45342)),{updateCalibrationStatus:t}=await Promise.resolve().then(a.bind(a,86289)),r=await e(u.user_id,u.subject_id,{readOnly:!0});(null==r?void 0:r.isCalibrated)&&(await t(u.user_id,u.subject_id,!0,n),console.log("[Calibration] User ".concat(u.user_id," is now calibrated for subject ").concat(u.subject_id)))}catch(e){console.error("[Calibration] Error updating calibration status:",e)}try{let{getUserProfile:e}=await Promise.resolve().then(a.bind(a,25831)),{getTimezoneForMarket:t}=await a.e(22498).then(a.bind(a,22498)),{recordStreakActivity:n}=await Promise.resolve().then(a.bind(a,20828)),r=await e(u.user_id),s=null!=(i=null==r?void 0:r.preferred_market)?i:"ge",l=t(s),c=await n(u.user_id,u.subject_id,l,u.id);o=c,c.is_new_day?console.log("[Streak] User ".concat(u.user_id," streak updated: day ").concat(c.current_streak)+(c.milestone_reached?" — milestone ".concat(c.milestone_reached,"!"):"")+(c.save_used?" (save used)":"")+(c.was_reset?" (reset from ".concat(c.previous_streak,")"):"")):console.log("[Streak] User ".concat(u.user_id," already studied today (idempotent)"))}catch(e){console.error("[Streak] Error recording streak activity:",e)}fetch("/api/readings/issue",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({subjectId:u.subject_id}),keepalive:!0}).catch(e=>console.error("[Reading] Error requesting issuance:",e))}return{...u,streak_result:o}}async function _(e,t){(0,n.AG)(t);let a=await i(e,t);if(!a)throw new n.ug("Learning session not found","learning_sessions","incrementQuestionsAnswered");return c(e,{questions_answered:(a.questions_answered||0)+1},t)}async function d(e,t,a,r){let s=(0,n.AG)(r).from("learning_sessions").select("*, subjects!inner(exam_id)",{count:"exact",head:!0}).eq("user_id",e).eq("completion_status","completed").eq("subjects.exam_id",t).limit(1);a&&(s=s.neq("id",a));let{count:i,error:o}=await s;if(o)throw new n.ug(o.message,"learning_sessions","hasCompletedSessionForExam",o);return(null!=i?i:0)>0}},14750:(e,t,a)=>{a.d(t,{finishMissionSession:()=>r});var n=a(83724);async function r(e,t){var a,r;let s=null==(a=e.settings)?void 0:a.mission_assignment_id;if("string"!=typeof s)return;let i=null==(r=e.settings)?void 0:r.mission_required_count;if("number"==typeof i&&await (0,n.I$n)(s,t)<i)return void console.log("[Mission] Assignment ".concat(s," served a chunk; not complete yet"));await (0,n.Enm)(s,e.id,t),console.log("[Mission] Mission assignment ".concat(s," marked complete for session ").concat(e.id))}a(86289),a(3051);async function s(e,t,a){let n=t.required_count,r=await getMissionCandidates({subjectId:e,questionTypes:t.question_types||[]},a);if(r.length<n)throw Error("[MissionEngine] Mission ".concat(t.mission_id," needs ").concat(n," questions, found ").concat(r.length));let s=[...r].sort((e,t)=>
1e.id<t.id?-1:+(e.id>t.id)),o=s.filter(e=>"official"===e.source),l=s.filter(e=>"official"!==e.source);return[...i(o,0),...i(l,0)].slice(0,n).map(e=>e.id)}function i(e,t){if(t>=null.length||e.length<=1)return e;let a=null[t],n=new Map;for(let t of e){var r,s;let e=null!=(r=t[a])?r:"";n.set(e,[...null!=(s=n.get(e))?s:[],t])}let o=Array.from(n.keys()).sort().map(e=>i(n.get(e),t+1)),l=[];for(let t=0;l.length<e.length;t++)for(let e of o)t<e.length&&l.push(e[t]);return l}},18822:(e,t,a)=>{a.d(t,{LQ:()=>r});var n=a(41924);async function r(e,t){let a=(0,n.AG)(t),{data:r,error:i}=await a.from("exam_blueprints").select("*").eq("subject_id",e).maybeSingle();if(i)throw new n.ug(i.message,"exam_blueprints","getBySubjectId",i);return r?function(e){let t;if(e.calibration_requirements){var a,n,r,i,o;let s,l=e.calibration_requirements,c=null!=(n=null!=(a=l.minimum_mcq_attempts)?a:l.mcq_min_attempts)?n:20,u=null!=(i=null!=(r=l.minimum_taxonomy_buckets)?r:l.mcq_min_taxonomy_buckets)?i:4,_=null!=(o=l.minimum_map_attempts)?o:5;Array.isArray(l.formats_required)?s=l.formats_required.filter(e=>"mcq"!==e&&"map"!==e):(s=[],l.fact_required&&s.push("fact"),l.document_required&&s.push("document")),t={minimum_mcq_attempts:c,minimum_taxonomy_buckets:u,minimum_map_attempts:_,formats_required:s}}else t={minimum_mcq_attempts:20,minimum_taxonomy_buckets:4,minimum_map_attempts:5,formats_required:["fact","document"]};return{id:e.id,subject_id:e.subject_id,total_points:e.total_points,sections:(e.sections||[]).map(s),taxonomy_weights:e.taxonomy_weights,calibration_requirements:t,created_at:e.created_at,updated_at:e.updated_at}}(r):null}function s(e){var t,a,n,r,s,i,o,l,c,u,_,d;return{id:e.id,name:e.name,maxPoints:null!=(a=null!=(t=e.maxPoints)?t:e.points)?a:0,questionTypes:null!=(r=null!=(n=e.questionTypes)?n:e.question_types)?r:[],defaultWeight:null!=(i=null!=(s=e.defaultWeight)?s:e.default_weight)?i:0,sourceSubjectId:null!=(l=null!=(o=e.sourceSubjectId)?o:e.source_subject_id)?l:void 0,scoringRule:null!=(u=null!=(c=e.scoringRule)?c:e.scoring_rule)?u:void 0,coverageMetric:null!=(d=null!=(_=e.coverageMetric)?_:e.coverage_metric)?d:void 0}}},20828:(e,t,a)=>{a.d(t,{recordStreakActivity:()=>i});var n=a(77964),r=a(41924);let s=n.z.object({is_new_day:n.z.boolean(),exam_id:n.z.string(),current_streak:n.z.number(),longest_streak:n.z.number().optional(),milestone_reached:n.z.number().nullable(),saves_earned:n.z.number().optional(),save_used:n.z.boolean(),saves_remaining:n.z.number().optional(),was_reset:n.z.boolean(),previous_streak:n.z.number().optional()});async function i(e,t,a,i,o){let l=(0,r.AG)(o),{data:c,error:u}=await l.rpc("record_streak_activity",{p_user_id:e,p_subject_id:t,p_timezone:a,p_session_id:null!=i?i:null});if(u)throw new r.ug(u.message,"user_streaks","recordStreakActivity",u);try{return s.parse(c)}catch(e){throw new r.ug("Invalid RPC response: ".concat(e instanceof n.z.ZodError?e.errors.map(e=>e.message).join(", "):"Unknown"),"user_streaks","recordStreakActivity:parse",e)}}n.z.object({save_just_consumed:n.z.boolean(),save_pending_ack:n.z.boolean(),streak_just_lost:n.z.boolean(),exam_id:n.z.string(),current_streak:n.z.number(),saves_remaining:n.z.number(),last_save_used_at:n.z.string().nullable()})},25561:(e,t,a)=>{a.d(t,{En:()=>r,F4:()=>s});var n=a(41924);async function r(e,t,a){let r=(0,n.AG)(a),s={completed_at:new Date().toISOString()};t&&(s.consumed_session_id=t);let{data:o,error:l}=await r.from("mission_assignments").update(s).eq("id",e).select().single();if(l)throw new n.ug(l.message,"mission_assignments","completeMission",l);return i(o)}async function s(e,t,a){let r=(0,n.AG)(a),{data:s,error:o}=await r.from("mission_assignments").select("*").eq("user_id",e).eq("subject_id",t).order("created_at",{ascending:!0});if(o)throw new n.ug(o.message,"mission_assignments","getAllMissions",o);return(s||[]).map(i)}function i(e){return{id:e.id,user_id:e.user_id,subject_id:e.subject_id,mission_id:e.mission_id,question_ids:e.question_ids||[],question_list_id:e.question_list_id,created_at:e.created_at,completed_at:e.completed_at,consumed_session_id:e.consumed_session_id}}},25831:(e,t,a)=>{a.d(t,{getUserProfile:()=>s});var n=a(41924);let r={ge:["ka"],am:["hy"],br:["pt"]};async function s(e,t){let a=(0,n.AG)(t),{data:r,error:s}=await a.from("user_profiles").select("*").eq("user_id",e).maybeSingle();if(s)throw new n.ug(s.message,"user_profiles","getUserProfile",s);return r}},27099:(e,t,a)=>{a.d(t,{Hr:()=>_,Qg:()=>d,c$:()=>u,countUniqueQuestionsAttempted:()=>c,gI:()=>i,md:()=>o,nr:()=>l,u:()=>m});var n=a(41924),r=a(18966),s=a(37988);async function i(e,t){let a=(0,n.AG)(t),{data:r,error:s}=await a.from("question_attempts").insert([e]).select().single();if(s)throw new n.ug(s.message,"question_attempts","createQuestionAttempt",s);return r}async function o(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=arguments.length>2?arguments[2]:void 0,r=(0,n.AG)(a),{page:i=1,limit:o=50}=t,l=r.from("question_attempts").select("*");
1e.userId&&(l=l.eq("user_id",e.userId)),e.learningSessionId&&(l=l.eq("learning_session_id",e.learningSessionId)),e.questionId&&(l=l.eq("question_id",e.questionId)),e.subjectId&&(l=l.eq("subject_id",e.subjectId)),void 0!==e.isCorrect&&(l=l.eq("is_correct",e.isCorrect)),e.startDate&&(l=l.gte("attempted_at",e.startDate)),e.endDate&&(l=l.lte("attempted_at",e.endDate));let c=(i-1)*o;l=(l=l.range(c,c+o-1)).order("attempted_at",{ascending:!1});let{data:u,error:_}=await l;if(_)throw new n.ug(_.message,"question_attempts","getQuestionAttemptsWithQuestions",_);let d=(null==u?void 0:u.length)||0;if(0===d)return{data:[],rawCount:0};let m=Array.from(new Set(u.map(e=>e.question_id))),p=new Map((await (0,s.batchFetchQuestionsDisplay)(r,m,"id, question_type, difficulty_level, level_1, level_2, level_3, level_4, subject_id, max_score, is_legacy")||[]).map(e=>[e.id,e])),g=u.map(e=>({...e,questions:p.get(e.question_id)||null}));return void 0!==e.isLegacy&&(g=g.filter(t=>{var a;return(null==(a=t.questions)?void 0:a.is_legacy)===e.isLegacy})),{data:g,rawCount:d}}async function l(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,a=[],n=1;for(;;){let r=await o(e,{page:n,limit:1e3},t);if(a.push(...r.data),r.rawCount<1e3)return a;n+=1}}async function c(e,t){let a=(0,n.AG)(t),{data:r,error:s}=await a.rpc("count_unique_questions_attempted",{p_user_id:e});if(s)throw new n.ug(s.message,"question_attempts","countUniqueQuestionsAttempted",s);return null!=r?r:0}async function u(e,t,a){let r=(0,n.AG)(a),{data:s,error:i}=await r.rpc("count_unique_attempted_for_subject",{p_user_id:e,p_subject_id:t});if(i)throw new n.ug(i.message,"question_attempts","countUniqueAttemptedForSubject",i);return null!=s?s:0}async function _(e,t){let a=(0,n.AG)(t);if(!e||0===e.length)return new Map;let{data:i,error:o}=await a.from("question_attempts").select("*").in("learning_session_id",e).order("attempted_at",{ascending:!0});if(o)throw new n.ug(o.message,"question_attempts","getQuestionAttemptsForMultipleSessions",o);(0,r.I)(i,"question_attempts","getQuestionAttemptsForMultipleSessions");let l=Array.from(new Set((i||[]).map(e=>e.question_id))),c=new Map((await (0,s.batchFetchQuestionsDisplay)(a,l,"id, question_type, difficulty_level, level_1, level_2, level_3, level_4")).map(e=>[e.id,e])),u=new Map;for(let t of e)u.set(t,[]);return(i||[]).forEach(e=>{let t={...e,questions:c.get(e.question_id)||null},a=u.get(e.learning_session_id)||[];a.push(t),u.set(e.learning_session_id,a)}),u}async function d(e,t){if(0===e.length)return{};let a=(0,n.AG)(t),{data:r,error:s}=await a.from("question_attempt_items").select("attempt_id, item_key, score_earned, score_max, verdict").in("attempt_id",e).order("item_key",{ascending:!0});if(s)throw new n.ug(s.message,"question_attempt_items","getQuestionAttemptItemsByAttempt",s);let i={};for(let e of null!=r?r:[]){var o,l;(null!=(l=i[o=e.attempt_id])?l:i[o]=[]).push(function(e){return{item_key:e.item_key,score_earned:Number(e.score_earned),score_max:Number(e.score_max),verdict:e.verdict}}(e))}return i}async function m(e,t){let a=(0,n.AG)(t),{data:s,error:i}=await a.from("question_attempts").select("id, attempted_at, llm_feedback").eq("user_id",e).eq("scoring_status","scored").not("llm_feedback->>rubric_version","is",null).order("attempted_at",{ascending:!1});if(i)throw new n.ug(i.message,"question_attempts","getEssayV2Attempts",i);(0,r.I)(s,"question_attempts","getEssayV2Attempts");let o=null!=s?s:[],l=await d(o.map(e=>e.id),t);return o.map(e=>{var t;return{id:e.id,attempted_at:e.attempted_at,llm_feedback:e.llm_feedback,items:null!=(t=l[e.id])?t:[]}})}},31945:(e,t,a)=>{a.d(t,{gD:()=>o,getActiveSubscription:()=>s});var n=a(41924),r=a(33219);async function s(e,t,a){let s="string"==typeof t?t:void 0,i="string"==typeof t?a:t,o=(0,n.AG)(i),l=o.from("subscriptions").select("*").eq("user_id",e).in("status",["active","trialing","past_due","canceled"]).gt("current_period_end",new Date().toISOString());s&&(l=l.eq("exam_id",s));let{data:c,error:u}=await l.order("created_at",{ascending:!1}).limit(1).maybeSingle();if(u)throw new n.ug(u.message,"subscriptions","getActiveSubscription",u);if(c)return c;let _=(0,r.DX)(),d=new Date().toISOString(),m=o.from("subscriptions").select("*, plans!inner(payment_type)").eq("user_id",e).eq("status","active").lte("current_period_end",d).gt("current_period_end",_).eq("plans.payment_type","recurring");s&&(m=m.eq("exam_id",s));let{data:p,error:g}=await m.order("created_at",{ascending:!1}).limit(1).maybeSingle();if(g)throw new n.ug(g.message,"subscriptions","getActiveSubscription",g);if(p){let{plans:e,...t}=p;return t}return null}async function i(e,t,a){let n,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},s=arguments.length>4?arguments[4]:void 0,i=getSupabaseClient(s),o=new Date,l=r.currentPeriodEnd;
1if("trialing"===a&&r.trialDays)l=n=new Date(o.getTime()+24*r.trialDays*36e5).toISOString();else if("active"===a&&r.intervalMonths){let e=new Date;e.setMonth(e.getMonth()+r.intervalMonths),l=e.toISOString()}let c={user_id:e,plan_id:t,status:a,current_period_end:l,trial_end:n,...r.examId?{exam_id:r.examId}:{}},{data:u,error:_}=await i.from("subscriptions").upsert(c,{onConflict:"user_id,plan_id"}).select().single();if(_)throw new DALError(_.message,"subscriptions","upsertSubscription",_);return u}async function o(e,t,a){let s="string"==typeof t?t:void 0,i=(0,n.AG)("string"==typeof t?a:t);if(s){let{data:t,error:a}=await i.from("subscriptions").select("id").eq("user_id",e).eq("exam_id",s).in("status",["active","trialing","past_due","canceled"]).gt("current_period_end",new Date().toISOString()).limit(1).maybeSingle();if(a)throw new n.ug(a.message,"subscriptions","hasActiveSubscription",a);if(t)return!0;let{data:o,error:l}=await i.from("subscriptions").select("id, plans!inner(payment_type)").eq("user_id",e).eq("exam_id",s).eq("status","active").lte("current_period_end",new Date().toISOString()).gt("current_period_end",(0,r.DX)()).eq("plans.payment_type","recurring").limit(1).maybeSingle();if(l)throw new n.ug(l.message,"subscriptions","hasActiveSubscription",l);return null!==o}let{data:o,error:l}=await i.rpc("has_active_subscription",{uid:e});if(l)throw new n.ug(l.message,"subscriptions","hasActiveSubscription",l);return!!o}},33219:(e,t,a)=>{a.d(t,{DX:()=>n});function n(){return new Date(Date.now()-1008e5).toISOString()}},37988:(e,t,a)=>{a.d(t,{batchFetchQuestionsDisplay:()=>n});async function n(e,t,a,n){if(0===t.length)return[];let r=[];for(let s=0;s<t.length;s+=100){let i=e.from("questions_display").select(a).in("id",t.slice(s,s+100));n&&(i=n(i));let{data:o,error:l}=await i;if(l){console.error("[batchFetchQuestionsDisplay] Batch error:",l);continue}o&&r.push(...o)}return r}},45342:(e,t,a)=>{a.d(t,{checkCalibrationStatus:()=>l});var n=a(86289),r=a(18822),s=a(25561),i=a(4737),o=a(64257);async function l(e,t,a){var l,c,u,_,d,m;(null==a?void 0:a.readOnly)||(null==a?void 0:a.preFetched)||await (0,o.jV)(e,t);let[p,g]=await Promise.all([(0,i.getBySubject)(t),(0,s.F4)(e,t)]),f=new Map(g.map(e=>[e.mission_id,e])),b=p.length>0&&p.every(e=>{let t=f.get(e.mission_id);return(null==t?void 0:t.completed_at)!=null}),y=null!=(u=null==a||null==(l=a.preFetched)?void 0:l.userStats)?u:await n.Jt(e,t),h=null!=(_=null==a||null==(c=a.preFetched)?void 0:c.blueprint)?_:await r.LQ(t);return h?{isCalibrated:b,progress:function(e,t,a){var n,r,s,i;let o=null!=(n=e.mcq_attempts)?n:0,l=t.minimum_mcq_attempts,c=o>=l,u=null!=(r=e.mcq_taxonomy_buckets)?r:0,_=t.minimum_taxonomy_buckets,d=u>=_,m=null!=(s=e.map_attempts)?s:0,p=null!=(i=t.minimum_map_attempts)?i:6,g=m>=p,f=t.formats_required.map(e=>{var t;let n=null!=(t=null==a?void 0:a[e])&&t;return{format:e,attempted:n}}),b=[c,d,g,...f.map(e=>e.attempted)],y=b.length;return{mcqAttempts:{actual:o,required:l,met:c},mcqTaxonomyBuckets:{actual:u,required:_,met:d},mapAttempts:{actual:m,required:p,met:g},formatsRequired:f,overallProgress:Math.round(b.filter(e=>e).length/y*100)}}(null!=(d=null==y?void 0:y.calibration_progress)?d:{},h.calibration_requirements,null!=(m=null==y?void 0:y.formats_attempted)?m:{}),calibratedAt:null==y?void 0:y.calibrated_at}:null}},47738:(e,t,a)=>{a.d(t,{AO:()=>s,O9:()=>r,Tz:()=>o,cn:()=>n,gF:()=>l});let n=[8,9,10,11,12,13,14,15,16,17,18,19,20,21],r=[10,15,30],s=15;function i(e){return r.includes(e)}function o(e){return i(e)?e:s}function l(e){let{days:t,hour:a,goalMinutes:n}=e;return!!i(n)&&!!Array.isArray(t)&&0!==t.length&&!(t.length>7)&&new Set(t).size===t.length&&!!t.every(e=>Number.isInteger(e)&&e>=1&&e<=7)&&Number.isInteger(a)&&a>=0&&a<=23}},48669:(e,t,a)=>{a.d(t,{gY:()=>r,sz:()=>s,t0:()=>i});var n=a(41924);async function r(e,t){let a=await (0,n.zi)(async()=>{let a=(0,n.AG)(t),{data:r,error:s}=await a.rpc("link_student_to_teacher",{p_invite_code:e}).single();if(s)throw s;return{success:r.success,teacherId:r.teacher_id,teacherName:r.teacher_name,teacherInstitution:r.teacher_institution,error:r.error}},"teacher_students","linkToTeacher");if(a.error)throw a.error;return a.data}
1async function s(e,t){let a=await (0,n.zi)(async()=>{let a=(0,n.AG)(t),{data:r,error:s}=await a.rpc("unlink_from_teacher",{p_teacher_id:e}).single();if(s)throw s;return r},"teacher_students","unlinkFromTeacher");if(a.error)throw a.error;return a.data}async function i(e,t){let a=await (0,n.zi)(async()=>{var a,r,s,i,o,l,c,u,_,d,m;let p=(0,n.AG)(t),{data:g,error:f}=await p.rpc("get_teacher_student_stats",{p_subject_id:null!=(o=null==e?void 0:e.subjectId)?o:null,p_limit:null!=(l=null==e?void 0:e.limit)?l:50,p_offset:null!=(c=null==e?void 0:e.offset)?c:0}).single();if(f)throw f;return g.success?{success:!0,students:(g.students||[]).map(e=>{var t,a;return{studentId:e.student_id,displayName:e.display_name,totalSessions:e.total_sessions,totalAttempts:e.total_attempts,accuracyPct:e.accuracy_pct,lastActive:e.last_active,linkedAt:e.linked_at,subjectBreakdown:null!=(a=null==(t=e.subject_breakdown)?void 0:t.map(e=>({subjectId:e.subject_id,sessionCount:e.session_count,accuracy:e.accuracy})))?a:null}}),pagination:{total:null!=(u=null==(a=g.pagination)?void 0:a.total)?u:0,limit:null!=(_=null==(r=g.pagination)?void 0:r.limit)?_:50,offset:null!=(d=null==(s=g.pagination)?void 0:s.offset)?d:0,hasMore:null!=(m=null==(i=g.pagination)?void 0:i.has_more)&&m}}:{success:!1,students:[],pagination:{total:0,limit:50,offset:0,hasMore:!1},error:g.error}},"teacher_students","getMyStudents");if(a.error)throw a.error;return a.data}},50027:(e,t,a)=>{a.d(t,{dz:()=>I.checkCalibrationStatus,Wf:()=>k.Wf,aY:()=>k.aY,pr:()=>M,yd:()=>j.getForecast,me:()=>k.me});var n=a(77964);let r=n.z.enum(["low","medium","high"]);n.z.string(),n.z.enum(["mcq_text","mcq_image","open_text","open_text_analysis","audio_mcq","matching_paragraphs","mcq_text_analysis","mcq_cloze","dialogue_matching","essay","text_correction","mcq_latex","open_latex","word_bank_cloze"]);let s=n.z.record(n.z.string(),n.z.boolean()),i=n.z.object({section:n.z.string(),expected:n.z.number().min(0),uncertainty:n.z.number().min(0),maxPoints:n.z.number().min(0).optional()}),o=n.z.array(i),l=n.z.object({total_attempts:n.z.number().int().min(0),correct_attempts:n.z.number().int().min(0).optional(),total_score_earned:n.z.number().min(0).optional(),total_score_possible:n.z.number().min(0).optional(),ability_estimate:n.z.number().min(0).max(1),uncertainty:n.z.number().min(0),last_practiced_at:n.z.string().datetime().optional()}),c=n.z.record(n.z.string(),l.optional()),u=n.z.record(n.z.string(),n.z.boolean()),_=n.z.object({mcq_attempts:n.z.number().int().min(0).optional(),mcq_taxonomy_buckets:n.z.number().int().min(0).optional(),map_done:n.z.boolean().optional(),fact_done:n.z.boolean().optional(),document_done:n.z.boolean().optional()}),d=n.z.object({correct:n.z.number(),wrong:n.z.number(),skip:n.z.number()}),m=n.z.object({id:n.z.string(),name:n.z.string(),maxPoints:n.z.number().int().min(0),questionTypes:n.z.array(n.z.string()),defaultWeight:n.z.number().min(0).max(1),sourceSubjectId:n.z.string().uuid().optional(),scoringRule:d.optional(),coverageMetric:n.z.string().optional()}),p=n.z.object({taxonomyLevel1:n.z.string(),taxonomyLevel2:n.z.string().nullable().optional(),weight:n.z.number().min(0).max(1)}),g=n.z.object({minimum_mcq_attempts:n.z.number().int().min(0),minimum_taxonomy_buckets:n.z.number().int().min(0),minimum_map_attempts:n.z.number().int().min(0).optional(),formats_required:n.z.array(n.z.string())});n.z.object({id:n.z.string().uuid(),user_id:n.z.string().uuid(),subject_id:n.z.string().uuid(),session_id:n.z.string().uuid().nullable().optional(),expected_score:n.z.number().min(0).max(200),floor_score:n.z.number().min(0).max(200),ceiling_score:n.z.number().min(0).max(200),confidence_level:r,uncertainty_value:n.z.number().nullable().optional(),format_coverage:s,taxonomy_coverage_pct:n.z.number().min(0).max(100).nullable().optional(),high_weight_gaps_count:n.z.number().int().min(0).nullable().optional(),section_breakdown:o,is_calibrated:n.z.boolean(),created_at:n.z.string().datetime()}),n.z.object({id:n.z.string().uuid(),user_id:n.z.string().uuid(),subject_id:n.z.string().uuid(),section_stats:c,formats_attempted:u,is_calibrated:n.z.boolean(),calibration_progress:_,calibrated_at:n.z.string().datetime().nullable().optional(),last_practice_at:n.z.string().datetime().nullable().optional(),created_at:n.z.string().datetime(),updated_at:n.z.string().datetime()}),n.z.object({id:n.z.string().uuid(),subject_id:n.z.string().uuid(),total_points:n.z.number().int().min(0),sections:n.z.array(m),taxonomy_weights:n.z.array(p).nullable().optional(),calibration_requirements:g,created_at:n.z.string().datetime(),updated_at:n.z.string().datetime()});let f=n.z.object({id:n.z.string(),name:n.z.string(),expected:n.z.number().min(0),maxPoints:n.z.number().int().min(0),confidence:r}),b=n.z.object({formatsAttempted:n.z.record(n.z.string(),n.z.boolean()),allFormatsAttempted:n.z.boolean(),taxonomyPct:n.z.number().min(0).max(100),highWeightGaps:n.z.number().int().min(0)}),y=n.z.object({expected:n.z.number().min(0).max(200),floor:n.z.number().min(0).max(200),ceiling:n.z.number().min(0).max(200),confidence:r,certaintyPct:n.z.number().int().min(0).max(100),sections:n.z.array(f),coverage:b}),h=n.z.object({isCalibrated:n.z.boolean(),progress:n.z.record(n.z.string(),n.z.union([n.z.number(),n.z.boolean()])),requirements:n.z.record(n.z.string(),n.z.union([n.z.number(),n.z.boolean()]))}),w=n.z.object({sinceLast:n.z.number().nullable(),sinceWeekAgo:n.z.number().nullable()}),v=n.z.object({type:n.z.enum(["score","confidence","coverage"]),value:n.z.string()}),z=n.z.enum(["score_gain","confidence_gain","fog_unlock","maintenance"]),E=n.z.enum(["mistake_review_mcq","mistake_review_open","section_improve_fact","section_improve_document","section_improve_map","topic_explore_new","topic_explore_breadth","topic_mastery_deepen","topic_mastery_finish","stale_refresh_topic","stale_refresh_section","certainty_boost_section","certainty_boost_volatile","strategic_focus_high_weight","strategic_focus_quick_win","momentum_streak","momentum_comeback"]),A=n.z.object({count:n.z.number().optional(),percent:n.z.number().optional(),points:n.z.number().optional(),topic:n.z.string().optional(),attempts:n.z.number().optional(),total:n.z.number().optional(),remaining:n.z.number().optional(),days:n.z.number().optional(),section:n.z.string().optional()}),q=n.z.object({id:n.z.string(),type:z,actionTypeV2:E,title:n.z.string(),timeEstimate:n.z.string(),questionCount:n.z.number().int().min(0).optional(),impacts:n.z.array(v),why:n.z.string(),whyParams:A.optional(),action:n.z.object({type:n.z.string(),params:n.z.record(n.z.string(),n.z.unknown())})});n.z.object({forecast:y,calibration:h,delta:w,recommendations:n.z.array(q)});let S=n.z.object({section:n.z.string(),mean:n.z.number().min(0),sigma:n.z.number().min(0),maxPoints:n.z.number().min(0).optional()});n.z.object({expected:n.z.number().min(0).max(200),floor:n.z.number().min(0).max(200),ceiling:n.z.number().min(0).max(200),confidence:r,certaintyPct:n.z.number().int().min(0).max(100),sections:n.z.array(S),coverage:b,isCalibrated:n.z.boolean(),uncertaintyValue:n.z.number().min(0),totalPoints:n.z.number().min(0).optional()}),n.z.object({section_id:n.z.string().nullable().optional(),taxonomy_level_1:n.z.string().nullable().optional(),taxonomy_level_2:n.z.string().nullable().optional(),is_correct:n.z.boolean().nullable().optional(),llm_score:n.z.number().nullable().optional(),max_score:n.z.number().optional(),attempted_at:n.z.string().datetime()});var k=a(64257),j=a(90973),R=a(86289),x=a(18822);async function M(e,t,a){(null==a?void 0:a.readOnly)||await (0,k.jV)(e,t);
1let[n,r]=await Promise.all([R.Jt(e,t),x.LQ(t)]);return n&&r?{userStats:n,blueprint:r}:null}var I=a(45342);a(14750)},54793:(e,t,a)=>{a.d(t,{WL:()=>o,r6:()=>i,xw:()=>d});var n=a(41924),r=a(27099),s=a(95208);async function i(e,t,a){let r=(0,n.AG)(a),{data:s,error:i}=await r.from("taxonomy_cell_stats").select("*").eq("user_id",e).eq("subject_id",t);if(i)throw new n.ug(i.message,"taxonomy_cell_stats","getByUserSubject",i);return(s||[]).map(m)}async function o(e,t,a,r){let s=(0,n.AG)(r),i=a.map(e=>{var t,a,n,r,s,i;return{taxonomy_level_1:e.taxonomy_level_1,taxonomy_level_2:null!=(t=e.taxonomy_level_2)?t:null,total_attempts:e.total_attempts,correct_attempts:e.correct_attempts,total_score_earned:null!=(a=e.total_score_earned)?a:null,total_score_possible:null!=(n=e.total_score_possible)?n:null,performance_estimate:null!=(r=e.performance_estimate)?r:null,uncertainty:null!=(s=e.uncertainty)?s:null,last_practiced_at:null!=(i=e.last_practiced_at)?i:null}}),{data:o,error:l}=await s.rpc("replace_taxonomy_cell_stats",{p_user_id:e,p_subject_id:t,p_rows:i});if(l)throw new n.ug(l.message,"taxonomy_cell_stats","replaceAllForUser",l);return(o||[]).map(m)}let l=new Map,c=new Map;async function u(e,t){var a;let r=l.get(e);if(r&&Date.now()-r.cachedAt<3e5)return r.count;let s=(0,n.AG)(t),{data:i,error:o}=await s.from("topic_hierarchies").select("level_3").eq("subject_id",e).not("level_3","is",null);if(o)throw new n.ug(o.message,"topic_hierarchies","getLevel3TopicCount",o);let c=new Set(null!=(a=null==i?void 0:i.map(e=>e.level_3))?a:[]).size;return l.set(e,{count:c,cachedAt:Date.now()}),c}async function _(e,t){let a=c.get(e);if(a&&Date.now()-a.cachedAt<3e5)return a.count;let n=await (0,s.M4)({subjectId:e,isLegacy:!1},t);return c.set(e,{count:n,cachedAt:Date.now()}),n}async function d(e,t,a){let[n,s]=await Promise.all([i(e,t,a),u(t,a)]);if(0===s){let[n,s]=await Promise.all([(0,r.c$)(e,t,a),_(t,a)]);return 0===s?100:n/s*100}return new Set(n.filter(e=>e.total_attempts>=5).map(e=>e.taxonomy_level_1)).size/s*100}function m(e){return{id:e.id,user_id:e.user_id,subject_id:e.subject_id,taxonomy_level_1:e.taxonomy_level_1,taxonomy_level_2:e.taxonomy_level_2,total_attempts:e.total_attempts,correct_attempts:e.correct_attempts,total_score_earned:e.total_score_earned,total_score_possible:e.total_score_possible,performance_estimate:e.performance_estimate,uncertainty:e.uncertainty,last_practiced_at:e.last_practiced_at,created_at:e.created_at,updated_at:e.updated_at}}},54996:(e,t,a)=>{a.d(t,{CL:()=>o});var n=function(e){return e.BOG="bog",e.LIBERTY="liberty",e.STRIPE="stripe",e.MERCADOPAGO="mercadopago",e.IDRAM="idram",e.RAZORPAY="razorpay",e.TEST="test",e}({}),r=function(e){return e.ONE_TIME="one_time",e.RECURRING="recurring",e}({}),s=function(e){return e.GEL="GEL",e.USD="USD",e.EUR="EUR",e.BRL="BRL",e.AMD="AMD",e.INR="INR",e.TRY="TRY",e.AZN="AZN",e}({}),i=a(43974);let o={TRIAL_2W:"a4f7e3d2-8b9c-4d5e-9f6a-1b2c3d4e5f6a",GRANT_1M:"e31f7b0d-ebf4-49d0-8afc-c2d3ba1f1186",GRANT_1Y:"aee1b336-9097-46e0-bb60-97fcfe1a72bd",TRIAL_2W_MASTERS:"b5f8e3d2-8b9c-4d5e-9f6a-1b2c3d4e5f6b",GRANT_1M_MASTERS:"f31f7b0d-ebf4-49d0-8afc-c2d3ba1f1187",GRANT_1Y_MASTERS:"bff1b336-9097-46e0-bb60-97fcfe1a72be"};o.GRANT_1Y,Object.values(o);let l={BOG_CLIENT_ID:i.env.BOG_CLIENT_ID,BOG_SECRET_KEY:i.env.BOG_SECRET_KEY,BOG_CALLBACK_URL:i.env.BOG_CALLBACK_URL,STRIPE_PUBLIC_KEY:i.env.NEXT_PUBLIC_STRIPE_PUBLIC_KEY,STRIPE_SECRET_KEY:i.env.STRIPE_SECRET_KEY,STRIPE_WEBHOOK_SECRET:i.env.STRIPE_WEBHOOK_SECRET,MERCADOPAGO_PUBLIC_KEY:i.env.NEXT_PUBLIC_MERCADOPAGO_PUBLIC_KEY,MERCADOPAGO_ACCESS_TOKEN:i.env.MERCADOPAGO_ACCESS_TOKEN,IDRAM_EDP_REC_ACCOUNT:i.env.IDRAM_EDP_REC_ACCOUNT,IDRAM_SECRET_KEY:i.env.IDRAM_SECRET_KEY,RAZORPAY_KEY_ID:i.env.NEXT_PUBLIC_RAZORPAY_KEY_ID,RAZORPAY_KEY_SECRET:i.env.RAZORPAY_KEY_SECRET,RAZORPAY_WEBHOOK_SECRET:i.env.RAZORPAY_WEBHOOK_SECRET,SITE_URL:"https://www.foxprep.ai",NODE_ENV:"production"},c={[n.BOG]:{provider:n.BOG,apiKey:l.BOG_SECRET_KEY,publicKey:l.BOG_CLIENT_ID,callbackUrl:l.BOG_CALLBACK_URL,testMode:"production"!==l.NODE_ENV,supportedCurrencies:[s.GEL,s.AMD],supportedPaymentTypes:[r.ONE_TIME],webhookUrl:"".concat(l.SITE_URL,"/api/webhooks/payment")},[n.LIBERTY]:{provider:n.LIBERTY,testMode:"production"!==l.NODE_ENV,supportedCurrencies:[s.GEL],supportedPaymentTypes:[r.ONE_TIME,r.RECURRING]},[n.STRIPE]:{provider:n.STRIPE,apiKey:l.STRIPE_SECRET_KEY,publicKey:l.STRIPE_PUBLIC_KEY,webhookSecret:l.STRIPE_WEBHOOK_SECRET,testMode:"production"!==l.NODE_ENV,supportedCurrencies:[s.USD,s.EUR,s.GEL,s.BRL,s.AMD,s.INR,s.TRY,s.AZN],supportedPaymentTypes:[r.ONE_TIME,r.RECURRING],webhookUrl:"".concat(l.SITE_URL,"/api/webhooks/payment/stripe")},[n.MERCADOPAGO]:{provider:n.MERCADOPAGO,apiKey:l.MERCADOPAGO_ACCESS_TOKEN,publicKey:l.MERCADOPAGO_PUBLIC_KEY,testMode:"production"!==l.NODE_ENV,supportedCurrencies:[s.BRL],supportedPaymentTypes:[r.ONE_TIME],webhookUrl:"".concat(l.SITE_URL,"/api/webhooks/payment/mercadopago")},[n.IDRAM]:{provider:n.IDRAM,apiKey:l.IDRAM_SECRET_KEY,publicKey:l.IDRAM_EDP_REC_ACCOUNT,testMode:"production"!==l.NODE_ENV,supportedCurrencies:[s.AMD],supportedPaymentTypes:[r.ONE_TIME],webhookUrl:"".concat(l.SITE_URL,"/api/webhooks/payment/idram")},[n.RAZORPAY]:{provider:n.RAZORPAY,apiKey:l.RAZORPAY_KEY_SECRET,publicKey:l.RAZORPAY_KEY_ID,webhookSecret:l.RAZORPAY_WEBHOOK_SECRET,testMode:"production"!==l.NODE_ENV,supportedCurrencies:[s.INR],supportedPaymentTypes:[r.ONE_TIME,r.RECURRING],webhookUrl:"".concat(l.SITE_URL,"/api/webhooks/payment/razorpay")},[n.TEST]:{provider:n.TEST,apiKey:"test_secret_key",publicKey:"test_public_key",testMode:!0,supportedCurrencies:Object.values(s),supportedPaymentTypes:[r.ONE_TIME,r.RECURRING],webhookUrl:"".concat(l.SITE_URL,"/api/webhooks/payment/test")}},u={ge:{marketSlug:"ge",provider:n.LIBERTY,fallbackProvider:n.BOG,currency:s.GEL,supportedCurrencies:[s.GEL,s.USD],supportedPaymentTypes:[r.ONE_TIME,r.RECURRING],pricing:{oneMonth:{amount:29.99,currency:s.GEL},threeMonth:{amount:79.99,currency:s.GEL},sixMonth:{amount:149.99,currency:s.GEL}},taxRate:0,allowedPaymentMethods:["card"],requiresBillingAddress:!1,features:{saveCard:!0,recurringPayments:!0,refunds:!0,partialRefunds:!1}},am:{marketSlug:"am",provider:n.IDRAM,fallbackProvider:n.BOG,currency:s.AMD,supportedCurrencies:[s.AMD,s.USD],supportedPaymentTypes:[r.ONE_TIME],pricing:{oneMonth:{amount:4900,currency:s.AMD},threeMonth:{amount:13500,currency:s.AMD},sixMonth:{amount:25e3,currency:s.AMD}},taxRate:.2,allowedPaymentMethods:["card","idram_wallet"],requiresBillingAddress:!0,features:{saveCard:!1,recurringPayments:!1,refunds:!0,partialRefunds:!1}},br:{marketSlug:"br",provider:n.MERCADOPAGO,fallbackProvider:n.STRIPE,currency:s.BRL,supportedCurrencies:[s.BRL],supportedPaymentTypes:[r.ONE_TIME],pricing:{oneMonth:{amount:39.9,currency:s.BRL},threeMonth:{amount:99.9,currency:s.BRL},sixMonth:{amount:179.9,currency:s.BRL}},taxRate:0,allowedPaymentMethods:["card","pix","boleto"],requiresBillingAddress:!0,features:{saveCard:!1,recurringPayments:!1,refunds:!0,partialRefunds:!0}},in:{marketSlug:"in",provider:n.RAZORPAY,fallbackProvider:n.STRIPE,currency:s.INR,supportedCurrencies:[s.INR],supportedPaymentTypes:[r.ONE_TIME,r.RECURRING],pricing:{oneMonth:{amount:499,currency:s.INR},threeMonth:{amount:1299,currency:s.INR},sixMonth:{amount:2399,currency:s.INR}}
1,taxRate:.18,allowedPaymentMethods:["card","upi","netbanking","wallet"],requiresBillingAddress:!0,features:{saveCard:!0,recurringPayments:!0,refunds:!0,partialRefunds:!0}},tr:{marketSlug:"tr",provider:n.STRIPE,currency:s.TRY,supportedCurrencies:[s.TRY,s.USD],supportedPaymentTypes:[r.ONE_TIME],pricing:{oneMonth:{amount:299,currency:s.TRY},threeMonth:{amount:799,currency:s.TRY},sixMonth:{amount:1499,currency:s.TRY}},taxRate:.18,allowedPaymentMethods:["card"],requiresBillingAddress:!0,features:{saveCard:!1,recurringPayments:!1,refunds:!0,partialRefunds:!1}},az:{marketSlug:"az",provider:n.STRIPE,currency:s.AZN,supportedCurrencies:[s.AZN,s.USD],supportedPaymentTypes:[r.ONE_TIME],pricing:{oneMonth:{amount:49.99,currency:s.AZN},threeMonth:{amount:129.99,currency:s.AZN},sixMonth:{amount:249.99,currency:s.AZN}},taxRate:.18,allowedPaymentMethods:["card"],requiresBillingAddress:!0,features:{saveCard:!1,recurringPayments:!1,refunds:!0,partialRefunds:!1}},default:{marketSlug:"default",provider:n.STRIPE,currency:s.USD,supportedCurrencies:[s.USD],supportedPaymentTypes:[r.ONE_TIME],pricing:{oneMonth:{amount:9.99,currency:s.USD},threeMonth:{amount:24.99,currency:s.USD},sixMonth:{amount:44.99,currency:s.USD}},taxRate:0,allowedPaymentMethods:["card"],requiresBillingAddress:!0,features:{saveCard:!1,recurringPayments:!1,refunds:!0,partialRefunds:!1}}};s.USD,s.EUR,s.GEL,s.BRL,s.AMD,s.INR,s.TRY,s.AZN},55424:(e,t,a)=>{a.d(t,{GQ:()=>u,H6:()=>c,Ku:()=>_,TS:()=>r,cl:()=>s,i5:()=>l,ky:()=>o});var n=a(77964);let r=["backlog","todo","in_progress","blocked","done"],s=["low","normal","high"],i=n.z.string().regex(/^\d{4}-\d{2}-\d{2}$/,"due_date must be YYYY-MM-DD");n.z.object({id:n.z.string().uuid(),title:n.z.string(),description:n.z.string().nullable(),owner_id:n.z.string().uuid().nullable(),column:n.z.enum(r),priority:n.z.enum(s),due_date:i.nullable(),position:n.z.number(),stage_entered_at:n.z.string(),created_at:n.z.string(),updated_at:n.z.string(),created_by:n.z.string().uuid().nullable(),tag_ids:n.z.array(n.z.string().uuid()).default([])}),n.z.object({id:n.z.string().uuid(),name:n.z.string(),name_normalized:n.z.string().nullable(),color:n.z.string().nullable(),created_at:n.z.string(),created_by:n.z.string().uuid().nullable()});let o=40,l=20;function c(e){return e.trim().toLowerCase()}n.z.object({user_id:n.z.string().uuid(),display_name:n.z.string().min(1)}),n.z.object({id:n.z.string().uuid(),position:n.z.number()});let u=200,_=2e4,d=n.z.string().trim().min(1,"Title is required").max(u,"Title is too long"),m=n.z.string().max(_).nullable().optional();n.z.object({title:d,description:m,owner_id:n.z.string().uuid().nullable().optional(),column:n.z.enum(r).default("backlog"),priority:n.z.enum(s).default("normal"),due_date:i.nullable().optional(),tag_ids:n.z.array(n.z.string().uuid()).max(l).optional()}),n.z.object({title:d,description:m,owner_id:n.z.string().uuid().nullable(),priority:n.z.enum(s),due_date:i.nullable(),tag_ids:n.z.array(n.z.string().uuid()).max(l)}).partial().strict(),n.z.object({cardId:n.z.string().uuid(),column:n.z.enum(r),beforeId:n.z.string().uuid().nullable().optional(),afterId:n.z.string().uuid().nullable().optional()}),n.z.object({name:n.z.string().trim().min(1,"Tag name is required").max(o,"Tag name is too long")}),n.z.object({id:n.z.string().uuid(),name:n.z.string().trim().min(1,"Tag name is required").max(o,"Tag name is too long")}),n.z.object({cardId:n.z.string().uuid(),tagIds:n.z.array(n.z.string().uuid()).max(l)}),n.z.string().uuid(),n.z.string().uuid()},58105:(e,t,a)=>{a.d(t,{$A:()=>r,Hx:()=>i,n2:()=>s});var n=a(41924);async function r(e,t){let a=(0,n.AG)(t);if(e.session_id&&await s(e.session_id,t))return null;let{data:r,error:i}=await a.from("forecast_snapshots").insert([{...e,format_coverage:e.format_coverage,section_breakdown:e.section_breakdown,coverage_meta:e.coverage_meta}]).select().single();if(i){if("23505"===i.code)return null;throw new n.ug(i.message,"forecast_snapshots","createIfNotExists",i)}return o(r)}async function s(e,t){let a=(0,n.AG)(t),{data:r,error:s}=await a.from("forecast_snapshots").select("*").eq("session_id",e).maybeSingle();if(s)throw new n.ug(s.message,"forecast_snapshots","getBySessionId",s);return r?o(r):null}async function i(e,t,a,r){let s=(0,n.AG)(r),{data:i,error:l}=await s.from("forecast_snapshots").select("*").eq("user_id",e).eq("subject_id",t).lt("created_at",a).order("created_at",{ascending:!1}).limit(1).maybeSingle();if(l)throw new n.ug(l.message,"forecast_snapshots","getForecastBefore",l);return i?o(i):null}function o(e){var t;return{id:e.id,user_id:e.user_id,subject_id:e.subject_id,session_id:e.session_id,expected_score:e.expected_score,floor_score:e.floor_score,ceiling_score:e.ceiling_score,confidence_level:e.confidence_level,certainty_pct:null!=(t=e.certainty_pct)?t:50,uncertainty_value:e.uncertainty_value,format_coverage:e.format_coverage,taxonomy_coverage_pct:e.taxonomy_coverage_pct,coverage_meta:e.coverage_meta,high_weight_gaps_count:e.high_weight_gaps_count,section_breakdown:e.section_breakdown,is_calibrated:e.is_calibrated,created_at:e.created_at}}},64257:(e,t,a)=>{a.d(t,{jV:()=>q,Wf:()=>v,aY:()=>z,kM:()=>w,me:()=>E});var n=a(83724),r=a(18822),s=a(37988),i=a(72735);function o(e){let t=e;for(let e=0;e<2&&"string"==typeof t;e++)try{t=JSON.parse(t)}catch(e){return null}if(!t||"object"!=typeof t||Array.isArray(t))return null;let a=Object.entries(t);if(0===a.length)return null;for(let[,e]of a)if("string"!=typeof e||"correct"!==e&&!e.startsWith("incorrect"))return null;return t}let l=new Set(["mcq_text","mcq_image","mcq_math","mcq_text_analysis","mcq_cloze","audio_mcq","matching_paragraphs","dialogue_matching","word_bank_cloze"]);function c(e,t){return Math.min(t,Math.max(0,e))}var u=a(80351);let _={mcq_text:"mcq",mcq_image:"map",open_fact_analysis:"fact",open_text_analysis:"document"};function d(e,t,a,n){return n&&n>0?void 0!==a?a/n:.5:t>0?e/t:.5}function m(e){return 0===e?.6:.3/Math.sqrt(e)}function p(){return{total_attempts:0,correct_attempts:0,total_score_earned:0,total_score_possible:0,last_practiced_at:null}}function g(e,t){null!==t.earned&&null!==t.possible&&(e.total_attempts++,e.total_score_earned+=t.recencyWeight*t.earned,e.total_score_possible+=t.recencyWeight*t.possible,t.earned>=t.possible&&e.correct_attempts++),(!e.last_practiced_at||t.lastAttemptedAt>e.last_practiced_at)&&(e.last_practiced_at=t.lastAttemptedAt)}async function f(e,t){try{var a,r;let s=await n.subjects.getById(e,t);if(s.error)throw s.error;return null!=(r=null==(a=s.data)?void 0:a.slug)?r:null}catch(t){return console.warn("[StatsAggregator] Subject lookup failed for ".concat(e,"; default repeat weight"),t),null}}async function b(e,t){var a;let r=null==(a=(await n.subjects.getById(e,t)).data)?void 0:a.exam_id;if(!r)return;let s=await n.py1(r,t);if(!s)return;let i=s.stats_start&&s.stats_start<s.prep_launch?s.stats_start:s.prep_launch;return"".concat(i,"T00:00:00+04:00")}async function y(e,t,a){var s;let y={userId:e,subjectId:t,isLegacy:!1,startDate:await b(t,a)},h=[],w=1,v=!0;
1for(console.log("[StatsAggregator] Fetching attempts for user=".concat(e,", subject=").concat(t));v;){let e=await n.mdh(y,{limit:1e3,page:w},a);h=h.concat(e.data),(v=1e3===e.rawCount)?(console.log("[StatsAggregator] Fetched page ".concat(w," (").concat(e.rawCount," raw, ").concat(e.data.length," enriched). Total so far: ").concat(h.length,". Fetching next page...")),w++):console.log("[StatsAggregator] Fetched page ".concat(w," (").concat(e.rawCount," raw, ").concat(e.data.length," enriched). Total: ").concat(h.length,". Done."))}let z=(0,u.bZ)(await f(t,a)),E=(s=h,(0,u.qC)(s,e=>{var t;return e.questions?function(e,t,a){var n;let r=e.scoring_status;if("failed"===r||"void"===r)return null;let s=l.has(t)&&(0,i.l5)(t);if("scored"===r&&null!=e.score_earned){if(s){let t=o(e.llm_feedback);if(t){let e=Object.values(t);return{earned:e.filter(e=>"correct"===e).length,possible:e.length}}}let t=null!=(n=e.score_max)?n:a;return t>0?{earned:c(e.score_earned,t),possible:t}:null}if(s){let t=function(e,t){let a=o(e.llm_feedback);if(a){let e=Object.values(a),t=e.length,n=e.filter(e=>"correct"===e).length;return{earned:n,possible:t,fullyCorrect:n===t,source:"feedback"}}if(null!=e.llm_score){let a=t>0?t:1,n=Math.min(a,Math.max(0,e.llm_score));return{earned:n,possible:a,fullyCorrect:n>=a,source:"llm_score"}}return null!=e.is_correct?{earned:+!!e.is_correct,possible:1,fullyCorrect:!0===e.is_correct,source:"is_correct"}:null}(e,a);return t?{earned:t.earned,possible:t.possible}:null}if(l.has(t))return null==e.is_correct?null:{earned:+!!e.is_correct,possible:1};if(null==e.llm_score)return null;let u=a>0?a:1;return{earned:c(e.llm_score,u),possible:u}}(e,e.questions.question_type,null!=(t=e.questions.max_score)?t:1):null},{repeatWeight:z}));console.log("[StatsAggregator] Credited: ".concat(h.length," total attempts → ").concat(E.length," questions"));let A=await (0,r.LQ)(t,a),{sectionStats:q,formatsAttempted:S,lastPracticeAt:k}=function(e,t){var a,n;let r=null!=t?t:_,s={},o={};for(let e of Array.from(new Set(Object.values(r))))o[e]=!1;let c=null;for(let t of e){let e=null==(a=t.first.questions)?void 0:a.question_type;if(!e)continue;let n=function(e,t){let a=(null!=t?t:_)[e];return a||(e in i.TH||console.warn("[StatsAggregator] Unknown question type: ".concat(e)),null)}(e,r);n&&(s[n]||(s[n]={...p(),isMcqLike:l.has(e)}),g(s[n],t),(!c||t.lastAttemptedAt>c)&&(c=t.lastAttemptedAt),o[n]=!0)}let u={};for(let[e,t]of Object.entries(s)){let a={total_attempts:t.total_attempts,ability_estimate:d(t.correct_attempts,t.total_attempts,t.total_score_earned,t.total_score_possible),uncertainty:m(t.total_attempts),last_practiced_at:null!=(n=t.last_practiced_at)?n:void 0};t.isMcqLike&&(a.correct_attempts=t.correct_attempts),a.total_score_earned=t.total_score_earned,a.total_score_possible=t.total_score_possible,u[e]=a}return{sectionStats:u,formatsAttempted:o,lastPracticeAt:c}}(E,A?function(e){let t={};for(let a of e)if(Array.isArray(a.questionTypes))for(let e of a.questionTypes)t[e]=a.id;return t}(A.sections):void 0),j=function(e){let t=new Map;for(let n of e){var a;let e=null==(a=n.first.questions)?void 0:a.level_3;if(!e)continue;let r=t.get(e);r||(r=p(),t.set(e,r)),g(r,n)}return Array.from(t.entries()).map(e=>{let[t,a]=e;return{taxonomy_level_1:t,taxonomy_level_2:null,total_attempts:a.total_attempts,correct_attempts:a.correct_attempts,total_score_earned:a.total_score_earned,total_score_possible:a.total_score_possible,performance_estimate:d(a.correct_attempts,a.total_attempts,a.total_score_earned,a.total_score_possible),uncertainty:m(a.total_attempts),last_practiced_at:a.last_practiced_at}})}(E),R=function(e,t){var a,n,r,s;let i=function(e){let t=e.filter(e=>{var t;return"mcq_text"===(null==(t=e.questions)?void 0:t.question_type)}),a=new Map;for(let e of t){var n,r,s;let t=null==(n=e.questions)?void 0:n.level_1,i=null==(r=e.questions)?void 0:r.level_2;if(!t||!i)continue;let o="".concat(t,"|").concat(i),l=null!=(s=a.get(o))?s:0;a.set(o,l+1)}let i=Array.from(a.values()),o=0;for(let e of i)e>=4&&o++;return o}(t);return{mcq_attempts:null!=(r=null==(a=e.mcq)?void 0:a.total_attempts)?r:0,mcq_taxonomy_buckets:i,map_done:void 0!==e.map&&e.map.total_attempts>0,map_attempts:null!=(s=null==(n=e.map)?void 0:n.total_attempts)?s:0,fact_done:void 0!==e.fact&&e.fact.total_attempts>0,document_done:void 0!==e.document&&e.document.total_attempts>0}}(q,E.map(e=>e.first));return{sectionStats:q,formatsAttempted:S,calibrationProgress:R,taxonomyCells:j,lastPracticeAt:k}}async function h(e,t,a,r){var s;let i=await n.JtY(e,t,r),o=null!=(s=null==i?void 0:i.is_calibrated)&&s;await n.pM6(e,t,{section_stats:a.sectionStats,formats_attempted:a.formatsAttempted,is_calibrated:o,calibration_progress:a.calibrationProgress,last_practice_at:a.lastPracticeAt},r);let l=a.taxonomyCells.map(e=>({taxonomy_level_1:e.taxonomy_level_1,taxonomy_level_2:e.taxonomy_level_2,total_attempts:e.total_attempts,correct_attempts:e.correct_attempts,total_score_earned:e.total_score_earned,total_score_possible:e.total_score_possible,performance_estimate:e.performance_estimate,uncertainty:e.uncertainty,last_practiced_at:e.last_practiced_at}));await n.WL(e,t,l,r)}
1async function w(e,t,a){let n=await y(e,t,a);return await h(e,t,n,a),n}async function v(e,t){let a=n.AGj(t),{data:r,error:i}=await a.from("question_attempts").select("id, llm_score, question_id").eq("learning_session_id",e);if(i)return console.error("[Forecast] Error checking pending grading:",i),!1;if(!r||0===r.length)return!1;let o=Array.from(new Set(r.map(e=>e.question_id))),l=new Map((await (0,s.batchFetchQuestionsDisplay)(a,o,"id, question_type")).map(e=>[e.id,e])),c=["open_text","open_fact_analysis","open_text_analysis","essay","text_correction"];for(let e of r){let t=l.get(e.question_id);if(t&&c.includes(t.question_type)&&null===e.llm_score)return!0}return!1}async function z(e,t){let a=n.AGj(t),{data:r,error:i}=await a.from("question_attempts").select("id, llm_score, question_id").eq("learning_session_id",e);if(i||!r)return console.error("[Forecast] Error counting pending grading:",i),0;let o=Array.from(new Set(r.map(e=>e.question_id)));if(0===o.length)return 0;let l=new Map((await (0,s.batchFetchQuestionsDisplay)(a,o,"id, question_type")).map(e=>[e.id,e])),c=["open_text","open_fact_analysis","open_text_analysis","essay","text_correction"];return r.filter(e=>{let t=l.get(e.question_id);return t&&c.includes(t.question_type)&&null===e.llm_score}).length}async function E(e,t,a){let n=Date.now();try{console.log("[Forecast] Recomputing stats for user=".concat(t,", subject=").concat(a));let r=await w(t,a);if(await v(e)){let t=Date.now()-n;return console.log("[Forecast] Session ".concat(e," has pending grading, deferring snapshot. Stats updated in ").concat(t,"ms")),{snapshotCreated:!1,pendingGrading:!0,aggregationResult:r}}console.log("[Forecast] Creating snapshot for session ".concat(e));let s=await A(t,a,e,r),i=null!==s,o=Date.now()-n;return console.log("[Forecast] Session ".concat(e," complete. Snapshot ").concat(i?"created":"already exists",". Total time: ").concat(o,"ms")),{snapshotCreated:i,pendingGrading:!1,aggregationResult:r}}catch(e){return console.error("[Forecast] Error in updateOnSessionComplete:",e),{snapshotCreated:!1,pendingGrading:!1,aggregationResult:{sectionStats:{},formatsAttempted:{mcq:!1,map:!1,fact:!1,document:!1},calibrationProgress:{mcq_attempts:0,mcq_taxonomy_buckets:0,map_done:!1,fact_done:!1,document_done:!1},taxonomyCells:[],lastPracticeAt:null},error:e instanceof Error?e.message:"Unknown error"}}}async function A(e,t,n,r){let{getForecast:s,saveSnapshot:i}=await Promise.resolve().then(a.bind(a,90973)),o=await s(e,t);return o?i(o,e,t,n):(console.warn("[Forecast] No forecast available for user ".concat(e,", subject ").concat(t)),null)}async function q(e,t,a){let r=Date.now();if(await n.Det(e,t,a))return{backfillPerformed:!1,aggregationResult:null,durationMs:Date.now()-r};console.log("[Forecast] Backfilling stats for user=".concat(e,", subject=").concat(t));try{let n=await w(e,t,a),s=Date.now()-r;return console.log("[Forecast] Backfill complete for user=".concat(e,". Duration: ").concat(s,"ms")),{backfillPerformed:!0,aggregationResult:n,durationMs:s}}catch(a){let t=Date.now()-r;return console.error("[Forecast] Backfill failed for user=".concat(e,":"),a),{backfillPerformed:!1,aggregationResult:null,durationMs:t}}}},65893:(e,t,a)=>{a.d(t,{WR:()=>s,py:()=>r});var n=a(41924);async function r(e,t){let a=await (0,n.zi)(async()=>{var a;let r=(0,n.AG)(t),{data:s,error:i}=await r.rpc("season_current",{p_exam_id:e});if(i)throw i;return null!=(a=(Array.isArray(s)?s:s?[s]:[])[0])?a:null},"seasons","getCurrentSeason");if(a.error)throw a.error;return a.data}async function s(e,t,a){let r=await (0,n.zi)(async()=>{var r;let s=(0,n.AG)(a),i={p_user_id:e,...t?{p_subject:t}:{}},{data:o,error:l}=await s.rpc("season_days_to_exam",i);if(l)throw l;return null!=(r=(Array.isArray(o)?o:o?[o]:[])[0])?r:null},"season_events","getDaysToExam");if(r.error)throw r.error;return r.data}},83724:(e,t,a)=>{a.d(t,{Enm:()=>x.En,F3P:()=>u,JtY:()=>j.Jt,py1:()=>_.py,I$n:()=>i.I$,mdh:()=>s.md,AGj:()=>n.AG,fRr:()=>l,DUC:()=>o,questionLists:()=>I,WL:()=>R.WL,Det:()=>j.De,pe$:()=>M,subjects:()=>c.subjects,pM6:()=>j.pM});var n=a(41924);a(31945),a(30502);async function r(e,t,a,n){let r=await wrapDALOperation(async()=>{let n=getSupabaseClient(a),{data:r,error:s}=await n.from("plans").select("*").eq(e,t);if(s)throw s;return null!=r?r:[]},"plans",n);if(r.error)throw r.error;return r.data}a(95208);var s=a(27099),i=a(11750);a(46604);a(82408);async function o(e){let t=(0,n.AG)(e),{data:a,error:r}=await t.rpc("get_topics_with_counts");if(r)throw new n.ug(r.message,"topics","getTopics",r);return a}
1async function l(e,t,a,r){let s=(0,n.AG)(r),i={p_user_id:e,p_subject_id:t};a&&a.length>0&&(i.p_question_types=a);let{data:o,error:l}=await s.rpc("get_topic_list_with_progress",i);if(l)throw new n.ug(l.message,"topics","getTopicListWithProgress",l);return o||[]}var c=a(47936);let u={getByMarket:async(e,t)=>(0,n.zi)(async()=>{let a=(0,n.AG)(t),{data:r,error:s}=await a.from("markets").select("id").eq("slug",e).single();if(s)throw s;let{data:i,error:o}=await a.from("exams").select("*").eq("market_id",r.id).order("display_order");if(o)throw o;return i},"exams","getByMarket"),getBySlug:async(e,t,a)=>(0,n.zi)(async()=>{let r=(0,n.AG)(a),{data:s,error:i}=await r.from("markets").select("id").eq("slug",e).single();if(i)throw i;let{data:o,error:l}=await r.from("exams").select("*").eq("market_id",s.id).eq("slug",t).single();if(l)throw l;return"string"==typeof o.config&&(o.config=JSON.parse(o.config)),o},"exams","getBySlug"),getById:async(e,t)=>(0,n.zi)(async()=>{let a=(0,n.AG)(t),{data:r,error:s}=await a.from("exams").select("*").eq("id",e).single();if(s)throw s;return"string"==typeof r.config&&(r.config=JSON.parse(r.config)),r},"exams","getById"),getDefaultForMarket:async(e,t)=>(0,n.zi)(async()=>{let a=(0,n.AG)(t),{data:r,error:s}=await a.from("markets").select("id").eq("slug",e).single();if(s)throw s;let{data:i,error:o}=await a.from("exams").select("*").eq("market_id",r.id).eq("is_default",!0).single();if(o)throw o;return"string"==typeof i.config&&(i.config=JSON.parse(i.config)),i},"exams","getDefaultForMarket"),getActiveByMarket:async(e,t)=>(0,n.zi)(async()=>{let a=(0,n.AG)(t),{data:r,error:s}=await a.from("markets").select("id").eq("slug",e).single();if(s)throw s;let{data:i,error:o}=await a.from("exams").select("*").eq("market_id",r.id).eq("is_active",!0).order("display_order");if(o)throw o;return i},"exams","getActiveByMarket")};a(25831);var _=a(65893);a(54996);a(43974);var d=a(77964);a(43974),d.z.object({day:d.z.string(),dow:d.z.string(),paywall_users:d.z.number().int().nonnegative(),pitch_users:d.z.number().int().nonnegative(),plan_users:d.z.number().int().nonnegative(),pay_users:d.z.number().int().nonnegative(),form_users:d.z.number().int().nonnegative(),submit_users:d.z.number().int().nonnegative(),declined_users:d.z.number().int().nonnegative(),approved_users:d.z.number().int().nonnegative(),unlocked_users:d.z.number().int().nonnegative(),new_buyers:d.z.number().int().nonnegative()}),a(43974),d.z.object({user_id:d.z.string().uuid(),email:d.z.string(),signed_up_at:d.z.string(),preferred_language:d.z.string().nullable(),exam_date:d.z.string().nullable(),last_active_market:d.z.string().nullable(),questions_answered:d.z.number().int().nonnegative(),correct_answers:d.z.number().int().nonnegative(),sessions_count:d.z.number().int().nonnegative(),last_activity:d.z.string().nullable(),has_active_subscription:d.z.boolean(),subscribe_page_views:d.z.number().int().nonnegative()});var m=a(43974);d.z.object({grain:d.z.enum(["subject_type","subject_topic_type"]),subject_id:d.z.string().uuid(),question_type:d.z.string(),level_1:d.z.string().nullable(),level_2:d.z.string().nullable(),level_3:d.z.string().nullable(),total_questions:d.z.number().int().nonnegative(),users_any:d.z.number().int().nonnegative(),users_seen_100:d.z.number().int().nonnegative(),users_mastered_100:d.z.number().int().nonnegative(),avg_tries_mastered_100:d.z.number().nullable(),pct_seen_100:d.z.number().nullable(),pct_mastered_100:d.z.number().nullable()});var p=a(43974);let g=d.z.string().nullish(),f=d.z.number().nullish(),b=(d.z.object({user_id:d.z.string().uuid(),email:g,display_name:g,created_at:g,last_sign_in_at:g,match_kind:g}),d.z.object({user_id:d.z.string().uuid(),email:g,email_confirmed_at:g,created_at:g,last_sign_in_at:g,banned_until:g,provider:g,providers:d.z.array(d.z.string()).nullish(),display_name:g,phone:g,test_taker_number:g,exam_day:d.z.object({exam_year:d.z.number().nullish(),subject:g,exam_date:g,days_to_exam:d.z.number().nullish(),status:g}).nullish(),preferred_market:g,registered_market:g,last_active_market:g,preferred_language:g,last_active_exam:g,profile_created_at:g,is_admin:d.z.boolean().nullish(),is_teacher:d.z.boolean().nullish(),deleti
1on_request:d.z.object({status:g,created_at:g,reason:g,processed_at:g}).nullish()})),y=d.z.object({id:d.z.string(),status:g,created_at:g,updated_at:g,current_period_end:g,trial_end:g,canceled_at:g,payment_provider:g,retry_count:f,last_failed_at:g,last_failure_reason:g,next_retry_at:g,parent_order_id:g,plan_slug:g,plan_name:g,price_tetri:f,interval_months:f,payment_type:g,exam_slug:g,exam_name:g,card_brand:g,card_last4:g,card_exp_month:f,card_exp_year:f,card_active:d.z.boolean().nullish()}),h=d.z.object({created_at:g,status:g,intent:g,amount_tetri:f,currency:g,payment_provider:g,order_id:g,plan_slug:g}),w=d.z.object({subscriptions:d.z.array(y).default([]),is_premium:d.z.boolean().nullish(),payments:d.z.object({completed_count:f,other_count:f,total_tetri:f,currency:g,first_paid_at:g,last_paid_at:g,recent:d.z.array(h).default([])}),promo_redemptions:d.z.array(d.z.object({code:g,created_at:g,discount_amount_tetri:f,order_id:g})).default([])}),v=d.z.object({attempts:f,correct:f,ungraded:f,unique_questions:f,time_spent_sec:f,first_attempt_at:g,last_attempt_at:g,active_days:f,active_days_30d:f,attempts_7d:f,attempts_30d:f,attempts_90d:f,by_subject:d.z.array(d.z.object({subject_slug:g,subject_name:g,attempts:f,correct:f,last_attempt_at:g,time_spent_sec:f,is_calibrated:d.z.boolean().nullish(),last_practice_at:g})).default([]),sessions_by_type:d.z.array(d.z.object({type:g,total:f,completed:f,last_at:g})).default([]),daily_90d:d.z.array(d.z.object({day:d.z.string(),attempts:f,correct:f,time_spent_sec:f})).default([]),streaks:d.z.array(d.z.object({exam_slug:g,exam_name:g,current_streak:f,longest_streak:f,last_activity_date:g,saves_remaining:f,streak_lost_at:g,timezone:g})).default([])}),z=d.z.object({push_devices:f,push_last_seen_at:g,push_platforms:d.z.array(d.z.string()).nullish(),notifications_90d:d.z.object({sent:f,clicked:f,last_sent_at:g}),emails:d.z.object({total:f,last_30d:f,last_sent_at:g}),email_prefs:d.z.object({marketing_emails:d.z.boolean().nullish(),educational_content:d.z.boolean().nullish(),product_updates:d.z.boolean().nullish(),email_frequency:g,last_email_sent_at:g}).nullish()}),E=d.z.object({question_reports:d.z.object({total:f,open:f}),predictor_profiles:f,mission_attempts:f,skill_attempts:f,surveys_submitted:f,onboarding:d.z.array(d.z.object({step_id:g,flow_id:g,response:d.z.unknown().nullish(),created_at:g})).default([]),conversion_events:d.z.array(d.z.object({created_at:g,event_type:g,source:g})).default([])});d.z.object({identity:b,billing:w,engagement:v,reachability:z,extras:E});var A=a(47738);d.z.object({endpoint:d.z.string().url(),keys:d.z.object({p256dh:d.z.string().min(1),auth:d.z.string().min(1)}),expirationTime:d.z.number().nullable().optional()}),d.z.object({user_id:d.z.string().uuid(),study_reminders:d.z.boolean().default(!0),streak_reminders:d.z.boolean().default(!0),weekly_recap:d.z.boolean().default(!0),reading_updates:d.z.boolean().default(!0),allowance_updates:d.z.boolean().default(!0),exam_alerts:d.z.boolean().default(!0),new_content:d.z.boolean().default(!0),subscription_updates:d.z.boolean().default(!0),reminder_hour:d.z.number().int().min(0).max(23).default(19),max_reminders_per_week:d.z.number().int().min(0).max(14).default(5),cadence_days:d.z.array(d.z.number().int().min(1).max(7)).nullable().optional(),daily_goal_minutes:d.z.union([d.z.literal(10),d.z.literal(15),d.z.literal(30)]).nullable().optional(),created_at:d.z.string().nullable().optional(),updated_at:d.z.string().nullable().optional()}),d.z.object({study_reminders:d.z.boolean().optional(),streak_reminders:d.z.boolean().optional(),weekly_recap:d.z.boolean().optional(),reading_updates:d.z.boolean().optional(),allowance_updates:d.z.boolean().optional(),exam_alerts:d.z.boolean().optional(),new_content:d.z.boolean().optional(),subscription_updates:d.z.boolean().optional(),reminder_hour:d.z.number().int().min(A.cn[0]).max(A.cn[A.cn.length-1]).optional()});let q=d.z.enum(["prompt_shown","install_clicked","installed","dismissed","install_guide_opened","install_prompt_not_available","push_prompt_shown","push_prompt_clicked","push_prompt_dism
1issed","fallback_prompt_shown","fallback_prompt_clicked","fallback_prompt_dismissed","push_prompt_celebrate_shown","push_prompt_explain_shown","opened_standalone"]),S=d.z.enum(["banner","interstitial","notification_prompt","fallback_banner","standalone_tracker","session_end_card"]),k=d.z.enum(["ios","android","desktop"]).nullable().optional();d.z.object({user_id:d.z.string().uuid(),device_id:d.z.string().min(1),event_type:q,surface:S,platform:k,metadata:d.z.record(d.z.unknown()).nullable().optional()}),a(58105);var j=a(86289),R=a(54793);a(18822);var x=a(25561),M=a(4737),I=a(39162);a(88806),a(48669);var T=a(80204),P=a(7970),C=a(43974);function D(){if(!C.env.SUPABASE_SERVICE_ROLE_KEY)throw Error("SUPABASE_SERVICE_ROLE_KEY is not set");return(0,T.createClient)("https://vktsqlazekdltednmlhe.supabase.co",C.env.SUPABASE_SERVICE_ROLE_KEY,{auth:{autoRefreshToken:!1,persistSession:!1}})}async function O(){let e=(0,n.AG)(),{data:t,error:a}=await e.from("ranking_leaderboard").select("*").order("rank",{ascending:!0});if(a)throw new n.ug(a.message,"ranking_leaderboard","getLeaderboard",a);return t||[]}async function L(){let e=(0,n.AG)(),{data:t,error:a}=await e.from("ranking_taxonomy_public").select("*").order("field_l1").order("field_l2");if(a)throw new n.ug(a.message,"ranking_taxonomy_public","getTaxonomy",a);return t||[]}async function G(){let e=D(),{data:t,error:a}=await e.from("ranking_universities").select("city").not("city","is",null).order("city");if(a)throw new n.ug(a.message,"ranking_universities","getCities",a);return Array.from(new Set((t||[]).map(e=>e.city).filter(Boolean))).sort()}async function N(e){var t,a,r,s;let i=D(),{data:o,error:l}=await i.rpc("compute_university_rankings",{p_ownership:null!=(t=e.ownership)?t:null,p_city:null!=(a=e.city)?a:null,p_field_l1:null!=(r=e.field_l1)?r:null,p_field_l2:null!=(s=e.field_l2)?s:null});if(l)throw new n.ug(l.message,"compute_university_rankings","computeFilteredRankings",l);return o||[]}async function B(e){let t=D(),{data:a,error:r}=await t.from("ranking_universities").select("*").eq("uni_code",e).maybeSingle();if(r)throw new n.ug(r.message,"ranking_universities","getUniversityDetail",r);return a}async function U(e,t){let a=D().from("ranking_programs").select("*").eq("uni_code",e).neq("exclude",!0);(null==t?void 0:t.field_l1)&&(a=a.eq("field_l1",t.field_l1)),(null==t?void 0:t.field_l2)&&(a=a.eq("field_l2",t.field_l2));let{data:r,error:s}=await a.order("program_name");if(s)throw new n.ug(s.message,"ranking_programs","getUniversityPrograms",s);return r||[]}async function Y(e){let t=D(),{data:a,error:r}=await t.rpc("compute_program_stats",{p_uni_code:e});if(r)throw new n.ug(r.message,"compute_program_stats","getProgramStats",r);return a||[]}let K={revalidate:3600,tags:["rankings"]};(0,P.unstable_cache)(O,["rankings-leaderboard"],K),(0,P.unstable_cache)(L,["rankings-taxonomy"],K),(0,P.unstable_cache)(G,["rankings-cities"],K),(0,P.unstable_cache)(N,["rankings-filtered"],K),(0,P.unstable_cache)(B,["rankings-university-detail"],K),(0,P.unstable_cache)(U,["rankings-university-programs"],K),(0,P.unstable_cache)(Y,["rankings-program-stats"],K);var F=a(43974);function W(){if(!F.env.SUPABASE_SERVICE_ROLE_KEY)throw Error("SUPABASE_SERVICE_ROLE_KEY is not set");return(0,T.createClient)("https://vktsqlazekdltednmlhe.supabase.co",F.env.SUPABASE_SERVICE_ROLE_KEY,{auth:{autoRefreshToken:!1,persistSession:!1}})}let V=new Set(["MATCHED","REMOVED","SPLIT_PARENT","MERGED_PARENT","MERGED_CHILD"]),Q=new Set(["MATCHED","ADDED","SPLIT_PARENT","SPLIT_CHILD","MERGED_PARENT"]),Z=new Set(["MATCHED","REMOVED","SPLIT_PARENT","MERGED_CHILD"]),H=new Set(["MATCHED","ADDED","SPLIT_PARENT","SPLIT_CHILD"]);async function J(e,t){let a,r=e.from("ranking_program_matches").select("*").range(0,1999);a=r,t.ownership&&(a=a.eq("ownership",t.ownership)),t.field_l1&&(a=a.eq("field_l1",t.field_l1)),t.field_l2&&(a=a.eq("field_l2",t.field_l2)),r=a;let{data:s,error:i}=await r;if(i)throw new n.ug(i.message,"ranking_program_matches","fetchFilteredMatches",i);return s||[]}function $(e){return e.filter(e=>V.has(e.match_status)).reduce((e,t)=>
1{var a;return e+(null!=(a=t.seats_2025)?a:0)},0)}function X(e){return e.filter(e=>Q.has(e.match_status)).reduce((e,t)=>{var a;return e+(null!=(a=t.seats_2026)?a:0)},0)}async function ee(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e3,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:2e4,n=[],r=0;for(;r<a;){let a=r+t-1,{data:s,error:i}=await e([r,a]);if(i)throw i;if(!s||0===s.length||(n.push(...s),s.length<t))break;r+=t}return n}async function et(e){let t=W(),a=await J(t,e);return{overview:function(e,t){let a={matched:0,removed:0,added:0,grouped:0};for(let t of e)switch(t.match_status){case"MATCHED":a.matched++;break;case"REMOVED":a.removed++;break;case"ADDED":a.added++;break;case"SPLIT_PARENT":case"SPLIT_CHILD":case"MERGED_PARENT":case"MERGED_CHILD":a.grouped++}let n=$(e),r=X(e),s=r-n,i=null;if(!t.ownership){let t=e.filter(e=>"government"===e.ownership),a=e.filter(e=>"private"===e.ownership);i={government:{seats_2025:$(t),seats_2026:X(t),delta:X(t)-$(t)},private:{seats_2025:$(a),seats_2026:X(a),delta:X(a)-$(a)}}}return{...a,seats_2025:n,seats_2026:r,seat_delta:s,seat_pct_change:n>0?s/n*100:0,ownership_breakdown:i}}(a,e),seats_by_field:function(e,t){let a=!!t.field_l1,n=e=>(a?e.field_l2:e.field_l1)||"Unknown",r=new Map,s=0;for(let t of e){var i,o;if(!Q.has(t.match_status))continue;let e=null!=(i=t.seats_2026)?i:0;if(0===e)continue;let a=n(t);r.set(a,(null!=(o=r.get(a))?o:0)+e),s+=e}let l=[];return Array.from(r.entries()).forEach(e=>{let[t,a]=e;l.push({field:t,seats_2026:a,pct:s>0?a/s*100:0})}),l.sort((e,t)=>e.seats_2026-t.seats_2026),l}(a,e),seat_changes_by_field:function(e,t){let a=!!t.field_l1,n=e=>(a?e.field_l2:e.field_l1)||"Unknown",r=new Map,s=e=>{let t=r.get(e);return t||(t={seats_2025:0,seats_2026:0,gov_2025:0,gov_2026:0,priv_2025:0,priv_2026:0},r.set(e,t)),t};for(let t of e){let e=n(t),a=t.match_status,r=s(e);V.has(a)&&t.seats_2025&&(r.seats_2025+=t.seats_2025,"government"===t.ownership&&(r.gov_2025+=t.seats_2025),"private"===t.ownership&&(r.priv_2025+=t.seats_2025)),Q.has(a)&&t.seats_2026&&(r.seats_2026+=t.seats_2026,"government"===t.ownership&&(r.gov_2026+=t.seats_2026),"private"===t.ownership&&(r.priv_2026+=t.seats_2026))}let i=[];return Array.from(r.entries()).forEach(e=>{let[t,a]=e,n=a.seats_2026-a.seats_2025;0!==n&&i.push({field:t,seats_2025:a.seats_2025,seats_2026:a.seats_2026,delta:n,pct_change:a.seats_2025>0?n/a.seats_2025*100:0,government_delta:a.gov_2026-a.gov_2025,private_delta:a.priv_2026-a.priv_2025})}),i.sort((e,t)=>e.delta-t.delta),i}(a,e),universities:function(e){let t=new Map,a=e=>{let a=t.get(e.university_code);if(!a){var n;a={uni_code:e.university_code,university_name:null!=(n=e.university_name)?n:"uni ".concat(e.university_code),ownership:e.ownership,seats_2025:0,seats_2026:0},t.set(e.university_code,a)}return a};for(let t of e){let e=t.match_status,n=a(t);V.has(e)&&t.seats_2025&&(n.seats_2025+=t.seats_2025),Q.has(e)&&t.seats_2026&&(n.seats_2026+=t.seats_2026)}let n=[];return Array.from(t.values()).forEach(e=>{let t=e.seats_2026-e.seats_2025;n.push({uni_code:e.uni_code,university_name:e.university_name,ownership:e.ownership,seats_2025:e.seats_2025,seats_2026:e.seats_2026,delta:t,pct_change:e.seats_2025>0?t/e.seats_2025*100:0})}),n.sort((e,t)=>e.delta-t.delta),n}(a)}}async function ea(e){let t=W(),{data:a,error:r}=await t.from("ranking_universities").select("uni_code, ownership");if(r)throw new n.ug(r.message,"ranking_universities","getPrograms2026List",r);let s=new Map;for(let e of a||[])s.set(e.uni_code,e.ownership);let i=t.from("ranking_programs_2026").select("program_id, prog_code, program_name, university_name, uni_code, field_l1, field_l2, seats, tuition, qualification, language").neq("exclude",!0).range(0,1999);e.field_l1&&(i=i.eq("field_l1",e.field_l1)),e.field_l2&&(i=i.eq("field_l2",e.field_l2));let{data:o,error:l}=await i;if(l)throw new n.ug(l.message,"ranking_programs_2026","getPrograms2026List",l);let c=e.ownership?(o||[]).filter(t=>s.get(t.uni_code)===e.ownership):o||[],u=t.from("ranking_program_matches").select("program_id_2026, match_status, seats_2025, seats_delta").not("program_id_2026","is",null).range(0,1999);e.ownership&&(u=u.eq("ownership",e.ownership)),e.field_l1&&(u=u.eq("field_l1",e.field_l1)),e.field_l2&&(u=u.eq("field_l2",e.field_l2));let{data:_,error:d}=await u;if(d)throw new n.ug(d.message,"ranking_program_matches","getPrograms2026List",d);let m=new Map;for(let e of _||[])e.program_id_2026&&m.set(e.program_id_2026,{match_status:e.match_status,seats_2025:e.seats_2025,seats_delta:e.seats_delta});let p=c.map(e=>{var t,a,n;let r=m.get(e.program_id);return{program_id:e.program_id,prog_code:e.prog_code,program_name:e.program_name,university_name:e.university_name,uni_code:e.uni_code,field_l1:e.field_l1,field_l2:e.field_l2,seats:e.seats,tuition:e.tuition,qual
1ification:e.qualification,language:e.language,match_status:null!=(t=null==r?void 0:r.match_status)?t:null,seats_2025:null!=(a=null==r?void 0:r.seats_2025)?a:null,seats_delta:null!=(n=null==r?void 0:r.seats_delta)?n:null}});return p.sort((e,t)=>{var a,n;return(null!=(a=t.seats)?a:0)-(null!=(n=e.seats)?n:0)}),p}async function en(e){let t=W(),a=await J(t,e),n=new Map;for(let e of a)e.match_key&&n.set(e.match_key,e);let r=await ee(e=>t.from("ranking_requirement_facts").select("*").eq("req_type","elective").range(e[0],e[1]),1e3),s=new Map,i=new Map;for(let e of r){var o,l;let t=n.get(e.match_key);if(!t)continue;let a=t.match_status;if(!(2025===e.year&&Z.has(a)||2026===e.year&&H.has(a)))continue;let r=null!=(o=e.subject_seats)?o:0;if(0===r)continue;let c=s.get(e.subject);c||(c={seats_2025:0,seats_2026:0,uni_seats:new Map},s.set(e.subject,c)),2025===e.year?c.seats_2025+=r:2026===e.year&&(c.seats_2026+=r);let u=null!=(l=t.university_name)?l:"uni ".concat(t.university_code),_=i.get(t.university_code);_||(_={name:u,s25:0,s26:0},i.set(t.university_code,_)),2025===e.year?_.s25+=r:2026===e.year&&(_.s26+=r)}let c=0,u=0;Array.from(s.values()).forEach(e=>{c+=e.seats_2025,u+=e.seats_2026});let _=[];Array.from(s.entries()).forEach(e=>{let[t,a]=e,n=c>0?a.seats_2025/c*100:0,r=u>0?a.seats_2026/u*100:0;_.push({subject:t,seats_2025:a.seats_2025,seats_2026:a.seats_2026,delta:a.seats_2026-a.seats_2025,pct_2025:n,pct_2026:r,share_delta_pp:r-n})}),_.sort((e,t)=>t.share_delta_pp-e.share_delta_pp);let d=[];return Array.from(i.entries()).forEach(e=>{let[t,a]=e;d.push({uni_code:t,university_name:a.name,seats_2025:a.s25,seats_2026:a.s26,delta:a.s26-a.s25})}),d.sort((e,t)=>Math.abs(t.delta)-Math.abs(e.delta)),{seats_2025_total:c,seats_2026_total:u,subjects:_,universities_ranked_by_abs_delta:d}}(0,P.unstable_cache)(et,["rankings-changes-dashboard-core-v2"],{revalidate:3600,tags:["ranking-changes"]}),(0,P.unstable_cache)(ea,["rankings-changes-programs-2026-v2"],{revalidate:3600,tags:["ranking-changes"]}),(0,P.unstable_cache)(en,["rankings-changes-electives-v2"],{revalidate:3600,tags:["ranking-changes"]}),a(20828);var er=a(43974);a(85076);var es=a(43974),ei=a(43974);let eo={programName:null,universityName:null,cardRank:null,cardStatus:null,card:null};function el(e){return"string"==typeof e&&e.length>0?e:null}function ec(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}a(55424);a(43974);function eu(e,t){console.warn(e,t)}let e_={moments_schedule_trigger_has_eligibility:"a schedule moment needs eligibility_sql before it can be turned on",moment_caps_max_sends_non_negative:"max sends cannot be negative",moment_caps_per_is_known:"per must be day, week or lapse",moment_variants_title_not_blank:"a variant needs a title",moment_variants_body_not_blank:"a variant needs a body",moment_variants_weight_is_positive:"weight must be above 0"};n.ug;let ed="goal_readings",em="goal_list_entries",ep="id, rung, rung_given_at, elective_probe, constraints";function eg(e){return{programmeId:e.programme_id,rank:e.rank,origin:e.origin,confirmedAt:e.confirmed_at,slot:e.slot}}async function ef(e,t){let{data:a,error:n}=await getSupabaseClient(t).from(ed).select(ep).eq("user_id",e).maybeSingle();if(n)throw new DALError(n.message,ed,"readReading",n);return null!=a?a:null}var eb=a(69273);a(72024),a(90652),a(46558);var ey=a(2249);function eh(e,t){let a=e.find(e=>e.raw_score===Math.round(t));return a?inverseStandardNormal(Number(a.pct_mid)/100):null}ey.Md;var ew=a(33486),ev=a(43974);function ez(){if(!ev.env.SUPABASE_SERVICE_ROLE_KEY)throw Error("SUPABASE_SERVICE_ROLE_KEY is not set");return(0,T.createClient)("https://vktsqlazekdltednmlhe.supabase.co",ev.env.SUPABASE_SERVICE_ROLE_KEY,{auth:{autoRefreshToken:!1,persistSession:!1}})}async function eE(e){let t=ez(),a=[];for(let r=0;;r+=1e3){let{data:s,error:i}=await t.from("ranking_admission_outcomes").select(ew.r3).eq("year",e).order("id",{ascending:!0}).range(r,r+1e3-1);if(i)throw new n.ug(i.message,"ranking_admission_outcomes","getAdmissionOutcomes",i);let o=null!=s?s:[];if(a.push(...o),o.length<1e3)break}return a}
1async function eA(e,t){let a=ez(),{data:r,error:s}=await a.from("ranking_subject_curve").select("raw_score, n_at, pct_below, pct_mid, pct_at_or_below, scaled").eq("year",e).eq("subject",t).order("raw_score",{ascending:!0});if(s)throw new n.ug(s.message,"ranking_subject_curve","getSubjectCurve",s);return null!=r?r:[]}async function eq(e){let t=ez(),{data:a,error:r}=await t.from("ranking_subject_scale").select("year, subject, subject_naec, max_raw, mean_equated, sd_equated, n_sitters").eq("year",e).order("subject",{ascending:!0});if(r)throw new n.ug(r.message,"ranking_subject_scale","getSubjectScales",r);return null!=a?a:[]}(0,P.unstable_cache)(eE,["admission-outcomes-v1"],{revalidate:3600,tags:["admission-outcomes"]}),(0,P.unstable_cache)(eA,["subject-curve-v1"],{revalidate:86400,tags:["admission-outcomes"]}),(0,P.unstable_cache)(function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:eb.Rx;return eq(e)},["subject-scale-v1"],{revalidate:86400,tags:["admission-outcomes","predictor"]});let eS="goal_wishes";function ek(e){return{subject:e.subject,raw:e.raw,source:e.source,createdAt:e.created_at}}async function ej(e){var t;return null!=(t=null==e?void 0:e.scales)?t:buildSubjectScales(await getSubjectScales())}async function eR(e,t){let a=await wrapDALOperation(e,"check_sittings",t);if(a.error)throw a.error;return a.data}a(72735)},86289:(e,t,a)=>{a.d(t,{De:()=>o,Jt:()=>r,a$:()=>c,pM:()=>s,updateCalibrationStatus:()=>i});var n=a(41924);async function r(e,t,a){let r=(0,n.AG)(a),{data:s,error:i}=await r.from("user_subject_stats").select("*").eq("user_id",e).eq("subject_id",t).maybeSingle();if(i)throw new n.ug(i.message,"user_subject_stats","get",i);return s?l(s):null}async function s(e,t,a,r){let s=(0,n.AG)(r),i={user_id:e,subject_id:t,section_stats:a.section_stats,formats_attempted:a.formats_attempted,is_calibrated:a.is_calibrated,calibration_progress:a.calibration_progress,calibrated_at:a.calibrated_at,last_practice_at:a.last_practice_at},{data:o,error:c}=await s.from("user_subject_stats").upsert(i,{onConflict:"user_id,subject_id"}).select().single();if(c)throw new n.ug(c.message,"user_subject_stats","upsert",c);return l(o)}async function i(e,t,a,r){let s=(0,n.AG)(r),i={is_calibrated:a,updated_at:new Date().toISOString()};a&&(i.calibrated_at=new Date().toISOString());let{data:o,error:c}=await s.from("user_subject_stats").update(i).eq("user_id",e).eq("subject_id",t).select().single();if(c)throw new n.ug(c.message,"user_subject_stats","updateCalibrationStatus",c);return l(o)}async function o(e,t,a){let r=(0,n.AG)(a),{count:s,error:i}=await r.from("user_subject_stats").select("*",{count:"exact",head:!0}).eq("user_id",e).eq("subject_id",t);if(i)throw new n.ug(i.message,"user_subject_stats","exists",i);return(null!=s?s:0)>0}function l(e){return{id:e.id,user_id:e.user_id,subject_id:e.subject_id,section_stats:e.section_stats||{},formats_attempted:e.formats_attempted||{mcq:!1,map:!1,fact:!1,document:!1},is_calibrated:e.is_calibrated,calibration_progress:e.calibration_progress||{},calibrated_at:e.calibrated_at,last_practice_at:e.last_practice_at,action_state:e.action_state||null,mission_state:e.mission_state||null,created_at:e.created_at,updated_at:e.updated_at}}async function c(e,t,a){let r=(0,n.AG)(a),{data:s,error:i}=await r.from("user_subject_stats").select("updated_at").eq("user_id",e).eq("subject_id",t).maybeSingle();if(i)return console.warn("[userSubjectStats] checkStatsFresh stats read failed:",i.message),!0;if(!s)return!0;let o=s.updated_at,{data:l,error:c}=await r.from("question_attempts").select("id").eq("user_id",e).eq("subject_id",t).or('updated_at.gt."'.concat(o,'",created_at.gt."').concat(o,'"')).limit(1);return c?(console.warn("[userSubjectStats] checkStatsFresh attempts read failed:",c.message),!0):0===(null!=l?l:[]).length}},88806:(e,t,a)=>{a.d(t,{cm:()=>r});var n=a(41924);async function r(e,t){let a=await (0,n.zi)(async()=>{var a,r;let s=(0,n.AG)(t),{data:i,error:o}=await s.rpc("register_teacher",{p_display_name:e.displayName,p_subjects:e.subjects,p_markets:e.markets,p_institution:null!=(a=e.institution)?a:null,...e.door&&{p_taught_subject:e.door.taughtSubject,p_joined_for:e.door.reason,p_exam_subjects:null!=(r=e.door.examSubjects)?r:void 0}}).single();if(o)throw o;return i},"teachers","registerAsTeacher");if(a.error)throw a.error;return a.data}},90973:(e,t,a)=>{a.d(t,{getForecast:()=>m,saveSnapshot:()=>z});var n=a(86289),r=a(18822),s=a(54793),i=a(58105),o=a(64257);let l={LOW_TAXONOMY_PCT:40,MEDIUM_TAXONOMY_PCT:70,MEDIUM_UNCERTAINTY:8};function c(e,t,a){return Math.min(a,Math.max(t,e))}function u(e){let t=1-c(e.sigmaTotal/e.sigmaMax,0,1),a=.5+.5*c(e.coveragePct/100,
10,1),n=.7+.3*c(e.formatsAttempted/4,0,1);return Math.round(c(100*t*a*n,0,100))}function _(e){return Math.sqrt(e.sections.reduce((e,t)=>{var a,n;let r=null!=(n=null!=(a=t.maxPoints)?a:t.points)?n:0;return e+r*r},0))}function d(e){return Object.values(e).filter(Boolean).length}async function m(e,t,a){var i,l,c,m;(null==a?void 0:a.readOnly)||(null==a?void 0:a.preFetched)||await (0,o.jV)(e,t,a);let f=null!=(c=null==a||null==(i=a.preFetched)?void 0:i.userStats)?c:await n.Jt(e,t,a);if(!f)return null;let h=!1;if(!(null==a?void 0:a.readOnly)&&!await n.a$(e,t,a)&&(console.log("[Forecast] Stale stats detected for ".concat(e,"/").concat(t,", recomputing...")),await (0,o.kM)(e,t,a),h=!0,!(f=await n.Jt(e,t,a))))return null;let z=async n=>(h&&n&&await p(n,e,t,a),n),E=null!=(m=null==a||null==(l=a.preFetched)?void 0:l.blueprint)?m:await r.LQ(t,a);if(!E)return null;if(E.sections.some(e=>!!e.sourceSubjectId))return z(await g(e,t,E,a));let A=function(e,t,a){let n=e.section_stats||{};return t.sections.map(e=>(function(e,t,a,n){var r,s,i,o,l;let c=null!=(s=null!=(r=t.maxPoints)?r:t.points)?s:0;if(!e||0===e.total_attempts)return{section:t.id,mean:.5*c,sigma:.5*c,maxPoints:c};let u=e.ability_estimate||.5,_=1/Math.sqrt(e.total_attempts+1)*c,d=b(e.last_practiced_at),m=Math.min(_*d*(i=t.id,o=a,l=0,"mcq"!==i?1:0===o.length?1.5:1+.5*(1-o.filter(e=>e.total_attempts>0).length/o.length)),c);return{section:t.id,mean:u*c,sigma:m,maxPoints:c}})(n[e.id],e,a,t))}(f,E,await s.r6(e,t,a)),{expected:q,floor:S,ceiling:k,uncertaintyValue:j}=y(A,E.total_points),R=await v(f,e,t,a),x=w(j,R),M=_(E),I=d(R.formatsAttempted);return z({expected:q,floor:S,ceiling:k,confidence:x,certaintyPct:u({sigmaTotal:j,sigmaMax:M,coveragePct:R.taxonomyPct,formatsAttempted:I}),sections:A,coverage:R,isCalibrated:f.is_calibrated,uncertaintyValue:j,totalPoints:E.total_points})}async function p(e,t,n,r){try{let{getLearningSessions:s}=await Promise.resolve().then(a.bind(a,11750)),[i]=await s({userId:t,subjectId:n},{limit:1},r);if(!(null==i?void 0:i.id)||"completed"!==i.completion_status||await (0,o.Wf)(i.id,r))return;await z(e,t,n,i.id,r)}catch(e){console.warn("[Forecast] Deferred session snapshot failed:",e)}}async function g(e,t,a,r){let i=Array.from(new Set(a.sections.map(e=>e.sourceSubjectId).filter(e=>!!e)));(null==r?void 0:r.readOnly)||await Promise.all(i.map(t=>(0,o.jV)(e,t,r)));let l=new Map(await Promise.all(i.map(async t=>{let a=await n.Jt(e,t,r);return[t,a]}))),c=new Map;await Promise.all(i.map(async t=>{let a=await s.r6(e,t,r);c.set(t,a)}));let m=a.sections.map(e=>{let t=e.sourceSubjectId,a=t?l.get(t):null,n=t&&c.get(t)||[];return function(e,t,a,n){var r,s;let i,o=null!=(s=null!=(r=t.maxPoints)?r:t.points)?s:0,l=t.scoringRule;if(!e||0===e.total_attempts){let e=l?Math.max(0,o*(.5*(1+Math.abs(l.wrong))-Math.abs(l.wrong))):.5*o;return{section:t.id,mean:e,sigma:.5*o,maxPoints:o}}let c=e.ability_estimate||.5;if(l&&l.wrong<0){let e=o/l.correct;i=Math.max(0,(c*l.correct+(1-c)*l.wrong)*e)}else i=c*o;let u=Math.min(1/Math.sqrt(e.total_attempts+1)*o*b(e.last_practiced_at),o);return{section:t.id,mean:i,sigma:u,maxPoints:o}}(f(a,e),e,0,0)}),{expected:p,floor:g,ceiling:h,uncertaintyValue:v}=y(m,a.total_points),z={};for(let e of a.sections){let t=e.sourceSubjectId,a=f(t?l.get(t):null,e);z[e.id]=!!(a&&a.total_attempts>0)}let E=Object.values(z),A=E.length>0&&E.every(Boolean),q=await Promise.all(i.map(t=>s.xw(e,t,r))),S=i.length>0?q.reduce((e,t)=>e+t,0)/q.length:100,k={formatsAttempted:z,allFormatsAttempted:A,taxonomyPct:S,highWeightGaps:0},j=w(v,k);return{expected:p,floor:g,ceiling:h,confidence:j,certaintyPct:u({sigmaTotal:v,sigmaMax:_(a),coveragePct:S,formatsAttempted:d(z)}),sections:m,coverage:k,isCalibrated:!1,uncertaintyValue:v,totalPoints:a.total_points}}function f(e,t){let a,n;if(!(null==e?void 0:e.section_stats))return;let r=Object.values(e.section_stats).filter(e=>!!e&&e.total_attempts>0);if(0===r.length)return;if(1===r.length)return r[0];let s=0,i=0,o=0,l=0;for(let e of r){var c,u,_;s+=e.total_attempts,i+=null!=(c=e.correct_attempts)?c:0,o+=null!=(u=e.total_score_earned)?u:0,l+=null!=(_=e.total_score_possible)?_:0,e.last_practiced_at&&(!a||e.last_practiced_at>a)&&(a=e.last_practiced_at)}let d=i>0||r.some(e=>void 0!==e.correct_attempts),m=l>0;n=m&&l>0?o/l:d&&s>0?i/s:.5;let p=s>0?1/Math.sqrt(s+1):2;return{total_attempts:s,correct_attempts:d?i:void 0,total_score_earned:m?o:void 0,total_score_possible:m?l:void 0,ability_estimate:n,uncertainty:p,last_practiced_at:a}}function b(e){return e?Math.min(1+.1*Math.floor((Date.now()-new Date(e).getTime())/864e5),2):2}function y(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:60,a=e.reduce((e,t)=>
1e+t.mean,0),n=Math.sqrt(e.reduce((e,t)=>e+t.sigma*t.sigma,0)),r=+n,s=Math.max(0,a-r),i=Math.min(t,a+r);return{expected:h(a),floor:h(s),ceiling:h(i),uncertaintyValue:h(n)}}function h(e){return Math.round(100*e)/100}function w(e,t){return!t.allFormatsAttempted||t.taxonomyPct<l.LOW_TAXONOMY_PCT?"low":e>l.MEDIUM_UNCERTAINTY||t.taxonomyPct<l.MEDIUM_TAXONOMY_PCT?"medium":"high"}async function v(e,t,a,n){let r=e.formats_attempted||{},i=Object.values(r),o=i.length>0&&i.every(Boolean);return{formatsAttempted:r,allFormatsAttempted:o,taxonomyPct:await s.xw(t,a,n),highWeightGaps:0}}async function z(e,t,a,n,r){let s={user_id:t,subject_id:a,session_id:n,expected_score:e.expected,floor_score:e.floor,ceiling_score:e.ceiling,confidence_level:e.confidence,certainty_pct:e.certaintyPct,uncertainty_value:e.uncertaintyValue,format_coverage:e.coverage.formatsAttempted,taxonomy_coverage_pct:e.coverage.taxonomyPct,coverage_meta:null,high_weight_gaps_count:e.coverage.highWeightGaps,section_breakdown:e.sections.map(e=>({section:e.section,expected:e.mean,uncertainty:e.sigma})),is_calibrated:e.isCalibrated};return i.$A(s,r)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.