Skip to main content

Чего нет

Неподдержанное отвечает отказом с именем возможности, а не молчаливой заглушкой. Молчаливое расхождение дороже отсутствия — «работает, но не так» всплывает у посетителя, а не у разработчика.

Возможности, которых нет

Чего нетЧто делать
Realtime — подписки на измененияопрос по интервалу
Edge Functions — исполнение вашего кода у наслогика в функциях базы; наружу — исходящие вызовы
/auth/v1/admin/*управление пользователями — своими функциями в схеме api
смена почты, SMS, MFA, корпоративный SSO —
RS256/JWKSтокены подписаны HS256 секретом базы
преобразования картинок, возобновляемая загрузка, S3-протоколготовьте файл на своей стороне; загрузка и раздача работают

⚠️ «Edge Functions нет» не значит «наружу нельзя». Уведомления в Telegram, вебхуки и вызовы чужих API работают — см. Исходящие вызовы. Нет именно исполнения вашего кода на нашей стороне.

Границы, о которых лучше знать заранее

ЧтоЗначение
Одновременных соединений у одной базы4 на процесс шлюза, процессов два — то есть 8; сверх — отказ db_too_busy
Файл в хранилищедо 10 МБ
Суточный предел запросовзадаётся у базы; без него не ограничен
Баз на организацию10 (напишите нам, если нужно больше)
Источников приёма у базы50

Отдельный код db_too_busy означает «перегружены вы», а не «перегружена платформа»: соседние базы при этом работают.

Клиент

Свой пакет — @layero/data. Он тонкий: вызов функций базы и внешних вызовов через шлюз, без обёртки над таблицами.

npm i @layero/data
import { createClient } from "@layero/data";

const db = createClient({
url: import.meta.env.VITE_LAYERO_DATA_URL, // https://data.layero.ru/<база>
key: import.meta.env.VITE_LAYERO_DATA_KEY, // pk_live_…
});

const menu = await db.rpc("menu");

⚠️ Версия 0.x: HTTP-контракт ещё меняется, пин версии в проде обязателен.

Для таблиц, фильтров и входа пользователей берите @supabase/supabase-js — контракт совместим, и он умеет всё, чего @layero/data пока не умеет. Обойтись можно и без пакетов, запрос уместится в несколько строк:

const call = (fn, args) =>
fetch(`${import.meta.env.VITE_LAYERO_DATA_URL}/rest/v1/rpc/${fn}`, {
method: "POST",
headers: { "content-type": "application/json",
apikey: import.meta.env.VITE_LAYERO_DATA_KEY },
body: JSON.stringify(args),
}).then((r) => r.json());