Files
photo-live/packages/contracts/src/constants.ts
T
2026-09-20 21:49:09 +08:00

53 lines
3.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// packages/contracts/src/constants.ts
// 跨服务共享的运行时常量(Task 19 起)。队列名等标识符放契约包:api(生产者,
// complete 后入队)与 worker(Task 20/21 消费者)经同一常量引用,杜绝两处字符串漂移。
/** 照片处理 BullMQ 队列名(api enqueue → worker 消费;补偿扫描 Task 21)。 */
export const QUEUE_PHOTO_PROCESS = 'photo-process';
/** 水印历史重生成 BullMQ 队列名(P4a Task 3:api watermark-jobs 入队 → worker 消费)。 */
export const QUEUE_WATERMARK = 'watermark-regen';
// ── P2 双地域同步与互动(决策初值 D07/D11,验收前可调;env 覆盖键见 .env.example)──
// 运行时可调项的默认值集中在此,服务实现(Task 3+)读 env、缺省回落本表;
// HEARTBEAT_MS 属 WS 消息契约,随 realtime.ts 导出(此处不重复定义避免重名导出)。
/** cn→ov 内容同步:content-batches 单批事件数上限(D11)。 */
export const SYNC_BATCH_SIZE = 100;
/** cn→ov 内容同步:outbox 推送轮询间隔毫秒(D11;高优先级事件不受此间隔约束)。 */
export const SYNC_PUSH_INTERVAL_MS = 2000;
/** ov 补漏对账轮询间隔毫秒(D11,5 分钟;按 sync_state 水位向 cn 请求 reconcile)。 */
export const SYNC_RECONCILE_INTERVAL_MS = 300000;
/** ov→cn 统计回传间隔毫秒(D11,60s 增量快照)。 */
export const STAT_RETURN_INTERVAL_MS = 60000;
/** 浏览去重窗口分钟(D07):窗口内同一 visitorId 不重复计数。 */
export const VISIT_WINDOW_MINUTES = 30;
/** 点赞批次幂等窗口小时:窗口外 batchId 拒绝重放(返回权威 total,不加计)。 */
export const LIKE_BATCH_WINDOW_HOURS = 24;
/** 点赞基础限速:单 sessionId 滑窗(=幂等窗口)累计 delta 上限,超限 429。 */
export const LIKE_SESSION_WINDOW_DELTA = 500;
/** 点赞基础限速:来源 IP 滑窗累计 delta 上限(NAT 出口共享,宽于单会话)。 */
export const LIKE_IP_WINDOW_DELTA = 2000;
/** likes.burst 合并窗口毫秒(技术方案 §7 短窗合并;0=不合并逐批即时广播)。 */
export const LIKE_BURST_MERGE_MS = 500;
/** 浏览上报 requestId 保留分钟:过期 requestId 拒绝重放(≥ 去重窗口)。 */
export const VISIT_REQUEST_TTL_MINUTES = 35;
/** 浏览上报基础限速:visitorId+IP 固定窗(=去重窗口)内请求数上限,超限 429。 */
export const VISIT_WINDOW_REQUESTS = 60;
/** 公开照片下载基础限速:来源 IP 固定窗(DOWNLOAD_WINDOW_SECONDS)内请求数上限。 */
export const DOWNLOAD_WINDOW_REQUESTS = 120;
/** 下载限速固定窗秒数(P4a Task 4;无幂等面可借窗,独立短窗)。 */
export const DOWNLOAD_WINDOW_SECONDS = 60;
/** ov 互动流水清理调度间隔分钟(like_batches/visit_requests/visit_sessions)。 */
export const CLEANUP_INTERVAL_MINUTES = 60;
// ── P4b 嵌入组件(悬浮轮播)──
// 展示位轮播 iframe 的公开端点轮询参数(ETag 304 命中时零负载;默认值可被
// env 覆盖,登记见根 .env.example,P4b Task 4 起被 apps/viewer 嵌入页读取)。
/** 展示位轮询间隔毫秒(拉新照片/检测 configVersion 变化)。 */
export const EMBED_POLL_INTERVAL_MS = 30000;
/** 轮询连续失败上限:达到后退避(间隔 × EMBED_POLL_BACKOFF_MULTIPLIER)。 */
export const EMBED_POLL_MAX_FAILURES = 5;
/** 轮询失败退避倍数(连续失败达上限后拉长间隔,成功即恢复正常间隔)。 */
export const EMBED_POLL_BACKOFF_MULTIPLIER = 5;