box-node-sdk 1.35.0 → 1.37.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/CHANGELOG.md +37 -2
  2. package/README.md +1 -1
  3. package/lib/api-request-manager.d.ts +38 -0
  4. package/lib/api-request-manager.js +48 -55
  5. package/lib/api-request-manager.js.map +1 -0
  6. package/lib/api-request.d.ts +141 -0
  7. package/lib/api-request.js +202 -281
  8. package/lib/api-request.js.map +1 -0
  9. package/lib/box-client.d.ts +269 -0
  10. package/lib/box-client.js +551 -713
  11. package/lib/box-client.js.map +1 -0
  12. package/lib/box-node-sdk.d.ts +216 -0
  13. package/lib/box-node-sdk.js +317 -352
  14. package/lib/box-node-sdk.js.map +1 -0
  15. package/lib/chunked-uploader.d.ts +129 -0
  16. package/lib/chunked-uploader.js +287 -358
  17. package/lib/chunked-uploader.js.map +1 -0
  18. package/lib/enterprise-event-stream.d.ts +82 -0
  19. package/lib/enterprise-event-stream.js +189 -203
  20. package/lib/enterprise-event-stream.js.map +1 -0
  21. package/lib/event-stream.d.ts +92 -0
  22. package/lib/event-stream.js +274 -302
  23. package/lib/event-stream.js.map +1 -0
  24. package/lib/managers/collaboration-allowlist.d.ts +137 -0
  25. package/lib/managers/collaboration-allowlist.js +200 -0
  26. package/lib/managers/collaboration-allowlist.js.map +1 -0
  27. package/lib/managers/collaboration-whitelist.d.ts +3 -0
  28. package/lib/managers/collaboration-whitelist.js +8 -222
  29. package/lib/managers/collaboration-whitelist.js.map +1 -0
  30. package/lib/managers/collaborations.d.ts +166 -0
  31. package/lib/managers/collaborations.js +225 -258
  32. package/lib/managers/collaborations.js.map +1 -0
  33. package/lib/managers/collections.d.ts +42 -0
  34. package/lib/managers/collections.js +45 -50
  35. package/lib/managers/collections.js.map +1 -0
  36. package/lib/managers/comments.d.ts +103 -0
  37. package/lib/managers/comments.js +158 -173
  38. package/lib/managers/comments.js.map +1 -0
  39. package/lib/managers/device-pins.d.ts +52 -0
  40. package/lib/managers/device-pins.js +75 -88
  41. package/lib/managers/device-pins.js.map +1 -0
  42. package/lib/managers/enterprise.d.ts +162 -0
  43. package/lib/managers/enterprise.js +168 -199
  44. package/lib/managers/enterprise.js.map +1 -0
  45. package/lib/managers/events.d.ts +177 -0
  46. package/lib/managers/events.js +230 -254
  47. package/lib/managers/events.js.map +1 -0
  48. package/lib/managers/files.d.ts +772 -0
  49. package/lib/managers/files.js +1400 -1602
  50. package/lib/managers/files.js.map +1 -0
  51. package/lib/managers/folders.d.ts +347 -0
  52. package/lib/managers/folders.js +551 -567
  53. package/lib/managers/folders.js.map +1 -0
  54. package/lib/managers/groups.d.ts +202 -0
  55. package/lib/managers/groups.js +238 -287
  56. package/lib/managers/groups.js.map +1 -0
  57. package/lib/managers/legal-hold-policies.d.ts +190 -0
  58. package/lib/managers/legal-hold-policies.js +228 -272
  59. package/lib/managers/legal-hold-policies.js.map +1 -0
  60. package/lib/managers/metadata.d.ts +228 -0
  61. package/lib/managers/metadata.js +265 -328
  62. package/lib/managers/metadata.js.map +1 -0
  63. package/lib/managers/recent-items.d.ts +38 -0
  64. package/lib/managers/recent-items.js +32 -39
  65. package/lib/managers/recent-items.js.map +1 -0
  66. package/lib/managers/retention-policies.d.ts +213 -0
  67. package/lib/managers/retention-policies.js +235 -281
  68. package/lib/managers/retention-policies.js.map +1 -0
  69. package/lib/managers/search.d.ts +82 -0
  70. package/lib/managers/search.js +68 -88
  71. package/lib/managers/search.js.map +1 -0
  72. package/lib/managers/shared-items.d.ts +33 -0
  73. package/lib/managers/shared-items.js +54 -62
  74. package/lib/managers/shared-items.js.map +1 -0
  75. package/lib/managers/storage-policies.d.ts +86 -0
  76. package/lib/managers/storage-policies.js +108 -142
  77. package/lib/managers/storage-policies.js.map +1 -0
  78. package/lib/managers/tasks.d.ts +161 -0
  79. package/lib/managers/tasks.js +219 -260
  80. package/lib/managers/tasks.js.map +1 -0
  81. package/lib/managers/terms-of-service.d.ts +161 -0
  82. package/lib/managers/terms-of-service.js +250 -273
  83. package/lib/managers/terms-of-service.js.map +1 -0
  84. package/lib/managers/trash.d.ts +30 -0
  85. package/lib/managers/trash.js +30 -41
  86. package/lib/managers/trash.js.map +1 -0
  87. package/lib/managers/users.d.ts +131 -0
  88. package/lib/managers/users.js +160 -203
  89. package/lib/managers/users.js.map +1 -0
  90. package/lib/managers/web-links.d.ts +127 -0
  91. package/lib/managers/web-links.js +183 -209
  92. package/lib/managers/web-links.js.map +1 -0
  93. package/lib/managers/webhooks.d.ts +166 -0
  94. package/lib/managers/webhooks.js +312 -305
  95. package/lib/managers/webhooks.js.map +1 -0
  96. package/lib/sessions/anonymous-session.d.ts +69 -0
  97. package/lib/sessions/anonymous-session.js +88 -102
  98. package/lib/sessions/anonymous-session.js.map +1 -0
  99. package/lib/sessions/app-auth-session.d.ts +92 -0
  100. package/lib/sessions/app-auth-session.js +140 -160
  101. package/lib/sessions/app-auth-session.js.map +1 -0
  102. package/lib/sessions/basic-session.d.ts +56 -0
  103. package/lib/sessions/basic-session.js +40 -50
  104. package/lib/sessions/basic-session.js.map +1 -0
  105. package/lib/sessions/persistent-session.d.ts +96 -0
  106. package/lib/sessions/persistent-session.js +191 -211
  107. package/lib/sessions/persistent-session.js.map +1 -0
  108. package/lib/token-manager.d.ts +191 -0
  109. package/lib/token-manager.js +390 -465
  110. package/lib/token-manager.js.map +1 -0
  111. package/lib/util/config.d.ts +86 -0
  112. package/lib/util/config.js +124 -152
  113. package/lib/util/config.js.map +1 -0
  114. package/lib/util/errors.d.ts +50 -0
  115. package/lib/util/errors.js +134 -145
  116. package/lib/util/errors.js.map +1 -0
  117. package/lib/util/exponential-backoff.d.ts +11 -0
  118. package/lib/util/exponential-backoff.js +10 -22
  119. package/lib/util/exponential-backoff.js.map +1 -0
  120. package/lib/util/paging-iterator.d.ts +53 -0
  121. package/lib/util/paging-iterator.js +202 -218
  122. package/lib/util/paging-iterator.js.map +1 -0
  123. package/lib/util/url-path.d.ts +16 -0
  124. package/lib/util/url-path.js +20 -35
  125. package/lib/util/url-path.js.map +1 -0
  126. package/package.json +24 -9
@@ -1,32 +1,42 @@
1
+ "use strict";
1
2
  /**
2
3
  * @fileoverview Event stream backed by the events API
3
4
  */
4
-
5
- 'use strict';
6
-
5
+ var __extends = (this && this.__extends) || (function () {
6
+ var extendStatics = function (d, b) {
7
+ extendStatics = Object.setPrototypeOf ||
8
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
9
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
10
+ return extendStatics(d, b);
11
+ };
12
+ return function (d, b) {
13
+ if (typeof b !== "function" && b !== null)
14
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
15
+ extendStatics(d, b);
16
+ function __() { this.constructor = d; }
17
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
18
+ };
19
+ })();
20
+ var __importDefault = (this && this.__importDefault) || function (mod) {
21
+ return (mod && mod.__esModule) ? mod : { "default": mod };
22
+ };
7
23
  // ------------------------------------------------------------------------------
8
24
  // Requirements
9
25
  // ------------------------------------------------------------------------------
10
-
11
- var Readable = require('stream').Readable,
12
- qs = require('querystring'),
13
- util = require('util'),
14
- Promise = require('bluebird');
15
-
26
+ var bluebird_1 = require("bluebird");
27
+ var querystring_1 = __importDefault(require("querystring"));
28
+ var stream_1 = require("stream");
16
29
  // ------------------------------------------------------------------------------
17
30
  // Private
18
31
  // ------------------------------------------------------------------------------
19
-
20
- const DEFAULT_OPTIONS = Object.freeze({
21
- deduplicationFilterSize: 5000,
22
- retryDelay: 1000,
23
- fetchInterval: 1000
32
+ var DEFAULT_OPTIONS = Object.freeze({
33
+ deduplicationFilterSize: 5000,
34
+ retryDelay: 1000,
35
+ fetchInterval: 1000,
24
36
  });
25
-
26
37
  // ------------------------------------------------------------------------------
27
38
  // Public
28
39
  // ------------------------------------------------------------------------------
29
-
30
40
  /**
31
41
  * Stream of Box events from a given client and point in time.
32
42
  * @param {BoxClient} client The client to use to get events
@@ -38,293 +48,255 @@ const DEFAULT_OPTIONS = Object.freeze({
38
48
  * @constructor
39
49
  * @extends Readable
40
50
  */
41
- function EventStream(client, streamPosition, options) {
42
-
43
- Readable.call(this, {
44
- objectMode: true
45
- });
46
-
47
- /**
48
- * @var {BoxClient} The client for making API calls
49
- * @private
50
- */
51
- this._client = client;
52
-
53
- /**
54
- * @var {string} The latest stream position
55
- * @private
56
- */
57
- this._streamPosition = streamPosition;
58
-
59
- /**
60
- * @var {?Object} The information for how to long poll
61
- * @private
62
- */
63
- this._longPollInfo = null;
64
-
65
- /**
66
- * @var {int} The number of long poll requests we've made against one URL so far
67
- * @private
68
- */
69
- this._longPollRetries = 0;
70
-
71
- /**
72
- * @var {Object.<string, boolean>} Hash of event IDs we've already pushed
73
- * @private
74
- */
75
- this._dedupHash = {};
76
-
77
- /**
78
- * Rate limiting promise to ensure that events are not fetched too often,
79
- * initially resolved to allow an immediate API call.
80
- * @var {Promise}
81
- * @private
82
- */
83
- this._rateLimiter = Promise.resolve();
84
-
85
- this._options = Object.assign({}, DEFAULT_OPTIONS, options);
86
- }
87
-
88
- util.inherits(EventStream, Readable);
89
-
90
- /**
91
- * Retrieve the url and params for long polling for new updates
92
- * @returns {Promise} Promise for testing purposes
93
- * @private
94
- */
95
- EventStream.prototype.getLongPollInfo = function() {
96
- if (this.destroyed) {
97
- return Promise.resolve(false);
98
- }
99
-
100
- return this._client.events.getLongPollInfo()
101
- .then(longPollInfo => {
102
-
103
- // On getting new long poll info, reset everything
104
- this._longPollInfo = longPollInfo;
105
- this._longPollRetries = 0;
106
-
107
- return this.doLongPoll();
108
- })
109
- .catch(err => {
110
- this.emit('error', err);
111
-
112
- // Only retry on resolvable errors
113
- if (!err.authExpired) {
114
- this.retryPollInfo();
115
- }
116
- });
117
- };
118
-
119
- /**
120
- * Long poll for notification of new events. We do this rather than
121
- * polling for the events directly in order to minimize the number of API
122
- * calls necessary.
123
- * @returns {Promise} Promise for testing pruposes
124
- * @private
125
- */
126
- EventStream.prototype.doLongPoll = function() {
127
- if (this.destroyed) {
128
- return Promise.resolve(false);
129
- }
130
-
131
- // If we're over the max number of retries, reset
132
- if (this._longPollRetries > this._longPollInfo.max_retries) {
133
- return this.getLongPollInfo();
134
- }
135
-
136
- var url = this._longPollInfo.url,
137
- qsDelim = url.indexOf('?'),
138
- query = {};
139
-
140
- // Break out the query params, otherwise the request URL gets messed up
141
- if (qsDelim > 0) {
142
- query = qs.parse(url.substr(qsDelim + 1));
143
- url = url.substr(0, qsDelim);
144
- }
145
-
146
- query.stream_position = this._streamPosition;
147
-
148
- var options = {
149
- qs: query,
150
- timeout: this._longPollInfo.retry_timeout * 1000
151
- };
152
-
153
- this._longPollRetries += 1;
154
- return this._client.wrapWithDefaultHandler(this._client.get)(url, options)
155
- .then(data => {
156
- if (this.destroyed) {
157
- return false;
158
- }
159
-
160
- if (data.message === 'reconnect') {
161
- return this.getLongPollInfo();
162
- }
163
-
164
- // We don't expect any messages other than reconnect and new_change, so if
165
- // we get one just retry the long poll
166
- if (data.message !== 'new_change') {
167
- return this.doLongPoll();
168
- }
169
-
170
- return this.fetchEvents();
171
- })
172
- .catch(() => {
173
- this.retryPollInfo();
174
- });
175
- };
176
-
177
- /**
178
- * Retries long-polling after a delay.
179
- * Does not attempt if stream is already destroyed.
180
- * @returns {void}
181
- * @private
182
- */
183
- EventStream.prototype.retryPollInfo = function() {
184
-
185
- if (!this.destroyed) {
186
- this._retryTimer = setTimeout(() => this.getLongPollInfo(), this._options.retryDelay);
187
- }
188
- };
189
-
190
- /**
191
- * Fetch the latest group of events and push them into the stream
192
- * @returns {Promise} Promise for testing purposes
193
- * @private
194
- */
195
- EventStream.prototype.fetchEvents = function() {
196
-
197
- if (this.destroyed) {
198
- return Promise.resolve(false);
199
- }
200
-
201
- var eventParams = {
202
- stream_position: this._streamPosition,
203
- limit: 500
204
- };
205
-
206
- // Get new events after the rate limiter expires
207
- return this._rateLimiter.then(() => this._client.events.get(eventParams)
208
- .then(events => {
209
-
210
- // Reset the rate limiter
211
- this._rateLimiter = Promise.delay(this._options.fetchInterval);
212
-
213
- // If the response wasn't what we expected, re-poll
214
- if (!events.entries || !events.next_stream_position) {
215
- return this.doLongPoll();
216
- }
217
-
218
- this._streamPosition = events.next_stream_position;
219
-
220
- // De-duplicate the fetched events, since the API often returns
221
- // the same events at multiple subsequent stream positions
222
- var newEvents = events.entries.filter(event => !this._dedupHash[event.event_id]);
223
-
224
- // If there aren't any non-duplicate events, go back to polling
225
- if (newEvents.length === 0) {
226
- return this.doLongPoll();
227
- }
228
-
229
-
230
- // Pause the stream to avoid race conditions while pushing in the new events.
231
- // Without this, _read() would be called again from inside each push(),
232
- // resulting in multiple parallel calls to fetchEvents().
233
- // See https://github.com/nodejs/node/issues/3203
234
- var wasPaused = this.isPaused();
235
- this.pause();
236
-
237
- // Push new events into the stream
238
- newEvents.forEach(event => {
239
- this._dedupHash[event.event_id] = true;
240
- this.push(event);
241
- });
242
-
243
- if (!wasPaused) {
244
- // This will deliver the events and trigger the next call to _read() once they have been consumed.
245
- this.resume();
246
- }
247
-
248
- // Once the deduplication filter gets too big, clean it up
249
- if (Object.keys(this._dedupHash).length >= this._options.deduplicationFilterSize) {
250
- this.cleanupDedupFilter(events.entries);
251
- }
252
-
253
- return true;
254
- })
255
- .catch(err => {
256
-
257
- this.emit('error', err);
258
-
259
- this.retryPollInfo();
260
- })
261
- );
262
- };
263
-
264
- /**
265
- * Clean up the deduplication filter, to prevent it from growing
266
- * too big and eating up memory. We look at the latest set of events
267
- * returned and assume that any IDs not in that set don't need to be
268
- * tracked for deduplication any more.
269
- * @param {Object[]} latestEvents The latest events from the API
270
- * @returns {void}
271
- * @private
272
- */
273
- EventStream.prototype.cleanupDedupFilter = function(latestEvents) {
274
-
275
- var dedupIDs = Object.keys(this._dedupHash);
276
-
277
- dedupIDs.forEach(eventID => {
278
-
279
- var isEventCleared = !latestEvents.find(e => e.event_id === eventID);
280
- if (isEventCleared) {
281
- delete this._dedupHash[eventID];
282
- }
283
- });
284
- };
285
-
286
- /**
287
- * Implementation of the stream-internal read function. This is called
288
- * by the stream whenever it needs more data, and will not be called again
289
- * until data is pushed into the stream.
290
- * @returns {void}
291
- * @private
292
- */
293
- EventStream.prototype._read = function() {
294
-
295
- // Start the process of getting new events
296
- this.getLongPollInfo();
297
- };
298
-
299
- /**
300
- * Implementation of stream-internal `_destroy` function (v8.0.0 and later).
301
- * Called by stream consumers to effectively stop polling via the public
302
- * `destroy()`.
303
- * @returns {void}
304
- * @private
305
- */
306
- EventStream.prototype._destroy = function() {
307
- clearTimeout(this._retryTimer);
308
- delete this._retryTimer;
309
- };
310
-
51
+ var EventStream = /** @class */ (function (_super) {
52
+ __extends(EventStream, _super);
53
+ function EventStream(client, streamPosition, options) {
54
+ var _this = _super.call(this, {
55
+ objectMode: true,
56
+ }) || this;
57
+ /**
58
+ * @var {BoxClient} The client for making API calls
59
+ * @private
60
+ */
61
+ _this._client = client;
62
+ /**
63
+ * @var {string} The latest stream position
64
+ * @private
65
+ */
66
+ _this._streamPosition = streamPosition;
67
+ /**
68
+ * @var {?Object} The information for how to long poll
69
+ * @private
70
+ */
71
+ _this._longPollInfo = undefined;
72
+ /**
73
+ * @var {int} The number of long poll requests we've made against one URL so far
74
+ * @private
75
+ */
76
+ _this._longPollRetries = 0;
77
+ /**
78
+ * @var {Object.<string, boolean>} Hash of event IDs we've already pushed
79
+ * @private
80
+ */
81
+ _this._dedupHash = {};
82
+ /**
83
+ * Rate limiting promise to ensure that events are not fetched too often,
84
+ * initially resolved to allow an immediate API call.
85
+ * @var {Promise}
86
+ * @private
87
+ */
88
+ _this._rateLimiter = bluebird_1.Promise.resolve();
89
+ _this._options = Object.assign({}, DEFAULT_OPTIONS, options);
90
+ return _this;
91
+ }
92
+ /**
93
+ * Retrieve the url and params for long polling for new updates
94
+ * @returns {Promise} Promise for testing purposes
95
+ * @private
96
+ */
97
+ EventStream.prototype.getLongPollInfo = function () {
98
+ var _this = this;
99
+ if (this.destroyed) {
100
+ return bluebird_1.Promise.resolve(false);
101
+ }
102
+ return this._client.events
103
+ .getLongPollInfo()
104
+ .then(function (longPollInfo) {
105
+ // On getting new long poll info, reset everything
106
+ _this._longPollInfo = longPollInfo;
107
+ _this._longPollRetries = 0;
108
+ return _this.doLongPoll();
109
+ })
110
+ .catch(function (err /* FIXME */) {
111
+ _this.emit('error', err);
112
+ // Only retry on resolvable errors
113
+ if (!err.authExpired) {
114
+ _this.retryPollInfo();
115
+ }
116
+ });
117
+ };
118
+ /**
119
+ * Long poll for notification of new events. We do this rather than
120
+ * polling for the events directly in order to minimize the number of API
121
+ * calls necessary.
122
+ * @returns {Promise} Promise for testing pruposes
123
+ * @private
124
+ */
125
+ EventStream.prototype.doLongPoll = function () {
126
+ var _this = this;
127
+ if (this.destroyed) {
128
+ return bluebird_1.Promise.resolve(false);
129
+ }
130
+ // If we're over the max number of retries, reset
131
+ if (this._longPollRetries > this._longPollInfo.max_retries) {
132
+ return this.getLongPollInfo();
133
+ }
134
+ var url = this._longPollInfo.url, qsDelim = url.indexOf('?'), query = {};
135
+ // Break out the query params, otherwise the request URL gets messed up
136
+ if (qsDelim > 0) {
137
+ query = querystring_1.default.parse(url.substr(qsDelim + 1));
138
+ url = url.substr(0, qsDelim);
139
+ }
140
+ query.stream_position = this._streamPosition;
141
+ var options = {
142
+ qs: query,
143
+ timeout: this._longPollInfo.retry_timeout * 1000,
144
+ };
145
+ this._longPollRetries += 1;
146
+ return this._client
147
+ .wrapWithDefaultHandler(this._client.get)(url, options)
148
+ .then(function (data /* FIXME */) {
149
+ if (_this.destroyed) {
150
+ return false;
151
+ }
152
+ if (data.message === 'reconnect') {
153
+ return _this.getLongPollInfo();
154
+ }
155
+ // We don't expect any messages other than reconnect and new_change, so if
156
+ // we get one just retry the long poll
157
+ if (data.message !== 'new_change') {
158
+ return _this.doLongPoll();
159
+ }
160
+ return _this.fetchEvents();
161
+ })
162
+ .catch(function () {
163
+ _this.retryPollInfo();
164
+ });
165
+ };
166
+ /**
167
+ * Retries long-polling after a delay.
168
+ * Does not attempt if stream is already destroyed.
169
+ * @returns {void}
170
+ * @private
171
+ */
172
+ EventStream.prototype.retryPollInfo = function () {
173
+ var _this = this;
174
+ if (!this.destroyed) {
175
+ this._retryTimer = setTimeout(function () { return _this.getLongPollInfo(); }, this._options.retryDelay);
176
+ }
177
+ };
178
+ /**
179
+ * Fetch the latest group of events and push them into the stream
180
+ * @returns {Promise} Promise for testing purposes
181
+ * @private
182
+ */
183
+ EventStream.prototype.fetchEvents = function () {
184
+ var _this = this;
185
+ if (this.destroyed) {
186
+ return bluebird_1.Promise.resolve(false);
187
+ }
188
+ var eventParams = {
189
+ stream_position: this._streamPosition,
190
+ limit: 500,
191
+ };
192
+ // Get new events after the rate limiter expires
193
+ return this._rateLimiter.then(function () {
194
+ return _this._client.events
195
+ .get(eventParams)
196
+ .then(function (events /* FIXME */) {
197
+ // Reset the rate limiter
198
+ _this._rateLimiter = bluebird_1.Promise.delay(_this._options.fetchInterval);
199
+ // If the response wasn't what we expected, re-poll
200
+ if (!events.entries || !events.next_stream_position) {
201
+ return _this.doLongPoll();
202
+ }
203
+ _this._streamPosition = events.next_stream_position;
204
+ // De-duplicate the fetched events, since the API often returns
205
+ // the same events at multiple subsequent stream positions
206
+ var newEvents = events.entries.filter(function (event /* FIXME */) { return !_this._dedupHash[event.event_id]; });
207
+ // If there aren't any non-duplicate events, go back to polling
208
+ if (newEvents.length === 0) {
209
+ return _this.doLongPoll();
210
+ }
211
+ // Pause the stream to avoid race conditions while pushing in the new events.
212
+ // Without this, _read() would be called again from inside each push(),
213
+ // resulting in multiple parallel calls to fetchEvents().
214
+ // See https://github.com/nodejs/node/issues/3203
215
+ var wasPaused = _this.isPaused();
216
+ _this.pause();
217
+ // Push new events into the stream
218
+ newEvents.forEach(function (event /* FIXME */) {
219
+ _this._dedupHash[event.event_id] = true;
220
+ _this.push(event);
221
+ });
222
+ if (!wasPaused) {
223
+ // This will deliver the events and trigger the next call to _read() once they have been consumed.
224
+ _this.resume();
225
+ }
226
+ // Once the deduplication filter gets too big, clean it up
227
+ if (Object.keys(_this._dedupHash).length >=
228
+ _this._options.deduplicationFilterSize) {
229
+ _this.cleanupDedupFilter(events.entries);
230
+ }
231
+ return true;
232
+ })
233
+ .catch(function (err /* FIXME */) {
234
+ _this.emit('error', err);
235
+ _this.retryPollInfo();
236
+ });
237
+ });
238
+ };
239
+ /**
240
+ * Clean up the deduplication filter, to prevent it from growing
241
+ * too big and eating up memory. We look at the latest set of events
242
+ * returned and assume that any IDs not in that set don't need to be
243
+ * tracked for deduplication any more.
244
+ * @param {Object[]} latestEvents The latest events from the API
245
+ * @returns {void}
246
+ * @private
247
+ */
248
+ EventStream.prototype.cleanupDedupFilter = function (latestEvents /* FIXME */) {
249
+ var _this = this;
250
+ var dedupIDs = Object.keys(this._dedupHash);
251
+ dedupIDs.forEach(function (eventID) {
252
+ var isEventCleared = !latestEvents.find(function (e /* FIXME */) { return e.event_id === eventID; });
253
+ if (isEventCleared) {
254
+ delete _this._dedupHash[eventID];
255
+ }
256
+ });
257
+ };
258
+ /**
259
+ * Implementation of the stream-internal read function. This is called
260
+ * by the stream whenever it needs more data, and will not be called again
261
+ * until data is pushed into the stream.
262
+ * @returns {void}
263
+ * @private
264
+ */
265
+ EventStream.prototype._read = function () {
266
+ // Start the process of getting new events
267
+ this.getLongPollInfo();
268
+ };
269
+ /**
270
+ * Implementation of stream-internal `_destroy` function (v8.0.0 and later).
271
+ * Called by stream consumers to effectively stop polling via the public
272
+ * `destroy()`.
273
+ * @returns {void}
274
+ * @private
275
+ */
276
+ EventStream.prototype._destroy = function () {
277
+ clearTimeout(this._retryTimer);
278
+ delete this._retryTimer;
279
+ };
280
+ return EventStream;
281
+ }(stream_1.Readable));
311
282
  // backwards-compat for Node.js pre-v8.0.0
312
283
  /* istanbul ignore if */
313
- if (typeof Readable.prototype.destroy !== 'function') {
314
- /**
315
- * Destroys the stream. Rough polyfill for `Readable#destroy`.
316
- * @returns {void}
317
- * @public
318
- */
319
- EventStream.prototype.destroy = function() {
320
- if (!this.destroyed) {
321
- process.nextTick(() => {
322
- this.emit('close');
323
- });
324
- this.destroyed = true;
325
- this._destroy();
326
- }
327
- };
284
+ if (typeof stream_1.Readable.prototype.destroy !== 'function') {
285
+ /**
286
+ * Destroys the stream. Rough polyfill for `Readable#destroy`.
287
+ * @returns {void}
288
+ * @public
289
+ */
290
+ EventStream.prototype.destroy = function () {
291
+ var _this = this;
292
+ if (!this.destroyed) {
293
+ process.nextTick(function () {
294
+ _this.emit('close');
295
+ });
296
+ this.destroyed = true;
297
+ this._destroy();
298
+ }
299
+ };
328
300
  }
329
-
330
301
  module.exports = EventStream;
302
+ //# sourceMappingURL=event-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-stream.js","sourceRoot":"","sources":["../src/event-stream.ts"],"names":[],"mappings":"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"}