App SDK
Пакет @bazex/app-sdk предоставляет TypeScript-типы, константы, проверку подписей, обработчики хуков и хелперы для взаимодействия через iframe.
Установка
npm install @bazex/app-sdkПроверка подписи
Проверяйте подписи вебхуков и хуков с использованием сравнения с постоянным временем выполнения:
verifySignaturetypescript
import { verifySignature, isTimestampFresh } from '@bazex/app-sdk';
// signature: "sha256=<hex>" from X-Webhook-Signature header
// timestamp: unix seconds from X-Webhook-Timestamp header
// body: raw JSON body string
// secret: your webhook secret (whsec_...) or access token (fbat_...)
const valid = verifySignature(signature, timestamp, body, secret);
const fresh = isTimestampFresh(timestamp); // default: 5 min window
const freshCustom = isTimestampFresh(timestamp, 600); // 10 min windowОбработчик хуков
Утилита createHookHandler выполняет проверку подписи, валидацию временных меток и маршрутизацию к нужному обработчику:
Express exampletypescript
import { createHookHandler, HookPoints } from '@bazex/app-sdk';
const handleHook = createHookHandler({
secret: process.env.BAZEX_ACCESS_TOKEN!,
handlers: {
[HookPoints.CHECKOUT_PAYMENT_METHODS]: async (data, ctx) => {
return {
methods: [
{ id: 'card', name: 'Credit Card', description: 'Visa/Mastercard' },
{ id: 'cash', name: 'Cash on Delivery' },
],
};
},
[HookPoints.CHECKOUT_SHIPPING_RATES]: async (data) => {
const { subtotal, locality } = data;
return { fee: subtotal > 2000 ? 0 : 300 };
},
[HookPoints.ORDER_VALIDATE]: async (data) => {
if (data.subtotal < 500) {
return { valid: false, reason: 'Minimum order is 500₽' };
}
return { valid: true };
},
},
});
// In your Express/Fastify route:
app.post('/hooks', async (req, res) => {
const result = await handleHook({
headers: req.headers as Record<string, string>,
body: JSON.stringify(req.body),
});
res.status(result.status).json(result.body);
});ℹ
Контекст обработчика
Каждый обработчик получает
(data, ctx), где ctx содержитhookPoint, businessId и timestamp.Клиент блока (iframe)
Используйте BazexBlock внутри iframe вашего блока для взаимодействия с конструктором сайта:
Inside your block iframetypescript
import { BazexBlock } from '@bazex/app-sdk';
// Wait for initialization from the site builder
const { settings, blockId } = await BazexBlock.ready();
// Render your block UI with the settings
renderUI(settings);
// Listen for real-time settings updates (user changes in sidebar)
BazexBlock.onSettingsUpdate((newSettings) => {
renderUI(newSettings);
});
// Request iframe resize (max height: 400px)
BazexBlock.resize(250);Взаимодействие происходит через postMessage по следующему протоколу:
| Сообщение | Направление | Назначение |
|---|---|---|
| BAZEX_BLOCK_READY | iframe → parent | Блок загружен и готов |
| BAZEX_BLOCK_INIT | parent → iframe | Начальные настройки + blockId |
| BAZEX_BLOCK_UPDATE | parent → iframe | Настройки изменены пользователем |
| BAZEX_BLOCK_RESIZE | iframe → parent | Запрос на изменение высоты/ширины |
Константы
SDK экспортирует полезные константы, которые можно использовать в вашем коде:
import {
HookPoints, // { CHECKOUT_PAYMENT_METHODS, CHECKOUT_CREATE_PAYMENT, ... }
EventTypes, // { ORDER_CREATED, ORDER_STATUS_CHANGED, ... }
AppScopes, // { READ_PRODUCTS, WRITE_PRODUCTS, ... }
VALID_SCOPES, // string[] of all valid scope values
VALID_EVENT_TYPES,// string[] of all event type values
VALID_HOOK_POINTS,// string[] of all hook point values
SCOPE_DESCRIPTIONS, // Record<scope, description>
SCOPE_EVENT_MAP, // Record<scope, eventType[]>
} from '@bazex/app-sdk';Экспорт типов
Полные TypeScript-типы для манифестов приложений, payload хуков и событий вебхуков:
import type {
// Manifest
AppManifest,
AppBlockDef,
AppEmbedDef,
AppHookDef,
// Hook payloads & responses
HookRequest,
PaymentMethodsPayload,
PaymentMethodsResponse,
CreatePaymentPayload,
CreatePaymentResponse,
ShippingRatesPayload,
ShippingRatesResponse,
OrderValidatePayload,
OrderValidateResponse,
CalculateDiscountsPayload,
CalculateDiscountsResponse,
// Webhook event data
WebhookDelivery,
OrderCreatedData,
OrderStatusChangedData,
OrderDeliveredData,
OrderCancelledData,
PaymentCompletedData,
PaymentExpiredData,
ReviewCreatedData,
ReviewDeletedData,
ProductCreatedData,
ProductUpdatedData,
ProductDeletedData,
ProductOutOfStockData,
ProductLowStockData,
ProductBackInStockData,
} from '@bazex/app-sdk';