API на трети страни (b77.http)
Извиквай всяко HTTPS API с тайните си ключове, без да ги разкриваш.
b77.http.fetch извиква HTTPS API на трета страна от сървърите на builder77. API ключовете ти се пазят в Настройки → Тайни ключове и се пишат в кода като {{secret:NAME}}: сървърът ги попълва, така че те никога не стигат до браузъра.
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) }Всяко извикване използва 1 кредит за интеграции. Само https, време за изчакване 15 секунди, отговори до 1 MB. Ако API върне ключа ти обратно, той се заменя с [secret], преди приложението ти да види отговора.
Правила за всеки таен ключ
Всеки, който използва приложението ти, може да прави заявки с таен ключ — без да го вижда. Затова всеки ключ работи само така, както позволиш:
- Разрешени хостове — единствените сървъри, до които изобщо се изпраща (напр.
api.openai.com;*.example.comпокрива и поддомейните). - Разрешени методи — по подразбиране GET и POST.
- Разрешени пътища — незадължителни префикси на пътя, например
/v1/chat/. Празно означава всеки път. - Къде може да се постави ключът — по подразбиране само в хедър за удостоверяване (Authorization, X-Api-Key, Api-Key, X-Goog-Api-Key и подобни). Параметрите на заявката (по име, напр.
key), пътят на URL адреса и тялото на заявката са изключени, докато не ги включиш.
Заявка, която нарушава правило, се отхвърля със статус 403, преди да бъде изпратено каквото и да е.
Ключове в URL адреса или тялото
Предпочитай API, които приемат ключа в хедър. Някои го слагат в адреса — разреши точно това място и стесни пътя:
// 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!' },
});Разрешавай В тялото на заявката само ако API го изисква: тогава всеки, който използва приложението ти, може да запише ключа във всичко, което това API запазва (съобщение, бележка, публичен файл), и после да го прочете.