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
|