npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

@iassasin/wschatapi

v2.1.0

Published

SinAir chat api

Readme

wschatapi

API для написания своих клиентов к чату https://chat.sinair.ru/

Установка

Для использования в nodejs:

npm install @iassasin/wschatapi ws

Для использования в браузере:

npm install @iassasin/wschatapi

Быстрый старт

const {WsChat, WsChatEvents} = require('@iassasin/wschatapi');

// в async функции:
let chat = new WsChat('wss://sinair.ru/ws/chat');
await chat.open();

chat.on(WsChatEvents.message, async (room, message) => {
	if (message.message === 'Пока') {
		room.sendMessage('Пока!');
		await chat.close();
	}
});

let room = await chat.joinRoom('#test');
room.sendMessage('/nick testbot');
room.sendMessage('Привет, я бот!');

Методы API

В API используются два класса, доступные пользователю:

  • WsChat - основной класс подключения и обработки событий;
  • Room - класс подключения к конкретной комнате, его нельзя инстанцировать вручную, но к нему появляется доступ после подключения к комнате.

Также доступны несколько перечислений, которые удобно применять при использовании API:

  • WsChatEvents - доступные для подписки события клиента чата;
  • MessageStyle - стиль сообщения в чате;
  • ErrorCode - код ошибки, которую можно получить в результате некоторых операций;
  • UserStatus - возможные статусы пользователя.

WsChat

Представляет собой набор управляющих методов и событий.

Большая часть методов возвращает Promise, который разрешается в момент успешного завершения операции, либо отклоняется с объектом ошибки. Если ошибка возникла не в результате вызова подобного метода, то она уходит обработчику события error.

Доступные методы:

  • new WsChat(address: string) - конструктор класса, address - адрес websocket-сервера чата, например wss://sinair.ru/ws/chat;
  • open(): Promise<void> - установить соединение с сервером;
  • close(): Promise<void> - закрыть соединение с сервером;
  • authByApiKey(key: string): Promise<PacketAuth> - выполнить авторизацию на сервере с помощью постоянного API-ключа (получается в профиле на сайте, рекомендуется для ботов);
  • ~~authByLoginAndPassword(login: string, password: string): Promise<PacketAuth>~~ - (более не поддерживается) выполнить авторизацию на сервере с помощью логина и пароля;
  • restoreConnection(token: string): Promise<PacketAuth> - восстанавливает соединение по токену, полученному ранее через другие методы аутентификации. При этом происходит автоматическое подключение ко всем комнатам прошлого соединения (придут события joinRoom как при подключении к комнате);
  • changeStatus(status: UserStatus): void - изменить свой статус. Допустимы только значения UserStatus.away и UserStatus.back;
  • joinRoom(target: string, options?: JoinOptions): Promise<Room> - присоединиться к комнате target. Также можно передать объект опций. Опции по-умолчанию следующие:
{
	autoLogin: false, //автоматически войти в комнату с ником, который использовался в ней ранее (для авторизованных пользователей)
	loadHistory: false, //загрузить последние 50+ сообщений в комнате
}
  • leaveRoom(target: string): Promise<string> - покинуть комнату target;
  • createRoom(target: string): Promise<string> - создать комнату с именем target;
  • removeRoom(target: string): Promise<string> - удалить свою комнату с именем target;
  • getRoomByTarget(target: string): Room - найти комнату с именем target в списке подключенных.

Доступные свойства:

  • rooms: Room[] - список комнат, к которым подключен клиент;
  • connected: boolean - возвращает true, если подключение к серверу установлено, иначе false.

События (WsChatEvents):

  • open - вызывается после подключения к серверу;
  • close - вызывается после отключения от сервера;
  • connectionError(error) - вызывается при возникновении ошибки подключения;
  • error(error) - вызывается для необработанных ошибок при работе с API чата;
  • message(room, msgobj) - вызывается, когда кто-то написал сообщение в комнату. msgobj - объект сообщения (будет описан ниже);
  • sysMessage(room, text) - вызывается при получении системного сообщения. Когда сообщение не относится ни к одной комнате, room принимает значение null;
  • userStatusChanged(room, userobj) - вызывается при изменении статуса пользователя в комнате; userobj - объект информации о пользователе (будет описан ниже);
  • joinRoom(room) - вызывается после подключения к комнате, если подключение было вызвано не методом chat.joinRoom(). Например, после восстановления соединения методом restoreConnection;
  • leaveRoom(target) - вызывается после исключения из комнаты; target - имя комнаты.

Room

Класс, предоставляющий набор методов для конкретной комнаты.

Методы:

  • sendMessage(text: string) - отправить сообщение в комнату;
  • changeStatus(status: UserStatus) - изменить свой статус. Допустимы только следующие значения UserStatus: away, back, typing, stop_typing;
  • getMemberById(memberId: number) - получить инфо пользователя по его id.

Свойства:

  • target: string - кодовое имя комнаты, например #chat;
  • members: UserObject[] - список подключенных к комнате пользователей;
  • memberId: number - собственный комнатный id в рамках текущего подключения к комнате;
  • memberNick: string - собственный ник в комнате.

UserStatus

Перечисление всех возможных статусов пользователей:

  • bad - если вы получили такой статус, что-то точно пошло не так;
  • offline - пользователь отключился;
  • online - пользователь онлайн;
  • away - пользователь отошел;
  • nick_change - пользователь изменил ник;
  • gender_change - пользователь сменил пол;
  • color_change - пользователь перекрасил ник;
  • back - пользователь вернулся (после статуса away);
  • typing - пользователь начал набирать сообщение;
  • stop_typing - пользователь перестал набирать сообщение;
  • orphan - пользователь потерял соединение с чатом, но еще может восстановить его.

MessageStyle

Перечисления для определения типа присланного сообщения:

  • message - обычное сообщение;
  • me - сообщение о себе в третьем лице;
  • event - сообщение от третьего лица;
  • offtop - оффтоп (в чате выделяются серым).

ErrorCode

Перечисление типа возникшей ошибки.

  • unknown - незивестная ошибка;
  • database_error - ошибка соединения с базой данных;
  • already_connected - вы уже подключены (например, к комнате);
  • not_found - при запросе что-то было не найдено (например, комната с таким именем);
  • access_denied - доступ запрещен;
  • invalid_target - неверно задано имя комнаты;
  • already_exists - что-то уже существует (например, комната с таким именем);
  • incorrect_loginpass - неверный логин/пароль (при авторизации);
  • user_banned - ваш пользователь или все анонимные пользователи заблокированы в комнате.

PackType

Перечисления типа пакета. Может использоваться при обработке ошибок.

  • error - сообщение об ошибке;
  • system - системное сообщение;
  • message - сообщение;
  • online_list - запрос список онлайна;
  • auth - запрос авторизации;
  • status - информация о пользователе;
  • join - запрос на подключение к комнате;
  • leave - запрос на отключение от комнаты;
  • create_room - запрос на создание комнаты;
  • remove_room - запрос на удаление комнаты;
  • ping - служебный пакет для проверки связи.

Объект сообщения (MessageObject)

  • id (string?) - необязательное поле. id сообщения, присутствует только у публичных сообщений (в лс отсутствует).
  • color (string) - цвет никнейма отправителя сообщения;
  • from (int) - внутрикомнатный ID отправителя сообщения;
  • from_login (string) - никнейм отправителя сообщения;
  • message (string) - текст сообщения;
  • style (MessageStyle) - тип сообщения;
  • target (string) - название комнаты, в которую было отправлено сообщение;
  • time (long) - время отправки сообщения в формате unixtime;
  • to (int) - внутрикомнатный ID получателя сообщения (0, если сообщение публичное).

Объект информации о пользователе (UserObject)

  • color (string) - цвет никнейма пользователя;
  • data (string) - данные события (например, при смене никнейма содержит старый никнейм пользователя);
  • girl (bool) - имеет ли пользователь имеет женский пол;
  • is_moder (bool) - является ли пользователь модератором комнаты;
  • is_owner (bool) - является ли пользователь создателем комнаты;
  • member_id (int) - внутрикомнатный ID пользователя;
  • name (string) - никнейм пользователя;
  • status (UserStatus) - статус пользователя (UserStatus);
  • user_id (int) - ID аккаунта пользователя (0, если пользователь не авторизирован);
  • last_seen_time (long) - время последнего присутствия пользователя (время перехода в статус away) в формате unixtime.