UNPKG

1.63 kBJavaScriptView Raw
1const StreamClient = require('./stream_client');
2const DATA_TIMEOUT = 30000;
3const RULES_TIMEOUT = 5000;
4
5/**
6 * Client for interfacing with filtered stream API
7 */
8class FilteredStream extends StreamClient {
9 constructor({token, timeout = DATA_TIMEOUT, stream_timeout = DATA_TIMEOUT}) {
10 super({
11 token: token,
12 timeout: timeout,
13 stream_timeout: stream_timeout
14 });
15 this.url = 'tweets/search/stream';
16 }
17
18 /**
19 * Add rule for filtered stream
20 */
21 addRule(rules) {
22 let data = { add: rules };
23 return this.twitrClient.post('/tweets/search/stream/rules', data, {
24 timeout: RULES_TIMEOUT,
25 responseType: 'json'
26 });
27 }
28
29 /**
30 * Clear rules for filtered stream
31 */
32 async clearRules() {
33 let res = await this.rules();
34 if(res.data && 'data' in res.data) {
35 const has_id = (e) => { return 'id' in e; }
36 let data = res.data.data;
37 if(!Array.isArray(data) || !data.every(has_id)) {
38 return Promise.reject(res);
39 }
40 let rules = data.map((r) => r.id);
41 return this.deleteRules(rules);
42 } else {
43 return Promise.reject(res)
44 }
45 }
46
47 /**
48 * List rules for filtered stream
49 */
50 rules() {
51 return this.twitrClient.get('/tweets/search/stream/rules', {
52 timeout: RULES_TIMEOUT,
53 responseType: 'json'
54 });
55 }
56
57 /**
58 * Delete rules for filtered stream
59 */
60 deleteRules(ruleids) {
61 let data = { delete: { ids: ruleids } };
62 return this.twitrClient.post('/tweets/search/stream/rules', data, {
63 timeout: RULES_TIMEOUT,
64 responseType: 'json'
65 });
66 }
67}
68
69module.exports = FilteredStream;