
После подключения скрипта доступен глобальный объект: window.LcPanel.HTML<script src="https://dash.leecyber.com/assets/scripts/mapp_sdk.js"></script>
|
Параметр |
Описание |
|
client_id |
Client ID мини-приложения |
|
parent_origin |
Origin панели для безопасного postMessage |
JAVASCRIPT// Получаем параметры из URL const params = new URLSearchParams(window.location.search); const clientId = params.get('client_id'); const parentOrigin = params.get('parent_origin'); // Инициализация SDK LcPanel.init({ clientId: clientId, parentOrigin: parentOrigin, // рекомендуется явно передавать }); // Сообщаем панели, что приложение готово LcPanel.ready();
|
Поле |
Тип |
Описание |
|
userId |
string |
ID пользователя |
|
orgId |
string |
ID организации |
|
locale |
string |
Язык интерфейса в формате: ru, en, kz... |
|
theme |
enum: white | dark |
Тема панели: светлая, темная |
|
appScopes |
string[] |
Scopes внутри мини-приложения |
|
availableScopes |
string[] |
Доступные scopes |
|
iamScopes |
string[] |
IAM Scopes, выданные пользователем |
|
Параметр |
Тип |
Значения |
|
message |
string |
- |
|
level |
string |
success, error, warning, info |
|
Параметр |
Тип |
Описание |
|
redirectUri |
string |
URL перенаправления после авторизации |
|
redirect_uri |
string |
Альтернативное имя для redirectUri |
|
scopes |
string[] |
Запрашиваемые scopes |
|
scope |
string |
Scopes через пробел или запятую |
|
Тип |
Ответ |
Описание |
|
APP_READY |
Нет |
Приложение готово |
|
GET_CONTEXT |
Да |
Запрос контекста |
|
SHOW_NOTIFICATION |
Нет |
Уведомление |
|
REQUEST_OAUTH |
Нет |
Запуск авторизации |
|
CLOSE |
Нет |
Закрыть приложение |
|
STORAGE_GET |
Да |
Чтение хранилища |
|
STORAGE_PUT |
Да |
Запись в хранилище |
|
STORAGE_DELETE |
Да |
Удаление из хранилища |
JAVASCRIPTconst SETTINGS_KEY = 'app-settings'; async function loadSettings() { try { const { value } = await LcPanel.storage.get(SETTINGS_KEY); return value || getDefaultSettings(); } catch { return getDefaultSettings(); } } async function saveSettings(settings) { await LcPanel.storage.put(SETTINGS_KEY, settings); LcPanel.notify({ level: 'success', message: 'Настройки сохранены' }); }
|
Проблема |
Причина |
Решение |
|
SDK не отвечает |
Приложение открыть не в панели |
Откройте через панель |
|
timeout |
Панель не получила сообщение |
Проверьте parentOrigin |
|
Пустой контекст |
Пользователь не авторизован или не выдан доступ |
Проверьте доступ к мини-приложению |
|
Storage error |
Невалидный ключ или ошибка API |
Проверьте ключ и сеть |
JAVASCRIPTconst parentOrigin = new URLSearchParams(location.search).get('parent_origin'); LcPanel.init({ clientId, parentOrigin });
2. Вызывайте ready() после загрузки UI
JAVASCRIPTasync function bootstrap() { LcPanel.init({ clientId, parentOrigin }); const context = await LcPanel.getContext(); renderApp(context); LcPanel.ready(); }
3. Реагируйте на смену темы
JAVASCRIPTLcPanel.on('THEME_CHANGED', ({ theme }) => { document.documentElement.dataset.theme = theme; });
4. Не храните секреты в хранилище. Оно предназначено для пользовательских настроек и состояния UI, не для секретов и токенов.
5. Обрабатывайте ошибки
JAVASCRIPTasync function safeGet(key, fallback = null) { try { const { value } = await LcPanel.storage.get(key); return value ?? fallback; } catch { return fallback; } }
JAVASCRIPT// Инициализация LcPanel.init({ clientId, parentOrigin }); LcPanel.ready(); // Контекст const ctx = await LcPanel.getContext(); // Уведомления LcPanel.notify({ level: 'success', message: 'Готово' }); // OAuth LcPanel.requestOAuth({ scopes: ['id.read'] }); // Storage await LcPanel.storage.put('key', { foo: 'bar' }); const { value } = await LcPanel.storage.get('key'); await LcPanel.storage.remove('key'); // События LcPanel.on('THEME_CHANGED', (p) => console.log(p.theme)); // Закрытие LcPanel.close(); // Очистка LcPanel.destroy();