Сервисы
Подробная документация всех сервисов приложения.
ApiService (Базовый HTTP сервис)
Базовый сервис для работы с HTTP запросами. Автоматически обрабатывает обёрнутые ответы API.
Структура
interface IApiWrapper<T> {
success: boolean;
data: T;
}
@Injectable({ providedIn: "root" })
export class ApiService {
private readonly http = inject(HttpClient);
private readonly baseUrl = environment.apiUrl;
get<T>(endpoint: string) {
return this.http.get<IApiWrapper<T>>(`${this.baseUrl}${endpoint}`).pipe(map((response) => response.data));
}
post<T>(endpoint: string, body: unknown) {
return this.http.post<IApiWrapper<T>>(`${this.baseUrl}${endpoint}`, body).pipe(map((response) => response.data));
}
put<T>(endpoint: string, body: unknown) {
return this.http.put<IApiWrapper<T>>(`${this.baseUrl}${endpoint}`, body).pipe(map((response) => response.data));
}
patch<T>(endpoint: string, body: unknown) {
return this.http.patch<IApiWrapper<T>>(`${this.baseUrl}${endpoint}`, body).pipe(map((response) => response.data));
}
delete<T>(endpoint: string) {
return this.http.delete<IApiWrapper<T>>(`${this.baseUrl}${endpoint}`).pipe(map((response) => response.data));
}
}Как это работает
- Запрос:
GET /integrations - API ответ:
{ "success": true, "data": [...] } - map(response => response.data): Извлекает
dataиз обёртки - Компонент получает:
[...](просто массив)
Пример использования
// IntegrationsService использует ApiService
@Injectable({ providedIn: "root" })
export class IntegrationsService {
private readonly api = inject(ApiService);
getAll() {
// API возвращает: { success: true, data: [...] }
// ApiService возвращает: [...]
return this.api.get<IIntegration[]>("/integrations");
}
}
// Компонент подписывается на результат
this.integrationsService.getAll().subscribe((integrations) => {
// integrations здесь уже распакованный массив
this.integrations = integrations;
});Важно: AuthService работает по-другому
INFO
AuthService использует прямой HttpClient БЕЗ обёртки, так как auth эндпоинты не используют обёрнутый формат.
login(email: string, password: string) {
return this.http
.post<ILoginResponse>(`${this.baseUrl}/auth/sign-in`, { email, password })
.pipe(
tap(response => {
this.setTokens(response.accessToken, response.refreshToken);
}),
map(() => undefined)
);
}AuthService
Сервис для аутентификации и управления JWT токенами.
Методы
login(email: string, password: string)
Выполняет вход пользователя в систему.
Параметры:
email— email пользователяpassword— пароль
Возвращает: Observable<void>
Пример:
this.authService.login("user@example.com", "password123").subscribe(() => {
console.log("Успешный вход");
});logout()
Выполняет выход из системы и редирект на страницу входа.
Пример:
this.authService.logout();me()
Получает информацию о текущем пользователе.
Возвращает: Observable<IUser>
Пример:
this.authService.me().subscribe((user) => {
console.log(user.email);
});isAuthenticated
Геттер для проверки авторизации пользователя.
Возвращает: boolean
Пример:
if (this.authService.isAuthenticated) {
// Пользователь авторизован
}isAuthenticated$
Observable для отслеживания состояния авторизации.
Возвращает: Observable<boolean>
Пример:
this.authService.isAuthenticated$.subscribe((isAuth) => {
console.log("Авторизован:", isAuth);
});getAccessToken()
Получает access токен из localStorage.
Возвращает: string | null
getRefreshToken()
Получает refresh токен из localStorage.
Возвращает: string | null
validateToken()
Валидирует текущий токен через запрос к API.
Возвращает: Observable<boolean>
IntegrationsService
Сервис для управления интеграциями.
Методы
getAll()
Получить список всех интеграций.
Возвращает: Observable<IIntegration[]>
Пример:
this.integrationsService.getAll().subscribe((integrations) => {
console.log(integrations);
});getById(id: string)
Получить интеграцию по ID.
Параметры:
id— UUID интеграции
Возвращает: Observable<IIntegration>
Пример:
this.integrationsService.getById("uuid-here").subscribe((integration) => {
console.log(integration.name);
});create(data: ICreateIntegrationRequest)
Создать новую интеграцию.
Параметры:
data— данные для создания интеграцииname— название интеграции
Возвращает: Observable<IIntegration>
Пример:
this.integrationsService.create({ name: "My Integration" }).subscribe((integration) => {
console.log("Создана:", integration.id);
});update(id: string, data: IUpdateIntegrationRequest)
Обновить интеграцию.
Параметры:
id— UUID интеграцииdata— данные для обновленияname?— новое название (опционально)
Возвращает: Observable<IIntegration>
delete(id: string)
Удалить интеграцию.
Параметры:
id— UUID интеграции
Возвращает: Observable<null>
syncHandlers(id: string, data: ISyncHandlersRequest)
Синхронизировать handlers из OpenAPI спецификации integ-core.
Параметры:
id— UUID интеграцииdata— данные для синхронизацииintegrationName— имя интеграции в integ-core (например, "sofa")baseUrl?— базовый URL (опционально, по умолчанию из env)
Возвращает: Observable<ISyncHandlersResponse>
Пример:
this.integrationsService.syncHandlers("integration-uuid", { integrationName: "sofa" }).subscribe((result) => {
console.log("Created:", result.created);
console.log("Updated:", result.updated);
});CredentialsService
Сервис для управления credentials интеграций.
Методы
getByIntegration(integrationId: string)
Получить все credentials интеграции.
Параметры:
integrationId— UUID интеграции
Возвращает: Observable<ICredential[]>
Пример:
this.credentialsService.getByIntegration("integration-uuid").subscribe((credentials) => {
console.log(credentials);
});create(integrationId: string, data: ICreateCredentialRequest)
Создать новый credential.
Параметры:
integrationId— UUID интеграцииdata— данные credentialkey— ключvalue— значение
Возвращает: Observable<ICredential>
Пример:
this.credentialsService
.create("integration-uuid", {
key: "API_KEY",
value: "secret-key-here"
})
.subscribe();update(integrationId: string, credentialId: string, data: IUpdateCredentialRequest)
Обновить credential.
Параметры:
integrationId— UUID интеграцииcredentialId— UUID credentialdata— данные для обновленияvalue— новое значение
Возвращает: Observable<ICredential>
delete(integrationId: string, credentialId: string)
Удалить credential.
Параметры:
integrationId— UUID интеграцииcredentialId— UUID credential
Возвращает: Observable<null>
SecretsService
Сервис для управления секретами интеграций.
Методы
API идентичен CredentialsService:
getByIntegration(integrationId: string)— получить все секретыcreate(integrationId: string, data: ICreateSecretRequest)— создать секретupdate(integrationId: string, secretId: string, data: IUpdateSecretRequest)— обновитьdelete(integrationId: string, secretId: string)— удалить
HandlersService
Сервис для управления обработчиками событий.
Методы
getByIntegration(integrationId: string)
Получить все handlers интеграции.
Возвращает: Observable<IHandler[]>
create(integrationId: string, data: ICreateHandlerRequest)
Создать новый handler.
Параметры:
integrationId— UUID интеграцииdata— данные handlername— название handler'аdefaultArgs?— дефолтные аргументы (опционально)
Возвращает: Observable<IHandler>
Пример:
this.handlersService
.create("integration-uuid", {
name: "my-webhook",
defaultArgs: { timeout: 5000 }
})
.subscribe();update(integrationId: string, handlerId: string, data: IUpdateHandlerRequest)
Обновить handler.
Параметры:
integrationId— UUID интеграцииhandlerId— UUID handler'аdata— данные для обновленияname?— новое названиеdefaultArgs?— новые дефолтные аргументы
Возвращает: Observable<IHandler>
delete(integrationId: string, handlerId: string)
Удалить handler.
Возвращает: Observable<null>
execute(handlerName: string, method?: string, payload?: IHandlerExecuteRequest)
Выполнить handler (отправить webhook).
Параметры:
handlerName— название handler'аmethod— HTTP метод (по умолчанию 'POST')payload?— данные запросаurl?— кастомный URL (опционально)body?— тело запроса (опционально)
Возвращает: Observable<IHandlerExecuteResponse>
Пример:
this.handlersService
.execute("my-webhook", "POST", {
body: { message: "Hello" }
})
.subscribe((response) => {
console.log("Status:", response.statusCode);
console.log("Body:", response.body);
});AccessTokensService
Сервис для управления токенами доступа к API.
Методы
getAll()
Получить все access tokens.
Возвращает: Observable<IAccessToken[]>
Пример:
this.accessTokensService.getAll().subscribe((tokens) => {
console.log(tokens);
});create(data: ICreateAccessTokenRequest)
Создать новый access token.
Параметры:
data— данные для созданияname— название токена
Возвращает: Observable<IAccessTokenResponse>
Пример:
this.accessTokensService.create({ name: "My API Token" }).subscribe((response) => {
console.log("Token:", response.token);
// ВАЖНО: token виден только один раз!
});Внимание
Token виден только один раз при создании. Сохраните его в безопасном месте!
delete(tokenId: string)
Удалить access token.
Параметры:
tokenId— UUID токена
Возвращает: Observable<null>
Следующие шаги
- Интерфейсы — TypeScript типы
- Функции — описание функциональности