@wowlabtech/mini-app-adapter 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,98 @@
1
+ # Mini App Adapter
2
+
3
+ Набор адаптеров и React-хуков, который выравнивает API популярных mini-app платформ (Telegram, VK, MAX, Web и фирменные Shell-контейнеры) и позволяет переиспользовать бизнес-логику без платформенных `if/else`.
4
+
5
+ ## Возможности
6
+ - Автоопределение платформы (`detectPlatform`) и универсальный фабричный метод `createAdapter()`.
7
+ - Единый `MiniAppAdapter` контракт: цвета интерфейса, back button, popup, QR-сканер, шэринг, haptics, clipboard, push-токен и deep-link события.
8
+ - React-провайдер `AdapterProvider` с хуками `useMiniAppAdapter`, `useAdapterTheme`, `useSafeArea`.
9
+ - VK-пиксель и конверсионная аналитика (`configureVkPixel`, `trackConversionEvent`, `trackPixelEvent`).
10
+ - Встроенный shell-bridge (push токены, deep links, нативный QR, запрос токена / пуш-разрешений).
11
+
12
+ ## Поддерживаемые платформы
13
+ | Платформа | Адаптер | Особенности |
14
+ | --- | --- | --- |
15
+ | Telegram Mini Apps | `TelegramMiniAppAdapter` | Поддержка `tg-back-button`, viewport CSS vars, haptics. |
16
+ | VK Mini Apps | `VKMiniAppAdapter` | VK Bridge, safe-area watcher, pixel конверсии. |
17
+ | MAX Mini Apps | `MaxMiniAppAdapter` | Встроенные popup/share/requestPhone вызовы. |
18
+ | Shell (iOS / Android) | `ShellMiniAppAdapter` | Вызовы через NativeBridge: QR, push токены, deep links. |
19
+ | Web fallback | `WebMiniAppAdapter` | Degraded функциональность в браузере без vendor SDK. |
20
+
21
+ ## Установка
22
+ ```bash
23
+ npm install @wowlabtech/mini-app-adapter
24
+ # или
25
+ yarn add @wowlabtech/mini-app-adapter
26
+ ```
27
+ > Пакет ожидает `react` и `react-dom` версии 19+ как `peerDependencies`.
28
+
29
+ ## Быстрый старт
30
+ ```tsx
31
+ import { createAdapter, AdapterProvider } from '@wowlabtech/mini-app-adapter';
32
+ import { createRoot } from 'react-dom/client';
33
+ import App from './App';
34
+
35
+ async function bootstrap() {
36
+ const adapter = createAdapter({ vk: { pixelCode: 'VK-XXXX' } });
37
+ await adapter.init({ debug: import.meta.env.DEV });
38
+
39
+ const root = createRoot(document.getElementById('root')!);
40
+ root.render(
41
+ <AdapterProvider adapter={adapter}>
42
+ <App />
43
+ </AdapterProvider>,
44
+ );
45
+ }
46
+
47
+ bootstrap();
48
+ ```
49
+
50
+ ## Использование адаптера
51
+ ```ts
52
+ import { createAdapter } from '@wowlabtech/mini-app-adapter';
53
+
54
+ const adapter = createAdapter('telegram');
55
+ await adapter.init({ eruda: true });
56
+
57
+ adapter.setColors({ header: '#0a0a0a', background: '#ffffff' });
58
+ adapter.onBackButton(() => adapter.closeApp());
59
+ adapter.showPopup({ title: 'Готово', message: 'Данные сохранены' });
60
+ const qr = await adapter.scanQRCode();
61
+ ```
62
+
63
+ ### React-хуки
64
+ - `useMiniAppAdapter()` — быстрый доступ к активному адаптеру внутри компонентов.
65
+ - `useAdapterTheme()` — хранит пользовательское предпочтение (`system` / `light` / `dark`) и синхронизирует `adapter.setColors`.
66
+ - `useSafeArea()` — объединяет CSS/env/viewport-инсеты и возвращает `{ top, right, bottom, left }`.
67
+
68
+ ### Shell API
69
+ ```ts
70
+ import { shell, requestShellPushPermission, storeShellToken } from '@wowlabtech/mini-app-adapter';
71
+
72
+ shell.onPushToken((token) => console.log('native push token', token));
73
+ shell.onDeepLink((path) => console.log('deep link', path));
74
+ const value = await shell.openNativeQR();
75
+ requestShellPushPermission();
76
+ storeShellToken({ token: 'abc', source: 'vk' });
77
+ ```
78
+
79
+ ### Аналитика VK
80
+ ```ts
81
+ import { configureVkPixel, trackPixelEvent, trackConversionEvent } from '@wowlabtech/mini-app-adapter';
82
+
83
+ configureVkPixel('VK-123456');
84
+ trackConversionEvent('purchase', { amount: 990, currency: 'RUB' });
85
+ trackPixelEvent('ViewContent', { sku: 'SKU-1' });
86
+ ```
87
+
88
+ ## Дополнительные материалы
89
+ - `docs/adapter-lifecycle-audit.md` — заметки по очистке ресурсов и lifecycle.
90
+ - `docs/adapter-shared-utilities.md` — обзор общих утилит (safe area, viewport, bridge-хелперы).
91
+
92
+ ## Скрипты разработки
93
+ - `npm run build` — компиляция через `tsup` (`dist/`).
94
+ - `npm run build:watch` — сборка в watch-режиме.
95
+ - `npm run lint` / `npm run lint:fix` — ESLint с правилами React + TypeScript.
96
+
97
+ ## Лицензия
98
+ MIT (см. `package.json`).