Skip to main content

Type Reference

All TypeScript types exported from @elcto/api.

REST Types

ApiResponse

Response wrapper for REST API calls.

interface ApiResponse<T> {
data?: T;
error?: string;
status: number;
}

ApiRequestOptions

Options for REST API requests.

interface ApiRequestOptions {
method?: "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
body?: unknown;
headers?: Record<string, string>;
accessToken?: string;
}

GraphQL Types

GraphQLResponse

Response wrapper for GraphQL queries.

interface GraphQLResponse<T> {
data?: T;
errors?: Array<{ message: string; path?: string[] }>;
}

GraphQLRequestOptions

Options for GraphQL requests.

interface GraphQLRequestOptions {
accessToken?: string;
headers?: Record<string, string>;
}

WebSocket Types

WebSocketConfig

Configuration for WebSocket connections.

interface WebSocketConfig {
accessToken?: string;
autoReconnect?: boolean;
reconnectDelay?: number;
maxReconnectAttempts?: number;
}

WebSocketClient

WebSocket client interface.

interface WebSocketClient {
socket: WebSocket;
send: (data: unknown) => void;
close: () => void;
onMessage: (handler: WebSocketMessageHandler) => void;
onError: (handler: WebSocketErrorHandler) => void;
onClose: (handler: WebSocketCloseHandler) => void;
}

Handler Types

type WebSocketMessageHandler = (data: unknown) => void;
type WebSocketErrorHandler = (error: Event) => void;
type WebSocketCloseHandler = (event: CloseEvent) => void;

Server Message Types

// User status
type UserStatusMessageType = "accountDeleted" | "accountBanned" | "sessionRevoked" | "forceLogout";
type UserStatusMessage = AccountDeletedMessage | AccountBannedMessage | SessionRevokedMessage | ForceLogoutMessage;

// Permissions
type PermissionMessageType = "rolesUpdated" | "permissionsUpdated" | "rolePermissionsChanged";
type PermissionMessage = RolesUpdatedMessage | PermissionsUpdatedMessage | RolePermissionsChangedMessage;

// Account linking
type AccountLinkMessageType = "emailLinkVerified" | "emailChangeVerified";
type AccountLinkMessage = EmailLinkVerifiedMessage | EmailChangeVerifiedMessage;

// All server messages
type ServerMessage = UserStatusMessage | PermissionMessage | AccountLinkMessage;

User Types

UserProfile

User profile information.

interface UserProfile {
name: string | null;
picture: string | null;
provider: string | null;
primary_provider: string | null;
last_login_at: string | null;
created_at: string | null;
}

UserPermissions

User permissions and roles.

interface UserPermissions {
/** Role names (e.g., "Admin", "Developer") - for display */
roles: string[];
/** Role IDs (e.g., "role_admin", "role_developer") - for programmatic checks */
role_ids: string[];
permissions: string[];
is_super_admin: boolean;
}
tip

Use role_ids instead of roles for programmatic role checks. Role IDs are immutable and won't change if role names are renamed.

PlatformAccount

Connected platform account.

interface PlatformAccount {
id: string;
platform_id: string;
platform_name: string;
platform_slug: string;
is_oauth: boolean;
is_primary: boolean;
username: string;
email: string | null;
avatar_url: string | null;
created_at: string;
}

ActiveSession

Active login session information.

interface ActiveSession {
id: string;
ipAddress: string | null;
userAgent: string | null;
deviceType: string | null;
browserName: string | null;
osName: string | null;
/** Auth provider slug used for this session (twitch, discord, email, etc.) */
provider: string | null;
/** Auth provider display name (Twitch, Discord, Email, etc.) */
providerName: string | null;
lastActivityAt: string | null;
createdAt: string;
expiresAt: string;
isCurrent: boolean;
}

ActiveSessionsResponse

Response from active sessions API.

interface ActiveSessionsResponse {
sessions: ActiveSession[];
currentSessionId: string | null;
}

Audit Types

AuditEvent

Audit event record from the activity log.

interface AuditEvent {
id: string;
userId: string;
eventType: string;
resourceType?: string;
resourceId?: string;
actorId?: string;
ipAddress?: string;
userAgent?: string;
description?: string;
metadata?: Record<string, unknown>;
status: "success" | "failure";
errorMessage?: string;
countryCode?: string;
countryName?: string;
city?: string;
region?: string;
sourceService?: string;
createdAt: string;
isReported: boolean;
}

sourceService Values:

ValueDescription
apiDirect API calls
idHeimdall ID app (account management)
backendHeimdall Backend (admin console)
policiesPolicies app
discord_botDiscord bot
twitch_botTwitch bot

AuditEventPage

Paginated audit event response.

interface AuditEventPage {
events: AuditEvent[];
totalCount: number;
page: number;
limit: number;
totalPages: number;
}

AuditEventQuery

Query parameters for filtering audit events.

interface AuditEventQuery {
page?: number;
limit?: number;
eventType?: string;
resourceType?: string;
status?: string;
userId?: string; // Admin only
}

AuditEventReport

Report submitted for suspicious activity.

interface AuditEventReport {
id: string;
auditEventId: string;
userId: string;
reason: string;
description?: string;
status: "pending" | "reviewed" | "resolved" | "dismissed";
reviewedBy?: string;
reviewedAt?: string;
resolutionNotes?: string;
createdAt: string;
updatedAt: string;
}

ReportAuditEventInput

Input for reporting an audit event.

interface ReportAuditEventInput {
auditEventId: string;
reason: "not_me" | "suspicious" | "unknown_device" | "unknown_location" | "other";
description?: string;
}

ReportAuditEventResponse

Response from reporting an audit event.

interface ReportAuditEventResponse {
success: boolean;
report?: AuditEventReport;
error?: string;
}

AuditReportPage (Admin)

Paginated audit reports response for admins.

interface AuditReportPage {
reports: AuditEventReport[];
totalCount: number;
page: number;
limit: number;
totalPages: number;
}

UpdateAuditReportInput (Admin)

Input for updating an audit report status.

interface UpdateAuditReportInput {
reportId: string;
status: "reviewed" | "resolved" | "dismissed";
resolutionNotes?: string;
}

UpdateAuditReportResponse (Admin)

Response from updating an audit report.

interface UpdateAuditReportResponse {
success: boolean;
report?: AuditEventReport;
error?: string;
}

Audit Event Constants & Utilities

The library provides constants and helper functions for working with audit events.

AuditEventTypes

Type-safe constants for all audit event types:

import { AuditEventTypes } from "@elcto/api";

AuditEventTypes.LOGIN // "login"
AuditEventTypes.LOGIN_FAILED // "login_failed"
AuditEventTypes.LOGOUT // "logout"
AuditEventTypes.TWO_FA_ENABLED // "2fa_enabled"
AuditEventTypes.PASSWORD_CHANGED // "password_changed"
// ... and more

AuditEventLabels

Human-readable labels for event types:

import { AuditEventLabels, getAuditEventLabel } from "@elcto/api";

// Direct lookup
AuditEventLabels["login"] // "Signed in"

// Helper function (with fallback)
getAuditEventLabel("login") // "Signed in"
getAuditEventLabel("unknown_type") // "unknown_type" (fallback)

Event Categories

Categorize events for filtering and display:

import {
AuditEventCategories,
getAuditEventCategory,
type AuditEventCategory,
} from "@elcto/api";

// Categories: "security" | "account" | "sessions" | "oauth"
getAuditEventCategory("login") // "security"
getAuditEventCategory("user_updated") // "account"
getAuditEventCategory("session_created") // "sessions"
getAuditEventCategory("consent_granted") // "oauth"

Event Icons

Icon names for rendering audit event icons:

import {
AuditEventIcons,
getAuditEventIconName,
type AuditIconName,
} from "@elcto/api";

// Icon names: "LogIn" | "LogOut" | "Shield" | "Key" | "User" | ...
getAuditEventIconName("login") // "LogIn"
getAuditEventIconName("2fa_enabled") // "Shield"
getAuditEventIconName("password_changed") // "Key"
tip

Use the AuditIcon component from @elcto/ui to render these icons:

import { AuditIcon } from "@elcto/ui";
<AuditIcon eventType="login" className="w-4 h-4" />

Event Colors

Get colors for event categories and failure states:

import {
AuditCategoryColors,
AuditFailureColor,
getAuditEventColor,
} from "@elcto/api";

// Color classes for categories
AuditCategoryColors.security // "text-brand"
AuditCategoryColors.account // "text-blue-400"
AuditCategoryColors.sessions // "text-purple-400"
AuditCategoryColors.oauth // "text-amber-400"

// Failure color
AuditFailureColor // "text-[var(--error)]"

// Get color for specific event (considers failure state)
getAuditEventColor("login") // "text-brand"
getAuditEventColor("login_failed") // "text-[var(--error)]"

Filter Options

Pre-built filter options for activity log dropdowns:

import { AuditFilterOptions, getAuditFilterEventTypes } from "@elcto/api";

// Use in a select/dropdown
<select>
{AuditFilterOptions.map(option => (
<option key={option.value} value={option.value}>
{option.label}
</option>
))}
</select>

// Get event types for a category filter
getAuditFilterEventTypes("security")
// Returns: ["login", "login_failed", "2fa_enabled", ...]

Common Types

PaginationParams

Pagination parameters for list requests.

interface PaginationParams {
page?: number;
limit?: number;
offset?: number;
}

PaginatedResponse

Paginated response wrapper.

interface PaginatedResponse<T> {
items: T[];
total: number;
page: number;
limit: number;
hasMore: boolean;
}

ApiConfig

API configuration.

interface ApiConfig {
apiUrl: string;
wsUrl: string;
hasSystemKey: boolean;
}

Hook Types

UseWebSocketOptions

Options for the useWebSocket hook.

interface UseWebSocketOptions extends WebSocketConfig {
immediate?: boolean;
}

UseWebSocketReturn

Return value from useWebSocket hook.

interface UseWebSocketReturn {
isConnected: boolean;
lastMessage: unknown;
send: (data: unknown) => void;
connect: () => void;
disconnect: () => void;
}

Role Constants

The library exports role ID constants for type-safe role checks:

import {
ROLE_SUPER_ADMIN, // "role_super_admin"
ROLE_ADMIN, // "role_admin"
ROLE_MODERATOR, // "role_moderator"
ROLE_DEVELOPER, // "role_developer"
ROLE_USER, // "role_user"
PRIVILEGED_ROLE_IDS, // Array of admin/mod/dev role IDs
} from "@/lib/api";

Helper Functions

import {
hasPrivilegedRole, // Check if user has admin/mod/dev role
hasRole, // Check if user has specific role
hasAnyRole, // Check if user has any of specified roles
hasAllRoles, // Check if user has all specified roles
} from "@/lib/api";

// Usage
const { roleIds, isSuperAdmin } = usePermissions();

if (isSuperAdmin || hasPrivilegedRole(roleIds)) {
// User can access admin features
}

if (hasRole(roleIds, ROLE_DEVELOPER)) {
// User has developer role
}

Importing Types

All types can be imported from @/lib/api:

import type {
// REST
ApiResponse,
ApiRequestOptions,

// GraphQL
GraphQLResponse,
GraphQLRequestOptions,

// WebSocket
WebSocketConfig,
WebSocketClient,
ServerMessage,
UserStatusMessage,
PermissionMessage,

// User
UserProfile,
UserPermissions,
PlatformAccount,
ActiveSession,
ActiveSessionsResponse,

// Audit
AuditEvent,
AuditEventPage,
AuditEventQuery,
AuditEventReport,
ReportAuditEventInput,
ReportAuditEventResponse,
AuditReportPage,
UpdateAuditReportInput,
UpdateAuditReportResponse,

// Common
PaginationParams,
PaginatedResponse,
ApiConfig,

// Hooks
UseWebSocketOptions,
UseWebSocketReturn,
} from "@/lib/api";

// Role constants and helpers (not types)
import {
ROLE_SUPER_ADMIN,
ROLE_ADMIN,
ROLE_MODERATOR,
ROLE_DEVELOPER,
ROLE_USER,
PRIVILEGED_ROLE_IDS,
hasPrivilegedRole,
hasRole,
hasAnyRole,
hasAllRoles,
} from "@/lib/api";