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.
- package/CHANGELOG.md +37 -2
- package/README.md +1 -1
- package/lib/api-request-manager.d.ts +38 -0
- package/lib/api-request-manager.js +48 -55
- package/lib/api-request-manager.js.map +1 -0
- package/lib/api-request.d.ts +141 -0
- package/lib/api-request.js +202 -281
- package/lib/api-request.js.map +1 -0
- package/lib/box-client.d.ts +269 -0
- package/lib/box-client.js +551 -713
- package/lib/box-client.js.map +1 -0
- package/lib/box-node-sdk.d.ts +216 -0
- package/lib/box-node-sdk.js +317 -352
- package/lib/box-node-sdk.js.map +1 -0
- package/lib/chunked-uploader.d.ts +129 -0
- package/lib/chunked-uploader.js +287 -358
- package/lib/chunked-uploader.js.map +1 -0
- package/lib/enterprise-event-stream.d.ts +82 -0
- package/lib/enterprise-event-stream.js +189 -203
- package/lib/enterprise-event-stream.js.map +1 -0
- package/lib/event-stream.d.ts +92 -0
- package/lib/event-stream.js +274 -302
- package/lib/event-stream.js.map +1 -0
- package/lib/managers/collaboration-allowlist.d.ts +137 -0
- package/lib/managers/collaboration-allowlist.js +200 -0
- package/lib/managers/collaboration-allowlist.js.map +1 -0
- package/lib/managers/collaboration-whitelist.d.ts +3 -0
- package/lib/managers/collaboration-whitelist.js +8 -222
- package/lib/managers/collaboration-whitelist.js.map +1 -0
- package/lib/managers/collaborations.d.ts +166 -0
- package/lib/managers/collaborations.js +225 -258
- package/lib/managers/collaborations.js.map +1 -0
- package/lib/managers/collections.d.ts +42 -0
- package/lib/managers/collections.js +45 -50
- package/lib/managers/collections.js.map +1 -0
- package/lib/managers/comments.d.ts +103 -0
- package/lib/managers/comments.js +158 -173
- package/lib/managers/comments.js.map +1 -0
- package/lib/managers/device-pins.d.ts +52 -0
- package/lib/managers/device-pins.js +75 -88
- package/lib/managers/device-pins.js.map +1 -0
- package/lib/managers/enterprise.d.ts +162 -0
- package/lib/managers/enterprise.js +168 -199
- package/lib/managers/enterprise.js.map +1 -0
- package/lib/managers/events.d.ts +177 -0
- package/lib/managers/events.js +230 -254
- package/lib/managers/events.js.map +1 -0
- package/lib/managers/files.d.ts +772 -0
- package/lib/managers/files.js +1400 -1602
- package/lib/managers/files.js.map +1 -0
- package/lib/managers/folders.d.ts +347 -0
- package/lib/managers/folders.js +551 -567
- package/lib/managers/folders.js.map +1 -0
- package/lib/managers/groups.d.ts +202 -0
- package/lib/managers/groups.js +238 -287
- package/lib/managers/groups.js.map +1 -0
- package/lib/managers/legal-hold-policies.d.ts +190 -0
- package/lib/managers/legal-hold-policies.js +228 -272
- package/lib/managers/legal-hold-policies.js.map +1 -0
- package/lib/managers/metadata.d.ts +228 -0
- package/lib/managers/metadata.js +265 -328
- package/lib/managers/metadata.js.map +1 -0
- package/lib/managers/recent-items.d.ts +38 -0
- package/lib/managers/recent-items.js +32 -39
- package/lib/managers/recent-items.js.map +1 -0
- package/lib/managers/retention-policies.d.ts +213 -0
- package/lib/managers/retention-policies.js +235 -281
- package/lib/managers/retention-policies.js.map +1 -0
- package/lib/managers/search.d.ts +82 -0
- package/lib/managers/search.js +68 -88
- package/lib/managers/search.js.map +1 -0
- package/lib/managers/shared-items.d.ts +33 -0
- package/lib/managers/shared-items.js +54 -62
- package/lib/managers/shared-items.js.map +1 -0
- package/lib/managers/storage-policies.d.ts +86 -0
- package/lib/managers/storage-policies.js +108 -142
- package/lib/managers/storage-policies.js.map +1 -0
- package/lib/managers/tasks.d.ts +161 -0
- package/lib/managers/tasks.js +219 -260
- package/lib/managers/tasks.js.map +1 -0
- package/lib/managers/terms-of-service.d.ts +161 -0
- package/lib/managers/terms-of-service.js +250 -273
- package/lib/managers/terms-of-service.js.map +1 -0
- package/lib/managers/trash.d.ts +30 -0
- package/lib/managers/trash.js +30 -41
- package/lib/managers/trash.js.map +1 -0
- package/lib/managers/users.d.ts +131 -0
- package/lib/managers/users.js +160 -203
- package/lib/managers/users.js.map +1 -0
- package/lib/managers/web-links.d.ts +127 -0
- package/lib/managers/web-links.js +183 -209
- package/lib/managers/web-links.js.map +1 -0
- package/lib/managers/webhooks.d.ts +166 -0
- package/lib/managers/webhooks.js +312 -305
- package/lib/managers/webhooks.js.map +1 -0
- package/lib/sessions/anonymous-session.d.ts +69 -0
- package/lib/sessions/anonymous-session.js +88 -102
- package/lib/sessions/anonymous-session.js.map +1 -0
- package/lib/sessions/app-auth-session.d.ts +92 -0
- package/lib/sessions/app-auth-session.js +140 -160
- package/lib/sessions/app-auth-session.js.map +1 -0
- package/lib/sessions/basic-session.d.ts +56 -0
- package/lib/sessions/basic-session.js +40 -50
- package/lib/sessions/basic-session.js.map +1 -0
- package/lib/sessions/persistent-session.d.ts +96 -0
- package/lib/sessions/persistent-session.js +191 -211
- package/lib/sessions/persistent-session.js.map +1 -0
- package/lib/token-manager.d.ts +191 -0
- package/lib/token-manager.js +390 -465
- package/lib/token-manager.js.map +1 -0
- package/lib/util/config.d.ts +86 -0
- package/lib/util/config.js +124 -152
- package/lib/util/config.js.map +1 -0
- package/lib/util/errors.d.ts +50 -0
- package/lib/util/errors.js +134 -145
- package/lib/util/errors.js.map +1 -0
- package/lib/util/exponential-backoff.d.ts +11 -0
- package/lib/util/exponential-backoff.js +10 -22
- package/lib/util/exponential-backoff.js.map +1 -0
- package/lib/util/paging-iterator.d.ts +53 -0
- package/lib/util/paging-iterator.js +202 -218
- package/lib/util/paging-iterator.js.map +1 -0
- package/lib/util/url-path.d.ts +16 -0
- package/lib/util/url-path.js +20 -35
- package/lib/util/url-path.js.map +1 -0
- package/package.json +24 -9
|
@@ -1,20 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* @fileoverview Iterator for paged responses
|
|
3
4
|
*/
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
8
|
+
}) : (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
o[k2] = m[k];
|
|
11
|
+
}));
|
|
12
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
13
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
14
|
+
}) : function(o, v) {
|
|
15
|
+
o["default"] = v;
|
|
16
|
+
});
|
|
17
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
18
|
+
if (mod && mod.__esModule) return mod;
|
|
19
|
+
var result = {};
|
|
20
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
21
|
+
__setModuleDefault(result, mod);
|
|
22
|
+
return result;
|
|
23
|
+
};
|
|
24
|
+
var qs = __importStar(require("querystring"));
|
|
25
|
+
var bluebird_1 = require("bluebird");
|
|
26
|
+
var PromiseQueue = require("promise-queue");
|
|
7
27
|
// -----------------------------------------------------------------------------
|
|
8
28
|
// Typedefs
|
|
9
29
|
// -----------------------------------------------------------------------------
|
|
10
|
-
|
|
11
30
|
/**
|
|
12
31
|
* The iterator response object
|
|
13
32
|
* @typedef {Object} IteratorData
|
|
14
33
|
* @property {Array} [value] - The next set of values from the iterator
|
|
15
34
|
* @property {boolean} done - Whether the iterator is completed
|
|
16
35
|
*/
|
|
17
|
-
|
|
18
36
|
/**
|
|
19
37
|
* Iterator callback
|
|
20
38
|
* @callback IteratorCallback
|
|
@@ -22,230 +40,196 @@
|
|
|
22
40
|
* @param {IteratorData} [data] - New data from the iterator
|
|
23
41
|
* @returns {void}
|
|
24
42
|
*/
|
|
25
|
-
|
|
26
43
|
// -----------------------------------------------------------------------------
|
|
27
44
|
// Requirements
|
|
28
45
|
// -----------------------------------------------------------------------------
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
Promise = require('bluebird'),
|
|
32
|
-
PromiseQueue = require('promise-queue'),
|
|
33
|
-
errors = require('./errors');
|
|
34
|
-
|
|
35
|
-
PromiseQueue.configure(Promise);
|
|
36
|
-
|
|
46
|
+
var errors = require('./errors');
|
|
47
|
+
PromiseQueue.configure(bluebird_1.Promise);
|
|
37
48
|
// -----------------------------------------------------------------------------
|
|
38
49
|
// Private
|
|
39
50
|
// -----------------------------------------------------------------------------
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
OFFSET: 'offset'
|
|
51
|
+
var PAGING_MODES = Object.freeze({
|
|
52
|
+
MARKER: 'marker',
|
|
53
|
+
OFFSET: 'offset',
|
|
44
54
|
});
|
|
45
|
-
|
|
46
55
|
// -----------------------------------------------------------------------------
|
|
47
56
|
// Public
|
|
48
57
|
// -----------------------------------------------------------------------------
|
|
49
|
-
|
|
50
58
|
/**
|
|
51
59
|
* Asynchronous iterator for paged collections
|
|
52
60
|
*/
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
value: this.buffer.shift(),
|
|
227
|
-
done: false
|
|
228
|
-
});
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
if (this.done) {
|
|
232
|
-
|
|
233
|
-
return Promise.resolve({
|
|
234
|
-
value: undefined,
|
|
235
|
-
done: true
|
|
236
|
-
});
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
return this.queue.add(this._getData.bind(this));
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
/**
|
|
243
|
-
* Fetch the next marker
|
|
244
|
-
* @returns {string|int} String that is the next marker or int that is the next offset
|
|
245
|
-
*/
|
|
246
|
-
getNextMarker() {
|
|
247
|
-
return this.nextValue;
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
|
|
61
|
+
var PagingIterator = /** @class */ (function () {
|
|
62
|
+
/**
|
|
63
|
+
* @constructor
|
|
64
|
+
* @param {Object} response - The original API response
|
|
65
|
+
* @param {BoxClient} client - An API client to make further requests
|
|
66
|
+
* @returns {void}
|
|
67
|
+
* @throws {Error} Will throw when collection cannot be paged
|
|
68
|
+
*/
|
|
69
|
+
function PagingIterator(response /* FIXME */, client /* FIXME */) {
|
|
70
|
+
if (!PagingIterator.isIterable(response)) {
|
|
71
|
+
throw new Error('Cannot create paging iterator for non-paged response!');
|
|
72
|
+
}
|
|
73
|
+
var data = response.body;
|
|
74
|
+
if (Number.isSafeInteger(data.offset)) {
|
|
75
|
+
this.nextField = PAGING_MODES.OFFSET;
|
|
76
|
+
this.nextValue = data.offset;
|
|
77
|
+
}
|
|
78
|
+
else if (typeof data.next_marker === 'undefined') {
|
|
79
|
+
// Default to a finished marker collection when there's no field present,
|
|
80
|
+
// since some endpoints indicate completed paging this way
|
|
81
|
+
this.nextField = PAGING_MODES.MARKER;
|
|
82
|
+
this.nextValue = null;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
this.nextField = PAGING_MODES.MARKER;
|
|
86
|
+
this.nextValue = data.next_marker;
|
|
87
|
+
}
|
|
88
|
+
this.limit = data.limit || data.entries.length;
|
|
89
|
+
this.done = false;
|
|
90
|
+
var href = response.request.href.split('?')[0];
|
|
91
|
+
this.options = {
|
|
92
|
+
headers: response.request.headers,
|
|
93
|
+
qs: qs.parse(response.request.uri.query),
|
|
94
|
+
};
|
|
95
|
+
if (response.request.body) {
|
|
96
|
+
if (Object.prototype.toString.call(response.request.body) ===
|
|
97
|
+
'[object Object]') {
|
|
98
|
+
this.options.body = response.request.body;
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
this.options.body = JSON.parse(response.request.body);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// querystring.parse() makes everything a string, ensure numeric params are the correct type
|
|
105
|
+
if (this.options.qs.limit) {
|
|
106
|
+
this.options.qs.limit = parseInt(this.options.qs.limit, 10);
|
|
107
|
+
}
|
|
108
|
+
if (this.options.qs.offset) {
|
|
109
|
+
this.options.qs.offset = parseInt(this.options.qs.offset, 10);
|
|
110
|
+
}
|
|
111
|
+
delete this.options.headers.Authorization;
|
|
112
|
+
if (response.request.method === 'GET') {
|
|
113
|
+
this.fetch = client.get.bind(client, href);
|
|
114
|
+
}
|
|
115
|
+
if (response.request.method === 'POST') {
|
|
116
|
+
this.fetch = client.post.bind(client, href);
|
|
117
|
+
}
|
|
118
|
+
this.buffer = response.body.entries;
|
|
119
|
+
this.queue = new PromiseQueue(1, Infinity);
|
|
120
|
+
this._updatePaging(response);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Determine if a response is iterable
|
|
124
|
+
* @param {Object} response - The API response
|
|
125
|
+
* @returns {boolean} Whether the response is iterable
|
|
126
|
+
*/
|
|
127
|
+
PagingIterator.isIterable = function (response /* FIXME */) {
|
|
128
|
+
// POST responses for uploading a file are explicitly excluded here because, while the response is iterable,
|
|
129
|
+
// it always contains only a single entry and historically has not been handled as iterable in the SDK.
|
|
130
|
+
// This behavior is being preserved here to avoid a breaking change.
|
|
131
|
+
var UPLOAD_PATTERN = /.*upload\.box\.com.*\/content/;
|
|
132
|
+
var isGetOrPostRequest = response.request &&
|
|
133
|
+
(response.request.method === 'GET' ||
|
|
134
|
+
(response.request.method === 'POST' &&
|
|
135
|
+
!UPLOAD_PATTERN.test(response.request.uri.href))), hasEntries = response.body && Array.isArray(response.body.entries), notEventStream = response.body && !response.body.next_stream_position;
|
|
136
|
+
return Boolean(isGetOrPostRequest && hasEntries && notEventStream);
|
|
137
|
+
};
|
|
138
|
+
/**
|
|
139
|
+
* Update the paging parameters for the iterator
|
|
140
|
+
* @private
|
|
141
|
+
* @param {Object} response - The latest API response
|
|
142
|
+
* @returns {void}
|
|
143
|
+
*/
|
|
144
|
+
PagingIterator.prototype._updatePaging = function (response /* FIXME */) {
|
|
145
|
+
var data = response.body;
|
|
146
|
+
if (this.nextField === PAGING_MODES.OFFSET) {
|
|
147
|
+
this.nextValue += this.limit;
|
|
148
|
+
if (Number.isSafeInteger(data.total_count)) {
|
|
149
|
+
this.done = data.offset + this.limit >= data.total_count;
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
this.done = data.entries.length === 0;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
else if (this.nextField === PAGING_MODES.MARKER) {
|
|
156
|
+
if (data.next_marker) {
|
|
157
|
+
this.nextValue = data.next_marker;
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
this.nextValue = null;
|
|
161
|
+
this.done = true;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
if (response.request.method === 'GET') {
|
|
165
|
+
this.options.qs[this.nextField] = this.nextValue;
|
|
166
|
+
}
|
|
167
|
+
else if (response.request.method === 'POST') {
|
|
168
|
+
if (!this.options.body) {
|
|
169
|
+
this.options.body = {};
|
|
170
|
+
}
|
|
171
|
+
this.options.body[this.nextField] = this.nextValue;
|
|
172
|
+
var bodyString = JSON.stringify(this.options.body);
|
|
173
|
+
this.options.headers['content-length'] = bodyString.length;
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
/**
|
|
177
|
+
* Fetch the next page of results
|
|
178
|
+
* @returns {Promise} Promise resolving to iterator state
|
|
179
|
+
*/
|
|
180
|
+
PagingIterator.prototype._getData = function () {
|
|
181
|
+
var _this = this;
|
|
182
|
+
return this.fetch(this.options).then(function (response /* FIXME */) {
|
|
183
|
+
if (response.statusCode !== 200) {
|
|
184
|
+
throw errors.buildUnexpectedResponseError(response);
|
|
185
|
+
}
|
|
186
|
+
_this._updatePaging(response);
|
|
187
|
+
_this.buffer = _this.buffer.concat(response.body.entries);
|
|
188
|
+
if (_this.buffer.length === 0) {
|
|
189
|
+
if (_this.done) {
|
|
190
|
+
return {
|
|
191
|
+
value: undefined,
|
|
192
|
+
done: true,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
// If we didn't get any data in this page, but the paging
|
|
196
|
+
// parameters indicate that there is more data, attempt
|
|
197
|
+
// to fetch more. This occurs in multiple places in the API
|
|
198
|
+
return _this._getData();
|
|
199
|
+
}
|
|
200
|
+
return {
|
|
201
|
+
value: _this.buffer.shift(),
|
|
202
|
+
done: false,
|
|
203
|
+
};
|
|
204
|
+
});
|
|
205
|
+
};
|
|
206
|
+
/**
|
|
207
|
+
* Fetch the next page of the collection
|
|
208
|
+
* @returns {Promise} Promise resolving to iterator state
|
|
209
|
+
*/
|
|
210
|
+
PagingIterator.prototype.next = function () {
|
|
211
|
+
if (this.buffer.length > 0) {
|
|
212
|
+
return bluebird_1.Promise.resolve({
|
|
213
|
+
value: this.buffer.shift(),
|
|
214
|
+
done: false,
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
if (this.done) {
|
|
218
|
+
return bluebird_1.Promise.resolve({
|
|
219
|
+
value: undefined,
|
|
220
|
+
done: true,
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
return this.queue.add(this._getData.bind(this));
|
|
224
|
+
};
|
|
225
|
+
/**
|
|
226
|
+
* Fetch the next marker
|
|
227
|
+
* @returns {string|int} String that is the next marker or int that is the next offset
|
|
228
|
+
*/
|
|
229
|
+
PagingIterator.prototype.getNextMarker = function () {
|
|
230
|
+
return this.nextValue;
|
|
231
|
+
};
|
|
232
|
+
return PagingIterator;
|
|
233
|
+
}());
|
|
251
234
|
module.exports = PagingIterator;
|
|
235
|
+
//# sourceMappingURL=paging-iterator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paging-iterator.js","sourceRoot":"","sources":["../../src/util/paging-iterator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview URL Path Builder
|
|
3
|
+
*/
|
|
4
|
+
declare const _default: (...args: any[]) => string;
|
|
5
|
+
/**
|
|
6
|
+
* URLPath will create a full URL path from the given array of segments.
|
|
7
|
+
*
|
|
8
|
+
* It also provides the following features:
|
|
9
|
+
* - convert all segments to strings
|
|
10
|
+
* - add/remove slashes between segments, where appropriate
|
|
11
|
+
* - encode each path segment to prevent path manipulation
|
|
12
|
+
*
|
|
13
|
+
* @name URLPath
|
|
14
|
+
* @returns {string} Return a valid URL path comprised of the given path segments
|
|
15
|
+
*/
|
|
16
|
+
export = _default;
|
package/lib/util/url-path.js
CHANGED
|
@@ -1,13 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* @fileoverview URL Path Builder
|
|
3
4
|
*/
|
|
4
|
-
|
|
5
|
-
'use strict';
|
|
6
|
-
|
|
7
5
|
// ------------------------------------------------------------------------------
|
|
8
6
|
// Private
|
|
9
7
|
// ------------------------------------------------------------------------------
|
|
10
|
-
|
|
11
8
|
// Pattern to check for relative paths
|
|
12
9
|
var PATTERN = /\/\.+/;
|
|
13
10
|
/**
|
|
@@ -20,36 +17,24 @@ var PATTERN = /\/\.+/;
|
|
|
20
17
|
* @private
|
|
21
18
|
*/
|
|
22
19
|
function trimSlashes(segment) {
|
|
23
|
-
|
|
20
|
+
return segment.replace(/^\/|\/$/g, '');
|
|
24
21
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
module.exports = function urlPath(/* arguments*/) {
|
|
43
|
-
var args = Array.prototype.slice.call(arguments);
|
|
44
|
-
var path = args.map(x => String(x))
|
|
45
|
-
.map(x => {
|
|
46
|
-
var trimmedX = trimSlashes(x);
|
|
47
|
-
if (PATTERN.test(trimmedX)) {
|
|
48
|
-
throw new Error(`An invalid path parameter exists in ${trimmedX}. Relative path parameters cannot be passed.`);
|
|
49
|
-
}
|
|
50
|
-
return trimmedX;
|
|
51
|
-
})
|
|
52
|
-
.map(x => encodeURIComponent(x))
|
|
53
|
-
.join('/');
|
|
54
|
-
return `/${path}`;
|
|
22
|
+
module.exports = function urlPath() {
|
|
23
|
+
var args = [];
|
|
24
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
25
|
+
args[_i] = arguments[_i];
|
|
26
|
+
}
|
|
27
|
+
var path = args
|
|
28
|
+
.map(function (x) { return String(x); })
|
|
29
|
+
.map(function (x) {
|
|
30
|
+
var trimmedX = trimSlashes(x);
|
|
31
|
+
if (PATTERN.test(trimmedX)) {
|
|
32
|
+
throw new Error("An invalid path parameter exists in " + trimmedX + ". Relative path parameters cannot be passed.");
|
|
33
|
+
}
|
|
34
|
+
return trimmedX;
|
|
35
|
+
})
|
|
36
|
+
.map(function (x) { return encodeURIComponent(x); })
|
|
37
|
+
.join('/');
|
|
38
|
+
return "/" + path;
|
|
55
39
|
};
|
|
40
|
+
//# sourceMappingURL=url-path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url-path.js","sourceRoot":"","sources":["../../src/util/url-path.ts"],"names":[],"mappings":";AAAA;;GAEG;AAEH,iFAAiF;AACjF,UAAU;AACV,iFAAiF;AAEjF,sCAAsC;AACtC,IAAM,OAAO,GAAG,OAAO,CAAC;AAExB;;;;;;;;GAQG;AACH,SAAS,WAAW,CAAC,OAAe;IACnC,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AACxC,CAAC;AAiBD,iBAAS,SAAS,OAAO;IAAC,cAAc;SAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;QAAd,yBAAc;;IACvC,IAAM,IAAI,GAAG,IAAI;SACf,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,MAAM,CAAC,CAAC,CAAC,EAAT,CAAS,CAAC;SACrB,GAAG,CAAC,UAAC,CAAC;QACN,IAAI,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;YAC3B,MAAM,IAAI,KAAK,CACd,yCAAuC,QAAQ,iDAA8C,CAC7F,CAAC;SACF;QACD,OAAO,QAAQ,CAAC;IACjB,CAAC,CAAC;SACD,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,kBAAkB,CAAC,CAAC,CAAC,EAArB,CAAqB,CAAC;SACjC,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,OAAO,MAAI,IAAM,CAAC;AACnB,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "box-node-sdk",
|
|
3
3
|
"author": "Box <oss@box.com>",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.37.2",
|
|
5
5
|
"description": "Official SDK for Box Plaform APIs",
|
|
6
6
|
"license": "Apache-2.0",
|
|
7
7
|
"repository": {
|
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
"main": "./lib/box-node-sdk.js",
|
|
24
24
|
"scripts": {
|
|
25
25
|
"test": "node Makefile.js",
|
|
26
|
+
"build": "node Makefile.js build",
|
|
26
27
|
"lint": "node Makefile.js lint",
|
|
27
28
|
"docs": "node Makefile.js docs",
|
|
28
29
|
"docs-dev": "node Makefile.js docsDev",
|
|
@@ -32,40 +33,54 @@
|
|
|
32
33
|
"major": "node Makefile.js major"
|
|
33
34
|
},
|
|
34
35
|
"dependencies": {
|
|
36
|
+
"@types/bluebird": "^3.5.35",
|
|
37
|
+
"@types/node": "^15.3.1",
|
|
35
38
|
"ajv": "^6.12.3",
|
|
36
39
|
"bluebird": "^3.7.1",
|
|
37
40
|
"http-status": "^1.4.1",
|
|
38
41
|
"jsonwebtoken": "^8.5.1",
|
|
39
42
|
"merge-options": "^1.0.1",
|
|
40
43
|
"promise-queue": "^2.2.3",
|
|
41
|
-
"proxy-agent": "^
|
|
44
|
+
"proxy-agent": "^4.0.0",
|
|
42
45
|
"request": "^2.88.0",
|
|
43
46
|
"url-template": "^2.0.8",
|
|
44
47
|
"uuid": "^3.3.3"
|
|
45
48
|
},
|
|
46
49
|
"devDependencies": {
|
|
50
|
+
"@types/jsonwebtoken": "^8.5.1",
|
|
51
|
+
"@types/promise-queue": "^2.2.0",
|
|
52
|
+
"@types/request": "^2.48.5",
|
|
53
|
+
"@types/url-template": "^2.0.28",
|
|
54
|
+
"@types/uuid": "^8.3.0",
|
|
47
55
|
"chai": "^4.2.0",
|
|
48
|
-
"coveralls": "^3.0
|
|
56
|
+
"coveralls": "^3.1.0",
|
|
49
57
|
"eslint": "^4.19.1",
|
|
50
58
|
"eslint-plugin-node": "^6.0.1",
|
|
51
59
|
"eslint-plugin-promise": "^3.8.0",
|
|
52
60
|
"eslint-plugin-unicorn": "^4.0.3",
|
|
53
61
|
"istanbul": "^0.4.3",
|
|
54
62
|
"jsdoc": "^3.6.3",
|
|
63
|
+
"jsonlint": "^1.6.3",
|
|
55
64
|
"jsonlint2": "^1.7.1",
|
|
56
65
|
"leche": "^2.3.0",
|
|
57
|
-
"mocha": "^
|
|
66
|
+
"mocha": "^6.0.0",
|
|
58
67
|
"mockery": "^2.1.0",
|
|
59
68
|
"nock": "^9.6.1",
|
|
60
|
-
"np": "^
|
|
61
|
-
"npm-
|
|
62
|
-
"
|
|
69
|
+
"np": "^7.2.0",
|
|
70
|
+
"npm-force-resolutions": "0.0.3",
|
|
71
|
+
"npm-upgrade": "^3.0.0",
|
|
72
|
+
"nyc": "^14.0.0",
|
|
63
73
|
"shelljs": "^0.8.3",
|
|
64
74
|
"shelljs-nodecli": "^0.1.1",
|
|
65
|
-
"sinon": "^7.5.0"
|
|
75
|
+
"sinon": "^7.5.0",
|
|
76
|
+
"typescript": "^4.2.4"
|
|
66
77
|
},
|
|
67
78
|
"files": [
|
|
68
79
|
"config",
|
|
69
80
|
"lib"
|
|
70
|
-
]
|
|
81
|
+
],
|
|
82
|
+
"resolutions": {
|
|
83
|
+
"handlebars": "4.5.3",
|
|
84
|
+
"minimist": "1.2.5"
|
|
85
|
+
}
|
|
71
86
|
}
|