本次提交新增了完整的多渠道消息网关系统,包括: 1. 支持飞书、钉钉、Web、Hook 四种渠道的适配器与配置 2. 领域模型层:消息、会话、绑定、出箱等核心实体 3. 应用服务层:管道、中间件、DTO 与业务逻辑 4. 基础设施层:持久化、过滤器、队列等端口实现 5. 接口层:REST API、SSE、WebSocket 通信端点 6. 前端页面与路由配置,添加渠道管理菜单 7. 新增相关依赖包与 docker-compose 部署配置
63 lines
2.7 KiB
Python
63 lines
2.7 KiB
Python
from __future__ import annotations
|
|
|
|
from yuxi.channel.application.pipeline.middlewares.access_policy_middleware import AccessPolicyMiddleware
|
|
from yuxi.channel.application.pipeline.middlewares.auth_middleware import AuthMiddleware
|
|
from yuxi.channel.application.pipeline.middlewares.dedup_middleware import DedupMiddleware
|
|
from yuxi.channel.application.pipeline.middlewares.enqueue_mq_middleware import EnqueueMQMiddleware
|
|
from yuxi.channel.application.pipeline.middlewares.keyword_filter_middleware import KeywordFilterMiddleware
|
|
from yuxi.channel.application.pipeline.middlewares.mention_gate_middleware import MentionGateMiddleware
|
|
from yuxi.channel.application.pipeline.middlewares.rate_limit_middleware import RateLimitMiddleware
|
|
from yuxi.channel.application.pipeline.middlewares.validation_middleware import ValidationMiddleware
|
|
from yuxi.channel.application.service.auth_service import AuthService
|
|
from yuxi.channel.domain.port.keyword_matcher_port import KeywordMatcherPort
|
|
from yuxi.channel.domain.port.metrics_port import MetricsPort
|
|
from yuxi.channel.domain.port.queue_port import QueuePort
|
|
from yuxi.channel.domain.port.rate_limit_port import RateLimitPort
|
|
from yuxi.channel.domain.port.signature_verify_port import SignatureVerifyPort
|
|
from yuxi.channel.domain.port.cache_port import CachePort
|
|
from yuxi.channel.domain.service.pipeline import Pipeline
|
|
from yuxi.channel.domain.service.pipeline_builder import PipelineBuilder
|
|
|
|
|
|
def build_inbound_pipeline(
|
|
auth_service: AuthService,
|
|
cache_port: CachePort,
|
|
rate_limit_port: RateLimitPort,
|
|
queue_port: QueuePort,
|
|
*,
|
|
keyword_matcher: KeywordMatcherPort | None = None,
|
|
signature_verifier: SignatureVerifyPort | None = None,
|
|
metrics: MetricsPort | None = None,
|
|
channel_config: dict | None = None,
|
|
bot_id: str | None = None,
|
|
) -> Pipeline:
|
|
config = channel_config or {}
|
|
|
|
mention_gate = MentionGateMiddleware()
|
|
if bot_id:
|
|
mention_gate.set_bot_id(bot_id)
|
|
|
|
if keyword_matcher is None:
|
|
from yuxi.channel.infrastructure.matching.aho_corasick_matcher import AhoCorasickMatcher
|
|
|
|
keyword_matcher = AhoCorasickMatcher(set(config.get("keyword_blocklist") or []))
|
|
|
|
return (
|
|
PipelineBuilder()
|
|
.add(AuthMiddleware(auth_service))
|
|
.add(
|
|
ValidationMiddleware(
|
|
signature_verifier=signature_verifier,
|
|
allow_from=config.get("allow_from", {}),
|
|
)
|
|
)
|
|
.add(KeywordFilterMiddleware(keyword_matcher))
|
|
.add(DedupMiddleware(cache_port))
|
|
.add(RateLimitMiddleware(rate_limit_port))
|
|
.add(AccessPolicyMiddleware(policies=config.get("access_policies", {})))
|
|
.add(mention_gate)
|
|
.add(EnqueueMQMiddleware(queue_port))
|
|
.metrics(metrics)
|
|
.build()
|
|
)
|