@aiquants/daily-report 0.38.0 → 0.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/server.js CHANGED
@@ -1,12 +1,12 @@
1
- "use strict";var Br=Object.defineProperty;var xs=Object.getOwnPropertyDescriptor;var Cs=Object.getOwnPropertyNames;var Ps=Object.prototype.hasOwnProperty;var Yn=e=>{throw TypeError(e)};var Ms=(e,t)=>{for(var r in t)Br(e,r,{get:t[r],enumerable:!0})},Ls=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Cs(t))!Ps.call(e,o)&&o!==r&&Br(e,o,{get:()=>t[o],enumerable:!(n=xs(t,o))||n.enumerable});return e};var Ns=e=>Ls(Br({},"__esModule",{value:!0}),e);var qn=(e,t,r)=>t.has(e)||Yn("Cannot "+r);var Lt=(e,t,r)=>(qn(e,t,"read from private field"),r?r.call(e):t.get(e)),Vr=(e,t,r)=>t.has(e)?Yn("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,r),Yr=(e,t,r,n)=>(qn(e,t,"write to private field"),n?n.call(e,r):t.set(e,r),r);var Sd={};Ms(Sd,{DAILY_REPORT_ATTACHMENT_THUMBNAIL_MAX_OUTPUT_BYTES:()=>hr,DAILY_REPORT_ATTACHMENT_THUMBNAIL_OUTPUT_MEDIA_TYPES:()=>yr,DAILY_REPORT_SHARP_THUMBNAIL_DECODE_BUDGET_BYTES:()=>Fn,DAILY_REPORT_SHARP_THUMBNAIL_DECODE_WORK_MODEL:()=>Jt,DAILY_REPORT_SHARP_THUMBNAIL_WORKING_SET_MODEL:()=>Hn,DAILY_REPORT_SSE_CATCH_UP_BATCH:()=>Pr,DAILY_REPORT_SSE_VISIBILITY_REFRESH_MS:()=>xn,DailyReportSseReader:()=>Ct,DailyReportViewerScope:()=>Pe,SqlResultCache:()=>bt,createDailyReportHandlers:()=>Lr,createDailyReportServer:()=>Rd,createDailyReportService:()=>kr,createEpochStore:()=>Zt,createSharpThumbnailRenderer:()=>Zi,defineDailyReportSchema:()=>Fi,defineDailyReportSearchSchema:()=>Hi,isStreamIdLte:()=>rt,parseClientTempId:()=>lr,predictSharpThumbnailWorkingSetBytes:()=>Xi,readDailyReportSseStreamEntry:()=>wt,transformJsonArray:()=>ki});module.exports=Ns(Sd);var Os=e=>typeof e=="string"?JSON.stringify(e):typeof e=="number"||typeof e=="boolean"||e===null||e===void 0?String(e):Array.isArray(e)?"array":typeof e,le=(e,t,r)=>new RangeError(`[daily-report] ${e} must be ${t}; got ${Os(r)}`),gt=(e,t)=>new TypeError(`[daily-report] ${e} must be ${t}`),qr=(e,t,r)=>le(e,`one of ${r.map(n=>JSON.stringify(n)).join(", ")}`,t),te=(e,t,r,n)=>{if(typeof t=="number"&&Number.isSafeInteger(t)&&t>=r&&(n===void 0||t<=n))return t;throw le(e,n===void 0?`an integer >= ${r}`:`an integer from ${r} to ${n}`,t)},ct=(e,t,r,n)=>t===void 0?n:te(e,t,r);var ue=()=>Math.floor(performance.now());var He=class extends Error{constructor(t){super(`cache miss refused (${t})`),this.name="SqlResultCacheMissRefusal",this.reason=t}},Zt=e=>({async getEpoch(t){try{let r=await e?.getClient();if(!r)return null;let n=await r.get(t);return n?Number(n):0}catch{return null}},async incrementEpoch(t){try{let r=await e?.getClient();if(!r)return;await r.incr(t)}catch{}}}),Nt=(e,t)=>t?e.map(r=>structuredClone(r)):e,bt=class{constructor(t,r){this.epochStore=r;this.buckets=new Map;this.inFlight=new Map;this.forcedFetches=new Map;this.maybeRefreshAhead=t=>{let r=t.refreshAheadRatio;if(r===void 0)return;let{cacheKey:n}=t,o=this.buckets.get(n);if(!o)return;let a=t.ttlMsOverride??this.defaultTtlMs;if(a-(o.expireAt-ue())<a*r||this.inFlight.has(n))return;let l;l=(async()=>{let c=t.epochKey?await this.epochStore.getEpoch(t.epochKey):null,s=await t.fetcher();return this.inFlight.get(n)===l&&this.writeBucket(n,{records:s,expireAt:ue()+a,epoch:c}),s})(),this.inFlight.set(n,l),l.catch(()=>{}).finally(()=>{this.inFlight.get(n)===l&&this.inFlight.delete(n)})};this.startFetch=(t,r)=>{let{cacheKey:n,admission:o}=t,a;a=(async()=>{let l=t.epochKey?await this.epochStore.getEpoch(t.epochKey):null,c=o===void 0?null:await o.acquire(o.signal);if(o!==void 0&&c===null)throw new He(o.signal.aborted?"aborted":"busy");try{for(let y of r)y();let s=await t.fetcher();return this.inFlight.get(n)===a&&this.writeBucket(n,{records:s,expireAt:ue()+(t.ttlMsOverride??this.defaultTtlMs),epoch:l}),s}finally{c?.()}})(),this.inFlight.set(n,a);let i=()=>{this.inFlight.get(n)===a&&this.inFlight.delete(n)};return a.then(i,i),a};this.forcedFetch=t=>{let{cacheKey:r}=t,n=t.onFetchStart===void 0?[]:[t.onFetchStart],o=this.forcedFetches.get(r);if(o===void 0)return this.runForcedFetch(t,n);if(o.pending===null){let a=[],i=()=>this.runForcedFetch(t,a);o.pending={promise:o.running.then(i,i),onFetchStarts:a}}return o.pending.onFetchStarts.push(...n),o.pending.promise};this.runForcedFetch=(t,r)=>{let{cacheKey:n}=t,o=this.startFetch(t,r);this.forcedFetches.set(n,{running:o,pending:null});let a=()=>{let i=this.forcedFetches.get(n);i?.running===o&&i.pending===null&&this.forcedFetches.delete(n)};return o.then(a,a),o};this.getOrFetch=async t=>{let{cacheKey:r,forceRefresh:n,snapshot:o,admission:a}=t;if(n){if(a?.signal.aborted)throw new He("aborted");return this.buckets.delete(r),Nt(await this.readOwnOrRetry(this.forcedFetch(t),t),o)}let i=this.buckets.get(r);if(i&&i.expireAt>ue())if(t.epochKey){let c=await this.epochStore.getEpoch(t.epochKey);if(c===null||i.epoch===c)return this.maybeRefreshAhead(t),Nt(i.records,o);this.buckets.delete(r)}else return this.maybeRefreshAhead(t),Nt(i.records,o);let l=this.inFlight.get(r);if(l!==void 0)return Nt(await this.readOwnOrRetry(l,t),o);if(a?.signal.aborted)throw new He("aborted");return Nt(await this.startFetch(t,t.onFetchStart===void 0?[]:[t.onFetchStart]),o)};this.readOwnOrRetry=async(t,r)=>{try{return await t}catch(n){let{admission:o}=r;if(!(n instanceof He&&(o===void 0||n.reason==="aborted"&&!o.signal.aborted)))throw n;return this.getOrFetch({...r,snapshot:!1})}};this.clearAll=()=>{this.buckets.clear(),this.inFlight.clear()};this.invalidatePrefix=t=>{for(let r of this.buckets.keys())r.startsWith(t)&&this.buckets.delete(r);for(let r of this.inFlight.keys())r.startsWith(t)&&this.inFlight.delete(r)};this.defaultTtlMs=te("defaultTtlMs",t.defaultTtlMs,1),this.maxBuckets=te("maxBuckets",t.maxBuckets,1),this.lastSweepAt=ue()}writeBucket(t,r){this.buckets.delete(t),this.buckets.set(t,r);let n=ue();n-this.lastSweepAt>=this.defaultTtlMs&&this.sweepExpired(n);for(let o of this.buckets.keys()){if(this.buckets.size<=this.maxBuckets)break;this.buckets.delete(o)}}sweepExpired(t){this.lastSweepAt=t;for(let[r,n]of this.buckets)n.expireAt<=t&&this.buckets.delete(r)}};var jn="ids-stream";var er=e=>{let t=2166136261,r=-624069552;for(let n of e){let o=n.reportHubId;t^=o&255,t=Math.imul(t,16777619),t^=o>>>8&255,t=Math.imul(t,16777619),t^=o>>>16&255,t=Math.imul(t,16777619),t^=o>>>24&255,t=Math.imul(t,16777619),r^=o>>>24&255,r=Math.imul(r,16777619),r^=o>>>16&255,r=Math.imul(r,16777619),r^=o>>>8&255,r=Math.imul(r,16777619),r^=o&255,r=Math.imul(r,16777619);let a=n.businessDate;if(a===null)t^=1,t=Math.imul(t,16777619),r^=1,r=Math.imul(r,16777619);else for(let i=0;i<a.length;i++){let l=a.charCodeAt(i);t^=l&255,t=Math.imul(t,16777619),r^=l&255,r=Math.imul(r,16777619)}}return t^=e.length,t=Math.imul(t,16777619),r^=e.length,r=Math.imul(r,16777619),((t>>>0).toString(16).padStart(8,"0")+(r>>>0).toString(16).padStart(8,"0")).replace(/^0+(?=.)/,"")},tr=(e,t)=>e.businessDate!==t.businessDate?e.businessDate===null?1:t.businessDate===null||e.businessDate>t.businessDate?-1:1:t.reportHubId-e.reportHubId,Wn=e=>{for(let t=1;t<e.length;t++)if(tr(e[t-1],e[t])>0)return!1;return!0},zn=(e,t)=>{let r=e.findIndex(n=>tr({businessDate:n.businessDate,reportHubId:n.reportHubId},t)>0);return r===-1?e.length:r};var oe=Object.freeze({businessDate:"business-date",idsStream:jn,report:"report",search:"search",reports:"reports",searchMarks:"search-marks",searchFacets:"search-facets",action:"action"}),Re=Object.freeze({businessDate:"businessDate",reportHubId:"reportHubId",searchQuery:"q",searchCombine:"combine",searchAuthor:"author",searchSourceType:"sourceType",searchCustomer:"customer",reportIds:"ids",forceRefresh:"forceRefresh",cursorReportHubId:"cursor_report_hub_id",cursorBusinessDate:"cursor_business_date",cursorSnapshot:"cursor_snapshot"});var vs=/^(\d{4})([-/])(\d{2})\2(\d{2})$/;var Gn=e=>e<10?`0${e}`:`${e}`,ks=e=>{if(Number.isNaN(e.getTime()))return null;let t=e.getFullYear(),r=Gn(e.getMonth()+1),n=Gn(e.getDate());return`${t}-${r}-${n}`},Dt=e=>{let t=vs.exec(e);if(t===null)return null;let[,r,,n,o]=t,a=Number(r),i=Number(n),l=Number(o);if(a<1)return null;let c=new Date(0);return c.setUTCFullYear(a,i-1,l),c.getUTCFullYear()!==a||c.getUTCMonth()!==i-1||c.getUTCDate()!==l?null:`${r}-${n}-${o}`},rr=e=>Dt(e)===e;var Oe=e=>e==null?null:e instanceof Date?ks(e):Dt(e);var Kn=(e,t,r=console)=>{let n=o=>typeof o=="string"?[`${t} ${o}`]:[t,o];return{debug:(o,...a)=>{e<=0&&r.debug(...n(o),...a)},info:(o,...a)=>{e<=1&&r.info(...n(o),...a)},warn:(o,...a)=>{e<=2&&r.warn(...n(o),...a)},error:(o,...a)=>{e<=3&&r.error(...n(o),...a)}}},Cd=Object.freeze(["API","Action","Attachment","ExternalSource","Isolation","Reads","Refresh","Search","SSE","SseReader","Server","Service","Streams","Visibility","ActionProvider","DetailLoader","IdsStream","SseConnection"]),Jn=e=>`[DailyReport${e}]`,Se=(e,t,r)=>e===void 0?Kn(t,Jn(r)):Kn(0,Jn(r),e);var Fs="legacy-",jr=e=>`${Fs}${e}`;var Qn=require("zod"),At=e=>Number.isSafeInteger(e)&&e>0,Ae=Qn.z.number().int().positive().max(Number.MAX_SAFE_INTEGER);var Hs=/^[1-9][0-9]*$/,Us=/^(?:0|[1-9][0-9]*)$/,Ue=e=>{if(e===null||!Hs.test(e))return null;let t=Number(e);return At(t)?t:null},Wr=e=>{if(e===null||!Us.test(e))return null;let t=Number(e);return Number.isSafeInteger(t)?t:null},zr=e=>e==="true"?!0:e==="false"?!1:null,Ot=e=>e===null?!1:zr(e);var Xn=Object.freeze(["subject","content","author","employeeName","updatedBy","category","creationCategory","customerName"]),Je=Object.freeze({field:e=>e,interviewer:(e,t)=>`interviewer:${e}:${t}`,attachment:e=>`attachment:${e}`,comment:(e,t)=>`comment:${e}:${t}`});var $s=2166136261,Bs=16777619,Gr=e=>{let t=$s;for(let r=0;r<e.length;r++)t^=e.charCodeAt(r),t=Math.imul(t,Bs);return t>>>0},Vs=String.fromCodePoint(3),Ys=String.fromCodePoint(2),qs=String.fromCodePoint(1),nr=e=>Gr(e.map(t=>t.map(r=>r.map(n=>`${n.tier}${n.text}`).join(Vs)).join(Ys)).join(qs));var Zn=e=>e==="intersection"||e==="union",Ie=Object.freeze({maxQueryLength:500,maxSets:16,maxWordsPerSet:16,maxWords:32,maxWordLength:100,maxDetailIds:100}),Kr=2,or=2,ut=Object.freeze({word:0,reading:1});var Jr=(e,t)=>({ids:e.map(r=>r.reportHubId),businessDates:e.map(r=>r.businessDate),sourceTypes:e.map(r=>r.sourceType),words:t});var kd=2*(1+Kr);var Qs=require("zod");var ar=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}|-[1-9][0-9]{0,15})$/;var v=require("zod");var eo=15e3,to="lastEventId",js=/^\d{1,15}-\d{1,15}$/,ro=e=>js.test(e),Ws=v.z.object({name:v.z.string().nullish(),affiliation:v.z.string().nullish()}),zs=v.z.object({name:v.z.string().nullish(),text:v.z.string().nullish(),color:v.z.string().nullish()}),Gs=v.z.object({id:Ae,name:v.z.string().nullish(),color:v.z.string().nullish()}),no=v.z.object({id:Ae,userId:v.z.string().nullish(),userName:v.z.string().nullish(),content:v.z.string().nullish(),createdAt:v.z.string().nullish(),isMine:v.z.boolean()}),Ks=v.z.object({id:v.z.string(),fileName:v.z.string(),fileType:v.z.string().nullable(),fileSize:v.z.number().nullable(),createdAt:v.z.string().nullable(),state:v.z.enum(["present","absent","unknown"]),hasThumbnail:v.z.boolean().default(!1)}),Qr=v.z.object({reportHubId:Ae,date:v.z.string().nullish(),createdAt:v.z.string().nullish(),author:v.z.string().nullish(),userId:v.z.string().nullish(),sourceType:v.z.string().nullish(),employeeName:v.z.string().nullish(),updatedBy:v.z.string().nullish(),updatedAt:v.z.string().nullish(),category:v.z.string().nullish(),creationCategory:v.z.string().nullish(),visitTimeFrom:v.z.string().nullish(),visitTimeTo:v.z.string().nullish(),customerName:v.z.string().nullish(),interviewers:v.z.array(Ws),subject:v.z.string().nullish(),content:v.z.string().nullish(),externalComments:v.z.array(zs),isRead:v.z.boolean(),isStarred:v.z.boolean(),labels:v.z.array(Gs),postedComments:v.z.array(no),attachments:v.z.array(Ks).default([])}),dt=v.z.string().regex(ar),Js=v.z.object({type:v.z.literal("connected")}),ir=v.z.object({type:v.z.literal("status-update"),reportHubId:Ae,statusType:v.z.enum(["star","read"]),value:v.z.boolean(),clientTempId:dt,recipientRawUserId:Ae.optional()}),Xr=v.z.string().optional(),Zr=v.z.object({type:v.z.literal("comment-add"),reportHubId:Ae,comment:no,clientTempId:dt,recipientRawUserId:Ae.optional(),sourceType:Xr}),en=v.z.object({type:v.z.literal("comment-delete"),reportHubId:Ae,commentId:Ae,clientTempId:dt,recipientRawUserId:Ae.optional(),sourceType:Xr}),tn=v.z.object({type:v.z.literal("report-create"),reportHubId:Ae,report:Qr,clientTempId:dt,recipientRawUserId:Ae.optional()}),rn=v.z.object({type:v.z.literal("report-update"),reportHubId:Ae,report:Qr,clientTempId:dt,recipientRawUserId:Ae.optional()}),nn=v.z.object({type:v.z.literal("report-publish"),reportHubId:Ae,report:Qr,clientTempId:dt,recipientRawUserId:Ae.optional()}),on=v.z.object({type:v.z.literal("report-delete"),reportHubId:Ae,clientTempId:dt,sourceType:Xr}),oo=v.z.discriminatedUnion("type",[Js,ir,Zr,en,tn,rn,nn,on]);var ve=Object.freeze({intent:"intent",clientTempId:"clientTempId",businessDate:"businessDate",operationTimestamp:"operationTimestamp",reportHubId:"reportHubId",title:"title",content:"content",isStarred:"isStarred",isRead:"isRead",commentId:"commentId"});var sr=Math.max(1,Math.floor(10.556701030927835));var $e=(e,t)=>{let r=setTimeout(e,t);return r.unref?.(),r};var ke=e=>{let{windowMs:t,tallies:r,writeSuppressed:n}=e,o=new Map,a=i=>{let l={since:new Date().toISOString(),count:0,tallies:Object.fromEntries(r.map(s=>[s,0]))};o.set(i,l),$e(()=>{o.delete(i),l.count>0&&n(i,l)},t)};return{record:(i,l,c)=>{let s=o.get(i);if(s!==void 0){s.count+=1,s.tallies[l]+=1;return}c(),a(i)}}};var Qe=Object.freeze({maxValuesPerFacet:16,maxValueLength:200,maxTotalValueLength:300});var zd=Object.freeze({authors:Object.freeze([]),sourceTypes:Object.freeze([]),customers:Object.freeze([])}),Xs=/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g,an=e=>{let t=e.trim();return t.length===0?null:t.replace(Xs,"\uFFFD")},Zs=e=>{let t=an(e);return t===null?"filter-blank-value":t!==e?"filter-value-not-canonical":e.length>Qe.maxValueLength?"filter-value-too-long":null},el=e=>{if(e.length>Qe.maxValuesPerFacet)return"filter-too-many-values";let t=new Set;for(let r of e){let n=Zs(r);if(n!==null)return n;if(t.has(r))return"filter-duplicate-value";t.add(r)}return null},tl=e=>{let t=0;for(let r of e.authors)t+=r.length;for(let r of e.customers)t+=r.length;return t},ao=e=>{for(let t of[e.authors,e.sourceTypes,e.customers]){let r=el(t);if(r!==null)return r}return tl(e)>Qe.maxTotalValueLength?"filters-too-long":null};var io=e=>e.trim().length===0;var lr=e=>e!==null&&ar.test(e)?e:null,sn=e=>Zn(e)?e:null,ln=e=>{if(e===null)return null;let t=e.split(",");if(t.length>Ie.maxDetailIds)return null;let r=[];for(let n of t){let o=Ue(n);if(o===null||r.includes(o))return null;r.push(o)}return r},so=e=>{let[t,...r]=e;return t===void 0?null:[t,...r]},lo=(e,t)=>{let r={authors:e.getAll(Re.searchAuthor),sourceTypes:e.getAll(Re.searchSourceType),customers:e.getAll(Re.searchCustomer)},n=ao(r);if(n!==null)return{ok:!1,reason:n};let o=new Set(t.map(i=>i.toLowerCase())),a=new Set;for(let i of r.sourceTypes){let l=i.toLowerCase();if(!o.has(l))return{ok:!1,reason:"filter-unknown-source-type"};if(a.has(l))return{ok:!1,reason:"filter-duplicate-value"};a.add(l)}return{ok:!0,filters:{sourceTypes:a.size===0?null:a,authors:so(r.authors),customers:so(r.customers)}}},co=e=>{let t=new URLSearchParams;for(let[r,n]of e){if(typeof n!="string")return null;t.append(r,n)}return t};var mo=Object.freeze({status:400,error:"Invalid form"}),po=e=>({status:413,error:"Form too large",measuredBy:e}),rl=(e,t,r)=>{let n=0;return e.pipeThrough(new TransformStream({transform(o,a){if(n+=o.byteLength,n>t){r(),a.error(new Error(`action form body exceeds ${t} bytes`));return}a.enqueue(o)}}))},nl=async e=>{let t=Wr(e.headers.get("Content-Length"));if(t!==null&&t>1048576)return{refusal:po("declared")};let r=!1,n=e.body===null?null:rl(e.body,1048576,()=>{r=!0}),o=new Headers,a=e.headers.get("Content-Type");a!==null&&o.set("Content-Type",a);let i;try{i=await new Response(n,{headers:o}).formData()}catch{return{refusal:r?po("counted"):mo}}let l=co(i);return l===null?{refusal:mo}:{fields:l}},yo=(e,t)=>(r,n)=>{let o=r.get(t);if(o===null)return{error:`${t} required`};let a=zr(o);return a===null?{error:`Invalid ${t}`}:{command:{...n,intent:e,value:a}}},fo=Object.freeze({update:(e,t,r)=>{let n=e.get(ve.title),o=e.get(ve.content);if(n!==null&&n.length>r.titleMaxLength)return{error:"Invalid title"};let a={};return n!==null&&(a.title=n),o!==null&&(a.content=o),{command:{...t,intent:"update",changes:a}}},publish:(e,t)=>({command:{...t,intent:"publish"}}),delete:(e,t)=>({command:{...t,intent:"delete"}}),toggleStar:yo("toggleStar",ve.isStarred),toggleRead:yo("toggleRead",ve.isRead),addComment:(e,t)=>{let r=e.get(ve.content);return r?{command:{...t,intent:"addComment",content:r}}:{error:"Content required"}},deleteComment:(e,t)=>{let r=Ue(e.get(ve.commentId));return r===null?{error:"Invalid commentId"}:{command:{...t,intent:"deleteComment",commentId:r}}}}),ol=e=>Object.hasOwn(fo,e),al=(e,t)=>{let r=e.get(ve.intent),n=e.get(ve.businessDate),o=n===null?null:Dt(n);if(n!==null&&o===null)return{error:"Invalid businessDate"};let a=e.get(ve.operationTimestamp),i=Wr(a);if(a!==null&&i===null)return{error:"Invalid operationTimestamp"};if(r==="clearCache")return{command:{intent:r}};let l=e.get(ve.clientTempId);if(!l)return{error:"clientTempId required"};let c=lr(l);if(c===null)return{error:"Invalid clientTempId"};if(r==="create")return o===null?{error:"businessDate required"}:{command:{intent:r,clientTempId:c,businessDate:o,operationTimestamp:i}};let s=Ue(e.get(ve.reportHubId));return s===null?{error:"Invalid reportHubId"}:r===null||!ol(r)?{error:"Invalid intent"}:fo[r](e,{clientTempId:c,businessDate:o,operationTimestamp:i,reportHubId:s},t)},Ro=async(e,t)=>{let r=await nl(e);if("refusal"in r)return r;let n=al(r.fields,t);return"error"in n?{refusal:{status:400,error:n.error}}:n},il=6e4,sl="form_too_large",ho=["declared","counted"],So=e=>{let t=ke({windowMs:il,tallies:ho,writeSuppressed:(r,{count:n,since:o,tallies:a})=>{e.warn(`form_too_large_suppressed count=${n} since=${o} measured=${ho.map(i=>`${i}:${a[i]}`).join(",")}`)}});return r=>{let n=()=>{e.warn(`413 action reason=form_too_large measured=${r} limit=${1048576}`)};t.record(sl,r,n)}};var ot=Object.freeze({[oe.businessDate]:{body:"json",admission:["refresh-bucket","cache","miss-gate"]},[oe.idsStream]:{body:"stream",admission:["refresh-bucket","stream-slots","cache","miss-gate"]},[oe.report]:{body:"json",admission:["refresh-bucket","cache","miss-gate"]},[oe.search]:{body:"json",admission:["search-limiter"]},[oe.reports]:{body:"json",admission:["search-limiter"]},[oe.searchMarks]:{body:"json",admission:["search-limiter"]},[oe.searchFacets]:{body:"json",admission:["search-limiter"]}}),go=Object.freeze({json:Object.freeze(["GET"]),stream:Object.freeze(["GET","HEAD"])}),cn=e=>e!==void 0&&Object.hasOwn(ot,e);var un=Object.freeze({tile:Object.freeze({maxWidth:480,maxHeight:320})}),bo=e=>Object.hasOwn(un,e);var ll="download",cl="thumbnail",ul="1";var dn=e=>{let t=e.getAll(cl),r=e.getAll(ll);if(t.length>0&&r.length>0)return{kind:"invalid",reason:"conflict"};if(t.length>0){let[n]=t;return t.length===1&&bo(n)?{kind:"thumbnail",variant:n}:{kind:"invalid",reason:"thumbnail_variant"}}return r.length>0?r.length===1&&r[0]===ul?{kind:"download"}:{kind:"invalid",reason:"download_value"}:{kind:"inline"}};var Do=require("crypto"),mn=e=>`"${(0,Do.createHash)("sha256").update(e).digest("hex")}"`,Ao=e=>mn(JSON.stringify(e));var Ye=Object.freeze({"X-Content-Type-Options":"nosniff","X-Frame-Options":"DENY","Content-Security-Policy":"default-src 'none'"}),pn=(e,t)=>{if(e===null)return!1;for(let r of e.split(",")){let n=r.trim();if((n.startsWith("W/")?n.slice(2):n)===t)return!0}return!1},Z=(e,t,r,n=200)=>{let o=JSON.stringify(r),a=mn(o),i=new Headers({"Content-Type":"application/json","Cache-Control":"private, max-age=0, must-revalidate",ETag:a,...Ye});return t&&i.append("Set-Cookie",t),e.method==="GET"&&n===200&&pn(e.headers.get("If-None-Match"),a)?new Response(null,{status:304,headers:i}):new Response(o,{status:n,headers:i})},Xe=(e,t,r)=>{let n=new Headers({...t===null?{}:{"Content-Type":"application/json"},"Cache-Control":"no-store",...Ye});return e&&n.append("Set-Cookie",e),new Response(t===null?null:JSON.stringify(t),{status:r,headers:n})},dl=5e3/1e3,ml=new Map([[503,dl]]),xe=e=>{let t=ml.get(e);return t===void 0?{}:{"Retry-After":String(t)}};var hn="Cross-site request rejected",pl="Not Found",yl=new Set(["same-origin","none"]),hl=new Set(["GET","HEAD","OPTIONS"]),To=["api","action","sse","attachment"],Eo=(e,t)=>new Response(JSON.stringify({error:{message:t}}),{status:e,headers:{"Content-Type":"application/json","Cache-Control":"no-store",...Ye}}),fl=()=>Eo(403,hn),cr=()=>Eo(404,pl),vt=Object.freeze({navigable:()=>!1,frameworkDataRefusal:()=>null,crossSiteRejection:fl}),Io=e=>new URL(e.url).pathname.endsWith(".data"),Rl=e=>{let t=e.headers.get("Origin");return t===null?!0:URL.canParse(t)&&new URL(t).host===new URL(e.url).host},_o=(e,t)=>{let r=e.headers.get("Sec-Fetch-Site");return r===null?!(hl.has(e.method)||Rl(e)):yl.has(r)?!1:!(e.method==="GET"&&e.headers.get("Sec-Fetch-Mode")==="navigate"&&e.headers.get("Sec-Fetch-Dest")==="document"&&t.navigable(e))},Sl=6e4,gl="refusals",bl=32,Dl=/^[a-z-]+$/,yn=e=>{if(e===null)return"-";let t=e.slice(0,bl);return Dl.test(t)&&t===e?e:JSON.stringify(t)},wo=e=>{let t=ke({windowMs:Sl,tallies:To,writeSuppressed:(r,{count:n,since:o,tallies:a})=>{e.warn(`cross_site_rejected_suppressed count=${n} since=${o} routes=${To.map(i=>`${i}:${a[i]}`).join(",")}`)}});return(r,n)=>{let o=()=>{let{headers:a}=n;e.warn(`cross_site_rejected route=${r} site=${yn(a.get("Sec-Fetch-Site"))} mode=${yn(a.get("Sec-Fetch-Mode"))} dest=${yn(a.get("Sec-Fetch-Dest"))} method=${n.method}`)};t.record(gl,r,o)}};var xo=(e,t)=>(r,n)=>{let o=n?"markAttachmentPresent":"markAttachmentMissing";e[o](r).catch(a=>{t.error(`${o} failed attachment=${r} message=${a instanceof Error?a.message:"unknown"}`)})};var Al="same-origin",Tl="SAMEORIGIN",Tt=Object.freeze({"X-Content-Type-Options":"nosniff","Cross-Origin-Resource-Policy":Al,"X-Frame-Options":Tl}),ur=(e,t,r)=>{let n=new Headers({"Content-Type":"application/json","Cache-Control":"no-store",...r.extraHeaders,...Tt});return r.cookie&&n.append("Set-Cookie",r.cookie),new Response(JSON.stringify({error:{message:t}}),{status:e,headers:n})},Co=new Set(["image/png","image/jpeg","image/gif","image/webp","application/pdf","text/plain"]),El=/^[\x20-\x7E]+$/,Il=/^[\w.+-]+\/[\w.+-]+/,fn=e=>e&&El.test(e)&&Il.test(e)?e:null,_l=/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g,Po=e=>encodeURIComponent(e.replace(_l,"\uFFFD")).replace(/['()*]/g,t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`),Mo=e=>e.replace(/[^\x20-\x7E]/g,"_").replace(/["\\]/g,"_"),dr={404:"Attachment not found",413:"Attachment too large",502:"Attachment storage unavailable",503:"Attachment storage busy",504:"Attachment storage timed out"},Lo={not_found:404,denied:404,invalid_path:404,too_large:413,unavailable:502,busy:503,deadline:504},mr=e=>typeof e=="string"&&Object.hasOwn(Lo,e),pr=e=>Lo[e],Ze="Attachment request failed";var qe=e=>{let t=te("limit",e.limit,1),r=te("maxHeldPerOwner",e.maxHeldPerOwner,1),n=e.queue===null?null:{max:te("queue.max",e.queue.max,0),maxPerOwner:te("queue.maxPerOwner",e.queue.maxPerOwner,0),maxWaitMs:te("queue.maxWaitMs",e.queue.maxWaitMs,1)},o=0,a=[],i=new Map,l=new Map,c=(b,w)=>b.get(w)??0,s=(b,w,F)=>{let V=c(b,w)+F;V<=0?b.delete(w):b.set(w,V)},y=b=>c(l,b)<r,m=b=>o<t&&y(b),S=b=>(o+=1,s(l,b,1),A(b)),f=()=>{let b=-1,w=r;for(let[F,V]of a.entries()){let P=c(l,V.owner);if(P<w&&(b=F,w=P,P===0))break}return b},R=()=>{for(;o<t;){let b=f();if(b<0)return;let[w]=a.splice(b,1);s(i,w.owner,-1),w.grant(S(w.owner))}},A=b=>{let w=!1;return()=>{w||(w=!0,o-=1,s(l,b,-1),R())}};return{canAcquire:m,acquire:(b,w)=>{if(w.aborted)return Promise.resolve(null);if(m(b))return Promise.resolve(S(b));if(n===null||a.length>=n.max||c(i,b)>=n.maxPerOwner)return Promise.resolve(null);let{maxWaitMs:F}=n,V=P=>{let I=()=>{let ce=a.indexOf(H);ce<0||(a.splice(ce,1),s(i,b,-1),$(),P(null))},q=$e(I,F),$=()=>{clearTimeout(q),w.removeEventListener("abort",I)},H={owner:b,grant:ce=>{$(),P(ce)}};a.push(H),s(i,b,1),w.addEventListener("abort",I,{once:!0})};return new Promise(V)}}};var wl=1024,Rn="Too many requests",xl=(e,t)=>{te("limitPerWindow",e,1),te("windowMs",t,1);let r=new Map,n=(a,i)=>{i<=a.lastRefillMs||(a.tokens=Math.min(e,a.tokens+(i-a.lastRefillMs)*e/t),a.lastRefillMs=i)},o=(a,i)=>{let l=r.get(a);l&&r.delete(a);let c=l??{tokens:e,lastRefillMs:i};n(c,i),r.set(a,c);for(let s of r.keys()){if(r.size<=wl)break;r.delete(s)}return c};return{consume:(a,i)=>{let l=o(a,i);return l.tokens<1?!1:(l.tokens-=1,!0)},refund:(a,i,l)=>{let c=r.get(a);c&&(n(c,i),c.tokens=Math.min(e,c.tokens+l))}}},et=e=>{let{reason:t,windowMs:r,logger:n,windowFields:o}=e;if(te("windowMs",r,1e3)%1e3!==0)throw le("windowMs","a whole number of seconds (a multiple of 1000)",r);let a=xl(e.limitPerWindow,r),i=Object.freeze({status:429,message:Rn,headers:Object.freeze({"Retry-After":String(r/1e3)})}),l=ke({windowMs:r,tallies:[t],writeSuppressed:(c,{count:s,since:y})=>{n.warn(`${t}_suppressed count=${s} since=${y} ${o(c)}`)}});return{spend:(c,s)=>a.consume(c,ue())?null:(l.record(c,t,()=>n.warn(`429 ${s} reason=${t}`)),i),refund:(c,s)=>{a.refund(c,ue(),s)}}};var Pl=256*1024,No=6e4,Ml=e=>Math.ceil(e/2),Ll=new Uint8Array(new ArrayBuffer(0)),Nl=(e,t)=>{let r=e,n=0,o,a=()=>{clearTimeout(o),r=Ll,t()},i=l=>{clearTimeout(o),o=$e(()=>{l.error(new Error(`attachment body idle for ${No} ms`)),a()},No)};return new ReadableStream({start(l){i(l)},pull(l){let c=Math.min(n+Pl,r.byteLength);if(c>n&&l.enqueue(r.slice(n,c)),n=c,n>=r.byteLength){l.close(),a();return}i(l)},cancel(){a()}},{highWaterMark:0})},Oo=e=>{let{service:t,encodeUserId:r,resolveViewerScope:n,logger:o,recordObjectState:a}=e,i=et({reason:"rate_limit",limitPerWindow:e.rateLimitPerMinute,windowMs:6e4,logger:o,windowFields:c=>`viewer=${c}`}),l=qe({limit:e.concurrency,maxHeldPerOwner:Ml(e.concurrency),queue:null});return async c=>{let{request:s,delivery:y,attachmentId:m,internalUserId:S,readAttachment:f,cookie:R,fail:A}=c,b=e.maxBytes,w=i.spend(S,`attachment=${m} viewer=${S}`);if(w)return A(w.status,w.message,w.headers);let F=await n(s),V=await t.getAttachmentForUser(F,m,S);if(!V)return o.warn(`404 attachment=${m} viewer=${S} reason=not_visible`),A(404,"Attachment not found");if(V.fileSize!=null&&V.fileSize>b)return o.warn(`413 attachment=${m} viewer=${S} reason=db_size`),A(413,"Attachment too large");let P=fn(V.fileType),I=`filename="${Mo(V.fileName)}"; filename*=UTF-8''${Po(V.fileName)}`,q=await l.acquire(S,s.signal);if(!q)return s.signal.aborted?(o.info(`503 attachment=${m} viewer=${S} reason=aborted`),A(503,"Attachment request aborted")):(o.warn(`503 attachment=${m} viewer=${S} reason=concurrency`),A(503,"Too many concurrent downloads",xe(503)));let $=!1;try{let H=await f(V.filePath,{maxBytes:b,head:s.method==="HEAD",principal:r(S),signal:s.signal});if(s.signal.aborted)return o.info(`503 attachment=${m} viewer=${S} reason=aborted`),A(503,"Attachment request aborted");if(!H.ok){if(!mr(H.reason))return o.error(`500 attachment=${m} viewer=${S} reason=port_contract code=failure_reason`),A(500,Ze);let me=pr(H.reason);return H.reason==="not_found"&&a(m,!1),o.warn(`${me} attachment=${m} viewer=${S} reason=${H.reason} code=${H.code??"-"}`),A(me,dr[me],xe(me))}if(H.bytes.byteLength>b)return o.error(`500 attachment=${m} viewer=${S} reason=port_contract code=over_max_bytes`),A(500,Ze);let ce=s.method==="HEAD";if(ce&&H.size!==void 0&&H.size>b)return o.error(`500 attachment=${m} viewer=${S} reason=port_contract code=over_max_bytes`),A(500,Ze);if(!ce&&H.size!==void 0&&H.size!==H.bytes.byteLength)return o.error(`500 attachment=${m} viewer=${S} reason=port_contract code=size_mismatch`),A(500,Ze);let de=P??fn(H.contentType),ge=de!==null&&Co.has(de),G=ge?de:"application/octet-stream",re=ge&&y.kind!=="download"?"inline":"attachment",ee=ce?H.size:H.bytes.byteLength,se=new Headers({"Content-Type":G,"Content-Disposition":`${re}; ${I}`,"Cache-Control":"private, no-store","Content-Security-Policy":"default-src 'none'; sandbox",...Tt});return ee!==void 0&&se.set("Content-Length",String(ee)),R&&se.append("Set-Cookie",R),a(m,!0),o.info(`200 attachment=${m} viewer=${S} type=${G} disposition=${re} bytes=${ee??"-"}`),ce?new Response(null,{status:200,headers:se}):($=!0,new Response(Nl(H.bytes,q),{status:200,headers:se}))}finally{$||q()}}};var Ce=Object.freeze({queueWaitMs:3e4,readMs:3e4,renderMs:1e4,transferMarginMs:5e3}),Om=Ce.queueWaitMs+Ce.readMs+Ce.renderMs+Ce.transferMarginMs;var Fo=require("buffer"),Ho=new Set([194,198,202,206]),Ol=new Set([192,193,194,195]),Uo=216,vl=217,$o=218,kl=4,Fl=64,Hl=2,vo=8,ko=28,at=12,Sn=8,Ul=20,Bo=at+Sn+10,$l=2,tt=(e,t)=>e[t]<<8|e[t+1],Et=(e,t,r)=>{let n=0;for(let o=r-1;o>=0;o-=1)n=n*256+e[t+o];return n},je=(e,t,r)=>{if(e.byteLength<t+r.length)return!1;for(let n=0;n<r.length;n+=1)if(e[t+n]!==r.charCodeAt(n))return!1;return!0},Vo=e=>e>=192&&e<=207&&e!==196&&e!==200&&e!==204,Yo=e=>({marker:0,body:0,length:0,end:0,stepsLeft:e}),qo=e=>(e.stepsLeft-=1,e.stepsLeft>=0),jo=e=>e[0]===255&&e[1]===Uo,Wo=(e,t,r)=>{let n=t;for(;;){if(n>=e.byteLength||e[n]!==255)return null;do{if(!qo(r))return null;n+=1}while(n<e.byteLength&&e[n]===255);if(n>=e.byteLength)return null;let o=e[n];if(n+=1,o===vl)return"eoi";if(o===0||o===Uo)return null;if(o===1||o>=208&&o<=215)continue;if(n+2>e.byteLength)return null;let a=tt(e,n),i=n+a;return a<2||i>e.byteLength?null:(r.marker=o,r.body=n+2,r.length=a,r.end=i,"segment")}},Bl=(e,t,r)=>{let n=e.byteLength,o=t;for(;;){let a=e.indexOf(255,o);if(a<0)return n;for(;;){if(!qo(r))return null;if(a+1>=n)return n;let i=e[a+1];if(i===255)a+=1;else if(i===0||i>=208&&i<=215){if(a+=2,a>=n||e[a]!==255)break}else return a}o=a}},zo=(e,{marker:t,body:r,length:n})=>{if(n<8)return null;let o=tt(e,r+1),a=tt(e,r+3),i=e[r+5];if(a===0||o===0||i===0||n!==8+3*i)return null;let l=[];for(let c=0;c<i;c+=1){let s=e[r+7+3*c],y=s>>4,m=s&15;if(y<1||y>4||m<1||m>4)return null;l.push({id:e[r+6+3*c],horizontal:y,vertical:m})}return{marker:t,width:a,height:o,components:l}},Go=(e,{body:t,length:r})=>{if(r<3)return null;let n=e[t];return n<1||n>kl||r!==6+2*n?null:Array.from({length:n},(o,a)=>e[t+1+2*a])},Ko=(e,t)=>({width:e.width,height:e.height,components:e.components.map(({horizontal:r,vertical:n})=>({horizontal:r,vertical:n})),multiScan:Ho.has(e.marker)||t<e.components.length}),gn=e=>{if(!jo(e))return null;let t=Yo(e.byteLength),r=null;for(let n=2;;){if(Wo(e,n,t)!=="segment")return null;if(Vo(t.marker)){if(r!==null||(r=zo(e,t),r===null))return null}else if(t.marker===$o){if(r===null)return null;let o=Go(e,t);return o===null?null:Ko(r,o.length)}n=t.end}},Jo=e=>{let t=Math.max(...e.components.map(n=>n.horizontal)),r=Math.max(...e.components.map(n=>n.vertical));return e.components.map(({horizontal:n,vertical:o})=>{let a=Math.ceil(e.width*n/(t*vo)),i=Math.ceil(e.height*o/(r*vo));return Math.ceil(a/n)*n*Math.ceil(i/o)*o})},Qo=e=>e.multiScan?Jo(e).reduce((r,n)=>r+n,0)*Fl*Hl:0,Vl=896,Xo=(e,{maxBlockVisits:t,maxWalkSteps:r})=>{if(!jo(e))return null;let n=Fo.Buffer.from(e.buffer,e.byteOffset,e.byteLength),o=Yo(r),a=null,i=null,l=new Map,c=0,s=0,y=0;for(let m=2;;){let S=Wo(e,m,o);if(S===null)return null;if(S==="eoi")return i===null?null:{header:i,blockVisits:s};if(m=o.end,Vo(o.marker)){if(a!==null||!Ol.has(o.marker)||(a=zo(e,o),a===null))return null;let f=Jo(a);l=new Map;for(let[R,A]of a.components.entries()){let b=l.get(A.id);l.set(A.id,b===void 0?f[R]:Math.max(b,f[R]))}c=a.components.length*(Ho.has(a.marker)?Vl:1)}else if(o.marker===$o){if(a===null||y===c)return null;let f=Go(e,o);if(f===null)return null;for(let A of f){let b=l.get(A);if(b===void 0)return null;s+=b}if(y+=1,i===null&&(i=Ko(a,f.length)),s>t||!i.multiScan)return{header:i,blockVisits:s};let R=Bl(n,o.end,o);if(R===null)return null;m=R}}},Zo=e=>{if(e.byteLength<24||tt(e,8)!==0||tt(e,10)!==13||!je(e,12,"IHDR"))return null;let t=tt(e,16)*65536+tt(e,18),r=tt(e,20)*65536+tt(e,22);return t===0||r===0||t>2147483647||r>2147483647?null:{width:t,height:r}},Yl=e=>{if(je(e,at,"VP8 ")){if(e.byteLength<30||(e[20]&1)!==0||e[23]!==157||e[24]!==1||e[25]!==42)return null;let t=Et(e,26,2)&16383,r=Et(e,28,2)&16383;return t===0||r===0?null:{width:t,height:r}}if(je(e,at,"VP8L")){if(e.byteLength<25||e[20]!==47)return null;let t=Et(e,21,4);return{width:(t&16383)+1,height:Math.floor(t/16384)%16384+1}}return je(e,at,"VP8X")?e.byteLength<Bo?null:{width:Et(e,24,3)+1,height:Et(e,27,3)+1}:null},ea=e=>{if(Zo(e)===null||e.byteLength<=ko)return null;switch(e[ko]){case 0:return!1;case 1:return!0;default:return null}},ta=(e,t)=>{if(je(e,at,"VP8 "))return"lossy";if(je(e,at,"VP8L"))return"lossless";if(!je(e,at,"VP8X")||e.byteLength<Bo)return null;if((e[Ul]&$l)!==0)return"animated";let r=!1,n=t;for(let o=at;o+Sn<=e.byteLength;){if(n-=1,n<0)return null;if(je(e,o,"VP8L"))return"lossless";if(je(e,o,"VP8 "))return r?"lossy-alpha":"lossy";je(e,o,"ALPH")&&(r=!0);let a=Et(e,o+4,4);o+=Sn+a+a%2}return null},ra={png:Zo,jpeg:gn,webp:Yl};var yr=Object.freeze(["image/webp","image/jpeg","image/png"]),hr=1024*1024;var ql=new Set(["image/png","image/jpeg","image/gif","image/webp"]),jl={"image/webp":"webp","image/jpeg":"jpeg","image/png":"png"},Wl=new Set(yr),zl=e=>typeof e=="string"&&Wl.has(e),Gl=256,fr=(e,t)=>e.fileType===null||!ql.has(e.fileType)?!1:e.fileSize===null||e.fileSize<=t,Kl=[137,80,78,71,13,10,26,10],Jl=[255,216,255],Ql=[[71,73,70,56,55,97],[71,73,70,56,57,97]],Xl=[82,73,70,70],Zl=[87,69,66,80],kt=(e,t,r)=>{if(e.byteLength<r+t.length)return!1;for(let[n,o]of t.entries())if(e[r+n]!==o)return!1;return!0},bn=e=>{if(kt(e,Kl,0))return"png";if(kt(e,Jl,0))return"jpeg";for(let t of Ql)if(kt(e,t,0))return"gif";return kt(e,Xl,0)&&kt(e,Zl,8)?"webp":null},na=e=>{let t=JSON.stringify([e.rendererId,e.box.maxWidth,e.box.maxHeight,e.attachmentId,e.filePath,e.fileType,e.fileSize]);return{key:t,etag:Ao([t])}},oa=(e,t)=>{if(!zl(e.contentType))return"content_type";if(!(e.bytes instanceof Uint8Array))return"bytes";if(e.bytes.byteLength===0)return"empty";if(e.bytes.byteLength>hr)return"too_large";let r=jl[e.contentType];if(bn(e.bytes)!==r)return"signature";let n=ra[r](e.bytes);return n===null||n.width>t.maxWidth||n.height>t.maxHeight?"dimensions":null},aa=e=>{te("maxBytes",e.maxBytes,0),te("maxEntries",e.maxEntries,0);let t=new Map,r=0,n=o=>{let a=t.get(o);a&&(t.delete(o),r-=a.weight)};return{get:o=>{let a=t.get(o);if(a)return t.delete(o),t.set(o,a),a.entry},set:(o,a)=>{n(o);let i=(a.kind==="thumbnail"?a.bytes.byteLength:0)+Gl;if(i>e.maxBytes||e.maxEntries===0)return;let l=a.kind==="thumbnail"?{kind:"thumbnail",bytes:a.bytes.slice(),contentType:a.contentType}:a;t.set(o,{entry:l,weight:i}),r+=i;for(let c of t.keys()){if(r<=e.maxBytes&&t.size<=e.maxEntries)break;n(c)}}}};var Dn=e=>{let{budgetMs:t,flightSignal:r,call:n,onOverrun:o,onStuck:a}=e,i=ue(),l=new AbortController,c=!1,s,y,m=()=>{a(ue()-i)},S=P=>{s=$e(()=>{c=!0,P({timedOut:!0}),y=$e(m,t),l.abort(new DOMException(`stage exceeded its ${t} ms budget`,"TimeoutError"))},t)},f=new Promise(S),R=AbortSignal.any([r,l.signal]),A=P=>{P(n(R))},b=new Promise(A),w=P=>(clearTimeout(s),clearTimeout(y),c&&o(ue()-i,P.kind==="error"?{error:P.error}:null),P),F=b.then(P=>w({kind:"value",value:P}),P=>w({kind:"error",error:P}));return{outcome:Promise.race([b.then(P=>({timedOut:!1,value:P})),f]),settled:F}};var it={404:"Attachment not found",500:Ze,502:"Thumbnail unavailable",503:"Thumbnail temporarily unavailable",504:"Thumbnail storage timed out"},ia=(e,t)=>{if(typeof e!="object"||e===null)return{failure:{kind:"failure",status:500,reason:"port_contract",code:"result"}};let r=e;if(!r.ok)return r.reason==="unsupported"?{entry:{kind:"unrenderable",reason:"unsupported"}}:r.reason==="failed"?{failure:{kind:"failure",status:502,reason:"render_failed"}}:{failure:{kind:"failure",status:500,reason:"port_contract",code:"failure_reason"}};let n=oa(r,t);return n!==null?{failure:{kind:"failure",status:500,reason:"port_contract",code:n}}:{entry:{kind:"thumbnail",bytes:r.bytes,contentType:r.contentType}}},ec=e=>{let t=new AbortController,r=()=>{t.abort()},n=$e(r,Ce.queueWaitMs);return e.addEventListener("abort",r,{once:!0}),e.aborted&&r(),{signal:t.signal,end:()=>{clearTimeout(n),e.removeEventListener("abort",r)}}},sa=()=>{},tc=(e,t)=>t.aborted?Promise.resolve():new Promise(r=>{let n=()=>{t.removeEventListener("abort",n),r()};t.addEventListener("abort",n,{once:!0}),e.then(n)}),la=e=>{let{gate:t,cache:r,maxBytes:n,encodeUserId:o,recordObjectState:a,logger:i}=e,l=new Map,c=(f,R)=>{let A=R.then(sa,sa);l.set(f,A);let b=()=>{l.get(f)===A&&l.delete(f)};A.then(b)},s=async(f,R)=>{let A=l.get(f.key);if(A===void 0)return t.acquire(f.owner,R);let b=ec(R);try{if(await tc(A,b.signal),b.signal.aborted)return null;let w=r.get(f.key);return w!==void 0?{...w,identity:"verified"}:await t.acquire(f.owner,b.signal)}finally{b.end()}},y=(f,R)=>{if(f.fileSize===null)return R.kind==="exact"?"verified":"unrecorded";if(R.kind==="exact"?R.bytes===f.fileSize:f.fileSize>R.maxBytes)return"verified";let b=R.kind==="exact"?String(R.bytes):`>${R.maxBytes}`;return i.warn(`size_mismatch expected=${f.fileSize} got=${b} attachment=${f.attachmentId} viewer=${f.owner} variant=thumbnail`),"unverified"},m=(f,R)=>(A,b)=>{let w=b===null?"":` message=${b.error instanceof Error?b.error.message:"unknown"}`;i.warn(`${f}_overrun ms=${A} attachment=${R.attachmentId} viewer=${R.owner} variant=thumbnail${w}`)},S=(f,R)=>A=>{i.warn(`${f}_stuck ms=${A} attachment=${R.attachmentId} viewer=${R.owner} variant=thumbnail`)};return async(f,R)=>{let A=await s(f,R);if(A===null)return{kind:"failure",status:503,reason:R.aborted?"aborted":"queue"};if(typeof A!="function")return A;let b=A,w=null;try{if(R.aborted)return{kind:"failure",status:503,reason:"aborted"};let F=r.get(f.key);if(F!==void 0)return{...F,identity:"verified"};let V=Dn({budgetMs:Ce.readMs,flightSignal:R,call:me=>f.readAttachment(f.filePath,{maxBytes:n,head:!1,principal:o(f.owner),signal:me}),onOverrun:m("read",f),onStuck:S("read",f)}),P=await V.outcome;if(P.timedOut)return w=V.settled,R.aborted?{kind:"failure",status:503,reason:"aborted"}:{kind:"failure",status:504,reason:"read_timeout"};if(R.aborted)return{kind:"failure",status:503,reason:"aborted"};let I=P.value;if(!I.ok&&I.reason!=="too_large")return mr(I.reason)?(I.reason==="not_found"&&a(f.attachmentId,!1),{kind:"failure",status:pr(I.reason),reason:I.reason,code:I.code}):{kind:"failure",status:500,reason:"port_contract",code:"failure_reason"};if(I.ok&&I.bytes.byteLength>n)return{kind:"failure",status:500,reason:"port_contract",code:"over_max_bytes"};let q=y(f,I.ok?{kind:"exact",bytes:I.bytes.byteLength}:{kind:"over",maxBytes:n}),$=me=>{q==="verified"&&r.set(f.key,me)},H=me=>($(me),{...me,identity:q});if(!I.ok)return H({kind:"unrenderable",reason:"too_large"});let ce=bn(I.bytes);if(ce===null)return H({kind:"unrenderable",reason:"signature"});let de=Dn({budgetMs:Ce.renderMs,flightSignal:R,call:me=>f.renderer.render(I.bytes,{format:ce,maxWidth:f.box.maxWidth,maxHeight:f.box.maxHeight,signal:me}),onOverrun:m("render",f),onStuck:S("render",f)}),ge=me=>{if(me.kind==="error")return;let fe=ia(me.value,f.box);"entry"in fe&&$(fe.entry)},G=null,re=()=>(G===null&&(G=de.settled.then(ge),c(f.key,G)),G);R.addEventListener("abort",re,{once:!0});let ee=await de.outcome.finally(()=>R.removeEventListener("abort",re));if(ee.timedOut||R.aborted)return w=re(),R.aborted?{kind:"failure",status:503,reason:"aborted"}:{kind:"failure",status:502,reason:"render_timeout"};let se=ia(ee.value,f.box);return"entry"in se?H(se.entry):se.failure}finally{w===null?b():w.then(b,b)}}};var ca=()=>{let e=new Map;return{join:(t,r,n)=>{let o=()=>{let c=new AbortController,s=()=>{e.get(t)?.controller===c&&e.delete(t)},m={promise:n(c.signal).finally(s),controller:c,waiters:0};return e.set(t,m),m},a=e.get(t)??o();a.waiters+=1;let i=()=>{a.waiters-=1,!(a.waiters>0)&&(a.controller.abort(),e.get(t)===a&&e.delete(t))};r.aborted?i():r.addEventListener("abort",i,{once:!0});let l=()=>{r.removeEventListener("abort",i)};return a.promise.finally(l)}}};var ma=10,rc=1/ma,ua=1-rc,nc=1024,oc=64,ac=8,da="private, no-cache",ic="no-store",sc=Object.freeze({verified:"",unverified:" identity=unverified",unrecorded:" size=unrecorded"}),lc=e=>{switch(e.status){case 404:case 502:case 504:return"warn";case 500:return"error";case 503:return e.reason==="aborted"?"info":"warn"}},pa=e=>{let{service:t,encodeUserId:r,resolveViewerScope:n,logger:o,recordObjectState:a,maxBytes:i,thumbnails:l}=e,{renderer:c}=l,s=(P,I)=>et({reason:P,limitPerWindow:I,windowMs:6e4,logger:o,windowFields:q=>`viewer=${q} variant=thumbnail`}),y=s("rate_limit",l.rateLimitPerMinute),m=s("revalidation_rate_limit",l.rateLimitPerMinute*ma),S=qe({limit:l.concurrency,maxHeldPerOwner:l.concurrency,queue:{max:oc,maxPerOwner:ac,maxWaitMs:Ce.queueWaitMs}}),f=aa({maxBytes:l.cacheBytes,maxEntries:nc}),R=ca(),A=la({gate:S,cache:f,maxBytes:i,encodeUserId:r,recordObjectState:a,logger:o}),b=(P,I,q,$)=>{let H=`attachment=${P.attachmentId} viewer=${P.internalUserId} variant=thumbnail cache=${$}`;if(I.kind==="failure")return o[lc(I)](`${I.status} ${H} reason=${I.reason} code=${I.code??"-"}`),P.fail(I.status,it[I.status],xe(I.status));let ce=sc[I.identity];if(I.kind==="unrenderable")return o.info(`404 ${H} reason=${I.reason}${ce}`),P.fail(404,it[404]);let de=I.identity==="verified"?{"Cache-Control":da,ETag:q}:{"Cache-Control":ic},ge=new Headers({"Content-Type":I.contentType,"Content-Length":String(I.bytes.byteLength),...de,"Content-Security-Policy":"default-src 'none'; sandbox",...Tt});return P.cookie&&ge.append("Set-Cookie",P.cookie),o.info(`200 ${H} type=${I.contentType} bytes=${I.bytes.byteLength}${ce}`),new Response(I.bytes,{status:200,headers:ge})},w=(P,I)=>{let q=P.spend(I.internalUserId,`attachment=${I.attachmentId} viewer=${I.internalUserId} variant=thumbnail`);return q===null?null:I.fail(q.status,q.message,q.headers)},F=P=>w(y,P),V=(P,I)=>I?w(m,P):F(P);return async(P,I)=>{let{request:q,attachmentId:$,internalUserId:H,readAttachment:ce,cookie:de,fail:ge}=P,G=un[I],re=q.headers.get("If-None-Match"),ee=re!==null,se=V(P,ee);if(se)return se;let me=await n(q),fe=await t.getAttachmentForUser(me,$,H),ne=fe!==null&&fr(fe,i)?na({rendererId:c.id,box:G,attachmentId:$,filePath:fe.filePath,fileType:fe.fileType,fileSize:fe.fileSize}):null;if(ne&&pn(re,ne.etag)){let E=new Headers({"Cache-Control":da,ETag:ne.etag,...Tt});return de&&E.append("Set-Cookie",de),o.info(`304 attachment=${$} viewer=${H} variant=thumbnail cache=revalidated`),new Response(null,{status:304,headers:E})}if(ee){let E=F(P);if(E)return E}if(!fe)return o.warn(`404 attachment=${$} viewer=${H} variant=thumbnail reason=not_visible`),ge(404,it[404]);if(!ne)return y.refund(H,ua),o.info(`404 attachment=${$} viewer=${H} variant=thumbnail reason=not_eligible`),ge(404,it[404]);let{key:Ne,etag:Fe}=ne,we=f.get(Ne);if(we)return y.refund(H,ua),b(P,{...we,identity:"verified"},Fe,"hit");let Ve=E=>A({key:Ne,attachmentId:$,filePath:fe.filePath,fileSize:fe.fileSize,box:G,owner:H,readAttachment:ce,renderer:c},E),O;try{O=await R.join(Ne,q.signal,Ve)}catch(E){return o.error(`500 attachment=${$} viewer=${H} variant=thumbnail cache=miss reason=port_exception message=${E instanceof Error?E.message:"unknown"}`),ge(500,it[500])}return b(P,O,Fe,"miss")}};var cc='[daily-report] params.token must be passed by the route that mounts attachment.loader; declare a "token" route parameter ({apiBasePath}/attachment/{token})',uc=()=>ur(403,hn,{cookie:null}),ya=Object.freeze({route:"attachment",navigable:e=>{let{kind:t}=dn(new URL(e.url).searchParams);return t==="inline"||t==="download"},frameworkDataRefusal:()=>ur(404,dr[404],{cookie:null}),crossSiteRejection:uc}),ha=e=>{let{authenticate:t,service:r,encodeUserId:n,resolveViewerScope:o,logger:a}=e,i=r.attachmentDelivery,l={service:r,encodeUserId:n,resolveViewerScope:o,logger:a,recordObjectState:xo(r,a)},c=i===null?null:{idCodec:i.idCodec,read:i.read,serveOriginal:Oo({...l,maxBytes:i.maxBytes,rateLimitPerMinute:i.rateLimitPerMinute,concurrency:i.concurrency}),serveThumbnail:i.thumbnails===null?null:pa({...l,maxBytes:i.maxBytes,thumbnails:i.thumbnails})};return async({request:s,params:y})=>{let m=null,S=(f,R,A={})=>ur(f,R,{cookie:m,extraHeaders:A});try{let{user:f,cookie:R}=await t(s,{failureRedirect:null});if(m=R??null,!f)return S(401,"Unauthorized");let A=dn(new URL(s.url).searchParams);if(A.kind==="invalid")return S(400,"Invalid attachment request");if(A.kind==="thumbnail"&&s.method!=="GET")return S(405,"Method not allowed",{Allow:"GET"});if(s.method!=="GET"&&s.method!=="HEAD")return S(405,"Method not allowed",{Allow:"GET, HEAD"});if(c===null)return S(404,"Attachment not found");if(y.token===void 0)throw new Error(cc);let b=c.idCodec.decode(y.token);if(b===null||!At(b))return S(400,"Invalid attachment token");let w=await r.getUserIdByExternalId(f.id);if(!w)return S(403,"Forbidden");let F={request:s,delivery:A,attachmentId:b,internalUserId:w,readAttachment:c.read,cookie:m,fail:S};return A.kind!=="thumbnail"?await c.serveOriginal(F):c.serveThumbnail===null?S(404,it[404]):await c.serveThumbnail(F,A.variant)}catch(f){if(f instanceof Response)throw f;return a.error(`500 attachment=? viewer=? reason=unexpected message=${f instanceof Error?f.message:"unknown"}`),S(500,Ze)}}};var dc=32*1024*1024,mc=60,pc=4,yc=120,hc=2,fc=8*1024*1024,Rr=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),Rc=e=>{if(e===void 0)throw gt("attachments.thumbnails.renderer","injected when attachments.thumbnails is given");if(!Rr(e))throw le("attachments.thumbnails.renderer","an object with id and render",e);if(e.render===void 0)throw gt("attachments.thumbnails.renderer.render","a function");if(typeof e.render!="function")throw le("attachments.thumbnails.renderer.render","a function",e.render);if(typeof e.id!="string"||e.id.trim()==="")throw le("attachments.thumbnails.renderer.id","a non-blank string naming the rendering pipeline version",e.id);return e},Sc=e=>{if(e===void 0)return null;if(!Rr(e))throw le("attachments.thumbnails","an object with renderer",e);return Object.freeze({renderer:Rc(e.renderer),rateLimitPerMinute:ct("attachments.thumbnails.rateLimitPerMinute",e.rateLimitPerMinute,1,yc),concurrency:ct("attachments.thumbnails.concurrency",e.concurrency,1,hc),cacheBytes:ct("attachments.thumbnails.cacheBytes",e.cacheBytes,0,fc)})},fa=e=>{let t=e;if(t===void 0)return null;if(!Rr(t))throw le("attachments","an object with idCodec and read",t);let{idCodec:r,read:n}=t;if(r===void 0)throw gt("attachments.idCodec","injected when attachments is given");if(!Rr(r)||typeof r.encode!="function"||typeof r.decode!="function")throw le("attachments.idCodec","an object with encode and decode functions",r);if(n===void 0)throw gt("attachments.read","injected when attachments is given");if(typeof n!="function")throw le("attachments.read","a function",n);return Object.freeze({idCodec:r,read:n,maxBytes:ct("attachments.maxBytes",t.maxBytes,1,dc),rateLimitPerMinute:ct("attachments.rateLimitPerMinute",t.rateLimitPerMinute,1,mc),concurrency:ct("attachments.concurrency",t.concurrency,1,pc),thumbnails:Sc(t.thumbnails)})},gc=Object.freeze([["attachmentIdCodec","attachments.idCodec"],["readAttachment","attachments.read"],["attachmentMaxBytes","attachments.maxBytes"],["attachmentRateLimitPerMinute","attachments.rateLimitPerMinute"],["attachmentConcurrency","attachments.concurrency"],["attachmentThumbnailRenderer","attachments.thumbnails.renderer"],["attachmentThumbnailRateLimitPerMinute","attachments.thumbnails.rateLimitPerMinute"],["attachmentThumbnailConcurrency","attachments.thumbnails.concurrency"],["attachmentThumbnailCacheBytes","attachments.thumbnails.cacheBytes"]]),Sr=e=>{for(let[t,r]of gc)if(Object.hasOwn(e,t))throw gt(r,`given in place of the flat key ${t}`)};var Sa=8,bc=8*Sa,Dc=128,Ac=2,ga=Ac*Dc,Tc=4*ga,Ec=6e4,Ic=6e4,_c="Too many reads",Ra=Object.freeze(Object.keys(ot).filter(e=>ot[e].admission.includes("miss-gate"))),ba=e=>{let t=qe({limit:bc,maxHeldPerOwner:Sa,queue:{max:Tc,maxPerOwner:ga,maxWaitMs:Ec}}),r=ke({windowMs:Ic,tallies:Ra,writeSuppressed:(n,{count:o,since:a,tallies:i})=>{e.warn(`cache_miss_admission_suppressed count=${o} since=${a} viewer=${n} endpoints=${Ra.map(l=>`${l}:${i[l]}`).join(",")}`)}});return{admissionFor:(n,o,a)=>({signal:a,acquire:async i=>{let l=await t.acquire(n,i);return l===null&&!i.aborted&&r.record(n,o,()=>e.warn(`503 ${o} viewer=${n} reason=cache_miss_admission`)),l}})}},gr=(e,t)=>{let r=Z(e,t,{error:{message:_c}},503);for(let[n,o]of Object.entries(xe(503)))r.headers.set(n,o);return r};var wc=/^[0-9a-f]{1,16}$/;var Da=e=>{let t=e.get(Re.cursorReportHubId),r=e.get(Re.cursorBusinessDate),n=e.get(Re.cursorSnapshot),o=n!==null&&wc.test(n)?n:null,a=null;if(t!==null){let l=Ue(t);if(l===null)return{refused:"cursor"};if(r!==null&&!rr(r))return{refused:"cursor"};a={businessDate:r,reportHubId:l}}else if(r!==null)return{refused:"cursor"};let i=Ot(e.get(Re.forceRefresh));return i===null?{refused:"forceRefresh"}:{query:{cursor:a,snapshot:o,forceRefresh:i}}};var br=e=>e.method==="HEAD"?AbortSignal.abort():e.signal,xc=2,Cc=16,Pc=xc*Cc,Mc=6e4,Aa=()=>{},Lc=(e,t)=>{if(e.aborted)return t(),t;let r=()=>{e.removeEventListener("abort",r),t()};return e.addEventListener("abort",r,{once:!0}),r},Ta=e=>{let t=qe({limit:Number.MAX_SAFE_INTEGER,maxHeldPerOwner:Pc,queue:null}),r=ke({windowMs:Mc,tallies:["sse","ids-stream"],writeSuppressed:(n,{count:o,since:a,tallies:i})=>{e.warn(`streams_per_viewer_suppressed count=${o} since=${a} viewer=${n} routes=sse:${i.sse},ids-stream:${i["ids-stream"]}`)}});return{admit:async(n,o,a)=>{if(n===null)return Aa;if(a.aborted){if(t.canAcquire(n))return Aa}else{let i=await t.acquire(n,a);if(i!==null)return Lc(a,i)}return r.record(n,o,()=>e.warn(`503 ${o} viewer=${n} reason=streams_per_viewer`)),null}}};var Dr=30,xa=4e3,Nc="stream interrupted by server error",Oc="Too many streams",vc=15e3,Ca=Symbol("ids-stream-heartbeat"),Ea=()=>{},Ia=e=>e.return(void 0).then(Ea,Ea),kc=()=>{let e;return{fired:new Promise(r=>{e=setTimeout(()=>r(Ca),vc)}),stop:()=>clearTimeout(e)}};async function*_a(e,t,r,n){let o=t?zn(e,t):0,a=!0;for(;;){let i=e.slice(o,o+(a?r:xa));o+=i.length;let l=o>=e.length,c=i[i.length-1];if(yield{kind:"chunk",items:i,nextCursor:l||!c?null:{businessDate:c.businessDate,reportHubId:c.reportHubId},isLast:l,...a?{total:e.length}:{},...a?{streamAnchor:n.streamAnchor}:{},snapshot:n.snapshot,...a&&n.restarted?{restarted:!0}:{}},a=!1,l)return}}var Pa=e=>{let t=new Headers({"Content-Type":"application/x-ndjson; charset=utf-8","Cache-Control":"private, no-cache, no-transform",...Ye});return e&&t.append("Set-Cookie",e),t},wa=(e,t,r,n,o)=>{let a=async(y,m)=>{o(),m&&await Ia(t);try{y.close()}catch{}},i=new TextEncoder,l=!1,c=null,s=new ReadableStream({async pull(y){if(l||r.aborted){await a(y,!0);return}let m=kc();try{c===null&&(c=t.next());let S=await Promise.race([c,m.fired]);if(m.stop(),S===Ca){if(l||r.aborted){await a(y,!0);return}y.enqueue(i.encode(`
2
- `));return}c=null;let{value:f,done:R}=S;if(R){await a(y,!1);return}if(l||r.aborted){await a(y,!0);return}y.enqueue(i.encode(`${JSON.stringify(f)}
3
- `))}catch(S){if(m.stop(),c=null,o(),l||r.aborted)return;S instanceof He||n.error(`ids-stream emission failed: ${S instanceof Error?S.message:String(S)}`);try{let f={kind:"error",error:Nc};y.enqueue(i.encode(`${JSON.stringify(f)}
4
- `)),y.close()}catch{}}},cancel(){l=!0,o(),Ia(t)}});return new Response(s,{status:200,headers:Pa(e)})},Ma=e=>{let{service:t,logger:r,streamSlots:n,missGate:o,refuseForcedRead:a}=e,i=async(l,c,s,y,m,S,f)=>{let R=!1,A=null,b=null,w=new Promise((P,I)=>{A=P,b=I});w.catch(()=>{});let F=t.getDailyReportIdsByExternalId(s,c.id,{forceRefresh:l.forceRefresh,admission:f,onFetchStart:l.cursor?void 0:()=>{R=!0,t.readSseStreamAnchor().then(P=>t.getDailyReportIdsFirstPageByExternalId(s,c.id,Dr).then(I=>({items:I,streamAnchor:P}))).then(P=>A?.(P),P=>b?.(P))}});if(F.catch(()=>{}),l.cursor){let{items:P,streamAnchor:I,snapshot:q}=await F,$=l.snapshot!==null&&l.snapshot===q;return wa(y,_a(P,$?l.cursor:null,Dr,{snapshot:q,restarted:!$,streamAnchor:I}),m,r,S)}let V=(async function*(){let P=await Promise.race([F.then($=>({kind:"full",source:$}),$=>({kind:"full-error",error:$})),w.then($=>({kind:"page",page:$}),()=>({kind:"page-error"}))]),I=null,q=!1;if(P.kind==="full")I=P.source;else if(P.kind==="page"){let{items:$,streamAnchor:H}=P.page;if($.length<Dr){yield{kind:"chunk",items:$,nextCursor:null,isLast:!0,total:$.length,streamAnchor:H};return}yield{kind:"chunk",items:$,nextCursor:null,isLast:!1,provisional:!0},q=!0}else if(P.kind==="full-error"&&R){let $=await w.catch(()=>null);$&&$.items.length>0&&(yield{kind:"chunk",items:$.items,nextCursor:null,isLast:!1,provisional:!0})}I===null&&(I=await F),yield*_a(I.items,null,q?xa:Dr,{snapshot:I.snapshot,streamAnchor:I.streamAnchor})})();return wa(y,V,m,r,S)};return async(l,c,s,y,m)=>{let S=Da(l.searchParams);if("refused"in S)return Z(s,c,{error:{message:S.refused==="cursor"?"Invalid cursor":"Invalid forceRefresh"}},400);let{query:f}=S;if(f.forceRefresh){let w=a(y,s,c);if(w!==null)return w}let R=br(s),A=await t.getUserIdByExternalId(y.id),b=await n.admit(A,"ids-stream",R);if(b===null){let w=Z(s,c,{error:{message:Oc}},503);for(let[F,V]of Object.entries(xe(503)))w.headers.set(F,V);return w}if(R.aborted)return new Response(null,{status:200,headers:Pa(c)});try{return await i(f,y,m,c,R,b,A===null?void 0:o.admissionFor(A,oe.idsStream,R))}catch(w){if(b(),w instanceof He)return gr(s,c);throw w}}};var Ht=require("drizzle-orm");var Fc="",Hc=64,Uc=e=>e.toLowerCase(),$c=e=>e.trim().toLowerCase();function La(e){if(e==null)return null;if(!Array.isArray(e))return new Set;let t=new Set;for(let r of e){if(typeof r!="string")continue;let n=$c(r);n.length>0&&t.add(n)}return t}function Me(e,t){return e===null?!0:t==null?!1:e.has(Uc(t))}function Le(e){return e!==null&&e.size===0}function Ut(e,t){if(t!==null)return t.size===0?Ht.sql`1 = 0`:(0,Ht.inArray)(Ht.sql`LOWER(${e})`,[...t])}var It,_t,Ft=class Ft{constructor(t,r){Vr(this,It);Vr(this,_t);Yr(this,It,t),Yr(this,_t,r)}get visible(){return Lt(this,It)===null?null:new Set(Lt(this,It))}get commentable(){return Lt(this,_t)===null?null:new Set(Lt(this,_t))}static restrictTo(t){let r=typeof t=="object"&&t!==null&&"read"in t,n=La(r?t.read:t),o=r?t.comment:void 0;if(o===void 0)return new Ft(n,n);let a=La(o),i=new Set;for(let l of a??[])n.has(l)&&i.add(l);return new Ft(n,i)}static unrestricted(t){return new Ft(null,null)}};It=new WeakMap,_t=new WeakMap;var Pe=Ft;function $t(e){let t=Na(e.visible),r=Na(e.commentable);return t===r?t:`d:${t.length}:${t}${r}`}function Na(e){if(e===null)return"all";if(e.size===0)return"none";let t=[...e].sort().map(n=>`${n.length}:${n}`).join(Fc);if(t.length<=Hc)return`s:${t}`;let r=2166136261;for(let n=0;n<t.length;n++)r^=t.charCodeAt(n),r=Math.imul(r,16777619);return`sh:${(r>>>0).toString(16)}`}var Oa=(e,t,r,n)=>Me(n.commentable,t)||e.authorUserId!==null&&e.authorUserId===r;var ja=require("@aiquants/fuzzy-search");var ka=require("crypto"),he=require("@aiquants/fuzzy-search/normalize");var Tr=`
5
- `,Er=4e3,Bc=1,Fa=new Set([8203,8288,65279,173]),Vc=new RegExp(`[${String.fromCodePoint(...Fa)}]`,"gu"),Yc=new RegExp(`\\r\\n|[\\n\\r${String.fromCodePoint(133,8232,8233)}]`,"gu"),qc=/(\s+)/u,jc=/^\s+$/u,Wc=/^(?:(?=\p{Lo})[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}]|[A-Za-z0-9])$/u,zc=new Set([8205,1536,1537,1538,1539,1540,1541,1757,1807,2192,2193,2274,69821,69837,70082,70083,71999,72001,72250,72324,72325,72326,72327,72328,72329,73030,73474]),Bt=e=>e.replace(Vc,""),Ha=e=>{let t=Bt(e);if(t.length===e.length)return{text:t,rawIndex:null};let r=new Uint32Array(t.length),n=0;for(let o=0;o<e.length;o++)Fa.has(e.charCodeAt(o))||(r[n++]=o);return{text:t,rawIndex:r}},Tn=e=>(0,he.normalizeText)(e,he.DEFAULT_NORMALIZE_OPTIONS),Ar=e=>Tn(Bt(e)),Gc=(0,he.resolveNormalizeOptions)({...he.DEFAULT_NORMALIZE_OPTIONS,convertRomaji:!0},"[daily-report] search reading options"),Kc=3,Jc=/^[-ー]+/u,Qc=/[^\p{L}\p{M}]/gu,Xc=/ー{2,}/gu,Zc=/\p{Script=Latin}/u,va=/(?=\p{L})\p{Script=Latin}/u,eu=e=>(0,he.clusterCountOf)(e.replace(Jc,"").replace(Qc,"").replace(Xc,"\u30FC")),tu=(e,t)=>{for(let r of t)if(!(0,he.isAnswerTier)(r.tier)||r.splitTier!==null)throw new Error(`[daily-report] search readings: queryNeedles gave an unfinished needle for the word ${JSON.stringify(e)} (text ${JSON.stringify(r.text)}, tier ${r.tier}, splitTier ${r.splitTier})`)},Ua=e=>{if(!va.test(e))return[];let t=Ar(e);if(!va.test(t))return[];let r=(0,he.queryNeedles)(t,Gc,!1);tu(t,r);let n=[];for(let o of r){if(o.tier===ut.word)continue;let a=Ar(o.text);if(!(a.length===0||a.length>Ie.maxWordLength)&&!(a===t||Zc.test(a))&&!(eu(a)<Kc||n.includes(a))&&(n.push(a),n.length===Kr))break}return n},$a=(e,t)=>{let r=e.charCodeAt(t-1),n=e.charCodeAt(t);return r>=55296&&r<=56319&&n>=56320&&n<=57343},ru=(e,t)=>{let r=e.codePointAt(t),n=t>=2&&$a(e,t-1)?t-2:t-1;return Wc.test(String.fromCodePoint(r))&&!zc.has(e.codePointAt(n))},nu=(e,t,r)=>{let n=[],o=0,a=0;for(;e.length-a>r;){let i=a+r;for(;i>a&&!ru(e,i);)i--;i===a&&(i=a+r,$a(e,i)&&i--,o++),n.push({start:t+a,end:t+i}),a=i}return n.push({start:t+a,end:t+e.length}),{pieces:n,forcedCuts:o}},En=(e,t)=>{if(e.length<=t)return{chunks:[[{start:0,end:e.length}]],forcedCuts:0};let r=[],n=0,o=0,a=0,i=0,l=()=>{i>0&&r.push([{start:a,end:a+i}]),i=0};for(let c of e.split(qc)){let s=o;if(o+=c.length,i+c.length<=t){i===0&&(a=s),i+=c.length;continue}if(l(),jc.test(c))continue;if(c.length<=t){a=s,i=c.length;continue}let y=nu(c,s,t);n+=y.forcedCuts,r.push(y.pieces)}return l(),{chunks:r,forcedCuts:n}},In=(e,t)=>{let r=En(e,t),n=[];for(let o of r.chunks){let a=o.map(i=>Tn(e.slice(i.start,i.end))).join("");a.length>0&&n.push(a)}return{text:n.join(" "),forcedCuts:r.forcedCuts}},_n=(e,t)=>{let r=0;for(let n of e.matchAll(Yc))t(e.slice(r,n.index),r),r=n.index+n[0].length;t(e.slice(r),r)},ou=(e,t)=>{if(e.partialReadings!==null)throw new Error(`[daily-report] search marks: the mapped forms of the piece ${JSON.stringify(t)} carry partial readings`);return e.canonical},Ba=(e,t)=>{let r="",n=[],o=[];for(let a of t.chunks){let i="",l=[],c=[];for(let s of a){let y=e.slice(s.start,s.end),m=ou((0,he.toMappedFormsInto)(y,he.DEFAULT_NORMALIZE_OPTIONS,new he.InteriorPairs(0)),y),[S,f]=(0,he.trimmedRange)(m.text);i+=m.text.slice(S,f);for(let R=S;R<f;R++)l.push(s.start+m.start[R]),c.push(s.start+m.end[R])}if(i.length!==0){r.length>0&&(r+=" ",n.push(o[o.length-1]),o.push(l[0])),r+=i;for(let s=0;s<l.length;s++)n.push(l[s]),o.push(c[s])}}return{text:r,start:n,end:o}},Ir=(e,t=Er)=>{let r=[],n=0;return _n(Bt(e),o=>{let a=In(o,t);n+=a.forcedCuts,a.text.length>0&&r.push(a.text)}),{text:r.join(Tr),forcedCuts:n}},Va=e=>e.filter(t=>t.length>0).join(Tr),au=e=>{let t=[];for(let r=0;r<=65535;r++)r>=55296&&r<=57343||t.push(e+String.fromCharCode(r));return t.join(`
6
- `)},iu=[`\u3067\u3093${String.fromCodePoint(8203)}\u3077\u3093 \uFF83\uFF9E\uFF9D\uFF8C\uFF9F\uFF9D\r
7
- \u30C7\u30F3\u30D7\u30F3`,"\u30DD\u30C6\u30C8-25kg \u30A2--1 \u30FC\u30FC\u30E1\u30F3 \u4F50\u3005\u6728","\u6F22\u5B57\u304B\u306A\u30AB\u30CAABC123\u6F22\u5B57\u304B\u306A\u30AB\u30CAABC123\u6F22\u5B57\u304B\u306A\u30AB\u30CA",`\uFF71\uFF72\uFF73\uFF74\uFF75\uFF76\uFF9E\uFF77\uFF9E\uFF78\uFF9E\uFF79\uFF9E\uFF7A\uFF9E${String.fromCodePoint(8232)}\u6B21\u306E\u884C`],su=()=>{let e=(0,ka.createHash)("sha256");e.update(JSON.stringify(he.DEFAULT_NORMALIZE_OPTIONS));for(let t of["","\u30A2","\u4F50"," "])e.update("\0"),e.update(Tn(au(t)));return e.update("\0"),e.update(JSON.stringify(iu.map(t=>Ir(t,8)))),`dr-search-v${Bc};fz=${e.digest("hex").slice(0,16)};u=${process.versions.unicode};icu=${process.versions.icu}`},An=null,Ya=()=>(An===null&&(An=su()),An);var lu=/^-+/u,cu=/\s+/u,qa=e=>{let t=lu.exec(e);return t===null?[e]:[e,"\u30FC".repeat(t[0].length)+e.slice(t[0].length)]},uu=(e,t)=>{let r=[...qa(e).map(n=>({text:n,tier:ut.word})),...t.flatMap(n=>qa(n).map(o=>({text:o,tier:ut.reading})))];return r.filter((n,o)=>r.findIndex(a=>a.text===n.text)===o)},du=e=>JSON.stringify(e.map(({text:t,tier:r})=>JSON.stringify([r,t])).sort()),_r=(e,t)=>{if(e.length>Ie.maxQueryLength)return{ok:!1,reason:"too-long"};let r=[],n=new Set,o=0;for(let{query:a}of(0,ja.parseQuerySets)(Bt(e),t).sets){let i=[],l=new Set;for(let s of a.split(cu)){let y=Ar(s);if(y.length===0)return{ok:!1,reason:"blank-word"};if(y.length>Ie.maxWordLength)return{ok:!1,reason:"word-too-long"};let m=uu(y,Ua(s)),S=du(m);l.has(S)||(l.add(S),i.push({alternatives:m}))}if(i.length>Ie.maxWordsPerSet)return{ok:!1,reason:"too-many-words-in-set"};let c=JSON.stringify([...l].sort());n.has(c)||(n.add(c),o+=i.length,r.push({words:i}))}return r.length===0?{ok:!1,reason:"empty"}:r.length>Ie.maxSets?{ok:!1,reason:"too-many-sets"}:o>Ie.maxWords?{ok:!1,reason:"too-many-words"}:{ok:!0,plan:{combine:t,sets:r}}},Vt=e=>e.sets.map(t=>t.words.map(r=>r.alternatives));var Qp=Object.freeze({sourceTypes:null,authors:null,customers:null}),mu=e=>e.sourceTypes!==null||e.authors!==null||e.customers!==null,Wa=(e,t,r)=>{if(io(e)&&mu(r))return{ok:!0,criteria:{plan:null,filters:r}};let n=_r(e,t);return n.ok?{ok:!0,criteria:{plan:n.plan,filters:r}}:{ok:!1,reason:n.reason}};var za=6e4,pu=1,yu=2e3,hu=Object.freeze({search:null,reports:null,"search-marks":yu,"search-facets":null}),fu=(e,t)=>{let r=hu[e];return r===null?null:{max:t,maxPerOwner:or,maxWaitMs:r}},Yt=e=>{let{concurrency:t,route:r,logger:n}=e,o=et({reason:"rate_limit",limitPerWindow:e.rateLimitPerMinute,windowMs:za,logger:n,windowFields:()=>`route=${r}`}),a=qe({limit:t,maxHeldPerOwner:Math.max(1,Math.floor(t/2)),queue:fu(r,t)}),i=Object.freeze({status:429,message:Rn,headers:Object.freeze({"Retry-After":String(pu)})}),l=ke({windowMs:za,tallies:["busy"],writeSuppressed:(c,{count:s,since:y})=>{n.warn(`busy_suppressed count=${s} since=${y} route=${r} concurrency=${t}`)}});return{admit:async(c,s)=>{let y=o.spend(c,r);if(y!==null)return{refusal:y};let m=await a.acquire(c,s);return m!==null?{release:m}:(o.refund(c,1),s.aborted||l.record(r,"busy",()=>n.warn(`429 ${r} reason=busy concurrency=${t}`)),{refusal:i})}}};var ai=require("@aiquants/sse"),st=require("@aiquants/sse/server");var wt=(e,t)=>{let r=e.message.data;if(!r)return{entry:{id:e.id,message:null},json:void 0};let n;try{n=JSON.parse(r)}catch(i){return t.error(`SSE message ${e.id} is not JSON:`,i),{entry:{id:e.id,message:null},json:void 0}}let o=oo.safeParse(n);if(!o.success)return t.error("SSE message validation failed:",o.error.format()),{entry:{id:e.id,message:null},json:n};let a=Object.freeze({parsed:o.data,published:n,text:r});return{entry:Object.freeze({id:e.id,message:a}),json:n}},Ru=["externalComments","postedComments"],Ga=new WeakMap,Su=e=>{let t=Ga.get(e);if(t!==void 0)return t;let r={recipientRemoved:null,commentsRedacted:null};return Ga.set(e,r),r},Ka=e=>{let{recipientRawUserId:t,...r}=e;return r},Ja=(e,t)=>{let{published:r}=e;if(!(t||Object.hasOwn(r,"recipientRawUserId")))return e.text;let n=Su(e);if(t){if(n.commentsRedacted===null){let o=Ka(r),a=o.report;n.commentsRedacted=JSON.stringify({...o,report:{...a,...Object.fromEntries(Ru.map(i=>[i,[]]))}})}return n.commentsRedacted}return n.recipientRemoved===null&&(n.recipientRemoved=JSON.stringify(Ka(r))),n.recipientRemoved};var ti=require("@aiquants/sse"),ri=require("@aiquants/sse/shared-source");var mt="daily-report:ids:",pt="daily-report:business-date:",wr=(e,t)=>`${e}st:${t}`,wn=e=>`${mt}user:${e}:`,Qa=(e,t)=>wr(wn(e),t),gu=e=>`${pt}${e}:`,Xa=(e,t)=>wr(gu(e),t),qt=e=>`daily-report:date:${e}:user:`,xt=(e,t)=>`${qt(e)}${t}:`,Za=(e,t,r)=>wr(xt(e,t),r),We=e=>`daily-report:detail:${e}:user:`,xr=(e,t)=>`${We(e)}${t}:`,ei=(e,t,r)=>wr(xr(e,t),r);var rt=(e,t)=>{let[r,n]=e.split("-").map(Number),[o,a]=t.split("-").map(Number);return r!==o?r<o:n<=a},bu=5e3,Du=sr,Ct=class{constructor(t){this.config=t;this._lastId=null;this._positioning=null;this._generation=0;this._logger=Se(t.logger,1,"SseReader"),this._source=this._createSource()}ready(){return this._position().then(()=>{})}subscribe(t,r){return this._source.subscribe({next:n=>{this._lastId=n.id,t(n)},error:n=>r(n instanceof Error?n:new Error(String(n)))})}async destroy(){await this._source.dispose(),this._generation+=1,this._positioning=null,this._lastId=null,this._source=this._createSource()}_position(){if(this._lastId!==null)return Promise.resolve(this._lastId);if(this._positioning===null){let t=this._generation;this._positioning=this._readTail().then(r=>{if(t!==this._generation)throw new Error("SSE reader was destroyed while the stream tail was being read");return this._positioning=null,this._lastId=r,r},r=>{throw t===this._generation&&(this._positioning=null),r})}return this._positioning}async _readTail(){let t=await this.config.redis?.getClient();if(!t)throw new Error("Failed to get Redis client to read the SSE stream tail");let r=await t.xRevRange(this.config.streamKey,"+","-",{COUNT:1});return r.length>0?r[0].id:"0-0"}_createSource(){return(0,ri.createSharedSource)({start:t=>this._start(t),lingerMs:0,replay:"none",runtime:ti.systemSseRuntime,onListenerError:t=>this._logger.error("SSE reader subscriber threw:",t),onStopError:t=>this._logger.error("SSE reader failed to stop:",t)})}async _start(t){let r=await this._position(),n=await this.config.redis?.createClient();if(!n)throw new Error("Failed to create Redis client for SSE reader");n.on("error",i=>{this._logger.error("Redis client error:",i)});let o=!1,a=this._readLoop(n,t,r,()=>o);return async()=>{if(o=!0,n.isOpen)try{await n.quit()}catch{}await a}}async _readLoop(t,r,n,o){let a=n;try{for(;!o()&&t.isOpen;){let i=await t.xRead([{key:this.config.streamKey,id:a}],{BLOCK:bu,COUNT:Du});if(i)for(let l of i)for(let c of l.messages){a=c.id;let{entry:s,json:y}=wt(c,this._logger);this._invalidateCaches(y),r.next(s)}}}catch(i){o()||(this._logger.error("xRead loop error:",i),r.fail(i instanceof Error?i:new Error(String(i))));return}o()||r.fail(new Error("Redis client for SSE reader closed unexpectedly"))}_invalidateCaches(t){if(t===null||typeof t!="object")return;let{type:r,reportHubId:n}=t;(r==="report-create"||r==="report-delete"||r==="report-publish")&&this.config.cache.invalidatePrefix(mt),(r==="comment-add"||r==="comment-delete"||r==="status-update")&&typeof n=="number"&&this.config.cache.invalidatePrefix(We(n))}};var ii=Object.freeze({...vt,route:"sse",frameworkDataRefusal:cr}),ni=864e5,Au={baseMs:2e3,jitterMs:8e3},xn=6e4,Pr=sr,si=JSON.stringify({type:"connected"}),oi="0-0",Tu=(e,t,r,n)=>{if(r===null&&n===null)return!0;let o=typeof t.sourceType=="string"?t.sourceType:void 0;switch(e.type){case"connected":case"status-update":return!0;case"report-create":case"report-update":case"report-publish":return Me(r,e.report.sourceType);case"comment-add":case"comment-delete":return Me(n,o??"Internal");case"report-delete":return Me(r,o)}},Eu=(e,t)=>t===null||e.type!=="report-create"&&e.type!=="report-update"&&e.type!=="report-publish"?!1:!Me(t,e.report.sourceType),Iu=(e,t)=>{e.writeEvent({event:null,id:t,data:si})},_u=(e,t,r)=>{let{message:n}=t;if(n===null)return;let{parsed:o,published:a}=n,i=typeof a.recipientRawUserId=="number"?a.recipientRawUserId:void 0;if((o.type==="status-update"||i!==void 0)&&i!==r.internalUserId||!Tu(o,a,r.visibleSet,r.commentableSet)){Iu(e,t.id);return}e.writeEvent({event:null,id:t.id,data:Ja(n,Eu(o,r.commentableSet))})},li=e=>{let{authenticate:t,service:r,resolveViewerScope:n,redis:o,sseReader:a,streamKey:i,streamSlots:l,logger:c}=e,s=async(y,m)=>{let{request:S,internalUserId:f,cursor:R}=m,A=m.initialScope.visible,b=m.initialScope.commentable,w=0,F=setInterval(()=>{let G=++w;n(S,"refresh").then(re=>{G===w&&(A=re.visible,b=re.commentable)})},xn);y.onClose(()=>clearInterval(F));let V=R===null?oi:R,P=R!==null&&o!==void 0,I=[],q=null,$=G=>{rt(G.id,V)||(V=G.id,_u(y,G,{internalUserId:f,visibleSet:A,commentableSet:b}))},H=async(G,re)=>{let[ee]=await G.xRange(i,"-","+",{COUNT:1});return ee!==void 0&&!rt(ee.id,re)},ce=async(G,re)=>{if(await H(G,re))return!1;let ee=re;for(;;){let se=await G.xRange(i,ee,"+",{COUNT:Pr}),me=se[0];if(me!==void 0&&me.id!==ee&&await H(G,ee))return!1;for(let Ge of se){if(q!==null&&rt(q,Ge.id))return!0;rt(Ge.id,V)||$(wt(Ge,c).entry)}let fe=se.at(-1);if(se.length<Pr||fe===void 0||y.isClosed())return!0;ee=fe.id}},de=a.subscribe(G=>{if(!P){$(G);return}rt(G.id,V)||(q===null&&(q=G.id),I.push(G))},G=>{c.error(`[SSE:${f}] Fan-Out reader error:`,G),y.close()});if(y.onClose(de),R===null){await a.ready();try{let G=await o?.getClient();if(G){let re=await G.xRevRange(i,"+","-",{COUNT:1});re.length>0&&!rt(re[0].id,V)&&(V=re[0].id)}}catch{}}if(y.writeEvent({event:null,id:V===oi?null:V,data:si}),(0,st.startSseHeartbeat)(y,{intervalMs:eo,retry:Au,runtime:ai.systemSseRuntime}),R===null||o===void 0)return;await a.ready();let ge=await o.getClient();if(ge===void 0)throw new Error("redis client unavailable for the SSE catch-up");if(!await ce(ge,R)){y.writeRetry(ni),y.writeEvent({event:"resync-required",id:null,data:""}),y.close();return}P=!1;for(let G of I.splice(0))$(G)};return async({request:y,params:m})=>{let S,f=()=>{let A=new Headers;S!==void 0&&A.append("Set-Cookie",S);for(let[b,w]of Object.entries(Ye))A.set(b,w);return A},R=A=>(0,st.terminalStreamResponse)(A,{data:"",retryMs:ni,headers:f()});try{let A=await t(y,{failureRedirect:null});S=A.cookie;let{user:b}=A;if(!b)return R("auth-required");let w=await r.getUserIdByExternalId(b.id);if(!w)return R("forbidden");if(m.endpoint!=="updates")return new Response("Not Found",{status:404,headers:f()});let F=(0,st.readLastEventId)(y,to);if(F!==null&&!ro(F))return c.warn(`[SSE:${w}] malformed resume cursor; asking the client to resync`),R("resync-required");let V=br(y),P=await l.admit(w,"sse",V);if(P===null){let q=f();for(let[$,H]of Object.entries(xe(503)))q.set($,H);return new Response("Too many streams",{status:503,headers:q})}let I=!1;try{let q=await n(y,"initial");return(0,st.createSseResponse)({requestSignal:V,headers:f(),onError:($,H)=>c.error(`[SSE:${w}] ${H} failed:`,$),produce:$=>(I=!0,$.onClose(P),s($,{request:y,internalUserId:w,cursor:F,initialScope:q}))})}finally{I||P()}}catch(A){if(A instanceof Response)throw A;let b=A instanceof Error?A:new Error(String(A));return c.error(`500 sse name=${b.name} message=${b.message}`),new Response("Internal Server Error",{status:500,headers:f()})}}};var ci=(e,t)=>{let r=new Headers({...t?.headers,"Content-Type":"application/json",...Ye});return t?.setCookie&&r.append("Set-Cookie",t.setCookie),new Response(JSON.stringify(e),{status:t?.status??200,headers:r})},wu=Object.freeze({...vt,route:"api",frameworkDataRefusal:({params:e})=>cn(e.endpoint)&&ot[e.endpoint].body==="stream"?cr():null}),xu=Object.freeze({...vt,route:"action"}),Cu=(e,t,r)=>({...r,status:"OK",intent:e.intent,reportHubId:t,clientTempId:e.clientTempId}),mi=6e4,pi=5,Pu=pi*Math.ceil(mi/500),Mu=2,Lu=6,Nu=6e4,Ou=pi*Mu*Lu,vu=2,ku=10,Fu=2,Hu=10,ui=(e,t)=>Math.max(e,or)*t,Cn=(e,t)=>{for(let[r,n]of Object.entries(t))e.headers.set(r,n);return e},Mr=(e,t,r)=>Cn(Z(e,t,{error:{message:r.message}},r.status),r.headers),di=e=>Cn(Xe(e,null,503),xe(503));function Lr(e){Sr(e);let{authenticate:t,service:r,encodeUserId:n,redis:o,sseReader:a,streamKey:i}=e,l={titleMaxLength:te("service.titleMaxLength",r.titleMaxLength,1)},c=e.loginRedirectPath??"/auth/login",s=Se(e.logger,3,"API"),y=Se(e.logger,3,"Visibility"),m=Se(e.logger,1,"SSE"),S=Se(e.logger,1,"Attachment"),f=Se(e.logger,2,"Isolation"),R=Se(e.logger,2,"Action"),A=Se(e.logger,2,"Search"),b=Se(e.logger,2,"Refresh"),w=Se(e.logger,2,"Streams"),F=Se(e.logger,2,"Reads"),V=et({reason:"refresh_rate_limit",limitPerWindow:Ou,windowMs:Nu,logger:b,windowFields:()=>"route=api"}),P=Ta(w),I=ba(F),q=async(O,E,C,Y,j)=>{let J=await r.getUserIdByExternalId(E.id);try{return await j(J===null?void 0:I.admissionFor(J,O,C.signal))}catch(K){if(K instanceof He)return gr(C,Y);throw K}},$=(O,E,C,Y)=>{let j=V.spend(E.id,`endpoint=${O}`);return j===null?null:Mr(C,Y,j)},H=async(O,E="initial")=>{let C=e.resolveVisibleSourceTypes;if(!C)return Pe.unrestricted("no visibility port injected: this deployment does not restrict by source type");try{let Y=await C(O,{reason:E});return Y==null?Pe.unrestricted("visibility port returned null/undefined: this deployment opts out of source-type filtering"):Pe.restrictTo(Y)}catch(Y){return y.error("resolveVisibleSourceTypes threw; failing closed (deny all)",Y),Pe.restrictTo([])}},ce=async({request:O})=>{let{user:E,cookie:C}=await t(O,{failureRedirect:c}),Y=new Headers;C&&Y.append("Set-Cookie",C);let j=await r.getUserIdByExternalId(E.id),J=j?n(j):null;return{data:{user:E,userId:J},headers:Y}},de=r.searchLimits===null?null:Yt({...r.searchLimits,route:oe.search,logger:A}),ge=r.searchLimits===null?null:Yt({concurrency:ui(r.searchLimits.concurrency,vu),rateLimitPerMinute:r.searchLimits.rateLimitPerMinute*ku,route:oe.reports,logger:A}),G=r.searchLimits===null?null:Yt({concurrency:ui(r.searchLimits.concurrency,Fu),rateLimitPerMinute:r.searchLimits.rateLimitPerMinute*Hu,route:oe.searchMarks,logger:A}),re=r.searchLimits===null?null:Yt({...r.searchLimits,route:oe.searchFacets,logger:A}),ee={[oe.businessDate]:async(O,E,C,Y,j)=>{let J=O.searchParams.get(Re.businessDate),K=J===null?null:Dt(J);if(K===null)return Z(C,E,{error:{message:"Invalid business date"}},400);let z=Ot(O.searchParams.get(Re.forceRefresh));if(z===null)return Z(C,E,{error:{message:"Invalid forceRefresh"}},400);let Q=z?$(oe.businessDate,Y,C,E):null;return Q!==null?Q:q(oe.businessDate,Y,C,E,async M=>{let ae=await r.getDailyReportsByBusinessDateByExternalId(j,K,Y.id,{forceRefresh:z,admission:M});return Z(C,E,{businessDate:K,reports:ae},200)})},[oe.idsStream]:Ma({service:r,logger:s,streamSlots:P,missGate:I,refuseForcedRead:(O,E,C)=>$(oe.idsStream,O,E,C)}),[oe.report]:async(O,E,C,Y,j)=>{let J=Ue(O.searchParams.get(Re.reportHubId));if(J===null)return Z(C,E,{error:{message:"Invalid reportHubId"}},400);let K=Ot(O.searchParams.get(Re.forceRefresh));if(K===null)return Z(C,E,{error:{message:"Invalid forceRefresh"}},400);let z=K?$(oe.report,Y,C,E):null;return z!==null?z:q(oe.report,Y,C,E,async Q=>{let M=await r.getDailyReportDetailByIdByExternalId(j,J,Y.id,{snapshot:!0,forceRefresh:K,admission:Q});return M?Z(C,E,{report:M},200):Z(C,E,{error:{message:"Report not found"}},404)})},[oe.search]:async(O,E,C,Y,j)=>{if(de===null)return Z(C,E,{error:{message:"Unknown endpoint"}},404);let J=O.searchParams.get(Re.searchQuery),K=sn(O.searchParams.get(Re.searchCombine));if(J===null||K===null)return Z(C,E,{error:{message:"Invalid search request"}},400);let z=lo(O.searchParams,r.searchFilterSourceTypes);if(!z.ok)return Z(C,E,{error:{message:"Invalid search filters",reason:z.reason}},400);let Q=Wa(J,K,z.filters);if(!Q.ok)return Z(C,E,{error:{message:"Invalid search query",reason:Q.reason}},400);let{criteria:M}=Q,ae=M.plan===null?[]:Vt(M.plan),be=await r.getUserIdByExternalId(Y.id);if(!be)return Z(C,E,Jr([],ae),200);let Ee=await de.admit(be,C.signal);if("refusal"in Ee)return Mr(C,E,Ee.refusal);try{let St=await r.searchDailyReports(j,be,M);return Z(C,E,Jr(St,ae),200)}finally{Ee.release()}},[oe.reports]:async(O,E,C,Y,j)=>{if(ge===null)return Z(C,E,{error:{message:"Unknown endpoint"}},404);let J=ln(O.searchParams.get(Re.reportIds));if(J===null)return Z(C,E,{error:{message:"Invalid ids"}},400);let K=await r.getUserIdByExternalId(Y.id);if(!K)return Z(C,E,{reports:[]},200);let z=await ge.admit(K,C.signal);if("refusal"in z)return Mr(C,E,z.refusal);try{let Q=await r.getDailyReportDetailsByIdsByExternalId(j,J,Y.id);return Z(C,E,{reports:Q},200)}finally{z.release()}},[oe.searchMarks]:async(O,E,C,Y,j)=>{if(G===null)return Xe(E,{error:{message:"Unknown endpoint"}},404);let J=O.searchParams.get(Re.searchQuery),K=sn(O.searchParams.get(Re.searchCombine));if(J===null||K===null)return Xe(E,{error:{message:"Invalid search request"}},400);let z=_r(J,K);if(!z.ok)return Xe(E,{error:{message:"Invalid search query",reason:z.reason}},400);let Q=ln(O.searchParams.get(Re.reportIds));if(Q===null)return Xe(E,{error:{message:"Invalid ids"}},400);let M=await r.getUserIdByExternalId(Y.id);if(!M)return Xe(E,{wordsDigest:nr(Vt(z.plan)),reports:[]},200);let ae=await G.admit(M,C.signal);if("refusal"in ae)return C.signal.aborted?di(E):Cn(Xe(E,{error:{message:ae.refusal.message}},ae.refusal.status),ae.refusal.headers);try{let be=await r.markDailyReportSearchHits(j,M,z.plan,Q,{signal:C.signal});return C.signal.throwIfAborted(),Xe(E,be,200)}catch(be){if(C.signal.aborted&&be===C.signal.reason)return di(E);throw be}finally{ae.release()}},[oe.searchFacets]:async(O,E,C,Y,j)=>{if(re===null)return Z(C,E,{error:{message:"Unknown endpoint"}},404);let J=await r.getUserIdByExternalId(Y.id);if(!J)return Z(C,E,{sourceTypes:[],authors:[],customers:[]},200);let K=await re.admit(J,C.signal);if("refusal"in K)return Mr(C,E,K.refusal);try{let z=await r.listDailyReportSearchFacets(j,J);return Z(C,E,z,200)}finally{K.release()}}},se=async({request:O,params:E})=>{let{user:C,cookie:Y}=await t(O,{failureRedirect:null}),j=Y??null;if(!C)return Z(O,j,{error:{message:"Unauthorized"}},401);let J=E.endpoint;if(!cn(J))return Z(O,j,{error:{message:"Unknown endpoint"}},404);let K=go[ot[J].body];if(!K.includes(O.method)){let Q=Z(O,j,{error:{message:"Method not allowed"}},405);return Q.headers.set("Allow",K.join(", ")),Q}let z=ue();try{let Q=new URL(O.url),M=await H(O),ae=await ee[J](Q,j,O,C,M);return ot[J].body==="json"&&s.debug(`${ae.status} endpoint=${J} etag_match=${ae.status===304}`),ae}catch(Q){let M=ue()-z,ae=Q instanceof Error?Q:new Error(String(Q));return s.error(`500 endpoint=${J} elapsed=${M}ms name=${ae.name} code=${"code"in ae?ae.code:"N/A"} message=${ae.message}`,ae),Z(O,j,{error:{message:"Internal Server Error"}},500)}},me=So(R),fe=et({reason:"rate_limit",limitPerWindow:Pu,windowMs:mi,logger:R,windowFields:()=>"route=action"}),Ge=async(O,E,C,Y,j)=>{let{clientTempId:J}=O;if(O.intent==="create"){let M=await r.createDailyReport(E,O.businessDate,J);return j(O,M.reportHubId,{report:M})}let{reportHubId:K,businessDate:z}=O,Q=async(M,ae)=>{try{let be=await ae(M.value);return j(M,K,{updatedStatus:{isStarred:be.isStarred,isRead:be.isRead},operationTimestamp:M.operationTimestamp})}catch(be){if(be instanceof Error&&be.message==="Not Found")return Y({error:"Report not found"},{status:404});throw be}};switch(O.intent){case"update":try{return await r.updateDailyReport(K,E,O.changes,J),j(O,K,{})}catch(M){if(M instanceof Error){if(M.message==="Unauthorized")return Y({error:"Unauthorized"},{status:403});if(M.message==="Not Found")return Y({error:"Report not found"},{status:404})}throw M}case"publish":try{let M=await r.publishDailyReport(K,E,J);return j(O,K,{report:M})}catch(M){if(M instanceof Error){if(M.message==="Unauthorized")return Y({error:"Unauthorized"},{status:403});if(M.message==="Not Found")return Y({error:"Report not found"},{status:404})}throw M}case"delete":try{return await r.deleteDailyReport(K,E,J),j(O,K,{})}catch(M){if(M instanceof Error){if(M.message==="Unauthorized")return Y({error:"Unauthorized"},{status:403});if(M.message==="Not Found")return Y({error:"Report not found"},{status:404})}throw M}case"toggleStar":return await Q(O,M=>r.setStarStatus(C,E,K,z,M,J));case"toggleRead":return await Q(O,M=>r.setReadStatus(C,E,K,z,M,J));case"addComment":try{let M=await r.addComment(C,E,K,O.content,z,J);return j(O,K,{newComment:M})}catch(M){if(M instanceof Error){if(M.message==="Not Found")return Y({error:"Report not found"},{status:404});if(M.message.startsWith("Comments are restricted"))return Y({error:"Comments are restricted for this report"},{status:403})}throw M}case"deleteComment":try{return await r.deleteComment(C,E,K,O.commentId,z,J),j(O,K,{deletedCommentId:O.commentId})}catch(M){if(M instanceof Error){if(M.message==="Unauthorized")return Y({error:"Unauthorized"},{status:403});if(M.message==="Not Found")return Y({error:"Comment not found"},{status:404})}throw M}}},ne=async({request:O,params:E})=>{let{user:C,cookie:Y}=await t(O,{failureRedirect:null}),j=(z,Q)=>ci(z,{...Q,setCookie:Y}),J=(z,Q,M)=>ci(Cu(z,Q,M),{setCookie:Y});if(!C)return j({error:"Unauthorized"},{status:401});let K=ue();try{if(E.endpoint!==oe.action)return j({error:"Unknown endpoint"},{status:404});let z=fe.spend(C.id,"action");if(z!==null)return j({error:z.message},{status:z.status,headers:z.headers});let Q=await Ro(O,l);if("refusal"in Q){let{refusal:Ee}=Q;return Ee.status===413&&me(Ee.measuredBy),j({error:Ee.error},{status:Ee.status})}let{command:M}=Q;if(M.intent==="clearCache"&&!e.enableDevCacheClear)return j({error:"Invalid intent"},{status:400});let ae=await r.getUserIdByExternalId(C.id);if(!ae)return j({error:"User not found"},{status:404});let be=await H(O);return M.intent==="clearCache"?(await r.clearCache(),j({status:"OK",intent:"clearCache"})):await Ge(M,ae,be,j,J)}catch(z){if(z instanceof Response)throw z;let Q=ue()-K,M=z instanceof Error?z:new Error(String(z));return s.error(`500 action elapsed=${Q}ms name=${M.name} message=${M.message}`,M),j({error:"Internal Server Error"},{status:500})}},Ne=li({authenticate:t,service:r,resolveViewerScope:H,redis:o,sseReader:a,streamKey:i,streamSlots:P,logger:m}),Fe=ha({authenticate:t,service:r,encodeUserId:n,resolveViewerScope:H,logger:S}),we=wo(f),Ve=(O,E)=>async C=>{let Y=Io(C.request)?O.frameworkDataRefusal(C):null;if(Y!==null)throw Y;return _o(C.request,O)?(we(O.route,C.request),O.crossSiteRejection()):E(C)};return{index:{loader:ce},api:{loader:Ve(wu,se),action:Ve(xu,ne)},sse:{loader:Ve(ii,Ne)},attachment:{loader:Ve(ya,Fe)}}}var Pt=require("@aiquants/mssql"),g=require("drizzle-orm");var yt=require("drizzle-orm"),Nr=(e,t,r,n)=>{if(r.length===0)return;let{hub:o,hubLabel:a,label:i}=e,l=n==="author-or-authorless"?yt.sql`${o.userId} = ${t} OR ${o.userId} IS NULL`:yt.sql`${o.userId} = ${t}`,c=yt.sql.join(r.map(s=>yt.sql`${s}`),yt.sql`, `);return yt.sql`(${l} OR NOT EXISTS (SELECT 1 FROM ${a} INNER JOIN ${i} ON ${i.id} = ${a.labelId} WHERE ${a.hubId} = ${o.id} AND ${i.name} IN (${c})))`};var Uu=["tables","externalSourceTexts","concurrency","rateLimitPerMinute"],$u=["document","comment"],Bu=["hubId","searchText","sourceDigest","normalizerVersion","indexedAt","rowVersion","authorName","customerName"],Vu=["hubId","ordinal","authorUserId","commentText"],Pn=e=>{if(typeof e!="object"||e===null||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null},yi=(e,t,r)=>{for(let n of Object.keys(t))if(!r.includes(n))throw qr(e,n,r)},hi=(e,t,r)=>{if(typeof t!="object"||t===null)throw le(e,"a table object",t);let n=t;for(let o of r)if(typeof n[o]!="object"||n[o]===null)throw le(`${e}.${o}`,"a column",n[o])},fi=(e,t)=>{if(!Pn(e))throw le("search","a plain object",e);yi("search key",e,Uu);let{tables:r}=e;if(!Pn(r))throw le("search.tables","a plain object with document and comment",r);yi("search.tables key",r,$u),hi("search.tables.document",r.document,Bu),hi("search.tables.comment",r.comment,Vu);let n=new Map;if(e.externalSourceTexts!==void 0){if(!Pn(e.externalSourceTexts))throw le("search.externalSourceTexts","a plain object",e.externalSourceTexts);for(let[o,a]of Object.entries(e.externalSourceTexts)){if(!t.includes(o))throw qr("search.externalSourceTexts key",o,t);if(typeof a!="function")throw le(`search.externalSourceTexts.${o}`,"a function",a);n.set(o,a)}}return{tables:r,externalSourceTexts:n,concurrency:te("search.concurrency",e.concurrency,1),rateLimitPerMinute:te("search.rateLimitPerMinute",e.rateLimitPerMinute,1)}};var lt=e=>{let t=typeof e=="object"&&e!==null?e.recordset:void 0;if(!Array.isArray(t))throw new Error("[daily-report] search: the database result has no recordset");return t},ht=(e,t)=>{let r=typeof e=="string"?Ue(e):typeof e=="number"&&At(e)?e:null;if(r===null)throw new Error(`[daily-report] search: column ${t} holds no positive id`);return r},ft=(e,t)=>{if(e===null||typeof e=="string")return e;throw new Error(`[daily-report] search: column ${t} holds no string`)};var U=require("drizzle-orm");var Yu=/[[%_]/gu,qu=e=>e.replace(Yu,t=>`[${t}]`),Ri=e=>`%${qu(e)}%`;var Be=Object.freeze({reportHubId:"report_hub_id",businessDate:"business_date",sourceType:"source_type"}),Rt=Object.freeze({reportHubId:"report_hub_id",matchedSets:"matched_sets"}),Wt=Object.freeze({value:"value"}),Te=Object.freeze({hubId:"hub_id",sourceDigest:"source_digest",normalizerVersion:"normalizer_version"}),B=e=>U.sql`${U.sql.identifier(e.name)}`,jt=e=>U.sql.join(e.map(t=>U.sql`${t}`),U.sql`, `),Si=(e,t)=>U.sql`SELECT ${B(e.id)} AS ${U.sql.identifier(Te.hubId)} FROM ${e} WITH (UPDLOCK, ROWLOCK) WHERE ${e.id} IN (${jt(t)}) ORDER BY ${e.id}`,ju=(e,t,r)=>{let{hub:n}=e,{document:o,comment:a}=e.search,i=t.alternatives.map(m=>Ri(m.text)),l=U.sql.join(i.map(m=>U.sql`${o.searchText} LIKE ${m}`),U.sql` OR `),c=U.sql.join(i.map(m=>U.sql`${a.commentText} LIKE ${m}`),U.sql` OR `),s=Ut(n.sourceType,r.scope.commentable),y=s===void 0?U.sql``:U.sql` AND (${s} OR ${a.authorUserId} = ${r.userId})`;return U.sql`((${l}) OR EXISTS (SELECT 1 FROM ${a} WHERE ${a.hubId} = ${n.id} AND (${c})${y}))`},gi=(e,t,r)=>U.sql`(${U.sql.join(t.words.map(n=>ju(e,n,r)),U.sql` AND `)})`,Mn=(e,t,r,n)=>{let{hub:o}=e,a=[U.sql`${o.deletedAt} IS NULL`],i=Nr(e,t.userId,r,"author");i!==void 0&&a.push(i);let l=Ut(o.sourceType,t.scope.visible);return l!==void 0&&a.push(l),n!==void 0&&a.push(U.sql`${o.id} IN (SELECT CAST([value] AS bigint) FROM OPENJSON(${JSON.stringify(n)}))`),a},Wu=(e,t)=>{let{hub:r}=e,{document:n}=e.search,o=[];if(t.sourceTypes!==null){if(t.sourceTypes.size===0)throw new Error("[daily-report] search: a source-type filter must hold at least one source type");o.push(U.sql`LOWER(${r.sourceType}) IN (${jt([...t.sourceTypes])})`)}return t.authors!==null&&o.push(U.sql`${n.authorName} IN (${jt(t.authors)})`),t.customers!==null&&o.push(U.sql`${n.customerName} IN (${jt(t.customers)})`),o},bi=(e,t,r,n,o)=>{let{hub:a}=e,{document:i}=e.search,{plan:l}=t,c=[...Mn(e,r,n,o),...Wu(e,t.filters)];if(l!==null){let s=l.combine==="intersection"?U.sql` AND `:U.sql` OR `;c.push(U.sql`(${U.sql.join(l.sets.map(y=>gi(e,y,r)),s)})`)}return U.sql`SELECT ${B(a.id)} AS ${U.sql.identifier(Be.reportHubId)}, CONVERT(char(10), ${B(a.businessDate)}, 23) AS ${U.sql.identifier(Be.businessDate)}, ${B(a.sourceType)} AS ${U.sql.identifier(Be.sourceType)} FROM ${a} INNER JOIN ${i} ON ${i.hubId} = ${a.id} WHERE ${U.sql.join(c,U.sql` AND `)} ORDER BY ${a.businessDate} DESC, ${a.id} DESC`},Di=(e,t,r,n,o)=>{let{hub:a}=e,{document:i}=e.search,l=U.sql.join(t.sets.map((c,s)=>U.sql`(CASE WHEN ${gi(e,c,r)} THEN ${2**s} ELSE 0 END)`),U.sql` + `);return U.sql`SELECT ${B(a.id)} AS ${U.sql.identifier(Rt.reportHubId)}, ${l} AS ${U.sql.identifier(Rt.matchedSets)} FROM ${a} INNER JOIN ${i} ON ${i.hubId} = ${a.id} WHERE ${U.sql.join(Mn(e,r,n,o),U.sql` AND `)}`},Ai=(e,t,r,n)=>{let{hub:o}=e,{document:a}=e.search,i=a[t],l=[...Mn(e,r,n),U.sql`${i} IS NOT NULL`];return U.sql`SELECT ${i} AS ${U.sql.identifier(Wt.value)} FROM ${o} INNER JOIN ${a} ON ${a.hubId} = ${o.id} WHERE ${U.sql.join(l,U.sql` AND `)} GROUP BY ${i} ORDER BY ${i}`},Ti=(e,t,r)=>{let{document:n,comment:o}=e,a=JSON.stringify(t.map(c=>({[n.hubId.name]:c.hubId,[n.searchText.name]:c.searchText,[n.sourceDigest.name]:c.sourceDigest,[n.normalizerVersion.name]:r,[n.authorName.name]:c.authorName,[n.customerName.name]:c.customerName}))),i=JSON.stringify(t.flatMap(c=>c.comments.map(s=>({[o.hubId.name]:c.hubId,[o.ordinal.name]:s.ordinal,[o.authorUserId.name]:s.authorUserId,[o.commentText.name]:s.commentText})))),l=JSON.stringify(t.map(c=>c.hubId));return U.sql`MERGE ${n} WITH (HOLDLOCK) AS t USING (SELECT * FROM OPENJSON(${a}) WITH (${B(n.hubId)} bigint, ${B(n.searchText)} nvarchar(max), ${B(n.sourceDigest)} char(64), ${B(n.normalizerVersion)} varchar(64), ${B(n.authorName)} nvarchar(max), ${B(n.customerName)} nvarchar(max))) AS s ON t.${B(n.hubId)} = s.${B(n.hubId)}
8
- WHEN MATCHED THEN UPDATE SET t.${B(n.searchText)} = s.${B(n.searchText)}, t.${B(n.sourceDigest)} = CONVERT(binary(32), s.${B(n.sourceDigest)}, 2), t.${B(n.normalizerVersion)} = s.${B(n.normalizerVersion)}, t.${B(n.authorName)} = s.${B(n.authorName)}, t.${B(n.customerName)} = s.${B(n.customerName)}, t.${B(n.indexedAt)} = SYSUTCDATETIME()
9
- WHEN NOT MATCHED THEN INSERT (${B(n.hubId)}, ${B(n.searchText)}, ${B(n.sourceDigest)}, ${B(n.normalizerVersion)}, ${B(n.authorName)}, ${B(n.customerName)}) VALUES (s.${B(n.hubId)}, s.${B(n.searchText)}, CONVERT(binary(32), s.${B(n.sourceDigest)}, 2), s.${B(n.normalizerVersion)}, s.${B(n.authorName)}, s.${B(n.customerName)});
1
+ "use strict";var jr=Object.defineProperty;var il=Object.getOwnPropertyDescriptor;var sl=Object.getOwnPropertyNames;var ll=Object.prototype.hasOwnProperty;var ro=e=>{throw TypeError(e)};var cl=(e,t)=>{for(var r in t)jr(e,r,{get:t[r],enumerable:!0})},ul=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of sl(t))!ll.call(e,o)&&o!==r&&jr(e,o,{get:()=>t[o],enumerable:!(n=il(t,o))||n.enumerable});return e};var dl=e=>ul(jr({},"__esModule",{value:!0}),e);var no=(e,t,r)=>t.has(e)||ro("Cannot "+r);var kt=(e,t,r)=>(no(e,t,"read from private field"),r?r.call(e):t.get(e)),Wr=(e,t,r)=>t.has(e)?ro("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,r),zr=(e,t,r,n)=>(no(e,t,"write to private field"),n?n.call(e,r):t.set(e,r),r);var Sp={};cl(Sp,{DAILY_REPORT_ATTACHMENT_THUMBNAIL_MAX_OUTPUT_BYTES:()=>Rr,DAILY_REPORT_ATTACHMENT_THUMBNAIL_OUTPUT_MEDIA_TYPES:()=>fr,DAILY_REPORT_SHARP_THUMBNAIL_DECODE_BUDGET_BYTES:()=>Gn,DAILY_REPORT_SHARP_THUMBNAIL_DECODE_WORK_MODEL:()=>Xt,DAILY_REPORT_SHARP_THUMBNAIL_WORKING_SET_MODEL:()=>Kn,DAILY_REPORT_SSE_CATCH_UP_BATCH:()=>Lr,DAILY_REPORT_SSE_VISIBILITY_REFRESH_MS:()=>Hn,DailyReportSseReader:()=>Pt,DailyReportViewerScope:()=>Me,SqlResultCache:()=>Tt,createDailyReportHandlers:()=>Nr,createDailyReportServer:()=>Rp,createDailyReportService:()=>$r,createEpochStore:()=>rr,createSharpThumbnailRenderer:()=>xs,defineDailyReportSchema:()=>ps,defineDailyReportSearchSchema:()=>ms,encodeIdsStreamRows:()=>mt,isStreamIdLte:()=>tt,parseClientTempId:()=>ur,predictSharpThumbnailWorkingSetBytes:()=>_s,readDailyReportSseStreamEntry:()=>Ct,transformJsonArray:()=>ds});module.exports=dl(Sp);var Gr=e=>typeof e=="string"?JSON.stringify(e):typeof e=="number"||typeof e=="boolean"||e===null||e===void 0?String(e):Array.isArray(e)?"array":typeof e,oe=(e,t,r)=>new RangeError(`[daily-report] ${e} must be ${t}; got ${Gr(r)}`),Ke=(e,t)=>new TypeError(`[daily-report] ${e} must be ${t}`),Kr=(e,t,r)=>oe(e,`one of ${r.map(n=>JSON.stringify(n)).join(", ")}`,t),re=(e,t,r,n)=>{if(typeof t=="number"&&Number.isSafeInteger(t)&&t>=r&&(n===void 0||t<=n))return t;throw oe(e,n===void 0?`an integer >= ${r}`:`an integer from ${r} to ${n}`,t)},pt=(e,t,r,n)=>t===void 0?n:re(e,t,r);var ue=()=>Math.floor(performance.now());var He=class extends Error{constructor(t){super(`cache miss refused (${t})`),this.name="SqlResultCacheMissRefusal",this.reason=t}},rr=e=>({async getEpoch(t){try{let r=await e?.getClient();if(!r)return null;let n=await r.get(t);return n?Number(n):0}catch{return null}},async incrementEpoch(t){try{let r=await e?.getClient();if(!r)return;await r.incr(t)}catch{}}}),vt=(e,t)=>t?e.map(r=>structuredClone(r)):e,pl=8,ml=(e,t)=>{let r=0,n=[e];for(;n.length>0&&r<=t;){let o=n.pop();if(ArrayBuffer.isView(o)){r+=o.byteLength;continue}let a=Array.isArray(o)?o:Object.keys(o).map(i=>o[i]);r+=pl*a.length;for(let i of a)typeof i=="string"?r+=2*i.length:typeof i=="object"&&i!==null&&n.push(i)}return r},Tt=class{constructor(t,r){this.epochStore=r;this.buckets=new Map;this.totalBytes=0;this.inFlight=new Map;this.forcedFetches=new Map;this.maybeRefreshAhead=t=>{let r=t.refreshAheadRatio;if(r===void 0)return;let{cacheKey:n}=t,o=this.buckets.get(n);if(!o)return;let a=t.ttlMsOverride??this.defaultTtlMs;if(a-(o.expireAt-ue())<a*r||this.inFlight.has(n))return;let l;l=(async()=>{let c=t.epochKey?await this.epochStore.getEpoch(t.epochKey):null,s=await t.fetcher();return this.inFlight.get(n)===l&&this.writeBucket(n,{records:s,expireAt:ue()+a,epoch:c}),s})(),this.inFlight.set(n,l),l.catch(()=>{}).finally(()=>{this.inFlight.get(n)===l&&this.inFlight.delete(n)})};this.startFetch=(t,r)=>{let{cacheKey:n,admission:o}=t,a;a=(async()=>{let l=t.epochKey?await this.epochStore.getEpoch(t.epochKey):null,c=o===void 0?null:await o.acquire(o.signal);if(o!==void 0&&c===null)throw new He(o.signal.aborted?"aborted":"busy");try{for(let m of r)m();let s=await t.fetcher();return this.inFlight.get(n)===a&&this.writeBucket(n,{records:s,expireAt:ue()+(t.ttlMsOverride??this.defaultTtlMs),epoch:l}),s}finally{c?.()}})(),this.inFlight.set(n,a);let i=()=>{this.inFlight.get(n)===a&&this.inFlight.delete(n)};return a.then(i,i),a};this.forcedFetch=t=>{let{cacheKey:r}=t,n=t.onFetchStart===void 0?[]:[t.onFetchStart],o=this.forcedFetches.get(r);if(o===void 0)return this.runForcedFetch(t,n);if(o.pending===null){let a=[],i=()=>this.runForcedFetch(t,a);o.pending={promise:o.running.then(i,i),onFetchStarts:a}}return o.pending.onFetchStarts.push(...n),o.pending.promise};this.runForcedFetch=(t,r)=>{let{cacheKey:n}=t,o=this.startFetch(t,r);this.forcedFetches.set(n,{running:o,pending:null});let a=()=>{let i=this.forcedFetches.get(n);i?.running===o&&i.pending===null&&this.forcedFetches.delete(n)};return o.then(a,a),o};this.getOrFetch=async t=>{let{cacheKey:r,forceRefresh:n,snapshot:o,admission:a}=t;if(n){if(a?.signal.aborted)throw new He("aborted");return this.dropBucket(r),vt(await this.readOwnOrRetry(this.forcedFetch(t),t),o)}let i=this.buckets.get(r);if(i&&i.expireAt>ue())if(t.epochKey){let c=await this.epochStore.getEpoch(t.epochKey);if(c===null||i.epoch===c)return this.maybeRefreshAhead(t),vt(i.records,o);this.dropBucket(r)}else return this.maybeRefreshAhead(t),vt(i.records,o);let l=this.inFlight.get(r);if(l!==void 0)return vt(await this.readOwnOrRetry(l,t),o);if(a?.signal.aborted)throw new He("aborted");return vt(await this.startFetch(t,t.onFetchStart===void 0?[]:[t.onFetchStart]),o)};this.readOwnOrRetry=async(t,r)=>{try{return await t}catch(n){let{admission:o}=r;if(!(n instanceof He&&(o===void 0||n.reason==="aborted"&&!o.signal.aborted)))throw n;return this.getOrFetch({...r,snapshot:!1})}};this.clearAll=()=>{this.buckets.clear(),this.totalBytes=0,this.inFlight.clear()};this.invalidatePrefix=t=>{for(let r of this.buckets.keys())r.startsWith(t)&&this.dropBucket(r);for(let r of this.inFlight.keys())r.startsWith(t)&&this.inFlight.delete(r)};this.defaultTtlMs=re("defaultTtlMs",t.defaultTtlMs,1),this.maxBuckets=re("maxBuckets",t.maxBuckets,1),this.maxBytes=re("maxBytes",t.maxBytes,1),this.lastSweepAt=ue()}dropBucket(t){let r=this.buckets.get(t);r!==void 0&&(this.buckets.delete(t),this.totalBytes-=r.bytes)}writeBucket(t,r){this.dropBucket(t);let n=ml(r.records,this.maxBytes);if(n>this.maxBytes)return;this.buckets.set(t,{...r,bytes:n}),this.totalBytes+=n;let o=ue();o-this.lastSweepAt>=this.defaultTtlMs&&this.sweepExpired(o);for(let a of this.buckets.keys()){if(this.buckets.size<=this.maxBuckets&&this.totalBytes<=this.maxBytes)break;this.dropBucket(a)}}sweepExpired(t){this.lastSweepAt=t;for(let[r,n]of this.buckets)n.expireAt<=t&&this.dropBucket(r)}};var yl=/^(\d{4})([-/])(\d{2})\2(\d{2})$/;var oo=e=>e<10?`0${e}`:`${e}`,hl=e=>{if(Number.isNaN(e.getTime()))return null;let t=e.getFullYear(),r=oo(e.getMonth()+1),n=oo(e.getDate());return`${t}-${r}-${n}`},Et=e=>{let t=yl.exec(e);if(t===null)return null;let[,r,,n,o]=t,a=Number(r),i=Number(n),l=Number(o);if(a<1)return null;let c=new Date(0);return c.setUTCFullYear(a,i-1,l),c.getUTCFullYear()!==a||c.getUTCMonth()!==i-1||c.getUTCDate()!==l?null:`${r}-${n}-${o}`},nr=e=>Et(e)===e;var ke=e=>e==null?null:e instanceof Date?hl(e):Et(e);var ao=require("zod"),st=e=>Number.isSafeInteger(e)&&e>0,Ae=ao.z.number().int().positive().max(Number.MAX_SAFE_INTEGER);var io="ids-columns";var mt=(e,t,r)=>{let n=[],o=[],a=[],i=[],l=[],c=new Map;for(let s=t;s<r;s++){let{reportHubId:m,businessDate:u,sourceType:f}=e[s];n.push(m),o.length>0&&o[o.length-1]===u?a[a.length-1]+=1:(o.push(u),a.push(1));let h=f===void 0?null:f,R=c.get(h);R===void 0&&(R=i.length,i.push(h),c.set(h,R)),l.push(R)}return{ids:n,dates:o,counts:a,sourceTypes:i,sources:l}},or=e=>{let t=2166136261,r=-624069552;for(let n of e){let o=n.reportHubId;t^=o&255,t=Math.imul(t,16777619),t^=o>>>8&255,t=Math.imul(t,16777619),t^=o>>>16&255,t=Math.imul(t,16777619),t^=o>>>24&255,t=Math.imul(t,16777619),r^=o>>>24&255,r=Math.imul(r,16777619),r^=o>>>16&255,r=Math.imul(r,16777619),r^=o>>>8&255,r=Math.imul(r,16777619),r^=o&255,r=Math.imul(r,16777619);let a=n.businessDate;if(a===null)t^=1,t=Math.imul(t,16777619),r^=1,r=Math.imul(r,16777619);else for(let i=0;i<a.length;i++){let l=a.charCodeAt(i);t^=l&255,t=Math.imul(t,16777619),r^=l&255,r=Math.imul(r,16777619)}}return t^=e.length,t=Math.imul(t,16777619),r^=e.length,r=Math.imul(r,16777619),((t>>>0).toString(16).padStart(8,"0")+(r>>>0).toString(16).padStart(8,"0")).replace(/^0+(?=.)/,"")},so=(e,t,r,n)=>e!==r?e===null?1:r===null||e>r?-1:1:n-t,fl=(e,t,r,n)=>so(e,t,r,n)<0,Jr=(e,t)=>so(e.businessDate,e.reportHubId,t.businessDate,t.reportHubId),lo=e=>{for(let t=1;t<e.length;t++)if(!fl(e[t-1].businessDate,e[t-1].reportHubId,e[t].businessDate,e[t].reportHubId))return!1;return!0},co=(e,t)=>{let r=e.findIndex(n=>Jr({businessDate:n.businessDate,reportHubId:n.reportHubId},t)>0);return r===-1?e.length:r};var se=Object.freeze({businessDate:"business-date",idsStream:io,report:"report",search:"search",reports:"reports",searchMarks:"search-marks",searchFacets:"search-facets",action:"action"}),ge=Object.freeze({businessDate:"businessDate",reportHubId:"reportHubId",searchQuery:"q",searchCombine:"combine",searchAuthor:"author",searchSourceType:"sourceType",searchCustomer:"customer",reportIds:"ids",forceRefresh:"forceRefresh",cursorReportHubId:"cursor_report_hub_id",cursorBusinessDate:"cursor_business_date",cursorSnapshot:"cursor_snapshot"});var uo=(e,t,r=console)=>{let n=o=>typeof o=="string"?[`${t} ${o}`]:[t,o];return{debug:(o,...a)=>{e<=0&&r.debug(...n(o),...a)},info:(o,...a)=>{e<=1&&r.info(...n(o),...a)},warn:(o,...a)=>{e<=2&&r.warn(...n(o),...a)},error:(o,...a)=>{e<=3&&r.error(...n(o),...a)}}},Mp=Object.freeze(["API","Action","Attachment","ExternalSource","Isolation","Reads","Refresh","Search","SSE","SseReader","Server","Service","Streams","Visibility","ActionProvider","DetailLoader","IdsStream","SseConnection"]),po=e=>`[DailyReport${e}]`,be=(e,t,r)=>e===void 0?uo(t,po(r)):uo(0,po(r),e);var Rl="legacy-",Qr=e=>`${Rl}${e}`;var Sl=/^[1-9][0-9]*$/,gl=/^(?:0|[1-9][0-9]*)$/,Ue=e=>{if(e===null||!Sl.test(e))return null;let t=Number(e);return st(t)?t:null},Xr=e=>{if(e===null||!gl.test(e))return null;let t=Number(e);return Number.isSafeInteger(t)?t:null},Zr=e=>e==="true"?!0:e==="false"?!1:null,Ot=e=>e===null?!1:Zr(e);var mo=Object.freeze(["subject","content","author","employeeName","updatedBy","category","creationCategory","customerName"]),Je=Object.freeze({field:e=>e,interviewer:(e,t)=>`interviewer:${e}:${t}`,attachment:e=>`attachment:${e}`,comment:(e,t)=>`comment:${e}:${t}`});var bl=16777619,en=2166136261,tn=(e,t,r,n)=>{let o=e;for(let a=r;a<n;a++)o^=t.charCodeAt(a),o=Math.imul(o,bl);return o>>>0},yo=e=>tn(en,e,0,e.length),Dl=String.fromCodePoint(3),Al=String.fromCodePoint(2),Tl=String.fromCodePoint(1),ar=e=>yo(e.map(t=>t.map(r=>r.map(n=>`${n.tier}${n.text}`).join(Dl)).join(Al)).join(Tl));var ho=e=>e==="intersection"||e==="union",Ie=Object.freeze({maxQueryLength:500,maxSets:16,maxWordsPerSet:16,maxWords:32,maxWordLength:100,maxDetailIds:100}),rn=2,ir=2,yt=Object.freeze({word:0,reading:1});var nn=(e,t)=>({ids:e.map(r=>r.reportHubId),businessDates:e.map(r=>r.businessDate),sourceTypes:e.map(r=>r.sourceType),words:t});var Op=2*(1+rn);var Ml=require("zod");var sr=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}|-[1-9][0-9]{0,15})$/;var P=require("zod");var fo=15e3,Ro="lastEventId",El=/^\d{1,15}-\d{1,15}$/,So=e=>El.test(e),wl=P.z.object({name:P.z.string().nullish(),affiliation:P.z.string().nullish()}),Il=P.z.object({name:P.z.string().nullish(),text:P.z.string().nullish(),color:P.z.string().nullish()}),_l=P.z.object({id:Ae,name:P.z.string().nullish(),color:P.z.string().nullish()}),go=P.z.object({id:Ae,userId:P.z.string().nullish(),userName:P.z.string().nullish(),content:P.z.string().nullish(),createdAt:P.z.string().nullish(),isMine:P.z.boolean()}),xl=P.z.object({id:P.z.string(),fileName:P.z.string(),fileType:P.z.string().nullable(),fileSize:P.z.number().nullable(),createdAt:P.z.string().nullable(),state:P.z.enum(["present","absent","unknown"]),hasThumbnail:P.z.boolean().default(!1)}),on=P.z.object({reportHubId:Ae,date:P.z.string().nullish(),createdAt:P.z.string().nullish(),author:P.z.string().nullish(),userId:P.z.string().nullish(),sourceType:P.z.string().nullish(),employeeName:P.z.string().nullish(),updatedBy:P.z.string().nullish(),updatedAt:P.z.string().nullish(),category:P.z.string().nullish(),creationCategory:P.z.string().nullish(),visitTimeFrom:P.z.string().nullish(),visitTimeTo:P.z.string().nullish(),customerName:P.z.string().nullish(),interviewers:P.z.array(wl),subject:P.z.string().nullish(),content:P.z.string().nullish(),externalComments:P.z.array(Il),isRead:P.z.boolean(),isStarred:P.z.boolean(),isDraft:P.z.boolean(),labels:P.z.array(_l),postedComments:P.z.array(go),attachments:P.z.array(xl).default([])}),ht=P.z.string().regex(sr),Cl=P.z.object({type:P.z.literal("connected")}),lr=P.z.object({type:P.z.literal("status-update"),reportHubId:Ae,statusType:P.z.enum(["star","read"]),value:P.z.boolean(),clientTempId:ht,recipientRawUserId:Ae.optional()}),an=P.z.string().optional(),sn=P.z.object({type:P.z.literal("comment-add"),reportHubId:Ae,comment:go,clientTempId:ht,recipientRawUserId:Ae.optional(),sourceType:an}),ln=P.z.object({type:P.z.literal("comment-delete"),reportHubId:Ae,commentId:Ae,clientTempId:ht,recipientRawUserId:Ae.optional(),sourceType:an}),cn=P.z.object({type:P.z.literal("report-create"),reportHubId:Ae,report:on,clientTempId:ht,recipientRawUserId:Ae.optional()}),un=P.z.object({type:P.z.literal("report-update"),reportHubId:Ae,report:on,clientTempId:ht,recipientRawUserId:Ae.optional()}),dn=P.z.object({type:P.z.literal("report-publish"),reportHubId:Ae,report:on,clientTempId:ht,recipientRawUserId:Ae.optional()}),pn=P.z.object({type:P.z.literal("report-delete"),reportHubId:Ae,clientTempId:ht,sourceType:an}),bo=P.z.discriminatedUnion("type",[Cl,lr,sn,ln,cn,un,dn,pn]);var ve=Object.freeze({intent:"intent",clientTempId:"clientTempId",businessDate:"businessDate",operationTimestamp:"operationTimestamp",reportHubId:"reportHubId",title:"title",content:"content",isStarred:"isStarred",isRead:"isRead",commentId:"commentId"});var cr=Math.max(1,Math.floor(10.556701030927835));var $e=(e,t)=>{let r=setTimeout(e,t);return r.unref?.(),r};var Oe=e=>{let{windowMs:t,tallies:r,writeSuppressed:n}=e,o=new Map,a=i=>{let l={since:new Date().toISOString(),count:0,tallies:Object.fromEntries(r.map(s=>[s,0]))};o.set(i,l),$e(()=>{o.delete(i),l.count>0&&n(i,l)},t)};return{record:(i,l,c)=>{let s=o.get(i);if(s!==void 0){s.count+=1,s.tallies[l]+=1;return}c(),a(i)}}};var Qe=Object.freeze({maxValuesPerFacet:16,maxValueLength:200,maxTotalValueLength:300});var zp=Object.freeze({authors:Object.freeze([]),sourceTypes:Object.freeze([]),customers:Object.freeze([])}),Pl=/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g,mn=e=>{let t=e.trim();return t.length===0?null:t.replace(Pl,"\uFFFD")},Ll=e=>{let t=mn(e);return t===null?"filter-blank-value":t!==e?"filter-value-not-canonical":e.length>Qe.maxValueLength?"filter-value-too-long":null},Nl=e=>{if(e.length>Qe.maxValuesPerFacet)return"filter-too-many-values";let t=new Set;for(let r of e){let n=Ll(r);if(n!==null)return n;if(t.has(r))return"filter-duplicate-value";t.add(r)}return null},kl=e=>{let t=0;for(let r of e.authors)t+=r.length;for(let r of e.customers)t+=r.length;return t},Do=e=>{for(let t of[e.authors,e.sourceTypes,e.customers]){let r=Nl(t);if(r!==null)return r}return kl(e)>Qe.maxTotalValueLength?"filters-too-long":null};var Ao=e=>e.trim().length===0;var ur=e=>e!==null&&sr.test(e)?e:null,yn=e=>ho(e)?e:null,hn=e=>{if(e===null)return null;let t=e.split(",");if(t.length>Ie.maxDetailIds)return null;let r=[];for(let n of t){let o=Ue(n);if(o===null||r.includes(o))return null;r.push(o)}return r},To=e=>{let[t,...r]=e;return t===void 0?null:[t,...r]},Eo=(e,t)=>{let r={authors:e.getAll(ge.searchAuthor),sourceTypes:e.getAll(ge.searchSourceType),customers:e.getAll(ge.searchCustomer)},n=Do(r);if(n!==null)return{ok:!1,reason:n};let o=new Set(t.map(i=>i.toLowerCase())),a=new Set;for(let i of r.sourceTypes){let l=i.toLowerCase();if(!o.has(l))return{ok:!1,reason:"filter-unknown-source-type"};if(a.has(l))return{ok:!1,reason:"filter-duplicate-value"};a.add(l)}return{ok:!0,filters:{sourceTypes:a.size===0?null:a,authors:To(r.authors),customers:To(r.customers)}}},wo=e=>{let t=new URLSearchParams;for(let[r,n]of e){if(typeof n!="string")return null;t.append(r,n)}return t};var _o=Object.freeze({status:400,error:"Invalid form"}),xo=e=>({status:413,error:"Form too large",measuredBy:e}),vl=(e,t,r)=>{let n=0;return e.pipeThrough(new TransformStream({transform(o,a){if(n+=o.byteLength,n>t){r(),a.error(new Error(`action form body exceeds ${t} bytes`));return}a.enqueue(o)}}))},Ol=async e=>{let t=Xr(e.headers.get("Content-Length"));if(t!==null&&t>1048576)return{refusal:xo("declared")};let r=!1,n=e.body===null?null:vl(e.body,1048576,()=>{r=!0}),o=new Headers,a=e.headers.get("Content-Type");a!==null&&o.set("Content-Type",a);let i;try{i=await new Response(n,{headers:o}).formData()}catch{return{refusal:r?xo("counted"):_o}}let l=wo(i);return l===null?{refusal:_o}:{fields:l}},Co=(e,t)=>(r,n)=>{let o=r.get(t);if(o===null)return{error:`${t} required`};let a=Zr(o);return a===null?{error:`Invalid ${t}`}:{command:{...n,intent:e,value:a}}},Po=Object.freeze({update:(e,t,r)=>{let n=e.get(ve.title),o=e.get(ve.content);if(n!==null&&n.length>r.titleMaxLength)return{error:"Invalid title"};let a={};return n!==null&&(a.title=n),o!==null&&(a.content=o),{command:{...t,intent:"update",changes:a}}},publish:(e,t)=>({command:{...t,intent:"publish"}}),delete:(e,t)=>({command:{...t,intent:"delete"}}),toggleStar:Co("toggleStar",ve.isStarred),toggleRead:Co("toggleRead",ve.isRead),addComment:(e,t)=>{let r=e.get(ve.content);return r?{command:{...t,intent:"addComment",content:r}}:{error:"Content required"}},deleteComment:(e,t)=>{let r=Ue(e.get(ve.commentId));return r===null?{error:"Invalid commentId"}:{command:{...t,intent:"deleteComment",commentId:r}}}}),Fl=e=>Object.hasOwn(Po,e),Hl=(e,t)=>{let r=e.get(ve.intent),n=e.get(ve.businessDate),o=n===null?null:Et(n);if(n!==null&&o===null)return{error:"Invalid businessDate"};let a=e.get(ve.operationTimestamp),i=Xr(a);if(a!==null&&i===null)return{error:"Invalid operationTimestamp"};if(r==="clearCache")return{command:{intent:r}};let l=e.get(ve.clientTempId);if(!l)return{error:"clientTempId required"};let c=ur(l);if(c===null)return{error:"Invalid clientTempId"};if(r==="create")return o===null?{error:"businessDate required"}:{command:{intent:r,clientTempId:c,businessDate:o,operationTimestamp:i}};let s=Ue(e.get(ve.reportHubId));return s===null?{error:"Invalid reportHubId"}:r===null||!Fl(r)?{error:"Invalid intent"}:Po[r](e,{clientTempId:c,businessDate:o,operationTimestamp:i,reportHubId:s},t)},Lo=async(e,t)=>{let r=await Ol(e);if("refusal"in r)return r;let n=Hl(r.fields,t);return"error"in n?{refusal:{status:400,error:n.error}}:n},Ul=6e4,$l="form_too_large",Mo=["declared","counted"],No=e=>{let t=Oe({windowMs:Ul,tallies:Mo,writeSuppressed:(r,{count:n,since:o,tallies:a})=>{e.warn(`form_too_large_suppressed count=${n} since=${o} measured=${Mo.map(i=>`${i}:${a[i]}`).join(",")}`)}});return r=>{let n=()=>{e.warn(`413 action reason=form_too_large measured=${r} limit=${1048576}`)};t.record($l,r,n)}};var ft=Object.freeze({[se.businessDate]:{body:"json",cache:"etag",admission:["refresh-bucket","cache","miss-gate"]},[se.idsStream]:{body:"stream",admission:["refresh-bucket","stream-slots","cache","miss-gate"]},[se.report]:{body:"json",cache:"etag",admission:["refresh-bucket","cache","miss-gate"]},[se.search]:{body:"json",cache:"etag",admission:["search-limiter"]},[se.reports]:{body:"json",cache:"etag",admission:["search-limiter"]},[se.searchMarks]:{body:"json",cache:"no-store",admission:["search-limiter"]},[se.searchFacets]:{body:"json",cache:"etag",admission:["search-limiter"]}}),ko=Object.freeze({json:Object.freeze(["GET"]),stream:Object.freeze(["GET","HEAD"])}),fn=e=>e!==void 0&&Object.hasOwn(ft,e);var Rn=Object.freeze({tile:Object.freeze({maxWidth:480,maxHeight:320})}),vo=e=>Object.hasOwn(Rn,e);var Bl="download",Vl="thumbnail",ql="1";var Sn=e=>{let t=e.getAll(Vl),r=e.getAll(Bl);if(t.length>0&&r.length>0)return{kind:"invalid",reason:"conflict"};if(t.length>0){let[n]=t;return t.length===1&&vo(n)?{kind:"thumbnail",variant:n}:{kind:"invalid",reason:"thumbnail_variant"}}return r.length>0?r.length===1&&r[0]===ql?{kind:"download"}:{kind:"invalid",reason:"download_value"}:{kind:"inline"}};var Oo=require("crypto"),gn=e=>`"${(0,Oo.createHash)("sha256").update(e).digest("hex")}"`,Fo=e=>gn(JSON.stringify(e));var Ve=Object.freeze({"X-Content-Type-Options":"nosniff","X-Frame-Options":"DENY","Content-Security-Policy":"default-src 'none'"}),bn=(e,t)=>{if(e===null)return!1;for(let r of e.split(",")){let n=r.trim();if((n.startsWith("W/")?n.slice(2):n)===t)return!0}return!1},Ho=(e,t,r,n=200)=>{let o=JSON.stringify(r),a=gn(o),i=new Headers({"Content-Type":"application/json","Cache-Control":"private, max-age=0, must-revalidate",ETag:a,...Ve});return t&&i.append("Set-Cookie",t),e.method==="GET"&&n===200&&bn(e.headers.get("If-None-Match"),a)?new Response(null,{status:304,headers:i}):new Response(o,{status:n,headers:i})},Dn=(e,t,r)=>{let n=new Headers({...t===null?{}:{"Content-Type":"application/json"},"Cache-Control":"no-store",...Ve});return e&&n.append("Set-Cookie",e),new Response(t===null?null:JSON.stringify(t),{status:r,headers:n})},An=e=>(t,r,n,o)=>{if(o!==200)return Dn(r,n,o);if(e===null||n===null)throw new Error(`[daily-report] API route: a 200 JSON answer needs an answer of a JSON 200 and a body; got ${e===null?"a responder without one":"an answer"} and ${n===null?"no body":"a body"}`);return e(t,r,n)},Yl=5e3/1e3,jl=new Map([[503,Yl]]),xe=e=>{let t=jl.get(e);return t===void 0?{}:{"Retry-After":String(t)}};var En="Cross-site request rejected",Wl="Not Found",zl=new Set(["same-origin","none"]),Gl=new Set(["GET","HEAD","OPTIONS"]),Uo=["api","action","sse","attachment"],$o=(e,t)=>new Response(JSON.stringify({error:{message:t}}),{status:e,headers:{"Content-Type":"application/json","Cache-Control":"no-store",...Ve}}),Kl=()=>$o(403,En),dr=()=>$o(404,Wl),Ft=Object.freeze({navigable:()=>!1,frameworkDataRefusal:()=>null,crossSiteRejection:Kl}),Bo=e=>new URL(e.url).pathname.endsWith(".data"),Jl=e=>{let t=e.headers.get("Origin");return t===null?!0:URL.canParse(t)&&new URL(t).host===new URL(e.url).host},Vo=(e,t)=>{let r=e.headers.get("Sec-Fetch-Site");return r===null?!(Gl.has(e.method)||Jl(e)):zl.has(r)?!1:!(e.method==="GET"&&e.headers.get("Sec-Fetch-Mode")==="navigate"&&e.headers.get("Sec-Fetch-Dest")==="document"&&t.navigable(e))},Ql=6e4,Xl="refusals",Zl=32,ec=/^[a-z-]+$/,Tn=e=>{if(e===null)return"-";let t=e.slice(0,Zl);return ec.test(t)&&t===e?e:JSON.stringify(t)},qo=e=>{let t=Oe({windowMs:Ql,tallies:Uo,writeSuppressed:(r,{count:n,since:o,tallies:a})=>{e.warn(`cross_site_rejected_suppressed count=${n} since=${o} routes=${Uo.map(i=>`${i}:${a[i]}`).join(",")}`)}});return(r,n)=>{let o=()=>{let{headers:a}=n;e.warn(`cross_site_rejected route=${r} site=${Tn(a.get("Sec-Fetch-Site"))} mode=${Tn(a.get("Sec-Fetch-Mode"))} dest=${Tn(a.get("Sec-Fetch-Dest"))} method=${n.method}`)};t.record(Xl,r,o)}};var Yo=(e,t)=>(r,n)=>{let o=n?"markAttachmentPresent":"markAttachmentMissing";e[o](r).catch(a=>{t.error(`${o} failed attachment=${r} message=${a instanceof Error?a.message:"unknown"}`)})};var tc="same-origin",rc="SAMEORIGIN",wt=Object.freeze({"X-Content-Type-Options":"nosniff","Cross-Origin-Resource-Policy":tc,"X-Frame-Options":rc}),pr=(e,t,r)=>{let n=new Headers({"Content-Type":"application/json","Cache-Control":"no-store",...r.extraHeaders,...wt});return r.cookie&&n.append("Set-Cookie",r.cookie),new Response(JSON.stringify({error:{message:t}}),{status:e,headers:n})},jo=new Set(["image/png","image/jpeg","image/gif","image/webp","application/pdf","text/plain"]),nc=/^[\x20-\x7E]+$/,oc=/^[\w.+-]+\/[\w.+-]+/,wn=e=>e&&nc.test(e)&&oc.test(e)?e:null,ac=/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g,Wo=e=>encodeURIComponent(e.replace(ac,"\uFFFD")).replace(/['()*]/g,t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`),zo=e=>e.replace(/[^\x20-\x7E]/g,"_").replace(/["\\]/g,"_"),mr={404:"Attachment not found",413:"Attachment too large",502:"Attachment storage unavailable",503:"Attachment storage busy",504:"Attachment storage timed out"},Go={not_found:404,denied:404,invalid_path:404,too_large:413,unavailable:502,busy:503,deadline:504},yr=e=>typeof e=="string"&&Object.hasOwn(Go,e),hr=e=>Go[e],Xe="Attachment request failed";var qe=e=>{let t=re("limit",e.limit,1),r=re("maxHeldPerOwner",e.maxHeldPerOwner,1),n=e.queue===null?null:{max:re("queue.max",e.queue.max,0),maxPerOwner:re("queue.maxPerOwner",e.queue.maxPerOwner,0),maxWaitMs:re("queue.maxWaitMs",e.queue.maxWaitMs,1)},o=0,a=[],i=new Map,l=new Map,c=(S,E)=>S.get(E)??0,s=(S,E,M)=>{let U=c(S,E)+M;U<=0?S.delete(E):S.set(E,U)},m=S=>c(l,S)<r,u=S=>o<t&&m(S),f=S=>(o+=1,s(l,S,1),D(S)),h=()=>{let S=-1,E=r;for(let[M,U]of a.entries()){let I=c(l,U.owner);if(I<E&&(S=M,E=I,I===0))break}return S},R=()=>{for(;o<t;){let S=h();if(S<0)return;let[E]=a.splice(S,1);s(i,E.owner,-1),E.grant(f(E.owner))}},D=S=>{let E=!1;return()=>{E||(E=!0,o-=1,s(l,S,-1),R())}};return{canAcquire:u,acquire:(S,E)=>{if(E.aborted)return Promise.resolve(null);if(u(S))return Promise.resolve(f(S));if(n===null||a.length>=n.max||c(i,S)>=n.maxPerOwner)return Promise.resolve(null);let{maxWaitMs:M}=n,U=I=>{let T=()=>{let de=a.indexOf($);de<0||(a.splice(de,1),s(i,S,-1),L(),I(null))},V=$e(T,M),L=()=>{clearTimeout(V),E.removeEventListener("abort",T)},$={owner:S,grant:de=>{L(),I(de)}};a.push($),s(i,S,1),E.addEventListener("abort",T,{once:!0})};return new Promise(U)}}};var ic=1024,In="Too many requests",sc=(e,t)=>{re("limitPerWindow",e,1),re("windowMs",t,1);let r=new Map,n=(a,i)=>{i<=a.lastRefillMs||(a.tokens=Math.min(e,a.tokens+(i-a.lastRefillMs)*e/t),a.lastRefillMs=i)},o=(a,i)=>{let l=r.get(a);l&&r.delete(a);let c=l??{tokens:e,lastRefillMs:i};n(c,i),r.set(a,c);for(let s of r.keys()){if(r.size<=ic)break;r.delete(s)}return c};return{consume:(a,i)=>{let l=o(a,i);return l.tokens<1?!1:(l.tokens-=1,!0)},refund:(a,i,l)=>{let c=r.get(a);c&&(n(c,i),c.tokens=Math.min(e,c.tokens+l))}}},Ze=e=>{let{reason:t,windowMs:r,logger:n,windowFields:o}=e;if(re("windowMs",r,1e3)%1e3!==0)throw oe("windowMs","a whole number of seconds (a multiple of 1000)",r);let a=sc(e.limitPerWindow,r),i=Object.freeze({status:429,message:In,headers:Object.freeze({"Retry-After":String(r/1e3)})}),l=Oe({windowMs:r,tallies:[t],writeSuppressed:(c,{count:s,since:m})=>{n.warn(`${t}_suppressed count=${s} since=${m} ${o(c)}`)}});return{spend:(c,s)=>a.consume(c,ue())?null:(l.record(c,t,()=>n.warn(`429 ${s} reason=${t}`)),i),refund:(c,s)=>{a.refund(c,ue(),s)}}};var cc=256*1024,Ko=6e4,uc=e=>Math.ceil(e/2),dc=new Uint8Array(new ArrayBuffer(0)),pc=(e,t)=>{let r=e,n=0,o,a=()=>{clearTimeout(o),r=dc,t()},i=l=>{clearTimeout(o),o=$e(()=>{l.error(new Error(`attachment body idle for ${Ko} ms`)),a()},Ko)};return new ReadableStream({start(l){i(l)},pull(l){let c=Math.min(n+cc,r.byteLength);if(c>n&&l.enqueue(r.slice(n,c)),n=c,n>=r.byteLength){l.close(),a();return}i(l)},cancel(){a()}},{highWaterMark:0})},Jo=e=>{let{service:t,encodeUserId:r,resolveViewerScope:n,logger:o,recordObjectState:a}=e,i=Ze({reason:"rate_limit",limitPerWindow:e.rateLimitPerMinute,windowMs:6e4,logger:o,windowFields:c=>`viewer=${c}`}),l=qe({limit:e.concurrency,maxHeldPerOwner:uc(e.concurrency),queue:null});return async c=>{let{request:s,delivery:m,attachmentId:u,internalUserId:f,readAttachment:h,cookie:R,fail:D}=c,S=e.maxBytes,E=i.spend(f,`attachment=${u} viewer=${f}`);if(E)return D(E.status,E.message,E.headers);let M=await n(s),U=await t.getAttachmentForUser(M,u,f);if(!U)return o.warn(`404 attachment=${u} viewer=${f} reason=not_visible`),D(404,"Attachment not found");if(U.fileSize!=null&&U.fileSize>S)return o.warn(`413 attachment=${u} viewer=${f} reason=db_size`),D(413,"Attachment too large");let I=wn(U.fileType),T=`filename="${zo(U.fileName)}"; filename*=UTF-8''${Wo(U.fileName)}`,V=await l.acquire(f,s.signal);if(!V)return s.signal.aborted?(o.info(`503 attachment=${u} viewer=${f} reason=aborted`),D(503,"Attachment request aborted")):(o.warn(`503 attachment=${u} viewer=${f} reason=concurrency`),D(503,"Too many concurrent downloads",xe(503)));let L=!1;try{let $=await h(U.filePath,{maxBytes:S,head:s.method==="HEAD",principal:r(f),signal:s.signal});if(s.signal.aborted)return o.info(`503 attachment=${u} viewer=${f} reason=aborted`),D(503,"Attachment request aborted");if(!$.ok){if(!yr($.reason))return o.error(`500 attachment=${u} viewer=${f} reason=port_contract code=failure_reason`),D(500,Xe);let me=hr($.reason);return $.reason==="not_found"&&a(u,!1),o.warn(`${me} attachment=${u} viewer=${f} reason=${$.reason} code=${$.code??"-"}`),D(me,mr[me],xe(me))}if($.bytes.byteLength>S)return o.error(`500 attachment=${u} viewer=${f} reason=port_contract code=over_max_bytes`),D(500,Xe);let de=s.method==="HEAD";if(de&&$.size!==void 0&&$.size>S)return o.error(`500 attachment=${u} viewer=${f} reason=port_contract code=over_max_bytes`),D(500,Xe);if(!de&&$.size!==void 0&&$.size!==$.bytes.byteLength)return o.error(`500 attachment=${u} viewer=${f} reason=port_contract code=size_mismatch`),D(500,Xe);let pe=I??wn($.contentType),De=pe!==null&&jo.has(pe),K=De?pe:"application/octet-stream",le=De&&m.kind!=="download"?"inline":"attachment",ne=de?$.size:$.bytes.byteLength,ce=new Headers({"Content-Type":K,"Content-Disposition":`${le}; ${T}`,"Cache-Control":"private, no-store","Content-Security-Policy":"default-src 'none'; sandbox",...wt});return ne!==void 0&&ce.set("Content-Length",String(ne)),R&&ce.append("Set-Cookie",R),a(u,!0),o.info(`200 attachment=${u} viewer=${f} type=${K} disposition=${le} bytes=${ne??"-"}`),de?new Response(null,{status:200,headers:ce}):(L=!0,new Response(pc($.bytes,V),{status:200,headers:ce}))}finally{L||V()}}};var Ce=Object.freeze({queueWaitMs:3e4,readMs:3e4,renderMs:1e4,transferMarginMs:5e3}),km=Ce.queueWaitMs+Ce.readMs+Ce.renderMs+Ce.transferMarginMs;var Zo=require("buffer"),ea=new Set([194,198,202,206]),mc=new Set([192,193,194,195]),ta=216,yc=217,ra=218,hc=4,fc=64,Rc=2,Qo=8,Xo=28,lt=12,_n=8,Sc=20,na=lt+_n+10,gc=2,et=(e,t)=>e[t]<<8|e[t+1],It=(e,t,r)=>{let n=0;for(let o=r-1;o>=0;o-=1)n=n*256+e[t+o];return n},Ye=(e,t,r)=>{if(e.byteLength<t+r.length)return!1;for(let n=0;n<r.length;n+=1)if(e[t+n]!==r.charCodeAt(n))return!1;return!0},oa=e=>e>=192&&e<=207&&e!==196&&e!==200&&e!==204,aa=e=>({marker:0,body:0,length:0,end:0,stepsLeft:e}),ia=e=>(e.stepsLeft-=1,e.stepsLeft>=0),sa=e=>e[0]===255&&e[1]===ta,la=(e,t,r)=>{let n=t;for(;;){if(n>=e.byteLength||e[n]!==255)return null;do{if(!ia(r))return null;n+=1}while(n<e.byteLength&&e[n]===255);if(n>=e.byteLength)return null;let o=e[n];if(n+=1,o===yc)return"eoi";if(o===0||o===ta)return null;if(o===1||o>=208&&o<=215)continue;if(n+2>e.byteLength)return null;let a=et(e,n),i=n+a;return a<2||i>e.byteLength?null:(r.marker=o,r.body=n+2,r.length=a,r.end=i,"segment")}},bc=(e,t,r)=>{let n=e.byteLength,o=t;for(;;){let a=e.indexOf(255,o);if(a<0)return n;for(;;){if(!ia(r))return null;if(a+1>=n)return n;let i=e[a+1];if(i===255)a+=1;else if(i===0||i>=208&&i<=215){if(a+=2,a>=n||e[a]!==255)break}else return a}o=a}},ca=(e,{marker:t,body:r,length:n})=>{if(n<8)return null;let o=et(e,r+1),a=et(e,r+3),i=e[r+5];if(a===0||o===0||i===0||n!==8+3*i)return null;let l=[];for(let c=0;c<i;c+=1){let s=e[r+7+3*c],m=s>>4,u=s&15;if(m<1||m>4||u<1||u>4)return null;l.push({id:e[r+6+3*c],horizontal:m,vertical:u})}return{marker:t,width:a,height:o,components:l}},ua=(e,{body:t,length:r})=>{if(r<3)return null;let n=e[t];return n<1||n>hc||r!==6+2*n?null:Array.from({length:n},(o,a)=>e[t+1+2*a])},da=(e,t)=>({width:e.width,height:e.height,components:e.components.map(({horizontal:r,vertical:n})=>({horizontal:r,vertical:n})),multiScan:ea.has(e.marker)||t<e.components.length}),xn=e=>{if(!sa(e))return null;let t=aa(e.byteLength),r=null;for(let n=2;;){if(la(e,n,t)!=="segment")return null;if(oa(t.marker)){if(r!==null||(r=ca(e,t),r===null))return null}else if(t.marker===ra){if(r===null)return null;let o=ua(e,t);return o===null?null:da(r,o.length)}n=t.end}},pa=e=>{let t=Math.max(...e.components.map(n=>n.horizontal)),r=Math.max(...e.components.map(n=>n.vertical));return e.components.map(({horizontal:n,vertical:o})=>{let a=Math.ceil(e.width*n/(t*Qo)),i=Math.ceil(e.height*o/(r*Qo));return Math.ceil(a/n)*n*Math.ceil(i/o)*o})},ma=e=>e.multiScan?pa(e).reduce((r,n)=>r+n,0)*fc*Rc:0,Dc=896,ya=(e,{maxBlockVisits:t,maxWalkSteps:r})=>{if(!sa(e))return null;let n=Zo.Buffer.from(e.buffer,e.byteOffset,e.byteLength),o=aa(r),a=null,i=null,l=new Map,c=0,s=0,m=0;for(let u=2;;){let f=la(e,u,o);if(f===null)return null;if(f==="eoi")return i===null?null:{header:i,blockVisits:s};if(u=o.end,oa(o.marker)){if(a!==null||!mc.has(o.marker)||(a=ca(e,o),a===null))return null;let h=pa(a);l=new Map;for(let[R,D]of a.components.entries()){let S=l.get(D.id);l.set(D.id,S===void 0?h[R]:Math.max(S,h[R]))}c=a.components.length*(ea.has(a.marker)?Dc:1)}else if(o.marker===ra){if(a===null||m===c)return null;let h=ua(e,o);if(h===null)return null;for(let D of h){let S=l.get(D);if(S===void 0)return null;s+=S}if(m+=1,i===null&&(i=da(a,h.length)),s>t||!i.multiScan)return{header:i,blockVisits:s};let R=bc(n,o.end,o);if(R===null)return null;u=R}}},ha=e=>{if(e.byteLength<24||et(e,8)!==0||et(e,10)!==13||!Ye(e,12,"IHDR"))return null;let t=et(e,16)*65536+et(e,18),r=et(e,20)*65536+et(e,22);return t===0||r===0||t>2147483647||r>2147483647?null:{width:t,height:r}},Ac=e=>{if(Ye(e,lt,"VP8 ")){if(e.byteLength<30||(e[20]&1)!==0||e[23]!==157||e[24]!==1||e[25]!==42)return null;let t=It(e,26,2)&16383,r=It(e,28,2)&16383;return t===0||r===0?null:{width:t,height:r}}if(Ye(e,lt,"VP8L")){if(e.byteLength<25||e[20]!==47)return null;let t=It(e,21,4);return{width:(t&16383)+1,height:Math.floor(t/16384)%16384+1}}return Ye(e,lt,"VP8X")?e.byteLength<na?null:{width:It(e,24,3)+1,height:It(e,27,3)+1}:null},fa=e=>{if(ha(e)===null||e.byteLength<=Xo)return null;switch(e[Xo]){case 0:return!1;case 1:return!0;default:return null}},Ra=(e,t)=>{if(Ye(e,lt,"VP8 "))return"lossy";if(Ye(e,lt,"VP8L"))return"lossless";if(!Ye(e,lt,"VP8X")||e.byteLength<na)return null;if((e[Sc]&gc)!==0)return"animated";let r=!1,n=t;for(let o=lt;o+_n<=e.byteLength;){if(n-=1,n<0)return null;if(Ye(e,o,"VP8L"))return"lossless";if(Ye(e,o,"VP8 "))return r?"lossy-alpha":"lossy";Ye(e,o,"ALPH")&&(r=!0);let a=It(e,o+4,4);o+=_n+a+a%2}return null},Sa={png:ha,jpeg:xn,webp:Ac};var fr=Object.freeze(["image/webp","image/jpeg","image/png"]),Rr=1024*1024;var Tc=new Set(["image/png","image/jpeg","image/gif","image/webp"]),Ec={"image/webp":"webp","image/jpeg":"jpeg","image/png":"png"},wc=new Set(fr),Ic=e=>typeof e=="string"&&wc.has(e),_c=256,Sr=(e,t)=>e.fileType===null||!Tc.has(e.fileType)?!1:e.fileSize===null||e.fileSize<=t,xc=[137,80,78,71,13,10,26,10],Cc=[255,216,255],Mc=[[71,73,70,56,55,97],[71,73,70,56,57,97]],Pc=[82,73,70,70],Lc=[87,69,66,80],Ht=(e,t,r)=>{if(e.byteLength<r+t.length)return!1;for(let[n,o]of t.entries())if(e[r+n]!==o)return!1;return!0},Cn=e=>{if(Ht(e,xc,0))return"png";if(Ht(e,Cc,0))return"jpeg";for(let t of Mc)if(Ht(e,t,0))return"gif";return Ht(e,Pc,0)&&Ht(e,Lc,8)?"webp":null},ga=e=>{let t=JSON.stringify([e.rendererId,e.box.maxWidth,e.box.maxHeight,e.attachmentId,e.filePath,e.fileType,e.fileSize]);return{key:t,etag:Fo([t])}},ba=(e,t)=>{if(!Ic(e.contentType))return"content_type";if(!(e.bytes instanceof Uint8Array))return"bytes";if(e.bytes.byteLength===0)return"empty";if(e.bytes.byteLength>Rr)return"too_large";let r=Ec[e.contentType];if(Cn(e.bytes)!==r)return"signature";let n=Sa[r](e.bytes);return n===null||n.width>t.maxWidth||n.height>t.maxHeight?"dimensions":null},Da=e=>{re("maxBytes",e.maxBytes,0),re("maxEntries",e.maxEntries,0);let t=new Map,r=0,n=o=>{let a=t.get(o);a&&(t.delete(o),r-=a.weight)};return{get:o=>{let a=t.get(o);if(a)return t.delete(o),t.set(o,a),a.entry},set:(o,a)=>{n(o);let i=(a.kind==="thumbnail"?a.bytes.byteLength:0)+_c;if(i>e.maxBytes||e.maxEntries===0)return;let l=a.kind==="thumbnail"?{kind:"thumbnail",bytes:a.bytes.slice(),contentType:a.contentType}:a;t.set(o,{entry:l,weight:i}),r+=i;for(let c of t.keys()){if(r<=e.maxBytes&&t.size<=e.maxEntries)break;n(c)}}}};var Mn=e=>{let{budgetMs:t,flightSignal:r,call:n,onOverrun:o,onStuck:a}=e,i=ue(),l=new AbortController,c=!1,s,m,u=()=>{a(ue()-i)},f=I=>{s=$e(()=>{c=!0,I({timedOut:!0}),m=$e(u,t),l.abort(new DOMException(`stage exceeded its ${t} ms budget`,"TimeoutError"))},t)},h=new Promise(f),R=AbortSignal.any([r,l.signal]),D=I=>{I(n(R))},S=new Promise(D),E=I=>(clearTimeout(s),clearTimeout(m),c&&o(ue()-i,I.kind==="error"?{error:I.error}:null),I),M=S.then(I=>E({kind:"value",value:I}),I=>E({kind:"error",error:I}));return{outcome:Promise.race([S.then(I=>({timedOut:!1,value:I})),h]),settled:M}};var ct={404:"Attachment not found",500:Xe,502:"Thumbnail unavailable",503:"Thumbnail temporarily unavailable",504:"Thumbnail storage timed out"},Aa=(e,t)=>{if(typeof e!="object"||e===null)return{failure:{kind:"failure",status:500,reason:"port_contract",code:"result"}};let r=e;if(!r.ok)return r.reason==="unsupported"?{entry:{kind:"unrenderable",reason:"unsupported"}}:r.reason==="failed"?{failure:{kind:"failure",status:502,reason:"render_failed"}}:{failure:{kind:"failure",status:500,reason:"port_contract",code:"failure_reason"}};let n=ba(r,t);return n!==null?{failure:{kind:"failure",status:500,reason:"port_contract",code:n}}:{entry:{kind:"thumbnail",bytes:r.bytes,contentType:r.contentType}}},Nc=e=>{let t=new AbortController,r=()=>{t.abort()},n=$e(r,Ce.queueWaitMs);return e.addEventListener("abort",r,{once:!0}),e.aborted&&r(),{signal:t.signal,end:()=>{clearTimeout(n),e.removeEventListener("abort",r)}}},Ta=()=>{},kc=(e,t)=>t.aborted?Promise.resolve():new Promise(r=>{let n=()=>{t.removeEventListener("abort",n),r()};t.addEventListener("abort",n,{once:!0}),e.then(n)}),Ea=e=>{let{gate:t,cache:r,maxBytes:n,encodeUserId:o,recordObjectState:a,logger:i}=e,l=new Map,c=(h,R)=>{let D=R.then(Ta,Ta);l.set(h,D);let S=()=>{l.get(h)===D&&l.delete(h)};D.then(S)},s=async(h,R)=>{let D=l.get(h.key);if(D===void 0)return t.acquire(h.owner,R);let S=Nc(R);try{if(await kc(D,S.signal),S.signal.aborted)return null;let E=r.get(h.key);return E!==void 0?{...E,identity:"verified"}:await t.acquire(h.owner,S.signal)}finally{S.end()}},m=(h,R)=>{if(h.fileSize===null)return R.kind==="exact"?"verified":"unrecorded";if(R.kind==="exact"?R.bytes===h.fileSize:h.fileSize>R.maxBytes)return"verified";let S=R.kind==="exact"?String(R.bytes):`>${R.maxBytes}`;return i.warn(`size_mismatch expected=${h.fileSize} got=${S} attachment=${h.attachmentId} viewer=${h.owner} variant=thumbnail`),"unverified"},u=(h,R)=>(D,S)=>{let E=S===null?"":` message=${S.error instanceof Error?S.error.message:"unknown"}`;i.warn(`${h}_overrun ms=${D} attachment=${R.attachmentId} viewer=${R.owner} variant=thumbnail${E}`)},f=(h,R)=>D=>{i.warn(`${h}_stuck ms=${D} attachment=${R.attachmentId} viewer=${R.owner} variant=thumbnail`)};return async(h,R)=>{let D=await s(h,R);if(D===null)return{kind:"failure",status:503,reason:R.aborted?"aborted":"queue"};if(typeof D!="function")return D;let S=D,E=null;try{if(R.aborted)return{kind:"failure",status:503,reason:"aborted"};let M=r.get(h.key);if(M!==void 0)return{...M,identity:"verified"};let U=Mn({budgetMs:Ce.readMs,flightSignal:R,call:me=>h.readAttachment(h.filePath,{maxBytes:n,head:!1,principal:o(h.owner),signal:me}),onOverrun:u("read",h),onStuck:f("read",h)}),I=await U.outcome;if(I.timedOut)return E=U.settled,R.aborted?{kind:"failure",status:503,reason:"aborted"}:{kind:"failure",status:504,reason:"read_timeout"};if(R.aborted)return{kind:"failure",status:503,reason:"aborted"};let T=I.value;if(!T.ok&&T.reason!=="too_large")return yr(T.reason)?(T.reason==="not_found"&&a(h.attachmentId,!1),{kind:"failure",status:hr(T.reason),reason:T.reason,code:T.code}):{kind:"failure",status:500,reason:"port_contract",code:"failure_reason"};if(T.ok&&T.bytes.byteLength>n)return{kind:"failure",status:500,reason:"port_contract",code:"over_max_bytes"};let V=m(h,T.ok?{kind:"exact",bytes:T.bytes.byteLength}:{kind:"over",maxBytes:n}),L=me=>{V==="verified"&&r.set(h.key,me)},$=me=>(L(me),{...me,identity:V});if(!T.ok)return $({kind:"unrenderable",reason:"too_large"});let de=Cn(T.bytes);if(de===null)return $({kind:"unrenderable",reason:"signature"});let pe=Mn({budgetMs:Ce.renderMs,flightSignal:R,call:me=>h.renderer.render(T.bytes,{format:de,maxWidth:h.box.maxWidth,maxHeight:h.box.maxHeight,signal:me}),onOverrun:u("render",h),onStuck:f("render",h)}),De=me=>{if(me.kind==="error")return;let Re=Aa(me.value,h.box);"entry"in Re&&L(Re.entry)},K=null,le=()=>(K===null&&(K=pe.settled.then(De),c(h.key,K)),K);R.addEventListener("abort",le,{once:!0});let ne=await pe.outcome.finally(()=>R.removeEventListener("abort",le));if(ne.timedOut||R.aborted)return E=le(),R.aborted?{kind:"failure",status:503,reason:"aborted"}:{kind:"failure",status:502,reason:"render_timeout"};let ce=Aa(ne.value,h.box);return"entry"in ce?$(ce.entry):ce.failure}finally{E===null?S():E.then(S,S)}}};var wa=()=>{let e=new Map;return{join:(t,r,n)=>{let o=()=>{let c=new AbortController,s=()=>{e.get(t)?.controller===c&&e.delete(t)},u={promise:n(c.signal).finally(s),controller:c,waiters:0};return e.set(t,u),u},a=e.get(t)??o();a.waiters+=1;let i=()=>{a.waiters-=1,!(a.waiters>0)&&(a.controller.abort(),e.get(t)===a&&e.delete(t))};r.aborted?i():r.addEventListener("abort",i,{once:!0});let l=()=>{r.removeEventListener("abort",i)};return a.promise.finally(l)}}};var xa=10,vc=1/xa,Ia=1-vc,Oc=1024,Fc=64,Hc=8,_a="private, no-cache",Uc="no-store",$c=Object.freeze({verified:"",unverified:" identity=unverified",unrecorded:" size=unrecorded"}),Bc=e=>{switch(e.status){case 404:case 502:case 504:return"warn";case 500:return"error";case 503:return e.reason==="aborted"?"info":"warn"}},Ca=e=>{let{service:t,encodeUserId:r,resolveViewerScope:n,logger:o,recordObjectState:a,maxBytes:i,thumbnails:l}=e,{renderer:c}=l,s=(I,T)=>Ze({reason:I,limitPerWindow:T,windowMs:6e4,logger:o,windowFields:V=>`viewer=${V} variant=thumbnail`}),m=s("rate_limit",l.rateLimitPerMinute),u=s("revalidation_rate_limit",l.rateLimitPerMinute*xa),f=qe({limit:l.concurrency,maxHeldPerOwner:l.concurrency,queue:{max:Fc,maxPerOwner:Hc,maxWaitMs:Ce.queueWaitMs}}),h=Da({maxBytes:l.cacheBytes,maxEntries:Oc}),R=wa(),D=Ea({gate:f,cache:h,maxBytes:i,encodeUserId:r,recordObjectState:a,logger:o}),S=(I,T,V,L)=>{let $=`attachment=${I.attachmentId} viewer=${I.internalUserId} variant=thumbnail cache=${L}`;if(T.kind==="failure")return o[Bc(T)](`${T.status} ${$} reason=${T.reason} code=${T.code??"-"}`),I.fail(T.status,ct[T.status],xe(T.status));let de=$c[T.identity];if(T.kind==="unrenderable")return o.info(`404 ${$} reason=${T.reason}${de}`),I.fail(404,ct[404]);let pe=T.identity==="verified"?{"Cache-Control":_a,ETag:V}:{"Cache-Control":Uc},De=new Headers({"Content-Type":T.contentType,"Content-Length":String(T.bytes.byteLength),...pe,"Content-Security-Policy":"default-src 'none'; sandbox",...wt});return I.cookie&&De.append("Set-Cookie",I.cookie),o.info(`200 ${$} type=${T.contentType} bytes=${T.bytes.byteLength}${de}`),new Response(T.bytes,{status:200,headers:De})},E=(I,T)=>{let V=I.spend(T.internalUserId,`attachment=${T.attachmentId} viewer=${T.internalUserId} variant=thumbnail`);return V===null?null:T.fail(V.status,V.message,V.headers)},M=I=>E(m,I),U=(I,T)=>T?E(u,I):M(I);return async(I,T)=>{let{request:V,attachmentId:L,internalUserId:$,readAttachment:de,cookie:pe,fail:De}=I,K=Rn[T],le=V.headers.get("If-None-Match"),ne=le!==null,ce=U(I,ne);if(ce)return ce;let me=await n(V),Re=await t.getAttachmentForUser(me,L,$),ae=Re!==null&&Sr(Re,i)?ga({rendererId:c.id,box:K,attachmentId:L,filePath:Re.filePath,fileType:Re.fileType,fileSize:Re.fileSize}):null;if(ae&&bn(le,ae.etag)){let w=new Headers({"Cache-Control":_a,ETag:ae.etag,...wt});return pe&&w.append("Set-Cookie",pe),o.info(`304 attachment=${L} viewer=${$} variant=thumbnail cache=revalidated`),new Response(null,{status:304,headers:w})}if(ne){let w=M(I);if(w)return w}if(!Re)return o.warn(`404 attachment=${L} viewer=${$} variant=thumbnail reason=not_visible`),De(404,ct[404]);if(!ae)return m.refund($,Ia),o.info(`404 attachment=${L} viewer=${$} variant=thumbnail reason=not_eligible`),De(404,ct[404]);let{key:Ne,etag:Fe}=ae,at=h.get(Ne);if(at)return m.refund($,Ia),S(I,{...at,identity:"verified"},Fe,"hit");let it=w=>D({key:Ne,attachmentId:L,filePath:Re.filePath,fileSize:Re.fileSize,box:K,owner:$,readAttachment:de,renderer:c},w),Ee;try{Ee=await R.join(Ne,V.signal,it)}catch(w){return o.error(`500 attachment=${L} viewer=${$} variant=thumbnail cache=miss reason=port_exception message=${w instanceof Error?w.message:"unknown"}`),De(500,ct[500])}return S(I,Ee,Fe,"miss")}};var Vc='[daily-report] params.token must be passed by the route that mounts attachment.loader; declare a "token" route parameter ({apiBasePath}/attachment/{token})',qc=()=>pr(403,En,{cookie:null}),Ma=Object.freeze({route:"attachment",navigable:e=>{let{kind:t}=Sn(new URL(e.url).searchParams);return t==="inline"||t==="download"},frameworkDataRefusal:()=>pr(404,mr[404],{cookie:null}),crossSiteRejection:qc}),Pa=e=>{let{authenticate:t,service:r,encodeUserId:n,resolveViewerScope:o,logger:a}=e,i=r.attachmentDelivery,l={service:r,encodeUserId:n,resolveViewerScope:o,logger:a,recordObjectState:Yo(r,a)},c=i===null?null:{idCodec:i.idCodec,read:i.read,serveOriginal:Jo({...l,maxBytes:i.maxBytes,rateLimitPerMinute:i.rateLimitPerMinute,concurrency:i.concurrency}),serveThumbnail:i.thumbnails===null?null:Ca({...l,maxBytes:i.maxBytes,thumbnails:i.thumbnails})};return async({request:s,params:m})=>{let u=null,f=(h,R,D={})=>pr(h,R,{cookie:u,extraHeaders:D});try{let{user:h,cookie:R}=await t(s,{failureRedirect:null});if(u=R??null,!h)return f(401,"Unauthorized");let D=Sn(new URL(s.url).searchParams);if(D.kind==="invalid")return f(400,"Invalid attachment request");if(D.kind==="thumbnail"&&s.method!=="GET")return f(405,"Method not allowed",{Allow:"GET"});if(s.method!=="GET"&&s.method!=="HEAD")return f(405,"Method not allowed",{Allow:"GET, HEAD"});if(c===null)return f(404,"Attachment not found");if(m.token===void 0)throw new Error(Vc);let S=c.idCodec.decode(m.token);if(S===null||!st(S))return f(400,"Invalid attachment token");let E=await r.getUserIdByExternalId(h.id);if(!E)return f(403,"Forbidden");let M={request:s,delivery:D,attachmentId:S,internalUserId:E,readAttachment:c.read,cookie:u,fail:f};return D.kind!=="thumbnail"?await c.serveOriginal(M):c.serveThumbnail===null?f(404,ct[404]):await c.serveThumbnail(M,D.variant)}catch(h){if(h instanceof Response)throw h;return a.error(`500 attachment=? viewer=? reason=unexpected message=${h instanceof Error?h.message:"unknown"}`),f(500,Xe)}}};var Yc=32*1024*1024,jc=60,Wc=4,zc=120,Gc=2,Kc=8*1024*1024,gr=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),Jc=e=>{if(e===void 0)throw Ke("attachments.thumbnails.renderer","injected when attachments.thumbnails is given");if(!gr(e))throw oe("attachments.thumbnails.renderer","an object with id and render",e);if(e.render===void 0)throw Ke("attachments.thumbnails.renderer.render","a function");if(typeof e.render!="function")throw oe("attachments.thumbnails.renderer.render","a function",e.render);if(typeof e.id!="string"||e.id.trim()==="")throw oe("attachments.thumbnails.renderer.id","a non-blank string naming the rendering pipeline version",e.id);return e},Qc=e=>{if(e===void 0)return null;if(!gr(e))throw oe("attachments.thumbnails","an object with renderer",e);return Object.freeze({renderer:Jc(e.renderer),rateLimitPerMinute:pt("attachments.thumbnails.rateLimitPerMinute",e.rateLimitPerMinute,1,zc),concurrency:pt("attachments.thumbnails.concurrency",e.concurrency,1,Gc),cacheBytes:pt("attachments.thumbnails.cacheBytes",e.cacheBytes,0,Kc)})},La=e=>{let t=e;if(t===void 0)return null;if(!gr(t))throw oe("attachments","an object with idCodec and read",t);let{idCodec:r,read:n}=t;if(r===void 0)throw Ke("attachments.idCodec","injected when attachments is given");if(!gr(r)||typeof r.encode!="function"||typeof r.decode!="function")throw oe("attachments.idCodec","an object with encode and decode functions",r);if(n===void 0)throw Ke("attachments.read","injected when attachments is given");if(typeof n!="function")throw oe("attachments.read","a function",n);return Object.freeze({idCodec:r,read:n,maxBytes:pt("attachments.maxBytes",t.maxBytes,1,Yc),rateLimitPerMinute:pt("attachments.rateLimitPerMinute",t.rateLimitPerMinute,1,jc),concurrency:pt("attachments.concurrency",t.concurrency,1,Wc),thumbnails:Qc(t.thumbnails)})},Xc=Object.freeze([["attachmentIdCodec","attachments.idCodec"],["readAttachment","attachments.read"],["attachmentMaxBytes","attachments.maxBytes"],["attachmentRateLimitPerMinute","attachments.rateLimitPerMinute"],["attachmentConcurrency","attachments.concurrency"],["attachmentThumbnailRenderer","attachments.thumbnails.renderer"],["attachmentThumbnailRateLimitPerMinute","attachments.thumbnails.rateLimitPerMinute"],["attachmentThumbnailConcurrency","attachments.thumbnails.concurrency"],["attachmentThumbnailCacheBytes","attachments.thumbnails.cacheBytes"]]),br=e=>{for(let[t,r]of Xc)if(Object.hasOwn(e,t))throw Ke(r,`given in place of the flat key ${t}`)};var ka=8,Zc=8*ka,eu=128,tu=2,va=tu*eu,ru=4*va,nu=6e4,ou=6e4,au="Too many reads",Na=Object.freeze(Object.keys(ft).filter(e=>ft[e].admission.includes("miss-gate"))),Oa=e=>{let t=qe({limit:Zc,maxHeldPerOwner:ka,queue:{max:ru,maxPerOwner:va,maxWaitMs:nu}}),r=Oe({windowMs:ou,tallies:Na,writeSuppressed:(n,{count:o,since:a,tallies:i})=>{e.warn(`cache_miss_admission_suppressed count=${o} since=${a} viewer=${n} endpoints=${Na.map(l=>`${l}:${i[l]}`).join(",")}`)}});return{admissionFor:(n,o,a)=>({signal:a,acquire:async i=>{let l=await t.acquire(n,i);return l===null&&!i.aborted&&r.record(n,o,()=>e.warn(`503 ${o} viewer=${n} reason=cache_miss_admission`)),l}})}},Dr=(e,t,r)=>{let n=e(t,r,{error:{message:au}},503);for(let[o,a]of Object.entries(xe(503)))n.headers.set(o,a);return n};var iu=/^[0-9a-f]{1,16}$/,su=e=>st(e.reportHubId)&&(e.businessDate===null||nr(e.businessDate)),lu=e=>typeof e=="string"&&iu.test(e);var Fa=e=>{let t=e.get(ge.cursorReportHubId),r=e.get(ge.cursorBusinessDate),n=e.get(ge.cursorSnapshot),o=lu(n)?n:null,a=null;if(t!==null){let l=Ue(t);if(l===null)return{refused:"cursor"};let c={businessDate:r,reportHubId:l};if(!su(c))return{refused:"cursor"};a=c}else if(r!==null)return{refused:"cursor"};let i=Ot(e.get(ge.forceRefresh));return i===null?{refused:"forceRefresh"}:{query:{cursor:a,snapshot:o,forceRefresh:i}}};var Ar=e=>e.method==="HEAD"?AbortSignal.abort():e.signal,cu=2,uu=16,du=cu*uu,pu=6e4,Ha=()=>{},mu=(e,t)=>{if(e.aborted)return t(),t;let r=()=>{e.removeEventListener("abort",r),t()};return e.addEventListener("abort",r,{once:!0}),r},Ua=e=>{let t=qe({limit:Number.MAX_SAFE_INTEGER,maxHeldPerOwner:du,queue:null}),r=Oe({windowMs:pu,tallies:["sse","ids-stream"],writeSuppressed:(n,{count:o,since:a,tallies:i})=>{e.warn(`streams_per_viewer_suppressed count=${o} since=${a} viewer=${n} routes=sse:${i.sse},ids-stream:${i["ids-stream"]}`)}});return{admit:async(n,o,a)=>{if(n===null)return Ha;if(a.aborted){if(t.canAcquire(n))return Ha}else{let i=await t.acquire(n,a);if(i!==null)return mu(a,i)}return r.record(n,o,()=>e.warn(`503 ${o} viewer=${n} reason=streams_per_viewer`)),null}}};var Tr=30,Ya=4e3,yu="stream interrupted by server error",hu="Too many streams",fu=15e3,ja=Symbol("ids-stream-heartbeat"),$a=()=>{},Ba=e=>e.return(void 0).then($a,$a),Ru=()=>{let e;return{fired:new Promise(r=>{e=setTimeout(()=>r(ja),fu)}),stop:()=>clearTimeout(e)}};async function*Va(e,t,r,n){let o=t?co(e,t):0,a=!0;for(;;){let i=Math.min(o+(a?r:Ya),e.length),l=mt(e,o,i),c=i>o?e[i-1]:void 0;o=i;let s=o>=e.length;if(yield{kind:"chunk",...l,nextCursor:s||c===void 0?null:{businessDate:c.businessDate,reportHubId:c.reportHubId},isLast:s,...a?{total:e.length}:{},...a?{streamAnchor:n.streamAnchor}:{},snapshot:n.snapshot,...a&&n.restarted?{restarted:!0}:{}},a=!1,s)return}}var Wa=e=>{let t=new Headers({"Content-Type":"application/x-ndjson; charset=utf-8","Cache-Control":"private, no-cache, no-transform",...Ve});return e&&t.append("Set-Cookie",e),t},qa=(e,t,r,n,o)=>{let a=async(m,u)=>{o(),u&&await Ba(t);try{m.close()}catch{}},i=new TextEncoder,l=!1,c=null,s=new ReadableStream({async pull(m){if(l||r.aborted){await a(m,!0);return}let u=Ru();try{c===null&&(c=t.next());let f=await Promise.race([c,u.fired]);if(u.stop(),f===ja){if(l||r.aborted){await a(m,!0);return}m.enqueue(i.encode(`
2
+ `));return}c=null;let{value:h,done:R}=f;if(R){await a(m,!1);return}if(l||r.aborted){await a(m,!0);return}m.enqueue(i.encode(`${JSON.stringify(h)}
3
+ `))}catch(f){if(u.stop(),c=null,o(),l||r.aborted)return;f instanceof He||n.error(`ids-stream emission failed: ${f instanceof Error?f.message:String(f)}`);try{let h={kind:"error",error:yu};m.enqueue(i.encode(`${JSON.stringify(h)}
4
+ `)),m.close()}catch{}}},cancel(){l=!0,o(),Ba(t)}});return new Response(s,{status:200,headers:Wa(e)})},za=e=>{let{service:t,logger:r,streamSlots:n,missGate:o,refuseForcedRead:a}=e,i=async(l,c,s,m,u,f,h)=>{let R=!1,D=null,S=null,E=new Promise((I,T)=>{D=I,S=T});E.catch(()=>{});let M=t.getDailyReportIdsByExternalId(s,c.id,{forceRefresh:l.forceRefresh,admission:h,onFetchStart:l.cursor?void 0:()=>{R=!0,t.readSseStreamAnchor().then(I=>t.getDailyReportIdsFirstPageByExternalId(s,c.id,Tr).then(T=>({items:T,streamAnchor:I}))).then(I=>D?.(I),I=>S?.(I))}});if(M.catch(()=>{}),l.cursor){let{items:I,streamAnchor:T,snapshot:V}=await M,L=l.snapshot!==null&&l.snapshot===V;return qa(m,Va(I,L?l.cursor:null,Tr,{snapshot:V,restarted:!L,streamAnchor:T}),u,r,f)}let U=(async function*(){let I=await Promise.race([M.then(L=>({kind:"full",source:L}),L=>({kind:"full-error",error:L})),E.then(L=>({kind:"page",page:L}),()=>({kind:"page-error"}))]),T=null,V=!1;if(I.kind==="full")T=I.source;else if(I.kind==="page"){let{items:L,streamAnchor:$}=I.page;if(L.length<Tr){yield{kind:"chunk",...mt(L,0,L.length),nextCursor:null,isLast:!0,total:L.length,streamAnchor:$};return}yield{kind:"chunk",...mt(L,0,L.length),nextCursor:null,isLast:!1,provisional:!0},V=!0}else if(I.kind==="full-error"&&R){let L=await E.catch(()=>null);L&&L.items.length>0&&(yield{kind:"chunk",...mt(L.items,0,L.items.length),nextCursor:null,isLast:!1,provisional:!0})}T===null&&(T=await M),yield*Va(T.items,null,V?Ya:Tr,{snapshot:T.snapshot,streamAnchor:T.streamAnchor})})();return qa(m,U,u,r,f)};return async(l,c,s,m,u,f)=>{let h=Fa(l.searchParams);if("refused"in h)return f(s,c,{error:{message:h.refused==="cursor"?"Invalid cursor":"Invalid forceRefresh"}},400);let{query:R}=h;if(R.forceRefresh){let M=a(m,s,c,f);if(M!==null)return M}let D=Ar(s),S=await t.getUserIdByExternalId(m.id),E=await n.admit(S,"ids-stream",D);if(E===null){let M=f(s,c,{error:{message:hu}},503);for(let[U,I]of Object.entries(xe(503)))M.headers.set(U,I);return M}if(D.aborted)return new Response(null,{status:200,headers:Wa(c)});try{return await i(R,m,u,c,D,E,S===null?void 0:o.admissionFor(S,se.idsStream,D))}catch(M){if(E(),M instanceof He)return Dr(f,s,c);throw M}}};var $t=require("drizzle-orm");var Su="",gu=64,bu=e=>e.toLowerCase(),Du=e=>e.trim().toLowerCase();function Ga(e){if(e==null)return null;if(!Array.isArray(e))return new Set;let t=new Set;for(let r of e){if(typeof r!="string")continue;let n=Du(r);n.length>0&&t.add(n)}return t}function Pe(e,t){return e===null?!0:t==null?!1:e.has(bu(t))}function Le(e){return e!==null&&e.size===0}function Bt(e,t){if(t!==null)return t.size===0?$t.sql`1 = 0`:(0,$t.inArray)($t.sql`LOWER(${e})`,[...t])}var _t,xt,Ut=class Ut{constructor(t,r){Wr(this,_t);Wr(this,xt);zr(this,_t,t),zr(this,xt,r)}get visible(){return kt(this,_t)===null?null:new Set(kt(this,_t))}get commentable(){return kt(this,xt)===null?null:new Set(kt(this,xt))}static restrictTo(t){let r=typeof t=="object"&&t!==null&&"read"in t,n=Ga(r?t.read:t),o=r?t.comment:void 0;if(o===void 0)return new Ut(n,n);let a=Ga(o),i=new Set;for(let l of a??[])n.has(l)&&i.add(l);return new Ut(n,i)}static unrestricted(t){return new Ut(null,null)}};_t=new WeakMap,xt=new WeakMap;var Me=Ut;function Vt(e){let t=Ka(e.visible),r=Ka(e.commentable);return t===r?t:`d:${t.length}:${t}${r}`}function Ka(e){if(e===null)return"all";if(e.size===0)return"none";let t=[...e].sort().map(n=>`${n.length}:${n}`).join(Su);if(t.length<=gu)return`s:${t}`;let r=2166136261;for(let n=0;n<t.length;n++)r^=t.charCodeAt(n),r=Math.imul(r,16777619);return`sh:${(r>>>0).toString(16)}`}var Ja=(e,t,r,n)=>Pe(n.commentable,t)||e.authorUserId!==null&&e.authorUserId===r;var ii=require("@aiquants/fuzzy-search");var Xa=require("crypto"),Pn=require("timers/promises"),fe=require("@aiquants/fuzzy-search/normalize");var wr=`
5
+ `,Ln=4e3,Au=1,Za=new Set([8203,8288,65279,173]),Tu=new RegExp(`[${String.fromCodePoint(...Za)}]`,"gu"),Eu=new RegExp(`\\r\\n|[\\n\\r${String.fromCodePoint(133,8232,8233)}]`,"gu"),wu=/(\s+)/u,Iu=/^\s+$/u,_u=/^(?:(?=\p{Lo})[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}]|[A-Za-z0-9])$/u,xu=new Set([8205,1536,1537,1538,1539,1540,1541,1757,1807,2192,2193,2274,69821,69837,70082,70083,71999,72001,72250,72324,72325,72326,72327,72328,72329,73030,73474]),qt=e=>e.replace(Tu,""),ei=e=>{let t=qt(e);if(t.length===e.length)return{text:t,rawIndex:null};let r=new Uint32Array(t.length),n=0;for(let o=0;o<e.length;o++)Za.has(e.charCodeAt(o))||(r[n++]=o);return{text:t,rawIndex:r}},Nn=e=>(0,fe.normalizeText)(e,fe.DEFAULT_NORMALIZE_OPTIONS),Er=e=>Nn(qt(e)),Cu=(0,fe.resolveNormalizeOptions)({...fe.DEFAULT_NORMALIZE_OPTIONS,convertRomaji:!0},"[daily-report] search reading options"),Mu=3,Pu=/^[-ー]+/u,Lu=/[^\p{L}\p{M}]/gu,Nu=/ー{2,}/gu,ku=/\p{Script=Latin}/u,Qa=/(?=\p{L})\p{Script=Latin}/u,vu=e=>(0,fe.clusterCountOf)(e.replace(Pu,"").replace(Lu,"").replace(Nu,"\u30FC")),Ou=(e,t)=>{for(let r of t)if(!(0,fe.isAnswerTier)(r.tier)||r.splitTier!==null)throw new Error(`[daily-report] search readings: queryNeedles gave an unfinished needle for the word ${JSON.stringify(e)} (text ${JSON.stringify(r.text)}, tier ${r.tier}, splitTier ${r.splitTier})`)},ti=e=>{if(!Qa.test(e))return[];let t=Er(e);if(!Qa.test(t))return[];let r=(0,fe.queryNeedles)(t,Cu,!1);Ou(t,r);let n=[];for(let o of r){if(o.tier===yt.word)continue;let a=Er(o.text);if(!(a.length===0||a.length>Ie.maxWordLength)&&!(a===t||ku.test(a))&&!(vu(a)<Mu||n.includes(a))&&(n.push(a),n.length===rn))break}return n},ri=(e,t)=>{let r=e.charCodeAt(t-1),n=e.charCodeAt(t);return r>=55296&&r<=56319&&n>=56320&&n<=57343},Fu=(e,t)=>{let r=e.codePointAt(t),n=t>=2&&ri(e,t-1)?t-2:t-1;return _u.test(String.fromCodePoint(r))&&!xu.has(e.codePointAt(n))},Hu=(e,t,r)=>{let n=[],o=0,a=0;for(;e.length-a>r;){let i=a+r;for(;i>a&&!Fu(e,i);)i--;i===a&&(i=a+r,ri(e,i)&&i--,o++),n.push({start:t+a,end:t+i}),a=i}return n.push({start:t+a,end:t+e.length}),{pieces:n,forcedCuts:o}},Ir=(e,t)=>{if(e.length<=t)return{chunks:[[{start:0,end:e.length}]],forcedCuts:0};let r=[],n=0,o=0,a=0,i=0,l=()=>{i>0&&r.push([{start:a,end:a+i}]),i=0};for(let c of e.split(wu)){let s=o;if(o+=c.length,i+c.length<=t){i===0&&(a=s),i+=c.length;continue}if(l(),Iu.test(c))continue;if(c.length<=t){a=s,i=c.length;continue}let m=Hu(c,s,t);n+=m.forcedCuts,r.push(m.pieces)}return l(),{chunks:r,forcedCuts:n}},kn=(e,t)=>{let r=Ir(e,t),n=[];for(let o of r.chunks){let a=o.map(i=>Nn(e.slice(i.start,i.end))).join("");a.length>0&&n.push(a)}return{text:n.join(" "),forcedCuts:r.forcedCuts}},vn=(e,t)=>{let r=0;for(let n of e.matchAll(Eu))t(e.slice(r,n.index),r),r=n.index+n[0].length;t(e.slice(r),r)},Uu=(e,t)=>{if(e.partialReadings!==null)throw new Error(`[daily-report] search marks: the mapped forms of the piece ${JSON.stringify(t)} carry partial readings`);return e.canonical},ni=(e,t)=>{let r="",n=[],o=[];for(let a of t.chunks){let i="",l=[],c=[];for(let s of a){let m=e.slice(s.start,s.end),u=Uu((0,fe.toMappedFormsInto)(m,fe.DEFAULT_NORMALIZE_OPTIONS,new fe.InteriorPairs(0)),m),[f,h]=(0,fe.trimmedRange)(u.text);i+=u.text.slice(f,h);for(let R=f;R<h;R++)l.push(s.start+u.start[R]),c.push(s.start+u.end[R])}if(i.length!==0){r.length>0&&(r+=" ",n.push(o[o.length-1]),o.push(l[0])),r+=i;for(let s=0;s<l.length;s++)n.push(l[s]),o.push(c[s])}}return{text:r,start:n,end:o}},_r=(e,t=Ln)=>{let r=[],n=0;return vn(qt(e),o=>{let a=kn(o,t);n+=a.forcedCuts,a.text.length>0&&r.push(a.text)}),{text:r.join(wr),forcedCuts:n}},oi=e=>e.filter(t=>t.length>0).join(wr),$u=e=>{let t=[];for(let r=0;r<=65535;r++)r>=55296&&r<=57343||t.push(e+String.fromCharCode(r));return t.join(`
6
+ `)},Bu=[`\u3067\u3093${String.fromCodePoint(8203)}\u3077\u3093 \uFF83\uFF9E\uFF9D\uFF8C\uFF9F\uFF9D\r
7
+ \u30C7\u30F3\u30D7\u30F3`,"\u30DD\u30C6\u30C8-25kg \u30A2--1 \u30FC\u30FC\u30E1\u30F3 \u4F50\u3005\u6728","\u6F22\u5B57\u304B\u306A\u30AB\u30CAABC123\u6F22\u5B57\u304B\u306A\u30AB\u30CAABC123\u6F22\u5B57\u304B\u306A\u30AB\u30CA",`\uFF71\uFF72\uFF73\uFF74\uFF75\uFF76\uFF9E\uFF77\uFF9E\uFF78\uFF9E\uFF79\uFF9E\uFF7A\uFF9E${String.fromCodePoint(8232)}\u6B21\u306E\u884C`],Vu=["","\u30A2","\u4F50"," "],qu=()=>JSON.stringify(Bu.map(e=>_r(e,8))),Yu=e=>`dr-search-v${Au};fz=${e.slice(0,16)};u=${process.versions.unicode};icu=${process.versions.icu}`;var ju=async()=>{let e=(0,Xa.createHash)("sha256");e.update(JSON.stringify(fe.DEFAULT_NORMALIZE_OPTIONS));for(let t of Vu)await(0,Pn.setImmediate)(),e.update("\0"),e.update(Nn($u(t)));return await(0,Pn.setImmediate)(),e.update("\0"),e.update(qu()),Yu(e.digest("hex"))},Wu=e=>{let t=null;return()=>{if(t===null){let r=e();t=r,r.catch(()=>{t=null})}return t}},On=Wu(ju);var zu=/^-+/u,Gu=/\s+/u,ai=e=>{let t=zu.exec(e);return t===null?[e]:[e,"\u30FC".repeat(t[0].length)+e.slice(t[0].length)]},Ku=(e,t)=>{let r=[...ai(e).map(n=>({text:n,tier:yt.word})),...t.flatMap(n=>ai(n).map(o=>({text:o,tier:yt.reading})))];return r.filter((n,o)=>r.findIndex(a=>a.text===n.text)===o)},Ju=e=>JSON.stringify(e.map(({text:t,tier:r})=>JSON.stringify([r,t])).sort()),xr=(e,t)=>{if(e.length>Ie.maxQueryLength)return{ok:!1,reason:"too-long"};let r=[],n=new Set,o=0;for(let{query:a}of(0,ii.parseQuerySets)(qt(e),t).sets){let i=[],l=new Set;for(let s of a.split(Gu)){let m=Er(s);if(m.length===0)return{ok:!1,reason:"blank-word"};if(m.length>Ie.maxWordLength)return{ok:!1,reason:"word-too-long"};let u=Ku(m,ti(s)),f=Ju(u);l.has(f)||(l.add(f),i.push({alternatives:u}))}if(i.length>Ie.maxWordsPerSet)return{ok:!1,reason:"too-many-words-in-set"};let c=JSON.stringify([...l].sort());n.has(c)||(n.add(c),o+=i.length,r.push({words:i}))}return r.length===0?{ok:!1,reason:"empty"}:r.length>Ie.maxSets?{ok:!1,reason:"too-many-sets"}:o>Ie.maxWords?{ok:!1,reason:"too-many-words"}:{ok:!0,plan:{combine:t,sets:r}}},Yt=e=>e.sets.map(t=>t.words.map(r=>r.alternatives));var Xy=Object.freeze({sourceTypes:null,authors:null,customers:null}),Qu=e=>e.sourceTypes!==null||e.authors!==null||e.customers!==null,si=(e,t,r)=>{if(Ao(e)&&Qu(r))return{ok:!0,criteria:{plan:null,filters:r}};let n=xr(e,t);return n.ok?{ok:!0,criteria:{plan:n.plan,filters:r}}:{ok:!1,reason:n.reason}};var li=6e4,Xu=1,Zu=3200,ci=2e3,ed=Object.freeze({search:Zu,reports:ci,"search-marks":ci,"search-facets":null}),td=(e,t)=>{let r=ed[e];return r===null?null:{max:t,maxPerOwner:ir,maxWaitMs:r}},jt=e=>{let{concurrency:t,route:r,logger:n}=e,o=Ze({reason:"rate_limit",limitPerWindow:e.rateLimitPerMinute,windowMs:li,logger:n,windowFields:()=>`route=${r}`}),a=qe({limit:t,maxHeldPerOwner:Math.max(1,Math.floor(t/2)),queue:td(r,t)}),i=Object.freeze({status:429,message:In,headers:Object.freeze({"Retry-After":String(Xu)})}),l=Oe({windowMs:li,tallies:["busy"],writeSuppressed:(c,{count:s,since:m})=>{n.warn(`busy_suppressed count=${s} since=${m} route=${r} concurrency=${t}`)}});return{admit:async(c,s)=>{let m=o.spend(c,r);if(m!==null)return{refusal:m};let u=await a.acquire(c,s);return u!==null?{release:u}:(o.refund(c,1),s.aborted||l.record(r,"busy",()=>n.warn(`429 ${r} reason=busy concurrency=${t}`)),{refusal:i})}}};var Di=require("@aiquants/sse"),ut=require("@aiquants/sse/server");var Ct=(e,t)=>{let r=e.message.data;if(!r)return{entry:{id:e.id,message:null},json:void 0};let n;try{n=JSON.parse(r)}catch(i){return t.error(`SSE message ${e.id} is not JSON:`,i),{entry:{id:e.id,message:null},json:void 0}}let o=bo.safeParse(n);if(!o.success)return t.error("SSE message validation failed:",o.error.format()),{entry:{id:e.id,message:null},json:n};let a=Object.freeze({parsed:o.data,published:n,text:r});return{entry:Object.freeze({id:e.id,message:a}),json:n}},rd=["externalComments","postedComments"],ui=new WeakMap,nd=e=>{let t=ui.get(e);if(t!==void 0)return t;let r={recipientRemoved:null,commentsRedacted:null};return ui.set(e,r),r},di=e=>{let{recipientRawUserId:t,...r}=e;return r},pi=(e,t)=>{let{published:r}=e;if(!(t||Object.hasOwn(r,"recipientRawUserId")))return e.text;let n=nd(e);if(t){if(n.commentsRedacted===null){let o=di(r),a=o.report;n.commentsRedacted=JSON.stringify({...o,report:{...a,...Object.fromEntries(rd.map(i=>[i,[]]))}})}return n.commentsRedacted}return n.recipientRemoved===null&&(n.recipientRemoved=JSON.stringify(di(r))),n.recipientRemoved};var Ri=require("@aiquants/sse"),Si=require("@aiquants/sse/shared-source");var Rt="daily-report:ids:",St="daily-report:business-date:",Cr=(e,t)=>`${e}st:${t}`,Fn=e=>`${Rt}user:${e}:`,mi=(e,t)=>Cr(Fn(e),t),od=e=>`${St}${e}:`,yi=(e,t)=>Cr(od(e),t),Wt=e=>`daily-report:date:${e}:user:`,Mt=(e,t)=>`${Wt(e)}${t}:`,hi=(e,t,r)=>Cr(Mt(e,t),r),je=e=>`daily-report:detail:${e}:user:`,Mr=(e,t)=>`${je(e)}${t}:`,fi=(e,t,r)=>Cr(Mr(e,t),r);var tt=(e,t)=>{let[r,n]=e.split("-").map(Number),[o,a]=t.split("-").map(Number);return r!==o?r<o:n<=a},ad=5e3,id=cr,Pt=class{constructor(t){this.config=t;this._lastId=null;this._positioning=null;this._generation=0;this._logger=be(t.logger,1,"SseReader"),this._source=this._createSource()}ready(){return this._position().then(()=>{})}subscribe(t,r){return this._source.subscribe({next:n=>{this._lastId=n.id,t(n)},error:n=>r(n instanceof Error?n:new Error(String(n)))})}async destroy(){await this._source.dispose(),this._generation+=1,this._positioning=null,this._lastId=null,this._source=this._createSource()}_position(){if(this._lastId!==null)return Promise.resolve(this._lastId);if(this._positioning===null){let t=this._generation;this._positioning=this._readTail().then(r=>{if(t!==this._generation)throw new Error("SSE reader was destroyed while the stream tail was being read");return this._positioning=null,this._lastId=r,r},r=>{throw t===this._generation&&(this._positioning=null),r})}return this._positioning}async _readTail(){let t=await this.config.redis?.getClient();if(!t)throw new Error("Failed to get Redis client to read the SSE stream tail");let r=await t.xRevRange(this.config.streamKey,"+","-",{COUNT:1});return r.length>0?r[0].id:"0-0"}_createSource(){return(0,Si.createSharedSource)({start:t=>this._start(t),lingerMs:0,replay:"none",runtime:Ri.systemSseRuntime,onListenerError:t=>this._logger.error("SSE reader subscriber threw:",t),onStopError:t=>this._logger.error("SSE reader failed to stop:",t)})}async _start(t){let r=await this._position(),n=await this.config.redis?.createClient();if(!n)throw new Error("Failed to create Redis client for SSE reader");n.on("error",i=>{this._logger.error("Redis client error:",i)});let o=!1,a=this._readLoop(n,t,r,()=>o);return async()=>{if(o=!0,n.isOpen)try{await n.quit()}catch{}await a}}async _readLoop(t,r,n,o){let a=n;try{for(;!o()&&t.isOpen;){let i=await t.xRead([{key:this.config.streamKey,id:a}],{BLOCK:ad,COUNT:id});if(i)for(let l of i)for(let c of l.messages){a=c.id;let{entry:s,json:m}=Ct(c,this._logger);this._invalidateCaches(m),r.next(s)}}}catch(i){o()||(this._logger.error("xRead loop error:",i),r.fail(i instanceof Error?i:new Error(String(i))));return}o()||r.fail(new Error("Redis client for SSE reader closed unexpectedly"))}_invalidateCaches(t){if(t===null||typeof t!="object")return;let{type:r,reportHubId:n}=t;(r==="report-create"||r==="report-delete"||r==="report-publish")&&this.config.cache.invalidatePrefix(Rt),(r==="comment-add"||r==="comment-delete"||r==="status-update")&&typeof n=="number"&&this.config.cache.invalidatePrefix(je(n))}};var Ai=Object.freeze({...Ft,route:"sse",frameworkDataRefusal:dr}),gi=864e5,sd={baseMs:2e3,jitterMs:8e3},Hn=6e4,Lr=cr,Ti=JSON.stringify({type:"connected"}),bi="0-0",ld=(e,t,r,n)=>{if(r===null&&n===null)return!0;let o=typeof t.sourceType=="string"?t.sourceType:void 0;switch(e.type){case"connected":case"status-update":return!0;case"report-create":case"report-update":case"report-publish":return Pe(r,e.report.sourceType);case"comment-add":case"comment-delete":return Pe(n,o??"Internal");case"report-delete":return Pe(r,o)}},cd=(e,t)=>t===null||e.type!=="report-create"&&e.type!=="report-update"&&e.type!=="report-publish"?!1:!Pe(t,e.report.sourceType),ud=(e,t)=>{e.writeEvent({event:null,id:t,data:Ti})},dd=(e,t,r)=>{let{message:n}=t;if(n===null)return;let{parsed:o,published:a}=n,i=typeof a.recipientRawUserId=="number"?a.recipientRawUserId:void 0;if((o.type==="status-update"||i!==void 0)&&i!==r.internalUserId||!ld(o,a,r.visibleSet,r.commentableSet)){ud(e,t.id);return}e.writeEvent({event:null,id:t.id,data:pi(n,cd(o,r.commentableSet))})},Ei=e=>{let{authenticate:t,service:r,resolveViewerScope:n,redis:o,sseReader:a,streamKey:i,streamSlots:l,logger:c}=e,s=async(m,u)=>{let{request:f,internalUserId:h,cursor:R}=u,D=u.initialScope.visible,S=u.initialScope.commentable,E=0,M=setInterval(()=>{let K=++E;n(f,"refresh").then(le=>{K===E&&(D=le.visible,S=le.commentable)})},Hn);m.onClose(()=>clearInterval(M));let U=R===null?bi:R,I=R!==null&&o!==void 0,T=[],V=null,L=K=>{tt(K.id,U)||(U=K.id,dd(m,K,{internalUserId:h,visibleSet:D,commentableSet:S}))},$=async(K,le)=>{let[ne]=await K.xRange(i,"-","+",{COUNT:1});return ne!==void 0&&!tt(ne.id,le)},de=async(K,le)=>{if(await $(K,le))return!1;let ne=le;for(;;){let ce=await K.xRange(i,ne,"+",{COUNT:Lr}),me=ce[0];if(me!==void 0&&me.id!==ne&&await $(K,ne))return!1;for(let ze of ce){if(V!==null&&tt(V,ze.id))return!0;tt(ze.id,U)||L(Ct(ze,c).entry)}let Re=ce.at(-1);if(ce.length<Lr||Re===void 0||m.isClosed())return!0;ne=Re.id}},pe=a.subscribe(K=>{if(!I){L(K);return}tt(K.id,U)||(V===null&&(V=K.id),T.push(K))},K=>{c.error(`[SSE:${h}] Fan-Out reader error:`,K),m.close()});if(m.onClose(pe),R===null){await a.ready();try{let K=await o?.getClient();if(K){let le=await K.xRevRange(i,"+","-",{COUNT:1});le.length>0&&!tt(le[0].id,U)&&(U=le[0].id)}}catch{}}if(m.writeEvent({event:null,id:U===bi?null:U,data:Ti}),(0,ut.startSseHeartbeat)(m,{intervalMs:fo,retry:sd,runtime:Di.systemSseRuntime}),R===null||o===void 0)return;await a.ready();let De=await o.getClient();if(De===void 0)throw new Error("redis client unavailable for the SSE catch-up");if(!await de(De,R)){m.writeRetry(gi),m.writeEvent({event:"resync-required",id:null,data:""}),m.close();return}I=!1;for(let K of T.splice(0))L(K)};return async({request:m,params:u})=>{let f,h=()=>{let D=new Headers;f!==void 0&&D.append("Set-Cookie",f);for(let[S,E]of Object.entries(Ve))D.set(S,E);return D},R=D=>(0,ut.terminalStreamResponse)(D,{data:"",retryMs:gi,headers:h()});try{let D=await t(m,{failureRedirect:null});f=D.cookie;let{user:S}=D;if(!S)return R("auth-required");let E=await r.getUserIdByExternalId(S.id);if(!E)return R("forbidden");if(u.endpoint!=="updates")return new Response("Not Found",{status:404,headers:h()});let M=(0,ut.readLastEventId)(m,Ro);if(M!==null&&!So(M))return c.warn(`[SSE:${E}] malformed resume cursor; asking the client to resync`),R("resync-required");let U=Ar(m),I=await l.admit(E,"sse",U);if(I===null){let V=h();for(let[L,$]of Object.entries(xe(503)))V.set(L,$);return new Response("Too many streams",{status:503,headers:V})}let T=!1;try{let V=await n(m,"initial");return(0,ut.createSseResponse)({requestSignal:U,headers:h(),onError:(L,$)=>c.error(`[SSE:${E}] ${$} failed:`,L),produce:L=>(T=!0,L.onClose(I),s(L,{request:m,internalUserId:E,cursor:M,initialScope:V}))})}finally{T||I()}}catch(D){if(D instanceof Response)throw D;let S=D instanceof Error?D:new Error(String(D));return c.error(`500 sse name=${S.name} message=${S.message}`),new Response("Internal Server Error",{status:500,headers:h()})}}};var wi=(e,t)=>{let r=new Headers({...t?.headers,"Content-Type":"application/json",...Ve});return t?.setCookie&&r.append("Set-Cookie",t.setCookie),new Response(JSON.stringify(e),{status:t?.status??200,headers:r})},pd=Object.freeze({...Ft,route:"api",frameworkDataRefusal:({params:e})=>fn(e.endpoint)&&ft[e.endpoint].body==="stream"?dr():null}),md=Object.freeze({...Ft,route:"action"}),yd=(e,t,r)=>({...r,status:"OK",intent:e.intent,reportHubId:t,clientTempId:e.clientTempId}),Mi=6e4,Pi=5,hd=Pi*Math.ceil(Mi/500),fd=2,Rd=6,Sd=6e4,gd=Pi*fd*Rd,bd=2,Dd=10,Ad=2,Td=10,Ii=(e,t)=>Math.max(e,ir)*t,Li=(e,t)=>{for(let[r,n]of Object.entries(t))e.headers.set(r,n);return e},Ed=Object.freeze({etag:(e,t,r)=>Ho(e,t,r,200),"no-store":(e,t,r)=>Dn(t,r,200)}),wd=e=>An(e.body==="json"?Ed[e.cache]:null),_i=An(null),xi=(e,t,r,n)=>Li(e(t,r,{error:{message:n.message}},n.status),n.headers),Ci=(e,t,r)=>Li(e(t,r,null,503),xe(503));function Nr(e){br(e);let{authenticate:t,service:r,encodeUserId:n,redis:o,sseReader:a,streamKey:i}=e,l={titleMaxLength:re("service.titleMaxLength",r.titleMaxLength,1)},c=e.loginRedirectPath??"/auth/login",s=be(e.logger,3,"API"),m=be(e.logger,3,"Visibility"),u=be(e.logger,1,"SSE"),f=be(e.logger,1,"Attachment"),h=be(e.logger,2,"Isolation"),R=be(e.logger,2,"Action"),D=be(e.logger,2,"Search"),S=be(e.logger,2,"Refresh"),E=be(e.logger,2,"Streams"),M=be(e.logger,2,"Reads"),U=Ze({reason:"refresh_rate_limit",limitPerWindow:gd,windowMs:Sd,logger:S,windowFields:()=>"route=api"}),I=Ua(E),T=Oa(M),V=async(w,H,v,N,B,z)=>{let J=await r.getUserIdByExternalId(H.id);try{return await z(J===null?void 0:T.admissionFor(J,w,v.signal))}catch(G){if(G instanceof He)return Dr(B,v,N);throw G}},L=(w,H,v,N,B)=>{let z=U.spend(H.id,`endpoint=${w}`);return z===null?null:xi(B,v,N,z)},$=async(w,H="initial")=>{let v=e.resolveVisibleSourceTypes;if(!v)return Me.unrestricted("no visibility port injected: this deployment does not restrict by source type");try{let N=await v(w,{reason:H});return N==null?Me.unrestricted("visibility port returned null/undefined: this deployment opts out of source-type filtering"):Me.restrictTo(N)}catch(N){return m.error("resolveVisibleSourceTypes threw; failing closed (deny all)",N),Me.restrictTo([])}},de=async({request:w})=>{let{user:H,cookie:v}=await t(w,{failureRedirect:c}),N=new Headers;v&&N.append("Set-Cookie",v);let B=await r.getUserIdByExternalId(H.id),z=B?n(B):null;return{data:{user:H,userId:z},headers:N}},pe=w=>{let{limiter:H}=w;return async(v,N,B,z,J,G)=>{if(H===null)return G(B,N,{error:{message:"Unknown endpoint"}},404);let Z=w.parse(v);if(!Z.ok)return G(B,N,Z.invalid,400);let O=await r.getUserIdByExternalId(z.id);if(!O)return G(B,N,w.emptyAnswer(Z.parsed),200);let{signal:ie}=B,Se=await H.admit(O,ie);if("refusal"in Se)return ie.aborted?Ci(G,B,N):xi(G,B,N,Se.refusal);try{ie.throwIfAborted();let ye=await w.read(Z.parsed,{userId:O,user:z,scope:J},ie);return ie.throwIfAborted(),G(B,N,ye,200)}catch(ye){if(ie.aborted&&ye===ie.reason)return Ci(G,B,N);throw ye}finally{Se.release()}}},De=r.searchLimits===null?null:jt({...r.searchLimits,route:se.search,logger:D}),K=r.searchLimits===null?null:jt({concurrency:Ii(r.searchLimits.concurrency,bd),rateLimitPerMinute:r.searchLimits.rateLimitPerMinute*Dd,route:se.reports,logger:D}),le=r.searchLimits===null?null:jt({concurrency:Ii(r.searchLimits.concurrency,Ad),rateLimitPerMinute:r.searchLimits.rateLimitPerMinute*Td,route:se.searchMarks,logger:D}),ne=r.searchLimits===null?null:jt({...r.searchLimits,route:se.searchFacets,logger:D}),ce={[se.businessDate]:async(w,H,v,N,B,z)=>{let J=w.searchParams.get(ge.businessDate),G=J===null?null:Et(J);if(G===null)return z(v,H,{error:{message:"Invalid business date"}},400);let Z=Ot(w.searchParams.get(ge.forceRefresh));if(Z===null)return z(v,H,{error:{message:"Invalid forceRefresh"}},400);let O=Z?L(se.businessDate,N,v,H,z):null;return O!==null?O:V(se.businessDate,N,v,H,z,async ie=>{let Se=await r.getDailyReportsByBusinessDateByExternalId(B,G,N.id,{forceRefresh:Z,admission:ie});return z(v,H,{businessDate:G,reports:Se},200)})},[se.idsStream]:za({service:r,logger:s,streamSlots:I,missGate:T,refuseForcedRead:(w,H,v,N)=>L(se.idsStream,w,H,v,N)}),[se.report]:async(w,H,v,N,B,z)=>{let J=Ue(w.searchParams.get(ge.reportHubId));if(J===null)return z(v,H,{error:{message:"Invalid reportHubId"}},400);let G=Ot(w.searchParams.get(ge.forceRefresh));if(G===null)return z(v,H,{error:{message:"Invalid forceRefresh"}},400);let Z=G?L(se.report,N,v,H,z):null;return Z!==null?Z:V(se.report,N,v,H,z,async O=>{let ie=await r.getDailyReportDetailByIdByExternalId(B,J,N.id,{snapshot:!0,forceRefresh:G,admission:O});return ie?z(v,H,{report:ie},200):z(v,H,{error:{message:"Report not found"}},404)})},[se.search]:pe({limiter:De,parse:w=>{let H=w.searchParams.get(ge.searchQuery),v=yn(w.searchParams.get(ge.searchCombine));if(H===null||v===null)return{ok:!1,invalid:{error:{message:"Invalid search request"}}};let N=Eo(w.searchParams,r.searchFilterSourceTypes);if(!N.ok)return{ok:!1,invalid:{error:{message:"Invalid search filters",reason:N.reason}}};let B=si(H,v,N.filters);if(!B.ok)return{ok:!1,invalid:{error:{message:"Invalid search query",reason:B.reason}}};let{criteria:z}=B;return{ok:!0,parsed:{criteria:z,words:z.plan===null?[]:Yt(z.plan)}}},emptyAnswer:({words:w})=>nn([],w),read:async({criteria:w,words:H},{userId:v,scope:N})=>nn(await r.searchDailyReports(N,v,w),H)}),[se.reports]:pe({limiter:K,parse:w=>{let H=hn(w.searchParams.get(ge.reportIds));return H===null?{ok:!1,invalid:{error:{message:"Invalid ids"}}}:{ok:!0,parsed:H}},emptyAnswer:()=>({reports:[]}),read:async(w,{user:H,scope:v})=>({reports:await r.getDailyReportDetailsByIdsByExternalId(v,w,H.id)})}),[se.searchMarks]:pe({limiter:le,parse:w=>{let H=w.searchParams.get(ge.searchQuery),v=yn(w.searchParams.get(ge.searchCombine));if(H===null||v===null)return{ok:!1,invalid:{error:{message:"Invalid search request"}}};let N=xr(H,v);if(!N.ok)return{ok:!1,invalid:{error:{message:"Invalid search query",reason:N.reason}}};let B=hn(w.searchParams.get(ge.reportIds));return B===null?{ok:!1,invalid:{error:{message:"Invalid ids"}}}:{ok:!0,parsed:{plan:N.plan,ids:B}}},emptyAnswer:({plan:w})=>({wordsDigest:ar(Yt(w)),reports:[],deferred:[]}),read:({plan:w,ids:H},{userId:v,scope:N},B)=>r.markDailyReportSearchHits(N,v,w,H,{signal:B})}),[se.searchFacets]:pe({limiter:ne,parse:()=>({ok:!0,parsed:null}),emptyAnswer:()=>({sourceTypes:[],authors:[],customers:[]}),read:(w,{userId:H,scope:v})=>r.listDailyReportSearchFacets(v,H)})},me=async({request:w,params:H})=>{let{user:v,cookie:N}=await t(w,{failureRedirect:null}),B=N??null;if(!v)return _i(w,B,{error:{message:"Unauthorized"}},401);let z=H.endpoint;if(!fn(z))return _i(w,B,{error:{message:"Unknown endpoint"}},404);let J=ft[z],G=wd(J),Z=ko[J.body];if(!Z.includes(w.method)){let ie=G(w,B,{error:{message:"Method not allowed"}},405);return ie.headers.set("Allow",Z.join(", ")),ie}let O=ue();try{let ie=new URL(w.url),Se=await $(w),ye=await ce[z](ie,B,w,v,Se,G);return J.body==="json"&&s.debug(ye.headers.has("ETag")?`${ye.status} endpoint=${z} etag_match=${ye.status===304}`:`${ye.status} endpoint=${z}`),ye}catch(ie){let Se=ue()-O,ye=ie instanceof Error?ie:new Error(String(ie));return s.error(`500 endpoint=${z} elapsed=${Se}ms name=${ye.name} code=${"code"in ye?ye.code:"N/A"} message=${ye.message}`,ye),G(w,B,{error:{message:"Internal Server Error"}},500)}},Re=No(R),ze=Ze({reason:"rate_limit",limitPerWindow:hd,windowMs:Mi,logger:R,windowFields:()=>"route=action"}),ae=async(w,H,v,N,B)=>{let{clientTempId:z}=w;if(w.intent==="create"){let O=await r.createDailyReport(H,w.businessDate,z);return B(w,O.reportHubId,{report:O})}let{reportHubId:J,businessDate:G}=w,Z=async(O,ie)=>{try{let Se=await ie(O.value);return B(O,J,{updatedStatus:{isStarred:Se.isStarred,isRead:Se.isRead},operationTimestamp:O.operationTimestamp})}catch(Se){if(Se instanceof Error&&Se.message==="Not Found")return N({error:"Report not found"},{status:404});throw Se}};switch(w.intent){case"update":try{return await r.updateDailyReport(J,H,w.changes,z),B(w,J,{})}catch(O){if(O instanceof Error){if(O.message==="Unauthorized")return N({error:"Unauthorized"},{status:403});if(O.message==="Not Found")return N({error:"Report not found"},{status:404})}throw O}case"publish":try{let O=await r.publishDailyReport(J,H,z);return B(w,J,{report:O})}catch(O){if(O instanceof Error){if(O.message==="Unauthorized")return N({error:"Unauthorized"},{status:403});if(O.message==="Not Found")return N({error:"Report not found"},{status:404})}throw O}case"delete":try{return await r.deleteDailyReport(J,H,z),B(w,J,{})}catch(O){if(O instanceof Error){if(O.message==="Unauthorized")return N({error:"Unauthorized"},{status:403});if(O.message==="Not Found")return N({error:"Report not found"},{status:404})}throw O}case"toggleStar":return await Z(w,O=>r.setStarStatus(v,H,J,G,O,z));case"toggleRead":return await Z(w,O=>r.setReadStatus(v,H,J,G,O,z));case"addComment":try{let O=await r.addComment(v,H,J,w.content,G,z);return B(w,J,{newComment:O})}catch(O){if(O instanceof Error){if(O.message==="Not Found")return N({error:"Report not found"},{status:404});if(O.message.startsWith("Comments are restricted"))return N({error:"Comments are restricted for this report"},{status:403})}throw O}case"deleteComment":try{return await r.deleteComment(v,H,J,w.commentId,G,z),B(w,J,{deletedCommentId:w.commentId})}catch(O){if(O instanceof Error){if(O.message==="Unauthorized")return N({error:"Unauthorized"},{status:403});if(O.message==="Not Found")return N({error:"Comment not found"},{status:404})}throw O}}},Ne=async({request:w,params:H})=>{let{user:v,cookie:N}=await t(w,{failureRedirect:null}),B=(G,Z)=>wi(G,{...Z,setCookie:N}),z=(G,Z,O)=>wi(yd(G,Z,O),{setCookie:N});if(!v)return B({error:"Unauthorized"},{status:401});let J=ue();try{if(H.endpoint!==se.action)return B({error:"Unknown endpoint"},{status:404});let G=ze.spend(v.id,"action");if(G!==null)return B({error:G.message},{status:G.status,headers:G.headers});let Z=await Lo(w,l);if("refusal"in Z){let{refusal:ye}=Z;return ye.status===413&&Re(ye.measuredBy),B({error:ye.error},{status:ye.status})}let{command:O}=Z;if(O.intent==="clearCache"&&!e.enableDevCacheClear)return B({error:"Invalid intent"},{status:400});let ie=await r.getUserIdByExternalId(v.id);if(!ie)return B({error:"User not found"},{status:404});let Se=await $(w);return O.intent==="clearCache"?(await r.clearCache(),B({status:"OK",intent:"clearCache"})):await ae(O,ie,Se,B,z)}catch(G){if(G instanceof Response)throw G;let Z=ue()-J,O=G instanceof Error?G:new Error(String(G));return s.error(`500 action elapsed=${Z}ms name=${O.name} message=${O.message}`,O),B({error:"Internal Server Error"},{status:500})}},Fe=Ei({authenticate:t,service:r,resolveViewerScope:$,redis:o,sseReader:a,streamKey:i,streamSlots:I,logger:u}),at=Pa({authenticate:t,service:r,encodeUserId:n,resolveViewerScope:$,logger:f}),it=qo(h),Ee=(w,H)=>async v=>{let N=Bo(v.request)?w.frameworkDataRefusal(v):null;if(N!==null)throw N;return Vo(v.request,w)?(it(w.route,v.request),w.crossSiteRejection()):H(v)};return{index:{loader:de},api:{loader:Ee(pd,me),action:Ee(md,Ne)},sse:{loader:Ee(Ai,Fe)},attachment:{loader:Ee(Ma,at)}}}var Lt=require("@aiquants/mssql"),b=require("drizzle-orm");var rt=require("drizzle-orm"),Ni=e=>{if(e.length===0)throw new Error("[daily-report] draft rule: draftLabelNames must hold at least one name (a rule without names would show every draft to every viewer)");return rt.sql.join(e.map(t=>rt.sql`${t}`),rt.sql`, `)},kr=(e,t)=>{let{hub:r,hubLabel:n,label:o}=e;return rt.sql`EXISTS (SELECT 1 FROM ${n} INNER JOIN ${o} ON ${o.id} = ${n.labelId} WHERE ${n.hubId} = ${r.id} AND ${o.name} IN (${Ni(t)}))`},ki=(e,t)=>{let{hubLabel:r,label:n}=e;return rt.sql`${r.labelId} IN (SELECT ${n.id} FROM ${n} WHERE ${n.name} IN (${Ni(t)}))`},vr=(e,t,r,n)=>{let{hub:o}=e,a=n==="author-or-authorless"?rt.sql`${o.userId} = ${t} OR ${o.userId} IS NULL`:rt.sql`${o.userId} = ${t}`;return rt.sql`(${a} OR NOT ${kr(e,r)})`};var Id=["tables","externalSourceTexts","concurrency","rateLimitPerMinute"],_d=["document","comment"],xd=["hubId","searchText","sourceDigest","normalizerVersion","indexedAt","rowVersion","authorName","customerName"],Cd=["hubId","ordinal","authorUserId","commentText"],Un=e=>{if(typeof e!="object"||e===null||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null},vi=(e,t,r)=>{for(let n of Object.keys(t))if(!r.includes(n))throw Kr(e,n,r)},Oi=(e,t,r)=>{if(typeof t!="object"||t===null)throw oe(e,"a table object",t);let n=t;for(let o of r)if(typeof n[o]!="object"||n[o]===null)throw oe(`${e}.${o}`,"a column",n[o])},Fi=(e,t)=>{if(!Un(e))throw oe("search","a plain object",e);vi("search key",e,Id);let{tables:r}=e;if(!Un(r))throw oe("search.tables","a plain object with document and comment",r);vi("search.tables key",r,_d),Oi("search.tables.document",r.document,xd),Oi("search.tables.comment",r.comment,Cd);let n=new Map;if(e.externalSourceTexts!==void 0){if(!Un(e.externalSourceTexts))throw oe("search.externalSourceTexts","a plain object",e.externalSourceTexts);for(let[o,a]of Object.entries(e.externalSourceTexts)){if(!t.includes(o))throw Kr("search.externalSourceTexts key",o,t);if(typeof a!="function")throw oe(`search.externalSourceTexts.${o}`,"a function",a);n.set(o,a)}}return{tables:r,externalSourceTexts:n,concurrency:re("search.concurrency",e.concurrency,1),rateLimitPerMinute:re("search.rateLimitPerMinute",e.rateLimitPerMinute,1)}};var dt=e=>{let t=typeof e=="object"&&e!==null?e.recordset:void 0;if(!Array.isArray(t))throw new Error("[daily-report] search: the database result has no recordset");return t},gt=(e,t)=>{let r=typeof e=="string"?Ue(e):typeof e=="number"&&st(e)?e:null;if(r===null)throw new Error(`[daily-report] search: column ${t} holds no positive id`);return r},bt=(e,t)=>{if(e===null||typeof e=="string")return e;throw new Error(`[daily-report] search: column ${t} holds no string`)};var q=require("drizzle-orm");var Md=/[[%_]/gu,Pd=e=>e.replace(Md,t=>`[${t}]`),Hi=e=>`%${Pd(e)}%`;var Be=Object.freeze({reportHubId:"report_hub_id",businessDate:"business_date",sourceType:"source_type"}),Dt=Object.freeze({reportHubId:"report_hub_id",matchedSets:"matched_sets"}),Gt=Object.freeze({value:"value"}),we=Object.freeze({hubId:"hub_id",sourceDigest:"source_digest",normalizerVersion:"normalizer_version"}),j=e=>q.sql`${q.sql.identifier(e.name)}`,zt=e=>q.sql.join(e.map(t=>q.sql`${t}`),q.sql`, `),Ui=(e,t)=>q.sql`SELECT ${j(e.id)} AS ${q.sql.identifier(we.hubId)} FROM ${e} WITH (UPDLOCK, ROWLOCK) WHERE ${e.id} IN (${zt(t)}) ORDER BY ${e.id}`,Ld=(e,t,r)=>{let{hub:n}=e,{document:o,comment:a}=e.search,i=t.alternatives.map(u=>Hi(u.text)),l=q.sql.join(i.map(u=>q.sql`${o.searchText} LIKE ${u}`),q.sql` OR `),c=q.sql.join(i.map(u=>q.sql`${a.commentText} LIKE ${u}`),q.sql` OR `),s=Bt(n.sourceType,r.scope.commentable),m=s===void 0?q.sql``:q.sql` AND (${s} OR ${a.authorUserId} = ${r.userId})`;return q.sql`((${l}) OR EXISTS (SELECT 1 FROM ${a} WHERE ${a.hubId} = ${n.id} AND (${c})${m}))`},$i=(e,t,r)=>q.sql`(${q.sql.join(t.words.map(n=>Ld(e,n,r)),q.sql` AND `)})`,$n=(e,t,r,n)=>{let{hub:o}=e,a=[q.sql`${o.deletedAt} IS NULL`,vr(e,t.userId,r,"author")],i=Bt(o.sourceType,t.scope.visible);return i!==void 0&&a.push(i),n!==void 0&&a.push(q.sql`${o.id} IN (SELECT CAST([value] AS bigint) FROM OPENJSON(${JSON.stringify(n)}))`),a},Nd=(e,t)=>{let{hub:r}=e,{document:n}=e.search,o=[];if(t.sourceTypes!==null){if(t.sourceTypes.size===0)throw new Error("[daily-report] search: a source-type filter must hold at least one source type");o.push(q.sql`LOWER(${r.sourceType}) IN (${zt([...t.sourceTypes])})`)}return t.authors!==null&&o.push(q.sql`${n.authorName} IN (${zt(t.authors)})`),t.customers!==null&&o.push(q.sql`${n.customerName} IN (${zt(t.customers)})`),o},Bi=(e,t,r,n,o)=>{let{hub:a}=e,{document:i}=e.search,{plan:l}=t,c=[...$n(e,r,n,o),...Nd(e,t.filters)];if(l!==null){let s=l.combine==="intersection"?q.sql` AND `:q.sql` OR `;c.push(q.sql`(${q.sql.join(l.sets.map(m=>$i(e,m,r)),s)})`)}return q.sql`SELECT ${j(a.id)} AS ${q.sql.identifier(Be.reportHubId)}, CONVERT(char(10), ${j(a.businessDate)}, 23) AS ${q.sql.identifier(Be.businessDate)}, ${j(a.sourceType)} AS ${q.sql.identifier(Be.sourceType)} FROM ${a} INNER JOIN ${i} ON ${i.hubId} = ${a.id} WHERE ${q.sql.join(c,q.sql` AND `)} ORDER BY ${a.businessDate} DESC, ${a.id} DESC`},Vi=(e,t,r,n,o)=>{let{hub:a}=e,{document:i}=e.search,l=q.sql.join(t.sets.map((c,s)=>q.sql`(CASE WHEN ${$i(e,c,r)} THEN ${2**s} ELSE 0 END)`),q.sql` + `);return q.sql`SELECT ${j(a.id)} AS ${q.sql.identifier(Dt.reportHubId)}, ${l} AS ${q.sql.identifier(Dt.matchedSets)} FROM ${a} INNER JOIN ${i} ON ${i.hubId} = ${a.id} WHERE ${q.sql.join($n(e,r,n,o),q.sql` AND `)}`},qi=(e,t,r,n)=>{let{hub:o}=e,{document:a}=e.search,i=a[t],l=[...$n(e,r,n),q.sql`${i} IS NOT NULL`];return q.sql`SELECT ${i} AS ${q.sql.identifier(Gt.value)} FROM ${o} INNER JOIN ${a} ON ${a.hubId} = ${o.id} WHERE ${q.sql.join(l,q.sql` AND `)} GROUP BY ${i} ORDER BY ${i}`},Yi=(e,t,r)=>{let{document:n,comment:o}=e,a=JSON.stringify(t.map(c=>({[n.hubId.name]:c.hubId,[n.searchText.name]:c.searchText,[n.sourceDigest.name]:c.sourceDigest,[n.normalizerVersion.name]:r,[n.authorName.name]:c.authorName,[n.customerName.name]:c.customerName}))),i=JSON.stringify(t.flatMap(c=>c.comments.map(s=>({[o.hubId.name]:c.hubId,[o.ordinal.name]:s.ordinal,[o.authorUserId.name]:s.authorUserId,[o.commentText.name]:s.commentText})))),l=JSON.stringify(t.map(c=>c.hubId));return q.sql`MERGE ${n} WITH (HOLDLOCK) AS t USING (SELECT * FROM OPENJSON(${a}) WITH (${j(n.hubId)} bigint, ${j(n.searchText)} nvarchar(max), ${j(n.sourceDigest)} char(64), ${j(n.normalizerVersion)} varchar(64), ${j(n.authorName)} nvarchar(max), ${j(n.customerName)} nvarchar(max))) AS s ON t.${j(n.hubId)} = s.${j(n.hubId)}
8
+ WHEN MATCHED THEN UPDATE SET t.${j(n.searchText)} = s.${j(n.searchText)}, t.${j(n.sourceDigest)} = CONVERT(binary(32), s.${j(n.sourceDigest)}, 2), t.${j(n.normalizerVersion)} = s.${j(n.normalizerVersion)}, t.${j(n.authorName)} = s.${j(n.authorName)}, t.${j(n.customerName)} = s.${j(n.customerName)}, t.${j(n.indexedAt)} = SYSUTCDATETIME()
9
+ WHEN NOT MATCHED THEN INSERT (${j(n.hubId)}, ${j(n.searchText)}, ${j(n.sourceDigest)}, ${j(n.normalizerVersion)}, ${j(n.authorName)}, ${j(n.customerName)}) VALUES (s.${j(n.hubId)}, s.${j(n.searchText)}, CONVERT(binary(32), s.${j(n.sourceDigest)}, 2), s.${j(n.normalizerVersion)}, s.${j(n.authorName)}, s.${j(n.customerName)});
10
10
  DELETE FROM ${o} WHERE ${o.hubId} IN (SELECT CAST([value] AS bigint) FROM OPENJSON(${l}));
11
- INSERT INTO ${o} (${B(o.hubId)}, ${B(o.ordinal)}, ${B(o.authorUserId)}, ${B(o.commentText)}) SELECT ${B(o.hubId)}, ${B(o.ordinal)}, ${B(o.authorUserId)}, ${B(o.commentText)} FROM OPENJSON(${i}) WITH (${B(o.hubId)} bigint, ${B(o.ordinal)} int, ${B(o.authorUserId)} bigint, ${B(o.commentText)} nvarchar(max));`},Ei=(e,t)=>U.sql`SELECT ${B(e.hubId)} AS ${U.sql.identifier(Te.hubId)}, LOWER(CONVERT(char(64), ${B(e.sourceDigest)}, 2)) AS ${U.sql.identifier(Te.sourceDigest)}, ${B(e.normalizerVersion)} AS ${U.sql.identifier(Te.normalizerVersion)} FROM ${e} WHERE ${e.hubId} IN (${jt(t)})`,Ii=(e,t,r)=>U.sql`SELECT TOP (${r}) ${B(e.id)} AS ${U.sql.identifier(Te.hubId)} FROM ${e} WHERE ${e.id} > ${t} ORDER BY ${e.id}`;var _i=e=>({search:async(t,r)=>Le(r.scope.visible)?[]:lt(await t.execute(bi(e.tables,r.criteria,{userId:r.viewerUserId,scope:r.scope},e.draftLabelNames))).map(o=>{let a=ft(o[Be.sourceType],Be.sourceType);if(a===null)throw new Error(`[daily-report] search: column ${Be.sourceType} is null`);return{reportHubId:ht(o[Be.reportHubId],Be.reportHubId),businessDate:ft(o[Be.businessDate],Be.businessDate),sourceType:a}}),matchedSets:async(t,r)=>{if(Le(r.scope.visible))return new Map;let n=lt(await t.execute(Di(e.tables,r.plan,{userId:r.viewerUserId,scope:r.scope},e.draftLabelNames,r.ids))),o=2**r.plan.sets.length-1,a=new Map;for(let i of n){let l=i[Rt.matchedSets];if(!(typeof l=="number"&&Number.isSafeInteger(l)&&l>=0&&l<=o))throw new Error(`[daily-report] search: column ${Rt.matchedSets} holds no mask of ${r.plan.sets.length} keywords`);a.set(ht(i[Rt.reportHubId],Rt.reportHubId),l)}return a},facetValues:async(t,r)=>Le(r.scope.visible)?[]:lt(await t.execute(Ai(e.tables,r.column,{userId:r.viewerUserId,scope:r.scope},e.draftLabelNames))).map(o=>{let a=ft(o[Wt.value],Wt.value);if(a===null)throw new Error(`[daily-report] search: column ${Wt.value} is null`);return a})});var ze=require("@aiquants/mssql"),On=require("drizzle-orm");var xi=require("crypto");var zu=Object.freeze({authorName:"author",customerName:"customer"}),Ln=e=>e===null?null:an(e),wi=(e,t,r)=>{let n=Ln(r);if(n!==null&&n.length>Qe.maxValueLength){let o=Qe.maxValueLength;throw new Error(`[daily-report] search index: report ${e}: the ${zu[t]} display value has ${n.length} UTF-16 units after trimming; the host must keep the author and customer display values at most ${o} UTF-16 units`)}return n},zt=e=>e===null?"n;":`s${e.length}:${e}`,Gt="utf16le",Gu=e=>{let t=(0,xi.createHash)("sha256");t.update(`F${e.fields.length};`,Gt);for(let[r,n]of e.fields)t.update(zt(r)+zt(n),Gt);return t.update(`C${e.comments.length};`,Gt),e.comments.forEach((r,n)=>{t.update(`${n};${r.authorUserId===null?"n":`i${r.authorUserId}`};${zt(r.text)}`,Gt)}),t.update(`P;${zt(Ln(e.filterValues.authorName))}${zt(Ln(e.filterValues.customerName))}`,Gt),t.digest("hex")},Nn=e=>{let t=0,r=[];for(let[,o]of e.fields){if(o===null)continue;let a=Ir(o);t+=a.forcedCuts,r.push(a.text)}let n=[];for(let o of e.comments){let a=Ir(o.text);t+=a.forcedCuts,a.text.length!==0&&n.push({ordinal:n.length,authorUserId:o.authorUserId,commentText:a.text})}return{hubId:e.hubId,searchText:Va(r),comments:n,sourceDigest:Gu(e),forcedCuts:t,authorName:wi(e.hubId,"authorName",e.filterValues.authorName),customerName:wi(e.hubId,"customerName",e.filterValues.customerName)}};var Ci=e=>{let t=async(c,s)=>{let y=[];for(let m of(0,ze.chunk)(s,ze.MAX_IN_LIST))for(let S of lt(await c.execute(Si(e.hub,m))))y.push(ht(S[Te.hubId],Te.hubId));return y},r=async(c,s)=>{for(let y of(0,ze.chunk)(s,ze.MAX_IN_LIST))await c.execute(Ti(e.tables,y,e.normalizerVersion))},n=async(c,s)=>{let y=new Map;for(let m of(0,ze.chunk)(s,ze.MAX_IN_LIST))for(let S of lt(await c.execute(Ei(e.tables.document,m))))y.set(ht(S[Te.hubId],Te.hubId),{sourceDigest:ft(S[Te.sourceDigest],Te.sourceDigest),normalizerVersion:ft(S[Te.normalizerVersion],Te.normalizerVersion)});return y},o=async(c,s,y)=>lt(await c.execute(Ii(e.hub,s,y))).map(m=>ht(m[Te.hubId],Te.hubId)),a=async(c,s)=>{let y=await t(c,[...new Set(s)].sort((S,f)=>S-f));if(y.length===0)return;let m=(await e.loadSources(c,y)).map(Nn);m.length>0&&await r(c,m)},i=c=>e.inTransaction(async s=>{await s.execute(On.sql`SET DEADLOCK_PRIORITY LOW`);let y=await t(s,c),m=await n(s,y),S=(await e.loadSources(s,y)).map(Nn),f=S.filter(R=>{let A=m.get(R.hubId);return A===void 0||A.sourceDigest!==R.sourceDigest||A.normalizerVersion!==e.normalizerVersion});return f.length>0&&await r(s,f),await s.execute(On.sql`SET DEADLOCK_PRIORITY NORMAL`),{scanned:S.length,written:f.length,forcedCuts:S.reduce((R,A)=>R+A.forcedCuts,0)}});return{writeHubs:a,reconcile:async(c,s)=>{let{batchSize:y,hubIds:m,signal:S,onProgress:f}=s;te("reconcileSearchIndex: batchSize",y,1,ze.MAX_IN_LIST);let R=ue(),A=m===void 0?null:(0,ze.chunk)([...new Set(m)].sort((w,F)=>w-F),y),b={scanned:0,written:0,skipped:0,forcedCuts:0,lastHubId:null};for(let w=0;;w++){S?.throwIfAborted();let F=A===null?await o(c,b.lastHubId===null?0:b.lastHubId,y):A[w];if(F===void 0||F.length===0)break;let V=await i(F);b={scanned:b.scanned+V.scanned,written:b.written+V.written,skipped:b.skipped+V.scanned-V.written,forcedCuts:b.forcedCuts+V.forcedCuts,lastHubId:F[F.length-1]},f?.(b)}return{...b,elapsedMs:ue()-R}}}};var Pi=require("@aiquants/fuzzy-search/normalize");var vn=255,Or=Object.values(ut).sort((e,t)=>e-t),Ku=new Intl.Segmenter("und",{granularity:"grapheme"}),Ju=(e,t)=>{if(e.text!==t)throw new Error(`[daily-report] search marks: the position-mapped line (${e.text.length} units) differs from the index line (${t.length} units)`);return e},Qu=(e,t)=>e.chunks.length===1&&e.chunks[0].length===1&&e.chunks[0][0].start===0&&e.chunks[0][0].end===t.length,Xu=(e,t,r)=>{let n=e.slice(t,r);if(!(0,Pi.holdsMultiUnitCluster)(n))return null;let o=new Int32Array(r-t),a=new Int32Array(r-t);for(let{index:i,segment:l}of Ku.segment(n))o.fill(t+i,i,i+l.length),a.fill(t+i+l.length,i,i+l.length);return{start:t,clusterStarts:o,clusterEnds:a}},Zu=(e,t,r)=>({start:e.clusterStarts[t-e.start],end:e.clusterEnds[r-1-e.start]}),ed=(e,t,r=Er)=>{let n=new Map;for(let l of t){if(l.text.length===0)throw new Error("[daily-report] search marks: an alternative has an empty text");let c=n.get(l.text);(c===void 0||l.tier<c)&&n.set(l.text,l.tier)}let o=[];if(n.size===0)return o;let a=Ha(e),i=l=>a.rawIndex===null?l:a.rawIndex[l];return _n(a.text,(l,c)=>{let s=In(l,r).text,y=null,m=null;for(let[S,f]of n){let R=s.indexOf(S);if(!(R<0)){if(y===null){let A=En(l,r);y=Ju(Ba(l,A),s),m=Qu(A,l)?null:Xu(e,i(c),i(c+l.length-1)+1)}for(;R>=0;){let A=i(c+y.start[R]),b=i(c+y.end[R+S.length-1]-1)+1;m===null?o.push({start:A,end:b,tier:f}):o.push({...Zu(m,A,b),tier:f}),R=s.indexOf(S,R+1)}}}}),o},td=(e,t,r=Er)=>{let n=ed(e,t,r),o=[];if(n.length===0)return o;let a=Or.map(()=>new Int32Array(e.length+1));for(let{start:s,end:y,tier:m}of n)a[m][s]++,a[m][y]--;let i=new Int32Array(Or.length),l=0,c=vn;for(let s=0;s<=e.length;s++){let y=vn;for(let m=Or.length-1;m>=0;m--){let S=Or[m];i[S]+=a[S][s],i[S]>0&&(y=S)}y!==c&&(c!==vn&&o.push(l,s,c),l=s,c=y)}return o},Mi=(e,t)=>{if(e.combine==="intersection"||e.sets.length===1)return e.sets.flatMap(r=>r.words);if(t===null)throw new Error(`[daily-report] search marks: a union of ${e.sets.length} keywords needs the report's mask of matched keywords`);return e.sets.flatMap((r,n)=>(t&1<<n)===0?[]:r.words)},Li=(e,t)=>{let r=t.flatMap(a=>a.alternatives),n={},o=(a,i)=>{typeof i!="string"||i.length===0||(n[a]={fingerprint:Gr(i),ranges:td(i,r)})};for(let a of Xn)o(Je.field(a),e[a]);e.interviewers.forEach((a,i)=>{o(Je.interviewer(i,"name"),a.name),o(Je.interviewer(i,"affiliation"),a.affiliation)}),e.attachments.forEach((a,i)=>{o(Je.attachment(i),a.fileName)}),e.externalComments.forEach((a,i)=>{o(Je.comment(jr(i),"author"),a.name),o(Je.comment(jr(i),"content"),a.text)});for(let a of e.postedComments)o(Je.comment(a.id,"author"),a.userName),o(Je.comment(a.id,"content"),a.content);return n};var nt=e=>(0,g.getColumns)(e),Ni=er([]),_e=(e,t)=>{if(!e)return null;let r=e instanceof Date?e:new Date(e);if(Number.isNaN(r.getTime()))return typeof e=="string"?e:null;let n=r.getFullYear(),o=n<0?`-${String(-n).padStart(4,"0")}`:String(n).padStart(4,"0"),a=String(r.getMonth()+1).padStart(2,"0"),i=String(r.getDate()).padStart(2,"0");if(t==="YYYY-MM-DD")return`${o}-${a}-${i}`;let l=String(r.getHours()).padStart(2,"0"),c=String(r.getMinutes()).padStart(2,"0"),s=String(r.getSeconds()).padStart(2,"0");return`${o}-${a}-${i} ${l}:${c}:${s}`},nd=e=>{let{length:t}=e;if(t===void 0)throw le("tables.hub.title","a character column with a declared length",t);return te("tables.hub.title.length",t,1)},Oi=e=>e===""?null:e,od=Object.freeze([]),kn=(e,t,r)=>{let n=e.get(t);n?n.push(r):e.set(t,[r])},vr=(e,t)=>e.get(t)??od,vi=(e,t)=>[e,t].filter(r=>typeof r=="string"&&r.length>0).join(Tr),ad=e=>{let t=new Set;return e.filter(r=>{let n=r.toLowerCase();return t.has(n)?!1:(t.add(n),!0)})};function kr(e){let{db:t,tables:r,userTable:n,resolveUserId:o,encodeUserId:a,redis:i,cache:l,epochs:c}=e,{hub:s,internal:y,comment:m,label:S,hubLabel:f,userStatus:R}=r,A=e.externalSources??[],b=e.draftLabelNames&&e.draftLabelNames.length>0?e.draftLabelNames:[e.draftLabelName??"\u4E0B\u66F8\u304D"],w=b[0]??"\u4E0B\u66F8\u304D",F=Se(e.logger,1,"Service");Sr(e);let V=fa(e.attachments),P=nd(s.title),I=u=>(0,Pt.runWithTransactionRetry)(d=>t.transaction(p=>d(()=>u(p))),e.transactionRetry),q=e.search===void 0?null:fi(e.search,A.map(u=>u.sourceType)),$={hub:s,hubLabel:f,label:S},H=q===null?null:_i({tables:{...$,search:q.tables},draftLabelNames:b}),ce=null,de=()=>{if(q===null)return null;if(ce===null){let u=q.externalSourceTexts;ce=Ci({hub:s,tables:q.tables,loadSources:(d,p)=>fs(d,p,u),inTransaction:I,normalizerVersion:Ya()})}return ce},ge=e.idsTtlMs??18e4,G="daily-report:ids:epoch",re=e.businessDateTtlMs??3e5,ee="daily-report:date-epoch:",se="daily-report:detail-epoch:",fe=`${e.streamKey??"daily-report:sse-stream"}:v2`,Ge=e.streamMaxLen??1e4,ne=u=>c.incrementEpoch(u),Ne=u=>Ut(s.sourceType,u),Fe=(u,d)=>Nr($,u,b,d),we=async(u,d)=>{let p=await i?.getClient();if(!p){F.warn(`[SSE] Redis client unavailable (${d})`);return}let h=JSON.stringify(u),T=Buffer.byteLength(h);if(T>6356992){F.warn(`[SSE] Event too large (${d}): ${T} bytes > ${6356992}; not published`);return}let x=ue();try{await p.xAdd(fe,"*",{data:h},{TRIM:{strategy:"MAXLEN",strategyModifier:"~",threshold:Ge}});let L=ue()-x;L>1e3&&F.warn(`[SSE] Slow publish (${d}): ${L}ms`)}catch(L){F.error(`[SSE] Redis publish failed (${d}):`,L)}},Ve=async()=>{try{let u=await i?.getClient();if(u===void 0)return null;let[d]=await u.xRevRange(fe,"+","-",{COUNT:1});return d===void 0?null:d.id}catch(u){return F.error("SSE stream anchor read failed",u),null}},O=u=>u==null||u===""?null:/^\d+$/.test(u)?a(Number(u)):u,E=()=>{let u={};for(let d of A)u[`ext_${d.sourceType}`]=nt(d.table);return u},C=u=>{let d=u;for(let p of A)d=d.leftJoin(p.table,(0,g.and)((0,g.eq)(s.sourceType,p.sourceType),(0,g.eq)(s.sourceIdNum,p.idColumn)));return d},Y=u=>{let{hub:d,internal:p}=u,h=d.summary,T=[],x=null,L=null,k=null,N=null,W=null,_=null,X=[],ie=A.find(pe=>pe.sourceType===d.sourceType),De=ie?u[`ext_${ie.sourceType}`]:void 0;if(ie&&De){let pe=ie.mapRow(De);pe.content!==void 0&&(h=pe.content),pe.employeeName!==void 0&&(_=pe.employeeName),pe.category!==void 0&&(x=pe.category),pe.creationCategory!==void 0&&(L=pe.creationCategory),pe.visitTimeFrom!==void 0&&(k=pe.visitTimeFrom),pe.visitTimeTo!==void 0&&(N=pe.visitTimeTo),pe.customerName!==void 0&&(W=pe.customerName),pe.interviewers!==void 0&&(T=pe.interviewers),pe.externalComments!==void 0&&(X=pe.externalComments)}else d.sourceType==="Internal"&&p&&(h=p.body);return{content:h,author:u.creatorName??O(d.createdBy)??"",employeeName:_??u.creatorName??O(d.createdBy),updatedBy:O(d.updatedBy),category:x,creationCategory:L,visitTimeFrom:k,visitTimeTo:N,customerName:W,interviewers:T,externalComments:X}},j=(u,d,p)=>{let{hub:h}=d,T=Y(d),x=(d.labels??[]).map(_=>({id:_.id,name:_.name,color:_.color})),L=d.postedCommentRows??[],k=Me(u.commentable,h.sourceType),N=T.creationCategory?b.includes(T.creationCategory):!1,W=Ee?.[0]??null;return N&&W&&!x.some(_=>_.id===W)&&x.push({id:W,name:w,color:null}),{reportHubId:h.id,date:_e(h.businessDate,"YYYY-MM-DD"),author:T.author,userId:h.userId?a(h.userId):"",sourceType:h.sourceType??"Internal",createdAt:_e(h.createdAt,"YYYY-MM-DD HH:mm:ss"),updatedAt:_e(h.updatedAt,"YYYY-MM-DD HH:mm:ss"),updatedBy:T.updatedBy,employeeName:T.employeeName,category:T.category,creationCategory:T.creationCategory,visitTimeFrom:T.visitTimeFrom,visitTimeTo:T.visitTimeTo,customerName:T.customerName,interviewers:T.interviewers,subject:h.title,content:T.content,externalComments:k?T.externalComments:[],isRead:d.isRead??!1,isStarred:d.isStarred??!1,labels:x,postedComments:L.filter(_=>Oa({authorUserId:_.userId},h.sourceType,p??null,u)).map(_=>({..._,userId:a(_.userId),isMine:p?_.userId===p:!1})),attachments:d.attachments}},J=async(u,d)=>(await t.select({reportHubId:s.id,businessDate:s.businessDate,sourceType:s.sourceType}).from(s).where((0,g.and)((0,g.isNull)(s.deletedAt),Fe(d,"author-or-authorless"),Ne(u.visible))).orderBy((0,g.desc)(s.businessDate),(0,g.desc)(s.id))).map(h=>({...h,businessDate:_e(h.businessDate,"YYYY-MM-DD")})),K=async(u,d,p)=>{let h=await M(d);return h?Le(u.visible)?[]:(await t.select({reportHubId:s.id,businessDate:s.businessDate,sourceType:s.sourceType}).top(p).from(s).where((0,g.and)((0,g.isNull)(s.deletedAt),Fe(h,"author-or-authorless"),Ne(u.visible))).orderBy((0,g.desc)(s.businessDate),(0,g.desc)(s.id))).map(x=>({...x,businessDate:_e(x.businessDate,"YYYY-MM-DD")})):[]},z=async(u,d)=>{let p=await C(t.select({hub:nt(s),internal:nt(y),creatorName:n.displayName,...E()}).from(s)).leftJoin(y,(0,g.eq)(s.id,y.hubId)).leftJoin(n,(0,g.eq)(s.userId,n.id)).where((0,g.and)((0,g.eq)(s.businessDate,g.sql`${d}`),(0,g.isNull)(s.deletedAt),Ne(u.visible))).orderBy((0,g.desc)(s.id)),h=await Qt(p.map(T=>T.hub.id));return p.map(T=>j(u,{...T,attachments:h.get(T.hub.id)??[]}))},Q=new Map,M=async u=>{if(!e.disableUserIdCache&&Q.has(u))return Q.get(u)??null;let d=await o(u);return d!==null&&!e.disableUserIdCache&&Q.set(u,d),d},ae=async(u,d,{forceRefresh:p=!1,snapshot:h=!1,ttlMsOverride:T,onFetchStart:x,admission:L}={})=>{let k=await M(d);if(!k)return{items:[],streamAnchor:null,snapshot:Ni};if(Le(u.visible))return{items:[],streamAnchor:await Ve(),snapshot:Ni};let N=Qa(k,$t(u)),[W]=await l.getOrFetch({cacheKey:N,fetcher:async()=>{let _=await Ve(),X=await J(u,k);if(!Wn(X)){F.warn("ids array is not in stream order; re-sorting (check SQL ORDER BY vs compareIdsStreamOrder, or concurrent row movement during the scan)");let ie=[...X].sort(tr);return[{items:ie,streamAnchor:_,snapshot:er(ie)}]}return[{items:X,streamAnchor:_,snapshot:er(X)}]},onFetchStart:x,forceRefresh:p,snapshot:h,admission:L,ttlMsOverride:T??ge,epochKey:G,refreshAheadRatio:.5});if(W===void 0)throw new Error("[daily-report] getDailyReportIdsByExternalId: the ids cache returned no record");return W},be=(u,d,{forceRefresh:p=!1,snapshot:h=!1,ttlMsOverride:T}={})=>{let x=Oe(d);return x?Le(u.visible)?Promise.resolve([]):l.getOrFetch({cacheKey:Xa(x,$t(u)),fetcher:()=>z(u,x),forceRefresh:p,snapshot:h,ttlMsOverride:T??re}):Promise.resolve([])},Ee=null,St=async()=>(Ee!==null||(Ee=(await t.select({id:S.id}).from(S).where((0,g.inArray)(S.name,b)).orderBy(S.id)).map(d=>d.id)),Ee),Fr=async()=>{let u=await St();if(u.length===0)return null;let[d]=await t.select({id:S.id}).top(1).from(S).where((0,g.eq)(S.name,w));return d?.id??u[0]},es=(u,d)=>d!=null?"absent":u!=null?"present":"unknown",Qt=async u=>{let d=new Map,p=r.attachment;if(u.length===0||!p||V===null)return d;let h=V.idCodec,T=V.thumbnails!==null,x=await t.select({id:p.id,hubId:p.hubId,fileName:p.fileName,fileType:p.fileType,fileSize:p.fileSize,createdAt:p.createdAt,objectCheckedAt:p.objectCheckedAt,objectMissingAt:p.objectMissingAt}).from(p).where((0,g.inArray)(p.hubId,u)).orderBy((0,g.asc)(p.createdAt),(0,g.asc)(p.id));for(let L of x){let k=L.fileType?String(L.fileType):null,N=L.fileSize!=null?Number(L.fileSize):null,W=es(L.objectCheckedAt,L.objectMissingAt),_={id:h.encode(Number(L.id)),fileName:String(L.fileName),fileType:k,fileSize:N,createdAt:_e(L.createdAt,"YYYY-MM-DD HH:mm:ss"),state:W,hasThumbnail:T&&W!=="absent"&&fr({fileType:k,fileSize:N},V.maxBytes)},X=d.get(Number(L.hubId));X?X.push(_):d.set(Number(L.hubId),[_])}return d},ts=async(u,d,p)=>{let h=r.attachment;return!h||Le(u.visible)?null:(await t.select({fileName:h.fileName,filePath:h.filePath,fileType:h.fileType,fileSize:h.fileSize}).top(1).from(h).innerJoin(s,(0,g.eq)(s.id,h.hubId)).where((0,g.and)((0,g.eq)(h.id,d),(0,g.isNull)(s.deletedAt),Fe(p,"author"),Ne(u.visible))))[0]??null},rs=async u=>{let d=r.attachment;if(!d)return;let p=new Date;try{await t.update(d).set({objectCheckedAt:p,objectMissingAt:p,updatedAt:p}).where((0,g.eq)(d.id,u))}catch(h){F.error("markAttachmentMissing failed",h)}},ns=async u=>{let d=r.attachment;if(!d)return;let p=new Date;try{await t.update(d).set({objectCheckedAt:p,objectMissingAt:null,updatedAt:p}).where((0,g.eq)(d.id,u))}catch(h){F.error("markAttachmentPresent failed",h)}},Hr=async(u,d,p)=>{let h=await C(t.select({hub:nt(s),internal:nt(y),isRead:R.isRead,isStarred:R.isStarred,creatorName:n.displayName,...E()}).from(s)).leftJoin(y,(0,g.eq)(s.id,y.hubId)).leftJoin(R,(0,g.and)((0,g.eq)(s.id,R.hubId),(0,g.eq)(R.userId,d))).leftJoin(n,(0,g.eq)(s.userId,n.id)).where((0,g.and)(p,(0,g.isNull)(s.deletedAt),Fe(d,"author"),Ne(u.visible))).orderBy((0,g.desc)(s.id));if(h.length===0)return[];let T=h.map(_=>_.hub.id),x=await t.select({hubId:f.hubId,id:S.id,name:S.name,color:S.color}).from(f).innerJoin(S,(0,g.eq)(f.labelId,S.id)).where((0,g.inArray)(f.hubId,T)),L=await t.select({hubId:m.hubId,id:m.id,body:m.body,createdAt:m.createdAt,userId:m.userId,userName:n.displayName}).from(m).leftJoin(n,(0,g.eq)(m.userId,n.id)).where((0,g.inArray)(m.hubId,T)).orderBy((0,g.asc)(m.createdAt)),k=await Qt(T),N=new Map,W=new Map;for(let _ of x){let X=N.get(_.hubId);X||(X=[],N.set(_.hubId,X)),X.push({id:_.id,name:_.name,color:_.color})}for(let _ of L){let X=W.get(_.hubId);X||(X=[],W.set(_.hubId,X)),X.push({id:_.id,content:_.body,createdAt:_e(_.createdAt,"YYYY-MM-DD HH:mm:ss")||"",userId:_.userId,userName:_.userName||""})}return h.map(_=>{let X=_.hub.id;return j(u,{..._,attachments:k.get(X)??[],labels:N.get(X)||[],postedCommentRows:W.get(X)||[]},d)})},os=async(u,d,p,{forceRefresh:h=!1,snapshot:T=!1,ttlMsOverride:x,admission:L}={})=>{let k=await M(p);if(!k)return[];let N=Oe(d);if(!N)return[];if(Le(u.visible))return[];let W=Za(N,k,$t(u));return l.getOrFetch({cacheKey:W,fetcher:()=>Hr(u,k,(0,g.eq)(s.businessDate,g.sql`${N}`)),forceRefresh:h,snapshot:T,admission:L,ttlMsOverride:x??re,epochKey:`${ee}${N}`})},Mt=async(u,d,p,{forceRefresh:h=!1,snapshot:T=!1,ttlMsOverride:x,admission:L}={})=>{if(Le(u.visible))return null;let k=ei(d,p,$t(u));return(await l.getOrFetch({cacheKey:k,fetcher:async()=>{let W=await C(t.select({hub:nt(s),internal:nt(y),isRead:R.isRead,isStarred:R.isStarred,creatorName:n.displayName,...E()}).from(s)).leftJoin(y,(0,g.eq)(s.id,y.hubId)).leftJoin(R,(0,g.and)((0,g.eq)(s.id,R.hubId),(0,g.eq)(R.userId,p))).leftJoin(n,(0,g.eq)(s.userId,n.id)).where((0,g.and)((0,g.eq)(s.id,d),(0,g.isNull)(s.deletedAt),Fe(p,"author"),Ne(u.visible)));if(W.length===0)return[];let _=W[0].hub.id,X=await t.select({id:S.id,name:S.name,color:S.color}).from(f).innerJoin(S,(0,g.eq)(f.labelId,S.id)).where((0,g.eq)(f.hubId,_)),ie=await t.select({id:m.id,body:m.body,createdAt:m.createdAt,userId:m.userId,userName:n.displayName}).from(m).leftJoin(n,(0,g.eq)(m.userId,n.id)).where((0,g.eq)(m.hubId,_)).orderBy((0,g.asc)(m.createdAt)),De=await Qt([_]),pe=X.map(Ke=>({id:Ke.id,name:Ke.name,color:Ke.color})),ws=ie.map(Ke=>({id:Ke.id,content:Ke.body,createdAt:_e(Ke.createdAt,"YYYY-MM-DD HH:mm:ss")||"",userId:Ke.userId,userName:Ke.userName||""}));return[j(u,{...W[0],attachments:De.get(_)??[],labels:pe,postedCommentRows:ws},p)]},forceRefresh:h,snapshot:T,admission:L,ttlMsOverride:x??re,epochKey:`${se}${d}`}))[0]??null},as=async(u,d,p,h={})=>{let T=await M(p);return T?Mt(u,d,T,h):null},is=async(u,d,p)=>{if(d.length>Ie.maxDetailIds)throw le("getDailyReportDetailsByIdsByExternalId: reportHubIds",`at most ${Ie.maxDetailIds} ids`,d.length);let h=await M(p);return!h||d.length===0?[]:Le(u.visible)?[]:Hr(u,h,(0,g.inArray)(s.id,[...d]))},ss=async(u,d)=>{let[p]=await t.select({sourceType:s.sourceType,deletedAt:s.deletedAt}).top(1).from(s).where((0,g.and)((0,g.eq)(s.id,u),Fe(d,"author")));return p??null},Ur=async(u,d,p)=>{let h=await ss(d,p);if(!h||h.deletedAt||!Me(u.visible,h.sourceType))throw new Error("Not Found")},ls=async(u,d,p,h,T,x)=>{await Ur(u,p,d);let L=await t.select().top(1).from(R).where((0,g.and)((0,g.eq)(R.hubId,p),(0,g.eq)(R.userId,d))),k;if(L.length>0?L[0].isStarred!==T?k=(await t.update(R).set({isStarred:T,updatedAt:new Date,updatedBy:String(d)}).output().where((0,g.and)((0,g.eq)(R.hubId,p),(0,g.eq)(R.userId,d))))[0]:k=L[0]:k=(await t.insert(R).output().values({hubId:p,userId:d,isStarred:T,isRead:!1,createdAt:new Date,createdBy:String(d),updatedAt:new Date,updatedBy:String(d)}))[0],h){let N=Oe(h);N&&(l.invalidatePrefix(xt(N,d)),await ne(`${ee}${N}`))}return l.invalidatePrefix(xr(p,d)),await ne(`${se}${p}`),await we(ir.parse({type:"status-update",reportHubId:p,recipientRawUserId:d,statusType:"star",value:T,clientTempId:x}),"setStarStatus"),k},cs=async(u,d,p,h,T,x)=>{await Ur(u,p,d);let L=await t.select().top(1).from(R).where((0,g.and)((0,g.eq)(R.hubId,p),(0,g.eq)(R.userId,d))),k;if(L.length>0?L[0].isRead!==T?k=(await t.update(R).set({isRead:T,updatedAt:new Date,updatedBy:String(d)}).output().where((0,g.and)((0,g.eq)(R.hubId,p),(0,g.eq)(R.userId,d))))[0]:k=L[0]:k=(await t.insert(R).output().values({hubId:p,userId:d,isRead:T,isStarred:!1,createdAt:new Date,createdBy:String(d),updatedAt:new Date,updatedBy:String(d)}))[0],h){let N=Oe(h);N&&(l.invalidatePrefix(xt(N,d)),await ne(`${ee}${N}`))}return l.invalidatePrefix(xr(p,d)),await ne(`${se}${p}`),await we(ir.parse({type:"status-update",reportHubId:p,recipientRawUserId:d,statusType:"read",value:T,clientTempId:x}),"setReadStatus"),k},Un=async(u,d)=>{if(d===null)return;let p=await St();if(p.length===0)return;let[h]=await t.select({hubId:f.hubId}).top(1).from(f).where((0,g.and)((0,g.eq)(f.hubId,u),(0,g.inArray)(f.labelId,p)));return h?d:void 0},us=async(u,d,p,h,T,x)=>{let[L]=await t.select({sourceType:s.sourceType,deletedAt:s.deletedAt,userId:s.userId}).top(1).from(s).where((0,g.eq)(s.id,p));if(!L||L.deletedAt)throw new Error("Not Found");if(await Ur(u,p,d),!Me(u.commentable,L.sourceType))throw new Error("Comments are restricted by the viewer's comment permission");if(L.sourceType.toLowerCase()!=="internal")throw new Error("Comments are restricted for external daily report sources");let k=await Un(p,L.userId),N=de(),W=await I(async De=>{let[pe]=await De.insert(m).output().values({hubId:p,userId:d,body:h,createdAt:new Date,createdBy:String(d),updatedAt:new Date,updatedBy:String(d)});return N!==null&&await N.writeHubs(De,[p]),pe}),[_]=await t.select({displayName:n.displayName}).top(1).from(n).where((0,g.eq)(n.id,d)),X=_?.displayName??"";if(T){let De=Oe(T);De&&(l.invalidatePrefix(qt(De)),await ne(`${ee}${De}`))}l.invalidatePrefix(We(p)),await ne(`${se}${p}`);let ie={id:W.id,userId:a(W.userId),userName:X,content:W.body,createdAt:_e(W.createdAt,"YYYY-MM-DD HH:mm:ss")??"",isMine:!0};return await we(Zr.parse({type:"comment-add",reportHubId:p,comment:ie,clientTempId:x,recipientRawUserId:k,sourceType:L.sourceType}),"addComment"),ie},ds=async(u,d)=>await u.select().top(1).from(m).where((0,g.eq)(m.id,d)),ms=async(u,d,p,h,T,x)=>{let L=await ds(t,h);if(L.length===0)throw new Error("Not Found");if(L[0].hubId!==p)throw new Error("Not Found");let[k]=await t.select({userId:s.userId,sourceType:s.sourceType}).top(1).from(s).where((0,g.eq)(s.id,L[0].hubId));if(!(k&&Me(u.visible,k.sourceType)))throw new Error("Not Found");if(L[0].userId!==d)throw new Error("Unauthorized");let N=await Un(p,k.userId),W=de();if(await I(async _=>{await _.delete(m).where((0,g.eq)(m.id,h)),W!==null&&await W.writeHubs(_,[p])}),T){let _=Oe(T);_&&(l.invalidatePrefix(qt(_)),await ne(`${ee}${_}`))}l.invalidatePrefix(We(p)),await ne(`${se}${p}`),await we(en.parse({type:"comment-delete",reportHubId:p,commentId:h,clientTempId:x,recipientRawUserId:N,sourceType:k?.sourceType}),"deleteComment")},ps=async(u,d)=>{let p=new Map,h=r.attachment;if(!h||V===null)return p;let T=await u.select({hubId:h.hubId,fileName:h.fileName}).from(h).where((0,g.inArray)(h.hubId,[...d])).orderBy((0,g.asc)(h.hubId),(0,g.asc)(h.createdAt),(0,g.asc)(h.id));for(let x of T)kn(p,Number(x.hubId),String(x.fileName));return p},ys=async(u,d,p)=>{let h=new Map;for(let[T,x]of p){let L=new Map;for(let{hub:N}of d)N.sourceType===T&&N.sourceIdNum!==null&&L.set(N.sourceIdNum,N.id);if(L.size===0)continue;let k=await x(u,[...L.keys()]);for(let[N,W]of k){let _=L.get(N);if(_===void 0)throw le(`search.externalSourceTexts.${T} answer key`,"a source id that was asked for",N);if(!(Array.isArray(W)&&W.every(X=>typeof X=="string")))throw le(`search.externalSourceTexts.${T} answer for ${N}`,"an array of strings",W);h.set(_,W)}}return h},hs=(u,d)=>{let p=Y(u),h=[["subject",u.hub.title],["content",p.content],["author",p.author],["employeeName",p.employeeName],["updatedBy",p.updatedBy],["category",p.category],["creationCategory",p.creationCategory],["customerName",p.customerName]];for(let x of p.interviewers)h.push(["interviewerName",x.name??null],["interviewerAffiliation",x.affiliation??null]);for(let x of d.labelNames)h.push(["label",x]);for(let x of d.attachmentNames)h.push(["attachment",x]);for(let x of d.extraTexts)h.push(["extra",x]);let T=[];for(let x of p.externalComments)T.push({authorUserId:null,text:vi(x.name,x.text)});for(let x of d.postedComments)T.push({authorUserId:x.userId,text:vi(x.userName,x.body)});return{hubId:u.hub.id,fields:h,comments:T,filterValues:{authorName:p.employeeName,customerName:p.customerName}}},fs=async(u,d,p)=>{let h=[];for(let T of(0,Pt.chunk)(d,Pt.MAX_IN_LIST)){let x=await C(u.select({hub:nt(s),internal:nt(y),creatorName:n.displayName,...E()}).from(s)).leftJoin(y,(0,g.eq)(s.id,y.hubId)).leftJoin(n,(0,g.eq)(s.userId,n.id)).where((0,g.inArray)(s.id,[...T])).orderBy((0,g.asc)(s.id)),L=new Map,k=await u.select({hubId:f.hubId,name:S.name}).from(f).innerJoin(S,(0,g.eq)(f.labelId,S.id)).where((0,g.inArray)(f.hubId,[...T])).orderBy((0,g.asc)(f.hubId),(0,g.asc)(S.id));for(let ie of k)kn(L,ie.hubId,ie.name);let N=new Map,W=await u.select({hubId:m.hubId,userId:m.userId,body:m.body,userName:n.displayName}).from(m).leftJoin(n,(0,g.eq)(m.userId,n.id)).where((0,g.inArray)(m.hubId,[...T])).orderBy((0,g.asc)(m.hubId),(0,g.asc)(m.createdAt),(0,g.asc)(m.id));for(let ie of W)kn(N,ie.hubId,ie);let _=await ps(u,T),X=await ys(u,x,p);for(let ie of x){let De=ie.hub.id;h.push(hs(ie,{labelNames:vr(L,De),postedComments:vr(N,De),attachmentNames:vr(_,De),extraTexts:vr(X,De)}))}}return h},Rs=(u,d,p)=>H===null?Promise.reject(new Error("[daily-report] searchDailyReports: the search setting is not configured")):H.search(t,{criteria:p,viewerUserId:d,scope:u}),$n=Object.freeze(ad(["Internal",...A.map(u=>u.sourceType)])),Ss=async(u,d)=>{if(H===null)throw new Error("[daily-report] listDailyReportSearchFacets: the search setting is not configured");let p=$n.filter(x=>Me(u.visible,x)),h=await H.facetValues(t,{column:"authorName",viewerUserId:d,scope:u}),T=await H.facetValues(t,{column:"customerName",viewerUserId:d,scope:u});return{sourceTypes:p,authors:h,customers:T}},gs=async(u,d,p,h,T)=>{if(H===null)throw new Error("[daily-report] markDailyReportSearchHits: the search setting is not configured");if(h.length>Ie.maxDetailIds)throw le("markDailyReportSearchHits: reportHubIds",`at most ${Ie.maxDetailIds} ids`,h.length);let{signal:x}=T,L=nr(Vt(p));if(h.length===0||Le(u.visible))return{wordsDigest:L,reports:[]};x.throwIfAborted();let k=await Hr(u,d,(0,g.inArray)(s.id,[...h]));x.throwIfAborted();let N=p.combine==="union"&&p.sets.length>=2&&k.length>0?await H.matchedSets(t,{plan:p,viewerUserId:d,scope:u,ids:k.map(_=>_.reportHubId)}):null,W=[];for(let _ of k){W.length>0&&await new Promise(De=>setImmediate(De)),x.throwIfAborted();let X=N===null?null:N.get(_.reportHubId),ie=X===void 0?0:X;W.push({reportHubId:_.reportHubId,matchedSets:ie,fields:Li(_,Mi(p,ie))})}return{wordsDigest:L,reports:W}},bs=u=>{let d=de();return d===null?Promise.reject(new Error("[daily-report] reconcileSearchIndex: the search setting is not configured")):d.reconcile(t,u)},Ds=async(u,d,p)=>{if(!rr(d))throw le("createDailyReport: businessDate","a business-date key in the canonical form YYYY-MM-DD naming a day from 0001-01-01 to 9999-12-31",d);F.info("createDailyReport called",{userId:u,businessDate:d});let[h]=await t.select({displayName:n.displayName}).from(n).where((0,g.eq)(n.id,u)),T=h?.displayName??a(u),x=de();try{let L=await I(async N=>{F.info("Starting transaction");let W=`internal-temp-${Date.now()}-${Math.random()}`,[_]=await N.insert(s).output().values({sourceType:"Internal",sourceId:W,businessDate:new Date(`${d}T00:00:00Z`),userId:u,title:"(\u7121\u984C)",createdAt:new Date,createdBy:String(u),updatedAt:new Date,updatedBy:String(u)});await N.update(s).set({sourceId:String(_.id)}).where((0,g.eq)(s.id,_.id)),F.info("Hub created",_),await N.insert(y).values({hubId:_.id,body:"",createdAt:new Date,createdBy:String(u),updatedAt:new Date,updatedBy:String(u)}),F.info("Internal created"),F.info("Calling getDraftLabelId");let X=await Fr();F.info("draftLabelId",X);let ie=[];return X&&(await N.insert(f).values({hubId:_.id,labelId:X,createdAt:new Date,createdBy:String(u)}),ie.push({id:X,name:w,color:null})),F.info("Label assigned"),x!==null&&await x.writeHubs(N,[_.id]),{reportHubId:_.id,date:d,createdAt:_e(_.createdAt,"YYYY-MM-DD HH:mm:ss"),author:T,userId:a(u),sourceType:"Internal",employeeName:T,updatedBy:a(u),updatedAt:_e(_.updatedAt,"YYYY-MM-DD HH:mm:ss"),category:null,creationCategory:null,visitTimeFrom:null,visitTimeTo:null,customerName:null,interviewers:[],subject:_.title,content:"",externalComments:[],isRead:!0,isStarred:!1,labels:ie,postedComments:[],attachments:[]}});l.invalidatePrefix(xt(d,u)),l.invalidatePrefix(pt),l.invalidatePrefix(wn(u)),await ne(G),await ne(`${ee}${d}`);let k=await Mt(Pe.unrestricted("post-write self read: the writer always sees the row they just wrote"),L.reportHubId,u,{forceRefresh:!0});if(k){let N=await St(),W=k.labels.some(_=>N.includes(_.id));await we(tn.parse({type:"report-create",reportHubId:k.reportHubId,report:k,clientTempId:p,recipientRawUserId:W?u:void 0}),"createDailyReport")}return k??L}catch(L){throw F.error("Error in createDailyReport",L),L}},Xt=async(u,d)=>await u.select().top(1).from(s).where((0,g.eq)(s.id,d)),$r=async(u,d,p)=>{await u.update(s).set(p).where((0,g.eq)(s.id,d))},Bn=async(u,d,p)=>{await u.update(y).set(p).where((0,g.eq)(y.hubId,d))},Vn=async(u,d,p)=>{await u.delete(f).where((0,g.and)((0,g.eq)(f.hubId,d),(0,g.eq)(f.labelId,p)))},As=async(u,d,p)=>{let h=await Xt(t,u);if(!h.length||h[0].deletedAt)throw new Error("Not Found");if(h[0].userId!==d)throw new Error("Unauthorized");let T=de();if(await I(async x=>{await $r(x,u,{deletedAt:new Date,deletedBy:String(d),updatedAt:new Date,updatedBy:String(d)}),T!==null&&await T.writeHubs(x,[u])}),l.invalidatePrefix(We(u)),l.invalidatePrefix(pt),l.invalidatePrefix(mt),await ne(G),h[0].businessDate){let x=Oe(_e(h[0].businessDate,"YYYY-MM-DD"));x&&await ne(`${ee}${x}`)}await we(on.parse({type:"report-delete",reportHubId:u,clientTempId:p,sourceType:h[0].sourceType}),"deleteDailyReport")},Ts=async(u,d,p,h)=>{let T=await Xt(t,u);if(!T.length||T[0].deletedAt)throw new Error("Not Found");if(T[0].userId!==d)throw new Error("Unauthorized");let x=de();await I(async N=>{p.title!==void 0&&await $r(N,u,{title:Oi(p.title),updatedAt:new Date,updatedBy:String(d)}),p.content!==void 0&&await Bn(N,u,{body:Oi(p.content),updatedAt:new Date,updatedBy:String(d)}),x!==null&&await x.writeHubs(N,[u])}),l.invalidatePrefix(We(u)),l.invalidatePrefix(pt),await ne(`${se}${u}`);let L=Oe(_e(T[0].businessDate,"YYYY-MM-DD"));L&&(l.invalidatePrefix(qt(L)),await ne(`${ee}${L}`));let k=await Mt(Pe.unrestricted("post-write self read: the writer always sees the row they just wrote"),u,d,{forceRefresh:!0});if(k){let N=await St(),W=k.labels.some(_=>N.includes(_.id));await we(rn.parse({type:"report-update",reportHubId:k.reportHubId,report:k,clientTempId:h,recipientRawUserId:W?d:void 0}),"updateDailyReport")}},Es=async(u,d,p)=>{let h=await Xt(t,u);if(!h.length)throw new Error("Not Found");if(h[0].userId!==d)throw new Error("Unauthorized");let T=await Fr();if(!T)return null;let x=de();if(await I(async N=>{await Vn(N,u,T),x!==null&&await x.writeHubs(N,[u])}),l.invalidatePrefix(We(u)),l.invalidatePrefix(pt),l.invalidatePrefix(mt),await ne(G),h[0].businessDate){let N=Oe(_e(h[0].businessDate,"YYYY-MM-DD"));N&&await ne(`${ee}${N}`)}let L=Oe(_e(h[0].businessDate,"YYYY-MM-DD"));L&&l.invalidatePrefix(xt(L,d));let k=await Mt(Pe.unrestricted("post-write self read: the writer always sees the row they just wrote"),u,d,{forceRefresh:!0});return k&&await we(nn.parse({type:"report-publish",reportHubId:k.reportHubId,report:k,clientTempId:p}),"publishDailyReport"),k??null},Is=async(u,d)=>{l.invalidatePrefix(pt),l.invalidatePrefix(mt),await ne(G);for(let p of new Set(u))l.invalidatePrefix(We(p)),await ne(`${se}${p}`);for(let p of new Set(d)){let h=Oe(p);h&&await ne(`${ee}${h}`)}},_s=async()=>{l.clearAll(),Q.clear(),Ee=null,c&&await ne(G),F.info("Server-side DB/SQL caches cleared successfully.")};return{streamKey:fe,streamMaxLen:Ge,attachmentDelivery:V,titleMaxLength:P,searchLimits:q===null?null:{concurrency:q.concurrency,rateLimitPerMinute:q.rateLimitPerMinute},searchFilterSourceTypes:$n,clearCache:_s,invalidateHubReadCaches:Is,getUserIdByExternalId:M,getDailyReportIdsByExternalId:ae,getDailyReportIdsFirstPageByExternalId:K,readSseStreamAnchor:Ve,getDailyReportsByBusinessDate:be,getDailyReportsByBusinessDateByExternalId:os,getDailyReportDetailById:Mt,getDailyReportDetailByIdByExternalId:as,getDailyReportDetailsByIdsByExternalId:is,getDraftLabelId:Fr,searchDailyReports:Rs,markDailyReportSearchHits:gs,listDailyReportSearchFacets:Ss,reconcileSearchIndex:bs,getAttachmentsByHubIds:Qt,getAttachmentForUser:ts,markAttachmentMissing:rs,markAttachmentPresent:ns,setStarStatus:ls,setReadStatus:cs,addComment:us,deleteComment:ms,createDailyReport:Ds,updateDailyReport:Ts,publishDailyReport:Es,deleteDailyReport:As,findDailyReportHubById:Xt,updateDailyReportHub:$r,updateDailyReportInternal:Bn,deleteDailyReportLabel:Vn}}var ki=(e,t,r,n)=>{if(!e)return[];try{let o=JSON.parse(e);return Array.isArray(o)?o.map(r).filter(a=>a!==null):(Se(n,1,"ExternalSource").warn(`Unexpected ${t} format: not an array`),[])}catch(o){return Se(n,1,"ExternalSource").warn(`Failed to parse ${t}:`,o),[]}};var Kt=require("drizzle-orm"),D=require("drizzle-orm/mssql-core");function Fi(e,t){let r=(0,D.mssqlSchema)(e),n=t.userTable,o=r.table("DailyReportHub",{id:(0,D.bigint)("id",{mode:"number"}).identity().notNull(),sourceType:(0,D.nvarchar)("source_type",{length:20}).notNull(),sourceId:(0,D.nvarchar)("source_id",{length:100}).notNull(),sourceIdNum:(0,D.bigint)("source_id_num",{mode:"number"}).generatedAlwaysAs(Kt.sql`TRY_CAST(source_id AS BIGINT)`),businessDate:(0,D.date)("business_date"),userId:(0,D.bigint)("user_id",{mode:"number"}),title:(0,D.nvarchar)("title",{length:200}),summary:(0,D.nvarchar)("summary",{length:"max"}),createdAt:(0,D.datetime2)("created_at").notNull(),createdBy:(0,D.nvarchar)("created_by",{length:50}).notNull(),updatedAt:(0,D.datetime2)("updated_at").notNull(),updatedBy:(0,D.nvarchar)("updated_by",{length:50}).notNull(),deletedAt:(0,D.datetime2)("deleted_at"),deletedBy:(0,D.nvarchar)("deleted_by",{length:50})},m=>[(0,D.primaryKey)({name:`${e}_DailyReportHub_pk`,columns:[m.id]}),(0,D.foreignKey)({name:`${e}_DailyReportHub_user_id_fk`,columns:[m.userId],foreignColumns:[n.id]}),(0,D.index)(`${e}_DailyReportHub_business_date_index`).on(m.businessDate),(0,D.index)(`${e}_DailyReportHub_updated_at_index`).on(m.updatedAt),(0,D.index)(`${e}_DailyReportHub_source_index`).on(m.sourceType,m.sourceId),(0,D.index)(`${e}_DailyReportHub_user_id_index`).on(m.userId),(0,D.index)(`${e}_DailyReportHub_business_date_id_index`).on((0,Kt.desc)(m.businessDate),(0,Kt.desc)(m.id)),(0,D.index)(`${e}_DailyReportHub_deleted_at_index`).on(m.deletedAt)]),a=r.table("DailyReportInternal",{hubId:(0,D.bigint)("hub_id",{mode:"number"}).notNull(),body:(0,D.nvarchar)("body",{length:"max"}),metadata:(0,D.nvarchar)("metadata",{length:"max"}),createdAt:(0,D.datetime2)("created_at").notNull(),createdBy:(0,D.nvarchar)("created_by",{length:50}).notNull(),updatedAt:(0,D.datetime2)("updated_at").notNull(),updatedBy:(0,D.nvarchar)("updated_by",{length:50}).notNull()},m=>[(0,D.primaryKey)({name:`${e}_DailyReportInternal_pk`,columns:[m.hubId]}),(0,D.foreignKey)({name:`${e}_DailyReportInternal_hub_id_fk`,columns:[m.hubId],foreignColumns:[o.id]})]),i=r.table("DailyReportComment",{id:(0,D.bigint)("id",{mode:"number"}).identity().notNull(),hubId:(0,D.bigint)("hub_id",{mode:"number"}).notNull(),userId:(0,D.bigint)("user_id",{mode:"number"}).notNull(),body:(0,D.nvarchar)("body",{length:"max"}).notNull(),createdAt:(0,D.datetime2)("created_at").notNull(),createdBy:(0,D.nvarchar)("created_by",{length:50}).notNull(),updatedAt:(0,D.datetime2)("updated_at").notNull(),updatedBy:(0,D.nvarchar)("updated_by",{length:50}).notNull()},m=>[(0,D.primaryKey)({name:`${e}_DailyReportComment_pk`,columns:[m.id]}),(0,D.foreignKey)({name:`${e}_DailyReportComment_hub_id_fk`,columns:[m.hubId],foreignColumns:[o.id]}),(0,D.foreignKey)({name:`${e}_DailyReportComment_user_id_fk`,columns:[m.userId],foreignColumns:[n.id]}),(0,D.index)(`${e}_DailyReportComment_hub_id_index`).on(m.hubId)]),l=r.table("DailyReportLabel",{id:(0,D.bigint)("id",{mode:"number"}).identity().notNull(),userId:(0,D.bigint)("user_id",{mode:"number"}),name:(0,D.nvarchar)("name",{length:50}).notNull(),color:(0,D.nvarchar)("color",{length:20}),sortOrder:(0,D.int)("sort_order"),createdAt:(0,D.datetime2)("created_at").notNull(),createdBy:(0,D.nvarchar)("created_by",{length:50}).notNull(),updatedAt:(0,D.datetime2)("updated_at").notNull(),updatedBy:(0,D.nvarchar)("updated_by",{length:50}).notNull()},m=>[(0,D.primaryKey)({name:`${e}_DailyReportLabel_pk`,columns:[m.id]}),(0,D.foreignKey)({name:`${e}_DailyReportLabel_user_id_fk`,columns:[m.userId],foreignColumns:[n.id]})]),c=r.table("DailyReportHub_Label",{hubId:(0,D.bigint)("hub_id",{mode:"number"}).notNull(),labelId:(0,D.bigint)("label_id",{mode:"number"}).notNull(),createdAt:(0,D.datetime2)("created_at").notNull(),createdBy:(0,D.nvarchar)("created_by",{length:50}).notNull()},m=>[(0,D.primaryKey)({name:`${e}_DailyReportHub_Label_pk`,columns:[m.hubId,m.labelId]}),(0,D.foreignKey)({name:`${e}_DailyReportHub_Label_hub_id_fk`,columns:[m.hubId],foreignColumns:[o.id]}),(0,D.foreignKey)({name:`${e}_DailyReportHub_Label_label_id_fk`,columns:[m.labelId],foreignColumns:[l.id]})]),s=r.table("DailyReportUserStatus",{hubId:(0,D.bigint)("hub_id",{mode:"number"}).notNull(),userId:(0,D.bigint)("user_id",{mode:"number"}).notNull(),isRead:(0,D.bit)("is_read").default(!1).notNull(),isStarred:(0,D.bit)("is_starred").default(!1).notNull(),createdAt:(0,D.datetime2)("created_at").notNull(),createdBy:(0,D.nvarchar)("created_by",{length:50}).notNull(),updatedAt:(0,D.datetime2)("updated_at").notNull(),updatedBy:(0,D.nvarchar)("updated_by",{length:50}).notNull()},m=>[(0,D.primaryKey)({name:`${e}_DailyReportUserStatus_pk`,columns:[m.hubId,m.userId]}),(0,D.foreignKey)({name:`${e}_DailyReportUserStatus_hub_id_fk`,columns:[m.hubId],foreignColumns:[o.id]}),(0,D.foreignKey)({name:`${e}_DailyReportUserStatus_user_id_fk`,columns:[m.userId],foreignColumns:[n.id]})]),y=r.table("DailyReportAttachment",{id:(0,D.bigint)("id",{mode:"number"}).identity().notNull(),hubId:(0,D.bigint)("hub_id",{mode:"number"}).notNull(),uploadedBy:(0,D.bigint)("uploaded_by",{mode:"number"}),sourceKey:(0,D.nvarchar)("source_key",{length:200}).notNull(),fileName:(0,D.nvarchar)("file_name",{length:255}).notNull(),filePath:(0,D.nvarchar)("file_path",{length:"max"}).notNull(),fileType:(0,D.nvarchar)("file_type",{length:100}),fileSize:(0,D.bigint)("file_size",{mode:"number"}),objectCheckedAt:(0,D.datetime2)("object_checked_at"),objectMissingAt:(0,D.datetime2)("object_missing_at"),createdAt:(0,D.datetime2)("created_at").notNull(),createdBy:(0,D.nvarchar)("created_by",{length:50}).notNull(),updatedAt:(0,D.datetime2)("updated_at").notNull(),updatedBy:(0,D.nvarchar)("updated_by",{length:50}).notNull()},m=>[(0,D.primaryKey)({name:`${e}_DailyReportAttachment_pk`,columns:[m.id]}),(0,D.foreignKey)({name:`${e}_DailyReportAttachment_hub_id_fk`,columns:[m.hubId],foreignColumns:[o.id]}),(0,D.foreignKey)({name:`${e}_DailyReportAttachment_uploaded_by_fk`,columns:[m.uploadedBy],foreignColumns:[n.id]}),(0,D.uniqueIndex)(`${e}_DailyReportAttachment_source_unique`).on(m.hubId,m.sourceKey),(0,D.index)(`${e}_DailyReportAttachment_hub_id_index`).on(m.hubId,m.createdAt)]);return{hub:o,internal:a,comment:i,attachment:y,label:l,hubLabel:c,userStatus:s}}var ye=require("drizzle-orm/mssql-core");function Hi(e){let t=(0,ye.mssqlSchema)(e),r=t.table("DailyReportSearchDocument",{hubId:(0,ye.bigint)("hub_id",{mode:"number"}).notNull(),searchText:(0,ye.nvarchar)("search_text",{length:"max"}).notNull(),sourceDigest:(0,ye.binary)("source_digest",{length:32}).notNull(),normalizerVersion:(0,ye.varchar)("normalizer_version",{length:64}).notNull(),indexedAt:(0,ye.datetime2)("indexed_at").notNull(),rowVersion:(0,ye.binary)("row_version",{length:8}).notNull(),authorName:(0,ye.nvarchar)("author_name",{length:Qe.maxValueLength}),customerName:(0,ye.nvarchar)("customer_name",{length:Qe.maxValueLength})},o=>[(0,ye.primaryKey)({name:`${e}_DailyReportSearchDocument_pk`,columns:[o.hubId]})]),n=t.table("DailyReportSearchComment",{hubId:(0,ye.bigint)("hub_id",{mode:"number"}).notNull(),ordinal:(0,ye.int)("ordinal").notNull(),authorUserId:(0,ye.bigint)("author_user_id",{mode:"number"}),commentText:(0,ye.nvarchar)("comment_text",{length:"max"}).notNull()},o=>[(0,ye.primaryKey)({name:`${e}_DailyReportSearchComment_pk`,columns:[o.hubId,o.ordinal]})]);return{document:r,comment:n}}var id=5e7,Fn=2e8,sd=1,Hn=Object.freeze({fixedBytes:4*1024*1024,pipelineRows:2048,wholeImageBuffer:Object.freeze({"jpeg-single-scan":Object.freeze({kind:"none"}),"jpeg-multi-scan":Object.freeze({kind:"jpeg-coefficients"}),png:Object.freeze({kind:"none"}),"png-interlaced":Object.freeze({kind:"decoded-raster"}),gif:Object.freeze({kind:"canvas",bytesPerPixel:4}),"webp-lossy":Object.freeze({kind:"none"}),"webp-lossy-alpha":Object.freeze({kind:"canvas",bytesPerPixel:5}),"webp-lossless":Object.freeze({kind:"canvas",bytesPerPixel:4}),"webp-animated":Object.freeze({kind:"canvas",bytesPerPixel:9})})}),Ui=125,$i=4,Bi=16,Vi=50,Yi=2,Jt=Object.freeze({renderMs:Ce.renderMs,nanosecondsPerBlockVisit:Ui,margin:$i,maxBlockVisits:Math.floor(Ce.renderMs*1e6/(Ui*$i)),walkBudgetMs:Bi,nanosecondsPerWalkStep:Vi,walkMargin:Yi,maxWalkSteps:Math.floor(Bi*1e6/(Vi*Yi))}),ld=new Map([["uchar",1],["char",1],["ushort",2],["short",2],["uint",4],["int",4],["float",4],["complex",8],["double",8]]),qi=75,ji=4,Wi="#ffffff",cd=1,ud={png:"VipsForeignLoadPngBuffer",jpeg:"VipsForeignLoadJpegBuffer",gif:"VipsForeignLoadNsgifBuffer",webp:"VipsForeignLoadWebpBuffer"},dd=[/out of memory/i,/insufficient memory/i,/memory allocation|allocation failed/i,/(?:cannot|could not|unable to|failed to) allocate/i,/picture memory error/i,/unable to create thread|error creating thread|resource temporarily unavailable/i,/too many open files|no space left on device/i,/\b(?:ENOMEM|EAGAIN|EMFILE|ENFILE|ENOSPC)\b/],zi=Object.freeze({ok:!1,reason:"failed"}),Gi=Object.freeze({ok:!1,reason:"unsupported"}),Ki=e=>({layout:e.multiScan?"jpeg-multi-scan":"jpeg-single-scan",coefficientBytes:Qo(e)}),Ji=(e,t)=>{switch(t){case"jpeg":{let r=gn(e);return r===null?null:Ki(r)}case"png":{let r=ea(e);return r===null?null:{layout:r?"png-interlaced":"png",coefficientBytes:0}}case"gif":return{layout:"gif",coefficientBytes:0};case"webp":{let r=ta(e,Jt.maxWalkSteps);return r===null?null:{layout:`webp-${r}`,coefficientBytes:0}}}},Qi=(e,t)=>{let r=ld.get(t.depth);if(r===void 0)return null;let n=t.channels*r,o=Hn,a=o.wholeImageBuffer[e.layout];return(a.kind==="none"?0:a.kind==="decoded-raster"?t.width*t.height*n:a.kind==="jpeg-coefficients"?e.coefficientBytes:t.width*t.height*a.bytesPerPixel)+o.pipelineRows*t.width*n+o.fixedBytes},Xi=(e,t,r)=>{let n=Ji(e,t);return n===null?null:Qi(n,r)},md=e=>e!==null&&e<=Fn,pd=(e,t)=>{if(t!=="jpeg")return Ji(e,t);let r=Xo(e,Jt);return r===null||r.blockVisits>Jt.maxBlockVisits?null:Ki(r.header)},yd=e=>{let t=e instanceof Error?e.message:"";return dd.some(r=>r.test(t))?"failed":"unsupported"},Zi=e=>{e.cache(!1),e.concurrency(sd),e.block({operation:["VipsForeignLoad"]}),e.unblock({operation:Object.values(ud)});let t=async(n,o,a,i,l)=>{let c=pd(n,o);if(c===null)return Gi;try{let s=e(n,{limitInputPixels:id,animated:!1});if(!md(Qi(c,await s.metadata())))return Gi;if(l.aborted)return zi;let y=await s.rotate().resize({width:a,height:i,fit:"inside",withoutEnlargement:!0}).flatten({background:Wi}).webp({quality:qi,effort:ji}).toBuffer();return{ok:!0,bytes:new Uint8Array(y),contentType:"image/webp"}}catch(s){return{ok:!1,reason:yd(s)}}},r=async(n,{format:o,maxWidth:a,maxHeight:i,signal:l})=>l.aborted?zi:t(n,o,a,i,l);return{id:`sharp-${e.versions.sharp}/vips-${e.versions.vips}/webp-q${qi}-e${ji}/flatten-${Wi}/v${cd}`,render:r}};var hd=4096,fd=6e4;function Rd(e){e.redis||Se(e.logger,2,"Server").warn("redis provider is not injected: cross-worker cache invalidation is disabled (staleness is bounded only by TTL) and SSE publishing is skipped.");let t=Zt(e.redis),r=new bt({defaultTtlMs:te("cacheDefaultTtlMs",e.cacheDefaultTtlMs??fd,1),maxBuckets:te("cacheMaxBuckets",e.cacheMaxBuckets??hd,1)},t),n=kr({...e,cache:r,epochs:t}),o=new Ct({redis:e.redis,streamKey:n.streamKey,cache:r,logger:e.logger}),a=Lr({authenticate:e.authenticate,resolveVisibleSourceTypes:e.resolveVisibleSourceTypes,service:n,encodeUserId:e.encodeUserId,redis:e.redis,sseReader:o,streamKey:n.streamKey,loginRedirectPath:e.loginRedirectPath,enableDevCacheClear:e.enableDevCacheClear,logger:e.logger});return{service:n,cache:r,epochs:t,sseReader:o,streamKey:n.streamKey,knownSourceTypes:[...new Set(["Internal",...(e.externalSources??[]).map(i=>i.sourceType)])],...a}}0&&(module.exports={DAILY_REPORT_ATTACHMENT_THUMBNAIL_MAX_OUTPUT_BYTES,DAILY_REPORT_ATTACHMENT_THUMBNAIL_OUTPUT_MEDIA_TYPES,DAILY_REPORT_SHARP_THUMBNAIL_DECODE_BUDGET_BYTES,DAILY_REPORT_SHARP_THUMBNAIL_DECODE_WORK_MODEL,DAILY_REPORT_SHARP_THUMBNAIL_WORKING_SET_MODEL,DAILY_REPORT_SSE_CATCH_UP_BATCH,DAILY_REPORT_SSE_VISIBILITY_REFRESH_MS,DailyReportSseReader,DailyReportViewerScope,SqlResultCache,createDailyReportHandlers,createDailyReportServer,createDailyReportService,createEpochStore,createSharpThumbnailRenderer,defineDailyReportSchema,defineDailyReportSearchSchema,isStreamIdLte,parseClientTempId,predictSharpThumbnailWorkingSetBytes,readDailyReportSseStreamEntry,transformJsonArray});
11
+ INSERT INTO ${o} (${j(o.hubId)}, ${j(o.ordinal)}, ${j(o.authorUserId)}, ${j(o.commentText)}) SELECT ${j(o.hubId)}, ${j(o.ordinal)}, ${j(o.authorUserId)}, ${j(o.commentText)} FROM OPENJSON(${i}) WITH (${j(o.hubId)} bigint, ${j(o.ordinal)} int, ${j(o.authorUserId)} bigint, ${j(o.commentText)} nvarchar(max));`},ji=(e,t)=>q.sql`SELECT ${j(e.hubId)} AS ${q.sql.identifier(we.hubId)}, LOWER(CONVERT(char(64), ${j(e.sourceDigest)}, 2)) AS ${q.sql.identifier(we.sourceDigest)}, ${j(e.normalizerVersion)} AS ${q.sql.identifier(we.normalizerVersion)} FROM ${e} WHERE ${e.hubId} IN (${zt(t)})`,Wi=(e,t,r)=>q.sql`SELECT TOP (${r}) ${j(e.id)} AS ${q.sql.identifier(we.hubId)} FROM ${e} WHERE ${e.id} > ${t} ORDER BY ${e.id}`;var zi=e=>({search:async(t,r)=>Le(r.scope.visible)?[]:dt(await t.execute(Bi(e.tables,r.criteria,{userId:r.viewerUserId,scope:r.scope},e.draftLabelNames))).map(o=>{let a=bt(o[Be.sourceType],Be.sourceType);if(a===null)throw new Error(`[daily-report] search: column ${Be.sourceType} is null`);return{reportHubId:gt(o[Be.reportHubId],Be.reportHubId),businessDate:bt(o[Be.businessDate],Be.businessDate),sourceType:a}}),matchedSets:async(t,r)=>{if(Le(r.scope.visible))return new Map;let n=dt(await t.execute(Vi(e.tables,r.plan,{userId:r.viewerUserId,scope:r.scope},e.draftLabelNames,r.ids))),o=2**r.plan.sets.length-1,a=new Map;for(let i of n){let l=i[Dt.matchedSets];if(!(typeof l=="number"&&Number.isSafeInteger(l)&&l>=0&&l<=o))throw new Error(`[daily-report] search: column ${Dt.matchedSets} holds no mask of ${r.plan.sets.length} keywords`);a.set(gt(i[Dt.reportHubId],Dt.reportHubId),l)}return a},facetValues:async(t,r)=>Le(r.scope.visible)?[]:dt(await t.execute(qi(e.tables,r.column,{userId:r.viewerUserId,scope:r.scope},e.draftLabelNames))).map(o=>{let a=bt(o[Gt.value],Gt.value);if(a===null)throw new Error(`[daily-report] search: column ${Gt.value} is null`);return a})});var We=require("@aiquants/mssql"),qn=require("drizzle-orm");var Ki=require("crypto");var kd=Object.freeze({authorName:"author",customerName:"customer"}),Bn=e=>e===null?null:mn(e),Gi=(e,t,r)=>{let n=Bn(r);if(n!==null&&n.length>Qe.maxValueLength){let o=Qe.maxValueLength;throw new Error(`[daily-report] search index: report ${e}: the ${kd[t]} display value has ${n.length} UTF-16 units after trimming; the host must keep the author and customer display values at most ${o} UTF-16 units`)}return n},Kt=e=>e===null?"n;":`s${e.length}:${e}`,Jt="utf16le",vd=e=>{let t=(0,Ki.createHash)("sha256");t.update(`F${e.fields.length};`,Jt);for(let[r,n]of e.fields)t.update(Kt(r)+Kt(n),Jt);return t.update(`C${e.comments.length};`,Jt),e.comments.forEach((r,n)=>{t.update(`${n};${r.authorUserId===null?"n":`i${r.authorUserId}`};${Kt(r.text)}`,Jt)}),t.update(`P;${Kt(Bn(e.filterValues.authorName))}${Kt(Bn(e.filterValues.customerName))}`,Jt),t.digest("hex")},Vn=e=>{let t=0,r=[];for(let[,o]of e.fields){if(o===null)continue;let a=_r(o);t+=a.forcedCuts,r.push(a.text)}let n=[];for(let o of e.comments){let a=_r(o.text);t+=a.forcedCuts,a.text.length!==0&&n.push({ordinal:n.length,authorUserId:o.authorUserId,commentText:a.text})}return{hubId:e.hubId,searchText:oi(r),comments:n,sourceDigest:vd(e),forcedCuts:t,authorName:Gi(e.hubId,"authorName",e.filterValues.authorName),customerName:Gi(e.hubId,"customerName",e.filterValues.customerName)}};var Ji=e=>{let t=async(c,s)=>{let m=[];for(let u of(0,We.chunk)(s,We.MAX_IN_LIST))for(let f of dt(await c.execute(Ui(e.hub,u))))m.push(gt(f[we.hubId],we.hubId));return m},r=async(c,s)=>{for(let m of(0,We.chunk)(s,We.MAX_IN_LIST))await c.execute(Yi(e.tables,m,e.normalizerVersion))},n=async(c,s)=>{let m=new Map;for(let u of(0,We.chunk)(s,We.MAX_IN_LIST))for(let f of dt(await c.execute(ji(e.tables.document,u))))m.set(gt(f[we.hubId],we.hubId),{sourceDigest:bt(f[we.sourceDigest],we.sourceDigest),normalizerVersion:bt(f[we.normalizerVersion],we.normalizerVersion)});return m},o=async(c,s,m)=>dt(await c.execute(Wi(e.hub,s,m))).map(u=>gt(u[we.hubId],we.hubId)),a=async(c,s)=>{let m=await t(c,[...new Set(s)].sort((f,h)=>f-h));if(m.length===0)return;let u=(await e.loadSources(c,m)).map(Vn);u.length>0&&await r(c,u)},i=c=>e.inTransaction(async s=>{await s.execute(qn.sql`SET DEADLOCK_PRIORITY LOW`);let m=await t(s,c),u=await n(s,m),f=(await e.loadSources(s,m)).map(Vn),h=f.filter(R=>{let D=u.get(R.hubId);return D===void 0||D.sourceDigest!==R.sourceDigest||D.normalizerVersion!==e.normalizerVersion});return h.length>0&&await r(s,h),await s.execute(qn.sql`SET DEADLOCK_PRIORITY NORMAL`),{scanned:f.length,written:h.length,forcedCuts:f.reduce((R,D)=>R+D.forcedCuts,0)}});return{writeHubs:a,reconcile:async(c,s)=>{let{batchSize:m,hubIds:u,signal:f,onProgress:h}=s;re("reconcileSearchIndex: batchSize",m,1,We.MAX_IN_LIST);let R=ue(),D=u===void 0?null:(0,We.chunk)([...new Set(u)].sort((E,M)=>E-M),m),S={scanned:0,written:0,skipped:0,forcedCuts:0,lastHubId:null};for(let E=0;;E++){f?.throwIfAborted();let M=D===null?await o(c,S.lastHubId===null?0:S.lastHubId,m):D[E];if(M===void 0||M.length===0)break;let U=await i(M);S={scanned:S.scanned+U.scanned,written:S.written+U.written,skipped:S.skipped+U.scanned-U.written,forcedCuts:S.forcedCuts+U.forcedCuts,lastHubId:M[M.length-1]},h?.(S)}return{...S,elapsedMs:ue()-R}}}};var Zi=require("@aiquants/fuzzy-search/normalize");var Yn=255,Or=Object.values(yt).sort((e,t)=>e-t),Od=new Intl.Segmenter("und",{granularity:"grapheme"}),Te=Object.freeze({split:120,plan:200,normalize:900,map:2200,scan:2,run:700,segment:150,sweep:30,linear:6}),nt=5e5,Fr=Math.floor(nt/Te.linear),Fd=Math.floor(nt/Te.segment),Qi=Math.floor(nt/Te.sweep),es=Math.floor(nt/Te.scan),Wn=Object.freeze({maxRanges:5e5,maxUnits:4e6,maxFieldRanges:1e4,sliceNs:8e6,sliceMs:5}),ts=(e,t)=>{let r=0,n=t(),o=nt,a=!1;return{fits:i=>r===0?!0:r+i>e.sliceNs?!1:(r>=o&&(o=r+nt,a=t()-n>=e.sliceMs),!a),charge:i=>{r+=i},startSlice:()=>{r=0,n=t(),o=nt,a=!1}}},Ef=Object.freeze({fits:()=>!0,charge:()=>{}}),rs=e=>{let t=null;return{step:()=>{if(t!==null)return!0;let r=e.next();return r.done!==!0?!1:(t={result:r.value},!0)},result:()=>{if(t===null)throw new Error("[daily-report] search marks: the walk is not done (step until it returns true)");return t.result}}};var Hd=(e,t)=>{if(e.text!==t)throw new Error(`[daily-report] search marks: the position-mapped line (${e.text.length} units) differs from the index line (${t.length} units)`);return e},Ud=(e,t)=>e.chunks.length===1&&e.chunks[0].length===1&&e.chunks[0][0].start===0&&e.chunks[0][0].end===t.length;function*$d(e,t,r,n){let o=!1;for(let s=t;s<r&&!o;s+=Fr){let m=Math.min(r,s+Fr),u=(m-s)*Te.linear;n.fits(u)||(yield),o=(0,Zi.holdsMultiUnitCluster)(e.slice(s,m)),n.charge(u)}if(!o)return null;let a=new Int32Array(r-t),i=new Int32Array(r-t),l=Od.segment(e.slice(t,r))[Symbol.iterator](),c=l.next();for(;!c.done;){let s=Math.max(Fd,c.value.segment.length);n.fits(s*Te.segment)||(yield);let m=0;for(;!c.done&&m+c.value.segment.length<=s;){let{index:u,segment:f}=c.value;a.fill(t+u,u,u+f.length),i.fill(t+u+f.length,u,u+f.length),m+=f.length,c=l.next()}n.charge(m*Te.segment)}return{start:t,clusterStarts:a,clusterEnds:i}}var Bd=256,Vd=e=>{let t=new Int32Array(e.length),r=0;for(let n=1;n<e.length;n++){for(;r>0&&e.charCodeAt(n)!==e.charCodeAt(r);)r=t[r-1];e.charCodeAt(n)===e.charCodeAt(r)&&r++,t[n]=r}return e.length-t[e.length-1]},qd=e=>{let t=new Map;for(let r of e){if(r.text.length===0)throw new Error("[daily-report] search marks: an alternative has an empty text");let n=t.get(r.text);(n===void 0||r.tier<n)&&t.set(r.text,r.tier)}return[...t].map(([r,n])=>{let o=Vd(r),a=Math.max(es-r.length+1,r.length);if(o===r.length)return{text:r,tier:n,periodic:null,windowStarts:a};let i=r.length%o,l=r.slice(i,o)+r.slice(0,i);return{text:r,tier:n,periodic:{period:o,continuation:l.repeat(Math.ceil(Bd/o))},windowStarts:a}})},Hr=(e,t)=>{let{pieces:r}=e,n=r[e.lastPiece];if(n.plainStart<=t&&t<n.plainStart+n.text.length)return e.lastPiece;let o=0,a=r.length-1;for(;o<a;){let i=o+a+1>>1;r[i].plainStart<=t?o=i:a=i-1}return t>=r[o].plainStart+r[o].text.length?-1:(e.lastPiece=o,o)},Xi=(e,t,r)=>{let n=Hr(e,t);return e.pieces[n>=0?n:Hr(e,r==="start"?t-1:t+1)]},ns=(e,t)=>{let r=Hr(e,t);if(r<0)return os(e,t-1);let n=e.pieces[r];return n.start+n.mapped.start[t-n.plainStart]},os=(e,t)=>{let r=Hr(e,t);if(r<0)return ns(e,t+1);let n=e.pieces[r];return n.start+n.mapped.end[t-n.plainStart]},Yd=()=>({from:0,runStart:-1,last:0,periodicEnd:-1,window:"",windowStart:0,windowEnd:0,closedStart:0,closedEnd:-1}),jd=Object.freeze({kind:"done"}),jn=Object.freeze({kind:"slice"}),Wd=Object.freeze({kind:"clusters"}),zd=(e,t,r,n,o,a)=>{let{plain:i}=e,{text:l,tier:c,periodic:s}=r;for(;;){if(n.closedEnd>=0){if(!o.fits(Te.run))return jn;let h=Xi(e,n.closedStart,"start"),R=Xi(e,n.closedEnd-1,"end");if(h.mapped===null)return{kind:"map",piece:h};if(R.mapped===null)return{kind:"map",piece:R};if(e.isCut&&e.clusters===void 0)return Wd;let D=t(e.offset+ns(e,n.closedStart)),S=t(e.offset+os(e,n.closedEnd-1)-1)+1;n.closedEnd=-1;let E=e.clusters;E==null?a(D,S,c):a(E.clusterStarts[D-E.start],E.clusterEnds[S-1-E.start],c),o.charge(Te.run);continue}if(s!==null&&n.periodicEnd>=0){if(!o.fits(nt))return jn;let{period:h,continuation:R}=s,D=n.periodicEnd,S=Math.min(i.length,D+Math.max(es,R.length)),E=D;for(;E+R.length<=S&&i.startsWith(R,E);)E+=R.length;let M=E+R.length>S&&S<i.length;if(!M)for(;E<i.length&&i.charCodeAt(E)===i.charCodeAt(E-h);)E++;if(o.charge((E-D)*Te.scan),M){n.periodicEnd=E;continue}n.periodicEnd=-1,n.last+=Math.floor((E-n.last-l.length)/h)*h,n.from=n.last+l.length-h+1;continue}if(n.from<0){if(n.runStart<0)return jd;n.closedStart=n.runStart,n.closedEnd=n.last+l.length,n.runStart=-1;continue}if(!o.fits(nt))return jn;n.from>=n.windowEnd&&(n.windowStart=n.from,n.windowEnd=n.from+r.windowStarts,n.window=i.slice(n.from,n.windowEnd+l.length-1));let m=n.from-n.windowStart,u=n.window.indexOf(l,m);if(u<0){o.charge((n.window.length-m)*Te.scan),n.from=n.windowStart+n.window.length===i.length?-1:n.windowEnd;continue}o.charge((u+l.length-m)*Te.scan);let f=n.windowStart+u;(n.runStart<0||f>=n.last+l.length)&&(n.runStart>=0&&(n.closedStart=n.runStart,n.closedEnd=n.last+l.length),n.runStart=f),n.last=f,s===null?n.from=f+1:n.periodicEnd=f+l.length}};function*Gd(e,t,r,n,o){if(t.length===0)return;let a=e.length*Te.split;n.fits(a)||(yield);let i=ei(e),l=[],c=[];vn(i.text,(m,u)=>{l.push(u),c.push(u+m.length)}),n.charge(a);let s=m=>i.rawIndex===null?m:i.rawIndex[m];for(let m=0;m<l.length;m++){let u=l[m],f=i.text.slice(u,c[m]),h=f.length*Te.plan;n.fits(h)||(yield);let R=Ir(f,r);n.charge(h);let D=[],S="";for(let M of R.chunks){let U="",I=[];for(let T of M){let V=(T.end-T.start)*Te.normalize;n.fits(V)||(yield);let L=kn(T.start===0&&T.end===f.length?f:f.slice(T.start,T.end),r).text;n.charge(V),L.length>0&&I.push({start:T.start,end:T.end,text:L,chunkStart:U.length}),U+=L}if(U.length!==0){S.length>0&&(S+=" ");for(let T of I)D.push({start:T.start,end:T.end,text:T.text,plainStart:S.length+T.chunkStart,mapped:null});S+=U}}if(S.length===0)continue;let E={offset:u,plain:S,pieces:D,isCut:!Ud(R,f),lastPiece:0,clusters:void 0};for(let M of t){let U=Yd();for(;;){let I=zd(E,s,M,U,n,o);if(I.kind==="done")break;if(I.kind==="slice"){yield;continue}if(I.kind==="clusters"){E.clusters=yield*$d(e,s(u),s(u+f.length-1)+1,n);continue}let{piece:T}=I,V=(T.end-T.start)*Te.map;n.fits(V)||(yield);let L=f.slice(T.start,T.end);T.mapped=Hd(ni(L,Ir(L,r)),T.text),n.charge(V)}}}}function*Kd(e,t,r,n){let o=new Int32Array(Or.length),a=0,i=Yn;for(let l=0;l<=e;l+=Qi){let c=Math.min(e+1,l+Qi),s=(c-l)*Te.sweep;r.fits(s)||(yield);for(let m=l;m<c;m++){let u=Yn;for(let f=Or.length-1;f>=0;f--){let h=Or[f];o[h]+=t[h][m],o[h]>0&&(u=h)}if(u!==i){if(i!==Yn&&!n(a,m,i))return!1;a=m,i=u}}r.charge(s)}return!0}function*Jd(e,t,r,n,o){let a=null;return yield*Gd(e,t,r,n,(l,c,s)=>{a===null&&(a=Or.map(()=>new Int32Array(e.length+1))),a[s][l]++,a[s][c]--}),a===null?!0:yield*Kd(e.length,a,n,o)}var Qd=(e,t,r,n)=>{let o=qd(t),a=[],i=(c,s,m)=>(a.push(c,s,m),a.length<=3*r.maxRanges);return rs(function*(){return(yield*Jd(e,o,r.maxLength,n,i))?{dense:!1,ranges:a}:{dense:!0}}())};var as=(e,t)=>{if(e.combine==="intersection"||e.sets.length===1)return e.sets.flatMap(r=>r.words);if(t===null)throw new Error(`[daily-report] search marks: a union of ${e.sets.length} keywords needs the report's mask of matched keywords`);return e.sets.flatMap((r,n)=>(t&1<<n)===0?[]:r.words)},is=e=>{let t=[],r=(n,o)=>{typeof o=="string"&&o.length>0&&t.push({key:n,value:o})};for(let n of mo)r(Je.field(n),e[n]);e.interviewers.forEach((n,o)=>{r(Je.interviewer(o,"name"),n.name),r(Je.interviewer(o,"affiliation"),n.affiliation)}),e.attachments.forEach((n,o)=>{r(Je.attachment(o),n.fileName)}),e.externalComments.forEach((n,o)=>{r(Je.comment(Qr(o),"author"),n.name),r(Je.comment(Qr(o),"content"),n.text)});for(let n of e.postedComments)r(Je.comment(n.id,"author"),n.userName),r(Je.comment(n.id,"content"),n.content);return t};function*Xd(e,t){let r=en;for(let n=0;n<e.length;n+=Fr){let o=Math.min(e.length,n+Fr),a=(o-n)*Te.linear;t.fits(a)||(yield),r=tn(r,e,n,o),t.charge(a)}return r}var ss=async(e,t,r,n)=>{let o=0,a=0,i=async s=>{for(;!s.step();)await r(),n.startSlice();return s.result()},l=async(s,m)=>{if(!m&&a>t.maxRanges)return null;let u={};for(let{key:f,value:h}of s.fields){if(!m&&o+h.length>t.maxUnits)return null;let R=await i(rs(Xd(h,n))),D=await i(Qd(h,s.alternatives,{maxLength:Ln,maxRanges:t.maxFieldRanges},n));if(o+=h.length,D.dense){u[f]={fingerprint:R,dense:!0};continue}if(u[f]={fingerprint:R,ranges:D.ranges},a+=D.ranges.length/3,!m&&a>t.maxRanges)return null}return u},c=[];for(let s=0;s<e.length;s++){let m=e[s],u=await l(m,c.length===0);if(u===null)return{reports:c,deferred:e.slice(s).map(f=>f.reportHubId)};c.push({reportHubId:m.reportHubId,matchedSets:m.matchedSets,fields:u})}return{reports:c,deferred:[]}};var ot=e=>(0,b.getColumns)(e),ls=or([]),_e=(e,t)=>{if(!e)return null;let r=e instanceof Date?e:new Date(e);if(Number.isNaN(r.getTime()))return typeof e=="string"?e:null;let n=r.getFullYear(),o=n<0?`-${String(-n).padStart(4,"0")}`:String(n).padStart(4,"0"),a=String(r.getMonth()+1).padStart(2,"0"),i=String(r.getDate()).padStart(2,"0");if(t==="YYYY-MM-DD")return`${o}-${a}-${i}`;let l=String(r.getHours()).padStart(2,"0"),c=String(r.getMinutes()).padStart(2,"0"),s=String(r.getSeconds()).padStart(2,"0");return`${o}-${a}-${i} ${l}:${c}:${s}`},ep=e=>{let{length:t}=e;if(t===void 0)throw oe("tables.hub.title","a character column with a declared length",t);return re("tables.hub.title.length",t,1)},cs=e=>e===""?null:e,tp=Object.freeze([]),zn=(e,t,r)=>{let n=e.get(t);n?n.push(r):e.set(t,[r])},Ur=(e,t)=>e.get(t)??tp,us=(e,t)=>[e,t].filter(r=>typeof r=="string"&&r.length>0).join(wr),rp=e=>{if(!Array.isArray(e)||e.length===0||e.some(t=>typeof t!="string"||t.trim().length===0)||new Set(e).size!==e.length)throw oe("draftLabelNames","one or more non-blank label names",e);return Object.freeze([...e])},np=(e,t)=>{let r="the request's AbortSignal (new AbortController().signal for a call that is never aborted)";if(t===void 0)throw Ke(`${e}: options.signal`,r);if(typeof t!="object"||t===null)throw oe(`${e}: options`,"an object carrying the request's AbortSignal",t);let{signal:n}=t;if(n===void 0)throw Ke(`${e}: options.signal`,r);if(!(n instanceof AbortSignal))throw oe(`${e}: options.signal`,r,n);return n},op=e=>{let t=new Set;return e.filter(r=>{let n=r.toLowerCase();return t.has(n)?!1:(t.add(n),!0)})};function $r(e){let{db:t,tables:r,userTable:n,resolveUserId:o,encodeUserId:a,redis:i,cache:l,epochs:c}=e,{hub:s,internal:m,comment:u,label:f,hubLabel:h,userStatus:R}=r,D=e.externalSources??[],S=rp(e.draftLabelNames),E=S[0],M=be(e.logger,1,"Service");br(e);let U=La(e.attachments),I=ep(s.title),T=d=>(0,Lt.runWithTransactionRetry)(p=>t.transaction(y=>p(()=>d(y))),e.transactionRetry),V=e.search===void 0?null:Fi(e.search,D.map(d=>d.sourceType)),L={hub:s,hubLabel:h,label:f},$=V===null?null:zi({tables:{...L,search:V.tables},draftLabelNames:S});V!==null&&On();let de=null,pe=async()=>{if(V===null)return null;if(de===null){let d=await On(),p=V.externalSourceTexts;de=Ji({hub:s,tables:V.tables,loadSources:(y,g)=>zs(y,g,p),inTransaction:T,normalizerVersion:d})}return de},De=e.idsTtlMs??18e4,K="daily-report:ids:epoch",le=e.businessDateTtlMs??3e5,ne="daily-report:date-epoch:",ce="daily-report:detail-epoch:",Re=`${e.streamKey??"daily-report:sse-stream"}:v3`,ze=e.streamMaxLen??1e4,ae=d=>c.incrementEpoch(d),Ne=d=>Bt(s.sourceType,d),Fe=(d,p)=>vr(L,d,S,p),at=b.sql`CASE WHEN ${kr(L,S)} THEN 1 ELSE 0 END`,it=async d=>{let[p]=await t.select({id:s.id}).top(1).from(s).where((0,b.and)((0,b.eq)(s.id,d),kr(L,S)));return p!==void 0},Ee=async(d,p)=>{let y=await i?.getClient();if(!y){M.warn(`[SSE] Redis client unavailable (${p})`);return}let g=JSON.stringify(d),_=Buffer.byteLength(g);if(_>6356992){M.warn(`[SSE] Event too large (${p}): ${_} bytes > ${6356992}; not published`);return}let C=ue();try{await y.xAdd(Re,"*",{data:g},{TRIM:{strategy:"MAXLEN",strategyModifier:"~",threshold:ze}});let x=ue()-C;x>1e3&&M.warn(`[SSE] Slow publish (${p}): ${x}ms`)}catch(x){M.error(`[SSE] Redis publish failed (${p}):`,x)}},w=async()=>{try{let d=await i?.getClient();if(d===void 0)return null;let[p]=await d.xRevRange(Re,"+","-",{COUNT:1});return p===void 0?null:p.id}catch(d){return M.error("SSE stream anchor read failed",d),null}},H=d=>d==null||d===""?null:/^\d+$/.test(d)?a(Number(d)):d,v=()=>{let d={};for(let p of D)d[`ext_${p.sourceType}`]=ot(p.table);return d},N=d=>{let p=d;for(let y of D)p=p.leftJoin(y.table,(0,b.and)((0,b.eq)(s.sourceType,y.sourceType),(0,b.eq)(s.sourceIdNum,y.idColumn)));return p},B=d=>{let{hub:p,internal:y}=d,g=p.summary,_=[],C=null,x=null,F=null,k=null,Y=null,X=null,Q=[],W=D.find(te=>te.sourceType===p.sourceType),ee=W?d[`ext_${W.sourceType}`]:void 0;if(W&&ee){let te=W.mapRow(ee);te.content!==void 0&&(g=te.content),te.employeeName!==void 0&&(X=te.employeeName),te.category!==void 0&&(C=te.category),te.creationCategory!==void 0&&(x=te.creationCategory),te.visitTimeFrom!==void 0&&(F=te.visitTimeFrom),te.visitTimeTo!==void 0&&(k=te.visitTimeTo),te.customerName!==void 0&&(Y=te.customerName),te.interviewers!==void 0&&(_=te.interviewers),te.externalComments!==void 0&&(Q=te.externalComments)}else p.sourceType==="Internal"&&y&&(g=y.body);return{content:g,author:d.creatorName??H(p.createdBy)??"",employeeName:X??d.creatorName??H(p.createdBy),updatedBy:H(p.updatedBy),category:C,creationCategory:x,visitTimeFrom:F,visitTimeTo:k,customerName:Y,interviewers:_,externalComments:Q}},z=d=>{if(d===1)return!0;if(d===0)return!1;throw new Error(`[daily-report] a detail row's hasDraftLabel must be 1 or 0 (the read must select draftLabelFlag); got ${Gr(d)}`)},J=d=>d.creationCategory!==null&&S.includes(d.creationCategory),G=(d,p)=>z(d.hasDraftLabel)?!0:J(p),Z=d=>d.some(J)?Qn():Promise.resolve(null),O=(d,p,y,g,_)=>{let{hub:C}=p,x=(p.labels??[]).map(Y=>({id:Y.id,name:Y.name,color:Y.color})),F=p.postedCommentRows??[],k=Pe(d.commentable,C.sourceType);return g!==null&&J(y)&&!x.some(Y=>Y.id===g)&&x.push({id:g,name:E,color:null}),{reportHubId:C.id,date:_e(C.businessDate,"YYYY-MM-DD"),author:y.author,userId:C.userId?a(C.userId):"",sourceType:C.sourceType??"Internal",createdAt:_e(C.createdAt,"YYYY-MM-DD HH:mm:ss"),updatedAt:_e(C.updatedAt,"YYYY-MM-DD HH:mm:ss"),updatedBy:y.updatedBy,employeeName:y.employeeName,category:y.category,creationCategory:y.creationCategory,visitTimeFrom:y.visitTimeFrom,visitTimeTo:y.visitTimeTo,customerName:y.customerName,interviewers:y.interviewers,subject:C.title,content:y.content,externalComments:k?y.externalComments:[],isRead:p.isRead??!1,isStarred:p.isStarred??!1,isDraft:G(p,y),labels:x,postedComments:F.filter(Y=>Ja({authorUserId:Y.userId},C.sourceType,_??null,d)).map(Y=>({...Y,userId:a(Y.userId),isMine:_?Y.userId===_:!1})),attachments:p.attachments}},ie=async(d,p)=>(await t.select({reportHubId:s.id,businessDate:s.businessDate,sourceType:s.sourceType}).from(s).where((0,b.and)((0,b.isNull)(s.deletedAt),Fe(p,"author-or-authorless"),Ne(d.visible))).orderBy((0,b.desc)(s.businessDate),(0,b.desc)(s.id))).map(g=>({...g,businessDate:_e(g.businessDate,"YYYY-MM-DD")})),Se=async(d,p,y)=>{let g=await At(p);return g?Le(d.visible)?[]:(await t.select({reportHubId:s.id,businessDate:s.businessDate,sourceType:s.sourceType}).top(y).from(s).where((0,b.and)((0,b.isNull)(s.deletedAt),Fe(g,"author-or-authorless"),Ne(d.visible))).orderBy((0,b.desc)(s.businessDate),(0,b.desc)(s.id))).map(C=>({...C,businessDate:_e(C.businessDate,"YYYY-MM-DD")})):[]},ye=async(d,p)=>{let y=await N(t.select({hub:ot(s),internal:ot(m),creatorName:n.displayName,hasDraftLabel:at,...v()}).from(s)).leftJoin(m,(0,b.eq)(s.id,m.hubId)).leftJoin(n,(0,b.eq)(s.userId,n.id)).where((0,b.and)((0,b.eq)(s.businessDate,b.sql`${p}`),(0,b.isNull)(s.deletedAt),Ne(d.visible))).orderBy((0,b.desc)(s.id)),g=await er(y.map(x=>x.hub.id)),_=y.map(B),C=await Z(_);return y.map((x,F)=>O(d,{...x,attachments:g.get(x.hub.id)??[]},_[F],C))},Zt=new Map,At=async d=>{if(!e.disableUserIdCache&&Zt.has(d))return Zt.get(d)??null;let p=await o(d);return p!==null&&!e.disableUserIdCache&&Zt.set(d,p),p},Cs=async(d,p,{forceRefresh:y=!1,snapshot:g=!1,ttlMsOverride:_,onFetchStart:C,admission:x}={})=>{let F=await At(p);if(!F)return{items:[],streamAnchor:null,snapshot:ls};if(Le(d.visible))return{items:[],streamAnchor:await w(),snapshot:ls};let k=mi(F,Vt(d)),[Y]=await l.getOrFetch({cacheKey:k,fetcher:async()=>{let X=await w(),Q=await ie(d,F);if(!lo(Q)){M.warn("ids array is not in stream order; re-sorting (check SQL ORDER BY vs compareIdsStreamOrder, or concurrent row movement during the scan)");let W=[...Q].sort(Jr);return[{items:W,streamAnchor:X,snapshot:or(W)}]}return[{items:Q,streamAnchor:X,snapshot:or(Q)}]},onFetchStart:C,forceRefresh:y,snapshot:g,admission:x,ttlMsOverride:_??De,epochKey:K,refreshAheadRatio:.5});if(Y===void 0)throw new Error("[daily-report] getDailyReportIdsByExternalId: the ids cache returned no record");return Y},Ms=(d,p,{forceRefresh:y=!1,snapshot:g=!1,ttlMsOverride:_}={})=>{let C=ke(p);return C?Le(d.visible)?Promise.resolve([]):l.getOrFetch({cacheKey:yi(C,Vt(d)),fetcher:()=>ye(d,C),forceRefresh:y,snapshot:g,ttlMsOverride:_??le}):Promise.resolve([])},Jn=async d=>{let[p]=await d.select({id:f.id}).top(1).from(f).where((0,b.eq)(f.name,E)).orderBy((0,b.asc)(f.id));return p===void 0?null:p.id},Qn=()=>Jn(t),Ps=(d,p)=>p!=null?"absent":d!=null?"present":"unknown",er=async d=>{let p=new Map,y=r.attachment;if(d.length===0||!y||U===null)return p;let g=U.idCodec,_=U.thumbnails!==null,C=await t.select({id:y.id,hubId:y.hubId,fileName:y.fileName,fileType:y.fileType,fileSize:y.fileSize,createdAt:y.createdAt,objectCheckedAt:y.objectCheckedAt,objectMissingAt:y.objectMissingAt}).from(y).where((0,b.inArray)(y.hubId,d)).orderBy((0,b.asc)(y.createdAt),(0,b.asc)(y.id));for(let x of C){let F=x.fileType?String(x.fileType):null,k=x.fileSize!=null?Number(x.fileSize):null,Y=Ps(x.objectCheckedAt,x.objectMissingAt),X={id:g.encode(Number(x.id)),fileName:String(x.fileName),fileType:F,fileSize:k,createdAt:_e(x.createdAt,"YYYY-MM-DD HH:mm:ss"),state:Y,hasThumbnail:_&&Y!=="absent"&&Sr({fileType:F,fileSize:k},U.maxBytes)},Q=p.get(Number(x.hubId));Q?Q.push(X):p.set(Number(x.hubId),[X])}return p},Ls=async(d,p,y)=>{let g=r.attachment;return!g||Le(d.visible)?null:(await t.select({fileName:g.fileName,filePath:g.filePath,fileType:g.fileType,fileSize:g.fileSize}).top(1).from(g).innerJoin(s,(0,b.eq)(s.id,g.hubId)).where((0,b.and)((0,b.eq)(g.id,p),(0,b.isNull)(s.deletedAt),Fe(y,"author"),Ne(d.visible))))[0]??null},Ns=async d=>{let p=r.attachment;if(!p)return;let y=new Date;try{await t.update(p).set({objectCheckedAt:y,objectMissingAt:y,updatedAt:y}).where((0,b.eq)(p.id,d))}catch(g){M.error("markAttachmentMissing failed",g)}},ks=async d=>{let p=r.attachment;if(!p)return;let y=new Date;try{await t.update(p).set({objectCheckedAt:y,objectMissingAt:null,updatedAt:y}).where((0,b.eq)(p.id,d))}catch(g){M.error("markAttachmentPresent failed",g)}},Br=async(d,p,y)=>{let g=await N(t.select({hub:ot(s),internal:ot(m),isRead:R.isRead,isStarred:R.isStarred,creatorName:n.displayName,hasDraftLabel:at,...v()}).from(s)).leftJoin(m,(0,b.eq)(s.id,m.hubId)).leftJoin(R,(0,b.and)((0,b.eq)(s.id,R.hubId),(0,b.eq)(R.userId,p))).leftJoin(n,(0,b.eq)(s.userId,n.id)).where((0,b.and)(y,(0,b.isNull)(s.deletedAt),Fe(p,"author"),Ne(d.visible))).orderBy((0,b.desc)(s.id));if(g.length===0)return[];let _=g.map(W=>W.hub.id),C=await t.select({hubId:h.hubId,id:f.id,name:f.name,color:f.color}).from(h).innerJoin(f,(0,b.eq)(h.labelId,f.id)).where((0,b.inArray)(h.hubId,_)),x=await t.select({hubId:u.hubId,id:u.id,body:u.body,createdAt:u.createdAt,userId:u.userId,userName:n.displayName}).from(u).leftJoin(n,(0,b.eq)(u.userId,n.id)).where((0,b.inArray)(u.hubId,_)).orderBy((0,b.asc)(u.createdAt)),F=await er(_),k=new Map,Y=new Map;for(let W of C){let ee=k.get(W.hubId);ee||(ee=[],k.set(W.hubId,ee)),ee.push({id:W.id,name:W.name,color:W.color})}for(let W of x){let ee=Y.get(W.hubId);ee||(ee=[],Y.set(W.hubId,ee)),ee.push({id:W.id,content:W.body,createdAt:_e(W.createdAt,"YYYY-MM-DD HH:mm:ss")||"",userId:W.userId,userName:W.userName||""})}let X=g.map(B),Q=await Z(X);return g.map((W,ee)=>{let te=W.hub.id;return O(d,{...W,attachments:F.get(te)??[],labels:k.get(te)||[],postedCommentRows:Y.get(te)||[]},X[ee],Q,p)})},vs=async(d,p,y,{forceRefresh:g=!1,snapshot:_=!1,ttlMsOverride:C,admission:x}={})=>{let F=await At(y);if(!F)return[];let k=ke(p);if(!k)return[];if(Le(d.visible))return[];let Y=hi(k,F,Vt(d));return l.getOrFetch({cacheKey:Y,fetcher:()=>Br(d,F,(0,b.eq)(s.businessDate,b.sql`${k}`)),forceRefresh:g,snapshot:_,admission:x,ttlMsOverride:C??le,epochKey:`${ne}${k}`})},Nt=async(d,p,y,{forceRefresh:g=!1,snapshot:_=!1,ttlMsOverride:C,admission:x}={})=>{if(Le(d.visible))return null;let F=fi(p,y,Vt(d));return(await l.getOrFetch({cacheKey:F,fetcher:async()=>{let Y=await N(t.select({hub:ot(s),internal:ot(m),isRead:R.isRead,isStarred:R.isStarred,creatorName:n.displayName,hasDraftLabel:at,...v()}).from(s)).leftJoin(m,(0,b.eq)(s.id,m.hubId)).leftJoin(R,(0,b.and)((0,b.eq)(s.id,R.hubId),(0,b.eq)(R.userId,y))).leftJoin(n,(0,b.eq)(s.userId,n.id)).where((0,b.and)((0,b.eq)(s.id,p),(0,b.isNull)(s.deletedAt),Fe(y,"author"),Ne(d.visible)));if(Y.length===0)return[];let X=Y[0].hub.id,Q=await t.select({id:f.id,name:f.name,color:f.color}).from(h).innerJoin(f,(0,b.eq)(h.labelId,f.id)).where((0,b.eq)(h.hubId,X)),W=await t.select({id:u.id,body:u.body,createdAt:u.createdAt,userId:u.userId,userName:n.displayName}).from(u).leftJoin(n,(0,b.eq)(u.userId,n.id)).where((0,b.eq)(u.hubId,X)).orderBy((0,b.asc)(u.createdAt)),ee=await er([X]),te=Q.map(Ge=>({id:Ge.id,name:Ge.name,color:Ge.color})),Yr=W.map(Ge=>({id:Ge.id,content:Ge.body,createdAt:_e(Ge.createdAt,"YYYY-MM-DD HH:mm:ss")||"",userId:Ge.userId,userName:Ge.userName||""})),to=B(Y[0]),al=await Z([to]);return[O(d,{...Y[0],attachments:ee.get(X)??[],labels:te,postedCommentRows:Yr},to,al,y)]},forceRefresh:g,snapshot:_,admission:x,ttlMsOverride:C??le,epochKey:`${ce}${p}`}))[0]??null},Os=async(d,p,y,g={})=>{let _=await At(y);return _?Nt(d,p,_,g):null},Fs=async(d,p,y)=>{if(p.length>Ie.maxDetailIds)throw oe("getDailyReportDetailsByIdsByExternalId: reportHubIds",`at most ${Ie.maxDetailIds} ids`,p.length);let g=await At(y);return!g||p.length===0?[]:Le(d.visible)?[]:Br(d,g,(0,b.inArray)(s.id,[...p]))},Hs=async(d,p)=>{let[y]=await t.select({sourceType:s.sourceType,deletedAt:s.deletedAt}).top(1).from(s).where((0,b.and)((0,b.eq)(s.id,d),Fe(p,"author")));return y??null},Vr=async(d,p,y)=>{let g=await Hs(p,y);if(!g||g.deletedAt||!Pe(d.visible,g.sourceType))throw new Error("Not Found")},Us=async(d,p,y,g,_,C)=>{await Vr(d,y,p);let x=await t.select().top(1).from(R).where((0,b.and)((0,b.eq)(R.hubId,y),(0,b.eq)(R.userId,p))),F;if(x.length>0?x[0].isStarred!==_?F=(await t.update(R).set({isStarred:_,updatedAt:new Date,updatedBy:String(p)}).output().where((0,b.and)((0,b.eq)(R.hubId,y),(0,b.eq)(R.userId,p))))[0]:F=x[0]:F=(await t.insert(R).output().values({hubId:y,userId:p,isStarred:_,isRead:!1,createdAt:new Date,createdBy:String(p),updatedAt:new Date,updatedBy:String(p)}))[0],g){let k=ke(g);k&&(l.invalidatePrefix(Mt(k,p)),await ae(`${ne}${k}`))}return l.invalidatePrefix(Mr(y,p)),await ae(`${ce}${y}`),await Ee(lr.parse({type:"status-update",reportHubId:y,recipientRawUserId:p,statusType:"star",value:_,clientTempId:C}),"setStarStatus"),F},$s=async(d,p,y,g,_,C)=>{await Vr(d,y,p);let x=await t.select().top(1).from(R).where((0,b.and)((0,b.eq)(R.hubId,y),(0,b.eq)(R.userId,p))),F;if(x.length>0?x[0].isRead!==_?F=(await t.update(R).set({isRead:_,updatedAt:new Date,updatedBy:String(p)}).output().where((0,b.and)((0,b.eq)(R.hubId,y),(0,b.eq)(R.userId,p))))[0]:F=x[0]:F=(await t.insert(R).output().values({hubId:y,userId:p,isRead:_,isStarred:!1,createdAt:new Date,createdBy:String(p),updatedAt:new Date,updatedBy:String(p)}))[0],g){let k=ke(g);k&&(l.invalidatePrefix(Mt(k,p)),await ae(`${ne}${k}`))}return l.invalidatePrefix(Mr(y,p)),await ae(`${ce}${y}`),await Ee(lr.parse({type:"status-update",reportHubId:y,recipientRawUserId:p,statusType:"read",value:_,clientTempId:C}),"setReadStatus"),F},Xn=async(d,p)=>{if(p!==null)return await it(d)?p:void 0},Bs=async(d,p,y,g,_,C)=>{let[x]=await t.select({sourceType:s.sourceType,deletedAt:s.deletedAt,userId:s.userId}).top(1).from(s).where((0,b.eq)(s.id,y));if(!x||x.deletedAt)throw new Error("Not Found");if(await Vr(d,y,p),!Pe(d.commentable,x.sourceType))throw new Error("Comments are restricted by the viewer's comment permission");if(x.sourceType.toLowerCase()!=="internal")throw new Error("Comments are restricted for external daily report sources");let F=await Xn(y,x.userId),k=await pe(),Y=await T(async ee=>{let[te]=await ee.insert(u).output().values({hubId:y,userId:p,body:g,createdAt:new Date,createdBy:String(p),updatedAt:new Date,updatedBy:String(p)});return k!==null&&await k.writeHubs(ee,[y]),te}),[X]=await t.select({displayName:n.displayName}).top(1).from(n).where((0,b.eq)(n.id,p)),Q=X?.displayName??"";if(_){let ee=ke(_);ee&&(l.invalidatePrefix(Wt(ee)),await ae(`${ne}${ee}`))}l.invalidatePrefix(je(y)),await ae(`${ce}${y}`);let W={id:Y.id,userId:a(Y.userId),userName:Q,content:Y.body,createdAt:_e(Y.createdAt,"YYYY-MM-DD HH:mm:ss")??"",isMine:!0};return await Ee(sn.parse({type:"comment-add",reportHubId:y,comment:W,clientTempId:C,recipientRawUserId:F,sourceType:x.sourceType}),"addComment"),W},Vs=async(d,p)=>await d.select().top(1).from(u).where((0,b.eq)(u.id,p)),qs=async(d,p,y,g,_,C)=>{let x=await Vs(t,g);if(x.length===0)throw new Error("Not Found");if(x[0].hubId!==y)throw new Error("Not Found");let[F]=await t.select({userId:s.userId,sourceType:s.sourceType}).top(1).from(s).where((0,b.eq)(s.id,x[0].hubId));if(!(F&&Pe(d.visible,F.sourceType)))throw new Error("Not Found");if(x[0].userId!==p)throw new Error("Unauthorized");let k=await Xn(y,F.userId),Y=await pe();if(await T(async X=>{await X.delete(u).where((0,b.eq)(u.id,g)),Y!==null&&await Y.writeHubs(X,[y])}),_){let X=ke(_);X&&(l.invalidatePrefix(Wt(X)),await ae(`${ne}${X}`))}l.invalidatePrefix(je(y)),await ae(`${ce}${y}`),await Ee(ln.parse({type:"comment-delete",reportHubId:y,commentId:g,clientTempId:C,recipientRawUserId:k,sourceType:F?.sourceType}),"deleteComment")},Ys=async(d,p)=>{let y=new Map,g=r.attachment;if(!g||U===null)return y;let _=await d.select({hubId:g.hubId,fileName:g.fileName}).from(g).where((0,b.inArray)(g.hubId,[...p])).orderBy((0,b.asc)(g.hubId),(0,b.asc)(g.createdAt),(0,b.asc)(g.id));for(let C of _)zn(y,Number(C.hubId),String(C.fileName));return y},js=async(d,p,y)=>{let g=new Map;for(let[_,C]of y){let x=new Map;for(let{hub:k}of p)k.sourceType===_&&k.sourceIdNum!==null&&x.set(k.sourceIdNum,k.id);if(x.size===0)continue;let F=await C(d,[...x.keys()]);for(let[k,Y]of F){let X=x.get(k);if(X===void 0)throw oe(`search.externalSourceTexts.${_} answer key`,"a source id that was asked for",k);if(!(Array.isArray(Y)&&Y.every(Q=>typeof Q=="string")))throw oe(`search.externalSourceTexts.${_} answer for ${k}`,"an array of strings",Y);g.set(X,Y)}}return g},Ws=(d,p)=>{let y=B(d),g=[["subject",d.hub.title],["content",y.content],["author",y.author],["employeeName",y.employeeName],["updatedBy",y.updatedBy],["category",y.category],["creationCategory",y.creationCategory],["customerName",y.customerName]];for(let C of y.interviewers)g.push(["interviewerName",C.name??null],["interviewerAffiliation",C.affiliation??null]);for(let C of p.labelNames)g.push(["label",C]);for(let C of p.attachmentNames)g.push(["attachment",C]);for(let C of p.extraTexts)g.push(["extra",C]);let _=[];for(let C of y.externalComments)_.push({authorUserId:null,text:us(C.name,C.text)});for(let C of p.postedComments)_.push({authorUserId:C.userId,text:us(C.userName,C.body)});return{hubId:d.hub.id,fields:g,comments:_,filterValues:{authorName:y.employeeName,customerName:y.customerName}}},zs=async(d,p,y)=>{let g=[];for(let _ of(0,Lt.chunk)(p,Lt.MAX_IN_LIST)){let C=await N(d.select({hub:ot(s),internal:ot(m),creatorName:n.displayName,...v()}).from(s)).leftJoin(m,(0,b.eq)(s.id,m.hubId)).leftJoin(n,(0,b.eq)(s.userId,n.id)).where((0,b.inArray)(s.id,[..._])).orderBy((0,b.asc)(s.id)),x=new Map,F=await d.select({hubId:h.hubId,name:f.name}).from(h).innerJoin(f,(0,b.eq)(h.labelId,f.id)).where((0,b.inArray)(h.hubId,[..._])).orderBy((0,b.asc)(h.hubId),(0,b.asc)(f.id));for(let W of F)zn(x,W.hubId,W.name);let k=new Map,Y=await d.select({hubId:u.hubId,userId:u.userId,body:u.body,userName:n.displayName}).from(u).leftJoin(n,(0,b.eq)(u.userId,n.id)).where((0,b.inArray)(u.hubId,[..._])).orderBy((0,b.asc)(u.hubId),(0,b.asc)(u.createdAt),(0,b.asc)(u.id));for(let W of Y)zn(k,W.hubId,W);let X=await Ys(d,_),Q=await js(d,C,y);for(let W of C){let ee=W.hub.id;g.push(Ws(W,{labelNames:Ur(x,ee),postedComments:Ur(k,ee),attachmentNames:Ur(X,ee),extraTexts:Ur(Q,ee)}))}}return g},Gs=(d,p,y)=>$===null?Promise.reject(new Error("[daily-report] searchDailyReports: the search setting is not configured")):$.search(t,{criteria:y,viewerUserId:p,scope:d}),Zn=Object.freeze(op(["Internal",...D.map(d=>d.sourceType)])),Ks=async(d,p)=>{if($===null)throw new Error("[daily-report] listDailyReportSearchFacets: the search setting is not configured");let y=Zn.filter(C=>Pe(d.visible,C)),g=await $.facetValues(t,{column:"authorName",viewerUserId:p,scope:d}),_=await $.facetValues(t,{column:"customerName",viewerUserId:p,scope:d});return{sourceTypes:y,authors:g,customers:_}},Js=async(d,p,y,g,_)=>{let C=np("markDailyReportSearchHits",_);if($===null)throw new Error("[daily-report] markDailyReportSearchHits: the search setting is not configured");if(g.length>Ie.maxDetailIds)throw oe("markDailyReportSearchHits: reportHubIds",`at most ${Ie.maxDetailIds} ids`,g.length);let x=ar(Yt(y));if(g.length===0||Le(d.visible))return{wordsDigest:x,reports:[],deferred:[]};C.throwIfAborted();let F=await Br(d,p,(0,b.inArray)(s.id,[...g]));C.throwIfAborted();let k=y.combine==="union"&&y.sets.length>=2&&F.length>0?await $.matchedSets(t,{plan:y,viewerUserId:p,scope:d,ids:F.map(W=>W.reportHubId)}):null,Y=F.map(W=>{let ee=k===null?null:k.get(W.reportHubId),te=ee===void 0?0:ee;return{reportHubId:W.reportHubId,matchedSets:te,alternatives:as(y,te).flatMap(Yr=>Yr.alternatives),fields:is(W)}}),Q=await ss(Y,Wn,async()=>{await new Promise(W=>setImmediate(W)),C.throwIfAborted()},ts(Wn,ue));return{wordsDigest:x,reports:Q.reports,deferred:Q.deferred}},Qs=async d=>{let p=await pe();if(p===null)throw new Error("[daily-report] reconcileSearchIndex: the search setting is not configured");return p.reconcile(t,d)},Xs=async(d,p,y)=>{if(!nr(p))throw oe("createDailyReport: businessDate","a business-date key in the canonical form YYYY-MM-DD naming a day from 0001-01-01 to 9999-12-31",p);M.info("createDailyReport called",{userId:d,businessDate:p});let[g]=await t.select({displayName:n.displayName}).from(n).where((0,b.eq)(n.id,d)),_=g?.displayName??a(d),C=await pe();try{let x=await T(async k=>{M.info("Starting transaction");let Y=await Jn(k);if(Y===null)throw new Error(`[daily-report] createDailyReport: the canonical draft label ${JSON.stringify(E)} (draftLabelNames[0]) does not exist; create that label before creating reports (a report without it would be visible to every viewer)`);let X=`internal-temp-${Date.now()}-${Math.random()}`,[Q]=await k.insert(s).output().values({sourceType:"Internal",sourceId:X,businessDate:new Date(`${p}T00:00:00Z`),userId:d,title:"(\u7121\u984C)",createdAt:new Date,createdBy:String(d),updatedAt:new Date,updatedBy:String(d)});await k.update(s).set({sourceId:String(Q.id)}).where((0,b.eq)(s.id,Q.id)),M.info("Hub created",Q),await k.insert(m).values({hubId:Q.id,body:"",createdAt:new Date,createdBy:String(d),updatedAt:new Date,updatedBy:String(d)}),M.info("Internal created"),await k.insert(h).values({hubId:Q.id,labelId:Y,createdAt:new Date,createdBy:String(d)});let W=[{id:Y,name:E,color:null}];return M.info("Label assigned"),C!==null&&await C.writeHubs(k,[Q.id]),{reportHubId:Q.id,date:p,createdAt:_e(Q.createdAt,"YYYY-MM-DD HH:mm:ss"),author:_,userId:a(d),sourceType:"Internal",employeeName:_,updatedBy:a(d),updatedAt:_e(Q.updatedAt,"YYYY-MM-DD HH:mm:ss"),category:null,creationCategory:null,visitTimeFrom:null,visitTimeTo:null,customerName:null,interviewers:[],subject:Q.title,content:"",externalComments:[],isRead:!0,isStarred:!1,isDraft:!0,labels:W,postedComments:[],attachments:[]}});l.invalidatePrefix(Mt(p,d)),l.invalidatePrefix(St),l.invalidatePrefix(Fn(d)),await ae(K),await ae(`${ne}${p}`);let F=await Nt(Me.unrestricted("post-write self read: the writer always sees the row they just wrote"),x.reportHubId,d,{forceRefresh:!0});if(F){let k=await it(F.reportHubId);await Ee(cn.parse({type:"report-create",reportHubId:F.reportHubId,report:F,clientTempId:y,recipientRawUserId:k?d:void 0}),"createDailyReport")}return F??x}catch(x){throw M.error("Error in createDailyReport",x),x}},tr=async(d,p)=>await d.select().top(1).from(s).where((0,b.eq)(s.id,p)),qr=async(d,p,y)=>{await d.update(s).set(y).where((0,b.eq)(s.id,p))},eo=async(d,p,y)=>{await d.update(m).set(y).where((0,b.eq)(m.hubId,p))},Zs=async(d,p,y)=>{await d.delete(h).where((0,b.and)((0,b.eq)(h.hubId,p),(0,b.eq)(h.labelId,y)))},el=async(d,p,y)=>{let g=await tr(t,d);if(!g.length||g[0].deletedAt)throw new Error("Not Found");if(g[0].userId!==p)throw new Error("Unauthorized");if(await T(async _=>{await qr(_,d,{deletedAt:new Date,deletedBy:String(p),updatedAt:new Date,updatedBy:String(p)})}),l.invalidatePrefix(je(d)),l.invalidatePrefix(St),l.invalidatePrefix(Rt),await ae(K),g[0].businessDate){let _=ke(_e(g[0].businessDate,"YYYY-MM-DD"));_&&await ae(`${ne}${_}`)}await Ee(pn.parse({type:"report-delete",reportHubId:d,clientTempId:y,sourceType:g[0].sourceType}),"deleteDailyReport")},tl=async(d,p,y,g)=>{let _=await tr(t,d);if(!_.length||_[0].deletedAt)throw new Error("Not Found");if(_[0].userId!==p)throw new Error("Unauthorized");let C=await pe();await T(async k=>{y.title!==void 0&&await qr(k,d,{title:cs(y.title),updatedAt:new Date,updatedBy:String(p)}),y.content!==void 0&&await eo(k,d,{body:cs(y.content),updatedAt:new Date,updatedBy:String(p)}),C!==null&&await C.writeHubs(k,[d])}),l.invalidatePrefix(je(d)),l.invalidatePrefix(St),await ae(`${ce}${d}`);let x=ke(_e(_[0].businessDate,"YYYY-MM-DD"));x&&(l.invalidatePrefix(Wt(x)),await ae(`${ne}${x}`));let F=await Nt(Me.unrestricted("post-write self read: the writer always sees the row they just wrote"),d,p,{forceRefresh:!0});if(F){let k=await it(d);await Ee(un.parse({type:"report-update",reportHubId:F.reportHubId,report:F,clientTempId:g,recipientRawUserId:k?p:void 0}),"updateDailyReport")}},rl=async(d,p,y)=>{let g=await tr(t,d);if(!g.length)throw new Error("Not Found");if(g[0].userId!==p)throw new Error("Unauthorized");let _=await pe();if(await T(async F=>{await F.delete(h).where((0,b.and)((0,b.eq)(h.hubId,d),ki(L,S))),_!==null&&await _.writeHubs(F,[d])}),l.invalidatePrefix(je(d)),l.invalidatePrefix(St),l.invalidatePrefix(Rt),await ae(K),g[0].businessDate){let F=ke(_e(g[0].businessDate,"YYYY-MM-DD"));F&&await ae(`${ne}${F}`)}let C=ke(_e(g[0].businessDate,"YYYY-MM-DD"));C&&l.invalidatePrefix(Mt(C,p));let x=await Nt(Me.unrestricted("post-write self read: the writer always sees the row they just wrote"),d,p,{forceRefresh:!0});if(x){let F=await it(d);await Ee(dn.parse({type:"report-publish",reportHubId:x.reportHubId,report:x,clientTempId:y,recipientRawUserId:F?p:void 0}),"publishDailyReport")}return x??null},nl=async(d,p)=>{l.invalidatePrefix(St),l.invalidatePrefix(Rt),await ae(K);for(let y of new Set(d))l.invalidatePrefix(je(y)),await ae(`${ce}${y}`);for(let y of new Set(p)){let g=ke(y);g&&await ae(`${ne}${g}`)}},ol=async()=>{l.clearAll(),Zt.clear(),c&&await ae(K),M.info("Server-side DB/SQL caches cleared successfully.")};return{streamKey:Re,streamMaxLen:ze,attachmentDelivery:U,titleMaxLength:I,searchLimits:V===null?null:{concurrency:V.concurrency,rateLimitPerMinute:V.rateLimitPerMinute},searchFilterSourceTypes:Zn,clearCache:ol,invalidateHubReadCaches:nl,getUserIdByExternalId:At,getDailyReportIdsByExternalId:Cs,getDailyReportIdsFirstPageByExternalId:Se,readSseStreamAnchor:w,getDailyReportsByBusinessDate:Ms,getDailyReportsByBusinessDateByExternalId:vs,getDailyReportDetailById:Nt,getDailyReportDetailByIdByExternalId:Os,getDailyReportDetailsByIdsByExternalId:Fs,getDraftLabelId:Qn,searchDailyReports:Gs,markDailyReportSearchHits:Js,listDailyReportSearchFacets:Ks,reconcileSearchIndex:Qs,getAttachmentsByHubIds:er,getAttachmentForUser:Ls,markAttachmentMissing:Ns,markAttachmentPresent:ks,setStarStatus:Us,setReadStatus:$s,addComment:Bs,deleteComment:qs,createDailyReport:Xs,updateDailyReport:tl,publishDailyReport:rl,deleteDailyReport:el,findDailyReportHubById:tr,updateDailyReportHub:qr,updateDailyReportInternal:eo,deleteDailyReportLabel:Zs}}var ds=(e,t,r,n)=>{if(!e)return[];try{let o=JSON.parse(e);return Array.isArray(o)?o.map(r).filter(a=>a!==null):(be(n,1,"ExternalSource").warn(`Unexpected ${t} format: not an array`),[])}catch(o){return be(n,1,"ExternalSource").warn(`Failed to parse ${t}:`,o),[]}};var Qt=require("drizzle-orm"),A=require("drizzle-orm/mssql-core");function ps(e,t){let r=(0,A.mssqlSchema)(e),n=t.userTable,o=r.table("DailyReportHub",{id:(0,A.bigint)("id",{mode:"number"}).identity().notNull(),sourceType:(0,A.nvarchar)("source_type",{length:20}).notNull(),sourceId:(0,A.nvarchar)("source_id",{length:100}).notNull(),sourceIdNum:(0,A.bigint)("source_id_num",{mode:"number"}).generatedAlwaysAs(Qt.sql`TRY_CAST(source_id AS BIGINT)`),businessDate:(0,A.date)("business_date"),userId:(0,A.bigint)("user_id",{mode:"number"}),title:(0,A.nvarchar)("title",{length:200}),summary:(0,A.nvarchar)("summary",{length:"max"}),createdAt:(0,A.datetime2)("created_at").notNull(),createdBy:(0,A.nvarchar)("created_by",{length:50}).notNull(),updatedAt:(0,A.datetime2)("updated_at").notNull(),updatedBy:(0,A.nvarchar)("updated_by",{length:50}).notNull(),deletedAt:(0,A.datetime2)("deleted_at"),deletedBy:(0,A.nvarchar)("deleted_by",{length:50})},u=>[(0,A.primaryKey)({name:`${e}_DailyReportHub_pk`,columns:[u.id]}),(0,A.foreignKey)({name:`${e}_DailyReportHub_user_id_fk`,columns:[u.userId],foreignColumns:[n.id]}),(0,A.index)(`${e}_DailyReportHub_business_date_index`).on(u.businessDate),(0,A.index)(`${e}_DailyReportHub_updated_at_index`).on(u.updatedAt),(0,A.index)(`${e}_DailyReportHub_source_index`).on(u.sourceType,u.sourceId),(0,A.index)(`${e}_DailyReportHub_user_id_index`).on(u.userId),(0,A.index)(`${e}_DailyReportHub_business_date_id_index`).on((0,Qt.desc)(u.businessDate),(0,Qt.desc)(u.id)),(0,A.index)(`${e}_DailyReportHub_deleted_at_index`).on(u.deletedAt)]),a=r.table("DailyReportInternal",{hubId:(0,A.bigint)("hub_id",{mode:"number"}).notNull(),body:(0,A.nvarchar)("body",{length:"max"}),metadata:(0,A.nvarchar)("metadata",{length:"max"}),createdAt:(0,A.datetime2)("created_at").notNull(),createdBy:(0,A.nvarchar)("created_by",{length:50}).notNull(),updatedAt:(0,A.datetime2)("updated_at").notNull(),updatedBy:(0,A.nvarchar)("updated_by",{length:50}).notNull()},u=>[(0,A.primaryKey)({name:`${e}_DailyReportInternal_pk`,columns:[u.hubId]}),(0,A.foreignKey)({name:`${e}_DailyReportInternal_hub_id_fk`,columns:[u.hubId],foreignColumns:[o.id]})]),i=r.table("DailyReportComment",{id:(0,A.bigint)("id",{mode:"number"}).identity().notNull(),hubId:(0,A.bigint)("hub_id",{mode:"number"}).notNull(),userId:(0,A.bigint)("user_id",{mode:"number"}).notNull(),body:(0,A.nvarchar)("body",{length:"max"}).notNull(),createdAt:(0,A.datetime2)("created_at").notNull(),createdBy:(0,A.nvarchar)("created_by",{length:50}).notNull(),updatedAt:(0,A.datetime2)("updated_at").notNull(),updatedBy:(0,A.nvarchar)("updated_by",{length:50}).notNull()},u=>[(0,A.primaryKey)({name:`${e}_DailyReportComment_pk`,columns:[u.id]}),(0,A.foreignKey)({name:`${e}_DailyReportComment_hub_id_fk`,columns:[u.hubId],foreignColumns:[o.id]}),(0,A.foreignKey)({name:`${e}_DailyReportComment_user_id_fk`,columns:[u.userId],foreignColumns:[n.id]}),(0,A.index)(`${e}_DailyReportComment_hub_id_index`).on(u.hubId)]),l=r.table("DailyReportLabel",{id:(0,A.bigint)("id",{mode:"number"}).identity().notNull(),userId:(0,A.bigint)("user_id",{mode:"number"}),name:(0,A.nvarchar)("name",{length:50}).notNull(),color:(0,A.nvarchar)("color",{length:20}),sortOrder:(0,A.int)("sort_order"),createdAt:(0,A.datetime2)("created_at").notNull(),createdBy:(0,A.nvarchar)("created_by",{length:50}).notNull(),updatedAt:(0,A.datetime2)("updated_at").notNull(),updatedBy:(0,A.nvarchar)("updated_by",{length:50}).notNull()},u=>[(0,A.primaryKey)({name:`${e}_DailyReportLabel_pk`,columns:[u.id]}),(0,A.foreignKey)({name:`${e}_DailyReportLabel_user_id_fk`,columns:[u.userId],foreignColumns:[n.id]})]),c=r.table("DailyReportHub_Label",{hubId:(0,A.bigint)("hub_id",{mode:"number"}).notNull(),labelId:(0,A.bigint)("label_id",{mode:"number"}).notNull(),createdAt:(0,A.datetime2)("created_at").notNull(),createdBy:(0,A.nvarchar)("created_by",{length:50}).notNull()},u=>[(0,A.primaryKey)({name:`${e}_DailyReportHub_Label_pk`,columns:[u.hubId,u.labelId]}),(0,A.foreignKey)({name:`${e}_DailyReportHub_Label_hub_id_fk`,columns:[u.hubId],foreignColumns:[o.id]}),(0,A.foreignKey)({name:`${e}_DailyReportHub_Label_label_id_fk`,columns:[u.labelId],foreignColumns:[l.id]})]),s=r.table("DailyReportUserStatus",{hubId:(0,A.bigint)("hub_id",{mode:"number"}).notNull(),userId:(0,A.bigint)("user_id",{mode:"number"}).notNull(),isRead:(0,A.bit)("is_read").default(!1).notNull(),isStarred:(0,A.bit)("is_starred").default(!1).notNull(),createdAt:(0,A.datetime2)("created_at").notNull(),createdBy:(0,A.nvarchar)("created_by",{length:50}).notNull(),updatedAt:(0,A.datetime2)("updated_at").notNull(),updatedBy:(0,A.nvarchar)("updated_by",{length:50}).notNull()},u=>[(0,A.primaryKey)({name:`${e}_DailyReportUserStatus_pk`,columns:[u.hubId,u.userId]}),(0,A.foreignKey)({name:`${e}_DailyReportUserStatus_hub_id_fk`,columns:[u.hubId],foreignColumns:[o.id]}),(0,A.foreignKey)({name:`${e}_DailyReportUserStatus_user_id_fk`,columns:[u.userId],foreignColumns:[n.id]})]),m=r.table("DailyReportAttachment",{id:(0,A.bigint)("id",{mode:"number"}).identity().notNull(),hubId:(0,A.bigint)("hub_id",{mode:"number"}).notNull(),uploadedBy:(0,A.bigint)("uploaded_by",{mode:"number"}),sourceKey:(0,A.nvarchar)("source_key",{length:200}).notNull(),fileName:(0,A.nvarchar)("file_name",{length:255}).notNull(),filePath:(0,A.nvarchar)("file_path",{length:"max"}).notNull(),fileType:(0,A.nvarchar)("file_type",{length:100}),fileSize:(0,A.bigint)("file_size",{mode:"number"}),objectCheckedAt:(0,A.datetime2)("object_checked_at"),objectMissingAt:(0,A.datetime2)("object_missing_at"),createdAt:(0,A.datetime2)("created_at").notNull(),createdBy:(0,A.nvarchar)("created_by",{length:50}).notNull(),updatedAt:(0,A.datetime2)("updated_at").notNull(),updatedBy:(0,A.nvarchar)("updated_by",{length:50}).notNull()},u=>[(0,A.primaryKey)({name:`${e}_DailyReportAttachment_pk`,columns:[u.id]}),(0,A.foreignKey)({name:`${e}_DailyReportAttachment_hub_id_fk`,columns:[u.hubId],foreignColumns:[o.id]}),(0,A.foreignKey)({name:`${e}_DailyReportAttachment_uploaded_by_fk`,columns:[u.uploadedBy],foreignColumns:[n.id]}),(0,A.uniqueIndex)(`${e}_DailyReportAttachment_source_unique`).on(u.hubId,u.sourceKey),(0,A.index)(`${e}_DailyReportAttachment_hub_id_index`).on(u.hubId,u.createdAt)]);return{hub:o,internal:a,comment:i,attachment:m,label:l,hubLabel:c,userStatus:s}}var he=require("drizzle-orm/mssql-core");function ms(e){let t=(0,he.mssqlSchema)(e),r=t.table("DailyReportSearchDocument",{hubId:(0,he.bigint)("hub_id",{mode:"number"}).notNull(),searchText:(0,he.nvarchar)("search_text",{length:"max"}).notNull(),sourceDigest:(0,he.binary)("source_digest",{length:32}).notNull(),normalizerVersion:(0,he.varchar)("normalizer_version",{length:64}).notNull(),indexedAt:(0,he.datetime2)("indexed_at").notNull(),rowVersion:(0,he.binary)("row_version",{length:8}).notNull(),authorName:(0,he.nvarchar)("author_name",{length:Qe.maxValueLength}),customerName:(0,he.nvarchar)("customer_name",{length:Qe.maxValueLength})},o=>[(0,he.primaryKey)({name:`${e}_DailyReportSearchDocument_pk`,columns:[o.hubId]})]),n=t.table("DailyReportSearchComment",{hubId:(0,he.bigint)("hub_id",{mode:"number"}).notNull(),ordinal:(0,he.int)("ordinal").notNull(),authorUserId:(0,he.bigint)("author_user_id",{mode:"number"}),commentText:(0,he.nvarchar)("comment_text",{length:"max"}).notNull()},o=>[(0,he.primaryKey)({name:`${e}_DailyReportSearchComment_pk`,columns:[o.hubId,o.ordinal]})]);return{document:r,comment:n}}var ap=5e7,Gn=2e8,ip=1,Kn=Object.freeze({fixedBytes:4*1024*1024,pipelineRows:2048,wholeImageBuffer:Object.freeze({"jpeg-single-scan":Object.freeze({kind:"none"}),"jpeg-multi-scan":Object.freeze({kind:"jpeg-coefficients"}),png:Object.freeze({kind:"none"}),"png-interlaced":Object.freeze({kind:"decoded-raster"}),gif:Object.freeze({kind:"canvas",bytesPerPixel:4}),"webp-lossy":Object.freeze({kind:"none"}),"webp-lossy-alpha":Object.freeze({kind:"canvas",bytesPerPixel:5}),"webp-lossless":Object.freeze({kind:"canvas",bytesPerPixel:4}),"webp-animated":Object.freeze({kind:"canvas",bytesPerPixel:9})})}),ys=125,hs=4,fs=16,Rs=50,Ss=2,Xt=Object.freeze({renderMs:Ce.renderMs,nanosecondsPerBlockVisit:ys,margin:hs,maxBlockVisits:Math.floor(Ce.renderMs*1e6/(ys*hs)),walkBudgetMs:fs,nanosecondsPerWalkStep:Rs,walkMargin:Ss,maxWalkSteps:Math.floor(fs*1e6/(Rs*Ss))}),sp=new Map([["uchar",1],["char",1],["ushort",2],["short",2],["uint",4],["int",4],["float",4],["complex",8],["double",8]]),gs=75,bs=4,Ds="#ffffff",lp=1,cp={png:"VipsForeignLoadPngBuffer",jpeg:"VipsForeignLoadJpegBuffer",gif:"VipsForeignLoadNsgifBuffer",webp:"VipsForeignLoadWebpBuffer"},up=[/out of memory/i,/insufficient memory/i,/memory allocation|allocation failed/i,/(?:cannot|could not|unable to|failed to) allocate/i,/picture memory error/i,/unable to create thread|error creating thread|resource temporarily unavailable/i,/too many open files|no space left on device/i,/\b(?:ENOMEM|EAGAIN|EMFILE|ENFILE|ENOSPC)\b/],As=Object.freeze({ok:!1,reason:"failed"}),Ts=Object.freeze({ok:!1,reason:"unsupported"}),Es=e=>({layout:e.multiScan?"jpeg-multi-scan":"jpeg-single-scan",coefficientBytes:ma(e)}),ws=(e,t)=>{switch(t){case"jpeg":{let r=xn(e);return r===null?null:Es(r)}case"png":{let r=fa(e);return r===null?null:{layout:r?"png-interlaced":"png",coefficientBytes:0}}case"gif":return{layout:"gif",coefficientBytes:0};case"webp":{let r=Ra(e,Xt.maxWalkSteps);return r===null?null:{layout:`webp-${r}`,coefficientBytes:0}}}},Is=(e,t)=>{let r=sp.get(t.depth);if(r===void 0)return null;let n=t.channels*r,o=Kn,a=o.wholeImageBuffer[e.layout];return(a.kind==="none"?0:a.kind==="decoded-raster"?t.width*t.height*n:a.kind==="jpeg-coefficients"?e.coefficientBytes:t.width*t.height*a.bytesPerPixel)+o.pipelineRows*t.width*n+o.fixedBytes},_s=(e,t,r)=>{let n=ws(e,t);return n===null?null:Is(n,r)},dp=e=>e!==null&&e<=Gn,pp=(e,t)=>{if(t!=="jpeg")return ws(e,t);let r=ya(e,Xt);return r===null||r.blockVisits>Xt.maxBlockVisits?null:Es(r.header)},mp=e=>{let t=e instanceof Error?e.message:"";return up.some(r=>r.test(t))?"failed":"unsupported"},xs=e=>{e.cache(!1),e.concurrency(ip),e.block({operation:["VipsForeignLoad"]}),e.unblock({operation:Object.values(cp)});let t=async(n,o,a,i,l)=>{let c=pp(n,o);if(c===null)return Ts;try{let s=e(n,{limitInputPixels:ap,animated:!1});if(!dp(Is(c,await s.metadata())))return Ts;if(l.aborted)return As;let m=await s.rotate().resize({width:a,height:i,fit:"inside",withoutEnlargement:!0}).flatten({background:Ds}).webp({quality:gs,effort:bs}).toBuffer();return{ok:!0,bytes:new Uint8Array(m),contentType:"image/webp"}}catch(s){return{ok:!1,reason:mp(s)}}},r=async(n,{format:o,maxWidth:a,maxHeight:i,signal:l})=>l.aborted?As:t(n,o,a,i,l);return{id:`sharp-${e.versions.sharp}/vips-${e.versions.vips}/webp-q${gs}-e${bs}/flatten-${Ds}/v${lp}`,render:r}};var yp=4096,hp=512*1024*1024,fp=6e4;function Rp(e){e.redis||be(e.logger,2,"Server").warn("redis provider is not injected: cross-worker cache invalidation is disabled (staleness is bounded only by TTL) and SSE publishing is skipped.");let t=rr(e.redis),r=new Tt({defaultTtlMs:re("cacheDefaultTtlMs",e.cacheDefaultTtlMs??fp,1),maxBuckets:re("cacheMaxBuckets",e.cacheMaxBuckets??yp,1),maxBytes:re("cacheMaxBytes",e.cacheMaxBytes??hp,1)},t),n=$r({...e,cache:r,epochs:t}),o=new Pt({redis:e.redis,streamKey:n.streamKey,cache:r,logger:e.logger}),a=Nr({authenticate:e.authenticate,resolveVisibleSourceTypes:e.resolveVisibleSourceTypes,service:n,encodeUserId:e.encodeUserId,redis:e.redis,sseReader:o,streamKey:n.streamKey,loginRedirectPath:e.loginRedirectPath,enableDevCacheClear:e.enableDevCacheClear,logger:e.logger});return{service:n,cache:r,epochs:t,sseReader:o,streamKey:n.streamKey,knownSourceTypes:[...new Set(["Internal",...(e.externalSources??[]).map(i=>i.sourceType)])],...a}}0&&(module.exports={DAILY_REPORT_ATTACHMENT_THUMBNAIL_MAX_OUTPUT_BYTES,DAILY_REPORT_ATTACHMENT_THUMBNAIL_OUTPUT_MEDIA_TYPES,DAILY_REPORT_SHARP_THUMBNAIL_DECODE_BUDGET_BYTES,DAILY_REPORT_SHARP_THUMBNAIL_DECODE_WORK_MODEL,DAILY_REPORT_SHARP_THUMBNAIL_WORKING_SET_MODEL,DAILY_REPORT_SSE_CATCH_UP_BATCH,DAILY_REPORT_SSE_VISIBILITY_REFRESH_MS,DailyReportSseReader,DailyReportViewerScope,SqlResultCache,createDailyReportHandlers,createDailyReportServer,createDailyReportService,createEpochStore,createSharpThumbnailRenderer,defineDailyReportSchema,defineDailyReportSearchSchema,encodeIdsStreamRows,isStreamIdLte,parseClientTempId,predictSharpThumbnailWorkingSetBytes,readDailyReportSseStreamEntry,transformJsonArray});
12
12
  /* v8 ignore next -- @preserve 到達不能: 時間切れと中断の購読はどちらも cleanup で同時に外れ、枠を渡すときも先に cleanup するので、列にいない待機者でここへは来ない。それでも splice(-1) が別の待機者を消さないよう残す */