@aiquants/daily-report 0.29.0 → 0.30.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.
@@ -1,5 +1,5 @@
1
1
  import { z } from "zod";
2
- import { e as DailyReportExternalComment, i as DailyReportPostedComment } from "./ids-stream-CWuIDrIO.js";
2
+ import { d as DailyReportExternalComment, g as DailyReportPostedComment, D as DailyReportItem } from "./types-DkERw8NE.js";
3
3
  declare const DAILY_REPORT_SSE_TERMINAL_EVENTS: readonly [
4
4
  "auth-required",
5
5
  "forbidden",
@@ -2491,4 +2491,24 @@ type UIComment = {
2491
2491
  isLegacy: boolean;
2492
2492
  };
2493
2493
  declare const mergeComments: (legacyComments: DailyReportExternalComment[], modernComments: DailyReportPostedComment[], currentUserId: string | null | undefined, unknownAuthorName: string) => UIComment[];
2494
- export { type DailyReportSseTerminalEvent as D, type UIComment as U, type DailyReportSseMessage as a, DAILY_REPORT_SSE_CURSOR_PARAM as b, DAILY_REPORT_SSE_HEARTBEAT_MS as c, DAILY_REPORT_SSE_TERMINAL_EVENTS as d, commentAddMessageSchema as e, commentDeleteMessageSchema as f, connectedMessageSchema as g, dailyReportDetailSchema as h, dailyReportExternalCommentSchema as i, dailyReportInterviewerSchema as j, dailyReportLabelDefSchema as k, dailyReportPostedCommentSchema as l, dailyReportSseMessageSchema as m, isDailyReportSseStreamId as n, mergeComments as o, reportDeleteMessageSchema as p, reportPublishMessageSchema as q, reportCreateMessageSchema as r, reportUpdateMessageSchema as s, statusUpdateMessageSchema as t };
2494
+ type DailyReportIdsStreamCursor = {
2495
+ businessDate: string | null;
2496
+ reportHubId: number;
2497
+ };
2498
+ type DailyReportIdsStreamChunkLine = {
2499
+ kind: "chunk";
2500
+ items: DailyReportItem[];
2501
+ nextCursor: DailyReportIdsStreamCursor | null;
2502
+ isLast: boolean;
2503
+ total?: number;
2504
+ provisional?: boolean;
2505
+ snapshot?: string;
2506
+ restarted?: boolean;
2507
+ streamAnchor?: string | null;
2508
+ };
2509
+ type DailyReportSseStreamAnchor = {
2510
+ readonly lastEventId: string | null;
2511
+ readonly revision: number;
2512
+ };
2513
+ declare const isIdsStreamChunkLine: (line: unknown) => line is DailyReportIdsStreamChunkLine;
2514
+ export { type DailyReportSseTerminalEvent as D, type UIComment as U, type DailyReportSseMessage as a, type DailyReportSseStreamAnchor as b, DAILY_REPORT_SSE_CURSOR_PARAM as c, DAILY_REPORT_SSE_HEARTBEAT_MS as d, DAILY_REPORT_SSE_TERMINAL_EVENTS as e, type DailyReportIdsStreamChunkLine as f, commentAddMessageSchema as g, commentDeleteMessageSchema as h, connectedMessageSchema as i, dailyReportDetailSchema as j, dailyReportExternalCommentSchema as k, dailyReportInterviewerSchema as l, dailyReportLabelDefSchema as m, dailyReportPostedCommentSchema as n, dailyReportSseMessageSchema as o, isDailyReportSseStreamId as p, isIdsStreamChunkLine as q, mergeComments as r, reportCreateMessageSchema as s, reportDeleteMessageSchema as t, reportPublishMessageSchema as u, reportUpdateMessageSchema as v, statusUpdateMessageSchema as w };
@@ -1,5 +1,5 @@
1
1
  import { z } from "zod";
2
- import { e as DailyReportExternalComment, i as DailyReportPostedComment } from "./ids-stream-CWuIDrIO.mjs";
2
+ import { d as DailyReportExternalComment, g as DailyReportPostedComment, D as DailyReportItem } from "./types-DkERw8NE.mjs";
3
3
  declare const DAILY_REPORT_SSE_TERMINAL_EVENTS: readonly [
4
4
  "auth-required",
5
5
  "forbidden",
@@ -2491,4 +2491,24 @@ type UIComment = {
2491
2491
  isLegacy: boolean;
2492
2492
  };
2493
2493
  declare const mergeComments: (legacyComments: DailyReportExternalComment[], modernComments: DailyReportPostedComment[], currentUserId: string | null | undefined, unknownAuthorName: string) => UIComment[];
2494
- export { type DailyReportSseTerminalEvent as D, type UIComment as U, type DailyReportSseMessage as a, DAILY_REPORT_SSE_CURSOR_PARAM as b, DAILY_REPORT_SSE_HEARTBEAT_MS as c, DAILY_REPORT_SSE_TERMINAL_EVENTS as d, commentAddMessageSchema as e, commentDeleteMessageSchema as f, connectedMessageSchema as g, dailyReportDetailSchema as h, dailyReportExternalCommentSchema as i, dailyReportInterviewerSchema as j, dailyReportLabelDefSchema as k, dailyReportPostedCommentSchema as l, dailyReportSseMessageSchema as m, isDailyReportSseStreamId as n, mergeComments as o, reportDeleteMessageSchema as p, reportPublishMessageSchema as q, reportCreateMessageSchema as r, reportUpdateMessageSchema as s, statusUpdateMessageSchema as t };
2494
+ type DailyReportIdsStreamCursor = {
2495
+ businessDate: string | null;
2496
+ reportHubId: number;
2497
+ };
2498
+ type DailyReportIdsStreamChunkLine = {
2499
+ kind: "chunk";
2500
+ items: DailyReportItem[];
2501
+ nextCursor: DailyReportIdsStreamCursor | null;
2502
+ isLast: boolean;
2503
+ total?: number;
2504
+ provisional?: boolean;
2505
+ snapshot?: string;
2506
+ restarted?: boolean;
2507
+ streamAnchor?: string | null;
2508
+ };
2509
+ type DailyReportSseStreamAnchor = {
2510
+ readonly lastEventId: string | null;
2511
+ readonly revision: number;
2512
+ };
2513
+ declare const isIdsStreamChunkLine: (line: unknown) => line is DailyReportIdsStreamChunkLine;
2514
+ export { type DailyReportSseTerminalEvent as D, type UIComment as U, type DailyReportSseMessage as a, type DailyReportSseStreamAnchor as b, DAILY_REPORT_SSE_CURSOR_PARAM as c, DAILY_REPORT_SSE_HEARTBEAT_MS as d, DAILY_REPORT_SSE_TERMINAL_EVENTS as e, type DailyReportIdsStreamChunkLine as f, commentAddMessageSchema as g, commentDeleteMessageSchema as h, connectedMessageSchema as i, dailyReportDetailSchema as j, dailyReportExternalCommentSchema as k, dailyReportInterviewerSchema as l, dailyReportLabelDefSchema as m, dailyReportPostedCommentSchema as n, dailyReportSseMessageSchema as o, isDailyReportSseStreamId as p, isIdsStreamChunkLine as q, mergeComments as r, reportCreateMessageSchema as s, reportDeleteMessageSchema as t, reportPublishMessageSchema as u, reportUpdateMessageSchema as v, statusUpdateMessageSchema as w };
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- export { b as DAILY_REPORT_SSE_CURSOR_PARAM, c as DAILY_REPORT_SSE_HEARTBEAT_MS, d as DAILY_REPORT_SSE_TERMINAL_EVENTS, a as DailyReportSseMessage, e as commentAddMessageSchema, f as commentDeleteMessageSchema, g as connectedMessageSchema, h as dailyReportDetailSchema, i as dailyReportExternalCommentSchema, j as dailyReportInterviewerSchema, k as dailyReportLabelDefSchema, l as dailyReportPostedCommentSchema, m as dailyReportSseMessageSchema, n as isDailyReportSseStreamId, o as mergeComments, r as reportCreateMessageSchema, p as reportDeleteMessageSchema, q as reportPublishMessageSchema, s as reportUpdateMessageSchema, t as statusUpdateMessageSchema } from "./comment-adapter-lV2ZB_vH.mjs";
2
- export { d as DailyReportAttachmentSummary, b as DailyReportDetail, e as DailyReportExternalComment, f as DailyReportIdsStreamChunkLine, g as DailyReportInterviewer, D as DailyReportItem, h as DailyReportLabelDef, i as DailyReportPostedComment, c as DailyReportSseStreamAnchor, a as DailyReportUser, j as isIdsStreamChunkLine } from "./ids-stream-CWuIDrIO.mjs";
1
+ export { c as DAILY_REPORT_SSE_CURSOR_PARAM, d as DAILY_REPORT_SSE_HEARTBEAT_MS, e as DAILY_REPORT_SSE_TERMINAL_EVENTS, f as DailyReportIdsStreamChunkLine, a as DailyReportSseMessage, b as DailyReportSseStreamAnchor, g as commentAddMessageSchema, h as commentDeleteMessageSchema, i as connectedMessageSchema, j as dailyReportDetailSchema, k as dailyReportExternalCommentSchema, l as dailyReportInterviewerSchema, m as dailyReportLabelDefSchema, n as dailyReportPostedCommentSchema, o as dailyReportSseMessageSchema, p as isDailyReportSseStreamId, q as isIdsStreamChunkLine, r as mergeComments, s as reportCreateMessageSchema, t as reportDeleteMessageSchema, u as reportPublishMessageSchema, v as reportUpdateMessageSchema, w as statusUpdateMessageSchema } from "./ids-stream-DvB2h1dj.mjs";
2
+ export { c as DailyReportAttachmentSummary, b as DailyReportDetail, d as DailyReportExternalComment, e as DailyReportInterviewer, D as DailyReportItem, f as DailyReportLabelDef, g as DailyReportPostedComment, a as DailyReportUser } from "./types-DkERw8NE.mjs";
3
3
  import "zod";
4
4
  type DailyReportAttachmentThumbnailBox = {
5
5
  readonly maxWidth: number;
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- export { b as DAILY_REPORT_SSE_CURSOR_PARAM, c as DAILY_REPORT_SSE_HEARTBEAT_MS, d as DAILY_REPORT_SSE_TERMINAL_EVENTS, a as DailyReportSseMessage, e as commentAddMessageSchema, f as commentDeleteMessageSchema, g as connectedMessageSchema, h as dailyReportDetailSchema, i as dailyReportExternalCommentSchema, j as dailyReportInterviewerSchema, k as dailyReportLabelDefSchema, l as dailyReportPostedCommentSchema, m as dailyReportSseMessageSchema, n as isDailyReportSseStreamId, o as mergeComments, r as reportCreateMessageSchema, p as reportDeleteMessageSchema, q as reportPublishMessageSchema, s as reportUpdateMessageSchema, t as statusUpdateMessageSchema } from "./comment-adapter-5bAtR4qb.js";
2
- export { d as DailyReportAttachmentSummary, b as DailyReportDetail, e as DailyReportExternalComment, f as DailyReportIdsStreamChunkLine, g as DailyReportInterviewer, D as DailyReportItem, h as DailyReportLabelDef, i as DailyReportPostedComment, c as DailyReportSseStreamAnchor, a as DailyReportUser, j as isIdsStreamChunkLine } from "./ids-stream-CWuIDrIO.js";
1
+ export { c as DAILY_REPORT_SSE_CURSOR_PARAM, d as DAILY_REPORT_SSE_HEARTBEAT_MS, e as DAILY_REPORT_SSE_TERMINAL_EVENTS, f as DailyReportIdsStreamChunkLine, a as DailyReportSseMessage, b as DailyReportSseStreamAnchor, g as commentAddMessageSchema, h as commentDeleteMessageSchema, i as connectedMessageSchema, j as dailyReportDetailSchema, k as dailyReportExternalCommentSchema, l as dailyReportInterviewerSchema, m as dailyReportLabelDefSchema, n as dailyReportPostedCommentSchema, o as dailyReportSseMessageSchema, p as isDailyReportSseStreamId, q as isIdsStreamChunkLine, r as mergeComments, s as reportCreateMessageSchema, t as reportDeleteMessageSchema, u as reportPublishMessageSchema, v as reportUpdateMessageSchema, w as statusUpdateMessageSchema } from "./ids-stream-BR5RSj5u.js";
2
+ export { c as DailyReportAttachmentSummary, b as DailyReportDetail, d as DailyReportExternalComment, e as DailyReportInterviewer, D as DailyReportItem, f as DailyReportLabelDef, g as DailyReportPostedComment, a as DailyReportUser } from "./types-DkERw8NE.js";
3
3
  import "zod";
4
4
  type DailyReportAttachmentThumbnailBox = {
5
5
  readonly maxWidth: number;
package/dist/server.d.mts CHANGED
@@ -1,14 +1,7 @@
1
- import { g as DailyReportInterviewer, e as DailyReportExternalComment, D as DailyReportItem, b as DailyReportDetail, d as DailyReportAttachmentSummary, i as DailyReportPostedComment } from "./ids-stream-CWuIDrIO.mjs";
2
- export { k as DAILY_REPORT_IDS_STREAM_ENDPOINT } from "./ids-stream-CWuIDrIO.mjs";
3
- import { TransactionRetryOptions } from "@aiquants/mssql";
4
1
  import * as drizzle_orm_mssql_core from "drizzle-orm/mssql-core";
5
2
  import { AnyMsSqlColumn } from "drizzle-orm/mssql-core";
6
- interface DailyReportLogger {
7
- debug(message?: unknown, ...optionalParams: unknown[]): void;
8
- info(message?: unknown, ...optionalParams: unknown[]): void;
9
- warn(message?: unknown, ...optionalParams: unknown[]): void;
10
- error(message?: unknown, ...optionalParams: unknown[]): void;
11
- }
3
+ import { e as DailyReportInterviewer, d as DailyReportExternalComment, D as DailyReportItem, b as DailyReportDetail, c as DailyReportAttachmentSummary, g as DailyReportPostedComment } from "./types-DkERw8NE.mjs";
4
+ import { TransactionRetryOptions } from "@aiquants/mssql";
12
5
  type RedisStreamMessage = {
13
6
  id: string;
14
7
  message: Record<string, string>;
@@ -161,6 +154,12 @@ declare class SqlResultCache {
161
154
  invalidatePrefix: (prefix: string) => void;
162
155
  private cleanExpired;
163
156
  }
157
+ interface DailyReportLogger {
158
+ debug(message?: unknown, ...optionalParams: unknown[]): void;
159
+ info(message?: unknown, ...optionalParams: unknown[]): void;
160
+ warn(message?: unknown, ...optionalParams: unknown[]): void;
161
+ error(message?: unknown, ...optionalParams: unknown[]): void;
162
+ }
164
163
  type ExternalReportFields = {
165
164
  content?: string | null;
166
165
  employeeName?: string | null;
@@ -179,6 +178,10 @@ type DailyReportExternalSource = {
179
178
  mapRow: (row: Record<string, unknown>) => ExternalReportFields;
180
179
  };
181
180
  declare const transformJsonArray: <TRaw, TResult>(payload: string | null, label: string, mapper: (raw: TRaw) => TResult | null, logger?: DailyReportLogger) => TResult[];
181
+ type ResourceRouteArgs = {
182
+ request: Request;
183
+ params: Record<string, string | undefined>;
184
+ };
182
185
  type DailyReportUserTable = {
183
186
  id: AnyMsSqlColumn;
184
187
  displayName: AnyMsSqlColumn;
@@ -1584,38 +1587,6 @@ declare function createDailyReportService(config: DailyReportServiceConfig): {
1584
1587
  updateDailyReportInternal: (tx: DailyReportDb, hubId: number, data: Partial<DailyReportInternalRow>) => Promise<void>;
1585
1588
  deleteDailyReportLabel: (tx: DailyReportDb, hubId: number, labelId: number) => Promise<void>;
1586
1589
  };
1587
- declare const isStreamIdLte: (a: string, b: string) => boolean;
1588
- type DailyReportSseReaderConfig = {
1589
- redis?: DailyReportRedisProvider;
1590
- streamKey: string;
1591
- cache: SqlResultCache;
1592
- logger?: DailyReportLogger;
1593
- };
1594
- declare class DailyReportSseReader implements DailyReportSseReaderPort {
1595
- private readonly config;
1596
- private _source;
1597
- private _lastId;
1598
- private _positioning;
1599
- private _generation;
1600
- private readonly _logger;
1601
- constructor(config: DailyReportSseReaderConfig);
1602
- ready(): Promise<void>;
1603
- subscribe(onEntry: (entry: StreamEntry) => void, onError: (err: Error) => void): () => void;
1604
- destroy(): Promise<void>;
1605
- private _position;
1606
- private _readTail;
1607
- private _createSource;
1608
- private _start;
1609
- private _readLoop;
1610
- private _invalidateCaches;
1611
- }
1612
- declare const generateETag: (data: unknown) => string;
1613
- type LoaderArgs = {
1614
- request: Request;
1615
- params: Record<string, string | undefined>;
1616
- };
1617
- declare const DAILY_REPORT_SSE_VISIBILITY_REFRESH_MS = 60000;
1618
- declare const DAILY_REPORT_SSE_CATCH_UP_BATCH = 1000;
1619
1590
  type DailyReportHandlersConfig = {
1620
1591
  authenticate: DailyReportAuthenticate;
1621
1592
  resolveVisibleSourceTypes?: DailyReportResolveVisibleSourceTypes;
@@ -1633,9 +1604,9 @@ type DailyReportHandlersConfig = {
1633
1604
  enableDevCacheClear?: boolean;
1634
1605
  logger?: DailyReportLogger;
1635
1606
  };
1636
- declare function createDailyReportHandlers(config: DailyReportHandlersConfig): {
1607
+ type DailyReportHandlers = {
1637
1608
  index: {
1638
- loader: ({ request }: LoaderArgs) => Promise<{
1609
+ loader: (args: ResourceRouteArgs) => Promise<{
1639
1610
  data: {
1640
1611
  user: {
1641
1612
  id: string;
@@ -1646,16 +1617,43 @@ declare function createDailyReportHandlers(config: DailyReportHandlersConfig): {
1646
1617
  }>;
1647
1618
  };
1648
1619
  api: {
1649
- loader: (args: LoaderArgs) => Promise<Response>;
1650
- action: (args: LoaderArgs) => Promise<Response>;
1620
+ loader: (args: ResourceRouteArgs) => Promise<Response>;
1621
+ action: (args: ResourceRouteArgs) => Promise<Response>;
1651
1622
  };
1652
1623
  sse: {
1653
- loader: (args: LoaderArgs) => Promise<Response>;
1624
+ loader: (args: ResourceRouteArgs) => Promise<Response>;
1654
1625
  };
1655
1626
  attachment: {
1656
- loader: (args: LoaderArgs) => Promise<Response>;
1627
+ loader: (args: ResourceRouteArgs) => Promise<Response>;
1657
1628
  };
1658
1629
  };
1630
+ declare function createDailyReportHandlers(config: DailyReportHandlersConfig): DailyReportHandlers;
1631
+ declare const isStreamIdLte: (a: string, b: string) => boolean;
1632
+ type DailyReportSseReaderConfig = {
1633
+ redis?: DailyReportRedisProvider;
1634
+ streamKey: string;
1635
+ cache: SqlResultCache;
1636
+ logger?: DailyReportLogger;
1637
+ };
1638
+ declare class DailyReportSseReader implements DailyReportSseReaderPort {
1639
+ private readonly config;
1640
+ private _source;
1641
+ private _lastId;
1642
+ private _positioning;
1643
+ private _generation;
1644
+ private readonly _logger;
1645
+ constructor(config: DailyReportSseReaderConfig);
1646
+ ready(): Promise<void>;
1647
+ subscribe(onEntry: (entry: StreamEntry) => void, onError: (err: Error) => void): () => void;
1648
+ destroy(): Promise<void>;
1649
+ private _position;
1650
+ private _readTail;
1651
+ private _createSource;
1652
+ private _start;
1653
+ private _readLoop;
1654
+ private _invalidateCaches;
1655
+ }
1656
+ declare const generateETag: (data: unknown) => string;
1659
1657
  declare const jsonResponseWithETag: (request: Request, cookie: string | null, payload: Record<string, unknown>, status?: number, logger?: DailyReportLogger) => Response;
1660
1658
  type SharpHeaderLike = {
1661
1659
  width: number;
@@ -1749,6 +1747,8 @@ declare const DAILY_REPORT_SHARP_THUMBNAIL_DECODE_WORK_MODEL: Readonly<{
1749
1747
  }>;
1750
1748
  declare const predictSharpThumbnailWorkingSetBytes: (source: Uint8Array, format: DailyReportAttachmentThumbnailSourceFormat, header: SharpHeaderLike) => number | null;
1751
1749
  declare const createSharpThumbnailRenderer: (sharp: SharpLike) => DailyReportAttachmentThumbnailRenderer;
1750
+ declare const DAILY_REPORT_SSE_VISIBILITY_REFRESH_MS = 60000;
1751
+ declare const DAILY_REPORT_SSE_CATCH_UP_BATCH = 1000;
1752
1752
  type DailyReportServerConfig = Omit<DailyReportServiceConfig, "cache" | "epochs"> & {
1753
1753
  authenticate: DailyReportAuthenticate;
1754
1754
  resolveVisibleSourceTypes?: DailyReportResolveVisibleSourceTypes;
@@ -1762,92 +1762,13 @@ type DailyReportServerConfig = Omit<DailyReportServiceConfig, "cache" | "epochs"
1762
1762
  cacheDefaultTtlMs?: number;
1763
1763
  externalSources?: DailyReportExternalSource[];
1764
1764
  };
1765
- declare function createDailyReportServer(config: DailyReportServerConfig): {
1766
- index: {
1767
- loader: ({ request }: {
1768
- request: Request;
1769
- params: Record<string, string | undefined>;
1770
- }) => Promise<{
1771
- data: {
1772
- user: {
1773
- id: string;
1774
- };
1775
- userId: string | null;
1776
- };
1777
- headers: Headers;
1778
- }>;
1779
- };
1780
- api: {
1781
- loader: (args: {
1782
- request: Request;
1783
- params: Record<string, string | undefined>;
1784
- }) => Promise<Response>;
1785
- action: (args: {
1786
- request: Request;
1787
- params: Record<string, string | undefined>;
1788
- }) => Promise<Response>;
1789
- };
1790
- sse: {
1791
- loader: (args: {
1792
- request: Request;
1793
- params: Record<string, string | undefined>;
1794
- }) => Promise<Response>;
1795
- };
1796
- attachment: {
1797
- loader: (args: {
1798
- request: Request;
1799
- params: Record<string, string | undefined>;
1800
- }) => Promise<Response>;
1801
- };
1802
- service: {
1803
- streamKey: string;
1804
- streamMaxLen: number;
1805
- attachmentDelivery: DailyReportAttachmentDelivery;
1806
- clearCache: () => Promise<void>;
1807
- invalidateHubReadCaches: (hubIds: readonly number[], businessDates: readonly string[]) => Promise<void>;
1808
- getUserIdByExternalId: (externalId: string) => Promise<number | null>;
1809
- getDailyReportIdsByExternalId: (scope: DailyReportViewerScope, externalId: string, { forceRefresh, snapshot, ttlMsOverride, onFetchStart }?: SqlResultCacheQueryOptions & {
1810
- onFetchStart?: () => void;
1811
- }) => Promise<DailyReportIdsSource>;
1812
- getDailyReportIdsFirstPageByExternalId: (scope: DailyReportViewerScope, externalId: string, limit: number) => Promise<DailyReportItem[]>;
1813
- readSseStreamAnchor: () => Promise<string | null>;
1814
- getDailyReportsByBusinessDate: (scope: DailyReportViewerScope, businessDate: string, { forceRefresh, snapshot, ttlMsOverride }?: SqlResultCacheQueryOptions) => Promise<DailyReportDetail[]>;
1815
- getDailyReportsByBusinessDateByExternalId: (scope: DailyReportViewerScope, businessDate: string, externalId: string, { forceRefresh, snapshot, ttlMsOverride }?: SqlResultCacheQueryOptions) => Promise<DailyReportDetail[]>;
1816
- getDailyReportDetailById: (scope: DailyReportViewerScope, reportHubId: number, userId: number, { forceRefresh, snapshot, ttlMsOverride }?: SqlResultCacheQueryOptions) => Promise<DailyReportDetail | null>;
1817
- getDailyReportDetailByIdByExternalId: (scope: DailyReportViewerScope, reportHubId: number, externalId: string, options?: SqlResultCacheQueryOptions) => Promise<DailyReportDetail | null>;
1818
- getDraftLabelId: () => Promise<number | null>;
1819
- getAttachmentsByHubIds: (hubIds: number[]) => Promise<Map<number, DailyReportAttachmentSummary[]>>;
1820
- getAttachmentForUser: (scope: DailyReportViewerScope, attachmentId: number, userId: number) => Promise<{
1821
- fileName: string;
1822
- filePath: string;
1823
- fileType: string | null;
1824
- fileSize: number | null;
1825
- } | null>;
1826
- markAttachmentMissing: (attachmentId: number) => Promise<void>;
1827
- markAttachmentPresent: (attachmentId: number) => Promise<void>;
1828
- setStarStatus: (scope: DailyReportViewerScope, userId: number, reportHubId: number, businessDate: string | null, isStarred: boolean, clientTempId: string) => Promise<DailyReportUserStatusRow>;
1829
- setReadStatus: (scope: DailyReportViewerScope, userId: number, reportHubId: number, businessDate: string | null, isRead: boolean, clientTempId: string) => Promise<DailyReportUserStatusRow>;
1830
- addComment: (scope: DailyReportViewerScope, userId: number, reportHubId: number, content: string, businessDate: string | null, clientTempId: string) => Promise<DailyReportPostedComment>;
1831
- deleteComment: (scope: DailyReportViewerScope, userId: number, reportHubId: number, commentId: number, businessDate: string | null, clientTempId: string) => Promise<void>;
1832
- createDailyReport: (userId: number, businessDate: string, clientTempId: string) => Promise<DailyReportDetail>;
1833
- updateDailyReport: (reportHubId: number, userId: number, data: {
1834
- title?: string;
1835
- content?: string;
1836
- }, clientTempId: string) => Promise<void>;
1837
- publishDailyReport: (reportHubId: number, userId: number, clientTempId: string) => Promise<DailyReportDetail | null>;
1838
- deleteDailyReport: (reportHubId: number, userId: number, clientTempId: string) => Promise<void>;
1839
- findDailyReportHubById: (tx: DailyReportDb, reportHubId: number) => Promise<DailyReportHubRow[]>;
1840
- updateDailyReportHub: (tx: DailyReportDb, reportHubId: number, data: Partial<DailyReportHubRow>) => Promise<void>;
1841
- updateDailyReportInternal: (tx: DailyReportDb, hubId: number, data: Partial<DailyReportInternalRow>) => Promise<void>;
1842
- deleteDailyReportLabel: (tx: DailyReportDb, hubId: number, labelId: number) => Promise<void>;
1843
- };
1765
+ type DailyReportServer = DailyReportHandlers & {
1766
+ service: DailyReportService;
1844
1767
  cache: SqlResultCache;
1845
- epochs: {
1846
- getEpoch(epochKey: string): Promise<number | null>;
1847
- incrementEpoch(epochKey: string): Promise<void>;
1848
- };
1768
+ epochs: EpochStore;
1849
1769
  sseReader: DailyReportSseReader;
1850
1770
  streamKey: string;
1851
1771
  knownSourceTypes: readonly string[];
1852
1772
  };
1853
- export { DAILY_REPORT_ATTACHMENT_THUMBNAIL_MAX_OUTPUT_BYTES, DAILY_REPORT_ATTACHMENT_THUMBNAIL_OUTPUT_MEDIA_TYPES, DAILY_REPORT_SHARP_THUMBNAIL_DECODE_BUDGET_BYTES, DAILY_REPORT_SHARP_THUMBNAIL_DECODE_WORK_MODEL, DAILY_REPORT_SHARP_THUMBNAIL_WORKING_SET_MODEL, DAILY_REPORT_SSE_CATCH_UP_BATCH, DAILY_REPORT_SSE_VISIBILITY_REFRESH_MS, type DailyReportAttachmentDelivery, type DailyReportAttachmentError, type DailyReportAttachmentFailure, type DailyReportAttachmentThumbnail, type DailyReportAttachmentThumbnailOutputMediaType, type DailyReportAttachmentThumbnailRenderer, type DailyReportAttachmentThumbnailSourceFormat, type DailyReportAuthResult, type DailyReportAuthenticate, type DailyReportDb, type DailyReportIdCodec, type DailyReportReadAttachment, type DailyReportRedisProvider, type DailyReportServerConfig, type DailyReportServiceConfig, DailyReportSseReader, type DailyReportSseReaderPort, type DailyReportTables, DailyReportViewerScope, type ExternalReportFields, type SharpLike, SqlResultCache, type StreamEntry, createDailyReportHandlers, createDailyReportServer, createDailyReportService, createEpochStore, createSharpThumbnailRenderer, defineDailyReportSchema, generateETag, isStreamIdLte, jsonResponseWithETag, predictSharpThumbnailWorkingSetBytes, transformJsonArray };
1773
+ declare function createDailyReportServer(config: DailyReportServerConfig): DailyReportServer;
1774
+ export { DAILY_REPORT_ATTACHMENT_THUMBNAIL_MAX_OUTPUT_BYTES, DAILY_REPORT_ATTACHMENT_THUMBNAIL_OUTPUT_MEDIA_TYPES, DAILY_REPORT_SHARP_THUMBNAIL_DECODE_BUDGET_BYTES, DAILY_REPORT_SHARP_THUMBNAIL_DECODE_WORK_MODEL, DAILY_REPORT_SHARP_THUMBNAIL_WORKING_SET_MODEL, DAILY_REPORT_SSE_CATCH_UP_BATCH, DAILY_REPORT_SSE_VISIBILITY_REFRESH_MS, type DailyReportAttachmentDelivery, type DailyReportAttachmentError, type DailyReportAttachmentFailure, type DailyReportAttachmentThumbnail, type DailyReportAttachmentThumbnailOutputMediaType, type DailyReportAttachmentThumbnailRenderer, type DailyReportAttachmentThumbnailSourceFormat, type DailyReportAuthResult, type DailyReportAuthenticate, type DailyReportDb, type DailyReportHandlers, type DailyReportHandlersConfig, type DailyReportIdCodec, type DailyReportReadAttachment, type DailyReportRedisProvider, type DailyReportServer, type DailyReportServerConfig, type DailyReportServiceConfig, DailyReportSseReader, type DailyReportSseReaderPort, type DailyReportTables, DailyReportViewerScope, type ExternalReportFields, type SharpLike, SqlResultCache, type StreamEntry, createDailyReportHandlers, createDailyReportServer, createDailyReportService, createEpochStore, createSharpThumbnailRenderer, defineDailyReportSchema, generateETag, isStreamIdLte, jsonResponseWithETag, predictSharpThumbnailWorkingSetBytes, transformJsonArray };
package/dist/server.d.ts CHANGED
@@ -1,14 +1,7 @@
1
- import { g as DailyReportInterviewer, e as DailyReportExternalComment, D as DailyReportItem, b as DailyReportDetail, d as DailyReportAttachmentSummary, i as DailyReportPostedComment } from "./ids-stream-CWuIDrIO.js";
2
- export { k as DAILY_REPORT_IDS_STREAM_ENDPOINT } from "./ids-stream-CWuIDrIO.js";
3
- import { TransactionRetryOptions } from "@aiquants/mssql";
4
1
  import * as drizzle_orm_mssql_core from "drizzle-orm/mssql-core";
5
2
  import { AnyMsSqlColumn } from "drizzle-orm/mssql-core";
6
- interface DailyReportLogger {
7
- debug(message?: unknown, ...optionalParams: unknown[]): void;
8
- info(message?: unknown, ...optionalParams: unknown[]): void;
9
- warn(message?: unknown, ...optionalParams: unknown[]): void;
10
- error(message?: unknown, ...optionalParams: unknown[]): void;
11
- }
3
+ import { e as DailyReportInterviewer, d as DailyReportExternalComment, D as DailyReportItem, b as DailyReportDetail, c as DailyReportAttachmentSummary, g as DailyReportPostedComment } from "./types-DkERw8NE.js";
4
+ import { TransactionRetryOptions } from "@aiquants/mssql";
12
5
  type RedisStreamMessage = {
13
6
  id: string;
14
7
  message: Record<string, string>;
@@ -161,6 +154,12 @@ declare class SqlResultCache {
161
154
  invalidatePrefix: (prefix: string) => void;
162
155
  private cleanExpired;
163
156
  }
157
+ interface DailyReportLogger {
158
+ debug(message?: unknown, ...optionalParams: unknown[]): void;
159
+ info(message?: unknown, ...optionalParams: unknown[]): void;
160
+ warn(message?: unknown, ...optionalParams: unknown[]): void;
161
+ error(message?: unknown, ...optionalParams: unknown[]): void;
162
+ }
164
163
  type ExternalReportFields = {
165
164
  content?: string | null;
166
165
  employeeName?: string | null;
@@ -179,6 +178,10 @@ type DailyReportExternalSource = {
179
178
  mapRow: (row: Record<string, unknown>) => ExternalReportFields;
180
179
  };
181
180
  declare const transformJsonArray: <TRaw, TResult>(payload: string | null, label: string, mapper: (raw: TRaw) => TResult | null, logger?: DailyReportLogger) => TResult[];
181
+ type ResourceRouteArgs = {
182
+ request: Request;
183
+ params: Record<string, string | undefined>;
184
+ };
182
185
  type DailyReportUserTable = {
183
186
  id: AnyMsSqlColumn;
184
187
  displayName: AnyMsSqlColumn;
@@ -1584,38 +1587,6 @@ declare function createDailyReportService(config: DailyReportServiceConfig): {
1584
1587
  updateDailyReportInternal: (tx: DailyReportDb, hubId: number, data: Partial<DailyReportInternalRow>) => Promise<void>;
1585
1588
  deleteDailyReportLabel: (tx: DailyReportDb, hubId: number, labelId: number) => Promise<void>;
1586
1589
  };
1587
- declare const isStreamIdLte: (a: string, b: string) => boolean;
1588
- type DailyReportSseReaderConfig = {
1589
- redis?: DailyReportRedisProvider;
1590
- streamKey: string;
1591
- cache: SqlResultCache;
1592
- logger?: DailyReportLogger;
1593
- };
1594
- declare class DailyReportSseReader implements DailyReportSseReaderPort {
1595
- private readonly config;
1596
- private _source;
1597
- private _lastId;
1598
- private _positioning;
1599
- private _generation;
1600
- private readonly _logger;
1601
- constructor(config: DailyReportSseReaderConfig);
1602
- ready(): Promise<void>;
1603
- subscribe(onEntry: (entry: StreamEntry) => void, onError: (err: Error) => void): () => void;
1604
- destroy(): Promise<void>;
1605
- private _position;
1606
- private _readTail;
1607
- private _createSource;
1608
- private _start;
1609
- private _readLoop;
1610
- private _invalidateCaches;
1611
- }
1612
- declare const generateETag: (data: unknown) => string;
1613
- type LoaderArgs = {
1614
- request: Request;
1615
- params: Record<string, string | undefined>;
1616
- };
1617
- declare const DAILY_REPORT_SSE_VISIBILITY_REFRESH_MS = 60000;
1618
- declare const DAILY_REPORT_SSE_CATCH_UP_BATCH = 1000;
1619
1590
  type DailyReportHandlersConfig = {
1620
1591
  authenticate: DailyReportAuthenticate;
1621
1592
  resolveVisibleSourceTypes?: DailyReportResolveVisibleSourceTypes;
@@ -1633,9 +1604,9 @@ type DailyReportHandlersConfig = {
1633
1604
  enableDevCacheClear?: boolean;
1634
1605
  logger?: DailyReportLogger;
1635
1606
  };
1636
- declare function createDailyReportHandlers(config: DailyReportHandlersConfig): {
1607
+ type DailyReportHandlers = {
1637
1608
  index: {
1638
- loader: ({ request }: LoaderArgs) => Promise<{
1609
+ loader: (args: ResourceRouteArgs) => Promise<{
1639
1610
  data: {
1640
1611
  user: {
1641
1612
  id: string;
@@ -1646,16 +1617,43 @@ declare function createDailyReportHandlers(config: DailyReportHandlersConfig): {
1646
1617
  }>;
1647
1618
  };
1648
1619
  api: {
1649
- loader: (args: LoaderArgs) => Promise<Response>;
1650
- action: (args: LoaderArgs) => Promise<Response>;
1620
+ loader: (args: ResourceRouteArgs) => Promise<Response>;
1621
+ action: (args: ResourceRouteArgs) => Promise<Response>;
1651
1622
  };
1652
1623
  sse: {
1653
- loader: (args: LoaderArgs) => Promise<Response>;
1624
+ loader: (args: ResourceRouteArgs) => Promise<Response>;
1654
1625
  };
1655
1626
  attachment: {
1656
- loader: (args: LoaderArgs) => Promise<Response>;
1627
+ loader: (args: ResourceRouteArgs) => Promise<Response>;
1657
1628
  };
1658
1629
  };
1630
+ declare function createDailyReportHandlers(config: DailyReportHandlersConfig): DailyReportHandlers;
1631
+ declare const isStreamIdLte: (a: string, b: string) => boolean;
1632
+ type DailyReportSseReaderConfig = {
1633
+ redis?: DailyReportRedisProvider;
1634
+ streamKey: string;
1635
+ cache: SqlResultCache;
1636
+ logger?: DailyReportLogger;
1637
+ };
1638
+ declare class DailyReportSseReader implements DailyReportSseReaderPort {
1639
+ private readonly config;
1640
+ private _source;
1641
+ private _lastId;
1642
+ private _positioning;
1643
+ private _generation;
1644
+ private readonly _logger;
1645
+ constructor(config: DailyReportSseReaderConfig);
1646
+ ready(): Promise<void>;
1647
+ subscribe(onEntry: (entry: StreamEntry) => void, onError: (err: Error) => void): () => void;
1648
+ destroy(): Promise<void>;
1649
+ private _position;
1650
+ private _readTail;
1651
+ private _createSource;
1652
+ private _start;
1653
+ private _readLoop;
1654
+ private _invalidateCaches;
1655
+ }
1656
+ declare const generateETag: (data: unknown) => string;
1659
1657
  declare const jsonResponseWithETag: (request: Request, cookie: string | null, payload: Record<string, unknown>, status?: number, logger?: DailyReportLogger) => Response;
1660
1658
  type SharpHeaderLike = {
1661
1659
  width: number;
@@ -1749,6 +1747,8 @@ declare const DAILY_REPORT_SHARP_THUMBNAIL_DECODE_WORK_MODEL: Readonly<{
1749
1747
  }>;
1750
1748
  declare const predictSharpThumbnailWorkingSetBytes: (source: Uint8Array, format: DailyReportAttachmentThumbnailSourceFormat, header: SharpHeaderLike) => number | null;
1751
1749
  declare const createSharpThumbnailRenderer: (sharp: SharpLike) => DailyReportAttachmentThumbnailRenderer;
1750
+ declare const DAILY_REPORT_SSE_VISIBILITY_REFRESH_MS = 60000;
1751
+ declare const DAILY_REPORT_SSE_CATCH_UP_BATCH = 1000;
1752
1752
  type DailyReportServerConfig = Omit<DailyReportServiceConfig, "cache" | "epochs"> & {
1753
1753
  authenticate: DailyReportAuthenticate;
1754
1754
  resolveVisibleSourceTypes?: DailyReportResolveVisibleSourceTypes;
@@ -1762,92 +1762,13 @@ type DailyReportServerConfig = Omit<DailyReportServiceConfig, "cache" | "epochs"
1762
1762
  cacheDefaultTtlMs?: number;
1763
1763
  externalSources?: DailyReportExternalSource[];
1764
1764
  };
1765
- declare function createDailyReportServer(config: DailyReportServerConfig): {
1766
- index: {
1767
- loader: ({ request }: {
1768
- request: Request;
1769
- params: Record<string, string | undefined>;
1770
- }) => Promise<{
1771
- data: {
1772
- user: {
1773
- id: string;
1774
- };
1775
- userId: string | null;
1776
- };
1777
- headers: Headers;
1778
- }>;
1779
- };
1780
- api: {
1781
- loader: (args: {
1782
- request: Request;
1783
- params: Record<string, string | undefined>;
1784
- }) => Promise<Response>;
1785
- action: (args: {
1786
- request: Request;
1787
- params: Record<string, string | undefined>;
1788
- }) => Promise<Response>;
1789
- };
1790
- sse: {
1791
- loader: (args: {
1792
- request: Request;
1793
- params: Record<string, string | undefined>;
1794
- }) => Promise<Response>;
1795
- };
1796
- attachment: {
1797
- loader: (args: {
1798
- request: Request;
1799
- params: Record<string, string | undefined>;
1800
- }) => Promise<Response>;
1801
- };
1802
- service: {
1803
- streamKey: string;
1804
- streamMaxLen: number;
1805
- attachmentDelivery: DailyReportAttachmentDelivery;
1806
- clearCache: () => Promise<void>;
1807
- invalidateHubReadCaches: (hubIds: readonly number[], businessDates: readonly string[]) => Promise<void>;
1808
- getUserIdByExternalId: (externalId: string) => Promise<number | null>;
1809
- getDailyReportIdsByExternalId: (scope: DailyReportViewerScope, externalId: string, { forceRefresh, snapshot, ttlMsOverride, onFetchStart }?: SqlResultCacheQueryOptions & {
1810
- onFetchStart?: () => void;
1811
- }) => Promise<DailyReportIdsSource>;
1812
- getDailyReportIdsFirstPageByExternalId: (scope: DailyReportViewerScope, externalId: string, limit: number) => Promise<DailyReportItem[]>;
1813
- readSseStreamAnchor: () => Promise<string | null>;
1814
- getDailyReportsByBusinessDate: (scope: DailyReportViewerScope, businessDate: string, { forceRefresh, snapshot, ttlMsOverride }?: SqlResultCacheQueryOptions) => Promise<DailyReportDetail[]>;
1815
- getDailyReportsByBusinessDateByExternalId: (scope: DailyReportViewerScope, businessDate: string, externalId: string, { forceRefresh, snapshot, ttlMsOverride }?: SqlResultCacheQueryOptions) => Promise<DailyReportDetail[]>;
1816
- getDailyReportDetailById: (scope: DailyReportViewerScope, reportHubId: number, userId: number, { forceRefresh, snapshot, ttlMsOverride }?: SqlResultCacheQueryOptions) => Promise<DailyReportDetail | null>;
1817
- getDailyReportDetailByIdByExternalId: (scope: DailyReportViewerScope, reportHubId: number, externalId: string, options?: SqlResultCacheQueryOptions) => Promise<DailyReportDetail | null>;
1818
- getDraftLabelId: () => Promise<number | null>;
1819
- getAttachmentsByHubIds: (hubIds: number[]) => Promise<Map<number, DailyReportAttachmentSummary[]>>;
1820
- getAttachmentForUser: (scope: DailyReportViewerScope, attachmentId: number, userId: number) => Promise<{
1821
- fileName: string;
1822
- filePath: string;
1823
- fileType: string | null;
1824
- fileSize: number | null;
1825
- } | null>;
1826
- markAttachmentMissing: (attachmentId: number) => Promise<void>;
1827
- markAttachmentPresent: (attachmentId: number) => Promise<void>;
1828
- setStarStatus: (scope: DailyReportViewerScope, userId: number, reportHubId: number, businessDate: string | null, isStarred: boolean, clientTempId: string) => Promise<DailyReportUserStatusRow>;
1829
- setReadStatus: (scope: DailyReportViewerScope, userId: number, reportHubId: number, businessDate: string | null, isRead: boolean, clientTempId: string) => Promise<DailyReportUserStatusRow>;
1830
- addComment: (scope: DailyReportViewerScope, userId: number, reportHubId: number, content: string, businessDate: string | null, clientTempId: string) => Promise<DailyReportPostedComment>;
1831
- deleteComment: (scope: DailyReportViewerScope, userId: number, reportHubId: number, commentId: number, businessDate: string | null, clientTempId: string) => Promise<void>;
1832
- createDailyReport: (userId: number, businessDate: string, clientTempId: string) => Promise<DailyReportDetail>;
1833
- updateDailyReport: (reportHubId: number, userId: number, data: {
1834
- title?: string;
1835
- content?: string;
1836
- }, clientTempId: string) => Promise<void>;
1837
- publishDailyReport: (reportHubId: number, userId: number, clientTempId: string) => Promise<DailyReportDetail | null>;
1838
- deleteDailyReport: (reportHubId: number, userId: number, clientTempId: string) => Promise<void>;
1839
- findDailyReportHubById: (tx: DailyReportDb, reportHubId: number) => Promise<DailyReportHubRow[]>;
1840
- updateDailyReportHub: (tx: DailyReportDb, reportHubId: number, data: Partial<DailyReportHubRow>) => Promise<void>;
1841
- updateDailyReportInternal: (tx: DailyReportDb, hubId: number, data: Partial<DailyReportInternalRow>) => Promise<void>;
1842
- deleteDailyReportLabel: (tx: DailyReportDb, hubId: number, labelId: number) => Promise<void>;
1843
- };
1765
+ type DailyReportServer = DailyReportHandlers & {
1766
+ service: DailyReportService;
1844
1767
  cache: SqlResultCache;
1845
- epochs: {
1846
- getEpoch(epochKey: string): Promise<number | null>;
1847
- incrementEpoch(epochKey: string): Promise<void>;
1848
- };
1768
+ epochs: EpochStore;
1849
1769
  sseReader: DailyReportSseReader;
1850
1770
  streamKey: string;
1851
1771
  knownSourceTypes: readonly string[];
1852
1772
  };
1853
- export { DAILY_REPORT_ATTACHMENT_THUMBNAIL_MAX_OUTPUT_BYTES, DAILY_REPORT_ATTACHMENT_THUMBNAIL_OUTPUT_MEDIA_TYPES, DAILY_REPORT_SHARP_THUMBNAIL_DECODE_BUDGET_BYTES, DAILY_REPORT_SHARP_THUMBNAIL_DECODE_WORK_MODEL, DAILY_REPORT_SHARP_THUMBNAIL_WORKING_SET_MODEL, DAILY_REPORT_SSE_CATCH_UP_BATCH, DAILY_REPORT_SSE_VISIBILITY_REFRESH_MS, type DailyReportAttachmentDelivery, type DailyReportAttachmentError, type DailyReportAttachmentFailure, type DailyReportAttachmentThumbnail, type DailyReportAttachmentThumbnailOutputMediaType, type DailyReportAttachmentThumbnailRenderer, type DailyReportAttachmentThumbnailSourceFormat, type DailyReportAuthResult, type DailyReportAuthenticate, type DailyReportDb, type DailyReportIdCodec, type DailyReportReadAttachment, type DailyReportRedisProvider, type DailyReportServerConfig, type DailyReportServiceConfig, DailyReportSseReader, type DailyReportSseReaderPort, type DailyReportTables, DailyReportViewerScope, type ExternalReportFields, type SharpLike, SqlResultCache, type StreamEntry, createDailyReportHandlers, createDailyReportServer, createDailyReportService, createEpochStore, createSharpThumbnailRenderer, defineDailyReportSchema, generateETag, isStreamIdLte, jsonResponseWithETag, predictSharpThumbnailWorkingSetBytes, transformJsonArray };
1773
+ declare function createDailyReportServer(config: DailyReportServerConfig): DailyReportServer;
1774
+ export { DAILY_REPORT_ATTACHMENT_THUMBNAIL_MAX_OUTPUT_BYTES, DAILY_REPORT_ATTACHMENT_THUMBNAIL_OUTPUT_MEDIA_TYPES, DAILY_REPORT_SHARP_THUMBNAIL_DECODE_BUDGET_BYTES, DAILY_REPORT_SHARP_THUMBNAIL_DECODE_WORK_MODEL, DAILY_REPORT_SHARP_THUMBNAIL_WORKING_SET_MODEL, DAILY_REPORT_SSE_CATCH_UP_BATCH, DAILY_REPORT_SSE_VISIBILITY_REFRESH_MS, type DailyReportAttachmentDelivery, type DailyReportAttachmentError, type DailyReportAttachmentFailure, type DailyReportAttachmentThumbnail, type DailyReportAttachmentThumbnailOutputMediaType, type DailyReportAttachmentThumbnailRenderer, type DailyReportAttachmentThumbnailSourceFormat, type DailyReportAuthResult, type DailyReportAuthenticate, type DailyReportDb, type DailyReportHandlers, type DailyReportHandlersConfig, type DailyReportIdCodec, type DailyReportReadAttachment, type DailyReportRedisProvider, type DailyReportServer, type DailyReportServerConfig, type DailyReportServiceConfig, DailyReportSseReader, type DailyReportSseReaderPort, type DailyReportTables, DailyReportViewerScope, type ExternalReportFields, type SharpLike, SqlResultCache, type StreamEntry, createDailyReportHandlers, createDailyReportServer, createDailyReportService, createEpochStore, createSharpThumbnailRenderer, defineDailyReportSchema, generateETag, isStreamIdLte, jsonResponseWithETag, predictSharpThumbnailWorkingSetBytes, transformJsonArray };