Pairxдля разработчиков

Где открывается приложение

Одно и то же приложение может работать в трёх местах. Данные у каждого свои; узнать, где оно открыто, можно вызовом context.get:

const { kind } = await pairx.call("context.get");   // "chat" | "personal" | "preview"

В чате#

Приложение, отправленное в чат, — это экземпляр: сообщение-карточка, которую открывают все участники. У экземпляра общие хранилища: очередь одна на всех, голоса видны всем.

  • Писать могут участники чата — с учётом прав хранилища (writers) и прав в самом чате: где писать нельзя, запись отклоняется с forbidden.
  • Автор экземпляра — тот, кто отправил приложение в этот чат. Для хранилищ с writers: "admins" к нему добавляются администраторы чата.
  • Каждая отправка — новый экземпляр с чистыми данными. Одно приложение в двух чатах или дважды в одном чате — разные экземпляры.
  • Подходит для личного диалога, группы и «Избранного».

Лично#

Ссылка https://pairx.org/app/<id> открывает приложение для одного человека — у него свой личный контекст. По той же ссылке человек возвращается к своим данным. Так открываются и приложения из «Профиль → Приложения».

  • Хранилища работают так же, но пишет в них только сам человек; другие их не видят.
  • Подходит для тренажёров, заметок, калькуляторов — всего, чем не нужно делиться.

Приложение из одного файла открывается и в чате, и лично. Пакет из нескольких файлов может ограничить это полем contexts в pairx.app.json — например, очередь имеет смысл только в чате:

{"contexts": ["chat"]}

В странице этого поля нет: если приложению нужен чат, проверьте context.get и объясните человеку, что его стоит отправить в чат.

Предпросмотр#

Автор открывает приложение перед отправкой. Данные предпросмотра отдельные и не сохраняются: следующий предпросмотр начинается с чистого листа. context.get отдаёт kind: "preview" и preview: true — например, чтобы показать подсказку «Это предпросмотр, участники пока ничего не видят».

Одно приложение для всех мест#

const { kind } = await pairx.call("context.get");
if (kind === "personal") {
  document.body.classList.add("solo");        // без списка участников
}

Ни в каком месте приложение не узнаёт, в каком именно чате оно открыто и кто в нём состоит: только вид контекста и ID человека внутри приложения.