FastOG SDK — Download & brug
Én fil pr. sprog, nul afhængigheder, ingen pakkehåndtering nødvendig. Download den nedenfor (eller curl den fra vores CDN) og kopier den ind i dit projekt (kun server-side). Vedligeholdes som v1 lige her — når kontrakten ændres, opdaterer vi denne side og de downloadbare filer sammen. For den fulde signeringskontrakt + håndlavede implementeringer på ethvert sprog, se Agent & LLM-integration.
Downloads
Vælg et sprog, og klik på download (eller højreklik → Gem som):
| Sprog | 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 |
Disse links peger på
/sdk/<file>, som serverer filen som en download — eller brugcurl -O https://fastog.com/sdk/<file>, hvis du foretrækker kommandolinjen.
Vue, Next.js, Astro og Express kører på Node — de deler de samme testede signer-filer (CommonJS til Express, ESM til resten); kun brugen/README adskiller sig. Hvert frameworks sdk/<name>/README.md viser den præcise integration.
Hver fil er hele SDK'et. Kopier den ind i dit projekt, require/import den, og så er du færdig.
Anvendelse
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 (i +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) — importer underskriveren, kald ogImageUrl(params, { key, secret }) i din serverkode, og gengiv URL'en i head-sektionen. Se hvert frameworks sdk/<name>/README.md.
Placer url i <meta property="og:image">. Crawlere henter den via GET — edge-cachet, én gengivelse pr. unikt billede.
Versionering
Dette er v1, og det vedligeholdes på samme sted. Når kontrakten ændres, opdaterer vi filerne og denne side sammen (v2, v3, …) — du opdaterer ved at hente dem igen. Der er intet pakkeregister at synkronisere, ingen semver-ceremonier og ingen uoverensstemmelser mellem flere pakker.
Sådan fungerer det
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))
- Enhver ændring af en parameter ugyldiggør signaturen →
401, ingen rendering, ingen kvotetælling. - Identiske parametre → identisk URL → kan cachelagres ved kanten (edge) for evigt.
- Array-parametre (
features) udsendes somkey[]=/key[0]=, så serveren afkoder dem korrekt. - Tilbagekald ved at rotere nøglens hemmelighed.
Verifikation
Alle SDK'er testes mod den samme gyldne vektor (golden vector), som genereres af FastOG-serveren:
canonical = features=30-day%20returns&features=Free%20shipping&key=sk_test123&template=blog&title=Hello%20World
signature = a79232b15b45002aee76174f542e0a661b37cb1259df01e263c952ca4052a54d
Hvis din kopi producerer den signatur for disse parametre, vil serveren acceptere dine URL'er.
Sikkerhed
secreter kun til serveren — aldrig i browseren, aldrig i et offentligt CDN-script.keyer offentlig (den vises i URL'er) — det er forventet.- Signér på din server; det er FastOG-URL'en, du indlejrer, ikke hemmeligheden.