Skip to content

API Reference

Обзор всех доступных сервисов и API приложения Integ Admin.

Формат API Ответов

API использует два разных формата в зависимости от типа эндпоинта:

Эндпоинты аутентификации (без обёртки)

Auth эндпоинты возвращают данные напрямую:

json
// POST /auth/sign-in
{
  "accessToken": "eyJhbGciOiJIUzI1NiIs...",
  "refreshToken": "placeholder"
}

// GET /auth/me
{
  "id": "uuid",
  "email": "user@example.com",
  "firstName": "John",
  "lastName": "Doe",
  "createdAt": "2024-01-01T00:00:00.000Z"
}

Остальные эндпоинты (с обёрткой)

Все остальные эндпоинты возвращают данные в обёртке:

json
// GET /integrations
{
  "success": true,
  "data": [
    {
      "id": "uuid",
      "name": "Integration Name",
      "createdAt": "2024-01-01T00:00:00.000Z",
      "updatedAt": "2024-01-01T00:00:00.000Z"
    }
  ]
}

// GET /integrations/:id/credentials
{
  "success": true,
  "data": [
    {
      "id": "uuid",
      "integrationId": "uuid",
      "key": "API_KEY",
      "value": "secret",
      "createdAt": "2024-01-01T00:00:00.000Z",
      "updatedAt": "2024-01-01T00:00:00.000Z"
    }
  ]
}

Обработка Ответов

ApiService (для эндпоинтов с обёрткой)

ApiService автоматически извлекает data из обёрнутого ответа:

typescript
interface IApiWrapper<T> {
	success: boolean;
	data: T;
}

@Injectable({ providedIn: "root" })
export class ApiService {
	get<T>(endpoint: string) {
		return this.http.get<IApiWrapper<T>>(`${this.baseUrl}${endpoint}`).pipe(map((response) => response.data));
	}

	// post, put, patch, delete работают аналогично
}

Пример использования:

typescript
// API возвращает: { success: true, data: [...] }
// ApiService возвращает: [...]
integrations$ = this.integrationsService.getAll();
// Компонент получает напрямую массив

AuthService (для auth эндпоинтов без обёртки)

AuthService работает напрямую с HttpClient, так как auth эндпоинты не используют обёртку:

typescript
@Injectable({ providedIn: "root" })
export class AuthService {
	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)
		);
	}

	me() {
		return this.http.get<IUser>(`${this.baseUrl}/auth/me`);
	}
}

Базовый API Service

Все сервисы используют базовый ApiService для работы с HTTP запросами.

ApiService

Предоставляет методы для выполнения HTTP запросов:

typescript
@Injectable({ providedIn: "root" })
export class ApiService {
	get<T>(url: string): Observable<T>;
	post<T>(url: string, data: unknown): Observable<T>;
	put<T>(url: string, data: unknown): Observable<T>;
	delete<T>(url: string): Observable<T>;
}

Доменные сервисы

AuthService

Сервис для аутентификации и авторизации пользователей.

Подробная документация →

IntegrationsService

Управление интеграциями (CRUD операции).

Подробная документация →

CredentialsService

Управление credentials для интеграций.

Подробная документация →

SecretsService

Управление секретами интеграций.

Подробная документация →

HandlersService

Управление обработчиками событий.

Подробная документация →

AccessTokensService

Управление токенами доступа к API.

Подробная документация →

Интерфейсы

Все TypeScript интерфейсы описаны в разделе Интерфейсы.

HTTP Interceptors

Auth Interceptor

Автоматически добавляет JWT токен к каждому запросу:

typescript
export const authInterceptor: HttpInterceptorFn = (req, next) => {
	const token = localStorage.getItem("access_token");

	if (token) {
		req = req.clone({
			setHeaders: { Authorization: `Bearer ${token}` }
		});
	}

	return next(req);
};

Error Interceptor

Обрабатывает HTTP ошибки и выполняет logout при 401:

typescript
export const errorInterceptor: HttpInterceptorFn = (req, next) => {
	return next(req).pipe(
		catchError((error: HttpErrorResponse) => {
			if (error.status === 401) {
				// Logout and redirect to login
			}
			return throwError(() => error);
		})
	);
};

Guards

authGuard

Защищает маршруты, требующие авторизации:

typescript
export const authGuard: CanActivateFn = () => {
	const authService = inject(AuthService);
	const router = inject(Router);

	if (!authService.isAuthenticated) {
		return router.createUrlTree(["/auth/login"]);
	}

	return true;
};

noAuthGuard

Редиректит авторизованных пользователей:

typescript
export const noAuthGuard: CanActivateFn = () => {
	const authService = inject(AuthService);
	const router = inject(Router);

	if (authService.isAuthenticated) {
		return router.createUrlTree(["/admin/dashboard"]);
	}

	return true;
};

Следующие шаги

SaaS Admin Documentation