"""HubSpot 厂商集成元数据。 定义 ``IntegrationMetadata(key="hubspot", ...)``,由 ``__init__.py`` 自注册到 ``IntegrationRegistry``。元数据为内存态,不持久化到数据库。 同时定义 HubSpot API 端点常量与标准对象类型 ID 表,供 ``operations.py`` / ``generators.py`` 复用。 版本路径策略(见设计文档 §6.2): | API 类别 | 推荐路径 | 原因 | | --- | --- | --- | | 元数据发现 | ``/crm/v3/...`` | 元数据 API 稳定,v3 路径主流兼容 | | 对象 CRUD 与 Search | ``/crm/v3/objects/{objectTypeId}`` | 兼容性最佳 | | 关联 | ``/crm/v4/associations/...`` | v4 支持带标签关联 | | OAuth 认证端点 | ``/oauth/2026-03/...`` | 强制使用日期版本 | | 健康检查 | ``/account-info/v3/details`` | v3 路径稳定 | """ from __future__ import annotations from yuxi.external_systems.integrations.schemas import IntegrationMetadata # ── API 基础 URL 与 OAuth 端点 ──────────────────────────────────────────── API_BASE_URL = "https://api.hubapi.com" OAUTH_AUTHORIZE_URL = "https://app.hubspot.com/oauth/authorize" OAUTH_TOKEN_URL = "https://api.hubapi.com/oauth/2026-03/token" OAUTH_INTROSPECT_URL = "https://api.hubapi.com/oauth/2026-03/token/introspect" OAUTH_REVOKE_URL = "https://api.hubapi.com/oauth/2026-03/token/revoke" # ── 账户信息路径(健康检查推荐)────────────────────────────────────────── ACCOUNT_INFO_PATH = "/account-info/v3/details" # ── 元数据发现路径常量 ──────────────────────────────────────────────────── SCHEMAS_PATH = "/crm/v3/schemas" PROPERTIES_PATH_TEMPLATE = "/crm/v3/properties/{object_type_id}" ASSOCIATIONS_PATH_TEMPLATE = "/crm/v4/associations/{from}/{to}/labels" PIPELINES_PATH_TEMPLATE = "/crm/v3/pipelines/{object_type_id}" # ── 对象 CRUD / Search / Batch 路径模板 ─────────────────────────────────── OBJECTS_PATH_TEMPLATE = "/crm/v3/objects/{object_type_id}" SEARCH_PATH_TEMPLATE = "/crm/v3/objects/{object_type_id}/search" BATCH_PATH_TEMPLATE = "/crm/v3/objects/{object_type_id}/batch/{operation}" ASSOCIATION_BATCH_PATH_TEMPLATE = "/crm/v4/associations/{from}/{to}/batch/create" # ── 标准对象类型 ID 表(见设计文档 §4.2)───────────────────────────────── STANDARD_OBJECT_TYPE_IDS: dict[str, str] = { "contacts": "0-1", "companies": "0-2", "deals": "0-3", "tickets": "0-5", "products": "0-7", "line_items": "0-8", "quotes": "0-14", "calls": "0-48", "emails": "0-49", "meetings": "0-47", "tasks": "0-27", "notes": "0-46", "leads": "0-136", "invoices": "0-53", "goals": "0-74", } # ── 默认发现的标准对象 FQN 列表 ────────────────────────────────────────── DEFAULT_STANDARD_OBJECTS: list[str] = [ "contacts", "companies", "deals", "tickets", ] HUBSPOT_METADATA = IntegrationMetadata( key="hubspot", display_name="HubSpot", description="HubSpot CRM 集成,支持对象 CRUD / Search / 关联 / 批量 / 导入", adapter_type="http", source_types=["hubspot"], supported_auth_types=[ "oauth2_authorization_code", "private_app_token", ], tags=["CRM", "Marketing", "SaaS"], icon="hubspot", docs_url="https://developers.hubspot.com/docs/api/overview", connection_extra_schema={ "type": "object", "properties": { "base_url": { "type": "string", "default": API_BASE_URL, "description": "API 基础 URL,默认 https://api.hubapi.com", }, "authorize_url": { "type": "string", "default": OAUTH_AUTHORIZE_URL, "description": "OAuth 2.1 授权端点,前端拼接授权 URL 时使用", }, }, }, example_config={ "base_url": API_BASE_URL, "authorize_url": OAUTH_AUTHORIZE_URL, }, dependency_note=( "多租户场景推荐 oauth2_authorization_code(OAuth 2.1,access token 30 分钟自动刷新);" "内部集成推荐 private_app_token(Bearer pat-...,长期有效,需定期轮换)。" "api_key 已于 2022-11-30 弃用,不再支持。" ), )