@layero/data
v0.1.0
Published
Клиент Layero Data API: вызов функций базы и внешних сервисов из браузера
Readme
@layero/data
Клиент Layero Data API — вызов функций вашей базы и внешних сервисов прямо из браузера, без своего бэкенда.
npm i @layero/data⚠️ Версия 0.x. HTTP-контракт ещё меняется: следующий этап добавит доступ к таблицам и JWT. Пин версии в проде — ваш друг.
Быстро
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");Публичный ключ pk_… и должен лежать в браузере: сам по себе он ничего не
открывает. Доступ дают гранты и RLS в вашей базе — пока вы не открыли функцию
или таблицу, запросы вернут «нет прав».
Секретный ключ sk_… сюда класть нельзя. Он для сервера: в бандле
фронтенда его увидит любой посетитель.
Вход пользователей приложения
Библиотека не решает, как устроена ваша авторизация. Токен — просто значение, которое она подставит в аргументы, если вы попросите:
const { token } = await db.rpc("signin", { email, password });
db.setToken(token);
const mine = await db.rpc("orders_list"); // token уедет самФункции, которые токен не принимают, зовите с { auth: false }:
await db.rpc("menu", {}, { auth: false });Шлюз сверяет имена аргументов с каталогом базы и честно отвечает «у функции
нет аргумента token», а не выбрасывает лишнее молча. Имя аргумента
настраивается: createClient({ …, tokenArg: "p_token" }).
Внешние сервисы
Зовём по имени описания, а не по адресу. Адрес, заголовки и ключ поставщика живут на стороне платформы, поэтому в бандл они не попадают и вызов нельзя перенаправить:
const { data } = await db.call("rate_usd", { code: "USD" });Ошибки
Сообщение из вашей функции доходит дословно — его писали для посетителя:
try {
await db.rpc("order_create", { product_id: 7 });
} catch (e) {
console.log(e.message); // «На складе только 40»
console.log(e.code); // app_error
console.log(e.fixSql); // на ошибках прав — готовый GRANT
}e.fixSql приходит на самые частые отказы по правам: скопируйте его в
SQL-редактор панели, и вызов заработает.
Что внутри
Под клиентом обычный POST с ключом в заголовке — и это видно из исходника.
Библиотека намеренно почти ничего не прячет: когда что-то не работает, вы
должны понимать, какой запрос ушёл, а не искать причину внутри абстракции.
Адрес — параметр, а не константа: локальный стенд, тесты против заглушки и смена домена не требуют новой версии пакета.
