Nexanexa
← Referencia

@nexa/http

Sin dependencias — cliente HTTP + capa de datos reactiva, para usar dentro de una isla o un handler.

createApi()

import { createApi } from "@nexa/http";

const api = createApi({ baseURL: "https://api.miapp.com" });
await api.get("/products");
await api.post("/products", { name: "..." });

get/post/put/delete reales. Un status no-2xx lanza HttpError { status, message }.

query()

import { query } from "@nexa/http";

const users = query({ key: "users", fetch: () => api.get("/users") });
users.data.value;
users.refetch();

data/loading/error como Signal de @nexa/reactivity. cachePolicy: cache-first (default) | network-first | stale-while-revalidate.

mutation()

import { mutation } from "@nexa/http";

const createUser = mutation({ execute: (nombre) => api.post("/users", { nombre }) });
await createUser.execute("Ana");

Mismos Signal (data/loading/error) que query(), para una acción que el usuario dispara (crear, editar, borrar).

connectSSE()

import { connectSSE } from "@nexa/http";

const notifications = connectSSE({ url: "/events" });
notifications.data.value;

Envoltorio delgado sobre EventSource nativo. data es el último mensaje, parseado como JSON si se puede.

connectSocket()

import { connectSocket } from "@nexa/http";

const chat = connectSocket({ url: "wss://miapp.com/chat" });
chat.send({ text: "hola" });

Envoltorio sobre WebSocket nativo. status refleja el ciclo de vida real; send() serializa objetos como JSON automáticamente.

Reconexión con backoff

const chat = connectSocket({
    url: "wss://miapp.com/chat",
    reconnect: { maxAttempts: 10, baseDelayMs: 500, maxDelayMs: 15000 }
});

reconnect: true (o un objeto para ajustar los valores) reconecta solo con backoff exponencial + jitter. status pasa por "reconnecting" mientras lo intenta.