Ir al contenido

Quickstart: JavaScript

@hyphae/cloud vive en sdks/js/ del repositorio (aún no está en un registro; úsalo como dependencia de workspace o file:). No tiene dependencias en tiempo de ejecución, funciona en Node 22+ y navegadores modernos, y es un cliente, no una autoridad: guarda tu token, llama a las rutas y devuelve los campos del servidor sin cambios.

import { CloudError, createCloudClient } from "@hyphae/cloud";
const cloud = createCloudClient({ url: "https://infra-hyphae.run" });
await cloud.auth.signup({ email: `dev-${Date.now()}@ejemplo.com`, password: "phase0-password", invite_code: process.env.INVITE_CODE });
const project = await cloud.projects.create({ name: "quickstart" });
await cloud.projects.wakeup(project.id);
const issued = await cloud.keys.create(project.id, { label: "quickstart" }); // el secreto se muestra una vez
const data = cloud.data(project.id, { key: issued.key }); // el plano de la clave
const caps = await data.capabilities();
if (caps.decoded.kind === "capabilities") {
const c = caps.decoded.value;
console.log(`${project.id}: engine api v${c.product_api_version}, max_sql_rows ${c.max_sql_rows}`);
}
try {
await cloud.snapshots.create(project.id); // necesita el tenant dormido
} catch (e) {
if (e instanceof CloudError && e.isTenantRunning) await cloud.projects.sleep(project.id);
else throw e;
}
const snap = await cloud.snapshots.create(project.id, { label: "primero" });
console.log(`snapshot ${snap.id} en visible_csn ${snap.lineage.visible_csn} (${snap.backup.status})`);

Dos clientes, dos planos: cloud.* usa tu sesión (rutas de propietario y todo lo demás); cloud.data(projectId, { key }) usa una clave de proyecto y expone solo lo que una clave puede hacer — capabilities(), storage, publish/subscribe, invoke y raw(path) para cualquier petición /v2. A propósito no tiene secrets.

Superficie y errores: referencia del SDK.