Ir al contenido

SDK FiveM (Lua)

El SDK de FiveM es un resource para FiveM/RedM escrito en Lua. Se instala en tu carpeta resources/ y expone exports que puedes usar desde cualquier otro resource de tu servidor.

Opción 1 — Descarga directa (recomendada)

Sección titulada «Opción 1 — Descarga directa (recomendada)»
  1. Descarga el último release desde GitHub.
  2. Extrae la carpeta en resources/fivehub/.
  3. Añade ensure fivehub en tu server.cfg.
Ventana de terminal
cd resources/
git clone https://github.com/FiveHubPRO/fivehub-fivem fivehub-repo
cp -r fivehub-repo/packages/sdk-fivem fivehub

Añade estas líneas en tu server.cfg antes de ensure fivehub:

set fivehub:apiKey "TU_API_KEY"
set fivehub:baseUrl "https://fivehub.pro"
# Opcional — solo si usas claves de usuario con varias organizaciones
set fivehub:organizationId ""

Nunca pongas tu API Key directamente en config.lua. Usa siempre convars para mantener la clave fuera del código.


Todos los exports son asíncronos y usan callbacks con la firma function(err, data). Si err no es nil, la operación falló.

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

-- Todos los assets (sin filtro de carpeta)
exports.fivehub:ListAssets({ limit = 10, offset = 0 }, function(err, data)
if err then print("Error:", err) return end
for _, asset in ipairs(data.assets) do
print(asset.name, asset.publicUrl)
end
end)
-- Solo assets en el nivel raíz
exports.fivehub:ListAssets({ folderId = "" }, function(err, data)
print("Assets en raíz:", data.total)
end)
-- Assets dentro de una carpeta
exports.fivehub:ListAssets({ folderId = "folder_abc123" }, function(err, data)
print("Assets en carpeta:", data.total)
end)
-- Sin opciones (también válido)
exports.fivehub:ListAssets(function(err, data)
print("Total:", data.total)
end)
OpciónTipoDescripción
limitnumberMáx. 100, default 50.
offsetnumberPaginación. Default 0.
folderIdstring""=raíz, "id"=carpeta, omitir=todos.

Obtiene los metadatos de un asset por su ID.

exports.fivehub:GetAsset("asset_abc123", function(err, asset)
if err then print("Error:", err) return end
print("Nombre:", asset.name)
print("Carpeta:", asset.folderId or "raíz")
print("URL:", asset.publicUrl)
end)

Genera una URL firmada temporal. expiresIn es en segundos (default 3600).

-- URL que expira en 2 horas
exports.fivehub:GetAssetUrl("asset_abc123", 7200, function(err, data)
if err then print("Error:", err) return end
print("URL firmada:", data.url)
TriggerClientEvent("mi-resource:setUrl", source, data.url)
end)
-- Omitir expiresIn usa el default (3600s)
exports.fivehub:GetAssetUrl("asset_abc123", function(err, data)
print(data.url)
end)

Elimina un asset permanentemente.

exports.fivehub:DeleteAsset("asset_abc123", function(err)
if err then print("Error al eliminar:", err) return end
print("Asset eliminado correctamente")
end)

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

-- Carpetas en el nivel raíz
exports.fivehub:ListFolders(function(err, data)
if err then print("Error:", err) return end
for _, folder in ipairs(data.folders) do
print(folder.id, folder.name)
end
end)
-- Subcarpetas de una carpeta
exports.fivehub:ListFolders({ parentId = "folder_abc123" }, function(err, data)
print("Subcarpetas:", #data.folders)
end)

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

-- Carpeta en raíz
exports.fivehub:CreateFolder("Scripts", function(err, folder)
if err then print("Error:", err) return end
print("Carpeta creada:", folder.id, folder.name)
end)
-- Subcarpeta
exports.fivehub:CreateFolder("v2", { parentId = "folder_abc123" }, function(err, folder)
print("Subcarpeta creada:", folder.id)
end)

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

exports.fivehub:DeleteFolder("folder_abc123", function(err)
if err then print("Error:", err) return end
print("Carpeta eliminada")
end)

{
id = "asset_abc123",
organizationId = "org_xyz",
folderId = "folder_abc123", -- nil si está en raíz
key = "org_xyz/1700000000-abc-archivo.zip",
name = "archivo.zip",
mimeType = "application/zip",
size = 5242880,
publicUrl = "https://cdn.fivehub.pro/...",
createdAt = "2025-01-15T10:30:00.000Z",
}
{
id = "folder_abc123",
organizationId = "org_xyz",
parentId = nil, -- nil si es carpeta raíz
name = "Scripts",
createdAt = "2025-01-15T10:30:00.000Z",
}

-- server.lua de tu resource "mi-tienda"
-- Carga los assets de una carpeta específica al arrancar
AddEventHandler("onResourceStart", function(resourceName)
if resourceName ~= GetCurrentResourceName() then return end
-- Listar carpetas para encontrar "Tienda"
exports.fivehub:ListFolders(function(err, data)
if err then print("[mi-tienda] Error listando carpetas:", err) return end
local tiendaFolder = nil
for _, folder in ipairs(data.folders) do
if folder.name == "Tienda" then
tiendaFolder = folder
break
end
end
if not tiendaFolder then
print("[mi-tienda] Carpeta 'Tienda' no encontrada")
return
end
-- Cargar assets de esa carpeta
exports.fivehub:ListAssets({ folderId = tiendaFolder.id }, function(aerr, adata)
if aerr then print("[mi-tienda] Error cargando assets:", aerr) return end
print("[mi-tienda] Assets cargados:", adata.total)
end)
end)
end)

fx_version "cerulean"
game "gta5"
name "fivehub"
description "FiveHub.pro API client for FiveM"
version "1.1.0"
server_scripts {
"config.lua",
"server.lua",
}