Cluster · разработчикам
Профили и друзья
Раздел «Профили и друзья» доступен после входа. Профиль есть у каждого зарегистрированного пользователя, отдельно создавать его не нужно. Свой профиль открывается с дашборда, через карточку в боковом меню или по адресу #/people/<id>. Настройки безопасности остаются отдельным разделом. Открыть чужой профиль можно по логину или через имя автора на странице модуля.
В профиле есть отображаемое имя, логин, текст о себе, аватарка, баннер, публикации и друзья. Почта, Telegram ID, подписка, список установленных модулей и данные юзербота сюда не попадают.
Видимость
Для текста о себе, списка публикаций, друзей и изображений задаётся отдельная видимость:
- всем пользователям Cluster;
- только подтверждённым друзьям;
- только владельцу профиля.
Логин и отображаемое имя видны всем вошедшим пользователям. По умолчанию текст о себе, публикации и изображения доступны всем пользователям, список друзей доступен друзьям. Без входа страницы профилей и изображения не выдаются.
Настройки проверяются ядром при каждом запросе. Скрытое поле не отправляется в ответе, а запрос скрытого изображения возвращает null. Изменение видимости не удаляет копии, которые кто-то уже получил раньше.
Скрытие публикаций относится к их списку в профиле. Публичный модуль остаётся в общем каталоге. Непубличные модули видят только автор и назначенные тестеры, дружба сама по себе не открывает их.
Друзья
«Добавить в друзья» создаёт заявку. Получатель может принять или отклонить её, отправитель может отменить. После принятия любой участник может удалить другого из друзей. При этом доступ к полям с видимостью «Только друзьям» прекращается для новых запросов.
В своём разделе «Друзья» видны входящие и исходящие заявки и подтверждённые друзья. Приём новых заявок можно отключить. Одновременно допускается до 500 друзей и заявок на профиль; отправка ограничена 20 запросами в час.
Дружба не выдаёт овнерку, доверку, доступ к Telegram, файлам или другим данным юзербота.
Изображения
Сайт принимает PNG, JPEG и WebP до 12 МБ. Перед отправкой он уменьшает изображение и переводит в PNG. Ядро проверяет размеры, структуру и данные PNG, убирает метаданные и дополнительные блоки. Анимация и SVG не поддерживаются.
Для аватарки допустимы размеры до 512 × 512 и до 256 КБ после обработки, для баннера до 3200 × 1800 и до 4 МБ. Картинки подстраиваются под рамку: аватарка квадратная, баннер широкий. Важные детали лучше размещать ближе к центру. Для широкого экрана используйте баннер с шириной около 3200 пикселей: изображение меньшего разрешения растягивается под ширину страницы. Если PNG превышает 4 МБ, сайт постепенно уменьшает разрешение до допустимого размера. Ранее уменьшенную картинку нужно загрузить заново из исходника.
Изображения профиля и своих модулей хранятся в базе личного юзербота автора. В квоту входит размер сохранённой строки base64 и 2048 байт служебного резерва на изображение. Временный загруженный файл также занимает место до завершения сохранения; сайт затем удаляет его. Замена изображения освобождает прежний объём, удаление возвращает его в доступное место. Чужой овнер не может загрузить оформление в хранилище выбранного чужого юзербота: используется собственный профиль отправителя.
Оформление не изменяет пакет, номер версии или галочку проверки модуля. При удалении профиля его изображения удаляются вместе с личным хранилищем, а связи дружбы и настройки видимости убираются из служебной базы.
Овнеры
В «Настройках и доступе» овнеры отображаются списком с именами профилей. У первоначального владельца есть отдельная отметка. Для нового овнера укажи Telegram ID пользователя, у которого уже есть профиль Cluster и привязанный Telegram.
Для отзыва нажми «Отозвать доступ» возле нужного профиля. Операция работает и после отвязки Telegram у этого пользователя. Добавление и отзыв требуют пароль действующего овнера и код приложения, если включён двухэтапный вход. Первоначального владельца отозвать нельзя. Действие подтверждается ядром, активные терминалы после отзыва закрываются.
Поиск
На странице «Профили и друзья» доступен поиск по части логина или отображаемого имени, от двух символов. Поиск не учитывает регистр. Результаты содержат имя и логин; аватарка запрашивается отдельно с учётом видимости. Почта, Telegram ID и текст скрытого описания не участвуют в поиске. Заблокированные и удаляемые профили не показываются.
POST people/search принимает query и необязательный after. Ответ содержит profiles и next. Порция содержит до 20 совпадений; next передаётся без изменений. Если совпадений в проверенной части базы нет, но next не пуст, просмотр можно продолжить. Лимит составляет 60 запросов в минуту на профиль.
Описание
В описании поддерживается Markdown: выделение, ссылки, списки, цитаты, код и таблицы. В форме редактирования есть предпросмотр. HTML не выполняется, изображения из описания не загружаются. Для ссылок разрешены HTTP, HTTPS и mailto:; они открываются в отдельной вкладке без доступа к исходной странице. Ограничение описания составляет 4096 байт UTF-8, поэтому для кириллицы доступно меньше 4096 символов.
Галочка профиля
В своём профиле открой вкладку «Галочка». Выбери категорию, опиши профиль и при необходимости добавь до пяти ссылок HTTPS. Текст содержит от 20 символов до 4000 байт UTF-8. Для ссылок не допускаются учётные данные в адресе. Ядро сохраняет адреса, но не загружает их содержимое. Одновременно допускается одна ожидающая заявка; отправка ограничена тремя попытками в сутки. До рассмотрения заявку можно отменить.
Заявка и комментарий администратора доступны заявителю и администраторам. Остальные пользователи видят только галочку возле имени в профиле, поиске и списке друзей. Галочка профиля не подтверждает все опубликованные этим автором модули: проверка версии модуля остаётся отдельной отметкой.
После отказа отображается причина и можно подать новую заявку с учётом ограничения частоты. При снятии галочки в своём профиле виден комментарий администратора, если он указан. Заявки и история решений удаляются при окончательном удалении профиля.
Получение изображений через API
people/image, catalog/image и admin/image принимают kind (avatar или banner) и необязательный offset=0. Для небольшого изображения ответ сохраняет формат {data, mime} с base64-строкой PNG. Для большого добавляются offset, total и revision; одна часть содержит до 524288 символов base64. Следующий offset равен суммарной длине уже полученных частей. Сначала объединяются строки base64, затем декодируется изображение.
Запрос каждой части заново проверяет права и видимость. Если изображение скрыто, возвращается null. Если revision изменился между частями, получение начинается заново: фрагменты разных картинок объединять нельзя. Смещение должно быть неотрицательным целым числом, кратным 524288. Изображения и их части нельзя включать в общий публичный кеш.
Отметка основателя
У основателя сервиса своя галочка: шестигранная, с двойным контуром и подписью «Основатель Cluster». Одновременно две отметки не показываются. Эта отметка назначается отдельно оператором сервиса; её нельзя запросить через форму, записать в настройки профиля или выдать через обычное рассмотрение заявки. Галочка версии опубликованного им модуля по-прежнему независима от отметки автора.
Имя автора со ссылкой на профиль находится сразу на карточке каталога и на странице модуля. Возле имени показывается текущая отметка профиля. Она также отображается в поиске, друзьях, отзывах, списках овнеров, дашборде и административных карточках. После снятия обычной галочки новые ответы API больше её не содержат. Для удалённого профиля переход в недоступную страницу не предлагается.