@aiquants/daily-report 0.24.0 → 0.25.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/CHANGELOG.md +48 -0
- package/README.md +71 -34
- package/dist/client.d.mts +2 -6
- package/dist/client.d.ts +2 -6
- package/dist/client.js +4 -4
- package/dist/client.mjs +4 -4
- package/dist/server.js +4 -4
- package/dist/server.mjs +4 -4
- package/dist/styles/daily-report.standalone.css +1 -1
- package/package.json +4 -9
package/dist/server.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
"use strict";var At=Object.defineProperty;var _n=Object.getOwnPropertyDescriptor;var In=Object.getOwnPropertyNames;var En=Object.prototype.hasOwnProperty;var Kt=e=>{throw TypeError(e)};var Cn=(e,t)=>{for(var r in t)At(e,r,{get:t[r],enumerable:!0})},xn=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of In(t))!En.call(e,a)&&a!==r&&At(e,a,{get:()=>t[a],enumerable:!(n=_n(t,a))||n.enumerable});return e};var vn=e=>xn(At({},"__esModule",{value:!0}),e);var Qt=(e,t,r)=>t.has(e)||Kt("Cannot "+r);var Ve=(e,t,r)=>(Qt(e,t,"read from private field"),r?r.call(e):t.get(e)),Dt=(e,t,r)=>t.has(e)?Kt("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,r),wt=(e,t,r,n)=>(Qt(e,t,"write to private field"),n?n.call(e,r):t.set(e,r),r);var Za={};Cn(Za,{DAILY_REPORT_ATTACHMENT_THUMBNAIL_MAX_OUTPUT_BYTES:()=>Ht,DAILY_REPORT_ATTACHMENT_THUMBNAIL_OUTPUT_MEDIA_TYPES:()=>$t,DAILY_REPORT_SHARP_THUMBNAIL_DECODE_BUDGET_BYTES:()=>zt,DAILY_REPORT_SHARP_THUMBNAIL_WORKING_SET_MODEL:()=>jt,DAILY_REPORT_SSE_CATCH_UP_BATCH:()=>ht,DAILY_REPORT_SSE_VISIBILITY_REFRESH_MS:()=>Yt,DailyReportSseReader:()=>$e,DailyReportViewerScope:()=>ye,SqlResultCache:()=>ke,createDailyReportHandlers:()=>ft,createDailyReportServer:()=>Xa,createDailyReportService:()=>bt,createEpochStore:()=>nt,createSharpThumbnailRenderer:()=>sn,defineDailyReportSchema:()=>Xr,generateETag:()=>Be,isStreamIdLte:()=>De,jsonResponseWithETag:()=>pe,predictSharpThumbnailWorkingSetBytes:()=>on,transformJsonArray:()=>Qr});module.exports=vn(Za);var nt=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{}}}),ke=class{constructor(t,r){this.config=t;this.epochStore=r;this.buckets=new Map;this.inFlight=new Map;this.invalidate=t=>{this.buckets.delete(t),this.inFlight.delete(t)};this.maybeRefreshAhead=t=>{let r=t.refreshAheadRatio;if(r===void 0)return;let{cacheKey:n}=t,a=this.buckets.get(n);if(!a)return;let o=t.ttlMsOverride??this.config.defaultTtlMs;if(o-(a.expireAt-Date.now())<o*r||this.inFlight.has(n))return;let c;c=(async()=>{let T=t.epochKey?await this.epochStore.getEpoch(t.epochKey):null,l=await t.fetcher();return this.inFlight.get(n)===c&&this.buckets.set(n,{records:l,expireAt:Date.now()+o,epoch:T}),l})(),this.inFlight.set(n,c),c.catch(()=>{}).finally(()=>{this.inFlight.get(n)===c&&this.inFlight.delete(n)})};this.getOrFetch=async t=>{let{cacheKey:r,forceRefresh:n,snapshot:a}=t,o=this.buckets.get(r);if(n&&(this.buckets.delete(r),this.inFlight.delete(r)),!n&&o&&o.expireAt>Date.now())if(t.epochKey){let c=await this.epochStore.getEpoch(t.epochKey);if(c===null||o.epoch===c)return this.maybeRefreshAhead(t),a?o.records.map(T=>structuredClone(T)):o.records;this.buckets.delete(r)}else return this.maybeRefreshAhead(t),a?o.records.map(c=>structuredClone(c)):o.records;if(!n&&this.inFlight.has(r)){let c=await this.inFlight.get(r);return a?c.map(T=>structuredClone(T)):c}let p;p=(async()=>{let c=t.epochKey?await this.epochStore.getEpoch(t.epochKey):null;t.onFetchStart?.();let T=await t.fetcher();if(n||this.inFlight.get(r)===p){let l=Date.now()+(t.ttlMsOverride??this.config.defaultTtlMs);this.buckets.set(r,{records:T,expireAt:l,epoch:c}),this.buckets.size>500&&this.cleanExpired()}return T})(),n||this.inFlight.set(r,p);try{let c=await p;return a?c.map(T=>structuredClone(T)):c}finally{this.inFlight.get(r)===p&&this.inFlight.delete(r)}};this.flush=t=>{this.buckets.delete(t),this.inFlight.delete(t)};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)}}cleanExpired(){let t=Date.now();for(let[r,n]of this.buckets.entries())n.expireAt<=t&&this.buckets.delete(r)}};var Wr=require("@aiquants/sse"),we=require("@aiquants/sse/server");var Mn=/^\d{4}-\d{2}-\d{2}$/,Pn=/^\d{4}\/\d{2}\/\d{2}$/,Xt=e=>e<10?`0${e}`:`${e}`,Zt=e=>{if(Number.isNaN(e.getTime()))return null;let t=e.getFullYear(),r=Xt(e.getMonth()+1),n=Xt(e.getDate());return`${t}-${r}-${n}`};var ue=e=>{if(e==null)return null;if(e instanceof Date)return Zt(e);let t=e.trim();if(t==="")return null;if(Mn.test(t))return t;if(Pn.test(t))return t.replaceAll("/","-");let r=new Date(t);return Zt(r)};var _t=e=>{let t=2166136261,r=-624069552;for(let n of e){let a=n.reportHubId;t^=a&255,t=Math.imul(t,16777619),t^=a>>>8&255,t=Math.imul(t,16777619),t^=a>>>16&255,t=Math.imul(t,16777619),t^=a>>>24&255,t=Math.imul(t,16777619),r^=a>>>24&255,r=Math.imul(r,16777619),r^=a>>>16&255,r=Math.imul(r,16777619),r^=a>>>8&255,r=Math.imul(r,16777619),r^=a&255,r=Math.imul(r,16777619);let o=n.businessDate;if(o===null)t^=1,t=Math.imul(t,16777619),r^=1,r=Math.imul(r,16777619);else for(let p=0;p<o.length;p++){let c=o.charCodeAt(p);t^=c&255,t=Math.imul(t,16777619),r^=c&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+(?=.)/,"")},at=(e,t)=>e.businessDate!==t.businessDate?e.businessDate===null?1:t.businessDate===null||e.businessDate>t.businessDate?-1:1:t.reportHubId-e.reportHubId,er=e=>{for(let t=1;t<e.length;t++)if(at(e[t-1],e[t])>0)return!1;return!0};var tr=(e,t)=>{let r=e.findIndex(n=>at({businessDate:n.businessDate,reportHubId:n.reportHubId},t)>0);return r===-1?e.length:r};var me=(e,t,r=console)=>{let n=a=>typeof a=="string"?[`${t} ${a}`]:[t,a];return{debug:(a,...o)=>{e<=0&&r.debug(...n(a),...o)},info:(a,...o)=>{e<=1&&r.info(...n(a),...o)},warn:(a,...o)=>{e<=2&&r.warn(...n(a),...o)},error:(a,...o)=>{e<=3&&r.error(...n(a),...o)}}};var f=require("zod");var rr=15e3,nr="lastEventId",Ln=/^\d{1,15}-\d{1,15}$/,ar=e=>Ln.test(e),kn=f.z.object({name:f.z.string().nullish(),affiliation:f.z.string().nullish()}),Nn=f.z.object({name:f.z.string().nullish(),text:f.z.string().nullish(),color:f.z.string().nullish()}),On=f.z.object({id:f.z.number(),name:f.z.string().nullish(),color:f.z.string().nullish()}),ir=f.z.object({id:f.z.number(),userId:f.z.string().nullish(),userName:f.z.string().nullish(),content:f.z.string().nullish(),createdAt:f.z.string().nullish(),isMine:f.z.boolean()}),Bn=f.z.object({id:f.z.string(),fileName:f.z.string(),fileType:f.z.string().nullable(),fileSize:f.z.number().nullable(),createdAt:f.z.string().nullable(),state:f.z.enum(["present","absent","unknown"]),hasThumbnail:f.z.boolean().default(!1)}),It=f.z.object({reportHubId:f.z.number(),date:f.z.string().nullish(),createdAt:f.z.string().nullish(),author:f.z.string().nullish(),userId:f.z.string().nullish(),sourceType:f.z.string().nullish(),employeeName:f.z.string().nullish(),updatedBy:f.z.string().nullish(),updatedAt:f.z.string().nullish(),category:f.z.string().nullish(),creationCategory:f.z.string().nullish(),visitTimeFrom:f.z.string().nullish(),visitTimeTo:f.z.string().nullish(),customerName:f.z.string().nullish(),interviewers:f.z.array(kn),subject:f.z.string().nullish(),content:f.z.string().nullish(),externalComments:f.z.array(Nn),isRead:f.z.boolean(),isStarred:f.z.boolean(),labels:f.z.array(On),postedComments:f.z.array(ir),attachments:f.z.array(Bn).default([])}),Un=f.z.object({type:f.z.literal("connected")}),it=f.z.object({type:f.z.literal("status-update"),reportHubId:f.z.number(),statusType:f.z.enum(["star","read"]),value:f.z.boolean(),clientTempId:f.z.string(),recipientRawUserId:f.z.number().optional()}),Et=f.z.string().optional(),Ct=f.z.object({type:f.z.literal("comment-add"),reportHubId:f.z.number(),comment:ir,clientTempId:f.z.string(),recipientRawUserId:f.z.number().optional(),sourceType:Et}),xt=f.z.object({type:f.z.literal("comment-delete"),reportHubId:f.z.number(),commentId:f.z.number(),clientTempId:f.z.string(),recipientRawUserId:f.z.number().optional(),sourceType:Et}),vt=f.z.object({type:f.z.literal("report-create"),reportHubId:f.z.number(),report:It,clientTempId:f.z.string(),recipientRawUserId:f.z.number().optional()}),Mt=f.z.object({type:f.z.literal("report-update"),reportHubId:f.z.number(),report:It,clientTempId:f.z.string(),recipientRawUserId:f.z.number().optional()}),Pt=f.z.object({type:f.z.literal("report-publish"),reportHubId:f.z.number(),report:It,clientTempId:f.z.string(),recipientRawUserId:f.z.number().optional()}),Lt=f.z.object({type:f.z.literal("report-delete"),reportHubId:f.z.number(),clientTempId:f.z.string(),sourceType:Et}),or=f.z.discriminatedUnion("type",[Un,it,Ct,xt,vt,Mt,Pt,Lt]);var kt=Object.freeze({tile:Object.freeze({maxWidth:480,maxHeight:320})}),sr=e=>Object.hasOwn(kt,e);var $n="download",Hn="thumbnail",Fn="1";var lr=e=>{let t=e.getAll(Hn),r=e.getAll($n);if(t.length>0&&r.length>0)return{kind:"invalid",reason:"conflict"};if(t.length>0){let[n]=t;return t.length===1&&sr(n)?{kind:"thumbnail",variant:n}:{kind:"invalid",reason:"thumbnail_variant"}}return r.length>0?r.length===1&&r[0]===Fn?{kind:"download"}:{kind:"invalid",reason:"download_value"}:{kind:"inline"}};var ur=(e,t)=>(r,n)=>{let a=n?"markAttachmentPresent":"markAttachmentMissing";e[a](r).catch(o=>{t.error(`${a} failed attachment=${r} message=${o instanceof Error?o.message:"unknown"}`)})};var ot=6e4/1e3,st=5e3/1e3,cr=(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},dr=new Set(["image/png","image/jpeg","image/gif","image/webp","application/pdf","text/plain"]),Yn=/^[\x20-\x7E]+$/,Vn=/^[\w.+-]+\/[\w.+-]+/,Nt=e=>e&&Yn.test(e)&&Vn.test(e)?e:null,mr=e=>encodeURIComponent(e).replace(/['()*]/g,t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`),pr=e=>e.replace(/[^\x20-\x7E]/g,"_").replace(/["\\]/g,"_"),lt=e=>{switch(e){case"not_found":case"denied":case"invalid_path":return 404;case"too_large":return 413;default:return 502}},yr={404:"Attachment not found",413:"Attachment too large",502:"Attachment storage unavailable"},Ne="Attachment request failed";var zn=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 ${zn(r)}`),ut=(e,t)=>new TypeError(`[daily-report] ${e} must be ${t}`);var hr=32*1024*1024,jn=60,Gn=4,Wn=120,Jn=2,Kn=8*1024*1024,he=(e,t,r)=>{if(typeof t=="number"&&Number.isSafeInteger(t)&&t>=r)return t;throw Oe(e,`an integer >= ${r}`,t)},Ie=(e,t,r,n)=>t===void 0?n:he(e,t,r),Qn=[["attachmentThumbnailRenderer",["readAttachment","attachmentIdCodec"]],["readAttachment",["attachmentIdCodec"]],["attachmentIdCodec",["readAttachment"]],["attachmentMaxBytes",["readAttachment"]],["attachmentRateLimitPerMinute",["readAttachment"]],["attachmentConcurrency",["readAttachment"]],["attachmentThumbnailRateLimitPerMinute",["attachmentThumbnailRenderer"]],["attachmentThumbnailConcurrency",["attachmentThumbnailRenderer"]],["attachmentThumbnailCacheBytes",["attachmentThumbnailRenderer"]]],Ot=e=>{for(let[t,r]of Qn){if(e[t]===void 0)continue;let n=r.find(a=>e[a]===void 0);if(n!==void 0)throw ut(n,`injected when ${t} is given`)}},fr=(e,t)=>(Ot({attachmentIdCodec:t.idCodec,readAttachment:t.readAttachment,attachmentThumbnailRenderer:t.thumbnailRenderer,attachmentRateLimitPerMinute:e.attachmentRateLimitPerMinute,attachmentConcurrency:e.attachmentConcurrency,attachmentThumbnailRateLimitPerMinute:e.attachmentThumbnailRateLimitPerMinute,attachmentThumbnailConcurrency:e.attachmentThumbnailConcurrency,attachmentThumbnailCacheBytes:e.attachmentThumbnailCacheBytes}),Object.freeze({originalRateLimitPerMinute:Ie("attachmentRateLimitPerMinute",e.attachmentRateLimitPerMinute,1,jn),originalConcurrency:Ie("attachmentConcurrency",e.attachmentConcurrency,1,Gn),thumbnailRateLimitPerMinute:Ie("attachmentThumbnailRateLimitPerMinute",e.attachmentThumbnailRateLimitPerMinute,1,Wn),thumbnailConcurrency:Ie("attachmentThumbnailConcurrency",e.attachmentThumbnailConcurrency,1,Jn),thumbnailCacheBytes:Ie("attachmentThumbnailCacheBytes",e.attachmentThumbnailCacheBytes,0,Kn)}));var ct=e=>{let t=he("limit",e.limit,1),r=e.queue===null?null:{max:he("queue.max",e.queue.max,0),maxPerOwner:he("queue.maxPerOwner",e.queue.maxPerOwner,0),maxWaitMs:he("queue.maxWaitMs",e.queue.maxWaitMs,1)},n=0,a=[],o=new Map,p=(l,g)=>{let m=(o.get(l)??0)+g;m<=0?o.delete(l):o.set(l,m)},c=()=>{for(;n<t;){let l=a.shift();if(!l)return;p(l.owner,-1),n+=1,l.grant(T())}},T=()=>{let l=!1;return()=>{l||(l=!0,n-=1,c())}};return{acquire:(l,g)=>{if(g.aborted)return Promise.resolve(null);if(n<t)return n+=1,Promise.resolve(T());if(r===null||a.length>=r.max||(o.get(l)??0)>=r.maxPerOwner)return Promise.resolve(null);let{maxWaitMs:m}=r,_=A=>{let E=()=>{let S=a.indexOf(Q);S<0||(a.splice(S,1),p(l,-1),H(),A(null))},J=setTimeout(E,m);J.unref?.();let H=()=>{clearTimeout(J),g.removeEventListener("abort",E)},Q={owner:l,grant:S=>{H(),A(S)}};a.push(Q),p(l,1),g.addEventListener("abort",E,{once:!0})};return new Promise(_)}}};var Xn=1024,ze=e=>{he("limitPerMinute",e,1);let t=new Map,r=(p,c)=>{c<=p.lastRefillMs||(p.tokens=Math.min(e,p.tokens+(c-p.lastRefillMs)*e/6e4),p.lastRefillMs=c)},n=(p,c)=>{let T=t.get(p);T&&t.delete(p);let l=T??{tokens:e,lastRefillMs:c,deniedSinceAdmission:0};r(l,c),t.set(p,l);for(let g of t.keys()){if(t.size<=Xn)break;t.delete(g)}return l},a=p=>{if(p.tokens<1)return null;p.tokens-=1;let c=Math.max(0,p.deniedSinceAdmission-1);return p.deniedSinceAdmission=0,{allowed:!0,suppressedDenials:c}},o=p=>(p.deniedSinceAdmission+=1,{allowed:!1,firstDenial:p.deniedSinceAdmission===1});return{consume:(p,c)=>{let T=n(p,c);return a(T)??o(T)},refund:(p,c,T)=>{let l=t.get(p);l&&(r(l,c),l.tokens=Math.min(e,l.tokens+T))}}};var Zn=12e4,ea=(e,t,r)=>{let n=setTimeout(t,r);n.unref?.();let a=()=>{clearTimeout(n),t()},o=!1;return new ReadableStream({pull(p){if(o){p.close(),a();return}o=!0,p.enqueue(e)},cancel(){a()}})},br=e=>{let{service:t,encodeUserId:r,resolveViewerScope:n,logger:a,recordObjectState:o}=e,p=t.attachmentDelivery,c=ze(e.rateLimitPerMinute),T=ct({limit:e.concurrency,queue:null});return async l=>{let{request:g,delivery:m,attachmentId:_,internalUserId:A,readAttachment:E,cookie:J,fail:H}=l,Q=p.maxBytes,S=c.consume(A,Date.now());if(!S.allowed)return S.firstDenial&&a.warn(`429 attachment=${_} viewer=${A} reason=rate_limit`),H(429,"Too many requests",{"Retry-After":String(ot)});S.suppressedDenials>0&&a.warn(`rate_limit_suppressed count=${S.suppressedDenials} viewer=${A}`);let P=await n(g),V=await t.getAttachmentForUser(P,_,A);if(!V)return a.warn(`404 attachment=${_} viewer=${A} reason=not_visible`),H(404,"Attachment not found");if(V.fileSize!=null&&V.fileSize>Q)return a.warn(`413 attachment=${_} viewer=${A} reason=db_size`),H(413,"Attachment too large");let F=await T.acquire(A,g.signal);if(!F)return g.signal.aborted?(a.info(`503 attachment=${_} viewer=${A} reason=aborted`),H(503,"Attachment request aborted")):(a.warn(`503 attachment=${_} viewer=${A} reason=concurrency`),H(503,"Too many concurrent downloads",{"Retry-After":String(st)}));let R=!1;try{let M=g.method==="HEAD",I=await E(V.filePath,{maxBytes:Q,head:M,principal:r(A),signal:g.signal});if(g.signal.aborted)return a.info(`503 attachment=${_} viewer=${A} reason=aborted`),H(503,"Attachment request aborted");if(!I.ok){let v=lt(I.reason);return I.reason==="not_found"&&o(_,!1),a.warn(`${v} attachment=${_} viewer=${A} reason=${I.reason} code=${I.code??"-"}`),H(v,yr[v])}if(I.bytes.byteLength>Q)return a.error(`500 attachment=${_} viewer=${A} reason=port_contract code=over_max_bytes`),H(500,Ne);let L=Nt(V.fileType)??Nt(I.contentType),b=L!==null&&dr.has(L),x=b?L:"application/octet-stream",q=b&&m.kind!=="download"?"inline":"attachment",O=I.size??I.bytes.byteLength,Y=new Headers({"Content-Type":x,"Content-Length":String(O),"Content-Disposition":`${q}; filename="${pr(V.fileName)}"; filename*=UTF-8''${mr(V.fileName)}`,"Cache-Control":"private, no-store","X-Content-Type-Options":"nosniff","Content-Security-Policy":"default-src 'none'; sandbox","X-Frame-Options":"SAMEORIGIN"});return J&&Y.append("Set-Cookie",J),o(_,!0),a.info(`200 attachment=${_} viewer=${A} type=${x} disposition=${q} bytes=${O}`),M?new Response(null,{status:200,headers:Y}):(R=!0,new Response(ea(I.bytes,F,Zn),{status:200,headers:Y}))}finally{R||F()}}};var Re=Object.freeze({queueWaitMs:3e4,readMs:3e4,renderMs:1e4,transferMarginMs:5e3}),Ci=Re.queueWaitMs+Re.readMs+Re.renderMs+Re.transferMarginMs;var gr=require("crypto"),Be=e=>{let t=JSON.stringify(e);return`"${(0,gr.createHash)("sha256").update(t).digest("hex")}"`};var ta=new Set([194,198,202,206]),ra=64,na=2,Rr=8,Sr=28,Ae=12,Bt=8,aa=20,Tr=Ae+Bt+10,ia=2,Se=(e,t)=>e[t]<<8|e[t+1],Ue=(e,t,r)=>{let n=0;for(let a=r-1;a>=0;a-=1)n=n*256+e[t+a];return n},fe=(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,Ut=e=>{if(e[0]!==255||e[1]!==216)return null;let t=null,r=2;for(;r<e.byteLength;){if(e[r]!==255)return null;for(;r<e.byteLength&&e[r]===255;)r+=1;if(r>=e.byteLength)return null;let n=e[r];if(r+=1,n===0||n===216||n===217)return null;if(n===1||n>=208&&n<=215)continue;if(r+2>e.byteLength)return null;let a=Se(e,r),o=r+2,p=r+a;if(a<2||p>e.byteLength)return null;if(oa(n)){if(t!==null||a<8)return null;let c=Se(e,o+1),T=Se(e,o+3),l=e[o+5];if(T===0||c===0||l===0||a!==8+3*l)return null;let g=[];for(let m=0;m<l;m+=1){let _=e[o+7+3*m],A=_>>4,E=_&15;if(A<1||A>4||E<1||E>4)return null;g.push({horizontal:A,vertical:E})}t={width:T,height:c,components:g,progressive:ta.has(n)}}else if(n===218){if(t===null||a<3)return null;let c=e[o];return c<1||c>4||a!==6+2*c?null:{width:t.width,height:t.height,components:t.components,multiScan:t.progressive||c<t.components.length}}r=p}return null},Ar=e=>{if(!e.multiScan)return 0;let t=Math.max(...e.components.map(a=>a.horizontal)),r=Math.max(...e.components.map(a=>a.vertical)),n=0;for(let{horizontal:a,vertical:o}of e.components){let p=Math.ceil(e.width*a/(t*Rr)),c=Math.ceil(e.height*o/(r*Rr));n+=Math.ceil(p/a)*a*Math.ceil(c/o)*o}return n*ra*na},Dr=e=>{if(e.byteLength<24||Se(e,8)!==0||Se(e,10)!==13||!fe(e,12,"IHDR"))return null;let t=Se(e,16)*65536+Se(e,18),r=Se(e,20)*65536+Se(e,22);return t===0||r===0||t>2147483647||r>2147483647?null:{width:t,height:r}},sa=e=>{if(fe(e,Ae,"VP8 ")){if(e.byteLength<30||(e[20]&1)!==0||e[23]!==157||e[24]!==1||e[25]!==42)return null;let t=Ue(e,26,2)&16383,r=Ue(e,28,2)&16383;return t===0||r===0?null:{width:t,height:r}}if(fe(e,Ae,"VP8L")){if(e.byteLength<25||e[20]!==47)return null;let t=Ue(e,21,4);return{width:(t&16383)+1,height:Math.floor(t/16384)%16384+1}}return fe(e,Ae,"VP8X")?e.byteLength<Tr?null:{width:Ue(e,24,3)+1,height:Ue(e,27,3)+1}:null},wr=e=>{if(Dr(e)===null||e.byteLength<=Sr)return null;switch(e[Sr]){case 0:return!1;case 1:return!0;default:return null}},_r=e=>{if(fe(e,Ae,"VP8 "))return"lossy";if(fe(e,Ae,"VP8L"))return"lossless";if(!fe(e,Ae,"VP8X")||e.byteLength<Tr)return null;if((e[aa]&ia)!==0)return"animated";let t=!1;for(let r=Ae;r+Bt<=e.byteLength;){if(fe(e,r,"VP8L"))return"lossless";if(fe(e,r,"VP8 "))return t?"lossy-alpha":"lossy";fe(e,r,"ALPH")&&(t=!0);let n=Ue(e,r+4,4);r+=Bt+n+n%2}return null},Ir={png:Dr,jpeg:Ut,webp:sa};var la=new Set(["image/png","image/jpeg","image/gif","image/webp"]),$t=Object.freeze(["image/webp","image/jpeg","image/png"]),ua={"image/webp":"webp","image/jpeg":"jpeg","image/png":"png"},ca=new Set($t),da=e=>typeof e=="string"&&ca.has(e),Ht=1024*1024,ma=256,dt=(e,t)=>e.fileType===null||!la.has(e.fileType)?!1:e.fileSize===null||e.fileSize<=t,pa=[137,80,78,71,13,10,26,10],ya=[255,216,255],ha=[[71,73,70,56,55,97],[71,73,70,56,57,97]],fa=[82,73,70,70],ba=[87,69,66,80],je=(e,t,r)=>{if(e.byteLength<r+t.length)return!1;for(let[n,a]of t.entries())if(e[r+n]!==a)return!1;return!0},Ft=e=>{if(je(e,pa,0))return"png";if(je(e,ya,0))return"jpeg";for(let t of ha)if(je(e,t,0))return"gif";return je(e,fa,0)&&je(e,ba,8)?"webp":null},Er=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:Be([t])}},Cr=(e,t)=>{if(!da(e.contentType))return"content_type";if(!(e.bytes instanceof Uint8Array))return"bytes";if(e.bytes.byteLength===0)return"empty";if(e.bytes.byteLength>Ht)return"too_large";let r=ua[e.contentType];if(Ft(e.bytes)!==r)return"signature";let n=Ir[r](e.bytes);return n===null||n.width>t.maxWidth||n.height>t.maxHeight?"dimensions":null},xr=e=>{he("maxBytes",e.maxBytes,0),he("maxEntries",e.maxEntries,0);let t=new Map,r=0,n=a=>{let o=t.get(a);o&&(t.delete(a),r-=o.weight)};return{get:a=>{let o=t.get(a);if(o)return t.delete(a),t.set(a,o),o.entry},set:(a,o)=>{n(a);let p=(o.kind==="thumbnail"?o.bytes.byteLength:0)+ma;if(p>e.maxBytes||e.maxEntries===0)return;let c=o.kind==="thumbnail"?{kind:"thumbnail",bytes:o.bytes.slice(),contentType:o.contentType}:o;t.set(a,{entry:c,weight:p}),r+=p;for(let T of t.keys()){if(r<=e.maxBytes&&t.size<=e.maxEntries)break;n(T)}}}};var vr=()=>{let e=new Map;return{join:(t,r,n)=>{let a=()=>{let T=new AbortController,l=()=>{e.get(t)?.controller===T&&e.delete(t)},m={promise:n(T.signal).finally(l),controller:T,waiters:0};return e.set(t,m),m},o=e.get(t)??a();o.waiters+=1;let p=()=>{o.waiters-=1,!(o.waiters>0)&&(o.controller.abort(),e.get(t)===o&&e.delete(t))};r.aborted?p():r.addEventListener("abort",p,{once:!0});let c=()=>{r.removeEventListener("abort",p)};return o.promise.finally(c)}}};var qt=e=>{let{budgetMs:t,flightSignal:r,call:n,onOverrun:a,onStuck:o}=e,p=Date.now(),c=new AbortController,T=!1,l,g,m=(F,R)=>{let M=setTimeout(F,R);return M.unref?.(),M},_=()=>{o(Date.now()-p)},A=F=>{l=m(()=>{T=!0,F({timedOut:!0}),g=m(_,t),c.abort(new DOMException(`stage exceeded its ${t} ms budget`,"TimeoutError"))},t)},E=new Promise(A),J=AbortSignal.any([r,c.signal]),H=F=>{F(n(J))},Q=new Promise(H),S=F=>{clearTimeout(l),clearTimeout(g),T&&a(Date.now()-p,F)},P=Q.then(()=>S(null),F=>S({error:F}));return{outcome:Promise.race([Q.then(F=>({timedOut:!1,value:F})),E]),settled:P}};var Ee={404:"Attachment not found",500:Ne,502:"Thumbnail unavailable",503:"Too many concurrent thumbnail requests"},Mr=e=>{let{gate:t,cache:r,maxBytes:n,encodeUserId:a,recordObjectState:o,logger:p}=e,c=(g,m)=>{if(g.fileSize===null||(m.kind==="exact"?m.bytes===g.fileSize:g.fileSize>m.maxBytes))return"verified";let A=m.kind==="exact"?String(m.bytes):`>${m.maxBytes}`;return p.warn(`size_mismatch expected=${g.fileSize} got=${A} attachment=${g.attachmentId} viewer=${g.owner} variant=thumbnail`),"unverified"},T=(g,m)=>(_,A)=>{let E=A===null?"":` message=${A.error instanceof Error?A.error.message:"unknown"}`;p.warn(`${g}_overrun ms=${_} attachment=${m.attachmentId} viewer=${m.owner} variant=thumbnail${E}`)},l=(g,m)=>_=>{p.warn(`${g}_stuck ms=${_} attachment=${m.attachmentId} viewer=${m.owner} variant=thumbnail`)};return async(g,m)=>{let _=await t.acquire(g.owner,m);if(!_)return{kind:"failure",status:503,reason:m.aborted?"aborted":"queue"};let A=null;try{if(m.aborted)return{kind:"failure",status:503,reason:"aborted"};let E=qt({budgetMs:Re.readMs,flightSignal:m,call:I=>g.readAttachment(g.filePath,{maxBytes:n,head:!1,principal:a(g.owner),signal:I}),onOverrun:T("read",g),onStuck:l("read",g)}),J=await E.outcome;if(J.timedOut)return A=E.settled,m.aborted?{kind:"failure",status:503,reason:"aborted"}:{kind:"failure",status:502,reason:"read_timeout"};if(m.aborted)return{kind:"failure",status:503,reason:"aborted"};let H=J.value;if(!H.ok&&H.reason!=="too_large")return H.reason==="not_found"&&o(g.attachmentId,!1),{kind:"failure",status:lt(H.reason)===404?404:502,reason:H.reason,code:H.code};if(H.ok&&H.bytes.byteLength>n)return{kind:"failure",status:500,reason:"port_contract",code:"over_max_bytes"};let Q=c(g,H.ok?{kind:"exact",bytes:H.bytes.byteLength}:{kind:"over",maxBytes:n}),S=I=>(Q==="verified"&&r.set(g.key,I),{...I,identity:Q});if(!H.ok)return S({kind:"unrenderable",reason:"too_large"});let P=Ft(H.bytes);if(P===null)return S({kind:"unrenderable",reason:"signature"});let V=qt({budgetMs:Re.renderMs,flightSignal:m,call:I=>g.renderer.render(H.bytes,{format:P,maxWidth:g.box.maxWidth,maxHeight:g.box.maxHeight,signal:I}),onOverrun:T("render",g),onStuck:l("render",g)}),F=await V.outcome;if(F.timedOut)return A=V.settled,m.aborted?{kind:"failure",status:503,reason:"aborted"}:{kind:"failure",status:502,reason:"render_timeout"};if(m.aborted)return{kind:"failure",status:503,reason:"aborted"};let R=F.value;if(!R.ok)return R.reason==="unsupported"?S({kind:"unrenderable",reason:"unsupported"}):R.reason==="failed"?{kind:"failure",status:502,reason:"render_failed"}:{kind:"failure",status:500,reason:"port_contract",code:"failure_reason"};let M=Cr(R,g.box);return M!==null?{kind:"failure",status:500,reason:"port_contract",code:M}:S({kind:"thumbnail",bytes:R.bytes,contentType:R.contentType})}finally{A===null?_():A.then(_)}}};var kr=10,ga=1/kr,Pr=1-ga,Ra=1024,Sa=64,Ta=8,Lr="private, no-cache",Aa="no-store",Da=e=>{switch(e.status){case 404:case 502:return"warn";case 500:return"error";case 503:return e.reason==="aborted"?"info":"warn"}},Nr=e=>{let{service:t,encodeUserId:r,resolveViewerScope:n,logger:a,recordObjectState:o}=e,p=t.attachmentDelivery,c=ze(e.rateLimitPerMinute),T=ze(e.rateLimitPerMinute*kr),l=ct({limit:e.concurrency,queue:{max:Sa,maxPerOwner:Ta,maxWaitMs:Re.queueWaitMs}}),g=xr({maxBytes:e.cacheBytes,maxEntries:Ra}),m=vr(),_=Mr({gate:l,cache:g,maxBytes:p.maxBytes,encodeUserId:r,recordObjectState:o,logger:a}),A=(S,P,V,F)=>{let R=`attachment=${S.attachmentId} viewer=${S.internalUserId} variant=thumbnail cache=${F}`;if(P.kind==="failure")return a[Da(P)](`${P.status} ${R} reason=${P.reason} code=${P.code??"-"}`),S.fail(P.status,Ee[P.status],P.status===503?{"Retry-After":String(st)}:{});let M=P.identity==="verified"?"":` identity=${P.identity}`;if(P.kind==="unrenderable")return a.info(`404 ${R} reason=${P.reason}${M}`),S.fail(404,Ee[404]);let I=P.identity==="verified"?{"Cache-Control":Lr,ETag:V}:{"Cache-Control":Aa},L=new Headers({"Content-Type":P.contentType,"Content-Length":String(P.bytes.byteLength),...I,"X-Content-Type-Options":"nosniff","Content-Security-Policy":"default-src 'none'; sandbox","X-Frame-Options":"SAMEORIGIN"});return S.cookie&&L.append("Set-Cookie",S.cookie),a.info(`200 ${R} type=${P.contentType} bytes=${P.bytes.byteLength}${M}`),new Response(P.bytes,{status:200,headers:L})},E=(S,P,V)=>(P.firstDenial&&a.warn(`429 attachment=${S.attachmentId} viewer=${S.internalUserId} variant=thumbnail reason=${V}`),S.fail(429,"Too many requests",{"Retry-After":String(ot)})),J=(S,P,V)=>{P.suppressedDenials>0&&a.warn(`${V}_suppressed count=${P.suppressedDenials} viewer=${S.internalUserId} variant=thumbnail`)},H=S=>{let P=c.consume(S.internalUserId,Date.now());return P.allowed?(J(S,P,"rate_limit"),null):E(S,P,"rate_limit")},Q=(S,P)=>{if(!P)return H(S);let V=T.consume(S.internalUserId,Date.now());return V.allowed?(J(S,V,"revalidation_rate_limit"),null):E(S,V,"revalidation_rate_limit")};return async(S,P)=>{let{request:V,attachmentId:F,internalUserId:R,readAttachment:M,cookie:I,fail:L}=S,b=kt[P],x=p.thumbnailRenderer;if(!x)return L(404,Ee[404]);let q=V.headers.get("If-None-Match"),O=q!==null,Y=Q(S,O);if(Y)return Y;let v=await n(V),$=await t.getAttachmentForUser(v,F,R),j=$!==null&&dt($,p.maxBytes)?Er({rendererId:x.id,box:b,attachmentId:F,filePath:$.filePath,fileType:$.fileType,fileSize:$.fileSize}):null;if(j&&cr(q,j.etag)){let C=new Headers({"Cache-Control":Lr,ETag:j.etag});return I&&C.append("Set-Cookie",I),a.info(`304 attachment=${F} viewer=${R} variant=thumbnail cache=revalidated`),new Response(null,{status:304,headers:C})}if(O){let C=H(S);if(C)return C}if(!$)return a.warn(`404 attachment=${F} viewer=${R} variant=thumbnail reason=not_visible`),L(404,Ee[404]);if(!j)return c.refund(R,Date.now(),Pr),a.info(`404 attachment=${F} viewer=${R} variant=thumbnail reason=not_eligible`),L(404,Ee[404]);let{key:z,etag:ee}=j,K=g.get(z);if(K)return c.refund(R,Date.now(),Pr),A(S,{...K,identity:"verified"},ee,"hit");let X=C=>_({key:z,attachmentId:F,filePath:$.filePath,fileSize:$.fileSize,box:b,owner:R,readAttachment:M,renderer:x},C),k;try{k=await m.join(z,V.signal,X)}catch(C){return a.error(`500 attachment=${F} viewer=${R} variant=thumbnail cache=miss reason=port_exception message=${C instanceof Error?C.message:"unknown"}`),L(500,Ee[500])}return A(S,k,ee,"miss")}};var wa='[daily-report] params.token must be passed by the route that mounts attachment.loader; declare a "token" route parameter ({apiBasePath}/attachment/{token})',Or=e=>{let{authenticate:t,service:r,encodeUserId:n,resolveViewerScope:a,logger:o}=e,p=r.attachmentDelivery,c=fr(e.tuning,p),T={service:r,encodeUserId:n,resolveViewerScope:a,logger:o,recordObjectState:ur(r,o)},l=br({...T,rateLimitPerMinute:c.originalRateLimitPerMinute,concurrency:c.originalConcurrency}),g=Nr({...T,rateLimitPerMinute:c.thumbnailRateLimitPerMinute,concurrency:c.thumbnailConcurrency,cacheBytes:c.thumbnailCacheBytes});return async({request:m,params:_})=>{let A=null,E=(J,H,Q={})=>{let S=new Headers({"Content-Type":"application/json","Cache-Control":"no-store",...Q});return A&&S.append("Set-Cookie",A),new Response(JSON.stringify({error:{message:H}}),{status:J,headers:S})};try{let{user:J,cookie:H}=await t(m,{failureRedirect:null});if(A=H??null,!J)return E(401,"Unauthorized");let Q=lr(new URL(m.url).searchParams);if(Q.kind==="invalid")return E(400,"Invalid attachment request");if(Q.kind==="thumbnail"&&m.method!=="GET")return E(405,"Method not allowed",{Allow:"GET"});if(m.method!=="GET"&&m.method!=="HEAD")return E(405,"Method not allowed",{Allow:"GET, HEAD"});let{idCodec:S,readAttachment:P}=p;if(!(S&&P))return E(404,"Attachment not found");if(_.token===void 0)throw new Error(wa);let V=S.decode(_.token);if(V===null||!Number.isSafeInteger(V)||V<=0)return E(400,"Invalid attachment token");let F=await r.getUserIdByExternalId(J.id);if(!F)return E(403,"Forbidden");let R={request:m,delivery:Q,attachmentId:V,internalUserId:F,readAttachment:P,cookie:A,fail:E};return Q.kind==="thumbnail"?await g(R,Q.variant):await l(R)}catch(J){if(J instanceof Response)throw J;return o.error(`500 attachment=? viewer=? reason=unexpected message=${J instanceof Error?J.message:"unknown"}`),E(500,Ne)}}};var _a=me(1,"[Response]"),pe=(e,t,r,n=200,a=_a)=>{let o=Be(r),p=e.headers.get("If-None-Match");a.info(`[jsonResponseWithETag] ETag: ${o}, If-None-Match: ${p}`);let c=new Headers({"Content-Type":"application/json","Cache-Control":"private, max-age=0, must-revalidate","X-Content-Type-Options":"nosniff","X-Frame-Options":"DENY","Content-Security-Policy":"default-src 'none'",ETag:o});return t&&c.append("Set-Cookie",t),e.method==="GET"&&n===200&&p===o?new Response(null,{status:304,headers:c}):new Response(JSON.stringify(r),{status:n,headers:c})};var Br=require("@aiquants/sse"),Ur=require("@aiquants/sse/shared-source");var De=(e,t)=>{let[r,n]=e.split("-").map(Number),[a,o]=t.split("-").map(Number);return r!==a?r<a:n<=o},pt="$",Ia=5e3,Ea=100,$e=class{constructor(t){this.config=t;this._lastId=pt;this._positioning=null;this._generation=0;this._logger=t.logger??me(1,"[SSE Reader]"),this._source=this._createSource()}ready(){if(this._lastId!==pt)return Promise.resolve();if(this._positioning===null){let t=this._generation;this._positioning=this._readTail().then(r=>{t===this._generation&&(this._positioning=null,r!==null&&this._lastId===pt&&(this._lastId=r))})}return this._positioning}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=pt,this._source=this._createSource()}async _readTail(){try{let t=await this.config.redis?.getClient();if(!t)return null;let r=await t.xRevRange(this.config.streamKey,"+","-",{COUNT:1});return r.length>0?r[0].id:"0-0"}catch(t){return this._logger.warn("Failed to resolve stream tail anchor; falling back to $:",t),null}}_createSource(){return(0,Ur.createSharedSource)({start:t=>this._start(t),lingerMs:0,replay:"none",runtime:Br.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.config.redis?.createClient();if(!r)throw new Error("Failed to create Redis client for SSE reader");r.on("error",o=>{this._logger.error("Redis client error:",o)}),await this.ready();let n=!1,a=this._readLoop(r,t,()=>n);return async()=>{if(n=!0,r.isOpen)try{await r.quit()}catch{}await a}}async _readLoop(t,r,n){let a=this._lastId;try{for(;!n()&&t.isOpen;){let o=await t.xRead([{key:this.config.streamKey,id:a}],{BLOCK:Ia,COUNT:Ea});if(o)for(let p of o)for(let c of p.messages)a=c.id,this._invalidateCaches(c.message),r.next({id:c.id,message:c.message})}}catch(o){n()||(this._logger.error("xRead loop error:",o),r.fail(o instanceof Error?o:new Error(String(o))));return}n()||r.fail(new Error("Redis client for SSE reader closed unexpectedly"))}_invalidateCaches(t){try{let r=t?.data?JSON.parse(t.data):null,n=r?.type;if((n==="report-create"||n==="report-delete"||n==="report-publish")&&this.config.cache.invalidatePrefix("daily-report:ids"),n==="comment-add"||n==="comment-delete"||n==="status-update"){let a=r?.reportHubId;typeof a=="number"&&(this.config.cache.invalidate(`daily-report:detail:${a}`),this.config.cache.invalidatePrefix(`daily-report:detail:${a}:user:`))}}catch{}}};var We=require("drizzle-orm");var Ca="",xa=64,va=e=>e.toLowerCase(),Ma=e=>e.trim().toLowerCase();function $r(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=Ma(r);n.length>0&&t.add(n)}return t}function be(e,t){return e===null?!0:t==null?!1:e.has(va(t))}function Ce(e){return e!==null&&e.size===0}function Fr(e,t){if(t!==null)return t.size===0?We.sql`1 = 0`:(0,We.inArray)(We.sql`LOWER(${e})`,[...t])}var He,Fe,Ge=class Ge{constructor(t,r){Dt(this,He);Dt(this,Fe);wt(this,He,t),wt(this,Fe,r)}get visible(){return Ve(this,He)===null?null:new Set(Ve(this,He))}get commentable(){return Ve(this,Fe)===null?null:new Set(Ve(this,Fe))}static restrictTo(t){let r=typeof t=="object"&&t!==null&&"read"in t,n=$r(r?t.read:t),a=r?t.comment:void 0;if(a===void 0)return new Ge(n,n);let o=$r(a),p=new Set;for(let c of o??[])n.has(c)&&p.add(c);return new Ge(n,p)}static unrestricted(t){return new Ge(null,null)}};He=new WeakMap,Fe=new WeakMap;var ye=Ge;function Je(e){let t=Hr(e.visible),r=Hr(e.commentable);return t===r?t:`d:${t.length}:${t}${r}`}function Hr(e){if(e===null)return"all";if(e.size===0)return"none";let t=[...e].sort().map(n=>`${n.length}:${n}`).join(Ca);if(t.length<=xa)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 Pa=(e,t)=>{let r=new Headers({"Content-Type":"application/json"});return t?.setCookie&&r.append("Set-Cookie",t.setCookie),new Response(JSON.stringify(e),{status:t?.status??200,headers:r})},yt=30,Jr=4e3,La="stream interrupted by server error",ka=/^\d{4}-\d{2}-\d{2}$/,Na=15e3,qr=Symbol("ids-stream-heartbeat"),Yr=864e5,Oa={baseMs:2e3,jitterMs:8e3},Yt=6e4,ht=1e3,Vr=JSON.stringify({type:"connected"}),zr="0-0",Ba=/^[0-9a-f]{1,16}$/,Ua=e=>{let t=e.searchParams.get("cursor_report_hub_id"),r=e.searchParams.get("cursor_business_date"),n=e.searchParams.get("cursor_snapshot"),a=n!==null&&Ba.test(n)?n:null;if(t===null)return r===null?{cursor:null,snapshot:a}:{invalid:!0};let o=Number.parseInt(t,10);return!Number.isSafeInteger(o)||String(o)!==t||o<=0?{invalid:!0}:r===null?{cursor:{businessDate:null,reportHubId:o},snapshot:a}:ka.test(r)?{cursor:{businessDate:r,reportHubId:o},snapshot:a}:{invalid:!0}};async function*jr(e,t,r,n){let a=t?tr(e,t):0,o=!0;for(;;){let p=e.slice(a,a+(o?r:Jr));a+=p.length;let c=a>=e.length,T=p[p.length-1];if(yield{kind:"chunk",items:p,nextCursor:c||!T?null:{businessDate:T.businessDate,reportHubId:T.reportHubId},isLast:c,...o?{total:e.length}:{},...o?{streamAnchor:n.streamAnchor}:{},snapshot:n.snapshot,...o&&n.restarted?{restarted:!0}:{}},o=!1,c)return}}var Gr=(e,t,r,n)=>{let a=new TextEncoder,o=!1,p=null,c=new ReadableStream({async pull(l){if(o||r.signal.aborted){await t.return(void 0).catch(()=>{});try{l.close()}catch{}return}let g=null;try{p===null&&(p=t.next());let m=new Promise(J=>{g=setTimeout(()=>J(qr),Na)}),_=await Promise.race([p,m]);if(g!==null&&(clearTimeout(g),g=null),_===qr){if(o||r.signal.aborted){await t.return(void 0).catch(()=>{});try{l.close()}catch{}return}l.enqueue(a.encode(`
|
|
2
|
-
`));return}p=null;let{value:
|
|
3
|
-
`))}catch(m){if(
|
|
4
|
-
`)),l.close()}catch{}}},cancel(){o=!0,t.return(void 0).catch(()=>{})}}),T=new Headers({"Content-Type":"application/x-ndjson; charset=utf-8","Cache-Control":"private, no-cache, no-transform","X-Content-Type-Options":"nosniff"});return e&&T.append("Set-Cookie",e),new Response(c,{status:200,headers:T})},$a=(e,t,r,n)=>{if(r===null&&n===null)return!0;let a=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 be(r,e.report.sourceType);case"comment-add":case"comment-delete":return be(n,a??"Internal");case"report-delete":return be(r,a)}},Ha=["externalComments","postedComments"],Fa=(e,t,r)=>{if(r===null||e.type!=="report-create"&&e.type!=="report-update"&&e.type!=="report-publish"||be(r,e.report.sourceType))return!1;let n=t.report;if(typeof n!="object"||n===null)return!1;let a=n;for(let o of Ha)a[o]=[];return!0};function ft(e){let{authenticate:t,service:r,encodeUserId:n,redis:a,sseReader:o,streamKey:p}=e,c=e.loginRedirectPath??"/auth/login",T=e.logger??me(3,"[DailyReportAPI]"),l=e.logger??me(3,"[DailyReportVisibility]"),g=e.logger??me(1,"[DailyReportSSE]"),m=e.logger??me(1,"[DailyReportAttachment]"),_=async(R,M="initial")=>{let I=e.resolveVisibleSourceTypes;if(!I)return ye.unrestricted("no visibility port injected: this deployment does not restrict by source type");try{let L=await I(R,{reason:M});return L==null?ye.unrestricted("visibility port returned null/undefined: this deployment opts out of source-type filtering"):ye.restrictTo(L)}catch(L){return l.error("resolveVisibleSourceTypes threw; failing closed (deny all)",L),ye.restrictTo([])}},A=async({request:R})=>{let{user:M,cookie:I}=await t(R,{failureRedirect:c}),L=new Headers;I&&L.append("Set-Cookie",I);let b=await r.getUserIdByExternalId(M.id),x=b?n(b):null;return{data:{user:M,userId:x},headers:L}},E={"business-date":async(R,M,I,L,b)=>{let x=ue(R.searchParams.get("businessDate")),q=R.searchParams.get("forceRefresh")==="true";if(!x)return pe(I,M,{error:{message:"Invalid business date"}},400);let O=await r.getDailyReportsByBusinessDateByExternalId(b,x,L.id,{forceRefresh:q});return pe(I,M,{businessDate:x,reports:O},200)},"ids-stream":async(R,M,I,L,b)=>{let x=Ua(R);if("invalid"in x)return pe(I,M,{error:{message:"Invalid cursor"}},400);let q=R.searchParams.get("forceRefresh")==="true",O=!1,Y=null,v=null,$=new Promise((z,ee)=>{Y=z,v=ee});$.catch(()=>{});let ae=r.getDailyReportIdsByExternalId(b,L.id,{forceRefresh:q,onFetchStart:x.cursor?void 0:()=>{O=!0,r.readSseStreamAnchor().then(z=>r.getDailyReportIdsFirstPageByExternalId(b,L.id,yt).then(ee=>({items:ee,streamAnchor:z}))).then(z=>Y?.(z),z=>v?.(z))}});if(ae.catch(()=>{}),x.cursor){let{items:z,streamAnchor:ee}=await ae,K=_t(z),X=x.snapshot!==null&&x.snapshot===K;return Gr(M,jr(z,X?x.cursor:null,yt,{snapshot:K,restarted:!X,streamAnchor:ee}),I,T)}let j=(async function*(){let z=await Promise.race([ae.then(X=>({kind:"full",source:X}),X=>({kind:"full-error",error:X})),$.then(X=>({kind:"page",page:X}),()=>({kind:"page-error"}))]),ee=null,K=!1;if(z.kind==="full")ee=z.source;else if(z.kind==="page"){let{items:X,streamAnchor:k}=z.page;if(X.length<yt){yield{kind:"chunk",items:X,nextCursor:null,isLast:!0,total:X.length,streamAnchor:k};return}yield{kind:"chunk",items:X,nextCursor:null,isLast:!1,provisional:!0},K=!0}else if(z.kind==="full-error"&&O){let X=await $.catch(()=>null);X&&X.items.length>0&&(yield{kind:"chunk",items:X.items,nextCursor:null,isLast:!1,provisional:!0})}ee===null&&(ee=await ae),yield*jr(ee.items,null,K?Jr:yt,{snapshot:_t(ee.items),streamAnchor:ee.streamAnchor})})();return Gr(M,j,I,T)},report:async(R,M,I,L,b)=>{let x=R.searchParams.get("reportHubId"),q=R.searchParams.get("forceRefresh")==="true",O=x?Number.parseInt(x,10):NaN;if(!Number.isFinite(O)||O<=0)return pe(I,M,{error:{message:"Invalid reportHubId"}},400);let Y=await r.getDailyReportDetailByIdByExternalId(b,O,L.id,{snapshot:!0,forceRefresh:q});return Y?pe(I,M,{report:Y},200):pe(I,M,{error:{message:"Report not found"}},404)}},J=async({request:R,params:M})=>{let{user:I,cookie:L}=await t(R,{failureRedirect:null}),b=L??null;if(!I)return pe(R,b,{error:{message:"Unauthorized"}},401);if(R.method!=="GET")return pe(R,b,{error:{message:"Method not allowed"}},405);let x=M.endpoint??"",q=E[x];if(!q)return pe(R,b,{error:{message:"Unknown endpoint"}},404);let O=Date.now();try{let Y=new URL(R.url),v=await _(R);return await q(Y,b,R,I,v)}catch(Y){let v=Date.now()-O,$=Y instanceof Error?Y:new Error(String(Y));return T.error(`500 endpoint=${x} elapsed=${v}ms name=${$.name} code=${"code"in $?$.code:"N/A"} message=${$.message}`),T.error("Stack:",$.stack),pe(R,b,{error:{message:"Internal Server Error"}},500)}},H=async({request:R,params:M})=>{let{user:I,cookie:L}=await t(R,{failureRedirect:null}),b=(q,O)=>Pa(q,{...O,setCookie:L});if(!I)return b({error:"Unauthorized"},{status:401});let x=Date.now();try{if(M.endpoint!=="action")return b({error:"Unknown endpoint"},{status:404});let O=await r.getUserIdByExternalId(I.id);if(!O)return b({error:"User not found"},{status:404});let Y=await _(R),v=await R.formData(),$=v.get("intent"),ae=v.get("reportHubId"),j=ae?Number(ae):NaN,z=v.get("businessDate"),ee=Number(v.get("operationTimestamp")),K=v.get("clientTempId");if($==="clearCache")return e.enableDevCacheClear?(await r.clearCache(),b({status:"OK",intent:"clearCache"})):b({error:"Invalid intent"},{status:400});if(!K)return b({error:"clientTempId required"},{status:400});if($!=="create"&&(!j||Number.isNaN(j)))return b({error:"Invalid reportHubId"},{status:400});let X=async(k,C,te)=>{let de=v.get(C);if(de===null)return b({error:`${C} required`},{status:400});try{let ie=await te(de==="true");return b({status:"OK",intent:k,updatedStatus:{isStarred:ie.isStarred,isRead:ie.isRead},operationTimestamp:ee,reportHubId:String(j),clientTempId:K})}catch(ie){if(ie instanceof Error&&ie.message==="Not Found")return b({error:"Report not found"},{status:404});throw ie}};switch($){case"create":{if(!z)return b({error:"businessDate required"},{status:400});let k=await r.createDailyReport(O,z,K);return b({status:"OK",intent:"create",report:k,reportHubId:String(k.reportHubId),clientTempId:K})}case"update":{let k=v.get("title"),C=v.get("content");try{return await r.updateDailyReport(j,O,{title:k,content:C},K),b({status:"OK",intent:"update",reportHubId:String(j),clientTempId:K})}catch(te){if(te instanceof Error){if(te.message==="Unauthorized")return b({error:"Unauthorized"},{status:403});if(te.message==="Not Found")return b({error:"Report not found"},{status:404})}throw te}}case"publish":try{let k=await r.publishDailyReport(j,O,K);return b({status:"OK",intent:"publish",reportHubId:String(j),clientTempId:K,report:k})}catch(k){if(k instanceof Error){if(k.message==="Unauthorized")return b({error:"Unauthorized"},{status:403});if(k.message==="Not Found")return b({error:"Report not found"},{status:404})}throw k}case"delete":try{return await r.deleteDailyReport(j,O,K),b({status:"OK",intent:"delete",reportHubId:String(j),clientTempId:K})}catch(k){if(k instanceof Error){if(k.message==="Unauthorized")return b({error:"Unauthorized"},{status:403});if(k.message==="Not Found")return b({error:"Report not found"},{status:404})}throw k}case"toggleStar":return await X("toggleStar","isStarred",k=>r.setStarStatus(Y,O,j,z,k,K));case"toggleRead":return await X("toggleRead","isRead",k=>r.setReadStatus(Y,O,j,z,k,K));case"addComment":{let k=v.get("content");if(!k)return b({error:"Content required"},{status:400});try{let C=await r.addComment(Y,O,j,k,z,K),te={...C,userId:C.userId};return b({status:"OK",intent:"addComment",newComment:te,reportHubId:String(j),clientTempId:K})}catch(C){if(C instanceof Error){if(C.message==="Not Found")return b({error:"Report not found"},{status:404});if(C.message.startsWith("Comments are restricted"))return b({error:"Comments are restricted for this report"},{status:403})}throw C}}case"deleteComment":{let k=Number(v.get("commentId"));if(!k||Number.isNaN(k))return b({error:"Invalid commentId"},{status:400});try{return await r.deleteComment(Y,O,j,k,z,K),b({status:"OK",reportHubId:String(j),deletedCommentId:String(k),clientTempId:K})}catch(C){if(C instanceof Error){if(C.message==="Unauthorized")return b({error:"Unauthorized"},{status:403});if(C.message==="Not Found")return b({error:"Comment not found"},{status:404})}throw C}}default:return b({error:"Invalid intent"},{status:400})}}catch(q){if(q instanceof Response)throw q;let O=Date.now()-x,Y=q instanceof Error?q:new Error(String(q));return T.error(`500 action elapsed=${O}ms name=${Y.name} message=${Y.message}`),T.error("Stack:",Y.stack),b({error:"Internal Server Error"},{status:500})}},Q=(R,M)=>{R.writeEvent({event:null,id:M,data:Vr})},S=(R,M,I,L)=>{if(I.data)try{let b=JSON.parse(I.data),x=or.safeParse(b);if(!x.success){g.error("SSE message validation failed:",x.error.format());return}let q=x.data,O=typeof b.recipientRawUserId=="number"?b.recipientRawUserId:void 0;if((q.type==="status-update"||O!==void 0)&&O!==L.internalUserId||!$a(q,b,L.visibleSet,L.commentableSet)){Q(R,M);return}let v=Fa(q,b,L.commentableSet),$;if("recipientRawUserId"in b){let{recipientRawUserId:ae,...j}=b;$=JSON.stringify(j)}else v?$=JSON.stringify(b):$=I.data;R.writeEvent({event:null,id:M,data:$})}catch(b){g.error(`[SSE:${L.internalUserId}] processEntry error:`,b)}},P=async(R,M)=>{let{request:I,internalUserId:L,cursor:b}=M,x=M.initialScope.visible,q=M.initialScope.commentable,O=0,Y=setInterval(()=>{let C=++O;_(I,"refresh").then(te=>{C===O&&(x=te.visible,q=te.commentable)})},Yt);R.onClose(()=>clearInterval(Y));let v=b===null?zr:b,$=b!==null&&a!==void 0,ae=[],j=null,z=C=>{De(C.id,v)||(v=C.id,S(R,C.id,C.message,{internalUserId:L,visibleSet:x,commentableSet:q}))},ee=async(C,te)=>{let[de]=await C.xRange(p,"-","+",{COUNT:1});return de!==void 0&&!De(de.id,te)},K=async(C,te)=>{if(await ee(C,te))return!1;let de=te;for(;;){let ie=await C.xRange(p,de,"+",{COUNT:ht}),ve=ie[0];if(ve!==void 0&&ve.id!==de&&await ee(C,de))return!1;for(let Xe of ie){if(j!==null&&De(j,Xe.id))return!0;z(Xe)}let Qe=ie.at(-1);if(ie.length<ht||Qe===void 0||R.isClosed())return!0;de=Qe.id}},X=o.subscribe(C=>{if(!$){z(C);return}De(C.id,v)||(j===null&&(j=C.id),ae.push(C))},C=>{g.error(`[SSE:${L}] Fan-Out reader error:`,C),R.close()});if(R.onClose(X),b===null){await o.ready();try{let C=await a?.getClient();if(C){let te=await C.xRevRange(p,"+","-",{COUNT:1});te.length>0&&!De(te[0].id,v)&&(v=te[0].id)}}catch{}}if(R.writeEvent({event:null,id:v===zr?null:v,data:Vr}),(0,we.startSseHeartbeat)(R,{intervalMs:rr,retry:Oa,runtime:Wr.systemSseRuntime}),b===null||a===void 0)return;await o.ready();let k=await a.getClient();if(k===void 0)throw new Error("redis client unavailable for the SSE catch-up");if(!await K(k,b)){R.writeRetry(Yr),R.writeEvent({event:"resync-required",id:null,data:""}),R.close();return}$=!1;for(let C of ae.splice(0))z(C)},V=async({request:R,params:M})=>{let I,L=()=>{let x=new Headers;return I!==void 0&&x.append("Set-Cookie",I),x},b=x=>(0,we.terminalStreamResponse)(x,{data:"",retryMs:Yr,headers:L()});try{let x=await t(R,{failureRedirect:null});I=x.cookie;let{user:q}=x;if(!q)return b("auth-required");let O=await r.getUserIdByExternalId(q.id);if(!O)return b("forbidden");if(M.endpoint!=="updates")return new Response("Not Found",{status:404,headers:L()});let Y=(0,we.readLastEventId)(R,nr);if(Y!==null&&!ar(Y))return g.warn(`[SSE:${O}] malformed resume cursor; asking the client to resync`),b("resync-required");let v=await _(R);return(0,we.createSseResponse)({requestSignal:R.signal,headers:L(),onError:($,ae)=>g.error(`[SSE:${O}] ${ae} failed:`,$),produce:$=>P($,{request:R,internalUserId:O,cursor:Y,initialScope:v})})}catch(x){if(x instanceof Response)throw x;let q=x instanceof Error?x:new Error(String(x));return g.error(`500 sse name=${q.name} message=${q.message}`),new Response("Internal Server Error",{status:500,headers:L()})}},F=Or({authenticate:t,service:r,encodeUserId:n,resolveViewerScope:_,logger:m,tuning:e});return{index:{loader:A},api:{loader:J,action:H},sse:{loader:V},attachment:{loader:F}}}var Kr=require("@aiquants/mssql"),u=require("drizzle-orm");var xe=e=>(0,u.getColumns)(e),qa=e=>{if(e!==void 0){if(typeof e!="object"||e===null)throw Oe("attachmentThumbnailRenderer","an object with id and render",e);if(e.render===void 0)throw ut("attachmentThumbnailRenderer.render","a function");if(typeof e.render!="function")throw Oe("attachmentThumbnailRenderer.render","a function",e.render);if(typeof e.id!="string"||e.id.trim()==="")throw Oe("attachmentThumbnailRenderer.id","a non-blank string naming the rendering pipeline version",e.id);return e}},ce=(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(),a=n<0?`-${String(-n).padStart(4,"0")}`:String(n).padStart(4,"0"),o=String(r.getMonth()+1).padStart(2,"0"),p=String(r.getDate()).padStart(2,"0");if(t==="YYYY-MM-DD")return`${a}-${o}-${p}`;let c=String(r.getHours()).padStart(2,"0"),T=String(r.getMinutes()).padStart(2,"0"),l=String(r.getSeconds()).padStart(2,"0");return`${a}-${o}-${p} ${c}:${T}:${l}`};function bt(e){let{db:t,tables:r,userTable:n,resolveUserId:a,encodeUserId:o,redis:p,cache:c,epochs:T}=e,{hub:l,internal:g,comment:m,label:_,hubLabel:A,userStatus:E}=r,J=e.externalSources??[],H=e.draftLabelNames&&e.draftLabelNames.length>0?e.draftLabelNames:[e.draftLabelName??"\u4E0B\u66F8\u304D"],Q=H[0]??"\u4E0B\u66F8\u304D",S=e.logger??me(1,"[DailyReportService]");Ot({attachmentIdCodec:e.attachmentIdCodec,readAttachment:e.readAttachment,attachmentThumbnailRenderer:e.attachmentThumbnailRenderer,attachmentMaxBytes:e.attachmentMaxBytes});let P=Object.freeze({idCodec:e.attachmentIdCodec,readAttachment:e.readAttachment,thumbnailRenderer:qa(e.attachmentThumbnailRenderer),maxBytes:Ie("attachmentMaxBytes",e.attachmentMaxBytes,1,hr)}),V=i=>(0,Kr.runWithTransactionRetry)(s=>t.transaction(d=>s(()=>i(d))),e.transactionRetry),F="daily-report:ids",R=e.idsTtlMs??18e4,M="daily-report:ids:epoch",I="daily-report:business-date:",L=e.businessDateTtlMs??3e5,b="daily-report:date-epoch:",x="daily-report:detail-epoch:",O=`${e.streamKey??"daily-report:sse-stream"}:v2`,Y=e.streamMaxLen??1e4,v=i=>T.incrementEpoch(i),$=i=>Fr(l.sourceType,i),ae=(i,s)=>`${F}:user:${i}:st:${s}`,j=i=>`${F}:user:${i}:`,z=(i,s,d)=>`daily-report:date:${i}:user:${s}:st:${d}`,ee=(i,s)=>`daily-report:date:${i}:user:${s}:`,K=(i,s,d)=>`daily-report:detail:${i}:user:${s}:st:${d}`,X=(i,s)=>`daily-report:detail:${i}:user:${s}:`,k=async(i,s)=>{let d=await p?.getClient();if(!d){S.warn(`[SSE] Redis client unavailable (${s})`);return}let h=Date.now();try{await d.xAdd(O,"*",{data:JSON.stringify(i)},{TRIM:{strategy:"MAXLEN",strategyModifier:"~",threshold:Y}});let D=Date.now()-h;D>1e3&&S.warn(`[SSE] Slow publish (${s}): ${D}ms`)}catch(D){S.error(`[SSE] Redis publish failed (${s}):`,D)}},C=async()=>{try{let i=await p?.getClient();if(i===void 0)return null;let[s]=await i.xRevRange(O,"+","-",{COUNT:1});return s===void 0?null:s.id}catch(i){return S.error("[DailyReportService] SSE stream anchor read failed",i),null}},te=i=>i==null||i===""?null:/^\d+$/.test(i)?o(Number(i)):i,de=()=>{let i={};for(let s of J)i[`ext_${s.sourceType}`]=xe(s.table);return i},ie=i=>{let s=i;for(let d of J)s=s.leftJoin(d.table,(0,u.and)((0,u.eq)(l.sourceType,d.sourceType),(0,u.eq)(l.sourceIdNum,d.idColumn)));return s},ve=(i,s,d)=>{let{hub:h,internal:D}=s,B=h.summary,w=[],N=null,U=null,Z=null,G=null,re=null,oe=null,Pe=[],Te=J.find(W=>W.sourceType===h.sourceType),Le=Te?s[`ext_${Te.sourceType}`]:void 0;if(Te&&Le){let W=Te.mapRow(Le);W.content!==void 0&&(B=W.content),W.employeeName!==void 0&&(oe=W.employeeName),W.category!==void 0&&(N=W.category),W.creationCategory!==void 0&&(U=W.creationCategory),W.visitTimeFrom!==void 0&&(Z=W.visitTimeFrom),W.visitTimeTo!==void 0&&(G=W.visitTimeTo),W.customerName!==void 0&&(re=W.customerName),W.interviewers!==void 0&&(w=W.interviewers),W.externalComments!==void 0&&(Pe=W.externalComments)}else h.sourceType==="Internal"&&D&&(B=D.body);let ge=(s.labels??[]).map(W=>({id:W.id,name:W.name,color:W.color})),se=s.postedCommentRows??[],ne=be(i.commentable,h.sourceType),le=U?H.includes(U):!1,Tt=Me?.[0]??null;return le&&Tt&&!ge.some(W=>W.id===Tt)&&ge.push({id:Tt,name:Q,color:null}),{reportHubId:h.id,date:ce(h.businessDate,"YYYY-MM-DD"),author:s.creatorName??te(h.createdBy)??"",userId:h.userId?o(h.userId):"",sourceType:h.sourceType??"Internal",createdAt:ce(h.createdAt,"YYYY-MM-DD HH:mm:ss"),updatedAt:ce(h.updatedAt,"YYYY-MM-DD HH:mm:ss"),updatedBy:te(h.updatedBy),employeeName:oe??s.creatorName??te(h.createdBy),category:N,creationCategory:U,visitTimeFrom:Z,visitTimeTo:G,customerName:re,interviewers:w,subject:h.title,content:B,externalComments:ne?Pe:[],isRead:s.isRead??!1,isStarred:s.isStarred??!1,labels:ge,postedComments:se.filter(W=>ne||d!==void 0&&W.userId===d).map(W=>({...W,userId:o(W.userId),isMine:d?W.userId===d:!1})),attachments:s.attachments}},Qe=async(i,s)=>{let d=(0,u.aliasedTable)(A,"draft_label"),h=await _e();return(await t.select({reportHubId:l.id,businessDate:l.businessDate,sourceType:l.sourceType}).from(l).leftJoin(d,(0,u.and)((0,u.eq)(d.hubId,l.id),(0,u.inArray)(d.labelId,h))).where((0,u.and)((0,u.isNull)(l.deletedAt),(0,u.or)((0,u.eq)(l.userId,s),(0,u.isNull)(l.userId),(0,u.isNull)(d.hubId)),$(i.visible))).orderBy((0,u.desc)(l.businessDate),(0,u.desc)(l.id))).map(B=>({...B,businessDate:ce(B.businessDate,"YYYY-MM-DD")}))},Xe=async(i,s,d)=>{let h=await qe(s);if(!h)return[];if(Ce(i.visible))return[];let D=(0,u.aliasedTable)(A,"draft_label"),B=await _e();return(await t.select({reportHubId:l.id,businessDate:l.businessDate,sourceType:l.sourceType}).top(d).from(l).leftJoin(D,(0,u.and)((0,u.eq)(D.hubId,l.id),(0,u.inArray)(D.labelId,B))).where((0,u.and)((0,u.isNull)(l.deletedAt),(0,u.or)((0,u.eq)(l.userId,h),(0,u.isNull)(l.userId),(0,u.isNull)(D.hubId)),$(i.visible))).orderBy((0,u.desc)(l.businessDate),(0,u.desc)(l.id))).map(N=>({...N,businessDate:ce(N.businessDate,"YYYY-MM-DD")}))},ln=async(i,s)=>{let d=await ie(t.select({hub:xe(l),internal:xe(g),creatorName:n.displayName,...de()}).from(l)).leftJoin(g,(0,u.eq)(l.id,g.hubId)).leftJoin(n,(0,u.eq)(l.userId,n.id)).where((0,u.and)((0,u.eq)(l.businessDate,u.sql`${s}`),(0,u.isNull)(l.deletedAt),$(i.visible))).orderBy((0,u.desc)(l.id)),h=await tt(d.map(D=>D.hub.id));return d.map(D=>ve(i,{...D,attachments:h.get(D.hub.id)??[]}))},un=i=>`${I}${i}`,Ze=new Map,qe=async i=>{if(!e.disableUserIdCache&&Ze.has(i))return Ze.get(i)??null;let s=await a(i);return s!==null&&!e.disableUserIdCache&&Ze.set(i,s),s},cn=async(i,s,{forceRefresh:d=!1,snapshot:h=!1,ttlMsOverride:D,onFetchStart:B}={})=>{let w=await qe(s);if(!w)return{items:[],streamAnchor:null};if(Ce(i.visible))return{items:[],streamAnchor:await C()};let N=ae(w,Je(i)),[U]=await c.getOrFetch({cacheKey:N,fetcher:async()=>{let Z=await C(),G=await Qe(i,w);return er(G)?[{items:G,streamAnchor:Z}]:(S.warn("[DailyReportService] ids array is not in stream order; re-sorting (check SQL ORDER BY vs compareIdsStreamOrder, or concurrent row movement during the scan)"),[{items:[...G].sort(at),streamAnchor:Z}])},onFetchStart:B,forceRefresh:d,snapshot:h,ttlMsOverride:D??R,epochKey:M,refreshAheadRatio:.5});if(U===void 0)throw new Error("[DailyReportService] ids cache returned no record");return U},dn=(i,s,{forceRefresh:d=!1,snapshot:h=!1,ttlMsOverride:D}={})=>{let B=ue(s);return B?Ce(i.visible)?Promise.resolve([]):c.getOrFetch({cacheKey:`${un(B)}:st:${Je(i)}`,fetcher:()=>ln(i,B),forceRefresh:d,snapshot:h,ttlMsOverride:D??L}):Promise.resolve([])},Me=null,et=async()=>(Me!==null||(Me=(await t.select({id:_.id}).from(_).where((0,u.inArray)(_.name,H)).orderBy(_.id)).map(s=>s.id)),Me),_e=async()=>{let i=await et();return i.length>0?i:[-1]},gt=async()=>{let i=await et();if(i.length===0)return null;let[s]=await t.select({id:_.id}).top(1).from(_).where((0,u.eq)(_.name,Q));return s?.id??i[0]},mn=(i,s)=>s!=null?"absent":i!=null?"present":"unknown",tt=async i=>{let s=new Map,d=r.attachment,h=P.idCodec;if(i.length===0||!d||!h)return s;let D=P.thumbnailRenderer!==void 0&&P.readAttachment!==void 0,B=await t.select({id:d.id,hubId:d.hubId,fileName:d.fileName,fileType:d.fileType,fileSize:d.fileSize,createdAt:d.createdAt,objectCheckedAt:d.objectCheckedAt,objectMissingAt:d.objectMissingAt}).from(d).where((0,u.inArray)(d.hubId,i)).orderBy((0,u.asc)(d.createdAt),(0,u.asc)(d.id));for(let w of B){let N=w.fileType?String(w.fileType):null,U=w.fileSize!=null?Number(w.fileSize):null,Z=mn(w.objectCheckedAt,w.objectMissingAt),G={id:h.encode(Number(w.id)),fileName:String(w.fileName),fileType:N,fileSize:U,createdAt:ce(w.createdAt,"YYYY-MM-DD HH:mm:ss"),state:Z,hasThumbnail:D&&Z!=="absent"&&dt({fileType:N,fileSize:U},P.maxBytes)},re=s.get(Number(w.hubId));re?re.push(G):s.set(Number(w.hubId),[G])}return s},pn=async(i,s,d)=>{let h=r.attachment;if(!h||Ce(i.visible))return null;let D=await _e(),B=(0,u.aliasedTable)(A,"draft_label");return(await t.select({fileName:h.fileName,filePath:h.filePath,fileType:h.fileType,fileSize:h.fileSize}).top(1).from(h).innerJoin(l,(0,u.eq)(l.id,h.hubId)).leftJoin(B,(0,u.and)((0,u.eq)(B.hubId,l.id),(0,u.inArray)(B.labelId,D))).where((0,u.and)((0,u.eq)(h.id,s),(0,u.isNull)(l.deletedAt),(0,u.or)((0,u.eq)(l.userId,d),(0,u.isNull)(B.hubId)),$(i.visible))))[0]??null},yn=async i=>{let s=r.attachment;if(!s)return;let d=new Date;try{await t.update(s).set({objectCheckedAt:d,objectMissingAt:d,updatedAt:d}).where((0,u.eq)(s.id,i))}catch(h){S.error("markAttachmentMissing failed",h)}},hn=async i=>{let s=r.attachment;if(!s)return;let d=new Date;try{await t.update(s).set({objectCheckedAt:d,objectMissingAt:null,updatedAt:d}).where((0,u.eq)(s.id,i))}catch(h){S.error("markAttachmentPresent failed",h)}},fn=async(i,s,d,{forceRefresh:h=!1,snapshot:D=!1,ttlMsOverride:B}={})=>{let w=await qe(d);if(!w)return[];let N=ue(s);if(!N)return[];if(Ce(i.visible))return[];let U=z(N,w,Je(i));return c.getOrFetch({cacheKey:U,fetcher:async()=>{let Z=await _e(),G=(0,u.aliasedTable)(A,"draft_label"),re=await ie(t.select({hub:xe(l),internal:xe(g),isRead:E.isRead,isStarred:E.isStarred,creatorName:n.displayName,...de()}).from(l)).leftJoin(g,(0,u.eq)(l.id,g.hubId)).leftJoin(E,(0,u.and)((0,u.eq)(l.id,E.hubId),(0,u.eq)(E.userId,w))).leftJoin(G,(0,u.and)((0,u.eq)(G.hubId,l.id),(0,u.inArray)(G.labelId,Z))).leftJoin(n,(0,u.eq)(l.userId,n.id)).where((0,u.and)((0,u.eq)(l.businessDate,u.sql`${N}`),(0,u.isNull)(l.deletedAt),(0,u.or)((0,u.eq)(l.userId,w),(0,u.isNull)(G.hubId)),$(i.visible))).orderBy((0,u.desc)(l.id));if(re.length===0)return[];let oe=re.map(ne=>ne.hub.id),Pe=await t.select({hubId:A.hubId,id:_.id,name:_.name,color:_.color}).from(A).innerJoin(_,(0,u.eq)(A.labelId,_.id)).where((0,u.inArray)(A.hubId,oe)),Te=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,u.eq)(m.userId,n.id)).where((0,u.inArray)(m.hubId,oe)).orderBy((0,u.asc)(m.createdAt)),Le=await tt(oe),ge=new Map,se=new Map;for(let ne of Pe){let le=ge.get(ne.hubId);le||(le=[],ge.set(ne.hubId,le)),le.push({id:ne.id,name:ne.name,color:ne.color})}for(let ne of Te){let le=se.get(ne.hubId);le||(le=[],se.set(ne.hubId,le)),le.push({id:ne.id,content:ne.body,createdAt:ce(ne.createdAt,"YYYY-MM-DD HH:mm:ss")||"",userId:ne.userId,userName:ne.userName||""})}return re.map(ne=>{let le=ne.hub.id;return ve(i,{...ne,attachments:Le.get(le)??[],labels:ge.get(le)||[],postedCommentRows:se.get(le)||[]},w)})},forceRefresh:h,snapshot:D,ttlMsOverride:B??L,epochKey:`${b}${N}`})},Ye=async(i,s,d,{forceRefresh:h=!1,snapshot:D=!1,ttlMsOverride:B}={})=>{if(Ce(i.visible))return null;let w=K(s,d,Je(i));return(await c.getOrFetch({cacheKey:w,fetcher:async()=>{let U=await _e(),Z=(0,u.aliasedTable)(A,"draft_label"),G=await ie(t.select({hub:xe(l),internal:xe(g),isRead:E.isRead,isStarred:E.isStarred,creatorName:n.displayName,...de()}).from(l)).leftJoin(g,(0,u.eq)(l.id,g.hubId)).leftJoin(E,(0,u.and)((0,u.eq)(l.id,E.hubId),(0,u.eq)(E.userId,d))).leftJoin(Z,(0,u.and)((0,u.eq)(Z.hubId,l.id),(0,u.inArray)(Z.labelId,U))).leftJoin(n,(0,u.eq)(l.userId,n.id)).where((0,u.and)((0,u.eq)(l.id,s),(0,u.isNull)(l.deletedAt),(0,u.or)((0,u.eq)(l.userId,d),(0,u.isNull)(Z.hubId)),$(i.visible)));if(G.length===0)return[];let re=G[0].hub.id,oe=await t.select({id:_.id,name:_.name,color:_.color}).from(A).innerJoin(_,(0,u.eq)(A.labelId,_.id)).where((0,u.eq)(A.hubId,re)),Pe=await t.select({id:m.id,body:m.body,createdAt:m.createdAt,userId:m.userId,userName:n.displayName}).from(m).leftJoin(n,(0,u.eq)(m.userId,n.id)).where((0,u.eq)(m.hubId,re)).orderBy((0,u.asc)(m.createdAt)),Te=await tt([re]),Le=oe.map(se=>({id:se.id,name:se.name,color:se.color})),ge=Pe.map(se=>({id:se.id,content:se.body,createdAt:ce(se.createdAt,"YYYY-MM-DD HH:mm:ss")||"",userId:se.userId,userName:se.userName||""}));return[ve(i,{...G[0],attachments:Te.get(re)??[],labels:Le,postedCommentRows:ge},d)]},forceRefresh:h,snapshot:D,ttlMsOverride:B??L,epochKey:`${x}${s}`}))[0]??null},bn=async(i,s,d,h={})=>{let D=await qe(d);return D?Ye(i,s,D,h):null},gn=async(i,s)=>{let d=await _e(),h=(0,u.aliasedTable)(A,"draft_label"),[D]=await t.select({sourceType:l.sourceType,deletedAt:l.deletedAt}).top(1).from(l).leftJoin(h,(0,u.and)((0,u.eq)(h.hubId,l.id),(0,u.inArray)(h.labelId,d))).where((0,u.and)((0,u.eq)(l.id,i),(0,u.or)((0,u.eq)(l.userId,s),(0,u.isNull)(h.hubId))));return D??null},Rt=async(i,s,d)=>{let h=await gn(s,d);if(!h||h.deletedAt||!be(i.visible,h.sourceType))throw new Error("Not Found")},Rn=async(i,s,d,h,D,B)=>{await Rt(i,d,s);let w=await t.select().top(1).from(E).where((0,u.and)((0,u.eq)(E.hubId,d),(0,u.eq)(E.userId,s))),N;if(w.length>0?w[0].isStarred!==D?N=(await t.update(E).set({isStarred:D,updatedAt:new Date,updatedBy:String(s)}).output().where((0,u.and)((0,u.eq)(E.hubId,d),(0,u.eq)(E.userId,s))))[0]:N=w[0]:N=(await t.insert(E).output().values({hubId:d,userId:s,isStarred:D,isRead:!1,createdAt:new Date,createdBy:String(s),updatedAt:new Date,updatedBy:String(s)}))[0],h){let U=ue(h);U&&(c.invalidatePrefix(ee(U,s)),await v(`${b}${U}`))}return c.invalidate(`daily-report:detail:${d}`),c.invalidatePrefix(X(d,s)),await v(`${x}${d}`),await k(it.parse({type:"status-update",reportHubId:d,recipientRawUserId:s,statusType:"star",value:D,clientTempId:B}),"setStarStatus"),N},Sn=async(i,s,d,h,D,B)=>{await Rt(i,d,s);let w=await t.select().top(1).from(E).where((0,u.and)((0,u.eq)(E.hubId,d),(0,u.eq)(E.userId,s))),N;if(w.length>0?w[0].isRead!==D?N=(await t.update(E).set({isRead:D,updatedAt:new Date,updatedBy:String(s)}).output().where((0,u.and)((0,u.eq)(E.hubId,d),(0,u.eq)(E.userId,s))))[0]:N=w[0]:N=(await t.insert(E).output().values({hubId:d,userId:s,isRead:D,isStarred:!1,createdAt:new Date,createdBy:String(s),updatedAt:new Date,updatedBy:String(s)}))[0],h){let U=ue(h);U&&(c.invalidatePrefix(ee(U,s)),await v(`${b}${U}`))}return c.invalidate(`daily-report:detail:${d}`),c.invalidatePrefix(X(d,s)),await v(`${x}${d}`),await k(it.parse({type:"status-update",reportHubId:d,recipientRawUserId:s,statusType:"read",value:D,clientTempId:B}),"setReadStatus"),N},Gt=async(i,s)=>{if(s===null)return;let d=await _e(),[h]=await t.select({hubId:A.hubId}).top(1).from(A).where((0,u.and)((0,u.eq)(A.hubId,i),(0,u.inArray)(A.labelId,d)));return h?s:void 0},Tn=async(i,s,d,h,D,B)=>{let[w]=await t.select({sourceType:l.sourceType,deletedAt:l.deletedAt,userId:l.userId}).top(1).from(l).where((0,u.eq)(l.id,d));if(!w||w.deletedAt)throw new Error("Not Found");if(await Rt(i,d,s),!be(i.commentable,w.sourceType))throw new Error("Comments are restricted by the viewer's comment permission");if(w.sourceType.toLowerCase()!=="internal")throw new Error("Comments are restricted for external daily report sources");let N=await Gt(d,w.userId),[U]=await t.insert(m).output().values({hubId:d,userId:s,body:h,createdAt:new Date,createdBy:String(s),updatedAt:new Date,updatedBy:String(s)}),[Z]=await t.select({displayName:n.displayName}).top(1).from(n).where((0,u.eq)(n.id,s)),G=Z?.displayName??"";if(D){let oe=ue(D);oe&&(c.invalidatePrefix(`daily-report:date:${oe}:user:`),await v(`${b}${oe}`))}c.invalidate(`daily-report:detail:${d}`),c.invalidatePrefix(`daily-report:detail:${d}:user:`),await v(`${x}${d}`);let re={id:U.id,userId:o(U.userId),userName:G,content:U.body,createdAt:ce(U.createdAt,"YYYY-MM-DD HH:mm:ss")??"",isMine:!0};return await k(Ct.parse({type:"comment-add",reportHubId:d,comment:re,clientTempId:B,recipientRawUserId:N,sourceType:w.sourceType}),"addComment"),re},An=async(i,s)=>await i.select().top(1).from(m).where((0,u.eq)(m.id,s)),Dn=async(i,s,d,h,D,B)=>{let w=await An(t,h);if(w.length===0)throw new Error("Not Found");if(w[0].hubId!==d)throw new Error("Not Found");let[N]=await t.select({userId:l.userId,sourceType:l.sourceType}).top(1).from(l).where((0,u.eq)(l.id,w[0].hubId));if(!(N&&be(i.visible,N.sourceType)))throw new Error("Not Found");if(w[0].userId!==s)throw new Error("Unauthorized");let U=await Gt(d,N.userId);if(await t.delete(m).where((0,u.eq)(m.id,h)),D){let Z=ue(D);Z&&(c.invalidatePrefix(`daily-report:date:${Z}:user:`),await v(`${b}${Z}`))}c.invalidate(`daily-report:detail:${d}`),c.invalidatePrefix(`daily-report:detail:${d}:user:`),await v(`${x}${d}`),await k(xt.parse({type:"comment-delete",reportHubId:d,commentId:h,clientTempId:B,recipientRawUserId:U,sourceType:N?.sourceType}),"deleteComment")},wn=async(i,s,d)=>{S.info("createDailyReport called",{userId:i,businessDate:s});let[h]=await t.select({displayName:n.displayName}).from(n).where((0,u.eq)(n.id,i)),D=h?.displayName??o(i);try{let B=await V(async U=>{S.info("Starting transaction");let Z=`internal-temp-${Date.now()}-${Math.random()}`,[G]=await U.insert(l).output().values({sourceType:"Internal",sourceId:Z,businessDate:new Date(s),userId:i,title:"(\u7121\u984C)",createdAt:new Date,createdBy:String(i),updatedAt:new Date,updatedBy:String(i)});await U.update(l).set({sourceId:String(G.id)}).where((0,u.eq)(l.id,G.id)),S.info("Hub created",G),await U.insert(g).values({hubId:G.id,body:"",createdAt:new Date,createdBy:String(i),updatedAt:new Date,updatedBy:String(i)}),S.info("Internal created"),S.info("Calling getDraftLabelId");let re=await gt();S.info("draftLabelId",re);let oe=[];return re&&(await U.insert(A).values({hubId:G.id,labelId:re,createdAt:new Date,createdBy:String(i)}),oe.push({id:re,name:Q,color:null})),S.info("Label assigned"),{reportHubId:G.id,date:s,createdAt:ce(G.createdAt,"YYYY-MM-DD HH:mm:ss"),author:D,userId:o(i),sourceType:"Internal",employeeName:D,updatedBy:o(i),updatedAt:ce(G.updatedAt,"YYYY-MM-DD HH:mm:ss"),category:null,creationCategory:null,visitTimeFrom:null,visitTimeTo:null,customerName:null,interviewers:[],subject:G.title,content:"",externalComments:[],isRead:!0,isStarred:!1,labels:oe,postedComments:[],attachments:[]}}),w=ue(s);w&&c.invalidatePrefix(ee(w,i)),c.invalidatePrefix(I),c.invalidatePrefix(j(i)),await v(M),w&&await v(`${b}${w}`);let N=await Ye(ye.unrestricted("post-write self read: the writer always sees the row they just wrote"),B.reportHubId,i,{forceRefresh:!0});if(N){let U=await et(),Z=N.labels.some(G=>U.includes(G.id));await k(vt.parse({type:"report-create",reportHubId:N.reportHubId,report:N,clientTempId:d,recipientRawUserId:Z?i:void 0}),"createDailyReport")}return N??B}catch(B){throw S.error("Error in createDailyReport",B),B}},rt=async(i,s)=>await i.select().top(1).from(l).where((0,u.eq)(l.id,s)),St=async(i,s,d)=>{await i.update(l).set(d).where((0,u.eq)(l.id,s))},Wt=async(i,s,d)=>{await i.update(g).set(d).where((0,u.eq)(g.hubId,s))},Jt=async(i,s,d)=>{await i.delete(A).where((0,u.and)((0,u.eq)(A.hubId,s),(0,u.eq)(A.labelId,d)))};return{streamKey:O,streamMaxLen:Y,attachmentDelivery:P,clearCache:async()=>{c.clearAll(),Ze.clear(),Me=null,T&&await v(M),S.info("[DailyReportService] Server-side DB/SQL caches cleared successfully.")},invalidateHubReadCaches:async(i,s)=>{c.invalidatePrefix(I),c.invalidatePrefix(F),await v(M);for(let d of new Set(i))c.invalidatePrefix(`daily-report:detail:${d}:user:`),await v(`${x}${d}`);for(let d of new Set(s)){let h=ue(d);h&&await v(`${b}${h}`)}},getUserIdByExternalId:qe,getDailyReportIdsByExternalId:cn,getDailyReportIdsFirstPageByExternalId:Xe,readSseStreamAnchor:C,getDailyReportsByBusinessDate:dn,getDailyReportsByBusinessDateByExternalId:fn,getDailyReportDetailById:Ye,getDailyReportDetailByIdByExternalId:bn,getDraftLabelId:gt,getAttachmentsByHubIds:tt,getAttachmentForUser:pn,markAttachmentMissing:yn,markAttachmentPresent:hn,setStarStatus:Rn,setReadStatus:Sn,addComment:Tn,deleteComment:Dn,createDailyReport:wn,updateDailyReport:async(i,s,d,h)=>{let D=await rt(t,i);if(!D.length||D[0].deletedAt)throw new Error("Not Found");if(D[0].userId!==s)throw new Error("Unauthorized");await V(async N=>{d.title!==void 0&&await St(N,i,{title:d.title,updatedAt:new Date,updatedBy:String(s)}),d.content!==void 0&&await Wt(N,i,{body:d.content,updatedAt:new Date,updatedBy:String(s)})}),c.invalidate(`daily-report:detail:${i}`),c.invalidatePrefix(`daily-report:detail:${i}:user:`),c.invalidatePrefix(I),await v(`${x}${i}`);let B=ue(ce(D[0].businessDate,"YYYY-MM-DD"));B&&(c.invalidatePrefix(`daily-report:date:${B}:user:`),await v(`${b}${B}`));let w=await Ye(ye.unrestricted("post-write self read: the writer always sees the row they just wrote"),i,s,{forceRefresh:!0});if(w){let N=await et(),U=w.labels.some(Z=>N.includes(Z.id));await k(Mt.parse({type:"report-update",reportHubId:w.reportHubId,report:w,clientTempId:h,recipientRawUserId:U?s:void 0}),"updateDailyReport")}},publishDailyReport:async(i,s,d)=>{let h=await rt(t,i);if(!h.length)throw new Error("Not Found");if(h[0].userId!==s)throw new Error("Unauthorized");let D=await gt();if(!D)return null;if(await Jt(t,i,D),c.invalidatePrefix(`daily-report:detail:${i}:user:`),c.invalidatePrefix(I),c.invalidatePrefix(F),await v(M),h[0].businessDate){let N=ue(ce(h[0].businessDate,"YYYY-MM-DD"));N&&await v(`${b}${N}`)}let B=ue(ce(h[0].businessDate,"YYYY-MM-DD"));B&&c.invalidatePrefix(ee(B,s));let w=await Ye(ye.unrestricted("post-write self read: the writer always sees the row they just wrote"),i,s,{forceRefresh:!0});return w&&await k(Pt.parse({type:"report-publish",reportHubId:w.reportHubId,report:w,clientTempId:d}),"publishDailyReport"),w??null},deleteDailyReport:async(i,s,d)=>{let h=await rt(t,i);if(!h.length||h[0].deletedAt)throw new Error("Not Found");if(h[0].userId!==s)throw new Error("Unauthorized");if(await St(t,i,{deletedAt:new Date,deletedBy:String(s),updatedAt:new Date,updatedBy:String(s)}),c.invalidatePrefix(`daily-report:detail:${i}:user:`),c.invalidatePrefix(I),c.invalidatePrefix(F),await v(M),h[0].businessDate){let D=ue(ce(h[0].businessDate,"YYYY-MM-DD"));D&&await v(`${b}${D}`)}await k(Lt.parse({type:"report-delete",reportHubId:i,clientTempId:d,sourceType:h[0].sourceType}),"deleteDailyReport")},findDailyReportHubById:rt,updateDailyReportHub:St,updateDailyReportInternal:Wt,deleteDailyReportLabel:Jt}}var Ya=me(1,"[DailyReportExternalSource]"),Qr=(e,t,r,n=Ya)=>{if(!e)return[];try{let a=JSON.parse(e);return Array.isArray(a)?a.map(r).filter(o=>o!==null):(n.warn(`Unexpected ${t} format: not an array`),[])}catch(a){return n.warn(`Failed to parse ${t}:`,a),[]}};var Ke=require("drizzle-orm"),y=require("drizzle-orm/mssql-core");function Xr(e,t){let r=(0,y.mssqlSchema)(e),n=t.userTable,a=r.table("DailyReportHub",{id:(0,y.bigint)("id",{mode:"number"}).identity().notNull(),sourceType:(0,y.nvarchar)("source_type",{length:20}).notNull(),sourceId:(0,y.nvarchar)("source_id",{length:100}).notNull(),sourceIdNum:(0,y.bigint)("source_id_num",{mode:"number"}).generatedAlwaysAs(Ke.sql`TRY_CAST(source_id AS BIGINT)`),businessDate:(0,y.date)("business_date"),userId:(0,y.bigint)("user_id",{mode:"number"}),title:(0,y.nvarchar)("title",{length:200}),summary:(0,y.nvarchar)("summary",{length:"max"}),createdAt:(0,y.datetime2)("created_at").notNull(),createdBy:(0,y.nvarchar)("created_by",{length:50}).notNull(),updatedAt:(0,y.datetime2)("updated_at").notNull(),updatedBy:(0,y.nvarchar)("updated_by",{length:50}).notNull(),deletedAt:(0,y.datetime2)("deleted_at"),deletedBy:(0,y.nvarchar)("deleted_by",{length:50})},m=>[(0,y.primaryKey)({name:`${e}_DailyReportHub_pk`,columns:[m.id]}),(0,y.foreignKey)({name:`${e}_DailyReportHub_user_id_fk`,columns:[m.userId],foreignColumns:[n.id]}),(0,y.index)(`${e}_DailyReportHub_business_date_index`).on(m.businessDate),(0,y.index)(`${e}_DailyReportHub_updated_at_index`).on(m.updatedAt),(0,y.index)(`${e}_DailyReportHub_source_index`).on(m.sourceType,m.sourceId),(0,y.index)(`${e}_DailyReportHub_user_id_index`).on(m.userId),(0,y.index)(`${e}_DailyReportHub_business_date_id_index`).on((0,Ke.desc)(m.businessDate),(0,Ke.desc)(m.id)),(0,y.index)(`${e}_DailyReportHub_deleted_at_index`).on(m.deletedAt)]),o=r.table("DailyReportInternal",{hubId:(0,y.bigint)("hub_id",{mode:"number"}).notNull(),body:(0,y.nvarchar)("body",{length:"max"}),metadata:(0,y.nvarchar)("metadata",{length:"max"}),createdAt:(0,y.datetime2)("created_at").notNull(),createdBy:(0,y.nvarchar)("created_by",{length:50}).notNull(),updatedAt:(0,y.datetime2)("updated_at").notNull(),updatedBy:(0,y.nvarchar)("updated_by",{length:50}).notNull()},m=>[(0,y.primaryKey)({name:`${e}_DailyReportInternal_pk`,columns:[m.hubId]}),(0,y.foreignKey)({name:`${e}_DailyReportInternal_hub_id_fk`,columns:[m.hubId],foreignColumns:[a.id]})]),p=r.table("DailyReportComment",{id:(0,y.bigint)("id",{mode:"number"}).identity().notNull(),hubId:(0,y.bigint)("hub_id",{mode:"number"}).notNull(),userId:(0,y.bigint)("user_id",{mode:"number"}).notNull(),body:(0,y.nvarchar)("body",{length:"max"}).notNull(),createdAt:(0,y.datetime2)("created_at").notNull(),createdBy:(0,y.nvarchar)("created_by",{length:50}).notNull(),updatedAt:(0,y.datetime2)("updated_at").notNull(),updatedBy:(0,y.nvarchar)("updated_by",{length:50}).notNull()},m=>[(0,y.primaryKey)({name:`${e}_DailyReportComment_pk`,columns:[m.id]}),(0,y.foreignKey)({name:`${e}_DailyReportComment_hub_id_fk`,columns:[m.hubId],foreignColumns:[a.id]}),(0,y.foreignKey)({name:`${e}_DailyReportComment_user_id_fk`,columns:[m.userId],foreignColumns:[n.id]}),(0,y.index)(`${e}_DailyReportComment_hub_id_index`).on(m.hubId)]),c=r.table("DailyReportLabel",{id:(0,y.bigint)("id",{mode:"number"}).identity().notNull(),userId:(0,y.bigint)("user_id",{mode:"number"}),name:(0,y.nvarchar)("name",{length:50}).notNull(),color:(0,y.nvarchar)("color",{length:20}),sortOrder:(0,y.int)("sort_order"),createdAt:(0,y.datetime2)("created_at").notNull(),createdBy:(0,y.nvarchar)("created_by",{length:50}).notNull(),updatedAt:(0,y.datetime2)("updated_at").notNull(),updatedBy:(0,y.nvarchar)("updated_by",{length:50}).notNull()},m=>[(0,y.primaryKey)({name:`${e}_DailyReportLabel_pk`,columns:[m.id]}),(0,y.foreignKey)({name:`${e}_DailyReportLabel_user_id_fk`,columns:[m.userId],foreignColumns:[n.id]})]),T=r.table("DailyReportHub_Label",{hubId:(0,y.bigint)("hub_id",{mode:"number"}).notNull(),labelId:(0,y.bigint)("label_id",{mode:"number"}).notNull(),createdAt:(0,y.datetime2)("created_at").notNull(),createdBy:(0,y.nvarchar)("created_by",{length:50}).notNull()},m=>[(0,y.primaryKey)({name:`${e}_DailyReportHub_Label_pk`,columns:[m.hubId,m.labelId]}),(0,y.foreignKey)({name:`${e}_DailyReportHub_Label_hub_id_fk`,columns:[m.hubId],foreignColumns:[a.id]}),(0,y.foreignKey)({name:`${e}_DailyReportHub_Label_label_id_fk`,columns:[m.labelId],foreignColumns:[c.id]})]),l=r.table("DailyReportUserStatus",{hubId:(0,y.bigint)("hub_id",{mode:"number"}).notNull(),userId:(0,y.bigint)("user_id",{mode:"number"}).notNull(),isRead:(0,y.bit)("is_read").default(!1).notNull(),isStarred:(0,y.bit)("is_starred").default(!1).notNull(),createdAt:(0,y.datetime2)("created_at").notNull(),createdBy:(0,y.nvarchar)("created_by",{length:50}).notNull(),updatedAt:(0,y.datetime2)("updated_at").notNull(),updatedBy:(0,y.nvarchar)("updated_by",{length:50}).notNull()},m=>[(0,y.primaryKey)({name:`${e}_DailyReportUserStatus_pk`,columns:[m.hubId,m.userId]}),(0,y.foreignKey)({name:`${e}_DailyReportUserStatus_hub_id_fk`,columns:[m.hubId],foreignColumns:[a.id]}),(0,y.foreignKey)({name:`${e}_DailyReportUserStatus_user_id_fk`,columns:[m.userId],foreignColumns:[n.id]})]),g=r.table("DailyReportAttachment",{id:(0,y.bigint)("id",{mode:"number"}).identity().notNull(),hubId:(0,y.bigint)("hub_id",{mode:"number"}).notNull(),uploadedBy:(0,y.bigint)("uploaded_by",{mode:"number"}),sourceKey:(0,y.nvarchar)("source_key",{length:200}).notNull(),fileName:(0,y.nvarchar)("file_name",{length:255}).notNull(),filePath:(0,y.nvarchar)("file_path",{length:"max"}).notNull(),fileType:(0,y.nvarchar)("file_type",{length:100}),fileSize:(0,y.bigint)("file_size",{mode:"number"}),objectCheckedAt:(0,y.datetime2)("object_checked_at"),objectMissingAt:(0,y.datetime2)("object_missing_at"),createdAt:(0,y.datetime2)("created_at").notNull(),createdBy:(0,y.nvarchar)("created_by",{length:50}).notNull(),updatedAt:(0,y.datetime2)("updated_at").notNull(),updatedBy:(0,y.nvarchar)("updated_by",{length:50}).notNull()},m=>[(0,y.primaryKey)({name:`${e}_DailyReportAttachment_pk`,columns:[m.id]}),(0,y.foreignKey)({name:`${e}_DailyReportAttachment_hub_id_fk`,columns:[m.hubId],foreignColumns:[a.id]}),(0,y.foreignKey)({name:`${e}_DailyReportAttachment_uploaded_by_fk`,columns:[m.uploadedBy],foreignColumns:[n.id]}),(0,y.uniqueIndex)(`${e}_DailyReportAttachment_source_unique`).on(m.hubId,m.sourceKey),(0,y.index)(`${e}_DailyReportAttachment_hub_id_index`).on(m.hubId,m.createdAt)]);return{hub:a,internal:o,comment:p,attachment:g,label:c,hubLabel:T,userStatus:l}}var Va=5e7,zt=2e8,za=1,jt=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})})}),ja=new Map([["uchar",1],["char",1],["ushort",2],["short",2],["uint",4],["int",4],["float",4],["complex",8],["double",8]]),Zr=75,en=4,tn="#ffffff",Ga=1,Wa={png:"VipsForeignLoadPngBuffer",jpeg:"VipsForeignLoadJpegBuffer",gif:"VipsForeignLoadNsgifBuffer",webp:"VipsForeignLoadWebpBuffer"},Ja=[/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/],Vt=Object.freeze({ok:!1,reason:"failed"}),rn=Object.freeze({ok:!1,reason:"unsupported"}),nn=(e,t)=>{switch(t){case"jpeg":{let r=Ut(e);return r===null?null:{layout:r.multiScan?"jpeg-multi-scan":"jpeg-single-scan",coefficientBytes:Ar(r)}}case"png":{let r=wr(e);return r===null?null:{layout:r?"png-interlaced":"png",coefficientBytes:0}}case"gif":return{layout:"gif",coefficientBytes:0};case"webp":{let r=_r(e);return r===null?null:{layout:`webp-${r}`,coefficientBytes:0}}}},an=(e,t)=>{let r=ja.get(t.depth);if(r===void 0)return null;let n=t.channels*r,a=jt,o=a.wholeImageBuffer[e.layout];return(o.kind==="none"?0:o.kind==="decoded-raster"?t.width*t.height*n:o.kind==="jpeg-coefficients"?e.coefficientBytes:t.width*t.height*o.bytesPerPixel)+a.pipelineRows*t.width*n+a.fixedBytes},on=(e,t,r)=>{let n=nn(e,t);return n===null?null:an(n,r)},Ka=e=>e!==null&&e<=zt,Qa=e=>{let t=e instanceof Error?e.message:"";return Ja.some(r=>r.test(t))?"failed":"unsupported"},sn=e=>{e.cache(!1),e.concurrency(za),e.block({operation:["VipsForeignLoad"]}),e.unblock({operation:Object.values(Wa)});let t=async(n,a,o,p,c)=>{let T=nn(n,a);if(T===null)return rn;try{let l=e(n,{limitInputPixels:Va,animated:!1});if(!Ka(an(T,await l.metadata())))return rn;if(c.aborted)return Vt;let g=await l.rotate().resize({width:o,height:p,fit:"inside",withoutEnlargement:!0}).flatten({background:tn}).webp({quality:Zr,effort:en}).toBuffer();return{ok:!0,bytes:new Uint8Array(g),contentType:"image/webp"}}catch(l){return{ok:!1,reason:Qa(l)}}},r=async(n,{format:a,maxWidth:o,maxHeight:p,signal:c})=>{if(c.aborted)return Vt;let T=await t(n,a,o,p,c);return c.aborted?Vt:T};return{id:`sharp-${e.versions.sharp}/vips-${e.versions.vips}/webp-q${Zr}-e${en}/flatten-${tn}/v${Ga}`,render:r}};function Xa(e){e.redis||(e.logger??console).warn("[DailyReport] redis provider is not injected: cross-worker cache invalidation is disabled (staleness is bounded only by TTL) and SSE publishing is skipped.");let t=nt(e.redis),r=new ke({defaultTtlMs:e.cacheDefaultTtlMs??6e4},t),n=bt({...e,cache:r,epochs:t}),a=new $e({redis:e.redis,streamKey:n.streamKey,cache:r,logger:e.logger}),o=ft({authenticate:e.authenticate,resolveVisibleSourceTypes:e.resolveVisibleSourceTypes,service:n,encodeUserId:e.encodeUserId,attachmentRateLimitPerMinute:e.attachmentRateLimitPerMinute,attachmentConcurrency:e.attachmentConcurrency,attachmentThumbnailRateLimitPerMinute:e.attachmentThumbnailRateLimitPerMinute,attachmentThumbnailConcurrency:e.attachmentThumbnailConcurrency,attachmentThumbnailCacheBytes:e.attachmentThumbnailCacheBytes,redis:e.redis,sseReader:a,streamKey:n.streamKey,loginRedirectPath:e.loginRedirectPath,enableDevCacheClear:e.enableDevCacheClear,logger:e.logger});return{service:n,cache:r,epochs:t,sseReader:a,streamKey:n.streamKey,knownSourceTypes:[...new Set(["Internal",...(e.externalSources??[]).map(p=>p.sourceType)])],...o}}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_WORKING_SET_MODEL,DAILY_REPORT_SSE_CATCH_UP_BATCH,DAILY_REPORT_SSE_VISIBILITY_REFRESH_MS,DailyReportSseReader,DailyReportViewerScope,SqlResultCache,createDailyReportHandlers,createDailyReportServer,createDailyReportService,createEpochStore,createSharpThumbnailRenderer,defineDailyReportSchema,generateETag,isStreamIdLte,jsonResponseWithETag,predictSharpThumbnailWorkingSetBytes,transformJsonArray});
|
|
1
|
+
"use strict";var Dt=Object.defineProperty;var qn=Object.getOwnPropertyDescriptor;var Yn=Object.getOwnPropertyNames;var Vn=Object.prototype.hasOwnProperty;var Qt=e=>{throw TypeError(e)};var zn=(e,t)=>{for(var r in t)Dt(e,r,{get:t[r],enumerable:!0})},Jn=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of Yn(t))!Vn.call(e,a)&&a!==r&&Dt(e,a,{get:()=>t[a],enumerable:!(n=qn(t,a))||n.enumerable});return e};var jn=e=>Jn(Dt({},"__esModule",{value:!0}),e);var Xt=(e,t,r)=>t.has(e)||Qt("Cannot "+r);var ze=(e,t,r)=>(Xt(e,t,"read from private field"),r?r.call(e):t.get(e)),wt=(e,t,r)=>t.has(e)?Qt("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,r),_t=(e,t,r,n)=>(Xt(e,t,"write to private field"),n?n.call(e,r):t.set(e,r),r);var Ti={};zn(Ti,{DAILY_REPORT_ATTACHMENT_THUMBNAIL_MAX_OUTPUT_BYTES:()=>Ft,DAILY_REPORT_ATTACHMENT_THUMBNAIL_OUTPUT_MEDIA_TYPES:()=>Ht,DAILY_REPORT_SHARP_THUMBNAIL_DECODE_BUDGET_BYTES:()=>Jt,DAILY_REPORT_SHARP_THUMBNAIL_WORKING_SET_MODEL:()=>jt,DAILY_REPORT_SSE_CATCH_UP_BATCH:()=>ft,DAILY_REPORT_SSE_VISIBILITY_REFRESH_MS:()=>zt,DailyReportSseReader:()=>He,DailyReportViewerScope:()=>ye,SqlResultCache:()=>Le,createDailyReportHandlers:()=>gt,createDailyReportServer:()=>Si,createDailyReportService:()=>bt,createEpochStore:()=>it,createSharpThumbnailRenderer:()=>wn,defineDailyReportSchema:()=>mn,generateETag:()=>Be,isStreamIdLte:()=>De,jsonResponseWithETag:()=>pe,predictSharpThumbnailWorkingSetBytes:()=>Dn,transformJsonArray:()=>dn});module.exports=jn(Ti);var it=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{}}}),Le=class{constructor(t,r){this.config=t;this.epochStore=r;this.buckets=new Map;this.inFlight=new Map;this.invalidate=t=>{this.buckets.delete(t),this.inFlight.delete(t)};this.maybeRefreshAhead=t=>{let r=t.refreshAheadRatio;if(r===void 0)return;let{cacheKey:n}=t,a=this.buckets.get(n);if(!a)return;let i=t.ttlMsOverride??this.config.defaultTtlMs;if(i-(a.expireAt-Date.now())<i*r||this.inFlight.has(n))return;let c;c=(async()=>{let S=t.epochKey?await this.epochStore.getEpoch(t.epochKey):null,s=await t.fetcher();return this.inFlight.get(n)===c&&this.buckets.set(n,{records:s,expireAt:Date.now()+i,epoch:S}),s})(),this.inFlight.set(n,c),c.catch(()=>{}).finally(()=>{this.inFlight.get(n)===c&&this.inFlight.delete(n)})};this.getOrFetch=async t=>{let{cacheKey:r,forceRefresh:n,snapshot:a}=t,i=this.buckets.get(r);if(n&&(this.buckets.delete(r),this.inFlight.delete(r)),!n&&i&&i.expireAt>Date.now())if(t.epochKey){let c=await this.epochStore.getEpoch(t.epochKey);if(c===null||i.epoch===c)return this.maybeRefreshAhead(t),a?i.records.map(S=>structuredClone(S)):i.records;this.buckets.delete(r)}else return this.maybeRefreshAhead(t),a?i.records.map(c=>structuredClone(c)):i.records;if(!n&&this.inFlight.has(r)){let c=await this.inFlight.get(r);return a?c.map(S=>structuredClone(S)):c}let p;p=(async()=>{let c=t.epochKey?await this.epochStore.getEpoch(t.epochKey):null;t.onFetchStart?.();let S=await t.fetcher();if(n||this.inFlight.get(r)===p){let s=Date.now()+(t.ttlMsOverride??this.config.defaultTtlMs);this.buckets.set(r,{records:S,expireAt:s,epoch:c}),this.buckets.size>500&&this.cleanExpired()}return S})(),n||this.inFlight.set(r,p);try{let c=await p;return a?c.map(S=>structuredClone(S)):c}finally{this.inFlight.get(r)===p&&this.inFlight.delete(r)}};this.flush=t=>{this.buckets.delete(t),this.inFlight.delete(t)};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)}}cleanExpired(){let t=Date.now();for(let[r,n]of this.buckets.entries())n.expireAt<=t&&this.buckets.delete(r)}};var ln=require("@aiquants/sse"),we=require("@aiquants/sse/server");var Gn=/^\d{4}-\d{2}-\d{2}$/,Wn=/^\d{4}\/\d{2}\/\d{2}$/,Zt=e=>e<10?`0${e}`:`${e}`,er=e=>{if(Number.isNaN(e.getTime()))return null;let t=e.getFullYear(),r=Zt(e.getMonth()+1),n=Zt(e.getDate());return`${t}-${r}-${n}`};var ue=e=>{if(e==null)return null;if(e instanceof Date)return er(e);let t=e.trim();if(t==="")return null;if(Gn.test(t))return t;if(Wn.test(t))return t.replaceAll("/","-");let r=new Date(t);return er(r)};var It=e=>{let t=2166136261,r=-624069552;for(let n of e){let a=n.reportHubId;t^=a&255,t=Math.imul(t,16777619),t^=a>>>8&255,t=Math.imul(t,16777619),t^=a>>>16&255,t=Math.imul(t,16777619),t^=a>>>24&255,t=Math.imul(t,16777619),r^=a>>>24&255,r=Math.imul(r,16777619),r^=a>>>16&255,r=Math.imul(r,16777619),r^=a>>>8&255,r=Math.imul(r,16777619),r^=a&255,r=Math.imul(r,16777619);let i=n.businessDate;if(i===null)t^=1,t=Math.imul(t,16777619),r^=1,r=Math.imul(r,16777619);else for(let p=0;p<i.length;p++){let c=i.charCodeAt(p);t^=c&255,t=Math.imul(t,16777619),r^=c&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+(?=.)/,"")},ot=(e,t)=>e.businessDate!==t.businessDate?e.businessDate===null?1:t.businessDate===null||e.businessDate>t.businessDate?-1:1:t.reportHubId-e.reportHubId,tr=e=>{for(let t=1;t<e.length;t++)if(ot(e[t-1],e[t])>0)return!1;return!0};var rr=(e,t)=>{let r=e.findIndex(n=>ot({businessDate:n.businessDate,reportHubId:n.reportHubId},t)>0);return r===-1?e.length:r};var me=(e,t,r=console)=>{let n=a=>typeof a=="string"?[`${t} ${a}`]:[t,a];return{debug:(a,...i)=>{e<=0&&r.debug(...n(a),...i)},info:(a,...i)=>{e<=1&&r.info(...n(a),...i)},warn:(a,...i)=>{e<=2&&r.warn(...n(a),...i)},error:(a,...i)=>{e<=3&&r.error(...n(a),...i)}}};var g=require("zod");var nr=15e3,ar="lastEventId",Kn=/^\d{1,15}-\d{1,15}$/,ir=e=>Kn.test(e),Qn=g.z.object({name:g.z.string().nullish(),affiliation:g.z.string().nullish()}),Xn=g.z.object({name:g.z.string().nullish(),text:g.z.string().nullish(),color:g.z.string().nullish()}),Zn=g.z.object({id:g.z.number(),name:g.z.string().nullish(),color:g.z.string().nullish()}),or=g.z.object({id:g.z.number(),userId:g.z.string().nullish(),userName:g.z.string().nullish(),content:g.z.string().nullish(),createdAt:g.z.string().nullish(),isMine:g.z.boolean()}),ea=g.z.object({id:g.z.string(),fileName:g.z.string(),fileType:g.z.string().nullable(),fileSize:g.z.number().nullable(),createdAt:g.z.string().nullable(),state:g.z.enum(["present","absent","unknown"]),hasThumbnail:g.z.boolean().default(!1)}),Et=g.z.object({reportHubId:g.z.number(),date:g.z.string().nullish(),createdAt:g.z.string().nullish(),author:g.z.string().nullish(),userId:g.z.string().nullish(),sourceType:g.z.string().nullish(),employeeName:g.z.string().nullish(),updatedBy:g.z.string().nullish(),updatedAt:g.z.string().nullish(),category:g.z.string().nullish(),creationCategory:g.z.string().nullish(),visitTimeFrom:g.z.string().nullish(),visitTimeTo:g.z.string().nullish(),customerName:g.z.string().nullish(),interviewers:g.z.array(Qn),subject:g.z.string().nullish(),content:g.z.string().nullish(),externalComments:g.z.array(Xn),isRead:g.z.boolean(),isStarred:g.z.boolean(),labels:g.z.array(Zn),postedComments:g.z.array(or),attachments:g.z.array(ea).default([])}),ta=g.z.object({type:g.z.literal("connected")}),st=g.z.object({type:g.z.literal("status-update"),reportHubId:g.z.number(),statusType:g.z.enum(["star","read"]),value:g.z.boolean(),clientTempId:g.z.string(),recipientRawUserId:g.z.number().optional()}),Ct=g.z.string().optional(),xt=g.z.object({type:g.z.literal("comment-add"),reportHubId:g.z.number(),comment:or,clientTempId:g.z.string(),recipientRawUserId:g.z.number().optional(),sourceType:Ct}),Mt=g.z.object({type:g.z.literal("comment-delete"),reportHubId:g.z.number(),commentId:g.z.number(),clientTempId:g.z.string(),recipientRawUserId:g.z.number().optional(),sourceType:Ct}),vt=g.z.object({type:g.z.literal("report-create"),reportHubId:g.z.number(),report:Et,clientTempId:g.z.string(),recipientRawUserId:g.z.number().optional()}),Pt=g.z.object({type:g.z.literal("report-update"),reportHubId:g.z.number(),report:Et,clientTempId:g.z.string(),recipientRawUserId:g.z.number().optional()}),kt=g.z.object({type:g.z.literal("report-publish"),reportHubId:g.z.number(),report:Et,clientTempId:g.z.string(),recipientRawUserId:g.z.number().optional()}),Lt=g.z.object({type:g.z.literal("report-delete"),reportHubId:g.z.number(),clientTempId:g.z.string(),sourceType:Ct}),sr=g.z.discriminatedUnion("type",[ta,st,xt,Mt,vt,Pt,kt,Lt]);var Nt=Object.freeze({tile:Object.freeze({maxWidth:480,maxHeight:320})}),lr=e=>Object.hasOwn(Nt,e);var ra="download",na="thumbnail",aa="1";var ur=e=>{let t=e.getAll(na),r=e.getAll(ra);if(t.length>0&&r.length>0)return{kind:"invalid",reason:"conflict"};if(t.length>0){let[n]=t;return t.length===1&&lr(n)?{kind:"thumbnail",variant:n}:{kind:"invalid",reason:"thumbnail_variant"}}return r.length>0?r.length===1&&r[0]===aa?{kind:"download"}:{kind:"invalid",reason:"download_value"}:{kind:"inline"}};var cr=(e,t)=>(r,n)=>{let a=n?"markAttachmentPresent":"markAttachmentMissing";e[a](r).catch(i=>{t.error(`${a} failed attachment=${r} message=${i instanceof Error?i.message:"unknown"}`)})};var lt=6e4/1e3,ut=5e3/1e3,Je="same-origin",dr=(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},mr=new Set(["image/png","image/jpeg","image/gif","image/webp","application/pdf","text/plain"]),oa=/^[\x20-\x7E]+$/,sa=/^[\w.+-]+\/[\w.+-]+/,Ot=e=>e&&oa.test(e)&&sa.test(e)?e:null,pr=e=>encodeURIComponent(e).replace(/['()*]/g,t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`),yr=e=>e.replace(/[^\x20-\x7E]/g,"_").replace(/["\\]/g,"_"),ct=e=>{switch(e){case"not_found":case"denied":case"invalid_path":return 404;case"too_large":return 413;default:return 502}},hr={404:"Attachment not found",413:"Attachment too large",502:"Attachment storage unavailable"},Ne="Attachment request failed";var la=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 ${la(r)}`),dt=(e,t)=>new TypeError(`[daily-report] ${e} must be ${t}`);var fr=32*1024*1024,ua=60,ca=4,da=120,ma=2,pa=8*1024*1024,he=(e,t,r)=>{if(typeof t=="number"&&Number.isSafeInteger(t)&&t>=r)return t;throw Oe(e,`an integer >= ${r}`,t)},Ie=(e,t,r,n)=>t===void 0?n:he(e,t,r),ya=[["attachmentThumbnailRenderer",["readAttachment","attachmentIdCodec"]],["readAttachment",["attachmentIdCodec"]],["attachmentIdCodec",["readAttachment"]],["attachmentMaxBytes",["readAttachment"]],["attachmentRateLimitPerMinute",["readAttachment"]],["attachmentConcurrency",["readAttachment"]],["attachmentThumbnailRateLimitPerMinute",["attachmentThumbnailRenderer"]],["attachmentThumbnailConcurrency",["attachmentThumbnailRenderer"]],["attachmentThumbnailCacheBytes",["attachmentThumbnailRenderer"]]],Bt=e=>{for(let[t,r]of ya){if(e[t]===void 0)continue;let n=r.find(a=>e[a]===void 0);if(n!==void 0)throw dt(n,`injected when ${t} is given`)}},gr=(e,t)=>(Bt({attachmentIdCodec:t.idCodec,readAttachment:t.readAttachment,attachmentThumbnailRenderer:t.thumbnailRenderer,attachmentRateLimitPerMinute:e.attachmentRateLimitPerMinute,attachmentConcurrency:e.attachmentConcurrency,attachmentThumbnailRateLimitPerMinute:e.attachmentThumbnailRateLimitPerMinute,attachmentThumbnailConcurrency:e.attachmentThumbnailConcurrency,attachmentThumbnailCacheBytes:e.attachmentThumbnailCacheBytes}),Object.freeze({originalRateLimitPerMinute:Ie("attachmentRateLimitPerMinute",e.attachmentRateLimitPerMinute,1,ua),originalConcurrency:Ie("attachmentConcurrency",e.attachmentConcurrency,1,ca),thumbnailRateLimitPerMinute:Ie("attachmentThumbnailRateLimitPerMinute",e.attachmentThumbnailRateLimitPerMinute,1,da),thumbnailConcurrency:Ie("attachmentThumbnailConcurrency",e.attachmentThumbnailConcurrency,1,ma),thumbnailCacheBytes:Ie("attachmentThumbnailCacheBytes",e.attachmentThumbnailCacheBytes,0,pa)}));var mt=e=>{let t=he("limit",e.limit,1),r=e.queue===null?null:{max:he("queue.max",e.queue.max,0),maxPerOwner:he("queue.maxPerOwner",e.queue.maxPerOwner,0),maxWaitMs:he("queue.maxWaitMs",e.queue.maxWaitMs,1)},n=0,a=[],i=new Map,p=(s,b)=>{let m=(i.get(s)??0)+b;m<=0?i.delete(s):i.set(s,m)},c=()=>{for(;n<t;){let s=a.shift();if(!s)return;p(s.owner,-1),n+=1,s.grant(S())}},S=()=>{let s=!1;return()=>{s||(s=!0,n-=1,c())}};return{acquire:(s,b)=>{if(b.aborted)return Promise.resolve(null);if(n<t)return n+=1,Promise.resolve(S());if(r===null||a.length>=r.max||(i.get(s)??0)>=r.maxPerOwner)return Promise.resolve(null);let{maxWaitMs:m}=r,D=T=>{let E=()=>{let A=a.indexOf(q);A<0||(a.splice(A,1),p(s,-1),K(),T(null))},z=setTimeout(E,m);z.unref?.();let K=()=>{clearTimeout(z),b.removeEventListener("abort",E)},q={owner:s,grant:A=>{K(),T(A)}};a.push(q),p(s,1),b.addEventListener("abort",E,{once:!0})};return new Promise(D)}}};var ha=1024,je=e=>{he("limitPerMinute",e,1);let t=new Map,r=(p,c)=>{c<=p.lastRefillMs||(p.tokens=Math.min(e,p.tokens+(c-p.lastRefillMs)*e/6e4),p.lastRefillMs=c)},n=(p,c)=>{let S=t.get(p);S&&t.delete(p);let s=S??{tokens:e,lastRefillMs:c,deniedSinceAdmission:0};r(s,c),t.set(p,s);for(let b of t.keys()){if(t.size<=ha)break;t.delete(b)}return s},a=p=>{if(p.tokens<1)return null;p.tokens-=1;let c=Math.max(0,p.deniedSinceAdmission-1);return p.deniedSinceAdmission=0,{allowed:!0,suppressedDenials:c}},i=p=>(p.deniedSinceAdmission+=1,{allowed:!1,firstDenial:p.deniedSinceAdmission===1});return{consume:(p,c)=>{let S=n(p,c);return a(S)??i(S)},refund:(p,c,S)=>{let s=t.get(p);s&&(r(s,c),s.tokens=Math.min(e,s.tokens+S))}}};var fa=12e4,ga=(e,t,r)=>{let n=setTimeout(t,r);n.unref?.();let a=()=>{clearTimeout(n),t()},i=!1;return new ReadableStream({pull(p){if(i){p.close(),a();return}i=!0,p.enqueue(e)},cancel(){a()}})},br=e=>{let{service:t,encodeUserId:r,resolveViewerScope:n,logger:a,recordObjectState:i}=e,p=t.attachmentDelivery,c=je(e.rateLimitPerMinute),S=mt({limit:e.concurrency,queue:null});return async s=>{let{request:b,delivery:m,attachmentId:D,internalUserId:T,readAttachment:E,cookie:z,fail:K}=s,q=p.maxBytes,A=c.consume(T,Date.now());if(!A.allowed)return A.firstDenial&&a.warn(`429 attachment=${D} viewer=${T} reason=rate_limit`),K(429,"Too many requests",{"Retry-After":String(lt)});A.suppressedDenials>0&&a.warn(`rate_limit_suppressed count=${A.suppressedDenials} viewer=${T}`);let k=await n(b),Y=await t.getAttachmentForUser(k,D,T);if(!Y)return a.warn(`404 attachment=${D} viewer=${T} reason=not_visible`),K(404,"Attachment not found");if(Y.fileSize!=null&&Y.fileSize>q)return a.warn(`413 attachment=${D} viewer=${T} reason=db_size`),K(413,"Attachment too large");let $=await S.acquire(T,b.signal);if(!$)return b.signal.aborted?(a.info(`503 attachment=${D} viewer=${T} reason=aborted`),K(503,"Attachment request aborted")):(a.warn(`503 attachment=${D} viewer=${T} reason=concurrency`),K(503,"Too many concurrent downloads",{"Retry-After":String(ut)}));let R=!1;try{let P=b.method==="HEAD",I=await E(Y.filePath,{maxBytes:q,head:P,principal:r(T),signal:b.signal});if(b.signal.aborted)return a.info(`503 attachment=${D} viewer=${T} reason=aborted`),K(503,"Attachment request aborted");if(!I.ok){let M=ct(I.reason);return I.reason==="not_found"&&i(D,!1),a.warn(`${M} attachment=${D} viewer=${T} reason=${I.reason} code=${I.code??"-"}`),K(M,hr[M])}if(I.bytes.byteLength>q)return a.error(`500 attachment=${D} viewer=${T} reason=port_contract code=over_max_bytes`),K(500,Ne);let v=Ot(Y.fileType)??Ot(I.contentType),h=v!==null&&mr.has(v),C=h?v:"application/octet-stream",U=h&&m.kind!=="download"?"inline":"attachment",O=I.size??I.bytes.byteLength,V=new Headers({"Content-Type":C,"Content-Length":String(O),"Content-Disposition":`${U}; filename="${yr(Y.fileName)}"; filename*=UTF-8''${pr(Y.fileName)}`,"Cache-Control":"private, no-store","X-Content-Type-Options":"nosniff","Content-Security-Policy":"default-src 'none'; sandbox","X-Frame-Options":"SAMEORIGIN","Cross-Origin-Resource-Policy":Je});return z&&V.append("Set-Cookie",z),i(D,!0),a.info(`200 attachment=${D} viewer=${T} type=${C} disposition=${U} bytes=${O}`),P?new Response(null,{status:200,headers:V}):(R=!0,new Response(ga(I.bytes,$,fa),{status:200,headers:V}))}finally{R||$()}}};var fe=Object.freeze({queueWaitMs:3e4,readMs:3e4,renderMs:1e4,transferMarginMs:5e3}),Ki=fe.queueWaitMs+fe.readMs+fe.renderMs+fe.transferMarginMs;var Rr=require("crypto"),Be=e=>{let t=JSON.stringify(e);return`"${(0,Rr.createHash)("sha256").update(t).digest("hex")}"`};var Ar=require("buffer"),Dr=new Set([194,198,202,206]),ba=new Set([192,193,194,195]),wr=216,Ra=217,_r=218,Sa=4,Ta=64,Aa=2,Sr=8,Tr=28,Ae=12,Ut=8,Da=20,Ir=Ae+Ut+10,wa=2,Se=(e,t)=>e[t]<<8|e[t+1],Ue=(e,t,r)=>{let n=0;for(let a=r-1;a>=0;a-=1)n=n*256+e[t+a];return n},ge=(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},Er=e=>e>=192&&e<=207&&e!==196&&e!==200&&e!==204,Cr=()=>({marker:0,body:0,length:0,end:0}),xr=e=>e[0]===255&&e[1]===wr,Mr=(e,t,r)=>{let n=t;for(;;){if(n>=e.byteLength||e[n]!==255)return null;for(;n<e.byteLength&&e[n]===255;)n+=1;if(n>=e.byteLength)return null;let a=e[n];if(n+=1,a===Ra)return"eoi";if(a===0||a===wr)return null;if(a===1||a>=208&&a<=215)continue;if(n+2>e.byteLength)return null;let i=Se(e,n),p=n+i;return i<2||p>e.byteLength?null:(r.marker=a,r.body=n+2,r.length=i,r.end=p,"segment")}},_a=(e,t)=>{let r=t;for(;;){let n=e.indexOf(255,r);if(n<0||n+1>=e.byteLength)return e.byteLength;let a=e[n+1];if(a!==0&&a!==255&&(a<208||a>215))return n;r=n+1}},vr=(e,{marker:t,body:r,length:n})=>{if(n<8)return null;let a=Se(e,r+1),i=Se(e,r+3),p=e[r+5];if(i===0||a===0||p===0||n!==8+3*p)return null;let c=[];for(let S=0;S<p;S+=1){let s=e[r+7+3*S],b=s>>4,m=s&15;if(b<1||b>4||m<1||m>4)return null;c.push({id:e[r+6+3*S],horizontal:b,vertical:m})}return{marker:t,width:i,height:a,components:c}},Pr=(e,{body:t,length:r})=>{if(r<3)return null;let n=e[t];return n<1||n>Sa||r!==6+2*n?null:Array.from({length:n},(a,i)=>e[t+1+2*i])},kr=(e,t)=>({width:e.width,height:e.height,components:e.components.map(({horizontal:r,vertical:n})=>({horizontal:r,vertical:n})),multiScan:Dr.has(e.marker)||t<e.components.length}),$t=e=>{if(!xr(e))return null;let t=Cr(),r=null;for(let n=2;;){if(Mr(e,n,t)!=="segment")return null;if(Er(t.marker)){if(r!==null||(r=vr(e,t),r===null))return null}else if(t.marker===_r){if(r===null)return null;let a=Pr(e,t);return a===null?null:kr(r,a.length)}n=t.end}},Lr=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:a})=>{let i=Math.ceil(e.width*n/(t*Sr)),p=Math.ceil(e.height*a/(r*Sr));return Math.ceil(i/n)*n*Math.ceil(p/a)*a})},Nr=e=>e.multiScan?Lr(e).reduce((r,n)=>r+n,0)*Ta*Aa:0,Ia=896,Or=(e,t)=>{if(!xr(e))return null;let r=Ar.Buffer.from(e.buffer,e.byteOffset,e.byteLength),n=Cr(),a=null,i=null,p=new Map,c=0,S=0,s=0;for(let b=2;;){let m=Mr(e,b,n);if(m===null)return null;if(m==="eoi")return i===null?null:{header:i,blockVisits:S};if(b=n.end,Er(n.marker)){if(a!==null||!ba.has(n.marker)||(a=vr(e,n),a===null))return null;let D=Lr(a);p=new Map;for(let[T,E]of a.components.entries()){let z=p.get(E.id);p.set(E.id,z===void 0?D[T]:Math.max(z,D[T]))}c=a.components.length*(Dr.has(a.marker)?Ia:1)}else if(n.marker===_r){if(a===null||s===c)return null;let D=Pr(e,n);if(D===null)return null;for(let T of D){let E=p.get(T);if(E===void 0)return null;S+=E}if(s+=1,i===null&&(i=kr(a,D.length)),S>t||!i.multiScan)return{header:i,blockVisits:S};b=_a(r,n.end)}}},Br=e=>{if(e.byteLength<24||Se(e,8)!==0||Se(e,10)!==13||!ge(e,12,"IHDR"))return null;let t=Se(e,16)*65536+Se(e,18),r=Se(e,20)*65536+Se(e,22);return t===0||r===0||t>2147483647||r>2147483647?null:{width:t,height:r}},Ea=e=>{if(ge(e,Ae,"VP8 ")){if(e.byteLength<30||(e[20]&1)!==0||e[23]!==157||e[24]!==1||e[25]!==42)return null;let t=Ue(e,26,2)&16383,r=Ue(e,28,2)&16383;return t===0||r===0?null:{width:t,height:r}}if(ge(e,Ae,"VP8L")){if(e.byteLength<25||e[20]!==47)return null;let t=Ue(e,21,4);return{width:(t&16383)+1,height:Math.floor(t/16384)%16384+1}}return ge(e,Ae,"VP8X")?e.byteLength<Ir?null:{width:Ue(e,24,3)+1,height:Ue(e,27,3)+1}:null},Ur=e=>{if(Br(e)===null||e.byteLength<=Tr)return null;switch(e[Tr]){case 0:return!1;case 1:return!0;default:return null}},$r=e=>{if(ge(e,Ae,"VP8 "))return"lossy";if(ge(e,Ae,"VP8L"))return"lossless";if(!ge(e,Ae,"VP8X")||e.byteLength<Ir)return null;if((e[Da]&wa)!==0)return"animated";let t=!1;for(let r=Ae;r+Ut<=e.byteLength;){if(ge(e,r,"VP8L"))return"lossless";if(ge(e,r,"VP8 "))return t?"lossy-alpha":"lossy";ge(e,r,"ALPH")&&(t=!0);let n=Ue(e,r+4,4);r+=Ut+n+n%2}return null},Hr={png:Br,jpeg:$t,webp:Ea};var Ca=new Set(["image/png","image/jpeg","image/gif","image/webp"]),Ht=Object.freeze(["image/webp","image/jpeg","image/png"]),xa={"image/webp":"webp","image/jpeg":"jpeg","image/png":"png"},Ma=new Set(Ht),va=e=>typeof e=="string"&&Ma.has(e),Ft=1024*1024,Pa=256,pt=(e,t)=>e.fileType===null||!Ca.has(e.fileType)?!1:e.fileSize===null||e.fileSize<=t,ka=[137,80,78,71,13,10,26,10],La=[255,216,255],Na=[[71,73,70,56,55,97],[71,73,70,56,57,97]],Oa=[82,73,70,70],Ba=[87,69,66,80],Ge=(e,t,r)=>{if(e.byteLength<r+t.length)return!1;for(let[n,a]of t.entries())if(e[r+n]!==a)return!1;return!0},qt=e=>{if(Ge(e,ka,0))return"png";if(Ge(e,La,0))return"jpeg";for(let t of Na)if(Ge(e,t,0))return"gif";return Ge(e,Oa,0)&&Ge(e,Ba,8)?"webp":null},Fr=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:Be([t])}},Yt=(e,t)=>{if(!va(e.contentType))return"content_type";if(!(e.bytes instanceof Uint8Array))return"bytes";if(e.bytes.byteLength===0)return"empty";if(e.bytes.byteLength>Ft)return"too_large";let r=xa[e.contentType];if(qt(e.bytes)!==r)return"signature";let n=Hr[r](e.bytes);return n===null||n.width>t.maxWidth||n.height>t.maxHeight?"dimensions":null},qr=e=>{he("maxBytes",e.maxBytes,0),he("maxEntries",e.maxEntries,0);let t=new Map,r=0,n=a=>{let i=t.get(a);i&&(t.delete(a),r-=i.weight)};return{get:a=>{let i=t.get(a);if(i)return t.delete(a),t.set(a,i),i.entry},set:(a,i)=>{n(a);let p=(i.kind==="thumbnail"?i.bytes.byteLength:0)+Pa;if(p>e.maxBytes||e.maxEntries===0)return;let c=i.kind==="thumbnail"?{kind:"thumbnail",bytes:i.bytes.slice(),contentType:i.contentType}:i;t.set(a,{entry:c,weight:p}),r+=p;for(let S of t.keys()){if(r<=e.maxBytes&&t.size<=e.maxEntries)break;n(S)}}}};var Yr=()=>{let e=new Map;return{join:(t,r,n)=>{let a=()=>{let S=new AbortController,s=()=>{e.get(t)?.controller===S&&e.delete(t)},m={promise:n(S.signal).finally(s),controller:S,waiters:0};return e.set(t,m),m},i=e.get(t)??a();i.waiters+=1;let p=()=>{i.waiters-=1,!(i.waiters>0)&&(i.controller.abort(),e.get(t)===i&&e.delete(t))};r.aborted?p():r.addEventListener("abort",p,{once:!0});let c=()=>{r.removeEventListener("abort",p)};return i.promise.finally(c)}}};var Vt=e=>{let{budgetMs:t,flightSignal:r,call:n,onOverrun:a,onStuck:i}=e,p=Date.now(),c=new AbortController,S=!1,s,b,m=($,R)=>{let P=setTimeout($,R);return P.unref?.(),P},D=()=>{i(Date.now()-p)},T=$=>{s=m(()=>{S=!0,$({timedOut:!0}),b=m(D,t),c.abort(new DOMException(`stage exceeded its ${t} ms budget`,"TimeoutError"))},t)},E=new Promise(T),z=AbortSignal.any([r,c.signal]),K=$=>{$(n(z))},q=new Promise(K),A=$=>(clearTimeout(s),clearTimeout(b),S&&a(Date.now()-p,$.kind==="error"?{error:$.error}:null),$),k=q.then($=>A({kind:"value",value:$}),$=>A({kind:"error",error:$}));return{outcome:Promise.race([q.then($=>({timedOut:!1,value:$})),E]),settled:k}};var Ee={404:"Attachment not found",500:Ne,502:"Thumbnail unavailable",503:"Too many concurrent thumbnail requests"},Vr=e=>{let{gate:t,cache:r,maxBytes:n,encodeUserId:a,recordObjectState:i,logger:p}=e,c=(b,m)=>{if(b.fileSize===null||(m.kind==="exact"?m.bytes===b.fileSize:b.fileSize>m.maxBytes))return"verified";let T=m.kind==="exact"?String(m.bytes):`>${m.maxBytes}`;return p.warn(`size_mismatch expected=${b.fileSize} got=${T} attachment=${b.attachmentId} viewer=${b.owner} variant=thumbnail`),"unverified"},S=(b,m)=>(D,T)=>{let E=T===null?"":` message=${T.error instanceof Error?T.error.message:"unknown"}`;p.warn(`${b}_overrun ms=${D} attachment=${m.attachmentId} viewer=${m.owner} variant=thumbnail${E}`)},s=(b,m)=>D=>{p.warn(`${b}_stuck ms=${D} attachment=${m.attachmentId} viewer=${m.owner} variant=thumbnail`)};return async(b,m)=>{let D=await t.acquire(b.owner,m);if(!D)return{kind:"failure",status:503,reason:m.aborted?"aborted":"queue"};let T=null;try{if(m.aborted)return{kind:"failure",status:503,reason:"aborted"};let E=r.get(b.key);if(E!==void 0)return{...E,identity:"verified"};let z=Vt({budgetMs:fe.readMs,flightSignal:m,call:h=>b.readAttachment(b.filePath,{maxBytes:n,head:!1,principal:a(b.owner),signal:h}),onOverrun:S("read",b),onStuck:s("read",b)}),K=await z.outcome;if(K.timedOut)return T=z.settled,m.aborted?{kind:"failure",status:503,reason:"aborted"}:{kind:"failure",status:502,reason:"read_timeout"};if(m.aborted)return{kind:"failure",status:503,reason:"aborted"};let q=K.value;if(!q.ok&&q.reason!=="too_large")return q.reason==="not_found"&&i(b.attachmentId,!1),{kind:"failure",status:ct(q.reason)===404?404:502,reason:q.reason,code:q.code};if(q.ok&&q.bytes.byteLength>n)return{kind:"failure",status:500,reason:"port_contract",code:"over_max_bytes"};let A=c(b,q.ok?{kind:"exact",bytes:q.bytes.byteLength}:{kind:"over",maxBytes:n}),k=h=>{A==="verified"&&r.set(b.key,h)},Y=h=>(k(h),{...h,identity:A});if(!q.ok)return Y({kind:"unrenderable",reason:"too_large"});let $=qt(q.bytes);if($===null)return Y({kind:"unrenderable",reason:"signature"});let R=Vt({budgetMs:fe.renderMs,flightSignal:m,call:h=>b.renderer.render(q.bytes,{format:$,maxWidth:b.box.maxWidth,maxHeight:b.box.maxHeight,signal:h}),onOverrun:S("render",b),onStuck:s("render",b)}),P=await R.outcome;if(P.timedOut){if(m.aborted)return T=R.settled,{kind:"failure",status:503,reason:"aborted"};let h=C=>{if(C.kind==="error")return;let U=C.value;if(!(typeof U!="object"||U===null)){if(!U.ok){U.reason==="unsupported"&&k({kind:"unrenderable",reason:"unsupported"});return}Yt(U,b.box)===null&&k({kind:"thumbnail",bytes:U.bytes,contentType:U.contentType})}};return T=R.settled.then(h),{kind:"failure",status:502,reason:"render_timeout"}}if(m.aborted)return{kind:"failure",status:503,reason:"aborted"};let I=P.value;if(!I.ok)return I.reason==="unsupported"?Y({kind:"unrenderable",reason:"unsupported"}):I.reason==="failed"?{kind:"failure",status:502,reason:"render_failed"}:{kind:"failure",status:500,reason:"port_contract",code:"failure_reason"};let v=Yt(I,b.box);return v!==null?{kind:"failure",status:500,reason:"port_contract",code:v}:Y({kind:"thumbnail",bytes:I.bytes,contentType:I.contentType})}finally{T===null?D():T.then(D,D)}}};var jr=10,Ua=1/jr,zr=1-Ua,$a=1024,Ha=64,Fa=8,Jr="private, no-cache",qa="no-store",Ya=e=>{switch(e.status){case 404:case 502:return"warn";case 500:return"error";case 503:return e.reason==="aborted"?"info":"warn"}},Gr=e=>{let{service:t,encodeUserId:r,resolveViewerScope:n,logger:a,recordObjectState:i}=e,p=t.attachmentDelivery,c=je(e.rateLimitPerMinute),S=je(e.rateLimitPerMinute*jr),s=mt({limit:e.concurrency,queue:{max:Ha,maxPerOwner:Fa,maxWaitMs:fe.queueWaitMs}}),b=qr({maxBytes:e.cacheBytes,maxEntries:$a}),m=Yr(),D=Vr({gate:s,cache:b,maxBytes:p.maxBytes,encodeUserId:r,recordObjectState:i,logger:a}),T=(A,k,Y,$)=>{let R=`attachment=${A.attachmentId} viewer=${A.internalUserId} variant=thumbnail cache=${$}`;if(k.kind==="failure")return a[Ya(k)](`${k.status} ${R} reason=${k.reason} code=${k.code??"-"}`),A.fail(k.status,Ee[k.status],k.status===503?{"Retry-After":String(ut)}:{});let P=k.identity==="verified"?"":` identity=${k.identity}`;if(k.kind==="unrenderable")return a.info(`404 ${R} reason=${k.reason}${P}`),A.fail(404,Ee[404]);let I=k.identity==="verified"?{"Cache-Control":Jr,ETag:Y}:{"Cache-Control":qa},v=new Headers({"Content-Type":k.contentType,"Content-Length":String(k.bytes.byteLength),...I,"X-Content-Type-Options":"nosniff","Content-Security-Policy":"default-src 'none'; sandbox","X-Frame-Options":"SAMEORIGIN","Cross-Origin-Resource-Policy":Je});return A.cookie&&v.append("Set-Cookie",A.cookie),a.info(`200 ${R} type=${k.contentType} bytes=${k.bytes.byteLength}${P}`),new Response(k.bytes,{status:200,headers:v})},E=(A,k,Y)=>(k.firstDenial&&a.warn(`429 attachment=${A.attachmentId} viewer=${A.internalUserId} variant=thumbnail reason=${Y}`),A.fail(429,"Too many requests",{"Retry-After":String(lt)})),z=(A,k,Y)=>{k.suppressedDenials>0&&a.warn(`${Y}_suppressed count=${k.suppressedDenials} viewer=${A.internalUserId} variant=thumbnail`)},K=A=>{let k=c.consume(A.internalUserId,Date.now());return k.allowed?(z(A,k,"rate_limit"),null):E(A,k,"rate_limit")},q=(A,k)=>{if(!k)return K(A);let Y=S.consume(A.internalUserId,Date.now());return Y.allowed?(z(A,Y,"revalidation_rate_limit"),null):E(A,Y,"revalidation_rate_limit")};return async(A,k)=>{let{request:Y,attachmentId:$,internalUserId:R,readAttachment:P,cookie:I,fail:v}=A,h=Nt[k],C=p.thumbnailRenderer;if(!C)return v(404,Ee[404]);let U=Y.headers.get("If-None-Match"),O=U!==null,V=q(A,O);if(V)return V;let M=await n(Y),F=await t.getAttachmentForUser(M,$,R),j=F!==null&&pt(F,p.maxBytes)?Fr({rendererId:C.id,box:h,attachmentId:$,filePath:F.filePath,fileType:F.fileType,fileSize:F.fileSize}):null;if(j&&dr(U,j.etag)){let x=new Headers({"Cache-Control":Jr,ETag:j.etag,"Cross-Origin-Resource-Policy":Je});return I&&x.append("Set-Cookie",I),a.info(`304 attachment=${$} viewer=${R} variant=thumbnail cache=revalidated`),new Response(null,{status:304,headers:x})}if(O){let x=K(A);if(x)return x}if(!F)return a.warn(`404 attachment=${$} viewer=${R} variant=thumbnail reason=not_visible`),v(404,Ee[404]);if(!j)return c.refund(R,Date.now(),zr),a.info(`404 attachment=${$} viewer=${R} variant=thumbnail reason=not_eligible`),v(404,Ee[404]);let{key:J,etag:ee}=j,Q=b.get(J);if(Q)return c.refund(R,Date.now(),zr),T(A,{...Q,identity:"verified"},ee,"hit");let X=x=>D({key:J,attachmentId:$,filePath:F.filePath,fileSize:F.fileSize,box:h,owner:R,readAttachment:P,renderer:C},x),L;try{L=await m.join(J,Y.signal,X)}catch(x){return a.error(`500 attachment=${$} viewer=${R} variant=thumbnail cache=miss reason=port_exception message=${x instanceof Error?x.message:"unknown"}`),v(500,Ee[500])}return T(A,L,ee,"miss")}};var Va='[daily-report] params.token must be passed by the route that mounts attachment.loader; declare a "token" route parameter ({apiBasePath}/attachment/{token})',Wr=e=>{let{authenticate:t,service:r,encodeUserId:n,resolveViewerScope:a,logger:i}=e,p=r.attachmentDelivery,c=gr(e.tuning,p),S={service:r,encodeUserId:n,resolveViewerScope:a,logger:i,recordObjectState:cr(r,i)},s=br({...S,rateLimitPerMinute:c.originalRateLimitPerMinute,concurrency:c.originalConcurrency}),b=Gr({...S,rateLimitPerMinute:c.thumbnailRateLimitPerMinute,concurrency:c.thumbnailConcurrency,cacheBytes:c.thumbnailCacheBytes});return async({request:m,params:D})=>{let T=null,E=(z,K,q={})=>{let A=new Headers({"Content-Type":"application/json","Cache-Control":"no-store",...q});return T&&A.append("Set-Cookie",T),new Response(JSON.stringify({error:{message:K}}),{status:z,headers:A})};try{let{user:z,cookie:K}=await t(m,{failureRedirect:null});if(T=K??null,!z)return E(401,"Unauthorized");let q=ur(new URL(m.url).searchParams);if(q.kind==="invalid")return E(400,"Invalid attachment request");if(q.kind==="thumbnail"&&m.method!=="GET")return E(405,"Method not allowed",{Allow:"GET"});if(m.method!=="GET"&&m.method!=="HEAD")return E(405,"Method not allowed",{Allow:"GET, HEAD"});let{idCodec:A,readAttachment:k}=p;if(!(A&&k))return E(404,"Attachment not found");if(D.token===void 0)throw new Error(Va);let Y=A.decode(D.token);if(Y===null||!Number.isSafeInteger(Y)||Y<=0)return E(400,"Invalid attachment token");let $=await r.getUserIdByExternalId(z.id);if(!$)return E(403,"Forbidden");let R={request:m,delivery:q,attachmentId:Y,internalUserId:$,readAttachment:k,cookie:T,fail:E};return q.kind==="thumbnail"?await b(R,q.variant):await s(R)}catch(z){if(z instanceof Response)throw z;return i.error(`500 attachment=? viewer=? reason=unexpected message=${z instanceof Error?z.message:"unknown"}`),E(500,Ne)}}};var za=me(1,"[Response]"),pe=(e,t,r,n=200,a=za)=>{let i=Be(r),p=e.headers.get("If-None-Match");a.info(`[jsonResponseWithETag] ETag: ${i}, If-None-Match: ${p}`);let c=new Headers({"Content-Type":"application/json","Cache-Control":"private, max-age=0, must-revalidate","X-Content-Type-Options":"nosniff","X-Frame-Options":"DENY","Content-Security-Policy":"default-src 'none'",ETag:i});return t&&c.append("Set-Cookie",t),e.method==="GET"&&n===200&&p===i?new Response(null,{status:304,headers:c}):new Response(JSON.stringify(r),{status:n,headers:c})};var Kr=require("@aiquants/sse"),Qr=require("@aiquants/sse/shared-source");var De=(e,t)=>{let[r,n]=e.split("-").map(Number),[a,i]=t.split("-").map(Number);return r!==a?r<a:n<=i},$e="$",Ja=5e3,ja=100,He=class{constructor(t){this.config=t;this._lastId=$e;this._positioning=null;this._generation=0;this._logger=t.logger??me(1,"[SSE Reader]"),this._source=this._createSource()}ready(){if(this._lastId!==$e)return Promise.resolve();if(this._positioning===null){let t=this._generation;this._positioning=this._readTail().then(r=>{t===this._generation&&(this._positioning=null,r!==null&&this._lastId===$e&&(this._lastId=r))})}return this._positioning}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=$e,this._source=this._createSource()}async _readTail(){try{let t=await this.config.redis?.getClient();if(!t)return null;let r=await t.xRevRange(this.config.streamKey,"+","-",{COUNT:1});return r.length>0?r[0].id:"0-0"}catch(t){return this._logger.warn("Failed to resolve stream tail anchor; falling back to $:",t),null}}_createSource(){return(0,Qr.createSharedSource)({start:t=>this._start(t),lingerMs:0,replay:"none",runtime:Kr.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.config.redis?.createClient();if(!r)throw new Error("Failed to create Redis client for SSE reader");r.on("error",i=>{this._logger.error("Redis client error:",i)}),await this.ready();let n=!1,a=this._readLoop(r,t,()=>n);return async()=>{if(n=!0,r.isOpen)try{await r.quit()}catch{}await a}}async _readLoop(t,r,n){let a=this._lastId;try{for(;!n()&&t.isOpen;){a===$e&&this._lastId!==$e&&(a=this._lastId);let i=await t.xRead([{key:this.config.streamKey,id:a}],{BLOCK:Ja,COUNT:ja});if(i)for(let p of i)for(let c of p.messages)a=c.id,this._invalidateCaches(c.message),r.next({id:c.id,message:c.message})}}catch(i){n()||(this._logger.error("xRead loop error:",i),r.fail(i instanceof Error?i:new Error(String(i))));return}n()||r.fail(new Error("Redis client for SSE reader closed unexpectedly"))}_invalidateCaches(t){try{let r=t?.data?JSON.parse(t.data):null,n=r?.type;if((n==="report-create"||n==="report-delete"||n==="report-publish")&&this.config.cache.invalidatePrefix("daily-report:ids"),n==="comment-add"||n==="comment-delete"||n==="status-update"){let a=r?.reportHubId;typeof a=="number"&&(this.config.cache.invalidate(`daily-report:detail:${a}`),this.config.cache.invalidatePrefix(`daily-report:detail:${a}:user:`))}}catch{}}};var Ke=require("drizzle-orm");var Ga="",Wa=64,Ka=e=>e.toLowerCase(),Qa=e=>e.trim().toLowerCase();function Xr(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=Qa(r);n.length>0&&t.add(n)}return t}function be(e,t){return e===null?!0:t==null?!1:e.has(Ka(t))}function Ce(e){return e!==null&&e.size===0}function en(e,t){if(t!==null)return t.size===0?Ke.sql`1 = 0`:(0,Ke.inArray)(Ke.sql`LOWER(${e})`,[...t])}var Fe,qe,We=class We{constructor(t,r){wt(this,Fe);wt(this,qe);_t(this,Fe,t),_t(this,qe,r)}get visible(){return ze(this,Fe)===null?null:new Set(ze(this,Fe))}get commentable(){return ze(this,qe)===null?null:new Set(ze(this,qe))}static restrictTo(t){let r=typeof t=="object"&&t!==null&&"read"in t,n=Xr(r?t.read:t),a=r?t.comment:void 0;if(a===void 0)return new We(n,n);let i=Xr(a),p=new Set;for(let c of i??[])n.has(c)&&p.add(c);return new We(n,p)}static unrestricted(t){return new We(null,null)}};Fe=new WeakMap,qe=new WeakMap;var ye=We;function Qe(e){let t=Zr(e.visible),r=Zr(e.commentable);return t===r?t:`d:${t.length}:${t}${r}`}function Zr(e){if(e===null)return"all";if(e.size===0)return"none";let t=[...e].sort().map(n=>`${n.length}:${n}`).join(Ga);if(t.length<=Wa)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 Xa=(e,t)=>{let r=new Headers({"Content-Type":"application/json"});return t?.setCookie&&r.append("Set-Cookie",t.setCookie),new Response(JSON.stringify(e),{status:t?.status??200,headers:r})},ht=30,un=4e3,Za="stream interrupted by server error",ei=/^\d{4}-\d{2}-\d{2}$/,ti=15e3,tn=Symbol("ids-stream-heartbeat"),rn=864e5,ri={baseMs:2e3,jitterMs:8e3},zt=6e4,ft=1e3,nn=JSON.stringify({type:"connected"}),an="0-0",ni=/^[0-9a-f]{1,16}$/,ai=e=>{let t=e.searchParams.get("cursor_report_hub_id"),r=e.searchParams.get("cursor_business_date"),n=e.searchParams.get("cursor_snapshot"),a=n!==null&&ni.test(n)?n:null;if(t===null)return r===null?{cursor:null,snapshot:a}:{invalid:!0};let i=Number.parseInt(t,10);return!Number.isSafeInteger(i)||String(i)!==t||i<=0?{invalid:!0}:r===null?{cursor:{businessDate:null,reportHubId:i},snapshot:a}:ei.test(r)?{cursor:{businessDate:r,reportHubId:i},snapshot:a}:{invalid:!0}};async function*on(e,t,r,n){let a=t?rr(e,t):0,i=!0;for(;;){let p=e.slice(a,a+(i?r:un));a+=p.length;let c=a>=e.length,S=p[p.length-1];if(yield{kind:"chunk",items:p,nextCursor:c||!S?null:{businessDate:S.businessDate,reportHubId:S.reportHubId},isLast:c,...i?{total:e.length}:{},...i?{streamAnchor:n.streamAnchor}:{},snapshot:n.snapshot,...i&&n.restarted?{restarted:!0}:{}},i=!1,c)return}}var sn=(e,t,r,n)=>{let a=new TextEncoder,i=!1,p=null,c=new ReadableStream({async pull(s){if(i||r.signal.aborted){await t.return(void 0).catch(()=>{});try{s.close()}catch{}return}let b=null;try{p===null&&(p=t.next());let m=new Promise(z=>{b=setTimeout(()=>z(tn),ti)}),D=await Promise.race([p,m]);if(b!==null&&(clearTimeout(b),b=null),D===tn){if(i||r.signal.aborted){await t.return(void 0).catch(()=>{});try{s.close()}catch{}return}s.enqueue(a.encode(`
|
|
2
|
+
`));return}p=null;let{value:T,done:E}=D;if(E){s.close();return}if(i||r.signal.aborted){await t.return(void 0).catch(()=>{});try{s.close()}catch{}return}s.enqueue(a.encode(`${JSON.stringify(T)}
|
|
3
|
+
`))}catch(m){if(b!==null&&clearTimeout(b),p=null,i||r.signal.aborted)return;n.error(`ids-stream emission failed: ${m instanceof Error?m.message:String(m)}`);try{let D={kind:"error",error:Za};s.enqueue(a.encode(`${JSON.stringify(D)}
|
|
4
|
+
`)),s.close()}catch{}}},cancel(){i=!0,t.return(void 0).catch(()=>{})}}),S=new Headers({"Content-Type":"application/x-ndjson; charset=utf-8","Cache-Control":"private, no-cache, no-transform","X-Content-Type-Options":"nosniff"});return e&&S.append("Set-Cookie",e),new Response(c,{status:200,headers:S})},ii=(e,t,r,n)=>{if(r===null&&n===null)return!0;let a=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 be(r,e.report.sourceType);case"comment-add":case"comment-delete":return be(n,a??"Internal");case"report-delete":return be(r,a)}},oi=["externalComments","postedComments"],si=(e,t,r)=>{if(r===null||e.type!=="report-create"&&e.type!=="report-update"&&e.type!=="report-publish"||be(r,e.report.sourceType))return!1;let n=t.report;if(typeof n!="object"||n===null)return!1;let a=n;for(let i of oi)a[i]=[];return!0};function gt(e){let{authenticate:t,service:r,encodeUserId:n,redis:a,sseReader:i,streamKey:p}=e,c=e.loginRedirectPath??"/auth/login",S=e.logger??me(3,"[DailyReportAPI]"),s=e.logger??me(3,"[DailyReportVisibility]"),b=e.logger??me(1,"[DailyReportSSE]"),m=e.logger??me(1,"[DailyReportAttachment]"),D=async(R,P="initial")=>{let I=e.resolveVisibleSourceTypes;if(!I)return ye.unrestricted("no visibility port injected: this deployment does not restrict by source type");try{let v=await I(R,{reason:P});return v==null?ye.unrestricted("visibility port returned null/undefined: this deployment opts out of source-type filtering"):ye.restrictTo(v)}catch(v){return s.error("resolveVisibleSourceTypes threw; failing closed (deny all)",v),ye.restrictTo([])}},T=async({request:R})=>{let{user:P,cookie:I}=await t(R,{failureRedirect:c}),v=new Headers;I&&v.append("Set-Cookie",I);let h=await r.getUserIdByExternalId(P.id),C=h?n(h):null;return{data:{user:P,userId:C},headers:v}},E={"business-date":async(R,P,I,v,h)=>{let C=ue(R.searchParams.get("businessDate")),U=R.searchParams.get("forceRefresh")==="true";if(!C)return pe(I,P,{error:{message:"Invalid business date"}},400);let O=await r.getDailyReportsByBusinessDateByExternalId(h,C,v.id,{forceRefresh:U});return pe(I,P,{businessDate:C,reports:O},200)},"ids-stream":async(R,P,I,v,h)=>{let C=ai(R);if("invalid"in C)return pe(I,P,{error:{message:"Invalid cursor"}},400);let U=R.searchParams.get("forceRefresh")==="true",O=!1,V=null,M=null,F=new Promise((J,ee)=>{V=J,M=ee});F.catch(()=>{});let ae=r.getDailyReportIdsByExternalId(h,v.id,{forceRefresh:U,onFetchStart:C.cursor?void 0:()=>{O=!0,r.readSseStreamAnchor().then(J=>r.getDailyReportIdsFirstPageByExternalId(h,v.id,ht).then(ee=>({items:ee,streamAnchor:J}))).then(J=>V?.(J),J=>M?.(J))}});if(ae.catch(()=>{}),C.cursor){let{items:J,streamAnchor:ee}=await ae,Q=It(J),X=C.snapshot!==null&&C.snapshot===Q;return sn(P,on(J,X?C.cursor:null,ht,{snapshot:Q,restarted:!X,streamAnchor:ee}),I,S)}let j=(async function*(){let J=await Promise.race([ae.then(X=>({kind:"full",source:X}),X=>({kind:"full-error",error:X})),F.then(X=>({kind:"page",page:X}),()=>({kind:"page-error"}))]),ee=null,Q=!1;if(J.kind==="full")ee=J.source;else if(J.kind==="page"){let{items:X,streamAnchor:L}=J.page;if(X.length<ht){yield{kind:"chunk",items:X,nextCursor:null,isLast:!0,total:X.length,streamAnchor:L};return}yield{kind:"chunk",items:X,nextCursor:null,isLast:!1,provisional:!0},Q=!0}else if(J.kind==="full-error"&&O){let X=await F.catch(()=>null);X&&X.items.length>0&&(yield{kind:"chunk",items:X.items,nextCursor:null,isLast:!1,provisional:!0})}ee===null&&(ee=await ae),yield*on(ee.items,null,Q?un:ht,{snapshot:It(ee.items),streamAnchor:ee.streamAnchor})})();return sn(P,j,I,S)},report:async(R,P,I,v,h)=>{let C=R.searchParams.get("reportHubId"),U=R.searchParams.get("forceRefresh")==="true",O=C?Number.parseInt(C,10):NaN;if(!Number.isFinite(O)||O<=0)return pe(I,P,{error:{message:"Invalid reportHubId"}},400);let V=await r.getDailyReportDetailByIdByExternalId(h,O,v.id,{snapshot:!0,forceRefresh:U});return V?pe(I,P,{report:V},200):pe(I,P,{error:{message:"Report not found"}},404)}},z=async({request:R,params:P})=>{let{user:I,cookie:v}=await t(R,{failureRedirect:null}),h=v??null;if(!I)return pe(R,h,{error:{message:"Unauthorized"}},401);if(R.method!=="GET")return pe(R,h,{error:{message:"Method not allowed"}},405);let C=P.endpoint??"",U=E[C];if(!U)return pe(R,h,{error:{message:"Unknown endpoint"}},404);let O=Date.now();try{let V=new URL(R.url),M=await D(R);return await U(V,h,R,I,M)}catch(V){let M=Date.now()-O,F=V instanceof Error?V:new Error(String(V));return S.error(`500 endpoint=${C} elapsed=${M}ms name=${F.name} code=${"code"in F?F.code:"N/A"} message=${F.message}`),S.error("Stack:",F.stack),pe(R,h,{error:{message:"Internal Server Error"}},500)}},K=async({request:R,params:P})=>{let{user:I,cookie:v}=await t(R,{failureRedirect:null}),h=(U,O)=>Xa(U,{...O,setCookie:v});if(!I)return h({error:"Unauthorized"},{status:401});let C=Date.now();try{if(P.endpoint!=="action")return h({error:"Unknown endpoint"},{status:404});let O=await r.getUserIdByExternalId(I.id);if(!O)return h({error:"User not found"},{status:404});let V=await D(R),M=await R.formData(),F=M.get("intent"),ae=M.get("reportHubId"),j=ae?Number(ae):NaN,J=M.get("businessDate"),ee=Number(M.get("operationTimestamp")),Q=M.get("clientTempId");if(F==="clearCache")return e.enableDevCacheClear?(await r.clearCache(),h({status:"OK",intent:"clearCache"})):h({error:"Invalid intent"},{status:400});if(!Q)return h({error:"clientTempId required"},{status:400});if(F!=="create"&&(!j||Number.isNaN(j)))return h({error:"Invalid reportHubId"},{status:400});let X=async(L,x,te)=>{let de=M.get(x);if(de===null)return h({error:`${x} required`},{status:400});try{let ie=await te(de==="true");return h({status:"OK",intent:L,updatedStatus:{isStarred:ie.isStarred,isRead:ie.isRead},operationTimestamp:ee,reportHubId:String(j),clientTempId:Q})}catch(ie){if(ie instanceof Error&&ie.message==="Not Found")return h({error:"Report not found"},{status:404});throw ie}};switch(F){case"create":{if(!J)return h({error:"businessDate required"},{status:400});let L=await r.createDailyReport(O,J,Q);return h({status:"OK",intent:"create",report:L,reportHubId:String(L.reportHubId),clientTempId:Q})}case"update":{let L=M.get("title"),x=M.get("content");try{return await r.updateDailyReport(j,O,{title:L,content:x},Q),h({status:"OK",intent:"update",reportHubId:String(j),clientTempId:Q})}catch(te){if(te instanceof Error){if(te.message==="Unauthorized")return h({error:"Unauthorized"},{status:403});if(te.message==="Not Found")return h({error:"Report not found"},{status:404})}throw te}}case"publish":try{let L=await r.publishDailyReport(j,O,Q);return h({status:"OK",intent:"publish",reportHubId:String(j),clientTempId:Q,report:L})}catch(L){if(L instanceof Error){if(L.message==="Unauthorized")return h({error:"Unauthorized"},{status:403});if(L.message==="Not Found")return h({error:"Report not found"},{status:404})}throw L}case"delete":try{return await r.deleteDailyReport(j,O,Q),h({status:"OK",intent:"delete",reportHubId:String(j),clientTempId:Q})}catch(L){if(L instanceof Error){if(L.message==="Unauthorized")return h({error:"Unauthorized"},{status:403});if(L.message==="Not Found")return h({error:"Report not found"},{status:404})}throw L}case"toggleStar":return await X("toggleStar","isStarred",L=>r.setStarStatus(V,O,j,J,L,Q));case"toggleRead":return await X("toggleRead","isRead",L=>r.setReadStatus(V,O,j,J,L,Q));case"addComment":{let L=M.get("content");if(!L)return h({error:"Content required"},{status:400});try{let x=await r.addComment(V,O,j,L,J,Q),te={...x,userId:x.userId};return h({status:"OK",intent:"addComment",newComment:te,reportHubId:String(j),clientTempId:Q})}catch(x){if(x instanceof Error){if(x.message==="Not Found")return h({error:"Report not found"},{status:404});if(x.message.startsWith("Comments are restricted"))return h({error:"Comments are restricted for this report"},{status:403})}throw x}}case"deleteComment":{let L=Number(M.get("commentId"));if(!L||Number.isNaN(L))return h({error:"Invalid commentId"},{status:400});try{return await r.deleteComment(V,O,j,L,J,Q),h({status:"OK",reportHubId:String(j),deletedCommentId:String(L),clientTempId:Q})}catch(x){if(x instanceof Error){if(x.message==="Unauthorized")return h({error:"Unauthorized"},{status:403});if(x.message==="Not Found")return h({error:"Comment not found"},{status:404})}throw x}}default:return h({error:"Invalid intent"},{status:400})}}catch(U){if(U instanceof Response)throw U;let O=Date.now()-C,V=U instanceof Error?U:new Error(String(U));return S.error(`500 action elapsed=${O}ms name=${V.name} message=${V.message}`),S.error("Stack:",V.stack),h({error:"Internal Server Error"},{status:500})}},q=(R,P)=>{R.writeEvent({event:null,id:P,data:nn})},A=(R,P,I,v)=>{if(I.data)try{let h=JSON.parse(I.data),C=sr.safeParse(h);if(!C.success){b.error("SSE message validation failed:",C.error.format());return}let U=C.data,O=typeof h.recipientRawUserId=="number"?h.recipientRawUserId:void 0;if((U.type==="status-update"||O!==void 0)&&O!==v.internalUserId||!ii(U,h,v.visibleSet,v.commentableSet)){q(R,P);return}let M=si(U,h,v.commentableSet),F;if("recipientRawUserId"in h){let{recipientRawUserId:ae,...j}=h;F=JSON.stringify(j)}else M?F=JSON.stringify(h):F=I.data;R.writeEvent({event:null,id:P,data:F})}catch(h){b.error(`[SSE:${v.internalUserId}] processEntry error:`,h)}},k=async(R,P)=>{let{request:I,internalUserId:v,cursor:h}=P,C=P.initialScope.visible,U=P.initialScope.commentable,O=0,V=setInterval(()=>{let x=++O;D(I,"refresh").then(te=>{x===O&&(C=te.visible,U=te.commentable)})},zt);R.onClose(()=>clearInterval(V));let M=h===null?an:h,F=h!==null&&a!==void 0,ae=[],j=null,J=x=>{De(x.id,M)||(M=x.id,A(R,x.id,x.message,{internalUserId:v,visibleSet:C,commentableSet:U}))},ee=async(x,te)=>{let[de]=await x.xRange(p,"-","+",{COUNT:1});return de!==void 0&&!De(de.id,te)},Q=async(x,te)=>{if(await ee(x,te))return!1;let de=te;for(;;){let ie=await x.xRange(p,de,"+",{COUNT:ft}),Me=ie[0];if(Me!==void 0&&Me.id!==de&&await ee(x,de))return!1;for(let et of ie){if(j!==null&&De(j,et.id))return!0;J(et)}let Ze=ie.at(-1);if(ie.length<ft||Ze===void 0||R.isClosed())return!0;de=Ze.id}},X=i.subscribe(x=>{if(!F){J(x);return}De(x.id,M)||(j===null&&(j=x.id),ae.push(x))},x=>{b.error(`[SSE:${v}] Fan-Out reader error:`,x),R.close()});if(R.onClose(X),h===null){await i.ready();try{let x=await a?.getClient();if(x){let te=await x.xRevRange(p,"+","-",{COUNT:1});te.length>0&&!De(te[0].id,M)&&(M=te[0].id)}}catch{}}if(R.writeEvent({event:null,id:M===an?null:M,data:nn}),(0,we.startSseHeartbeat)(R,{intervalMs:nr,retry:ri,runtime:ln.systemSseRuntime}),h===null||a===void 0)return;await i.ready();let L=await a.getClient();if(L===void 0)throw new Error("redis client unavailable for the SSE catch-up");if(!await Q(L,h)){R.writeRetry(rn),R.writeEvent({event:"resync-required",id:null,data:""}),R.close();return}F=!1;for(let x of ae.splice(0))J(x)},Y=async({request:R,params:P})=>{let I,v=()=>{let C=new Headers;return I!==void 0&&C.append("Set-Cookie",I),C},h=C=>(0,we.terminalStreamResponse)(C,{data:"",retryMs:rn,headers:v()});try{let C=await t(R,{failureRedirect:null});I=C.cookie;let{user:U}=C;if(!U)return h("auth-required");let O=await r.getUserIdByExternalId(U.id);if(!O)return h("forbidden");if(P.endpoint!=="updates")return new Response("Not Found",{status:404,headers:v()});let V=(0,we.readLastEventId)(R,ar);if(V!==null&&!ir(V))return b.warn(`[SSE:${O}] malformed resume cursor; asking the client to resync`),h("resync-required");let M=await D(R);return(0,we.createSseResponse)({requestSignal:R.signal,headers:v(),onError:(F,ae)=>b.error(`[SSE:${O}] ${ae} failed:`,F),produce:F=>k(F,{request:R,internalUserId:O,cursor:V,initialScope:M})})}catch(C){if(C instanceof Response)throw C;let U=C instanceof Error?C:new Error(String(C));return b.error(`500 sse name=${U.name} message=${U.message}`),new Response("Internal Server Error",{status:500,headers:v()})}},$=Wr({authenticate:t,service:r,encodeUserId:n,resolveViewerScope:D,logger:m,tuning:e});return{index:{loader:T},api:{loader:z,action:K},sse:{loader:Y},attachment:{loader:$}}}var cn=require("@aiquants/mssql"),u=require("drizzle-orm");var xe=e=>(0,u.getColumns)(e),li=e=>{if(e!==void 0){if(typeof e!="object"||e===null)throw Oe("attachmentThumbnailRenderer","an object with id and render",e);if(e.render===void 0)throw dt("attachmentThumbnailRenderer.render","a function");if(typeof e.render!="function")throw Oe("attachmentThumbnailRenderer.render","a function",e.render);if(typeof e.id!="string"||e.id.trim()==="")throw Oe("attachmentThumbnailRenderer.id","a non-blank string naming the rendering pipeline version",e.id);return e}},ce=(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(),a=n<0?`-${String(-n).padStart(4,"0")}`:String(n).padStart(4,"0"),i=String(r.getMonth()+1).padStart(2,"0"),p=String(r.getDate()).padStart(2,"0");if(t==="YYYY-MM-DD")return`${a}-${i}-${p}`;let c=String(r.getHours()).padStart(2,"0"),S=String(r.getMinutes()).padStart(2,"0"),s=String(r.getSeconds()).padStart(2,"0");return`${a}-${i}-${p} ${c}:${S}:${s}`};function bt(e){let{db:t,tables:r,userTable:n,resolveUserId:a,encodeUserId:i,redis:p,cache:c,epochs:S}=e,{hub:s,internal:b,comment:m,label:D,hubLabel:T,userStatus:E}=r,z=e.externalSources??[],K=e.draftLabelNames&&e.draftLabelNames.length>0?e.draftLabelNames:[e.draftLabelName??"\u4E0B\u66F8\u304D"],q=K[0]??"\u4E0B\u66F8\u304D",A=e.logger??me(1,"[DailyReportService]");Bt({attachmentIdCodec:e.attachmentIdCodec,readAttachment:e.readAttachment,attachmentThumbnailRenderer:e.attachmentThumbnailRenderer,attachmentMaxBytes:e.attachmentMaxBytes});let k=Object.freeze({idCodec:e.attachmentIdCodec,readAttachment:e.readAttachment,thumbnailRenderer:li(e.attachmentThumbnailRenderer),maxBytes:Ie("attachmentMaxBytes",e.attachmentMaxBytes,1,fr)}),Y=o=>(0,cn.runWithTransactionRetry)(l=>t.transaction(d=>l(()=>o(d))),e.transactionRetry),$="daily-report:ids",R=e.idsTtlMs??18e4,P="daily-report:ids:epoch",I="daily-report:business-date:",v=e.businessDateTtlMs??3e5,h="daily-report:date-epoch:",C="daily-report:detail-epoch:",O=`${e.streamKey??"daily-report:sse-stream"}:v2`,V=e.streamMaxLen??1e4,M=o=>S.incrementEpoch(o),F=o=>en(s.sourceType,o),ae=(o,l)=>`${$}:user:${o}:st:${l}`,j=o=>`${$}:user:${o}:`,J=(o,l,d)=>`daily-report:date:${o}:user:${l}:st:${d}`,ee=(o,l)=>`daily-report:date:${o}:user:${l}:`,Q=(o,l,d)=>`daily-report:detail:${o}:user:${l}:st:${d}`,X=(o,l)=>`daily-report:detail:${o}:user:${l}:`,L=async(o,l)=>{let d=await p?.getClient();if(!d){A.warn(`[SSE] Redis client unavailable (${l})`);return}let f=Date.now();try{await d.xAdd(O,"*",{data:JSON.stringify(o)},{TRIM:{strategy:"MAXLEN",strategyModifier:"~",threshold:V}});let w=Date.now()-f;w>1e3&&A.warn(`[SSE] Slow publish (${l}): ${w}ms`)}catch(w){A.error(`[SSE] Redis publish failed (${l}):`,w)}},x=async()=>{try{let o=await p?.getClient();if(o===void 0)return null;let[l]=await o.xRevRange(O,"+","-",{COUNT:1});return l===void 0?null:l.id}catch(o){return A.error("[DailyReportService] SSE stream anchor read failed",o),null}},te=o=>o==null||o===""?null:/^\d+$/.test(o)?i(Number(o)):o,de=()=>{let o={};for(let l of z)o[`ext_${l.sourceType}`]=xe(l.table);return o},ie=o=>{let l=o;for(let d of z)l=l.leftJoin(d.table,(0,u.and)((0,u.eq)(s.sourceType,d.sourceType),(0,u.eq)(s.sourceIdNum,d.idColumn)));return l},Me=(o,l,d)=>{let{hub:f,internal:w}=l,B=f.summary,_=[],N=null,H=null,Z=null,G=null,re=null,oe=null,Pe=[],Te=z.find(W=>W.sourceType===f.sourceType),ke=Te?l[`ext_${Te.sourceType}`]:void 0;if(Te&&ke){let W=Te.mapRow(ke);W.content!==void 0&&(B=W.content),W.employeeName!==void 0&&(oe=W.employeeName),W.category!==void 0&&(N=W.category),W.creationCategory!==void 0&&(H=W.creationCategory),W.visitTimeFrom!==void 0&&(Z=W.visitTimeFrom),W.visitTimeTo!==void 0&&(G=W.visitTimeTo),W.customerName!==void 0&&(re=W.customerName),W.interviewers!==void 0&&(_=W.interviewers),W.externalComments!==void 0&&(Pe=W.externalComments)}else f.sourceType==="Internal"&&w&&(B=w.body);let Re=(l.labels??[]).map(W=>({id:W.id,name:W.name,color:W.color})),se=l.postedCommentRows??[],ne=be(o.commentable,f.sourceType),le=H?K.includes(H):!1,At=ve?.[0]??null;return le&&At&&!Re.some(W=>W.id===At)&&Re.push({id:At,name:q,color:null}),{reportHubId:f.id,date:ce(f.businessDate,"YYYY-MM-DD"),author:l.creatorName??te(f.createdBy)??"",userId:f.userId?i(f.userId):"",sourceType:f.sourceType??"Internal",createdAt:ce(f.createdAt,"YYYY-MM-DD HH:mm:ss"),updatedAt:ce(f.updatedAt,"YYYY-MM-DD HH:mm:ss"),updatedBy:te(f.updatedBy),employeeName:oe??l.creatorName??te(f.createdBy),category:N,creationCategory:H,visitTimeFrom:Z,visitTimeTo:G,customerName:re,interviewers:_,subject:f.title,content:B,externalComments:ne?Pe:[],isRead:l.isRead??!1,isStarred:l.isStarred??!1,labels:Re,postedComments:se.filter(W=>ne||d!==void 0&&W.userId===d).map(W=>({...W,userId:i(W.userId),isMine:d?W.userId===d:!1})),attachments:l.attachments}},Ze=async(o,l)=>{let d=(0,u.aliasedTable)(T,"draft_label"),f=await _e();return(await t.select({reportHubId:s.id,businessDate:s.businessDate,sourceType:s.sourceType}).from(s).leftJoin(d,(0,u.and)((0,u.eq)(d.hubId,s.id),(0,u.inArray)(d.labelId,f))).where((0,u.and)((0,u.isNull)(s.deletedAt),(0,u.or)((0,u.eq)(s.userId,l),(0,u.isNull)(s.userId),(0,u.isNull)(d.hubId)),F(o.visible))).orderBy((0,u.desc)(s.businessDate),(0,u.desc)(s.id))).map(B=>({...B,businessDate:ce(B.businessDate,"YYYY-MM-DD")}))},et=async(o,l,d)=>{let f=await Ye(l);if(!f)return[];if(Ce(o.visible))return[];let w=(0,u.aliasedTable)(T,"draft_label"),B=await _e();return(await t.select({reportHubId:s.id,businessDate:s.businessDate,sourceType:s.sourceType}).top(d).from(s).leftJoin(w,(0,u.and)((0,u.eq)(w.hubId,s.id),(0,u.inArray)(w.labelId,B))).where((0,u.and)((0,u.isNull)(s.deletedAt),(0,u.or)((0,u.eq)(s.userId,f),(0,u.isNull)(s.userId),(0,u.isNull)(w.hubId)),F(o.visible))).orderBy((0,u.desc)(s.businessDate),(0,u.desc)(s.id))).map(N=>({...N,businessDate:ce(N.businessDate,"YYYY-MM-DD")}))},_n=async(o,l)=>{let d=await ie(t.select({hub:xe(s),internal:xe(b),creatorName:n.displayName,...de()}).from(s)).leftJoin(b,(0,u.eq)(s.id,b.hubId)).leftJoin(n,(0,u.eq)(s.userId,n.id)).where((0,u.and)((0,u.eq)(s.businessDate,u.sql`${l}`),(0,u.isNull)(s.deletedAt),F(o.visible))).orderBy((0,u.desc)(s.id)),f=await nt(d.map(w=>w.hub.id));return d.map(w=>Me(o,{...w,attachments:f.get(w.hub.id)??[]}))},In=o=>`${I}${o}`,tt=new Map,Ye=async o=>{if(!e.disableUserIdCache&&tt.has(o))return tt.get(o)??null;let l=await a(o);return l!==null&&!e.disableUserIdCache&&tt.set(o,l),l},En=async(o,l,{forceRefresh:d=!1,snapshot:f=!1,ttlMsOverride:w,onFetchStart:B}={})=>{let _=await Ye(l);if(!_)return{items:[],streamAnchor:null};if(Ce(o.visible))return{items:[],streamAnchor:await x()};let N=ae(_,Qe(o)),[H]=await c.getOrFetch({cacheKey:N,fetcher:async()=>{let Z=await x(),G=await Ze(o,_);return tr(G)?[{items:G,streamAnchor:Z}]:(A.warn("[DailyReportService] ids array is not in stream order; re-sorting (check SQL ORDER BY vs compareIdsStreamOrder, or concurrent row movement during the scan)"),[{items:[...G].sort(ot),streamAnchor:Z}])},onFetchStart:B,forceRefresh:d,snapshot:f,ttlMsOverride:w??R,epochKey:P,refreshAheadRatio:.5});if(H===void 0)throw new Error("[DailyReportService] ids cache returned no record");return H},Cn=(o,l,{forceRefresh:d=!1,snapshot:f=!1,ttlMsOverride:w}={})=>{let B=ue(l);return B?Ce(o.visible)?Promise.resolve([]):c.getOrFetch({cacheKey:`${In(B)}:st:${Qe(o)}`,fetcher:()=>_n(o,B),forceRefresh:d,snapshot:f,ttlMsOverride:w??v}):Promise.resolve([])},ve=null,rt=async()=>(ve!==null||(ve=(await t.select({id:D.id}).from(D).where((0,u.inArray)(D.name,K)).orderBy(D.id)).map(l=>l.id)),ve),_e=async()=>{let o=await rt();return o.length>0?o:[-1]},Rt=async()=>{let o=await rt();if(o.length===0)return null;let[l]=await t.select({id:D.id}).top(1).from(D).where((0,u.eq)(D.name,q));return l?.id??o[0]},xn=(o,l)=>l!=null?"absent":o!=null?"present":"unknown",nt=async o=>{let l=new Map,d=r.attachment,f=k.idCodec;if(o.length===0||!d||!f)return l;let w=k.thumbnailRenderer!==void 0&&k.readAttachment!==void 0,B=await t.select({id:d.id,hubId:d.hubId,fileName:d.fileName,fileType:d.fileType,fileSize:d.fileSize,createdAt:d.createdAt,objectCheckedAt:d.objectCheckedAt,objectMissingAt:d.objectMissingAt}).from(d).where((0,u.inArray)(d.hubId,o)).orderBy((0,u.asc)(d.createdAt),(0,u.asc)(d.id));for(let _ of B){let N=_.fileType?String(_.fileType):null,H=_.fileSize!=null?Number(_.fileSize):null,Z=xn(_.objectCheckedAt,_.objectMissingAt),G={id:f.encode(Number(_.id)),fileName:String(_.fileName),fileType:N,fileSize:H,createdAt:ce(_.createdAt,"YYYY-MM-DD HH:mm:ss"),state:Z,hasThumbnail:w&&Z!=="absent"&&pt({fileType:N,fileSize:H},k.maxBytes)},re=l.get(Number(_.hubId));re?re.push(G):l.set(Number(_.hubId),[G])}return l},Mn=async(o,l,d)=>{let f=r.attachment;if(!f||Ce(o.visible))return null;let w=await _e(),B=(0,u.aliasedTable)(T,"draft_label");return(await t.select({fileName:f.fileName,filePath:f.filePath,fileType:f.fileType,fileSize:f.fileSize}).top(1).from(f).innerJoin(s,(0,u.eq)(s.id,f.hubId)).leftJoin(B,(0,u.and)((0,u.eq)(B.hubId,s.id),(0,u.inArray)(B.labelId,w))).where((0,u.and)((0,u.eq)(f.id,l),(0,u.isNull)(s.deletedAt),(0,u.or)((0,u.eq)(s.userId,d),(0,u.isNull)(B.hubId)),F(o.visible))))[0]??null},vn=async o=>{let l=r.attachment;if(!l)return;let d=new Date;try{await t.update(l).set({objectCheckedAt:d,objectMissingAt:d,updatedAt:d}).where((0,u.eq)(l.id,o))}catch(f){A.error("markAttachmentMissing failed",f)}},Pn=async o=>{let l=r.attachment;if(!l)return;let d=new Date;try{await t.update(l).set({objectCheckedAt:d,objectMissingAt:null,updatedAt:d}).where((0,u.eq)(l.id,o))}catch(f){A.error("markAttachmentPresent failed",f)}},kn=async(o,l,d,{forceRefresh:f=!1,snapshot:w=!1,ttlMsOverride:B}={})=>{let _=await Ye(d);if(!_)return[];let N=ue(l);if(!N)return[];if(Ce(o.visible))return[];let H=J(N,_,Qe(o));return c.getOrFetch({cacheKey:H,fetcher:async()=>{let Z=await _e(),G=(0,u.aliasedTable)(T,"draft_label"),re=await ie(t.select({hub:xe(s),internal:xe(b),isRead:E.isRead,isStarred:E.isStarred,creatorName:n.displayName,...de()}).from(s)).leftJoin(b,(0,u.eq)(s.id,b.hubId)).leftJoin(E,(0,u.and)((0,u.eq)(s.id,E.hubId),(0,u.eq)(E.userId,_))).leftJoin(G,(0,u.and)((0,u.eq)(G.hubId,s.id),(0,u.inArray)(G.labelId,Z))).leftJoin(n,(0,u.eq)(s.userId,n.id)).where((0,u.and)((0,u.eq)(s.businessDate,u.sql`${N}`),(0,u.isNull)(s.deletedAt),(0,u.or)((0,u.eq)(s.userId,_),(0,u.isNull)(G.hubId)),F(o.visible))).orderBy((0,u.desc)(s.id));if(re.length===0)return[];let oe=re.map(ne=>ne.hub.id),Pe=await t.select({hubId:T.hubId,id:D.id,name:D.name,color:D.color}).from(T).innerJoin(D,(0,u.eq)(T.labelId,D.id)).where((0,u.inArray)(T.hubId,oe)),Te=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,u.eq)(m.userId,n.id)).where((0,u.inArray)(m.hubId,oe)).orderBy((0,u.asc)(m.createdAt)),ke=await nt(oe),Re=new Map,se=new Map;for(let ne of Pe){let le=Re.get(ne.hubId);le||(le=[],Re.set(ne.hubId,le)),le.push({id:ne.id,name:ne.name,color:ne.color})}for(let ne of Te){let le=se.get(ne.hubId);le||(le=[],se.set(ne.hubId,le)),le.push({id:ne.id,content:ne.body,createdAt:ce(ne.createdAt,"YYYY-MM-DD HH:mm:ss")||"",userId:ne.userId,userName:ne.userName||""})}return re.map(ne=>{let le=ne.hub.id;return Me(o,{...ne,attachments:ke.get(le)??[],labels:Re.get(le)||[],postedCommentRows:se.get(le)||[]},_)})},forceRefresh:f,snapshot:w,ttlMsOverride:B??v,epochKey:`${h}${N}`})},Ve=async(o,l,d,{forceRefresh:f=!1,snapshot:w=!1,ttlMsOverride:B}={})=>{if(Ce(o.visible))return null;let _=Q(l,d,Qe(o));return(await c.getOrFetch({cacheKey:_,fetcher:async()=>{let H=await _e(),Z=(0,u.aliasedTable)(T,"draft_label"),G=await ie(t.select({hub:xe(s),internal:xe(b),isRead:E.isRead,isStarred:E.isStarred,creatorName:n.displayName,...de()}).from(s)).leftJoin(b,(0,u.eq)(s.id,b.hubId)).leftJoin(E,(0,u.and)((0,u.eq)(s.id,E.hubId),(0,u.eq)(E.userId,d))).leftJoin(Z,(0,u.and)((0,u.eq)(Z.hubId,s.id),(0,u.inArray)(Z.labelId,H))).leftJoin(n,(0,u.eq)(s.userId,n.id)).where((0,u.and)((0,u.eq)(s.id,l),(0,u.isNull)(s.deletedAt),(0,u.or)((0,u.eq)(s.userId,d),(0,u.isNull)(Z.hubId)),F(o.visible)));if(G.length===0)return[];let re=G[0].hub.id,oe=await t.select({id:D.id,name:D.name,color:D.color}).from(T).innerJoin(D,(0,u.eq)(T.labelId,D.id)).where((0,u.eq)(T.hubId,re)),Pe=await t.select({id:m.id,body:m.body,createdAt:m.createdAt,userId:m.userId,userName:n.displayName}).from(m).leftJoin(n,(0,u.eq)(m.userId,n.id)).where((0,u.eq)(m.hubId,re)).orderBy((0,u.asc)(m.createdAt)),Te=await nt([re]),ke=oe.map(se=>({id:se.id,name:se.name,color:se.color})),Re=Pe.map(se=>({id:se.id,content:se.body,createdAt:ce(se.createdAt,"YYYY-MM-DD HH:mm:ss")||"",userId:se.userId,userName:se.userName||""}));return[Me(o,{...G[0],attachments:Te.get(re)??[],labels:ke,postedCommentRows:Re},d)]},forceRefresh:f,snapshot:w,ttlMsOverride:B??v,epochKey:`${C}${l}`}))[0]??null},Ln=async(o,l,d,f={})=>{let w=await Ye(d);return w?Ve(o,l,w,f):null},Nn=async(o,l)=>{let d=await _e(),f=(0,u.aliasedTable)(T,"draft_label"),[w]=await t.select({sourceType:s.sourceType,deletedAt:s.deletedAt}).top(1).from(s).leftJoin(f,(0,u.and)((0,u.eq)(f.hubId,s.id),(0,u.inArray)(f.labelId,d))).where((0,u.and)((0,u.eq)(s.id,o),(0,u.or)((0,u.eq)(s.userId,l),(0,u.isNull)(f.hubId))));return w??null},St=async(o,l,d)=>{let f=await Nn(l,d);if(!f||f.deletedAt||!be(o.visible,f.sourceType))throw new Error("Not Found")},On=async(o,l,d,f,w,B)=>{await St(o,d,l);let _=await t.select().top(1).from(E).where((0,u.and)((0,u.eq)(E.hubId,d),(0,u.eq)(E.userId,l))),N;if(_.length>0?_[0].isStarred!==w?N=(await t.update(E).set({isStarred:w,updatedAt:new Date,updatedBy:String(l)}).output().where((0,u.and)((0,u.eq)(E.hubId,d),(0,u.eq)(E.userId,l))))[0]:N=_[0]:N=(await t.insert(E).output().values({hubId:d,userId:l,isStarred:w,isRead:!1,createdAt:new Date,createdBy:String(l),updatedAt:new Date,updatedBy:String(l)}))[0],f){let H=ue(f);H&&(c.invalidatePrefix(ee(H,l)),await M(`${h}${H}`))}return c.invalidate(`daily-report:detail:${d}`),c.invalidatePrefix(X(d,l)),await M(`${C}${d}`),await L(st.parse({type:"status-update",reportHubId:d,recipientRawUserId:l,statusType:"star",value:w,clientTempId:B}),"setStarStatus"),N},Bn=async(o,l,d,f,w,B)=>{await St(o,d,l);let _=await t.select().top(1).from(E).where((0,u.and)((0,u.eq)(E.hubId,d),(0,u.eq)(E.userId,l))),N;if(_.length>0?_[0].isRead!==w?N=(await t.update(E).set({isRead:w,updatedAt:new Date,updatedBy:String(l)}).output().where((0,u.and)((0,u.eq)(E.hubId,d),(0,u.eq)(E.userId,l))))[0]:N=_[0]:N=(await t.insert(E).output().values({hubId:d,userId:l,isRead:w,isStarred:!1,createdAt:new Date,createdBy:String(l),updatedAt:new Date,updatedBy:String(l)}))[0],f){let H=ue(f);H&&(c.invalidatePrefix(ee(H,l)),await M(`${h}${H}`))}return c.invalidate(`daily-report:detail:${d}`),c.invalidatePrefix(X(d,l)),await M(`${C}${d}`),await L(st.parse({type:"status-update",reportHubId:d,recipientRawUserId:l,statusType:"read",value:w,clientTempId:B}),"setReadStatus"),N},Gt=async(o,l)=>{if(l===null)return;let d=await _e(),[f]=await t.select({hubId:T.hubId}).top(1).from(T).where((0,u.and)((0,u.eq)(T.hubId,o),(0,u.inArray)(T.labelId,d)));return f?l:void 0},Un=async(o,l,d,f,w,B)=>{let[_]=await t.select({sourceType:s.sourceType,deletedAt:s.deletedAt,userId:s.userId}).top(1).from(s).where((0,u.eq)(s.id,d));if(!_||_.deletedAt)throw new Error("Not Found");if(await St(o,d,l),!be(o.commentable,_.sourceType))throw new Error("Comments are restricted by the viewer's comment permission");if(_.sourceType.toLowerCase()!=="internal")throw new Error("Comments are restricted for external daily report sources");let N=await Gt(d,_.userId),[H]=await t.insert(m).output().values({hubId:d,userId:l,body:f,createdAt:new Date,createdBy:String(l),updatedAt:new Date,updatedBy:String(l)}),[Z]=await t.select({displayName:n.displayName}).top(1).from(n).where((0,u.eq)(n.id,l)),G=Z?.displayName??"";if(w){let oe=ue(w);oe&&(c.invalidatePrefix(`daily-report:date:${oe}:user:`),await M(`${h}${oe}`))}c.invalidate(`daily-report:detail:${d}`),c.invalidatePrefix(`daily-report:detail:${d}:user:`),await M(`${C}${d}`);let re={id:H.id,userId:i(H.userId),userName:G,content:H.body,createdAt:ce(H.createdAt,"YYYY-MM-DD HH:mm:ss")??"",isMine:!0};return await L(xt.parse({type:"comment-add",reportHubId:d,comment:re,clientTempId:B,recipientRawUserId:N,sourceType:_.sourceType}),"addComment"),re},$n=async(o,l)=>await o.select().top(1).from(m).where((0,u.eq)(m.id,l)),Hn=async(o,l,d,f,w,B)=>{let _=await $n(t,f);if(_.length===0)throw new Error("Not Found");if(_[0].hubId!==d)throw new Error("Not Found");let[N]=await t.select({userId:s.userId,sourceType:s.sourceType}).top(1).from(s).where((0,u.eq)(s.id,_[0].hubId));if(!(N&&be(o.visible,N.sourceType)))throw new Error("Not Found");if(_[0].userId!==l)throw new Error("Unauthorized");let H=await Gt(d,N.userId);if(await t.delete(m).where((0,u.eq)(m.id,f)),w){let Z=ue(w);Z&&(c.invalidatePrefix(`daily-report:date:${Z}:user:`),await M(`${h}${Z}`))}c.invalidate(`daily-report:detail:${d}`),c.invalidatePrefix(`daily-report:detail:${d}:user:`),await M(`${C}${d}`),await L(Mt.parse({type:"comment-delete",reportHubId:d,commentId:f,clientTempId:B,recipientRawUserId:H,sourceType:N?.sourceType}),"deleteComment")},Fn=async(o,l,d)=>{A.info("createDailyReport called",{userId:o,businessDate:l});let[f]=await t.select({displayName:n.displayName}).from(n).where((0,u.eq)(n.id,o)),w=f?.displayName??i(o);try{let B=await Y(async H=>{A.info("Starting transaction");let Z=`internal-temp-${Date.now()}-${Math.random()}`,[G]=await H.insert(s).output().values({sourceType:"Internal",sourceId:Z,businessDate:new Date(l),userId:o,title:"(\u7121\u984C)",createdAt:new Date,createdBy:String(o),updatedAt:new Date,updatedBy:String(o)});await H.update(s).set({sourceId:String(G.id)}).where((0,u.eq)(s.id,G.id)),A.info("Hub created",G),await H.insert(b).values({hubId:G.id,body:"",createdAt:new Date,createdBy:String(o),updatedAt:new Date,updatedBy:String(o)}),A.info("Internal created"),A.info("Calling getDraftLabelId");let re=await Rt();A.info("draftLabelId",re);let oe=[];return re&&(await H.insert(T).values({hubId:G.id,labelId:re,createdAt:new Date,createdBy:String(o)}),oe.push({id:re,name:q,color:null})),A.info("Label assigned"),{reportHubId:G.id,date:l,createdAt:ce(G.createdAt,"YYYY-MM-DD HH:mm:ss"),author:w,userId:i(o),sourceType:"Internal",employeeName:w,updatedBy:i(o),updatedAt:ce(G.updatedAt,"YYYY-MM-DD HH:mm:ss"),category:null,creationCategory:null,visitTimeFrom:null,visitTimeTo:null,customerName:null,interviewers:[],subject:G.title,content:"",externalComments:[],isRead:!0,isStarred:!1,labels:oe,postedComments:[],attachments:[]}}),_=ue(l);_&&c.invalidatePrefix(ee(_,o)),c.invalidatePrefix(I),c.invalidatePrefix(j(o)),await M(P),_&&await M(`${h}${_}`);let N=await Ve(ye.unrestricted("post-write self read: the writer always sees the row they just wrote"),B.reportHubId,o,{forceRefresh:!0});if(N){let H=await rt(),Z=N.labels.some(G=>H.includes(G.id));await L(vt.parse({type:"report-create",reportHubId:N.reportHubId,report:N,clientTempId:d,recipientRawUserId:Z?o:void 0}),"createDailyReport")}return N??B}catch(B){throw A.error("Error in createDailyReport",B),B}},at=async(o,l)=>await o.select().top(1).from(s).where((0,u.eq)(s.id,l)),Tt=async(o,l,d)=>{await o.update(s).set(d).where((0,u.eq)(s.id,l))},Wt=async(o,l,d)=>{await o.update(b).set(d).where((0,u.eq)(b.hubId,l))},Kt=async(o,l,d)=>{await o.delete(T).where((0,u.and)((0,u.eq)(T.hubId,l),(0,u.eq)(T.labelId,d)))};return{streamKey:O,streamMaxLen:V,attachmentDelivery:k,clearCache:async()=>{c.clearAll(),tt.clear(),ve=null,S&&await M(P),A.info("[DailyReportService] Server-side DB/SQL caches cleared successfully.")},invalidateHubReadCaches:async(o,l)=>{c.invalidatePrefix(I),c.invalidatePrefix($),await M(P);for(let d of new Set(o))c.invalidatePrefix(`daily-report:detail:${d}:user:`),await M(`${C}${d}`);for(let d of new Set(l)){let f=ue(d);f&&await M(`${h}${f}`)}},getUserIdByExternalId:Ye,getDailyReportIdsByExternalId:En,getDailyReportIdsFirstPageByExternalId:et,readSseStreamAnchor:x,getDailyReportsByBusinessDate:Cn,getDailyReportsByBusinessDateByExternalId:kn,getDailyReportDetailById:Ve,getDailyReportDetailByIdByExternalId:Ln,getDraftLabelId:Rt,getAttachmentsByHubIds:nt,getAttachmentForUser:Mn,markAttachmentMissing:vn,markAttachmentPresent:Pn,setStarStatus:On,setReadStatus:Bn,addComment:Un,deleteComment:Hn,createDailyReport:Fn,updateDailyReport:async(o,l,d,f)=>{let w=await at(t,o);if(!w.length||w[0].deletedAt)throw new Error("Not Found");if(w[0].userId!==l)throw new Error("Unauthorized");await Y(async N=>{d.title!==void 0&&await Tt(N,o,{title:d.title,updatedAt:new Date,updatedBy:String(l)}),d.content!==void 0&&await Wt(N,o,{body:d.content,updatedAt:new Date,updatedBy:String(l)})}),c.invalidate(`daily-report:detail:${o}`),c.invalidatePrefix(`daily-report:detail:${o}:user:`),c.invalidatePrefix(I),await M(`${C}${o}`);let B=ue(ce(w[0].businessDate,"YYYY-MM-DD"));B&&(c.invalidatePrefix(`daily-report:date:${B}:user:`),await M(`${h}${B}`));let _=await Ve(ye.unrestricted("post-write self read: the writer always sees the row they just wrote"),o,l,{forceRefresh:!0});if(_){let N=await rt(),H=_.labels.some(Z=>N.includes(Z.id));await L(Pt.parse({type:"report-update",reportHubId:_.reportHubId,report:_,clientTempId:f,recipientRawUserId:H?l:void 0}),"updateDailyReport")}},publishDailyReport:async(o,l,d)=>{let f=await at(t,o);if(!f.length)throw new Error("Not Found");if(f[0].userId!==l)throw new Error("Unauthorized");let w=await Rt();if(!w)return null;if(await Kt(t,o,w),c.invalidatePrefix(`daily-report:detail:${o}:user:`),c.invalidatePrefix(I),c.invalidatePrefix($),await M(P),f[0].businessDate){let N=ue(ce(f[0].businessDate,"YYYY-MM-DD"));N&&await M(`${h}${N}`)}let B=ue(ce(f[0].businessDate,"YYYY-MM-DD"));B&&c.invalidatePrefix(ee(B,l));let _=await Ve(ye.unrestricted("post-write self read: the writer always sees the row they just wrote"),o,l,{forceRefresh:!0});return _&&await L(kt.parse({type:"report-publish",reportHubId:_.reportHubId,report:_,clientTempId:d}),"publishDailyReport"),_??null},deleteDailyReport:async(o,l,d)=>{let f=await at(t,o);if(!f.length||f[0].deletedAt)throw new Error("Not Found");if(f[0].userId!==l)throw new Error("Unauthorized");if(await Tt(t,o,{deletedAt:new Date,deletedBy:String(l),updatedAt:new Date,updatedBy:String(l)}),c.invalidatePrefix(`daily-report:detail:${o}:user:`),c.invalidatePrefix(I),c.invalidatePrefix($),await M(P),f[0].businessDate){let w=ue(ce(f[0].businessDate,"YYYY-MM-DD"));w&&await M(`${h}${w}`)}await L(Lt.parse({type:"report-delete",reportHubId:o,clientTempId:d,sourceType:f[0].sourceType}),"deleteDailyReport")},findDailyReportHubById:at,updateDailyReportHub:Tt,updateDailyReportInternal:Wt,deleteDailyReportLabel:Kt}}var ui=me(1,"[DailyReportExternalSource]"),dn=(e,t,r,n=ui)=>{if(!e)return[];try{let a=JSON.parse(e);return Array.isArray(a)?a.map(r).filter(i=>i!==null):(n.warn(`Unexpected ${t} format: not an array`),[])}catch(a){return n.warn(`Failed to parse ${t}:`,a),[]}};var Xe=require("drizzle-orm"),y=require("drizzle-orm/mssql-core");function mn(e,t){let r=(0,y.mssqlSchema)(e),n=t.userTable,a=r.table("DailyReportHub",{id:(0,y.bigint)("id",{mode:"number"}).identity().notNull(),sourceType:(0,y.nvarchar)("source_type",{length:20}).notNull(),sourceId:(0,y.nvarchar)("source_id",{length:100}).notNull(),sourceIdNum:(0,y.bigint)("source_id_num",{mode:"number"}).generatedAlwaysAs(Xe.sql`TRY_CAST(source_id AS BIGINT)`),businessDate:(0,y.date)("business_date"),userId:(0,y.bigint)("user_id",{mode:"number"}),title:(0,y.nvarchar)("title",{length:200}),summary:(0,y.nvarchar)("summary",{length:"max"}),createdAt:(0,y.datetime2)("created_at").notNull(),createdBy:(0,y.nvarchar)("created_by",{length:50}).notNull(),updatedAt:(0,y.datetime2)("updated_at").notNull(),updatedBy:(0,y.nvarchar)("updated_by",{length:50}).notNull(),deletedAt:(0,y.datetime2)("deleted_at"),deletedBy:(0,y.nvarchar)("deleted_by",{length:50})},m=>[(0,y.primaryKey)({name:`${e}_DailyReportHub_pk`,columns:[m.id]}),(0,y.foreignKey)({name:`${e}_DailyReportHub_user_id_fk`,columns:[m.userId],foreignColumns:[n.id]}),(0,y.index)(`${e}_DailyReportHub_business_date_index`).on(m.businessDate),(0,y.index)(`${e}_DailyReportHub_updated_at_index`).on(m.updatedAt),(0,y.index)(`${e}_DailyReportHub_source_index`).on(m.sourceType,m.sourceId),(0,y.index)(`${e}_DailyReportHub_user_id_index`).on(m.userId),(0,y.index)(`${e}_DailyReportHub_business_date_id_index`).on((0,Xe.desc)(m.businessDate),(0,Xe.desc)(m.id)),(0,y.index)(`${e}_DailyReportHub_deleted_at_index`).on(m.deletedAt)]),i=r.table("DailyReportInternal",{hubId:(0,y.bigint)("hub_id",{mode:"number"}).notNull(),body:(0,y.nvarchar)("body",{length:"max"}),metadata:(0,y.nvarchar)("metadata",{length:"max"}),createdAt:(0,y.datetime2)("created_at").notNull(),createdBy:(0,y.nvarchar)("created_by",{length:50}).notNull(),updatedAt:(0,y.datetime2)("updated_at").notNull(),updatedBy:(0,y.nvarchar)("updated_by",{length:50}).notNull()},m=>[(0,y.primaryKey)({name:`${e}_DailyReportInternal_pk`,columns:[m.hubId]}),(0,y.foreignKey)({name:`${e}_DailyReportInternal_hub_id_fk`,columns:[m.hubId],foreignColumns:[a.id]})]),p=r.table("DailyReportComment",{id:(0,y.bigint)("id",{mode:"number"}).identity().notNull(),hubId:(0,y.bigint)("hub_id",{mode:"number"}).notNull(),userId:(0,y.bigint)("user_id",{mode:"number"}).notNull(),body:(0,y.nvarchar)("body",{length:"max"}).notNull(),createdAt:(0,y.datetime2)("created_at").notNull(),createdBy:(0,y.nvarchar)("created_by",{length:50}).notNull(),updatedAt:(0,y.datetime2)("updated_at").notNull(),updatedBy:(0,y.nvarchar)("updated_by",{length:50}).notNull()},m=>[(0,y.primaryKey)({name:`${e}_DailyReportComment_pk`,columns:[m.id]}),(0,y.foreignKey)({name:`${e}_DailyReportComment_hub_id_fk`,columns:[m.hubId],foreignColumns:[a.id]}),(0,y.foreignKey)({name:`${e}_DailyReportComment_user_id_fk`,columns:[m.userId],foreignColumns:[n.id]}),(0,y.index)(`${e}_DailyReportComment_hub_id_index`).on(m.hubId)]),c=r.table("DailyReportLabel",{id:(0,y.bigint)("id",{mode:"number"}).identity().notNull(),userId:(0,y.bigint)("user_id",{mode:"number"}),name:(0,y.nvarchar)("name",{length:50}).notNull(),color:(0,y.nvarchar)("color",{length:20}),sortOrder:(0,y.int)("sort_order"),createdAt:(0,y.datetime2)("created_at").notNull(),createdBy:(0,y.nvarchar)("created_by",{length:50}).notNull(),updatedAt:(0,y.datetime2)("updated_at").notNull(),updatedBy:(0,y.nvarchar)("updated_by",{length:50}).notNull()},m=>[(0,y.primaryKey)({name:`${e}_DailyReportLabel_pk`,columns:[m.id]}),(0,y.foreignKey)({name:`${e}_DailyReportLabel_user_id_fk`,columns:[m.userId],foreignColumns:[n.id]})]),S=r.table("DailyReportHub_Label",{hubId:(0,y.bigint)("hub_id",{mode:"number"}).notNull(),labelId:(0,y.bigint)("label_id",{mode:"number"}).notNull(),createdAt:(0,y.datetime2)("created_at").notNull(),createdBy:(0,y.nvarchar)("created_by",{length:50}).notNull()},m=>[(0,y.primaryKey)({name:`${e}_DailyReportHub_Label_pk`,columns:[m.hubId,m.labelId]}),(0,y.foreignKey)({name:`${e}_DailyReportHub_Label_hub_id_fk`,columns:[m.hubId],foreignColumns:[a.id]}),(0,y.foreignKey)({name:`${e}_DailyReportHub_Label_label_id_fk`,columns:[m.labelId],foreignColumns:[c.id]})]),s=r.table("DailyReportUserStatus",{hubId:(0,y.bigint)("hub_id",{mode:"number"}).notNull(),userId:(0,y.bigint)("user_id",{mode:"number"}).notNull(),isRead:(0,y.bit)("is_read").default(!1).notNull(),isStarred:(0,y.bit)("is_starred").default(!1).notNull(),createdAt:(0,y.datetime2)("created_at").notNull(),createdBy:(0,y.nvarchar)("created_by",{length:50}).notNull(),updatedAt:(0,y.datetime2)("updated_at").notNull(),updatedBy:(0,y.nvarchar)("updated_by",{length:50}).notNull()},m=>[(0,y.primaryKey)({name:`${e}_DailyReportUserStatus_pk`,columns:[m.hubId,m.userId]}),(0,y.foreignKey)({name:`${e}_DailyReportUserStatus_hub_id_fk`,columns:[m.hubId],foreignColumns:[a.id]}),(0,y.foreignKey)({name:`${e}_DailyReportUserStatus_user_id_fk`,columns:[m.userId],foreignColumns:[n.id]})]),b=r.table("DailyReportAttachment",{id:(0,y.bigint)("id",{mode:"number"}).identity().notNull(),hubId:(0,y.bigint)("hub_id",{mode:"number"}).notNull(),uploadedBy:(0,y.bigint)("uploaded_by",{mode:"number"}),sourceKey:(0,y.nvarchar)("source_key",{length:200}).notNull(),fileName:(0,y.nvarchar)("file_name",{length:255}).notNull(),filePath:(0,y.nvarchar)("file_path",{length:"max"}).notNull(),fileType:(0,y.nvarchar)("file_type",{length:100}),fileSize:(0,y.bigint)("file_size",{mode:"number"}),objectCheckedAt:(0,y.datetime2)("object_checked_at"),objectMissingAt:(0,y.datetime2)("object_missing_at"),createdAt:(0,y.datetime2)("created_at").notNull(),createdBy:(0,y.nvarchar)("created_by",{length:50}).notNull(),updatedAt:(0,y.datetime2)("updated_at").notNull(),updatedBy:(0,y.nvarchar)("updated_by",{length:50}).notNull()},m=>[(0,y.primaryKey)({name:`${e}_DailyReportAttachment_pk`,columns:[m.id]}),(0,y.foreignKey)({name:`${e}_DailyReportAttachment_hub_id_fk`,columns:[m.hubId],foreignColumns:[a.id]}),(0,y.foreignKey)({name:`${e}_DailyReportAttachment_uploaded_by_fk`,columns:[m.uploadedBy],foreignColumns:[n.id]}),(0,y.uniqueIndex)(`${e}_DailyReportAttachment_source_unique`).on(m.hubId,m.sourceKey),(0,y.index)(`${e}_DailyReportAttachment_hub_id_index`).on(m.hubId,m.createdAt)]);return{hub:a,internal:i,comment:p,attachment:b,label:c,hubLabel:S,userStatus:s}}var ci=5e7,Jt=2e8,di=1,jt=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})})}),pn=125,yn=4,mi=Object.freeze({nanosecondsPerBlockVisit:pn,margin:yn,maxBlockVisits:Math.floor(fe.renderMs*1e6/(pn*yn))}),pi=new Map([["uchar",1],["char",1],["ushort",2],["short",2],["uint",4],["int",4],["float",4],["complex",8],["double",8]]),hn=75,fn=4,gn="#ffffff",yi=1,hi={png:"VipsForeignLoadPngBuffer",jpeg:"VipsForeignLoadJpegBuffer",gif:"VipsForeignLoadNsgifBuffer",webp:"VipsForeignLoadWebpBuffer"},fi=[/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/],bn=Object.freeze({ok:!1,reason:"failed"}),Rn=Object.freeze({ok:!1,reason:"unsupported"}),Sn=e=>({layout:e.multiScan?"jpeg-multi-scan":"jpeg-single-scan",coefficientBytes:Nr(e)}),Tn=(e,t)=>{switch(t){case"jpeg":{let r=$t(e);return r===null?null:Sn(r)}case"png":{let r=Ur(e);return r===null?null:{layout:r?"png-interlaced":"png",coefficientBytes:0}}case"gif":return{layout:"gif",coefficientBytes:0};case"webp":{let r=$r(e);return r===null?null:{layout:`webp-${r}`,coefficientBytes:0}}}},An=(e,t)=>{let r=pi.get(t.depth);if(r===void 0)return null;let n=t.channels*r,a=jt,i=a.wholeImageBuffer[e.layout];return(i.kind==="none"?0:i.kind==="decoded-raster"?t.width*t.height*n:i.kind==="jpeg-coefficients"?e.coefficientBytes:t.width*t.height*i.bytesPerPixel)+a.pipelineRows*t.width*n+a.fixedBytes},Dn=(e,t,r)=>{let n=Tn(e,t);return n===null?null:An(n,r)},gi=e=>e!==null&&e<=Jt,bi=(e,t)=>{if(t!=="jpeg")return Tn(e,t);let{maxBlockVisits:r}=mi,n=Or(e,r);return n===null||n.blockVisits>r?null:Sn(n.header)},Ri=e=>{let t=e instanceof Error?e.message:"";return fi.some(r=>r.test(t))?"failed":"unsupported"},wn=e=>{e.cache(!1),e.concurrency(di),e.block({operation:["VipsForeignLoad"]}),e.unblock({operation:Object.values(hi)});let t=async(n,a,i,p,c)=>{let S=bi(n,a);if(S===null)return Rn;try{let s=e(n,{limitInputPixels:ci,animated:!1});if(!gi(An(S,await s.metadata())))return Rn;if(c.aborted)return bn;let b=await s.rotate().resize({width:i,height:p,fit:"inside",withoutEnlargement:!0}).flatten({background:gn}).webp({quality:hn,effort:fn}).toBuffer();return{ok:!0,bytes:new Uint8Array(b),contentType:"image/webp"}}catch(s){return{ok:!1,reason:Ri(s)}}},r=async(n,{format:a,maxWidth:i,maxHeight:p,signal:c})=>c.aborted?bn:t(n,a,i,p,c);return{id:`sharp-${e.versions.sharp}/vips-${e.versions.vips}/webp-q${hn}-e${fn}/flatten-${gn}/v${yi}`,render:r}};function Si(e){e.redis||(e.logger??console).warn("[DailyReport] redis provider is not injected: cross-worker cache invalidation is disabled (staleness is bounded only by TTL) and SSE publishing is skipped.");let t=it(e.redis),r=new Le({defaultTtlMs:e.cacheDefaultTtlMs??6e4},t),n=bt({...e,cache:r,epochs:t}),a=new He({redis:e.redis,streamKey:n.streamKey,cache:r,logger:e.logger}),i=gt({authenticate:e.authenticate,resolveVisibleSourceTypes:e.resolveVisibleSourceTypes,service:n,encodeUserId:e.encodeUserId,attachmentRateLimitPerMinute:e.attachmentRateLimitPerMinute,attachmentConcurrency:e.attachmentConcurrency,attachmentThumbnailRateLimitPerMinute:e.attachmentThumbnailRateLimitPerMinute,attachmentThumbnailConcurrency:e.attachmentThumbnailConcurrency,attachmentThumbnailCacheBytes:e.attachmentThumbnailCacheBytes,redis:e.redis,sseReader:a,streamKey:n.streamKey,loginRedirectPath:e.loginRedirectPath,enableDevCacheClear:e.enableDevCacheClear,logger:e.logger});return{service:n,cache:r,epochs:t,sseReader:a,streamKey:n.streamKey,knownSourceTypes:[...new Set(["Internal",...(e.externalSources??[]).map(p=>p.sourceType)])],...i}}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_WORKING_SET_MODEL,DAILY_REPORT_SSE_CATCH_UP_BATCH,DAILY_REPORT_SSE_VISIBILITY_REFRESH_MS,DailyReportSseReader,DailyReportViewerScope,SqlResultCache,createDailyReportHandlers,createDailyReportServer,createDailyReportService,createEpochStore,createSharpThumbnailRenderer,defineDailyReportSchema,generateETag,isStreamIdLte,jsonResponseWithETag,predictSharpThumbnailWorkingSetBytes,transformJsonArray});
|
|
5
5
|
/* v8 ignore next -- @preserve 到達不能: 時間切れと中断の購読はどちらも cleanup で同時に外れ、枠を渡すときも先に cleanup するので、列にいない待機者でここへは来ない。それでも splice(-1) が別の待機者を消さないよう残す */
|