File size: 1,824 Bytes
00a912e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import type { AudioQuality } from './types.js'

export const LIMITS = {
  ROOM_PASSWORD_MAX_LENGTH: 32,
  ROOM_NAME_MAX_LENGTH: 30,
  NICKNAME_MAX_LENGTH: 20,
  CHAT_CONTENT_MAX_LENGTH: 500,
  CHAT_HISTORY_MAX: 200,
  CHAT_RATE_LIMIT_PER_SECOND: 5,
  QUEUE_MAX_SIZE: 1000,
  QUEUE_BATCH_MAX_SIZE: 200,
  PLAYLIST_PAGE_SIZE: 100,
  SEARCH_KEYWORD_MAX_LENGTH: 100,
  BILIBILI_SEARCH_INPUT_MAX_LENGTH: 2000,
  SEARCH_PAGE_SIZE_MAX: 50,
  SEARCH_PAGE_MAX: 100,
  PLAYLIST_ID_MAX_LENGTH: 200,
} as const

/** 房间可选择的跨平台最高音质策略。 */
export const HIGHEST_AUDIO_QUALITY: AudioQuality = 'highest'

export const TIMING = {
  ROOM_GRACE_PERIOD_MS: 60_000,
  STREAM_URL_REFRESH_INTERVAL_MS: 30 * 60_000,
  STREAM_URL_REFRESH_RETRY_INTERVAL_MS: 60_000,
  WEBSOCKET_HEARTBEAT_INTERVAL_MS: 25_000,
  PLAYER_NEXT_DEBOUNCE_MS: 500,
  VOTE_TIMEOUT_MS: 30_000,
} as const

/** QR code login status codes (shared between client polling and server responses) */
export const QR_STATUS = {
  EXPIRED: 800,
  WAITING_SCAN: 801,
  SCANNED: 802,
  SUCCESS: 803,
} as const

/** QR code polling timing */
export const QR_TIMING = {
  POLL_INTERVAL_MS: 2_000,
  SUCCESS_CLOSE_DELAY_MS: 1_000,
} as const

/** NTP clock synchronisation constants */
export const NTP = {
  /** Fast sampling interval during initial calibration (ms) */
  INITIAL_INTERVAL_MS: 50,
  /** Steady-state heartbeat interval after initial calibration (ms) */
  STEADY_STATE_INTERVAL_MS: 3_000,
  /** Number of rapid samples to collect during initial calibration */
  MAX_INITIAL_SAMPLES: 20,
  /** Maximum stored measurements (sliding window) */
  MAX_MEASUREMENTS: 60,
  /** Minimum scheduling delay for scheduled execution (ms) */
  MIN_SCHEDULE_DELAY_MS: 300,
  /** Maximum scheduling delay cap (ms) */
  MAX_SCHEDULE_DELAY_MS: 3_000,
} as const