from __future__ import annotations from enum import StrEnum ZALO_TEXT_LIMIT = 2000 ZALO_MAX_STYLED_MESSAGE_LENGTH = 2000 WS_MAX_MESSAGE_SIZE = 10 * 1024 * 1024 WS_PING_INTERVAL = 30 WS_PING_TIMEOUT = 10 WS_RECONNECT_DELAY = 5 WATCHDOG_INTERVAL = 30 WATCHDOG_MAX_IDLE = 35 GROUP_CONTEXT_CACHE_TTL = 300 GROUP_CONTEXT_CACHE_MAX_ENTRIES = 500 DEFAULT_BRIDGE_URL = "http://localhost:5556" DEFAULT_TIMEOUT = 30.0 DEFAULT_CONNECT_TIMEOUT = 10 DEFAULT_LOGIN_POLL_INTERVAL = 2.0 DEFAULT_LOGIN_TIMEOUT = 120.0 DEFAULT_QR_START_TIMEOUT = 30.0 DEFAULT_MAX_SEND_PER_MINUTE = 30 DEFAULT_RETRY_ATTEMPTS = 3 DEFAULT_RETRY_MIN_DELAY_MS = 500 DEFAULT_RETRY_MAX_DELAY_MS = 10000 DEFAULT_CIRCUIT_BREAKER_THRESHOLD = 5 DEFAULT_CIRCUIT_BREAKER_RECOVERY = 60 ZALO_REACTION_EMOJIS = frozenset( { "\U0001f44d", "\u2764\ufe0f", "\U0001f602", "\U0001f62e", "\U0001f622", "\U0001f621", } ) REACTION_ALIAS_MAP: dict[str, str] = { "like": "\U0001f44d", "+1": "\U0001f44d", ":+1:": "\U0001f44d", "love": "\u2764\ufe0f", "heart": "\u2764\ufe0f", ":heart:": "\u2764\ufe0f", "laugh": "\U0001f602", "haha": "\U0001f602", ":laughing:": "\U0001f602", "wow": "\U0001f62e", "surprised": "\U0001f62e", ":open_mouth:": "\U0001f62e", "sad": "\U0001f622", "cry": "\U0001f622", ":cry:": "\U0001f622", "angry": "\U0001f621", "mad": "\U0001f621", ":rage:": "\U0001f621", } TARGET_PREFIXES: dict[str, str] = { "zalouser:": "user", "zlu:": "user", "user:": "user", "dm:": "user", "u:": "user", "u-": "user", "group:": "group", "g:": "group", "g-": "group", } class ZaloCredentialStage(StrEnum): UNINITIALIZED = "uninitialized" QR_PENDING = "qr_pending" QR_SCANNED = "qr_scanned" QR_DECLINED = "qr_declined" QR_EXPIRED = "qr_expired" CONNECTED = "connected" LOGGED_OUT = "logged_out" ERROR = "error"