SDK
Clientes listos para los lenguajes más populares. Un solo archivo, sin dependencias externas, compactos ~80 líneas. Copia el código de abajo y úsalo de inmediato.
Estado de la publicación: el SDK por ahora se distribuye solo a través de esta página. La publicación en npm y PyPI está planificada tras la primera ola de adopción. Si quieres recibir avisos del lanzamiento, escribe a [email protected].
JavaScript / TypeScript
Compatible con Node.js 18+, Bun, Deno y navegadores. Usa el fetch integrado — sin dependencias externas.
Instalación
Copia el código de abajo en el archivo zaruvia-client.ts de tu proyecto.
/**
* ZaruviaClient — cliente del Zaruvia Open Numerology API.
*
* Licencia: MIT (código), CC-BY 4.0 (datos).
* Documentación: https://zaruvia.com/docs
*/
export interface ArcanaPosition {
arcana: number;
name: string;
keyword: string;
emoji: string;
}
export interface Matrix {
personal: ArcanaPosition; social: ArcanaPosition;
soul: ArcanaPosition; body: ArcanaPosition;
spirit: ArcanaPosition; center: ArcanaPosition;
talents: ArcanaPosition; karma: ArcanaPosition;
money: ArcanaPosition; relationships: ArcanaPosition;
destiny: ArcanaPosition; purpose: ArcanaPosition;
}
export interface MatrixResponse {
input: { day: number; month: number; year: number };
matrix: Matrix;
source_url: string;
details_url: string;
license: string;
attribution: string;
attribution_html: string;
api_version: string;
}
export type LifePathNumber = 1|2|3|4|5|6|7|8|9|11|22|33;
export class ZaruviaError extends Error {
constructor(public status: number, public body: unknown) {
super(`Zaruvia API HTTP ${status}`);
this.name = "ZaruviaError";
}
}
export class ZaruviaClient {
private baseUrl: string;
private timeoutMs: number;
constructor(opts: { baseUrl?: string; timeoutMs?: number } = {}) {
this.baseUrl = (opts.baseUrl ?? "https://zaruvia.com/api/public").replace(/\/$/, "");
this.timeoutMs = opts.timeoutMs ?? 10_000;
}
async getMatrix(day: number, month: number, year: number): Promise<MatrixResponse> {
return this.request<MatrixResponse>(`/matrix/${day}/${month}/${year}`);
}
async getLifePath(n: LifePathNumber | number): Promise<unknown> {
return this.request(`/life-path/${n}`);
}
async listLifePaths(): Promise<unknown[]> {
return this.request(`/life-path`);
}
private async request<T>(path: string): Promise<T> {
const res = await fetch(`${this.baseUrl}${path}`, {
headers: { Accept: "application/json" },
signal: AbortSignal.timeout(this.timeoutMs),
});
if (!res.ok) {
const body = await res.json().catch(() => null);
throw new ZaruviaError(res.status, body);
}
return res.json();
}
}
Uso
import { ZaruviaClient } from "./zaruvia-client";
const client = new ZaruviaClient();
// Matriz del destino
const matrix = await client.getMatrix(15, 3, 1990);
console.log(matrix.matrix.center.name); // "La Rueda de la Fortuna"
console.log(matrix.matrix.money.emoji); // "⚡"
// Número del camino de vida
const lp = await client.getLifePath(7);
console.log(lp);
// Lista de todos los números
const all = await client.listLifePaths();
console.log(all.length); // 12Si prefieres JavaScript puro sin TypeScript, elimina los tipos del código fuente (todo lo que viene tras interface, type, : string, etc.); quedará un módulo ES funcional de ~30 líneas.
Python
Python 3.8+. Sin dependencias — solo la biblioteca estándar urllib.
Instalación
Copia el código de abajo en el archivo zaruvia_client.py de tu proyecto.
"""
ZaruviaClient — cliente del Zaruvia Open Numerology API.
Licencia: MIT (código), CC-BY 4.0 (datos).
Documentación: https://zaruvia.com/docs
"""
import json
import urllib.error
import urllib.request
from typing import Any, Dict, List
class ZaruviaError(Exception):
def __init__(self, message: str, status: int, body: Any):
super().__init__(message)
self.status = status
self.body = body
class ZaruviaClient:
def __init__(
self,
base_url: str = "https://zaruvia.com/api/public",
timeout: float = 10.0,
user_agent: str = "zaruvia-python/1.0",
) -> None:
self.base_url = base_url.rstrip("/")
self.timeout = timeout
self.user_agent = user_agent
def get_matrix(self, day: int, month: int, year: int) -> Dict[str, Any]:
return self._request(f"/matrix/{int(day)}/{int(month)}/{int(year)}")
def list_life_paths(self) -> List[Dict[str, Any]]:
return self._request("/life-path")
def get_life_path(self, number: int) -> Dict[str, Any]:
return self._request(f"/life-path/{int(number)}")
def _request(self, path: str) -> Any:
req = urllib.request.Request(
f"{self.base_url}{path}",
headers={"Accept": "application/json", "User-Agent": self.user_agent},
method="GET",
)
try:
with urllib.request.urlopen(req, timeout=self.timeout) as r:
return json.loads(r.read().decode("utf-8"))
except urllib.error.HTTPError as e:
try:
body = json.loads(e.read().decode("utf-8"))
except Exception:
body = None
raise ZaruviaError(f"Zaruvia API HTTP {e.code}", e.code, body) from None
except urllib.error.URLError as e:
raise ZaruviaError(f"Network error: {e.reason}", 0, None) from None
# Uso:
# from zaruvia_client import ZaruviaClient
# client = ZaruviaClient()
# matrix = client.get_matrix(day=15, month=3, year=1990)
# print(matrix["matrix"]["center"]["name"]) # "La Rueda de la Fortuna"
Uso
from zaruvia_client import ZaruviaClient client = ZaruviaClient() # Matriz del destino matrix = client.get_matrix(day=15, month=3, year=1990) print(matrix["matrix"]["center"]["name"]) # "La Rueda de la Fortuna" print(matrix["matrix"]["money"]["emoji"]) # "⚡" # Número del camino de vida lp = client.get_life_path(7) print(lp["archetype"]) # "El Sabio"
Variante async
Si necesitas un cliente async, crea un equivalente con aiohttp o httpx.AsyncClient con la misma firma. La lógica es idéntica a la versión síncrona; la única diferencia es el await.
Sin SDK
El API es tan simple que el SDK no es obligatorio. Llamada mínima en cualquier lenguaje:
curl https://zaruvia.com/api/public/matrix/15/3/1990
Otros lenguajes
Puedes generar un cliente en más de 50 lenguajes a partir de la especificación OpenAPI 3.0 con openapi-generator (Go, Java, C#, Rust, Swift, Kotlin, Ruby y otros).
Comentarios
¿Encontraste un fallo, quieres un nuevo lenguaje o una variante async? Escribe a [email protected]. El lanzamiento open source con repositorio en GitHub llegará tras publicar en npm/PyPI.