Referência da API
Esta página descreve a API pública do pacote @eyedux/sdk e o contrato HTTP usado pelo Eyedux.
Base URL e autenticação
O SDK usa a base fixa https://api.eyedux.com e injeta o header abaixo em toda requisição:
O backend infere a organização pela API key. Não envie organization_id no payload. O cliente funciona em browsers, React e React Native, portanto o SDK não impede o uso direto da key nesses ambientes. Como ela pode ser extraída do bundle ou aplicativo, prefira um backend para chaves privilegiadas.
Construtores
createEyeduxClient
Cria um cliente. A API key é removida de espaços nas extremidades e uma key vazia lança EyeduxValidationError com código EMPTY_API_KEY.
| Opção | Tipo | Padrão | Descrição |
|---|---|---|---|
projectId |
string |
nenhum | Projeto padrão para novos eventos |
timeoutMs |
number |
30000 |
Timeout por request, em milissegundos |
defaultMetadata |
Record<string, unknown> |
nenhum | Metadata padrão, sobrescrita pelo evento |
fetch |
typeof fetch |
globalThis.fetch |
Implementação de transporte customizada |
createEyeduxClientWithConfig
Versão explícita que exige apiKey e projectId; ambos são validados antes da criação do cliente.
createEyeduxClientFromEnv
Lê somente EYEDUX_API_KEY em runtimes Node.js. Defina o projeto em options.projectId ou em cada chamada a createEvent.
Métodos do cliente
createEvent
Envia POST /public/logs. input.projectId tem precedência sobre o projeto padrão; se não houver um projeto, lança EyeduxValidationError com código EMPTY_PROJECT_ID.
| Campo | Tipo | Obrigatório |
|---|---|---|
projectId |
string |
Sim, no input ou na configuração |
type |
string |
Sim |
properties |
Record<string, unknown> |
Sim |
typeGroup |
string |
Não |
message |
string |
Não; máximo de 500 caracteres |
eyeduxType |
EventEyeduxType |
Não |
externalObject |
EventObject |
Não |
correlationObject |
EventObject |
Não |
metadata |
Record<string, unknown> |
Não |
O SDK serializa os campos para snake_case na API: project_id, type_group, eyedux_type, external_object e correlation_object. message mantém o mesmo nome.
Para eventos audit, use AuditProperties em properties. actor e target
são objetos obrigatórios. actor.type, actor.source, target.type,
target.id e target.source devem ser strings não vazias; actor.id é
obrigatório, exceto para actor.type = "anonymous". result aceita success,
failure, in_review ou denied, e reason é obrigatório para failure e
denied. changes é aceito para descrever alterações de estado.
listEvents
Executa GET /public/logs. Os filtros opcionais e cumulativos são type e correlationId, serializado como correlation_id. Uma lista vazia, ou uma resposta com data: null, resulta em [].
findEventByExternalId
client.findEventByExternalId(
externalId: string,
options?: RequestOptions,
): Promise<EyeduxEvent>;
Executa GET /public/logs/external/:external_id, codificando o ID para uso no path. Uma string vazia lança EyeduxValidationError com código EMPTY_EXTERNAL_ID.
Métodos de emissão
client.emit(input, options);
client.emitError(input, options);
client.emitCritical(input, options);
client.emitWarning(input, options);
client.emitLog(input, options);
client.emitDebug(input, options);
client.emitInfo(input, options);
client.emitAudit(input, options);
client.emitMetric(input, options);
emit usa input.eyeduxType. Os atalhos aplicam suas categorias correspondentes. emitError adiciona contexto de diagnóstico às propriedades, copiando o objeto de entrada.
Tipos
EventEyeduxType
const EventEyeduxType = {
SystemCritical: "system-critical",
SystemError: "system-error",
SystemWarning: "system-warning",
SystemLog: "system-log",
SystemDebug: "system-debug",
SystemInfo: "system-info",
Audit: "audit",
Metric: "metric",
} as const;
MetricUnit e MetricProperties
const MetricUnit = {
Count: "count",
Bytes: "bytes",
Milliseconds: "milliseconds",
Seconds: "seconds",
Percent: "percent",
Ratio: "ratio",
} as const;
interface MetricProperties {
value: number;
unit: MetricUnit;
dimensions?: Record<string, string>;
}
emitMetric envia eyedux_type: "metric" e valida as propriedades antes da
requisição: o valor deve ser finito, percent fica entre 0 e 100, ratio
entre 0 e 1, e dimensions aceita até 10 pares, com chaves e valores dentro
dos limites da API. MetricProperties contém apenas value, unit e
dimensions.
EventObject
interface AuditActor {
type: string;
id?: string;
source: string;
}
interface AuditTarget {
type: string;
id: string;
source: string;
}
interface AuditProperties {
actor: AuditActor;
target: AuditTarget;
result: "success" | "failure" | "in_review" | "denied";
reason?: string;
changes?: Record<string, unknown>;
}
EyeduxEvent
interface EyeduxEvent {
id: string;
environment: string;
eyeduxType: EventEyeduxType | null;
clientStatus: "to_check" | "solved" | "declined" | null;
type: string;
typeGroup: string;
message: string | null;
properties: Record<string, unknown>;
status: "active" | "deleted";
timestamp: string;
createdAt: string;
externalObject: EventObject | null;
correlationObject: EventObject | null;
metadata: Record<string, unknown> | null;
}
timestamp e createdAt são strings RFC 3339 fornecidas pela API.
message será null quando o evento não tiver mensagem. A API aceita até
MAX_EVENT_MESSAGE_LENGTH caracteres (500) e rejeita valores maiores com
APIErrorCode.EventMessageTooLong.
RequestOptions
Use signal para cancelar uma chamada individual sem alterar o timeout configurado no cliente.
Diagnóstico
function currentErrorSource(sourceSkip?: number): ErrorSource | undefined;
function errorProperties(
properties: JsonObject,
error?: unknown,
operation?: string,
): JsonObject;
function errorPropertiesWithSourceSkip(
properties: JsonObject,
error?: unknown,
operation?: string,
sourceSkip?: number,
): JsonObject;
Esses helpers não alteram properties. A origem é extraída do stack trace e pode variar conforme o runtime e as ferramentas de build.
Erros
EyeduxValidationError
Erros locais de validação, com a propriedade code:
| Código | Situação |
|---|---|
EMPTY_API_KEY |
API key vazia |
EMPTY_PROJECT_ID |
Nenhum projeto disponível para criar o evento |
EMPTY_EXTERNAL_ID |
ID externo vazio |
INVALID_AUDIT_PROPERTIES |
Propriedades de auditoria ausentes ou inválidas |
EyeduxAPIError
Respostas HTTP não bem-sucedidas lançam:
class EyeduxAPIError extends Error {
statusCode: number;
code: string;
apiMessage: string;
retryAfter?: number;
}
retryAfter é preenchido com o header Retry-After em segundos quando a API responde 429 com um valor inteiro.
| Helper | Uso |
|---|---|
isAuthError(error) |
API key inválida ou revogada |
isNotFound(error) |
Evento externo não encontrado (404) |
isConflict(error) |
Conflito (409) |
isExternalObjectConflict(error) |
external_object duplicado |
isRateLimited(error) |
Rate limit excedido (429) |
EyeduxRequestError representa problemas de transporte, timeout, cancelamento ou JSON de sucesso inválido. A causa original permanece em error.cause.
Contrato HTTP
Envelope de resposta
Sucessos usam o envelope abaixo:
Erros seguem:
{
"error": {
"code": "event_external_object_conflict",
"message": "external object already exists"
}
}
Códigos conhecidos
| Código | Status | Descrição |
|---|---|---|
invalid_api_key |
422 |
API key inválida ou revogada |
event_type_required |
422 |
type enviado vazio |
event_properties_empty |
422 |
properties enviado vazio |
event_message_too_long |
422 |
message excede 500 caracteres |
event_metric_type_invalid |
422 |
type inválido para um evento metric |
event_metric_property_required |
422 |
Propriedade metric obrigatória ausente |
event_metric_property_invalid |
422 |
Propriedade metric inválida |
event_external_object_conflict |
409 |
Objeto externo duplicado |
event_external_id_not_found |
404 |
ID externo não encontrado |
event_external_id_required |
422 |
ID externo vazio |
RATE_LIMIT_EXCEEDED |
429 |
Limite de requisições excedido |
INTERNAL_SERVER_ERROR |
500 |
Erro interno não mapeado |