ForcePilot/backend/package/yuxi/external_systems/integrations/hubspot/metadata.py

111 lines
4.6 KiB
Python
Raw Normal View History

"""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_codeOAuth 2.1access token 30 分钟自动刷新);"
"内部集成推荐 private_app_tokenBearer pat-...,长期有效,需定期轮换)。"
"api_key 已于 2022-11-30 弃用,不再支持。"
),
)