Backend i SDK

API-ji trećih strana (b77.http)

Pozovi bilo koji HTTPS API sa svojim tajnim ključevima, a da ih ne otkriješ.

b77.http.fetch poziva HTTPS API treće strane s poslužitelja builder77. Tvoji API ključevi spremljeni su u Postavke → Tajni ključevi, a u kodu se pišu kao {{secret:NAME}}: poslužitelj ih sam umeće, pa nikad ne dolaze do preglednika.

const res = await b77.http.fetch('https://api.openai.com/v1/chat/completions', {
  method: 'POST',                                          // default GET
  headers: { Authorization: 'Bearer {{secret:OPENAI_API_KEY}}' },
  body: { model: 'gpt-4o-mini', messages: [{ role: 'user', content: 'Hi!' }] }, // object → JSON, or a string
});
if (res.ok) console.log(res.data);  // { ok, status, headers, body (text), data (parsed JSON or null) }

Svaki poziv troši 1 kredit za integracije. Samo https, vremensko ograničenje od 15 sekundi, odgovori do 1 MB. Ako API vrati tvoj ključ, on se zamjenjuje s [secret] prije nego što tvoja aplikacija vidi odgovor.

Pravila za svaki tajni ključ

Svatko tko koristi tvoju aplikaciju može slati pozive s tajnim ključem — a da ga ne vidi. Zato svaki ključ radi samo onako kako dopustiš:

  • Dopušteni hostovi — jedini poslužitelji kojima se ikad šalje (npr. api.openai.com; *.example.com obuhvaća i poddomene).
  • Dopuštene metode — prema zadanim postavkama GET i POST.
  • Dopuštene putanje — neobavezni prefiksi putanja, poput /v1/chat/. Prazno znači bilo koja putanja.
  • Gdje se ključ smije nalaziti — prema zadanim postavkama samo u zaglavlju za autentifikaciju (Authorization, X-Api-Key, Api-Key, X-Goog-Api-Key i slična). Parametri upita (po nazivu, npr. key), putanja URL-a i tijelo zahtjeva isključeni su dok ih ne uključiš.

Poziv koji krši pravilo odbija se sa statusom 403 prije nego što se išta pošalje.

Ključevi u URL-u ili tijelu zahtjeva

Biraj API-je koji ključ primaju u zaglavlju. Neki ga umjesto toga stavljaju u adresu — dopusti točno to mjesto i suzi putanju:

// Settings → Secrets: TELEGRAM_TOKEN, host api.telegram.org, "In the URL path" on,
// allowed path /bot{{secret:TELEGRAM_TOKEN}}/sendMessage
await b77.http.fetch('https://api.telegram.org/bot{{secret:TELEGRAM_TOKEN}}/sendMessage', {
  method: 'POST',
  body: { chat_id: 12345, text: 'New booking!' },
});

Opciju U tijelu zahtjeva dopusti samo ako je API zahtijeva: tada bi svatko tko koristi tvoju aplikaciju mogao upisati ključ u bilo što što taj API sprema (poruku, bilješku, javnu datoteku) i ponovno ga pročitati.