eb51069a12
Co-Authored-By: Claude Code <noreply@anthropic.com>
53 lines
3.5 KiB
TypeScript
53 lines
3.5 KiB
TypeScript
// 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;
|