FastOG SDK — Descarga y uso
Un archivo por lenguaje, cero dependencias, sin necesidad de gestor de paquetes. Descárgalo a continuación (o curl desde nuestro CDN) y cópialo en tu proyecto (solo en el lado del servidor). Se mantiene como v1 aquí mismo — cuando el contrato cambie, actualizamos esta página y los archivos descargables juntos. Para el contrato de firma completo e implementaciones hechas a mano en cualquier lenguaje, consulta Integración con Agent y LLM.
Descargas
Elige un lenguaje y pulsa descargar (o clic derecho → Guardar como):
| Lenguaje | Descarga |
|---|---|
| Node.js (CommonJS) | ⬇ fastog.js |
| Svelte / SvelteKit (ESM) | ⬇ fastog.js |
| PHP | ⬇ FastOg.php |
| Ruby / Rails | ⬇ fastog.rb |
| Python (Django / FastAPI / Flask) | ⬇ fastog.py |
| Go | ⬇ fastog.go |
| Express (Node) | ⬇ fastog.js |
| Next.js (App Router) | ⬇ fastog.js |
| Astro | ⬇ fastog.js |
| Vue / Nuxt | ⬇ fastog.js |
Estos enlaces apuntan a
/sdk/<file>, que sirve el archivo como descarga — o usacurl -O https://fastog.com/sdk/<file>si prefieres la línea de comandos.
Vue, Next.js, Astro y Express se ejecutan en Node — comparten los mismos archivos de firma probados (CommonJS para Express, ESM para el resto); solo cambia el uso/README. El sdk/<name>/README.md de cada framework muestra la integración exacta.
Cada archivo es el SDK completo. Cópialo en tu proyecto, require/import, y listo.
Uso
Node.js
const { ogImageUrl } = require("./fastog.js");
const url = ogImageUrl(
{
template: "blog",
title: "Hello World",
features: ["Free shipping", "30-day returns"],
},
{ key: process.env.FASTOG_API_KEY, secret: process.env.FASTOG_HMAC_SECRET },
);
SvelteKit (en +page.server.js / +layout.server.js)
import { ogImageUrl } from "$lib/fastog.js";
const url = ogImageUrl(params, {
key: process.env.FASTOG_API_KEY,
secret: process.env.FASTOG_HMAC_SECRET,
});
PHP
use FastOg\FastOg;
$url = FastOg::signedUrl($params, getenv('FASTOG_API_KEY'), getenv('FASTOG_HMAC_SECRET'));
Ruby / Rails
url = FastOg.signed_url(params, ENV.fetch("FASTOG_API_KEY"), ENV.fetch("FASTOG_HMAC_SECRET"))
Python (Django / FastAPI / Flask)
import fastog
url = fastog.signed_url(params, os.environ["FASTOG_API_KEY"], os.environ["FASTOG_HMAC_SECRET"])
Go
url := fastog.SignedURL(params, os.Getenv("FASTOG_API_KEY"), os.Getenv("FASTOG_HMAC_SECRET"))
Express / Next.js / Astro / Vue (Node) — importa el firmante (signer), llama a ogImageUrl(params, { key, secret }) en tu código de servidor y renderiza la URL en el <head>. Consulta la sdk/<name>/README.md de cada framework.
Coloca url en <meta property="og:image">. Los rastreadores (crawlers) hacen GET de esa URL: se cachea en el edge y se genera un solo render por imagen única.
Control de versiones
Esta es la v1 y se mantiene en su lugar. Cuando el contrato cambia, actualizamos los archivos y esta página juntos (v2, v3, …): tú actualizas volviendo a descargarlos. No hay registro de paquetes que sincronizar, ni ceremonia de semver, ni desviación entre múltiples paquetes.
Cómo funciona
canonical = sorted enc(key)=enc(value) pairs of every param except `s`, including `key`
message = "GET/api/v1/og" + "\n" + canonical
signature = hex(HMAC-SHA256(message, secret))
- Cualquier cambio en un parámetro invalida la firma →
401, sin renderizado, sin consumo de cuota. - Parámetros idénticos → URL idéntica → almacenable en caché en el edge para siempre.
- Los parámetros de tipo array (
features) se emiten comokey[]=/key[0]=para que el servidor los decodifique correctamente. - Revocación rotando el secreto de la clave.
Verificación
Todos los SDK se prueban contra el mismo vector dorado generado por el servidor de FastOG:
canonical = features=30-day%20returns&features=Free%20shipping&key=sk_test123&template=blog&title=Hello%20World
signature = a79232b15b45002aee76174f542e0a661b37cb1259df01e263c952ca4052a54d
Si tu copia produce esa firma para esos parámetros, el servidor aceptará tus URLs.
Seguridad
secretes solo del lado del servidor — nunca en el navegador, nunca en un script público de CDN.keyes público (aparece en las URLs) — eso es lo esperado.- Firma en tu servidor; la URL de FastOG es lo que incrustas, no el secreto.