Манифест
Манифест описывает приложение: название, хранилища, разрешения, где оно открывается. Он бывает в двух видах.
В странице — для приложения из одного файла. Название берётся из <title>, остальное — из блока application/pairx+json (до 4 КиБ). В нём допустимы только поля stores, permissions, description и age_rating:
<title>Очередь на сдачу</title>
<script type="application/pairx+json">
{"description": "Очередь на сдачу лабораторной", "stores": {"queue": {"type": "log"}}}
</script>Файл pairx.app.json — в пакете из нескольких файлов, все поля:
{
"manifest_version": 1,
"name": "Очередь",
"description": "Очередь на сдачу лабораторной",
"icon": "img/icon.png",
"version": "1.2.0",
"entry": "index.html",
"min_bridge": "1.0",
"contexts": ["chat"],
"permissions": [],
"age_rating": "all",
"background_color": {"light": "#F5F6F8", "dark": "#101113"},
"stores": {"queue": {"type": "log", "writers": "everyone"}},
"locales": {"en": {"name": "Lab queue"}}
}Неизвестные поля — ошибка: опечатка не должна молча ничего не делать.
Поля#
| Поле | Тип | По умолчанию | Что |
|---|---|---|---|
manifest_version | 1 | 1 | Версия формата манифеста. |
name | string | из <title> или «Приложение» | Название, до 64 символов. |
description | string | "" | Описание, до 200 символов. |
icon | string? | Путь к значку в пакете. | |
version | string | "1.0.0" | Версия для людей; номер версии ставит сервис. |
entry | string | "index.html" | Входной HTML-файл. |
min_bridge | string | "1.0" | Наименьшая версия моста, с которой приложение работает. |
contexts | string[] | ["chat", "personal"] | Где приложение открывается. |
permissions | string[] | [] | Разрешения: человек соглашается на них при первом открытии. |
age_rating | "all" | "18+" | "all" | 18+ — спрашивает возраст при открытии и помечается. |
background_color | { light, dark }? | Цвет заставки, #RRGGBB. | |
stores | { [name]: { type, writers?, per_user_limit? } } | {} | Общие хранилища: имя — до 32 символов, строчная латиница, цифры и _, первая — буква. |
locales | { [lang]: { name?, description? } } | {} | Название и описание на других языках, до 20 языков. |
Хранилище в манифесте#
{"type": "counter", "writers": "everyone", "per_user_limit": 1}type—log,slot,docилиcounter, см. Хранилище.writers— кто пишет:everyone(по умолчанию),admins,author.per_user_limit— только уcounter: от 1 до 1 000 000.
Как хранилища можно менять в новых версиях — в разделе Публикация и версии.
Разрешения#
| Разрешение | Что даёт |
|---|---|
profile.basic | Имя человека (позже). |
chat.members | Имена участников чата (позже, только приложениям в чатах). |
clipboard.write | Копирование текста. |
Файлы#
| Что | Предел |
|---|---|
| Приложение из одного файла (быстрый режим) | HTML до 512 КиБ |
Блок application/pairx+json в странице | до 4 КиБ |
| Пакет из нескольких файлов | до 10 МиБ, до 500 файлов |
| Один файл пакета | до 5 МиБ |
| Типы файлов | .html, .htm, .js, .mjs, .css, .json, .png, .jpg, .jpeg, .webp, .gif, .svg, .woff2, .mp3, .ogg, .wasm |
Проверки#
Сервис проверяет каждую версию; pairx check делает то же самое на вашем компьютере.
| Код | Что ищет | Что будет |
|---|---|---|
webrtc | WebRTC: RTCPeerConnection, RTCDataChannel, RTCIceCandidate. | ручная проверка |
ice-server | Адрес STUN/TURN в строке: "stun:…", 'turn:…'. | ручная проверка |
frame-realm | Обращение к окну или документу фрейма: contentWindow, contentDocument, window.frames, window[0]. | ручная проверка |
miner | Признаки майнера криптовалюты. | ручная проверка |
detached-click | Нажатие ссылки из кода: созданная ссылка и click() в одном файле. | ручная проверка |
obfuscation | Признаки обфускации: eval или new Function вместе с раскодированием строк. | ручная проверка |
network | Сеть: fetch, XMLHttpRequest, WebSocket, EventSource, sendBeacon — наружу запросы не выполнятся, свои файлы читаются. | предупреждение |
external-url | Внешний адрес в src, href или import — не загрузится. | предупреждение |
webgl | WebGL — на iPhone его нет. | предупреждение |
audio | WebAudio (AudioContext) — на iPhone его нет. | предупреждение |
indexeddb | IndexedDB — на iPhone его нет; используйте localStorage или хранилища Pairx. | предупреждение |
wasm | Файл WebAssembly — на iPhone он не работает. | предупреждение |