Skip to content

BorisChumichev/vkflow

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

38 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Build Status Coverage Status

VK Streaming API ΠΊΠ»ΠΈΠ΅Π½Ρ‚ для Node

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π΄Π²Π° интСрфСйса для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Streaming API Π’ΠšΠΎΠ½Ρ‚Π°ΠΊΡ‚Π΅:

  1. Π€Π°Π±Ρ€ΠΈΠΊΠ° vkflow β€” позволяСт Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ с ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹ΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΏΡ€Π°Π²ΠΈΠ» ΠΈ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ· Π½Π΅Π³ΠΎ сообщСния;
  2. Π‘ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ VKStreamingAPI ΠΈ VKWebSocket для случаСв ΠΊΠΎΠ³Π΄Π° Ρ„Π°Π±Ρ€ΠΈΠΊΠ° vkflow Π½Π΅ Π΄Π°Ρ‘Ρ‚ достаточной гибкости Π² Ρ€Π°Π±ΠΎΡ‚Π΅ с API.

Установка

npm install vkflow

🍭 ИспользованиС Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ vkflow

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с vkflow достаточно Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π² Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² сСрвисный ΠΊΠ»ΡŽΡ‡ прилоТСния Π’ΠšΠΎΠ½Ρ‚Π°ΠΊΡ‚Π΅ ΠΈ массив ΠΏΡ€Π°Π²ΠΈΠ» Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ сообщСний с ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ΠΌ Β«Π’ΠšΠΎΠ½Ρ‚Π°ΠΊΡ‚Π΅Β»
const vkflow = require('vkflow');

const stream = vkflow(
  VK_SERVICE_KEY,
  [ { value: 'Π²ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π΅', tag: 'cyrillic' }
  , { value: 'vk', tag: 'latin' }
  ]
);

stream.on('data', console.log);

КаТдоС событиС 'data' содСрТит ΠΎΠ΄Π½ΠΎ сообщСниС ΠΏΠΎΡ‚ΠΎΠΊΠ° Π² Π²ΠΈΠ΄Π΅ строки Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° JSON. БСрвисныС сообщСния ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ. Π£ΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ замСнят собой Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΈ Π·Π°Π΄Π°Π½Ρ‹ для этого ΠΏΠΎΡ‚ΠΎΠΊΠ° Ρ€Π°Π½Π΅Π΅, Ссли Ρ‚Π°ΠΊΠΈΠ΅ Π΅ΡΡ‚ΡŒ. ΠŸΡ€ΠΈ Ρ€Π°Π·Ρ€Ρ‹Π²Π°Ρ… соСдинСния vkflow автоматичСски Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ошибок сработаСт событиС 'error' с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ошибки.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаёт Ρ„Π°Π±Ρ€ΠΈΠΊΠ°, ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Readable Stream, поэтому для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ событийный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, Π½ΠΎ ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹ΠΉ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ запись ΠΏΠΎΡ‚ΠΎΠΊΠ° Π² Ρ„Π°ΠΉΠ» с использованиСм Node Streams:
const { createWriteStream } = require('fs')
const vkflow = require('vkflow')

vkflow(VK_SERVICE_KEY, rules)
  .pipe(createWriteStream('destination.dat'))

🍯 ИспользованиС VKStreamingAPI и VKWebSocket

Π€Π°Π±Ρ€ΠΈΠΊΠ° vkflow позволяСт Π»Π΅Π³ΠΊΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ чтСния ΠΏΠΎΡ‚ΠΎΠΊΠ° с ΠΏΡ€Π΅Π΄Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ, Π½ΠΎ Ссли Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с VK Streaming API, Ρ‚ΠΎ прСдусмотрСны Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ сущности VKStreamingAPI ΠΈ VKWebSocket.

VKStreamingAPI

VKStreamingAPI β€” прСдоставляСт ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для HTTP взаимодСйствий с VK Streaming API: с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ (ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠΊΠ΅Π½Π° ΠΈ эндпоинта) ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:

VKStreamingAPI.authWithToken (serviceKey:String) β†’ Promise

ВыполняСт Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ VK Streaming API ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Promise, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ рСзолвится с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Π²ΠΈΠ΄Π° { key: String, endpoint: String }, Π³Π΄Π΅ key это ΠΊΠ»ΡŽΡ‡ доступа, Π° endpoint это URL для дальнСйшСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ c API. НапримСр:

{ endpoint: 'streaming.vk.com',
  key: '49e4758265efca1bb0bfceec9a08272b5d015ba0' }

Π’ рассмотрСнных Π΄Π°Π»Π΅Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… endpoint ΠΈ key β€” это ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ VKStreamingAPI.authWithToken

VKStreamingAPI.getRules (endpoint:String, key:String) β†’ Promise

Π—Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ список всСх ΠΏΡ€Π°Π²ΠΈΠ» ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Ρ… для ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Promise, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ рСзолвится с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Π²ΠΈΠ΄Π°:

{ code: 200,
  rules:
   [ { tag: 'candidate1', value: 'Ρ‚ΠΈΡ‚ΠΎΠ² -Π΅Π³ΠΎΡ€' },
     { tag: 'candidate2', value: 'собчак' },
     { tag: 'candidate3', value: 'Π½Π°Π²Π°Π»ΡŒΠ½Ρ‹ΠΉ' },
     { tag: 'candidate4', value: 'ΠΏΡƒΡ‚ΠΈΠ½' },
     { tag: 'candidate5', value: 'Тириновский' },
     { tag: 'candidate6', value: 'явлинский' },
     { tag: 'candidate7', value: 'Π³Ρ€ΡƒΠ΄ΠΈΠ½ΠΈΠ½' } ] }

VKStreamingAPI.postRule (endpoint:String, key:String, rule:Object) β†’ Promise

ДобавляСт ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π² ΠΏΠΎΡ‚ΠΎΠΊ. Π—Π΄Π΅ΡΡŒ rule β€” это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

{ rule: { tag: 'candidate2', value: 'собчак' } }

VKStreamingAPI.deleteRule (endpoint:String, key:String, ruleTag:Object) β†’ Promise

УдаляСт ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π—Π΄Π΅ΡΡŒ ruleTag β€” это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π²ΠΈΠ΄Π°:

{ tag: 'candidate2' }

VKStreamingAPI.flushRules (endpoint:String, key:String) β†’ Promise

УдаляСт всС ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΏΠΎΡ‚ΠΎΠΊΠ°.

VKStreamingAPI.getSettings (serviceKey:String) β†’ Promise

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с СдинствСнным ΠΏΠΎΠ»Π΅ΠΌ monthly_limit (string), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ содСрТит Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ tier_1-tier_6 ΠΈΠ»ΠΈ unlimited ΠΈ соотвСтствуСт установлСнному ΠΏΠΎΡ€ΠΎΠ³Ρƒ для прилоТСния.

VKStreamingAPI.getStats (serviceKey:String, params:Object) β†’ Promise

ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ статистику для ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹Ρ… ΠΈ доставлСнных событий Streaming API. params β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с трСбованиями ΠΊ ΠΎΡ‚Ρ‡Π΅Ρ‚Ρƒ, см. Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ: https://vk.com/dev/streaming.getStats.

VKStreamingAPI.getStem (serviceKey:String, params:Object) β†’ Promise

Π›Π΅ΠΌΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ слово, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ΅ Π² ΠΏΠΎΠ»Π΅ word ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° params.

VKWebSocket

VKWebSocket β€” класс для чтСния ΠΏΠΎΡ‚ΠΎΠΊΠ° Ρ‡Π΅Ρ€Π΅Π· websocket соСдинСниС ΠΊ VK Streaming API. Как ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ создаваСмый Ρ„Π°Π±Ρ€ΠΈΠΊΠΎΠΉ vkflow, инстанс VKWebSocket ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Readable Stream, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ ΠΊΠ°ΠΊ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ события data, Ρ‚Π°ΠΊ ΠΈ с использованиСм pipe.

Для инстанцирования VKWebSocket Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ адрСс соСдинСния ΠΈ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° с использованиСм VKWebSocket
const VKWebSocket = require('vkflow').VKWebSocket;
const { authWithToken } = require('vkflow').VKStreamingAPI;

(async () => {
  const { endpoint, key } = await authWithToken(VK_SERVICE_KEY);

  const socket = new VKWebSocket(
      `wss://${endpoint}/stream?key=${key}`,
      { socket: { omitServiceMessages: false } }
    )

  socket.pipe(someWritableStream)
})()

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ:

  • highWaterMark (Number) β€” Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±ΡƒΡ„Π΅Ρ€Π° сообщСний. Default: 32768;
  • socket.debug (Boolean) β€” Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π΅ΠΆΠΈΠΌΠ° логирования (Ρ‡Π΅Ρ€Π΅Π· console.debug()) Default: false;
  • socket.omitServiceMessages (Boolean) β€” ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π½Π΅Ρ‚ сСрвисныС сообщСния Default: true;
  • socket.reconnectInterval (Number) β€” стартовая ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΠ±Ρ€Ρ‹Π²Π΅ соСдинСния. Default: 1e3;
  • socket.maxReconnectInterval (Number) β€” максимальная ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΠ±Ρ€Ρ‹Π²Π΅ соСдинСния. Default: 3e4;
  • socket.reconnectDecay (Number) β€” ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ ΠΏΠ°ΡƒΠ·Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ°ΠΌΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Default: 1.5;
  • socket.timeoutInterval (Number) β€” врСмя Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Default: 2e3;
  • socket.maxReconnectAttempts (Number) β€” Π»ΠΈΠΌΠΈΡ‚ количСства ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Default: null (Π½Π΅Ρ‚ Π»ΠΈΠΌΠΈΡ‚Π° ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ)
ΠŸΡ€ΠΈΠΌΠ΅Ρ€: использованиС VKStreamingAPI ΠΈ VKWebSocket
const VKWebSocket = require('vkflow').VKWebSocket;
const { authWithToken, flushRules, postRule } = require('vkflow').VKStreamingAPI;

const rules = [
    { tag: 'candidate1', value: 'Ρ‚ΠΈΡ‚ΠΎΠ² -Π΅Π³ΠΎΡ€' },
    { tag: 'candidate2', value: 'собчак' },
    { tag: 'candidate3', value: 'Π½Π°Π²Π°Π»ΡŒΠ½Ρ‹ΠΉ' },
    { tag: 'candidate4', value: 'ΠΏΡƒΡ‚ΠΈΠ½' },
    { tag: 'candidate5', value: 'Тириновский' },
    { tag: 'candidate6', value: 'явлинский' },
    { tag: 'candidate7', value: 'Π³Ρ€ΡƒΠ΄ΠΈΠ½ΠΈΠ½' }
  ];

/**
 * Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ, ΡƒΠ΄Π°Π»ΠΈΠΌ старыС ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ°, создадим Π½ΠΎΠ²Ρ‹Π΅
 * ΠΈ установим websocket соСдинСниС для чтСния ΠΏΠΎΡ‚ΠΎΠΊa
 */

(async () => {
  const { endpoint, key } = await authWithToken(VK_SERVICE_KEY);

  await flushRules(endpoint, key);

  for (let rule of rules)
    await postRule(endpoint, key, { rule });

  const socket = new VKWebSocket(
      `wss://${endpoint}/stream?key=${key}`,
      { socket: { omitServiceMessages: false } }
    )

  socket.pipe(process.stdout)
})()

About

VK Streaming API client for Node

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published