FastOG SDK — Download e Uso
Um arquivo por linguagem, zero dependências, sem necessidade de gerenciador de pacotes. Baixe abaixo (ou curl do nosso CDN) e copie para o seu projeto (somente no lado do servidor). Mantido como v1 aqui mesmo — quando o contrato mudar, atualizamos esta página e os arquivos para download juntos. Para o contrato completo de assinatura + implementações feitas à mão em qualquer linguagem, consulte Integração com Agentes e LLMs.
Downloads
Escolha uma linguagem e clique em download (ou clique com o botão direito → Salvar como):
| Linguagem | Download |
|---|---|
| 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 |
Esses links apontam para
/sdk/<file>, que serve o arquivo como download — ou usecurl -O https://fastog.com/sdk/<file>se preferir a linha de comando.
Vue, Next.js, Astro e Express rodam em Node — eles compartilham os mesmos arquivos de assinatura testados (CommonJS para Express, ESM para os demais); apenas o uso/README difere. O sdk/<name>/README.md de cada framework mostra a integração exata.
Cada arquivo é o SDK completo. Copie-o para o seu projeto, faça require/import e pronto.
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 (em +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) — importe o signer, chame ogImageUrl(params, { key, secret }) no seu código de servidor e renderize a URL no head. Veja a sdk/<name>/README.md de cada framework.
Coloque url em <meta property="og:image">. Os crawlers fazem GET nele — com cache na edge, uma renderização por imagem única.
Controle de versão
Esta é a v1 e é mantida no mesmo local. Quando o contrato muda, incrementamos os arquivos e esta página juntos (v2, v3, …) — você atualiza baixando novamente. Não há registro de pacotes para sincronizar, nenhuma cerimônia de semver, nenhuma divergência entre pacotes.
Como 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))
- Qualquer alteração em um parâmetro invalida a assinatura →
401, sem renderização, sem contagem de cota. - Parâmetros idênticos → URL idêntica → armazenável em cache na borda para sempre.
- Parâmetros de array (
features) são emitidos comokey[]=/key[0]=para que o servidor os decodifique corretamente. - Revogue rotacionando o segredo da chave.
Verificação
Todos os SDKs são testados contra o mesmo vetor dourado (golden vector) produzido pelo servidor FastOG:
canonical = features=30-day%20returns&features=Free%20shipping&key=sk_test123&template=blog&title=Hello%20World
signature = a79232b15b45002aee76174f542e0a661b37cb1259df01e263c952ca4052a54d
Se a sua cópia produz essa assinatura para esses parâmetros, o servidor aceitará suas URLs.
Segurança
secreté exclusivamente do lado do servidor — nunca no navegador, nunca em um script público de CDN.keyé público (aparece nas URLs) — isso é esperado.- Assine no seu servidor; a URL do FastOG é o que você incorpora, não o segredo.