@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 +98 -0
- package/dist/index.cjs +2646 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +511 -0
- package/dist/index.d.ts +511 -0
- package/dist/index.js +2616 -0
- package/dist/index.js.map +1 -0
- package/package.json +57 -0
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`).
|