Аутентификация
Справочник по ConnectorAuth — четыре типа аутентификации для коннекторов, включая OAuth2, SecretText, CustomAuth и None.
Аутентификация
Пространство имён ConnectorAuth предоставляет четыре фабричных метода для объявления способа аутентификации пользователей в коннекторе. Каждый возвращает замороженный AuthDefinition, который передаётся в createConnector().
import { ConnectorAuth, AUTH_TYPES } from "@triggo/connector-sdk";Константа AUTH_TYPES
const AUTH_TYPES = {
OAUTH2: "OAUTH2",
SECRET_TEXT: "SECRET_TEXT",
CUSTOM: "CUSTOM",
NONE: "NONE",
} as const;ConnectorAuth.OAuth2
Для сервисов, поддерживающих поток авторизации OAuth 2.0 (authorization code flow).
const auth = ConnectorAuth.OAuth2({
authUrl: "https://service.com/oauth/authorize",
tokenUrl: "https://service.com/oauth/token",
scope: ["read", "write"],
pkce: true,
extraProps: {
domain: Property.ShortText({
displayName: "Domain",
description: "Your account subdomain (e.g., mycompany).",
required: true,
}),
},
validateExtraProps: (props) => {
if (!props["domain"]) {
throw new Error("Domain is required");
}
},
});Поля конфигурации OAuth2
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
authUrl | string | Да | URL эндпоинта авторизации OAuth2. |
tokenUrl | string | Да | URL эндпоинта обмена токенами OAuth2. |
scope | readonly string[] | Да | Запрашиваемые OAuth2-скоупы. |
pkce | boolean | Нет | Включить PKCE (Proof Key for Code Exchange). Рекомендуется для публичных клиентов. |
extraProps | Record<string, PropertyDefinition> | Нет | Дополнительные поля, которые пользователь должен указать перед OAuth-потоком (например, домен, регион). |
validateExtraProps | (props: Record<string, string>) => void | Нет | Синхронная валидация дополнительных свойств. Выбросьте исключение для отклонения. |
OAuth2Credentials
Когда выполняется функция run коннектора с OAuth2, context.auth имеет следующую форму:
interface OAuth2Credentials {
readonly accessToken: string;
readonly refreshToken: string;
readonly tokenType: string;
readonly expiresIn?: number;
readonly claimedAt: number;
readonly props?: Record<string, string>;
readonly data?: Record<string, unknown>;
}| Поле | Тип | Описание |
|---|---|---|
accessToken | string | Текущий токен доступа. Triggo автоматически обновляет его. |
refreshToken | string | Токен обновления для получения новых токенов доступа. |
tokenType | string | Тип токена, обычно "Bearer". |
expiresIn | number | Время жизни токена в секундах (из ответа токена). |
claimedAt | number | Unix-метка времени (мс), когда токен был выпущен. |
props | Record<string, string> | Значения из extraProps (например, { domain: "mycompany" }). |
data | Record<string, unknown> | Нечувствительные данные из ответа токена (зарезервировано для будущего использования). |
ConnectorAuth.SecretText
Для сервисов, использующих один API-ключ, токен или секретную строку.
const auth = ConnectorAuth.SecretText({
displayName: "API Key",
description: "Your API key from the service dashboard.",
validate: async (authValue) => {
const response = await fetch("https://api.example.com/me", {
headers: { Authorization: `Bearer ${authValue.secret}` },
});
if (!response.ok) {
throw new Error("Invalid API key");
}
},
});Поля конфигурации SecretText
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
displayName | string | Да | Метка, отображаемая в интерфейсе подключения. |
description | string | Нет | Вспомогательный текст, объясняющий, где найти секрет. |
validate | (auth: { secret: string }) => Promise<void> | Нет | Асинхронная функция валидации. Выбросьте исключение для отклонения учётных данных. |
Во время выполнения context.auth имеет форму { secret: string }.
ConnectorAuth.CustomAuth
Для сервисов, требующих нескольких полей (например, логин + пароль или домен + API-ключ).
const auth = ConnectorAuth.CustomAuth({
props: {
apiKey: Property.SecretText({
displayName: "API Key",
description: "Your API key.",
required: true,
}),
region: Property.Dropdown({
displayName: "Region",
description: "Data center region.",
required: true,
options: [
{ label: "US", value: "us" },
{ label: "EU", value: "eu" },
],
}),
},
validate: async (authValue) => {
const apiKey = authValue["apiKey"] as string;
const region = authValue["region"] as string;
const response = await fetch(`https://${region}.api.example.com/verify`, {
headers: { "X-Api-Key": apiKey },
});
if (!response.ok) {
throw new Error("Invalid credentials");
}
},
});Поля конфигурации CustomAuth
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
props | Record<string, PropertyDefinition> | Да | Пользовательские поля с использованием системы Property. |
validate | (auth: Record<string, unknown>) => Promise<void> | Нет | Асинхронная валидация. Получает разрешённые значения свойств. Выбросьте исключение для отклонения. |
Во время выполнения context.auth -- это Record<string, unknown> с ключами, соответствующими именам свойств.
ConnectorAuth.None
Для коннекторов, не требующих аутентификации (например, публичные API, входящие вебхуки).
const auth = ConnectorAuth.None();Конфигурация не требуется. Во время выполнения context.auth равен undefined.
Выбор типа аутентификации
| Сценарий | Тип аутентификации |
|---|---|
| Сервис использует OAuth2 (например, AmoCRM, Google) | ConnectorAuth.OAuth2 |
| Сервис использует один API-ключ или токен бота | ConnectorAuth.SecretText |
| Сервис требует несколько учётных данных (например, домен + ключ) | ConnectorAuth.CustomAuth |
| Аутентификация не нужна (публичный API, входящий вебхук) | ConnectorAuth.None |