@@ -111,6 +111,22 @@ export default class Twitter {
111
111
* @returns {Stream }
112
112
*/
113
113
public stream ( resource : string , parameters : object ) : Stream ;
114
+
115
+ /**
116
+ * Creates an instance of the original {@instance Twitter} with labs API capabilities
117
+ * @return {TwitterLabs } - a twitter labs instance
118
+ */
119
+ public withLabs ( ) : TwitterLabs ;
120
+
121
+ /**
122
+ * Add rule for the filter stream API
123
+ *
124
+ * @param {LabsFilterStreamRule[] } rules a list of rules for the filter stream API
125
+ * @param {boolean } [dryRun] optional parameter to mark the request as a dry run
126
+ * @returns {Promise<object> } Promise response from Twitter API
127
+ * @see {@link https://developer.twitter.com/en/docs/labs/filtered-stream/api-reference/post-tweets-stream-filter-rules Twitter API }
128
+ */
129
+ public static labsFilterStreamRule ( value : string , tag ?: string ) : FilterStreamRule ;
114
130
}
115
131
116
132
/* In reality snowflakes are BigInts. Once BigInt is supported by browsers and Node per default, we could adjust this type.
@@ -157,10 +173,10 @@ interface BearerResponse {
157
173
158
174
type TokenResponse =
159
175
| {
160
- oauth_token : OauthToken ;
161
- oauth_token_secret : OauthTokenSecret ;
162
- oauth_callback_confirmed : 'true' ;
163
- }
176
+ oauth_token : OauthToken ;
177
+ oauth_token_secret : OauthTokenSecret ;
178
+ oauth_callback_confirmed : 'true' ;
179
+ }
164
180
| { oauth_callback_confirmed : 'false' } ;
165
181
166
182
interface AccessTokenResponse {
@@ -176,3 +192,82 @@ declare class Stream extends EventEmitter {
176
192
parse ( buffer : Buffer ) : void ;
177
193
destroy ( ) : void ;
178
194
}
195
+
196
+ export class TwitterLabs extends Twitter {
197
+ /**
198
+ * Construct the data and headers for an authenticated HTTP request to the Twitter Labs API
199
+ * @param {'GET | 'POST' | 'PUT' } method
200
+ * @param {'1' | '2' } version
201
+ * @param {string } resource - the API endpoint
202
+ * @param {object } queryParams - query params object
203
+ */
204
+ private _makeLabsRequest ( method : 'GET' | 'POST' | 'PUT' , version : '1' | '2' ,
205
+ resource : string , queryParams : object ) : {
206
+ requestData : { url : string ; method : string } ;
207
+ headers : { Authorization : string } | OAuth . Header ;
208
+ } ;
209
+
210
+ /**
211
+ * Add rule for the filter stream API
212
+ *
213
+ * @param {FilterStreamRule[] } rules a list of rules for the filter stream API
214
+ * @param {boolean } [dryRun] optional parameter to mark the request as a dry run
215
+ * @returns {Promise<object> } Promise response from Twitter API
216
+ * @see {@link https://developer.twitter.com/en/docs/labs/filtered-stream/api-reference/post-tweets-stream-filter-rules Twitter API }
217
+ */
218
+ public addRules ( rules : FilterStreamRule [ ] , dryRun ?: boolean ) : Promise < object >
219
+
220
+ /**
221
+ * Get registered rules
222
+ *
223
+ * @returns {Promise<object> } Promise response from Twitter API
224
+ * @see {@link https://developer.twitter.com/en/docs/labs/filtered-stream/api-reference/get-tweets-stream-filter-rules Twitter API }
225
+ */
226
+ public getRules ( ...ids : string [ ] ) : Promise < object >
227
+
228
+ /**
229
+ * Delete registered rules
230
+ *
231
+ * @param {string[] } Rule IDs that has been registered
232
+ * @param {boolean } [dryRun] optional parameter to mark request as a dry run
233
+ * @returns {Promise<object> } Promise response from Twitter API
234
+ * @see {@link https://developer.twitter.com/en/docs/labs/filtered-stream/api-reference/get-tweets-stream-filter-rules Twitter API }
235
+ */
236
+ public deleteRules ( ids : string [ ] , dryRun ?: boolean ) : Promise < object >
237
+
238
+
239
+ /**
240
+ * Start filter stream using saved rules
241
+ *
242
+ * @param {{expansions: Expansions[], format: Format, 'place.format': Format,
243
+ * 'tweet.format': Format, 'user.format': Format}} [queryParams]
244
+ * @returns {Stream } stream object for the filter stream
245
+ * @see {@link https://developer.twitter.com/en/docs/labs/filtered-stream/api-reference/get-tweets-stream-filter Twitter API }
246
+ */
247
+ filterStream ( queryParams ?: FilterStreamParams ) : Promise < object >
248
+ }
249
+
250
+ /**
251
+ * Rule structure when adding twitter labs filter stream rules
252
+ */
253
+ type FilterStreamRule = { value : string , meta ?: string } ;
254
+
255
+ /**
256
+ * Twitter labs response format
257
+ * @see {@link https://developer.twitter.com/en/docs/labs/overview/whats-new/formats About format }
258
+ */
259
+ type LabsFormat = 'compact' | 'detailed' | 'default' ;
260
+
261
+ /**
262
+ * Twitter labs expansions
263
+ * @see {@link https://developer.twitter.com/en/docs/labs/overview/whats-new/expansions About expansions }
264
+ */
265
+ type LabsExpansion = 'attachment.poll_ids' | 'attachments.media_keys' | 'author_id' | 'entities.mentions.username' | 'geo.place_id'
266
+ | 'in_reply_to_user_id' | 'referenced_tweets.id' | 'referenced_tweets.id.author_id' ;
267
+ type FilterStreamParams = {
268
+ expansions ?: LabsExpansion [ ] ,
269
+ format ?: LabsFormat ,
270
+ 'place.format' ?: LabsFormat ,
271
+ 'tweet.format' ?: LabsFormat ,
272
+ 'user.format' ?: LabsFormat
273
+ } ;
0 commit comments