1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6608],{51087:(e,t,a)=>{a.d(t,{FY:()=>s,rC:()=>i});var n=a(16200);function l(e){var t;if(e.display_name)return e.display_name;let a=null!=(t=e.trait_id.split(":")[2])?t:e.trait_id;return(0,n.G8)(a)}let r=e=>{var t;let a=null==(t=e.unlock_rule)?void 0:t.level;return"number"==typeof a&&Number.isInteger(a)&&a>0?a:null};function s(e){let t=new Map;for(let n of e){var a;if(!(null==(a=n.acquisition)?void 0:a.includes("progression")))continue;let e=r(n);null===e||t.has(e)||t.set(e,{level:e,traitId:n.trait_id,label:l(n)})}return t}function i(e){return t=>(function(e,t){let a=[];for(let i of e){var n,s;if(!(null==(n=i.acquisition)?void 0:n.includes("decade"))||(null==(s=i.unlock_rule)?void 0:s.persona_id)!==t)continue;let e=r(i);null!==e&&a.push({level:e,traitId:i.trait_id,label:l(i)})}return a.sort((e,t)=>e.level-t.level)})(e,t)}},66608:(e,t,a)=>{a.d(t,{D:()=>z});var n=a(74275),l=a(941),r=a(50888),s=a(79447),i=a(82373),o=a(16200),c=a(65367),u=a(52595),d=a(97619),p=a(11097),_=a(62758);function g(e,t,a,n){var l,r;e.wallet.balance+=a,e.wallet.entrySeq+=1;let s={id:"g".concat(e.wallet.entrySeq),amount:a,balance_after:e.wallet.balance,reason:t.reason,ref_type:null!=(l=t.refType)?l:null,ref_id:null!=(r=t.refId)?r:null,idempotency_key:t.idempotencyKey,metadata:t.metadata,created_at:new Date(n).toISOString()};return e.wallet.ledger.push(s),e.wallet.ledger.length>500&&e.wallet.ledger.splice(0,e.wallet.ledger.length-500),e.wallet.idemKeys.push(t.idempotencyKey),e.wallet.idemKeys.length>1e3&&e.wallet.idemKeys.splice(0,e.wallet.idemKeys.length-1e3),s}function f(e,t,a){if(t.amount<=0||e.wallet.idemKeys.includes(t.idempotencyKey))return{state:e,credited:!1};let n=(0,d.H_)(e);return g(n,t,t.amount,a),{state:n,credited:!0}}let m={bond_level_up:"level_up",account_level_up:"account_track",onboarding_step:"onboarding",mission_completed:"weekly_mission",badge_earned:"badge",milestone:"milestone"};function h(e,t,a,n){if(!a.flags.walletEnabled)return e;let l=e;for(let e of t){var r,s;if(!(e.reward_gems<=0)&&(l=f(l,{amount:e.reward_gems,reason:m[e.type],refType:e.type,refId:null!=(s=null!=(r=e.persona_id)?r:e.step_key)?s:e.label,idempotencyKey:function(e){switch(e.type){case"bond_level_up":return"bond_level:".concat(e.persona_id,":").concat(e.level);case"account_level_up":return"account_level:".concat(e.level);case"onboarding_step":return"onboarding:".concat(e.step_key);case"milestone":return"milestone:".concat(e.persona_id,":").concat(e.level);case"badge_earned":var t;return e.badge_id?"badge:".concat(e.badge_id,":").concat(null!=(t=e.level)?t:1):"unlock:".concat(e.id);default:return"unlock:".concat(e.id)}}(e)},n).state,"onboarding_step"===e.type&&e.step_key)){let t=l.onboarding[e.step_key];t&&!t.paid&&(l={...l,onboarding:{...l.onboarding,[e.step_key]:{...t,paid:!0}}})}}return l}function y(e,t,a){if(!t.flags.walletEnabled)return e;let n=e;for(let{claim:t,index:l}of e.claims.map((e,t)=>({claim:e,index:t})).filter(e=>{let{claim:t}=e;return!t.paid&&t.reward_gems>0})){let e=[...(n=f(n,{amount:t.reward_gems,reason:"calendar",refType:"calendar_claim",refId:"".concat(t.cycle_index,":").concat(t.day_index),idempotencyKey:"calendar:".concat(t.cycle_index,":").concat(t.day_index)},a).state).claims];e[l]={...e[l],paid:!0},n={...n,claims:e}}for(let[e,t]of Object.entries(n.onboarding)){if(!t||t.paid||t.rewardGems<=0)continue;let{state:l}=f(n,{amount:t.rewardGems,reason:"onboarding",refType:"onboarding_step",refId:e,idempotencyKey:"onboarding:".concat(e)},a);n={...l,onboarding:{...l.onboarding,[e]:{...t,paid:!0}}}}return n}function b(e,t){return t.recentUnlocks.filter(t=>(Number(t.id.slice(1).split("-")[0])||0)>e.unlockSeq)}function v(e,t,a,n,l,r,s){let{state:o,result:c}=(0,d.y0)(t,a,n,l);if(o===t)return{state:t,result:c};let u=o;if(n.flags.missionsEnabled&&c.awarded>0)for(let t of((0,_.vu)(u,n,e,l),(0,_.hu)(u,{personaId:a.personaId,source:a.source,archetypeId:(0,i.ft)(u,a.personaId)},n,l)))u=function(e,t,a,n){var l,r,s;let o;if("weekly"===t.clock&&(e.stats.weeklyMissionsDone+=1),(0,d.hG)(e,n,{type:"mission_completed",label:t.title,reward_gems:null!=(l=t.reward_gems)?l:0}),!t.reward_xp||0===(o="specific"===t.slot&&t.target_persona_id?[t.target_persona_id]:"archetype"===t.slot&&t.target_archetype?Object.keys(e.bonds).filter(a=>(0,i.ft)(e,a)===t.target_archetype):null!=(s=null==(r=t.progress_detail)?void 0:r.personas_touched)?s:[]).length)return e;let c=e;for(let e of o)c=(0,d.sJ)(c,e,t.reward_xp,a,n).state;return c}(u,t,n,l);let g=[];(0,p.$B)(u,n,l,g,r),(0,p.bj)(u,n,l,g,r,s),(0,p.Eo)(u,n,l,g);let f=b(t,u);return{state:u=y(u=h(u,f,n,l),n,l),result:{...c,new_unlocks:f}}}
1var w=a(3424),k=a(56490),D=a(88332);function E(e,t){var a;return null!=(a=e.shop.tierDiscount[t])?a:0}function I(e,t){return 0===e?t:0===t?e:1-(1-e)*(1-t)}function T(e,t){return Math.round(e*(1-t))}function O(e,t){var a;return Math.min(t,null!=(a=e.shop.maxDiscount)?a:.8)}function S(e,t){let a=e.shop.slotLadder;return a[Math.min(t,a.length-1)]}function C(e){return e.purchases.slotsPurchased+e.purchases.slotsGranted}function P(e){return new Set(e.purchases.ownedTraitIds.map(w.YO))}var x=a(51087),K=a(67810),W=a(71138),M=a(89863);let N=(0,W.v)()((0,M.Zr)((e,t)=>({users:{},getUser:e=>(0,d.Q5)(t().users[e]),setUser:(t,a)=>e(e=>({users:{...e.users,[t]:a}}))}),{name:"yap-progression",version:1,migrate:e=>{var t;let a=null!=(t=null==e?void 0:e.users)?t:{},n={};for(let[e,t]of Object.entries(a))n[e]=(0,d.Q5)(t);return{users:n}},partialize:e=>({users:e.users})}));function A(e){return N.getState().getUser(e)}function B(e,t){N.getState().setUser(e,t)}async function G(){let e=s.Z.getPersonas();if(0===e.length)try{e=await s.Z.loadPersonas()}catch(t){e=[]}return new Map(e.map(e=>[e.id,e]))}function U(e){let t=s.Z.findPersonaById(e);return!!t&&!t.user_id}let L=null;async function R(){let[e,...t]=await Promise.all([(0,l.iK)(),(0,n.Rr)("body","male"),(0,n.Rr)("body","female"),(0,n.Rr)("hair","male"),(0,n.Rr)("hair","female"),(0,n.Rr)("eyes","male"),(0,n.Rr)("eyes","female")]),a=t.map(e=>e.map(l._t)),s={body:{male:a[0],female:a[1]},hair:{male:a[2],female:a[3]},eyes:{male:a[4],female:a[5]}};return(0,o.or)(s,e,new Set((0,r.s)()),u.R)}class j{ensureWallet(e){let t=(0,c.i)(),a=A(e);return t.flags.walletEnabled&&!a.wallet.backPaid&&B(e,a=function(e,t,a){if(e.wallet.backPaid||!t.flags.walletEnabled)return e;let n=y(e,t,a);return{...n,wallet:{...n.wallet,backPaid:!0}}}(a,t,Date.now())),a}async getDashboard(e){let t=(0,c.i)(),a=this.ensureWallet(e),n=Date.now(),l=await G(),r=[],s=0;for(let e of Object.keys(a.bonds)){var o;let c=(0,d.CG)(a,e,t.curve,n);if(!c||(s+=c.xp,e===K.M))continue;let u=l.get(e);u&&!u.is_archived&&r.push({persona_id:e,name:u.name,level:c.level,xp:c.xp,xp_to_next:c.xp_to_next,days_bonded:c.days_bonded,portrait_url:u.image_url?u.card_visual_hash?"".concat(u.image_url,"?v=").concat(u.card_visual_hash):u.image_url:null,usage_minutes:Math.round(null!=(o=a.usageMinutes[e])?o:0),is_official:!u.user_id,archetype:t.flags.archetypesEnabled?(()=>{let t=(0,i.OV)((0,i.ft)(a,e));return{id:t.id,name:t.name}})():null})}r.sort((e,t)=>t.level-e.level||t.usage_minutes-e.usage_minutes);let u=(0,d.aL)(a);return{hero:{account_level:u.current_level,peak_level:u.peak_level,total_xp:s,wallet:t.flags.walletEnabled?{balance:a.wallet.balance}:null,badges:[],boosts:[]},bonds:r,calendar:(0,d.zh)(a,n),onboarding:(0,d.iu)(a,t),recent_unlocks:[...a.recentUnlocks].reverse().slice(0,10),modules:{wallet:t.flags.walletEnabled,missions:t.flags.missionsEnabled,badges:t.flags.badgesEnabled,shop:t.flags.shopEnabled}}}async getBond(e,t){let a=(0,c.i)();return(0,d.CG)(A(e),t,a.curve,Date.now())}async getBonds(e){let t=(0,c.i)(),a=A(e),n=Date.now();return Object.keys(a.bonds).map(e=>(0,d.CG)(a,e,t.curve,n)).filter(e=>null!==e)}async getAccount(e){return(0,d.aL)(A(e))}async getCalendar(e){return(0,d.zh)(A(e),Date.now())}async claimCalendarDay(e){let{state:t,result:a}=function(e,t,a){let{state:n,result:l}=(0,d.LN)(e,t,a);if(!l.claimed)return{state:n,result:l,new_unlocks:[]};(0,p.Eo)(n,t,a,[]);let r=b(e,n),s=h(n,r,t,a);return{state:s=y(s,t,a),result:l,new_unlocks:r}}(this.ensureWallet(e),(0,c.i)(),Date.now());return B(e,t),a}async getOnboarding(e){return(0,d.iu)(A(e),(0,c.i)())}async getWallet(e){return{balance:this.ensureWallet(e).wallet.balance,currency_display_name:"Gems"}}async getWalletLedger(e,t){return function(e,t){let a=[...e.wallet.ledger].reverse(),n=t?a.findIndex(e=>e.id===t)+1:0,l=a.slice(n,n+20);return{entries:l,next_cursor:n+20<a.length&&l.length>0?l[l.length-1].id:null}}(this.ensureWallet(e),t)}async creditGemPack(e,t,a){let n=(0,c.i)().gemPacks.find(e=>e.id===t),l=this.ensureWallet(e);if(!n)return{new_balance:l.wallet.balance};let{state:r}=f(l,{amount:n.gems,reason:"iap_pack",refType:"gem_pack",refId:t,idempotencyKey:a},Date.now());return B(e,r),{new_balance:r.wallet.balance}}async getTraitCatalog(){return L||(L=R().catch(e=>{throw L=null,e})),L}async publishedSignatures(){let e=await this.getTraitCatalog().catch(()=>[]);return(0,x.rC)(e)}async getMissions(e){let t=[...(await G()).values()].filter(t=>t.user_id===e).map(e=>e.id),{state:a,changed:n}=function(e,t,a,n){var l,r,s,i,o,c,u,p;let g=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];if(!a.flags.missionsEnabled)return{state:t,changed:!1};let f=(0,d.H_)(t);(0,_.vu)(f,a,e,n,g);let m=(null==(l=f.missions.daily)?void 0:l.periodKey)!==(null==(r=t.missions.daily)?void 0:r.periodKey)||(null==(s=f.missions.weekly)?void 0:s.periodKey)!==(null==(i=t.missions.weekly)?void 0:i.periodKey)||(null==(o=f.missions.daily)?void 0:o.instances.length)!==(null==(c=t.missions.daily)?void 0:c.instances.length)||(null==(u=f.missions.weekly)?void 0:u.instances.length)!==(null==(p=t.missions.weekly)?void 0:p.instances.length);return{state:m?f:t,changed:m}}(e,this.ensureWallet(e),(0,c.i)(),Date.now(),t);return n&&B(e,a),(0,_.$S)(a)}async getShopCatalog(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"free";return function(e,t,a,n,l){var r,s;let i=E(a,n),c=(0,k.UH)(null!=(r=a.liveEvents)?r:[],l),u=c?c.value:0,d=O(a,I(u,i)),p=c?{id:c.id,name:c.name,icon:c.icon,discount_pct:u,ends_at:c.ends_at}:null,_=P(t),g=e.filter(e=>e.acquisition.includes("shop")&&null!==e.price_gems&&(0,o.ut)(e,l)).map(e=>({type:"trait",trait_id:e.trait_id,display_name:e.display_name,collection:e.collection,tags:e.tags,base_price_gems:e.price_gems,effective_price_gems:T(e.price_gems,d),discount_pct:d,tier_discount_pct:i,event_discount_pct:u,owned:_.has(e.trait_id),availability:e.availability,available_to:e.available_to}
1)),f=new Map;for(let t of e){if(!t.collection||!t.acquisition.includes("bundle")||!(0,o.ut)(t,l))continue;let e=null!=(s=f.get(t.collection))?s:[];e.push(t),f.set(t.collection,e)}let m=[...f.entries()].map(e=>{var t,n,l,r;let[s,o]=e,c=o.filter(e=>!_.has(e.trait_id)),p=c.reduce((e,t)=>{var a;return e+(null!=(a=t.price_gems)?a:0)},0),g=o.some(e=>e.tags.includes("featured")),f=D.J2.shop.bundleDiscountPct,m=O(a,I(f,d));return{type:"bundle",collection:s,trait_ids:o.map(e=>e.trait_id),trait_count:o.length,owned_count:o.length-c.length,base_price_gems:p,effective_price_gems:T(p,m),discount_pct:m,bundle_discount_pct:f,tier_discount_pct:i,event_discount_pct:u,available_from:null!=(l=null==(t=o[0])?void 0:t.available_from)?l:null,available_to:null!=(r=null==(n=o[0])?void 0:n.available_to)?r:null,featured:g,layout:g?"hero":"bundle"}}),h=S(a,C(t));return{traits:g,bundles:m,slot:{type:"slot",slot_number:C(t)+1,base_price_gems:h,effective_price_gems:T(h,d),discount_pct:d,tier_discount_pct:i,event_discount_pct:u,slots_purchased:t.purchases.slotsPurchased},gem_packs:a.gemPacks.map(e=>({type:"pack",pack_id:e.id,gems:e.gems,display_price:e.displayPrice,best_value:e.bestValue})),live_event:p}}(await this.getTraitCatalog(),this.ensureWallet(e),(0,c.i)(),t,Date.now())}async purchase(e,t,a){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"free",l=await this.getTraitCatalog(),{state:r,result:s}=function(e,t,a,n,l,r,s){var i;let c,u,p,_,f=e.purchases.orders.find(e=>e.idempotency_key===n);if(f)return{state:e,result:{ok:!0,order:f,new_balance:e.wallet.balance}};let m=(0,k.UH)(null!=(i=l.liveEvents)?i:[],s),h=O(l,I(m?m.value:0,E(l,r))),y=P(e),b=[],v=h;if("trait"===a.type){let n=t.find(e=>e.trait_id===a.trait_id);if(!n||null===n.price_gems||!n.acquisition.includes("shop"))return{state:e,result:{ok:!1,error:"NOT_FOUND"}};if(!(0,o.ut)(n,s))return{state:e,result:{ok:!1,error:"NOT_AVAILABLE"}};if(y.has(n.trait_id))return{state:e,result:{ok:!1,error:"ALREADY_OWNED"}};c="trait",u=n.trait_id,p=n.price_gems,b=[n.trait_id],_="trait_purchase"}else if("bundle"===a.type){let n=t.filter(e=>e.collection===a.collection&&e.acquisition.includes("bundle"));if(0===n.length)return{state:e,result:{ok:!1,error:"NOT_FOUND"}};if(!n.some(e=>(0,o.ut)(e,s)))return{state:e,result:{ok:!1,error:"NOT_AVAILABLE"}};let r=n.filter(e=>!y.has(e.trait_id));if(0===r.length)return{state:e,result:{ok:!1,error:"ALREADY_OWNED"}};c="bundle",u=a.collection,p=r.reduce((e,t)=>{var a;return e+(null!=(a=t.price_gems)?a:0)},0),b=r.map(e=>e.trait_id),_="bundle_purchase",v=O(l,I(D.J2.shop.bundleDiscountPct,h))}else c="slot",u=null,p=S(l,C(e)),_="slot_purchase";let w=T(p,v),x="order-".concat(e.purchases.orders.length+1,"-").concat(s),K=function(e,t,a){if(e.wallet.idemKeys.includes(t.idempotencyKey))return{state:e,ok:!0,duplicate:!0,newBalance:e.wallet.balance,shortfall:0};if(t.amount>e.wallet.balance)return{state:e,ok:!1,duplicate:!1,newBalance:e.wallet.balance,shortfall:t.amount-e.wallet.balance};let n=(0,d.H_)(e);return g(n,t,-t.amount,a),{state:n,ok:!0,duplicate:!1,newBalance:n.wallet.balance,shortfall:0}}(e,{amount:w,reason:_,refType:"order",refId:x,idempotencyKey:"purchase:".concat(n)},s);if(!K.ok)return{state:e,result:{ok:!1,error:"INSUFFICIENT_GEMS",shortfall:K.shortfall}};let W=K.state,M={id:x,kind:c,item_ref:u,price_gems:w,base_gems:p,discount_pct:v,idempotency_key:n,status:"granted",created_at:new Date(s).toISOString(),granted_trait_ids:b.length>0?b:void 0};return W.purchases={orders:[...W.purchases.orders,M],ownedTraitIds:[...W.purchases.ownedTraitIds,...b],slotsPurchased:W.purchases.slotsPurchased+ +("slot"===c),slotsGranted:W.purchases.slotsGranted},{state:W,result:{ok:!0,order:M,new_balance:W.wallet.balance}}}(this.ensureWallet(e),l,t,a,(0,c.i)(),n,Date.now());if(s.ok){let{state:t}=function(e,t,a,n,l){if(!t.flags.badgesEnabled)return{state:e,new_unlocks:[]};let r=(0,d.H_)(e),s=[];return((0,p.$B)(r,t,a,s,n),(0,p.bj)(r,t,a,s,n,l),(0,p.Eo)(r,t,a,s),0===s.length)?{state:e,new_unlocks:[]}:{state:y(h(r,s,t,a),t,a),new_unlocks:s}}(r,(0,c.i)(),Date.now(),U,(0,x.rC)(l));B(e,t)}return s}async getOwnedTraitIds(e){return A(e).purchases.ownedTraitIds}async getBadges(e){return(0,p.Uv)(A(e))}async setPersonaArchetype(e,t,a){let n=A(e);n.archetypes[t]!==a&&B(e,{...n,archetypes:{...n.archetypes,[t]:a}})}async getPersonaArchetype(e,t){var a;return null!=(a=A(e).archetypes[t])?a:null}async recordTextMessage(e,t,a,n){if(t===K.M)return null;let l=await this.publishedSignatures(),{state:r,result:s}=v(e,this.ensureWallet(e),{personaId:t,source:"text",sourceEventId:a,text:n},(0,c.i)(),Date.now(),U,l);return B(e,r),s}async recordVoiceTurn(e,t,a){if(t===K.M)return null;let n=await this.publishedSignatures(),{state:l,result:r}=v(e,this.ensureWallet(e),{personaId:t,source:"voice",sourceEventId:a},(0,c.i)(),Date.now(),U,n);return B(e,l),r}async recordVoiceSessionStarted(e){return this.completeOnboarding(e,"first_voice")}async recordPersonaCreated(e){return this.completeOnboarding(e,"create_yap")}async recordShopVisited(e){return this.completeOnboarding(e,"visit_shop")}completeOnboarding(e,t){let{state:a,new_unlocks:n}=function(e,t,a,n){let{state:l,changed:r,new_unlocks:s}=(0,d.$J)(e,t,a,n);if(!r)return{state:l,new_unlocks:[]};let i=h(l,s,a,n);return{state:i=y(i,a,n),new_unlocks:s}}(this.ensureWallet(e),t,(0,c.i)(),Date.now());return n.length>0&&B(e,a),n}}new j;var q=a(76295);async function V(){let{data:{session:e}}=await q.N.auth.getSession(),t={"Content-Type":"application/json"};return(null==e?void 0:e.access_token)&&(t.Authorization="Bearer ".concat(e.access_token)),t}async function H(e){let t=await fetch(e,{method:"GET",headers:await V(),credentials:"same-origin"});if(!t.ok)throw Error("GET ".concat(e," -> ").concat(t.status));return t.json()}async function F(e,t){let a=await fetch(e,{method:"POST",headers:await V(),credentials:"same-origin",body:JSON.stringify(null!=t?t:{})});if(!a.ok&&402!==a.status)throw Error("POST ".concat(e," -> ").concat(a.status));return a.json()}let J={getDashboard:e=>H("/api/v1/progression/dashboard"),getBond:(e,t)=>H("/api/v1/progression/bond?personaId=".concat(encodeURIComponent(t))),getBonds:e=>H("/api/v1/progression/bonds"),getAccount:e=>H("/api/v1/progression/account"),getCalendar:e=>H("/api/v1/progression/calendar"),claimCalendarDay:e=>F("/api/v1/progression/calendar/claim",{}),getOnboarding:e=>H("/api/v1/progression/onboarding"),getWallet:e=>H("/api/v1/wallet"),getWalletLedger:(e,t)=>H("/api/v1/wallet/ledger".concat(t?"?cursor=".concat(encodeURIComponent(t)):"")),getTraitCatalog:e=>H("/api/v1/traits/catalog"),getShopCatalog:e=>H("/api/v1/shop/catalog"),purchase:(e,t,a)=>F("/api/v1/shop/purchase",{product_ref:t,idempotency_key:a}),getOwnedTraitIds:async e=>[],getMissions:e=>H("/api/v1/missions"),getBadges:e=>H("/api/v1/badges"),recordTextMessage:(e,t,a,n)=>F("/api/v1/progression/text-message",{personaId:t,sourceEventId:a,text:n}).then(e=>{var t;return null!=(t=null==e?void 0:e.award)?t:null}).catch(()=>null),recordVoiceTurn:(e,t,a)=>F("/api/v1/progression/voice-turn",{personaId:t,sourceEventId:a}).then(e=>{var t;return null!=(t=null==e?void 0:e.award)?t:null}).catch(()=>null)};function z(){return J}}}]);
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.