@aiquants/daily-report 0.23.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/dist/server.d.mts CHANGED
@@ -1590,18 +1590,20 @@ type DailyReportSseReaderConfig = {
1590
1590
  };
1591
1591
  declare class DailyReportSseReader {
1592
1592
  private readonly config;
1593
- private _emitter;
1594
- private _state;
1595
- private _refCount;
1593
+ private _source;
1596
1594
  private _lastId;
1597
- private _client;
1595
+ private _positioning;
1596
+ private _generation;
1598
1597
  private readonly _logger;
1599
1598
  constructor(config: DailyReportSseReaderConfig);
1600
- subscribe(onEntry: (entry: StreamEntry) => void, onError?: (err: Error) => void): () => void;
1599
+ ready(): Promise<void>;
1600
+ subscribe(onEntry: (entry: StreamEntry) => void, onError: (err: Error) => void): () => void;
1601
1601
  destroy(): Promise<void>;
1602
- private _startLoop;
1603
- private _stopLoop;
1604
- private _emitError;
1602
+ private _readTail;
1603
+ private _createSource;
1604
+ private _start;
1605
+ private _readLoop;
1606
+ private _invalidateCaches;
1605
1607
  }
1606
1608
  type LoaderArgs = {
1607
1609
  request: Request;
package/dist/server.d.ts CHANGED
@@ -1590,18 +1590,20 @@ type DailyReportSseReaderConfig = {
1590
1590
  };
1591
1591
  declare class DailyReportSseReader {
1592
1592
  private readonly config;
1593
- private _emitter;
1594
- private _state;
1595
- private _refCount;
1593
+ private _source;
1596
1594
  private _lastId;
1597
- private _client;
1595
+ private _positioning;
1596
+ private _generation;
1598
1597
  private readonly _logger;
1599
1598
  constructor(config: DailyReportSseReaderConfig);
1600
- subscribe(onEntry: (entry: StreamEntry) => void, onError?: (err: Error) => void): () => void;
1599
+ ready(): Promise<void>;
1600
+ subscribe(onEntry: (entry: StreamEntry) => void, onError: (err: Error) => void): () => void;
1601
1601
  destroy(): Promise<void>;
1602
- private _startLoop;
1603
- private _stopLoop;
1604
- private _emitError;
1602
+ private _readTail;
1603
+ private _createSource;
1604
+ private _start;
1605
+ private _readLoop;
1606
+ private _invalidateCaches;
1605
1607
  }
1606
1608
  type LoaderArgs = {
1607
1609
  request: Request;
package/dist/server.js CHANGED
@@ -1,5 +1,5 @@
1
- "use strict";var Tt=Object.defineProperty;var Dn=Object.getOwnPropertyDescriptor;var wn=Object.getOwnPropertyNames;var _n=Object.prototype.hasOwnProperty;var Jt=e=>{throw TypeError(e)};var In=(e,t)=>{for(var r in t)Tt(e,r,{get:t[r],enumerable:!0})},En=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of wn(t))!_n.call(e,a)&&a!==r&&Tt(e,a,{get:()=>t[a],enumerable:!(n=Dn(t,a))||n.enumerable});return e};var Cn=e=>En(Tt({},"__esModule",{value:!0}),e);var Kt=(e,t,r)=>t.has(e)||Jt("Cannot "+r);var Ve=(e,t,r)=>(Kt(e,t,"read from private field"),r?r.call(e):t.get(e)),At=(e,t,r)=>t.has(e)?Jt("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,r),Dt=(e,t,r,n)=>(Kt(e,t,"write to private field"),n?n.call(e,r):t.set(e,r),r);var Ja={};In(Ja,{DAILY_REPORT_ATTACHMENT_THUMBNAIL_MAX_OUTPUT_BYTES:()=>$t,DAILY_REPORT_ATTACHMENT_THUMBNAIL_OUTPUT_MEDIA_TYPES:()=>Ut,DAILY_REPORT_SHARP_THUMBNAIL_DECODE_BUDGET_BYTES:()=>Vt,DAILY_REPORT_SHARP_THUMBNAIL_WORKING_SET_MODEL:()=>zt,DAILY_REPORT_SSE_CATCH_UP_BATCH:()=>yt,DAILY_REPORT_SSE_VISIBILITY_REFRESH_MS:()=>qt,DailyReportSseReader:()=>$e,DailyReportViewerScope:()=>ye,SqlResultCache:()=>ke,createDailyReportHandlers:()=>ht,createDailyReportServer:()=>Wa,createDailyReportService:()=>ft,createEpochStore:()=>nt,createSharpThumbnailRenderer:()=>an,defineDailyReportSchema:()=>Kr,generateETag:()=>Be,isStreamIdLte:()=>De,jsonResponseWithETag:()=>pe,predictSharpThumbnailWorkingSetBytes:()=>nn,transformJsonArray:()=>Jr});module.exports=Cn(Ja);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 l=t.ttlMsOverride??this.config.defaultTtlMs;if(l-(a.expireAt-Date.now())<l*r||this.inFlight.has(n))return;let c;c=(async()=>{let T=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()+l,epoch:T}),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,l=this.buckets.get(r);if(n&&(this.buckets.delete(r),this.inFlight.delete(r)),!n&&l&&l.expireAt>Date.now())if(t.epochKey){let c=await this.epochStore.getEpoch(t.epochKey);if(c===null||l.epoch===c)return this.maybeRefreshAhead(t),a?l.records.map(T=>structuredClone(T)):l.records;this.buckets.delete(r)}else return this.maybeRefreshAhead(t),a?l.records.map(c=>structuredClone(c)):l.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 s=Date.now()+(t.ttlMsOverride??this.config.defaultTtlMs);this.buckets.set(r,{records:T,expireAt:s,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 jr=require("@aiquants/sse"),we=require("@aiquants/sse/server");var xn=/^\d{4}-\d{2}-\d{2}$/,vn=/^\d{4}\/\d{2}\/\d{2}$/,Qt=e=>e<10?`0${e}`:`${e}`,Xt=e=>{if(Number.isNaN(e.getTime()))return null;let t=e.getFullYear(),r=Qt(e.getMonth()+1),n=Qt(e.getDate());return`${t}-${r}-${n}`};var ue=e=>{if(e==null)return null;if(e instanceof Date)return Xt(e);let t=e.trim();if(t==="")return null;if(xn.test(t))return t;if(vn.test(t))return t.replaceAll("/","-");let r=new Date(t);return Xt(r)};var wt=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 l=n.businessDate;if(l===null)t^=1,t=Math.imul(t,16777619),r^=1,r=Math.imul(r,16777619);else for(let p=0;p<l.length;p++){let c=l.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,Zt=e=>{for(let t=1;t<e.length;t++)if(at(e[t-1],e[t])>0)return!1;return!0};var er=(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,...l)=>{e<=0&&r.debug(...n(a),...l)},info:(a,...l)=>{e<=1&&r.info(...n(a),...l)},warn:(a,...l)=>{e<=2&&r.warn(...n(a),...l)},error:(a,...l)=>{e<=3&&r.error(...n(a),...l)}}};var f=require("zod");var tr=15e3,rr="lastEventId",Mn=/^\d{1,15}-\d{1,15}$/,nr=e=>Mn.test(e),Ln=f.z.object({name:f.z.string().nullish(),affiliation:f.z.string().nullish()}),Pn=f.z.object({name:f.z.string().nullish(),text:f.z.string().nullish(),color:f.z.string().nullish()}),kn=f.z.object({id:f.z.number(),name:f.z.string().nullish(),color:f.z.string().nullish()}),ar=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()}),Nn=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)}),_t=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(Ln),subject:f.z.string().nullish(),content:f.z.string().nullish(),externalComments:f.z.array(Pn),isRead:f.z.boolean(),isStarred:f.z.boolean(),labels:f.z.array(kn),postedComments:f.z.array(ar),attachments:f.z.array(Nn).default([])}),On=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()}),It=f.z.string().optional(),Et=f.z.object({type:f.z.literal("comment-add"),reportHubId:f.z.number(),comment:ar,clientTempId:f.z.string(),recipientRawUserId:f.z.number().optional(),sourceType:It}),Ct=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:It}),xt=f.z.object({type:f.z.literal("report-create"),reportHubId:f.z.number(),report:_t,clientTempId:f.z.string(),recipientRawUserId:f.z.number().optional()}),vt=f.z.object({type:f.z.literal("report-update"),reportHubId:f.z.number(),report:_t,clientTempId:f.z.string(),recipientRawUserId:f.z.number().optional()}),Mt=f.z.object({type:f.z.literal("report-publish"),reportHubId:f.z.number(),report:_t,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:It}),ir=f.z.discriminatedUnion("type",[On,it,Et,Ct,xt,vt,Mt,Lt]);var Pt=Object.freeze({tile:Object.freeze({maxWidth:480,maxHeight:320})}),or=e=>Object.hasOwn(Pt,e);var Bn="download",Un="thumbnail",$n="1";var sr=e=>{let t=e.getAll(Un),r=e.getAll(Bn);if(t.length>0&&r.length>0)return{kind:"invalid",reason:"conflict"};if(t.length>0){let[n]=t;return t.length===1&&or(n)?{kind:"thumbnail",variant:n}:{kind:"invalid",reason:"thumbnail_variant"}}return r.length>0?r.length===1&&r[0]===$n?{kind:"download"}:{kind:"invalid",reason:"download_value"}:{kind:"inline"}};var lr=(e,t)=>(r,n)=>{let a=n?"markAttachmentPresent":"markAttachmentMissing";e[a](r).catch(l=>{t.error(`${a} failed attachment=${r} message=${l instanceof Error?l.message:"unknown"}`)})};var ot=6e4/1e3,st=5e3/1e3,ur=(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},cr=new Set(["image/png","image/jpeg","image/gif","image/webp","application/pdf","text/plain"]),Fn=/^[\x20-\x7E]+$/,qn=/^[\w.+-]+\/[\w.+-]+/,kt=e=>e&&Fn.test(e)&&qn.test(e)?e:null,dr=e=>encodeURIComponent(e).replace(/['()*]/g,t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`),mr=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}},pr={404:"Attachment not found",413:"Attachment too large",502:"Attachment storage unavailable"},Ne="Attachment request failed";var Yn=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 ${Yn(r)}`),ut=(e,t)=>new TypeError(`[daily-report] ${e} must be ${t}`);var yr=32*1024*1024,Vn=60,zn=4,jn=120,Gn=2,Wn=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),Jn=[["attachmentThumbnailRenderer",["readAttachment","attachmentIdCodec"]],["readAttachment",["attachmentIdCodec"]],["attachmentIdCodec",["readAttachment"]],["attachmentMaxBytes",["readAttachment"]],["attachmentRateLimitPerMinute",["readAttachment"]],["attachmentConcurrency",["readAttachment"]],["attachmentThumbnailRateLimitPerMinute",["attachmentThumbnailRenderer"]],["attachmentThumbnailConcurrency",["attachmentThumbnailRenderer"]],["attachmentThumbnailCacheBytes",["attachmentThumbnailRenderer"]]],Nt=e=>{for(let[t,r]of Jn){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`)}},hr=(e,t)=>(Nt({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,Vn),originalConcurrency:Ie("attachmentConcurrency",e.attachmentConcurrency,1,zn),thumbnailRateLimitPerMinute:Ie("attachmentThumbnailRateLimitPerMinute",e.attachmentThumbnailRateLimitPerMinute,1,jn),thumbnailConcurrency:Ie("attachmentThumbnailConcurrency",e.attachmentThumbnailConcurrency,1,Gn),thumbnailCacheBytes:Ie("attachmentThumbnailCacheBytes",e.attachmentThumbnailCacheBytes,0,Wn)}));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=[],l=new Map,p=(s,g)=>{let m=(l.get(s)??0)+g;m<=0?l.delete(s):l.set(s,m)},c=()=>{for(;n<t;){let s=a.shift();if(!s)return;p(s.owner,-1),n+=1,s.grant(T())}},T=()=>{let s=!1;return()=>{s||(s=!0,n-=1,c())}};return{acquire:(s,g)=>{if(g.aborted)return Promise.resolve(null);if(n<t)return n+=1,Promise.resolve(T());if(r===null||a.length>=r.max||(l.get(s)??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(s,-1),H(),A(null))},J=setTimeout(E,m);J.unref?.();let H=()=>{clearTimeout(J),g.removeEventListener("abort",E)},Q={owner:s,grant:S=>{H(),A(S)}};a.push(Q),p(s,1),g.addEventListener("abort",E,{once:!0})};return new Promise(_)}}};var Kn=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 s=T??{tokens:e,lastRefillMs:c,deniedSinceAdmission:0};r(s,c),t.set(p,s);for(let g of t.keys()){if(t.size<=Kn)break;t.delete(g)}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}},l=p=>(p.deniedSinceAdmission+=1,{allowed:!1,firstDenial:p.deniedSinceAdmission===1});return{consume:(p,c)=>{let T=n(p,c);return a(T)??l(T)},refund:(p,c,T)=>{let s=t.get(p);s&&(r(s,c),s.tokens=Math.min(e,s.tokens+T))}}};var Qn=12e4,Xn=(e,t,r)=>{let n=setTimeout(t,r);n.unref?.();let a=()=>{clearTimeout(n),t()},l=!1;return new ReadableStream({pull(p){if(l){p.close(),a();return}l=!0,p.enqueue(e)},cancel(){a()}})},fr=e=>{let{service:t,encodeUserId:r,resolveViewerScope:n,logger:a,recordObjectState:l}=e,p=t.attachmentDelivery,c=ze(e.rateLimitPerMinute),T=ct({limit:e.concurrency,queue:null});return async s=>{let{request:g,delivery:m,attachmentId:_,internalUserId:A,readAttachment:E,cookie:J,fail:H}=s,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 L=await n(g),V=await t.getAttachmentForUser(L,_,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"&&l(_,!1),a.warn(`${v} attachment=${_} viewer=${A} reason=${I.reason} code=${I.code??"-"}`),H(v,pr[v])}if(I.bytes.byteLength>Q)return a.error(`500 attachment=${_} viewer=${A} reason=port_contract code=over_max_bytes`),H(500,Ne);let P=kt(V.fileType)??kt(I.contentType),b=P!==null&&cr.has(P),x=b?P:"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="${mr(V.fileName)}"; filename*=UTF-8''${dr(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),l(_,!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(Xn(I.bytes,F,Qn),{status:200,headers:Y}))}finally{R||F()}}};var Re=Object.freeze({queueWaitMs:3e4,readMs:3e4,renderMs:1e4,transferMarginMs:5e3}),wi=Re.queueWaitMs+Re.readMs+Re.renderMs+Re.transferMarginMs;var br=require("crypto"),Be=e=>{let t=JSON.stringify(e);return`"${(0,br.createHash)("sha256").update(t).digest("hex")}"`};var Zn=new Set([194,198,202,206]),ea=64,ta=2,gr=8,Rr=28,Ae=12,Ot=8,ra=20,Sr=Ae+Ot+10,na=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},aa=e=>e>=192&&e<=207&&e!==196&&e!==200&&e!==204,Bt=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),l=r+2,p=r+a;if(a<2||p>e.byteLength)return null;if(aa(n)){if(t!==null||a<8)return null;let c=Se(e,l+1),T=Se(e,l+3),s=e[l+5];if(T===0||c===0||s===0||a!==8+3*s)return null;let g=[];for(let m=0;m<s;m+=1){let _=e[l+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:Zn.has(n)}}else if(n===218){if(t===null||a<3)return null;let c=e[l];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},Tr=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:l}of e.components){let p=Math.ceil(e.width*a/(t*gr)),c=Math.ceil(e.height*l/(r*gr));n+=Math.ceil(p/a)*a*Math.ceil(c/l)*l}return n*ea*ta},Ar=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}},ia=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<Sr?null:{width:Ue(e,24,3)+1,height:Ue(e,27,3)+1}:null},Dr=e=>{if(Ar(e)===null||e.byteLength<=Rr)return null;switch(e[Rr]){case 0:return!1;case 1:return!0;default:return null}},wr=e=>{if(fe(e,Ae,"VP8 "))return"lossy";if(fe(e,Ae,"VP8L"))return"lossless";if(!fe(e,Ae,"VP8X")||e.byteLength<Sr)return null;if((e[ra]&na)!==0)return"animated";let t=!1;for(let r=Ae;r+Ot<=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+=Ot+n+n%2}return null},_r={png:Ar,jpeg:Bt,webp:ia};var oa=new Set(["image/png","image/jpeg","image/gif","image/webp"]),Ut=Object.freeze(["image/webp","image/jpeg","image/png"]),sa={"image/webp":"webp","image/jpeg":"jpeg","image/png":"png"},la=new Set(Ut),ua=e=>typeof e=="string"&&la.has(e),$t=1024*1024,ca=256,dt=(e,t)=>e.fileType===null||!oa.has(e.fileType)?!1:e.fileSize===null||e.fileSize<=t,da=[137,80,78,71,13,10,26,10],ma=[255,216,255],pa=[[71,73,70,56,55,97],[71,73,70,56,57,97]],ya=[82,73,70,70],ha=[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},Ht=e=>{if(je(e,da,0))return"png";if(je(e,ma,0))return"jpeg";for(let t of pa)if(je(e,t,0))return"gif";return je(e,ya,0)&&je(e,ha,8)?"webp":null},Ir=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])}},Er=(e,t)=>{if(!ua(e.contentType))return"content_type";if(!(e.bytes instanceof Uint8Array))return"bytes";if(e.bytes.byteLength===0)return"empty";if(e.bytes.byteLength>$t)return"too_large";let r=sa[e.contentType];if(Ht(e.bytes)!==r)return"signature";let n=_r[r](e.bytes);return n===null||n.width>t.maxWidth||n.height>t.maxHeight?"dimensions":null},Cr=e=>{he("maxBytes",e.maxBytes,0),he("maxEntries",e.maxEntries,0);let t=new Map,r=0,n=a=>{let l=t.get(a);l&&(t.delete(a),r-=l.weight)};return{get:a=>{let l=t.get(a);if(l)return t.delete(a),t.set(a,l),l.entry},set:(a,l)=>{n(a);let p=(l.kind==="thumbnail"?l.bytes.byteLength:0)+ca;if(p>e.maxBytes||e.maxEntries===0)return;let c=l.kind==="thumbnail"?{kind:"thumbnail",bytes:l.bytes.slice(),contentType:l.contentType}:l;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 xr=()=>{let e=new Map;return{join:(t,r,n)=>{let a=()=>{let T=new AbortController,s=()=>{e.get(t)?.controller===T&&e.delete(t)},m={promise:n(T.signal).finally(s),controller:T,waiters:0};return e.set(t,m),m},l=e.get(t)??a();l.waiters+=1;let p=()=>{l.waiters-=1,!(l.waiters>0)&&(l.controller.abort(),e.get(t)===l&&e.delete(t))};r.aborted?p():r.addEventListener("abort",p,{once:!0});let c=()=>{r.removeEventListener("abort",p)};return l.promise.finally(c)}}};var Ft=e=>{let{budgetMs:t,flightSignal:r,call:n,onOverrun:a,onStuck:l}=e,p=Date.now(),c=new AbortController,T=!1,s,g,m=(F,R)=>{let M=setTimeout(F,R);return M.unref?.(),M},_=()=>{l(Date.now()-p)},A=F=>{s=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(s),clearTimeout(g),T&&a(Date.now()-p,F)},L=Q.then(()=>S(null),F=>S({error:F}));return{outcome:Promise.race([Q.then(F=>({timedOut:!1,value:F})),E]),settled:L}};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:l,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}`)},s=(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=Ft({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:s("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"&&l(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 L=Ht(H.bytes);if(L===null)return S({kind:"unrenderable",reason:"signature"});let V=Ft({budgetMs:Re.renderMs,flightSignal:m,call:I=>g.renderer.render(H.bytes,{format:L,maxWidth:g.box.maxWidth,maxHeight:g.box.maxHeight,signal:I}),onOverrun:T("render",g),onStuck:s("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=Er(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 Pr=10,fa=1/Pr,Mr=1-fa,ba=1024,ga=64,Ra=8,Lr="private, no-cache",Sa="no-store",Ta=e=>{switch(e.status){case 404:case 502:return"warn";case 500:return"error";case 503:return e.reason==="aborted"?"info":"warn"}},kr=e=>{let{service:t,encodeUserId:r,resolveViewerScope:n,logger:a,recordObjectState:l}=e,p=t.attachmentDelivery,c=ze(e.rateLimitPerMinute),T=ze(e.rateLimitPerMinute*Pr),s=ct({limit:e.concurrency,queue:{max:ga,maxPerOwner:Ra,maxWaitMs:Re.queueWaitMs}}),g=Cr({maxBytes:e.cacheBytes,maxEntries:ba}),m=xr(),_=vr({gate:s,cache:g,maxBytes:p.maxBytes,encodeUserId:r,recordObjectState:l,logger:a}),A=(S,L,V,F)=>{let R=`attachment=${S.attachmentId} viewer=${S.internalUserId} variant=thumbnail cache=${F}`;if(L.kind==="failure")return a[Ta(L)](`${L.status} ${R} reason=${L.reason} code=${L.code??"-"}`),S.fail(L.status,Ee[L.status],L.status===503?{"Retry-After":String(st)}:{});let M=L.identity==="verified"?"":` identity=${L.identity}`;if(L.kind==="unrenderable")return a.info(`404 ${R} reason=${L.reason}${M}`),S.fail(404,Ee[404]);let I=L.identity==="verified"?{"Cache-Control":Lr,ETag:V}:{"Cache-Control":Sa},P=new Headers({"Content-Type":L.contentType,"Content-Length":String(L.bytes.byteLength),...I,"X-Content-Type-Options":"nosniff","Content-Security-Policy":"default-src 'none'; sandbox","X-Frame-Options":"SAMEORIGIN"});return S.cookie&&P.append("Set-Cookie",S.cookie),a.info(`200 ${R} type=${L.contentType} bytes=${L.bytes.byteLength}${M}`),new Response(L.bytes,{status:200,headers:P})},E=(S,L,V)=>(L.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,L,V)=>{L.suppressedDenials>0&&a.warn(`${V}_suppressed count=${L.suppressedDenials} viewer=${S.internalUserId} variant=thumbnail`)},H=S=>{let L=c.consume(S.internalUserId,Date.now());return L.allowed?(J(S,L,"rate_limit"),null):E(S,L,"rate_limit")},Q=(S,L)=>{if(!L)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,L)=>{let{request:V,attachmentId:F,internalUserId:R,readAttachment:M,cookie:I,fail:P}=S,b=Pt[L],x=p.thumbnailRenderer;if(!x)return P(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)?Ir({rendererId:x.id,box:b,attachmentId:F,filePath:$.filePath,fileType:$.fileType,fileSize:$.fileSize}):null;if(j&&ur(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`),P(404,Ee[404]);if(!j)return c.refund(R,Date.now(),Mr),a.info(`404 attachment=${F} viewer=${R} variant=thumbnail reason=not_eligible`),P(404,Ee[404]);let{key:z,etag:ee}=j,K=g.get(z);if(K)return c.refund(R,Date.now(),Mr),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"}`),P(500,Ee[500])}return A(S,k,ee,"miss")}};var Aa='[daily-report] params.token must be passed by the route that mounts attachment.loader; declare a "token" route parameter ({apiBasePath}/attachment/{token})',Nr=e=>{let{authenticate:t,service:r,encodeUserId:n,resolveViewerScope:a,logger:l}=e,p=r.attachmentDelivery,c=hr(e.tuning,p),T={service:r,encodeUserId:n,resolveViewerScope:a,logger:l,recordObjectState:lr(r,l)},s=fr({...T,rateLimitPerMinute:c.originalRateLimitPerMinute,concurrency:c.originalConcurrency}),g=kr({...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=sr(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:L}=p;if(!(S&&L))return E(404,"Attachment not found");if(_.token===void 0)throw new Error(Aa);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:L,cookie:A,fail:E};return Q.kind==="thumbnail"?await g(R,Q.variant):await s(R)}catch(J){if(J instanceof Response)throw J;return l.error(`500 attachment=? viewer=? reason=unexpected message=${J instanceof Error?J.message:"unknown"}`),E(500,Ne)}}};var Da=me(1,"[Response]"),pe=(e,t,r,n=200,a=Da)=>{let l=Be(r),p=e.headers.get("If-None-Match");a.info(`[jsonResponseWithETag] ETag: ${l}, 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:l});return t&&c.append("Set-Cookie",t),e.method==="GET"&&n===200&&p===l?new Response(null,{status:304,headers:c}):new Response(JSON.stringify(r),{status:n,headers:c})};var Or=require("events");var De=(e,t)=>{let[r,n]=e.split("-").map(Number),[a,l]=t.split("-").map(Number);return r!==a?r<a:n<=l},$e=class{constructor(t){this.config=t;this._emitter=new Or.EventEmitter;this._state="idle";this._refCount=0;this._lastId="$";this._emitter.setMaxListeners(0),this._logger=t.logger??me(1,"[SSE Reader]")}subscribe(t,r){return this._emitter.on("entry",t),r&&this._emitter.on("error",r),this._refCount++,this._refCount===1&&this._startLoop(),()=>{this._emitter.removeListener("entry",t),r&&this._emitter.removeListener("error",r),this._refCount--,this._refCount<=0&&(this._refCount=0,this._stopLoop())}}async destroy(){this._refCount=0,await this._stopLoop(),this._emitter.removeAllListeners(),this._lastId="$"}async _startLoop(){for(;this._state==="stopping";)await new Promise(t=>setTimeout(t,50));if(this._state!=="running"&&this._refCount!==0){this._state="running";try{this._client=await this.config.redis?.createClient()}catch(t){this._state="idle",this._emitError(t instanceof Error?t:new Error("Failed to create Redis client for SSE reader"));return}if(!this._client){this._state="idle",this._emitError(new Error("Failed to create Redis client for SSE reader"));return}if(this._client.on("error",t=>{this._logger.error("Redis client error:",t)}),this._lastId==="$")try{let t=await this.config.redis?.getClient();if(t){let r=await t.xRevRange(this.config.streamKey,"+","-",{COUNT:1});this._lastId=r.length>0?r[0].id:"0-0"}}catch(t){this._logger.warn("Failed to resolve stream tail anchor; falling back to $:",t)}try{for(;this._state==="running"&&this._client?.isOpen;){let t=await this._client.xRead([{key:this.config.streamKey,id:this._lastId}],{BLOCK:5e3,COUNT:100});if(t)for(let r of t)for(let n of r.messages){this._lastId=n.id;try{let a=n.message?.data?JSON.parse(n.message.data):null,l=a?.type;if((l==="report-create"||l==="report-delete"||l==="report-publish")&&this.config.cache.invalidatePrefix("daily-report:ids"),l==="comment-add"||l==="comment-delete"||l==="status-update"){let p=a?.reportHubId;typeof p=="number"&&(this.config.cache.invalidate(`daily-report:detail:${p}`),this.config.cache.invalidatePrefix(`daily-report:detail:${p}:user:`))}}catch{}this._emitter.emit("entry",{id:n.id,message:n.message})}}}catch(t){!(t?.constructor?.name==="ClientClosedError")&&this._state==="running"&&(this._logger.error("xRead loop error:",t),this._emitError(t instanceof Error?t:new Error(String(t))))}finally{if(this._client?.isOpen)try{await this._client.quit()}catch{}this._client=void 0,this._state="idle",this._refCount>0&&this._startLoop()}}}async _stopLoop(){if(this._state==="running"){if(this._state="stopping",this._client?.isOpen)try{await this._client.quit()}catch{}for(;this._state==="stopping";)await new Promise(t=>setTimeout(t,50))}}_emitError(t){this._emitter.listenerCount("error")>0?this._emitter.emit("error",t):this._logger.error("SSE reader error (no error listeners):",t)}};var We=require("drizzle-orm");var wa="",_a=64,Ia=e=>e.toLowerCase(),Ea=e=>e.trim().toLowerCase();function Br(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=Ea(r);n.length>0&&t.add(n)}return t}function be(e,t){return e===null?!0:t==null?!1:e.has(Ia(t))}function Ce(e){return e!==null&&e.size===0}function $r(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){At(this,He);At(this,Fe);Dt(this,He,t),Dt(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=Br(r?t.read:t),a=r?t.comment:void 0;if(a===void 0)return new Ge(n,n);let l=Br(a),p=new Set;for(let c of l??[])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=Ur(e.visible),r=Ur(e.commentable);return t===r?t:`d:${t.length}:${t}${r}`}function Ur(e){if(e===null)return"all";if(e.size===0)return"none";let t=[...e].sort().map(n=>`${n.length}:${n}`).join(wa);if(t.length<=_a)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 Ca=(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})},pt=30,Gr=4e3,xa="stream interrupted by server error",va=/^\d{4}-\d{2}-\d{2}$/,Ma=15e3,Hr=Symbol("ids-stream-heartbeat"),Fr=864e5,La={baseMs:2e3,jitterMs:8e3},qt=6e4,yt=1e3,qr=JSON.stringify({type:"connected"}),Yr="0-0",Pa=/^[0-9a-f]{1,16}$/,ka=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&&Pa.test(n)?n:null;if(t===null)return r===null?{cursor:null,snapshot:a}:{invalid:!0};let l=Number.parseInt(t,10);return!Number.isSafeInteger(l)||String(l)!==t||l<=0?{invalid:!0}:r===null?{cursor:{businessDate:null,reportHubId:l},snapshot:a}:va.test(r)?{cursor:{businessDate:r,reportHubId:l},snapshot:a}:{invalid:!0}};async function*Vr(e,t,r,n){let a=t?er(e,t):0,l=!0;for(;;){let p=e.slice(a,a+(l?r:Gr));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,...l?{total:e.length}:{},...l?{streamAnchor:n.streamAnchor}:{},snapshot:n.snapshot,...l&&n.restarted?{restarted:!0}:{}},l=!1,c)return}}var zr=(e,t,r,n)=>{let a=new TextEncoder,l=!1,p=null,c=new ReadableStream({async pull(s){if(l||r.signal.aborted){await t.return(void 0).catch(()=>{});try{s.close()}catch{}return}let g=null;try{p===null&&(p=t.next());let m=new Promise(J=>{g=setTimeout(()=>J(Hr),Ma)}),_=await Promise.race([p,m]);if(g!==null&&(clearTimeout(g),g=null),_===Hr){if(l||r.signal.aborted){await t.return(void 0).catch(()=>{});try{s.close()}catch{}return}s.enqueue(a.encode(`
2
- `));return}p=null;let{value:A,done:E}=_;if(E){s.close();return}if(l||r.signal.aborted){await t.return(void 0).catch(()=>{});try{s.close()}catch{}return}s.enqueue(a.encode(`${JSON.stringify(A)}
3
- `))}catch(m){if(g!==null&&clearTimeout(g),p=null,l||r.signal.aborted)return;n.error(`ids-stream emission failed: ${m instanceof Error?m.message:String(m)}`);try{let _={kind:"error",error:xa};s.enqueue(a.encode(`${JSON.stringify(_)}
4
- `)),s.close()}catch{}}},cancel(){l=!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})},Na=(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)}},Oa=["externalComments","postedComments"],Ba=(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 l of Oa)a[l]=[];return!0};function ht(e){let{authenticate:t,service:r,encodeUserId:n,redis:a,sseReader:l,streamKey:p}=e,c=e.loginRedirectPath??"/auth/login",T=e.logger??me(3,"[DailyReportAPI]"),s=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 P=await I(R,{reason:M});return P==null?ye.unrestricted("visibility port returned null/undefined: this deployment opts out of source-type filtering"):ye.restrictTo(P)}catch(P){return s.error("resolveVisibleSourceTypes threw; failing closed (deny all)",P),ye.restrictTo([])}},A=async({request:R})=>{let{user:M,cookie:I}=await t(R,{failureRedirect:c}),P=new Headers;I&&P.append("Set-Cookie",I);let b=await r.getUserIdByExternalId(M.id),x=b?n(b):null;return{data:{user:M,userId:x},headers:P}},E={"business-date":async(R,M,I,P,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,P.id,{forceRefresh:q});return pe(I,M,{businessDate:x,reports:O},200)},"ids-stream":async(R,M,I,P,b)=>{let x=ka(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,P.id,{forceRefresh:q,onFetchStart:x.cursor?void 0:()=>{O=!0,r.readSseStreamAnchor().then(z=>r.getDailyReportIdsFirstPageByExternalId(b,P.id,pt).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=wt(z),X=x.snapshot!==null&&x.snapshot===K;return zr(M,Vr(z,X?x.cursor:null,pt,{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<pt){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*Vr(ee.items,null,K?Gr:pt,{snapshot:wt(ee.items),streamAnchor:ee.streamAnchor})})();return zr(M,j,I,T)},report:async(R,M,I,P,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,P.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:P}=await t(R,{failureRedirect:null}),b=P??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:P}=await t(R,{failureRedirect:null}),b=(q,O)=>Ca(q,{...O,setCookie:P});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:qr})},S=(R,M,I,P)=>{if(I.data)try{let b=JSON.parse(I.data),x=ir.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!==P.internalUserId||!Na(q,b,P.visibleSet,P.commentableSet)){Q(R,M);return}let v=Ba(q,b,P.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:${P.internalUserId}] processEntry error:`,b)}},L=async(R,M)=>{let{request:I,internalUserId:P,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)})},qt);R.onClose(()=>clearInterval(Y));let v=b===null?Yr: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:P,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:yt}),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<yt||Qe===void 0||R.isClosed())return!0;de=Qe.id}},X=l.subscribe(C=>{if(!$){z(C);return}De(C.id,v)||(j===null&&(j=C.id),ae.push(C))},C=>{g.error(`[SSE:${P}] Fan-Out reader error:`,C),R.close()});if(R.onClose(X),b===null)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===Yr?null:v,data:qr}),(0,we.startSseHeartbeat)(R,{intervalMs:tr,retry:La,runtime:jr.systemSseRuntime}),b===null||a===void 0)return;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(Fr),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,P=()=>{let x=new Headers;return I!==void 0&&x.append("Set-Cookie",I),x},b=x=>(0,we.terminalStreamResponse)(x,{data:"",retryMs:Fr,headers:P()});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:P()});let Y=(0,we.readLastEventId)(R,rr);if(Y!==null&&!nr(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:P(),onError:($,ae)=>g.error(`[SSE:${O}] ${ae} failed:`,$),produce:$=>L($,{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:P()})}},F=Nr({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 Wr=require("@aiquants/mssql"),u=require("drizzle-orm");var xe=e=>(0,u.getColumns)(e),Ua=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"),l=String(r.getMonth()+1).padStart(2,"0"),p=String(r.getDate()).padStart(2,"0");if(t==="YYYY-MM-DD")return`${a}-${l}-${p}`;let c=String(r.getHours()).padStart(2,"0"),T=String(r.getMinutes()).padStart(2,"0"),s=String(r.getSeconds()).padStart(2,"0");return`${a}-${l}-${p} ${c}:${T}:${s}`};function ft(e){let{db:t,tables:r,userTable:n,resolveUserId:a,encodeUserId:l,redis:p,cache:c,epochs:T}=e,{hub:s,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]");Nt({attachmentIdCodec:e.attachmentIdCodec,readAttachment:e.readAttachment,attachmentThumbnailRenderer:e.attachmentThumbnailRenderer,attachmentMaxBytes:e.attachmentMaxBytes});let L=Object.freeze({idCodec:e.attachmentIdCodec,readAttachment:e.readAttachment,thumbnailRenderer:Ua(e.attachmentThumbnailRenderer),maxBytes:Ie("attachmentMaxBytes",e.attachmentMaxBytes,1,yr)}),V=i=>(0,Wr.runWithTransactionRetry)(o=>t.transaction(d=>o(()=>i(d))),e.transactionRetry),F="daily-report:ids",R=e.idsTtlMs??18e4,M="daily-report:ids:epoch",I="daily-report:business-date:",P=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=>$r(s.sourceType,i),ae=(i,o)=>`${F}:user:${i}:st:${o}`,j=i=>`${F}:user:${i}:`,z=(i,o,d)=>`daily-report:date:${i}:user:${o}:st:${d}`,ee=(i,o)=>`daily-report:date:${i}:user:${o}:`,K=(i,o,d)=>`daily-report:detail:${i}:user:${o}:st:${d}`,X=(i,o)=>`daily-report:detail:${i}:user:${o}:`,k=async(i,o)=>{let d=await p?.getClient();if(!d){S.warn(`[SSE] Redis client unavailable (${o})`);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 (${o}): ${D}ms`)}catch(D){S.error(`[SSE] Redis publish failed (${o}):`,D)}},C=async()=>{try{let i=await p?.getClient();if(i===void 0)return null;let[o]=await i.xRevRange(O,"+","-",{COUNT:1});return o===void 0?null:o.id}catch(i){return S.error("[DailyReportService] SSE stream anchor read failed",i),null}},te=i=>i==null||i===""?null:/^\d+$/.test(i)?l(Number(i)):i,de=()=>{let i={};for(let o of J)i[`ext_${o.sourceType}`]=xe(o.table);return i},ie=i=>{let o=i;for(let d of J)o=o.leftJoin(d.table,(0,u.and)((0,u.eq)(s.sourceType,d.sourceType),(0,u.eq)(s.sourceIdNum,d.idColumn)));return o},ve=(i,o,d)=>{let{hub:h,internal:D}=o,B=h.summary,w=[],N=null,U=null,Z=null,G=null,re=null,oe=null,Le=[],Te=J.find(W=>W.sourceType===h.sourceType),Pe=Te?o[`ext_${Te.sourceType}`]:void 0;if(Te&&Pe){let W=Te.mapRow(Pe);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&&(Le=W.externalComments)}else h.sourceType==="Internal"&&D&&(B=D.body);let ge=(o.labels??[]).map(W=>({id:W.id,name:W.name,color:W.color})),se=o.postedCommentRows??[],ne=be(i.commentable,h.sourceType),le=U?H.includes(U):!1,St=Me?.[0]??null;return le&&St&&!ge.some(W=>W.id===St)&&ge.push({id:St,name:Q,color:null}),{reportHubId:h.id,date:ce(h.businessDate,"YYYY-MM-DD"),author:o.creatorName??te(h.createdBy)??"",userId:h.userId?l(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??o.creatorName??te(h.createdBy),category:N,creationCategory:U,visitTimeFrom:Z,visitTimeTo:G,customerName:re,interviewers:w,subject:h.title,content:B,externalComments:ne?Le:[],isRead:o.isRead??!1,isStarred:o.isStarred??!1,labels:ge,postedComments:se.filter(W=>ne||d!==void 0&&W.userId===d).map(W=>({...W,userId:l(W.userId),isMine:d?W.userId===d:!1})),attachments:o.attachments}},Qe=async(i,o)=>{let d=(0,u.aliasedTable)(A,"draft_label"),h=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,h))).where((0,u.and)((0,u.isNull)(s.deletedAt),(0,u.or)((0,u.eq)(s.userId,o),(0,u.isNull)(s.userId),(0,u.isNull)(d.hubId)),$(i.visible))).orderBy((0,u.desc)(s.businessDate),(0,u.desc)(s.id))).map(B=>({...B,businessDate:ce(B.businessDate,"YYYY-MM-DD")}))},Xe=async(i,o,d)=>{let h=await qe(o);if(!h)return[];if(Ce(i.visible))return[];let D=(0,u.aliasedTable)(A,"draft_label"),B=await _e();return(await t.select({reportHubId:s.id,businessDate:s.businessDate,sourceType:s.sourceType}).top(d).from(s).leftJoin(D,(0,u.and)((0,u.eq)(D.hubId,s.id),(0,u.inArray)(D.labelId,B))).where((0,u.and)((0,u.isNull)(s.deletedAt),(0,u.or)((0,u.eq)(s.userId,h),(0,u.isNull)(s.userId),(0,u.isNull)(D.hubId)),$(i.visible))).orderBy((0,u.desc)(s.businessDate),(0,u.desc)(s.id))).map(N=>({...N,businessDate:ce(N.businessDate,"YYYY-MM-DD")}))},on=async(i,o)=>{let d=await ie(t.select({hub:xe(s),internal:xe(g),creatorName:n.displayName,...de()}).from(s)).leftJoin(g,(0,u.eq)(s.id,g.hubId)).leftJoin(n,(0,u.eq)(s.userId,n.id)).where((0,u.and)((0,u.eq)(s.businessDate,u.sql`${o}`),(0,u.isNull)(s.deletedAt),$(i.visible))).orderBy((0,u.desc)(s.id)),h=await tt(d.map(D=>D.hub.id));return d.map(D=>ve(i,{...D,attachments:h.get(D.hub.id)??[]}))},sn=i=>`${I}${i}`,Ze=new Map,qe=async i=>{if(!e.disableUserIdCache&&Ze.has(i))return Ze.get(i)??null;let o=await a(i);return o!==null&&!e.disableUserIdCache&&Ze.set(i,o),o},ln=async(i,o,{forceRefresh:d=!1,snapshot:h=!1,ttlMsOverride:D,onFetchStart:B}={})=>{let w=await qe(o);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 Zt(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},un=(i,o,{forceRefresh:d=!1,snapshot:h=!1,ttlMsOverride:D}={})=>{let B=ue(o);return B?Ce(i.visible)?Promise.resolve([]):c.getOrFetch({cacheKey:`${sn(B)}:st:${Je(i)}`,fetcher:()=>on(i,B),forceRefresh:d,snapshot:h,ttlMsOverride:D??P}):Promise.resolve([])},Me=null,et=async()=>(Me!==null||(Me=(await t.select({id:_.id}).from(_).where((0,u.inArray)(_.name,H)).orderBy(_.id)).map(o=>o.id)),Me),_e=async()=>{let i=await et();return i.length>0?i:[-1]},bt=async()=>{let i=await et();if(i.length===0)return null;let[o]=await t.select({id:_.id}).top(1).from(_).where((0,u.eq)(_.name,Q));return o?.id??i[0]},cn=(i,o)=>o!=null?"absent":i!=null?"present":"unknown",tt=async i=>{let o=new Map,d=r.attachment,h=L.idCodec;if(i.length===0||!d||!h)return o;let D=L.thumbnailRenderer!==void 0&&L.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=cn(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},L.maxBytes)},re=o.get(Number(w.hubId));re?re.push(G):o.set(Number(w.hubId),[G])}return o},dn=async(i,o,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(s,(0,u.eq)(s.id,h.hubId)).leftJoin(B,(0,u.and)((0,u.eq)(B.hubId,s.id),(0,u.inArray)(B.labelId,D))).where((0,u.and)((0,u.eq)(h.id,o),(0,u.isNull)(s.deletedAt),(0,u.or)((0,u.eq)(s.userId,d),(0,u.isNull)(B.hubId)),$(i.visible))))[0]??null},mn=async i=>{let o=r.attachment;if(!o)return;let d=new Date;try{await t.update(o).set({objectCheckedAt:d,objectMissingAt:d,updatedAt:d}).where((0,u.eq)(o.id,i))}catch(h){S.error("markAttachmentMissing failed",h)}},pn=async i=>{let o=r.attachment;if(!o)return;let d=new Date;try{await t.update(o).set({objectCheckedAt:d,objectMissingAt:null,updatedAt:d}).where((0,u.eq)(o.id,i))}catch(h){S.error("markAttachmentPresent failed",h)}},yn=async(i,o,d,{forceRefresh:h=!1,snapshot:D=!1,ttlMsOverride:B}={})=>{let w=await qe(d);if(!w)return[];let N=ue(o);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(s),internal:xe(g),isRead:E.isRead,isStarred:E.isStarred,creatorName:n.displayName,...de()}).from(s)).leftJoin(g,(0,u.eq)(s.id,g.hubId)).leftJoin(E,(0,u.and)((0,u.eq)(s.id,E.hubId),(0,u.eq)(E.userId,w))).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,w),(0,u.isNull)(G.hubId)),$(i.visible))).orderBy((0,u.desc)(s.id));if(re.length===0)return[];let oe=re.map(ne=>ne.hub.id),Le=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)),Pe=await tt(oe),ge=new Map,se=new Map;for(let ne of Le){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:Pe.get(le)??[],labels:ge.get(le)||[],postedCommentRows:se.get(le)||[]},w)})},forceRefresh:h,snapshot:D,ttlMsOverride:B??P,epochKey:`${b}${N}`})},Ye=async(i,o,d,{forceRefresh:h=!1,snapshot:D=!1,ttlMsOverride:B}={})=>{if(Ce(i.visible))return null;let w=K(o,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(s),internal:xe(g),isRead:E.isRead,isStarred:E.isStarred,creatorName:n.displayName,...de()}).from(s)).leftJoin(g,(0,u.eq)(s.id,g.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,U))).leftJoin(n,(0,u.eq)(s.userId,n.id)).where((0,u.and)((0,u.eq)(s.id,o),(0,u.isNull)(s.deletedAt),(0,u.or)((0,u.eq)(s.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)),Le=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]),Pe=oe.map(se=>({id:se.id,name:se.name,color:se.color})),ge=Le.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:Pe,postedCommentRows:ge},d)]},forceRefresh:h,snapshot:D,ttlMsOverride:B??P,epochKey:`${x}${o}`}))[0]??null},hn=async(i,o,d,h={})=>{let D=await qe(d);return D?Ye(i,o,D,h):null},fn=async(i,o)=>{let d=await _e(),h=(0,u.aliasedTable)(A,"draft_label"),[D]=await t.select({sourceType:s.sourceType,deletedAt:s.deletedAt}).top(1).from(s).leftJoin(h,(0,u.and)((0,u.eq)(h.hubId,s.id),(0,u.inArray)(h.labelId,d))).where((0,u.and)((0,u.eq)(s.id,i),(0,u.or)((0,u.eq)(s.userId,o),(0,u.isNull)(h.hubId))));return D??null},gt=async(i,o,d)=>{let h=await fn(o,d);if(!h||h.deletedAt||!be(i.visible,h.sourceType))throw new Error("Not Found")},bn=async(i,o,d,h,D,B)=>{await gt(i,d,o);let w=await t.select().top(1).from(E).where((0,u.and)((0,u.eq)(E.hubId,d),(0,u.eq)(E.userId,o))),N;if(w.length>0?w[0].isStarred!==D?N=(await t.update(E).set({isStarred:D,updatedAt:new Date,updatedBy:String(o)}).output().where((0,u.and)((0,u.eq)(E.hubId,d),(0,u.eq)(E.userId,o))))[0]:N=w[0]:N=(await t.insert(E).output().values({hubId:d,userId:o,isStarred:D,isRead:!1,createdAt:new Date,createdBy:String(o),updatedAt:new Date,updatedBy:String(o)}))[0],h){let U=ue(h);U&&(c.invalidatePrefix(ee(U,o)),await v(`${b}${U}`))}return c.invalidate(`daily-report:detail:${d}`),c.invalidatePrefix(X(d,o)),await v(`${x}${d}`),await k(it.parse({type:"status-update",reportHubId:d,recipientRawUserId:o,statusType:"star",value:D,clientTempId:B}),"setStarStatus"),N},gn=async(i,o,d,h,D,B)=>{await gt(i,d,o);let w=await t.select().top(1).from(E).where((0,u.and)((0,u.eq)(E.hubId,d),(0,u.eq)(E.userId,o))),N;if(w.length>0?w[0].isRead!==D?N=(await t.update(E).set({isRead:D,updatedAt:new Date,updatedBy:String(o)}).output().where((0,u.and)((0,u.eq)(E.hubId,d),(0,u.eq)(E.userId,o))))[0]:N=w[0]:N=(await t.insert(E).output().values({hubId:d,userId:o,isRead:D,isStarred:!1,createdAt:new Date,createdBy:String(o),updatedAt:new Date,updatedBy:String(o)}))[0],h){let U=ue(h);U&&(c.invalidatePrefix(ee(U,o)),await v(`${b}${U}`))}return c.invalidate(`daily-report:detail:${d}`),c.invalidatePrefix(X(d,o)),await v(`${x}${d}`),await k(it.parse({type:"status-update",reportHubId:d,recipientRawUserId:o,statusType:"read",value:D,clientTempId:B}),"setReadStatus"),N},jt=async(i,o)=>{if(o===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?o:void 0},Rn=async(i,o,d,h,D,B)=>{let[w]=await t.select({sourceType:s.sourceType,deletedAt:s.deletedAt,userId:s.userId}).top(1).from(s).where((0,u.eq)(s.id,d));if(!w||w.deletedAt)throw new Error("Not Found");if(await gt(i,d,o),!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 jt(d,w.userId),[U]=await t.insert(m).output().values({hubId:d,userId:o,body:h,createdAt:new Date,createdBy:String(o),updatedAt:new Date,updatedBy:String(o)}),[Z]=await t.select({displayName:n.displayName}).top(1).from(n).where((0,u.eq)(n.id,o)),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:l(U.userId),userName:G,content:U.body,createdAt:ce(U.createdAt,"YYYY-MM-DD HH:mm:ss")??"",isMine:!0};return await k(Et.parse({type:"comment-add",reportHubId:d,comment:re,clientTempId:B,recipientRawUserId:N,sourceType:w.sourceType}),"addComment"),re},Sn=async(i,o)=>await i.select().top(1).from(m).where((0,u.eq)(m.id,o)),Tn=async(i,o,d,h,D,B)=>{let w=await Sn(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:s.userId,sourceType:s.sourceType}).top(1).from(s).where((0,u.eq)(s.id,w[0].hubId));if(!(N&&be(i.visible,N.sourceType)))throw new Error("Not Found");if(w[0].userId!==o)throw new Error("Unauthorized");let U=await jt(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(Ct.parse({type:"comment-delete",reportHubId:d,commentId:h,clientTempId:B,recipientRawUserId:U,sourceType:N?.sourceType}),"deleteComment")},An=async(i,o,d)=>{S.info("createDailyReport called",{userId:i,businessDate:o});let[h]=await t.select({displayName:n.displayName}).from(n).where((0,u.eq)(n.id,i)),D=h?.displayName??l(i);try{let B=await V(async U=>{S.info("Starting transaction");let Z=`internal-temp-${Date.now()}-${Math.random()}`,[G]=await U.insert(s).output().values({sourceType:"Internal",sourceId:Z,businessDate:new Date(o),userId:i,title:"(\u7121\u984C)",createdAt:new Date,createdBy:String(i),updatedAt:new Date,updatedBy:String(i)});await U.update(s).set({sourceId:String(G.id)}).where((0,u.eq)(s.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 bt();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:o,createdAt:ce(G.createdAt,"YYYY-MM-DD HH:mm:ss"),author:D,userId:l(i),sourceType:"Internal",employeeName:D,updatedBy:l(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(o);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(xt.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,o)=>await i.select().top(1).from(s).where((0,u.eq)(s.id,o)),Rt=async(i,o,d)=>{await i.update(s).set(d).where((0,u.eq)(s.id,o))},Gt=async(i,o,d)=>{await i.update(g).set(d).where((0,u.eq)(g.hubId,o))},Wt=async(i,o,d)=>{await i.delete(A).where((0,u.and)((0,u.eq)(A.hubId,o),(0,u.eq)(A.labelId,d)))};return{streamKey:O,streamMaxLen:Y,attachmentDelivery:L,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,o)=>{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(o)){let h=ue(d);h&&await v(`${b}${h}`)}},getUserIdByExternalId:qe,getDailyReportIdsByExternalId:ln,getDailyReportIdsFirstPageByExternalId:Xe,readSseStreamAnchor:C,getDailyReportsByBusinessDate:un,getDailyReportsByBusinessDateByExternalId:yn,getDailyReportDetailById:Ye,getDailyReportDetailByIdByExternalId:hn,getDraftLabelId:bt,getAttachmentsByHubIds:tt,getAttachmentForUser:dn,markAttachmentMissing:mn,markAttachmentPresent:pn,setStarStatus:bn,setReadStatus:gn,addComment:Rn,deleteComment:Tn,createDailyReport:An,updateDailyReport:async(i,o,d,h)=>{let D=await rt(t,i);if(!D.length||D[0].deletedAt)throw new Error("Not Found");if(D[0].userId!==o)throw new Error("Unauthorized");await V(async N=>{d.title!==void 0&&await Rt(N,i,{title:d.title,updatedAt:new Date,updatedBy:String(o)}),d.content!==void 0&&await Gt(N,i,{body:d.content,updatedAt:new Date,updatedBy:String(o)})}),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,o,{forceRefresh:!0});if(w){let N=await et(),U=w.labels.some(Z=>N.includes(Z.id));await k(vt.parse({type:"report-update",reportHubId:w.reportHubId,report:w,clientTempId:h,recipientRawUserId:U?o:void 0}),"updateDailyReport")}},publishDailyReport:async(i,o,d)=>{let h=await rt(t,i);if(!h.length)throw new Error("Not Found");if(h[0].userId!==o)throw new Error("Unauthorized");let D=await bt();if(!D)return null;if(await Wt(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,o));let w=await Ye(ye.unrestricted("post-write self read: the writer always sees the row they just wrote"),i,o,{forceRefresh:!0});return w&&await k(Mt.parse({type:"report-publish",reportHubId:w.reportHubId,report:w,clientTempId:d}),"publishDailyReport"),w??null},deleteDailyReport:async(i,o,d)=>{let h=await rt(t,i);if(!h.length||h[0].deletedAt)throw new Error("Not Found");if(h[0].userId!==o)throw new Error("Unauthorized");if(await Rt(t,i,{deletedAt:new Date,deletedBy:String(o),updatedAt:new Date,updatedBy:String(o)}),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:Rt,updateDailyReportInternal:Gt,deleteDailyReportLabel:Wt}}var $a=me(1,"[DailyReportExternalSource]"),Jr=(e,t,r,n=$a)=>{if(!e)return[];try{let a=JSON.parse(e);return Array.isArray(a)?a.map(r).filter(l=>l!==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 Kr(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)]),l=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]})]),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]})]),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:l,comment:p,attachment:g,label:c,hubLabel:T,userStatus:s}}var Ha=5e7,Vt=2e8,Fa=1,zt=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})})}),qa=new Map([["uchar",1],["char",1],["ushort",2],["short",2],["uint",4],["int",4],["float",4],["complex",8],["double",8]]),Qr=75,Xr=4,Zr="#ffffff",Ya=1,Va={png:"VipsForeignLoadPngBuffer",jpeg:"VipsForeignLoadJpegBuffer",gif:"VipsForeignLoadNsgifBuffer",webp:"VipsForeignLoadWebpBuffer"},za=[/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/],Yt=Object.freeze({ok:!1,reason:"failed"}),en=Object.freeze({ok:!1,reason:"unsupported"}),tn=(e,t)=>{switch(t){case"jpeg":{let r=Bt(e);return r===null?null:{layout:r.multiScan?"jpeg-multi-scan":"jpeg-single-scan",coefficientBytes:Tr(r)}}case"png":{let r=Dr(e);return r===null?null:{layout:r?"png-interlaced":"png",coefficientBytes:0}}case"gif":return{layout:"gif",coefficientBytes:0};case"webp":{let r=wr(e);return r===null?null:{layout:`webp-${r}`,coefficientBytes:0}}}},rn=(e,t)=>{let r=qa.get(t.depth);if(r===void 0)return null;let n=t.channels*r,a=zt,l=a.wholeImageBuffer[e.layout];return(l.kind==="none"?0:l.kind==="decoded-raster"?t.width*t.height*n:l.kind==="jpeg-coefficients"?e.coefficientBytes:t.width*t.height*l.bytesPerPixel)+a.pipelineRows*t.width*n+a.fixedBytes},nn=(e,t,r)=>{let n=tn(e,t);return n===null?null:rn(n,r)},ja=e=>e!==null&&e<=Vt,Ga=e=>{let t=e instanceof Error?e.message:"";return za.some(r=>r.test(t))?"failed":"unsupported"},an=e=>{e.cache(!1),e.concurrency(Fa),e.block({operation:["VipsForeignLoad"]}),e.unblock({operation:Object.values(Va)});let t=async(n,a,l,p,c)=>{let T=tn(n,a);if(T===null)return en;try{let s=e(n,{limitInputPixels:Ha,animated:!1});if(!ja(rn(T,await s.metadata())))return en;if(c.aborted)return Yt;let g=await s.rotate().resize({width:l,height:p,fit:"inside",withoutEnlargement:!0}).flatten({background:Zr}).webp({quality:Qr,effort:Xr}).toBuffer();return{ok:!0,bytes:new Uint8Array(g),contentType:"image/webp"}}catch(s){return{ok:!1,reason:Ga(s)}}},r=async(n,{format:a,maxWidth:l,maxHeight:p,signal:c})=>{if(c.aborted)return Yt;let T=await t(n,a,l,p,c);return c.aborted?Yt:T};return{id:`sharp-${e.versions.sharp}/vips-${e.versions.vips}/webp-q${Qr}-e${Xr}/flatten-${Zr}/v${Ya}`,render:r}};function Wa(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=ft({...e,cache:r,epochs:t}),a=new $e({redis:e.redis,streamKey:n.streamKey,cache:r,logger:e.logger}),l=ht({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)])],...l}}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) が別の待機者を消さないよう残す */