Ir al contenido

SDK JavaScript / Node.js

El SDK oficial de FiveHub.pro para JavaScript y TypeScript. Disponible para Node.js y browser (fetch nativo).

Ventana de terminal
npm install fivehub.pro
import { FiveHubClient } from 'fivehub.pro';
const client = new FiveHubClient({
apiKey: 'TU_API_KEY',
// organizationId: 'org_xxx', // opcional, solo con claves de usuario
// baseUrl: 'https://fivehub.pro', // por defecto
});
OpciónTipoObligatoriaDescripción
apiKeystringTu API Key del Dashboard.
organizationIdstringNoSolo necesario con claves de usuario.
baseUrlstringNoURL base de la API. Default: https://fivehub.pro.

Lista los assets con paginación y filtro de carpeta opcionales.

// Todos los assets (sin filtro de carpeta)
const { assets, total } = await client.list({ limit: 20, offset: 0 });
// Solo assets en el nivel raíz (sin carpeta)
const { assets: root } = await client.list({ folderId: null });
// Assets dentro de una carpeta específica
const { assets: inFolder } = await client.list({ folderId: 'folder_abc123' });
OpciónTipoDescripción
limitnumberMáx. 100, default 50.
offsetnumberPaginación. Default 0.
folderIdstring | nullnull=raíz, "id"=carpeta, omitir=todos.

Sube un archivo. Acepta File (browser) o Blob (Node.js). Máximo 100 MB.

const file = input.files![0];
// Subir al nivel raíz
const asset = await client.upload(file);
// Subir dentro de una carpeta
const asset = await client.upload(file, undefined, 'folder_abc123');
console.log('Subido:', asset.publicUrl);

Obtiene los metadatos de un asset por su ID.

const asset = await client.get('asset_abc123');
console.log(asset.name, asset.folderId);

Elimina un asset permanentemente.

await client.delete('asset_abc123');

Genera una URL firmada temporal. Por defecto expira en 1 hora (3600s).

const { url, expiresIn } = await client.getSignedUrl('asset_abc123', 7200);
console.log(`URL válida por ${expiresIn}s:`, url);

Lista las carpetas de tu organización. Omitir parentId para obtener las carpetas raíz.

// Carpetas en el nivel raíz
const { folders } = await client.listFolders();
// Subcarpetas de una carpeta
const { folders: sub } = await client.listFolders({ parentId: 'folder_abc123' });
folders.forEach(f => console.log(f.id, f.name));

Crea una carpeta. Pasa parentId para crearla dentro de otra carpeta.

// Carpeta en raíz
const folder = await client.createFolder('Scripts');
// Subcarpeta
const sub = await client.createFolder('v2', { parentId: folder.id });
console.log(sub.id, sub.name);

Elimina una carpeta. Sus subcarpetas también se eliminan. Los assets dentro no se borran — su folderId se vuelve null.

await client.deleteFolder('folder_abc123');

type Folder = {
id: string;
organizationId: string;
parentId: string | null;
name: string;
createdAt: string; // ISO 8601
};
type Asset = {
id: string;
organizationId: string;
folderId: string | null; // null = nivel raíz
key: string;
name: string;
mimeType: string | null;
size: number | null; // bytes
publicUrl: string | null;
createdAt: string; // ISO 8601
};
type ListAssetsResponse = {
assets: Asset[];
total: number;
limit: number;
offset: number;
};
type ListFoldersResponse = {
folders: Folder[];
};
type GetAssetUrlResponse = {
url: string;
expiresIn: number;
asset: {
id: string;
name: string;
mimeType: string | null;
size: number | null;
};
};

Todos los métodos lanzan un Error con el mensaje devuelto por la API cuando la petición falla.

try {
await client.deleteFolder('id_inexistente');
} catch (err) {
if (err instanceof Error) {
console.error(err.message); // "Folder not found"
}
}

Ejemplo completo — sincronizar directorio en una carpeta

Sección titulada «Ejemplo completo — sincronizar directorio en una carpeta»
import { FiveHubClient } from 'fivehub.pro';
import { readdirSync, readFileSync } from 'fs';
import { join, extname } from 'path';
const client = new FiveHubClient({ apiKey: process.env.FIVEHUB_API_KEY! });
const MIME: Record<string, string> = {
'.png': 'image/png',
'.jpg': 'image/jpeg',
'.zip': 'application/zip',
};
async function syncToFolder(dir: string, folderName: string) {
// Crear o reutilizar la carpeta destino
const { folders } = await client.listFolders();
let folder = folders.find(f => f.name === folderName);
if (!folder) {
folder = await client.createFolder(folderName);
}
const files = readdirSync(dir);
for (const file of files) {
const ext = extname(file);
const type = MIME[ext] ?? 'application/octet-stream';
const buffer = readFileSync(join(dir, file));
const blob = new Blob([buffer], { type });
const asset = await client.upload(blob, file, folder.id);
console.log(`${file}${asset.publicUrl}`);
}
}
syncToFolder('./recursos', 'Temporada-2');