1var F=Object.defineProperty;var H=(e,t,s)=>t in e?F(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s;var E=(e,t,s)=>H(e,typeof t!="symbol"?t+"":t,s);import{O as A,U as d}from"./chunkReloadRecoveryrjuMb-b8.js";import{c as _}from"./url.utils3SlYVg-c.js";import{a as x}from"./constantsDW26WJ6H.js";import{A as M,I as U}from"./ItemServiceDYS7Z6Pr.js";import{U as k,E as q}from"./OperationQueueKzEpmh-u.js";import{A as N,a as V}from"./remoteActionApprovalC_byoH4M.js";const v="itemVisitHistoryQueue",O=1e3*60*15;function C(e){return typeof e=="number"&&Number.isFinite(e)?e:typeof e=="string"&&/^\d+$/.test(e.trim())?Number(e.trim()):null}function $(e){const t=String((e==null?void 0:e.caller)||"activity-visit").trim()||"activity-visit",s=String((e==null?void 0:e.srcType)||"other").trim()||"other",n=(e==null?void 0:e.srcId)==null?"":String(e.srcId).trim();return n?`${t}:${s}:${n}`:void 0}const p=class p{constructor(t,s,n,c){this.authService=t,this.userService=s,this.encryptionService=n,this.indexService=c}static get instance(){return p._staticInstance||(p._staticInstance=new p(M.instance,k.instance,q.instance,U.instance)),p._staticInstance}async listRecentVisitHistory(t){return await this.encryptionService.remoteRequestEncryptionWrapper("/user/activity/listRecentVisitHistory",t)}async logNewVisitForItem(t){if(!t||(await this.patchLocalVisit(t,new Date().toISOString()),await A()))return!1;const s=await this.userService.getCurrentUser(),n=s==null?void 0:s._id;let c=!1;try{let i=await d.get(n,v);(!i||!Array.isArray(i.updateList))&&(i={updateList:[]});const o=Date.now(),a=i.updateList.length>0;let u=o;for(const l of i.updateList){const m=new Date(l==null?void 0:l.visitTime).getTime();Number.isFinite(m)&&m<u&&(u=m)}const r=new Date(o).toISOString(),f=i.updateList.find(l=>l.id==t);f?f.visitTime=r:i.updateList.push({id:t,visitTime:r}),await d.set(n,v,i),c=i.updateList.length>=x||a&&o-u>O}catch(i){return console.error("Failed to queue item visit",i),!1}return c?(await this.updateItemVisitHistory().catch(i=>{console.error("Error flushing item visit history",i)}),await this.indexService.updateDataIndex(!1).catch(i=>{console.error("Error updating index when logging visit",i)}),!0):!1}async patchLocalVisit(t,s){var n;try{const c=await this.indexService.getDataIndex(),i=c==null?void 0:c.itemDataStore;if(!i)return;const[o]=await i.getManyByIds([t]);if(!o)return;const a=Date.parse(((n=o.feedback)==null?void 0:n.lastVisit)||"");if(Number.isFinite(a)&&a>=Date.parse(s))return;o.feedback={...o.feedback||{},lastVisit:s,visitTime:s},await i.update([o])}catch(c){console.warn("[visit] local index patch skipped",c)}}async updateItemVisitHistory(){if(await A())return;const t=await this.userService.getCurrentUserId();if(!t)return;const s=await d.get(t,v),n=s==null?void 0:s.updateList;if(!Array.isArray(n)||n.length===0)return;const c=n.slice(0,x),i=await this.encryptionService.remoteRequestEncryptionWrapper("/activity/updateItemVisitHistory",{updateList:c});if(i&&i.success===!1){console.warn("[visit] flush rejected, keeping queue",(i==null?void 0:i.errorType)||(i==null?void 0:i.status)||"unknown");return}const o=new Map(c.map(r=>[r==null?void 0:r.id,r==null?void 0:r.visitTime])),a=await d.get(t,v),u=Array.isArray(a==null?void 0:a.updateList)?a.updateList.filter(r=>!(o.has(r==null?void 0:r.id)&&o.get(r==null?void 0:r.id)===(r==null?void 0:r.visitTime))):[];await d.set(t,v,{updateList:u})}async logVisit(t){var n,c,i,o,a,u,r,f,I,l,m,g,h,w,y,T;let s=_(t.url);if(t.pageVisit||!((n=t.context)!=null&&n.srcId)){let S=Date.now();const L=C((c=t.context)==null?void 0:c.srcId),R=!((i=t.context)!=null&&i.activitySessionId)&&L!=null?N.instance.resolveSessionForIngress({tabId:L,url:s,timestamp:((o=t.context)==null?void 0:o.timestamp)||S})||void 0:(a=t.context)==null?void 0:a.activitySessionId;let D={type:"visit",url:s,startTime:((u=t.context)==null?void 0:u.timestamp)||S,endTime:((r=t.context)==null?void 0:r.timestamp)||S,updates:0,activitySessionId:R,pipelineRefId:(f=t.context)==null?void 0:f.pipelineRefId,decisionRefId:(I=t.context)==null?void 0:I.decisionRefId,decisionSource:(l=t.context)==null?void 0:l.decisionSource,sourceInstanceId:((m=t.context)==null?void 0:m.sourceInstanceId)||$(t.context),contentInfo:(g=t.context)==null?void 0:g.contentInfo,srcId:(h=t.context)==null?void 0:h.srcId,srcT
1ype:(w=t.context)==null?void 0:w.srcType,result:(y=t==null?void 0:t.context)==null?void 0:y.result,caller:((T=t==null?void 0:t.context)==null?void 0:T.caller)||null};await V.instance.saveActivityLogEntry(D)}else await V.instance.saveActivityLogEntryForContext(t.context);return!0}};E(p,"_staticInstance",null);let b=p;export{b as A};
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.