"""钉钉渠道插件共享常量。 集中定义在多个模块间共享的配置默认值、依赖标识与渠道标识,避免重复 定义导致的不一致风险(P2-3 常量去重)。 仅汇集真正跨模块共享的常量;仅单一模块使用的常量仍保留在各自模块内。 所有常量值需与 ``manifest.json`` 中 ``config_schema`` 的 ``default`` 字段 及 ``resource_quota`` 保持一致(F-03 manifest 单真相源),本模块的常量 作为 ConfigPort 未命中时的本地回退默认值。 依赖方向:仅标准库,不 import 任何框架层或同插件模块,避免循环依赖。 """ from __future__ import annotations # --------------------------------------------------------------------------- # 渠道与依赖标识 # --------------------------------------------------------------------------- # 渠道标识,用于 ConfigPort CHANNEL 作用域 target(与 manifest.json # channel_type / provides 对齐) CHANNEL_TARGET = "dingtalk" # 钉钉 API 依赖标识,统一用于 ``DependencyError.dep`` 字段 DINGTALK_API_DEP = "dingtalk_api" # --------------------------------------------------------------------------- # HTTP 客户端配置(lifecycle 与 dingtalk_client 共享) # --------------------------------------------------------------------------- # HTTP 客户端默认超时(秒),对齐 manifest.json config_schema # request_timeout_ms.default=30000 HTTP_TIMEOUT_SECONDS = 30.0 # HTTP 连接池最大连接数,对齐 manifest.json # resource_quota.max_connections=50 HTTP_MAX_CONNECTIONS = 50 # HTTP 连接池 keepalive 连接数上限 HTTP_MAX_KEEPALIVE_CONNECTIONS = 10 # --------------------------------------------------------------------------- # Stream 模式默认端点(与 manifest.json stream_endpoint_path.default 对齐) # --------------------------------------------------------------------------- # 钉钉 Stream 接入端点(由 /v1.0/gateway/connections/open 返回 WS connectionId) DEFAULT_STREAM_ENDPOINT_PATH = "/v1.0/gateway/connections/open" # --------------------------------------------------------------------------- # token 缓存与刷新策略 # --------------------------------------------------------------------------- # token 缓存 key 前缀(完整 key: dingtalk:token:{client_id}) TOKEN_CACHE_KEY_PREFIX = "dingtalk:token:" # token 提前刷新量(秒),对齐设计方案 §5.4(提前 300s 刷新) TOKEN_REFRESH_LEAD_TIME_SEC = 300 # HTTP 模式签名时效窗口(秒),对齐设计方案 §3.3(60 分钟) HTTP_SIGN_TIMESTAMP_TOLERANCE_SEC = 3600 # 钉钉互动卡片占位模板 ID(v1 使用占位值,生产环境应从 account config 读取 # 或由 RichMessage.metadata["cardTemplateId"] 显式传入) DEFAULT_CARD_TEMPLATE_ID = "DEFAULT_CARD_TEMPLATE" __all__ = [ "CHANNEL_TARGET", "DINGTALK_API_DEP", "HTTP_TIMEOUT_SECONDS", "HTTP_MAX_CONNECTIONS", "HTTP_MAX_KEEPALIVE_CONNECTIONS", "DEFAULT_STREAM_ENDPOINT_PATH", "TOKEN_CACHE_KEY_PREFIX", "TOKEN_REFRESH_LEAD_TIME_SEC", "HTTP_SIGN_TIMESTAMP_TOLERANCE_SEC", "DEFAULT_CARD_TEMPLATE_ID", ]